-
Notifications
You must be signed in to change notification settings - Fork 0
/
csv2vcf.php
127 lines (107 loc) · 2.39 KB
/
csv2vcf.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
/**
* This script generates a VCF file out of a CSV file
*
* @author Nicolas Christener <[email protected]>
*/
// input:
/*
* Input file is a CSV with the following format:
* "Field1"; "Field2"; ...
*
* In our case, the file has the following fields:
* 0 => Anrede
* 1 => Vorname
* 2 => Nachname
* 3 => Adresse
* 4 => PLZ
* 5 => Ort
* 6 => Beitrag
* 7 => Kategorie
* 8 => STV
* 9 => Gruppe
* 10 => STV Kat
* 11 => Funktion
* 12 => Mail
*/
// output:
/* VERSION:3.0
* N:Nicolas;Christener;;;
* FN:Nicolas Christener
* CATEGORIES:foo,bar
* EMAIL;TYPE=INTERNET,OTHER:[email protected]
* END:VCARD
*/
require_once 'CsvIterator.class.php';
$iterator = new CsvIterator('adr.csv', ',');
$allGroups = array();
foreach($iterator as $lineCount => $line) {
//print_r($line);
if($lineCount === 0) {
continue;
}
// jump over entries w/o e-mail adr
if($line[12] === '') {
continue;
}
$groups = array();
/* the categories have some encoded special info
* i.e 'E/Aktivmitglied' = 'Ehrenmitglied' and 'Aktivmitglied'
*/
if (preg_match('/([AEFLV])\/(\S+)/', $line[9], $matches)) {
// person is in two groups
if ($matches[1] === 'A') {
$groups[] = 'Aktivmitglied';
}
elseif ($matches[1] === 'E') {
$groups[] = 'Ehrenmitglied';
}
elseif ($matches[1] === 'F') {
$groups[] = 'Freimitglied';
}
elseif ($matches[1] === 'L') {
$groups[] = 'Leiter_Team';
}
elseif ($matches[1] === 'V') {
$groups[] = 'Vorstand';
}
$groups[] = $matches[2];
}
else {
if($line[9] !== '') {
$groups[] = $line[9];
}
}
// some are empty -> unknown
if (count($groups) === 0) {
$groups[] = 'Unbekannt';
}
// Because evolution has global groups, we prefix the groups to better find them
foreach($groups as $index => $group) {
$groups[$index] = sprintf('TVB_%s', $group);
}
/* We need to add the groups manually to use
* them as filter therefore we need to know all the used groups.. collect
* them
*/
foreach($groups as $index => $group) {
$allGroups[$group] = $group;
}
$string = sprintf(
"BEGIN:VCARD\n".
"VERSION:3.0\n".
"N:%s;%s;;;\n".
"FN:%s\n".
"CATEGORIES:%s\n".
"EMAIL;TYPE=INTERNET,OTHER:%s\n".
"END:VCARD\n\n",
$line[1],
$line[2],
$line[1].' '.$line[2],
implode(',', $groups),
$line[12]
);
file_put_contents('import.vcf', $string, FILE_APPEND);
}
echo "add those group to evolution:\n";
print_r($allGroups);