7
|
1 #!/usr/bin/env php
|
|
2 <?php
|
|
3
|
|
4 namespace Sabre\VObject;
|
|
5
|
|
6 // This sucks.. we have to try to find the composer autoloader. But chances
|
|
7 // are, we can't find it this way. So we'll do our bestest
|
|
8 $paths = array(
|
|
9 __DIR__ . '/../vendor/autoload.php', // In case vobject is cloned directly
|
|
10 __DIR__ . '/../../../autoload.php', // In case vobject is a composer dependency.
|
|
11 );
|
|
12
|
|
13 foreach($paths as $path) {
|
|
14 if (file_exists($path)) {
|
|
15 include $path;
|
|
16 break;
|
|
17 }
|
|
18 }
|
|
19
|
|
20 if (!class_exists('Sabre\\VObject\\Version')) {
|
|
21 fwrite(STDERR, "Composer autoloader could not be properly loaded.\n");
|
|
22 die(1);
|
|
23 }
|
|
24
|
|
25 if ($argc < 2) {
|
|
26
|
|
27 $version = Version::VERSION;
|
|
28
|
|
29 $help = <<<HI
|
|
30 sabre/vobject $version
|
|
31 Usage:
|
|
32 generate_vcards [count]
|
|
33
|
|
34 Options:
|
|
35 count The number of random vcards to generate
|
|
36
|
|
37 Examples:
|
|
38 generate_vcards 1000 > testdata.vcf
|
|
39
|
|
40 HI;
|
|
41
|
|
42 fwrite(STDERR, $help);
|
|
43 exit(2);
|
|
44 }
|
|
45
|
|
46 $count = (int)$argv[1];
|
|
47 if ($count < 1) {
|
|
48 fwrite(STDERR, "Count must be at least 1\n");
|
|
49 exit(2);
|
|
50 }
|
|
51
|
|
52 fwrite(STDERR, "sabre/vobject " . Version::VERSION . "\n");
|
|
53 fwrite(STDERR, "Generating " . $count . " vcards in vCard 4.0 format\n");
|
|
54
|
|
55 /**
|
|
56 * The following list is just some random data we compiled from various
|
|
57 * sources online.
|
|
58 *
|
|
59 * Very little thought went into compiling this list, and certainly nothing
|
|
60 * political or ethical.
|
|
61 *
|
|
62 * We would _love_ more additions to this to add more variation to this list.
|
|
63 *
|
|
64 * Send us PR's and don't be shy adding your own first and last name for fun.
|
|
65 */
|
|
66
|
|
67 $sets = [
|
|
68 "nl" => [
|
|
69 "country" => "Netherlands",
|
|
70 "boys" => [
|
|
71 "Anno",
|
|
72 "Bram",
|
|
73 "Daan",
|
|
74 "Evert",
|
|
75 "Finn",
|
|
76 "Jayden",
|
|
77 "Jens",
|
|
78 "Jesse",
|
|
79 "Levi",
|
|
80 "Lucas",
|
|
81 "Luuk",
|
|
82 "Milan",
|
|
83 "René",
|
|
84 "Sem",
|
|
85 "Sibrand",
|
|
86 "Willem",
|
|
87 ],
|
|
88 "girls" => [
|
|
89 "Celia",
|
|
90 "Emma",
|
|
91 "Fenna",
|
|
92 "Geke",
|
|
93 "Inge",
|
|
94 "Julia",
|
|
95 "Lisa",
|
|
96 "Lotte",
|
|
97 "Mila",
|
|
98 "Sara",
|
|
99 "Sophie",
|
|
100 "Tess",
|
|
101 "Zoë",
|
|
102 ],
|
|
103 "last" => [
|
|
104 "Bakker",
|
|
105 "Bos",
|
|
106 "De Boer",
|
|
107 "De Groot",
|
|
108 "De Jong",
|
|
109 "De Vries",
|
|
110 "Jansen",
|
|
111 "Janssen",
|
|
112 "Meyer",
|
|
113 "Mulder",
|
|
114 "Peters",
|
|
115 "Smit",
|
|
116 "Van Dijk",
|
|
117 "Van den Berg",
|
|
118 "Visser",
|
|
119 "Vos",
|
|
120 ],
|
|
121 ],
|
|
122 "us" => [
|
|
123 "country" => "United States",
|
|
124 "boys" => [
|
|
125 "Aiden",
|
|
126 "Alexander",
|
|
127 "Charles",
|
|
128 "David",
|
|
129 "Ethan",
|
|
130 "Jacob",
|
|
131 "James",
|
|
132 "Jayden",
|
|
133 "John",
|
|
134 "Joseph",
|
|
135 "Liam",
|
|
136 "Mason",
|
|
137 "Michael",
|
|
138 "Noah",
|
|
139 "Richard",
|
|
140 "Robert",
|
|
141 "Thomas",
|
|
142 "William",
|
|
143 ],
|
|
144 "girls" => [
|
|
145 "Ava",
|
|
146 "Barbara",
|
|
147 "Chloe",
|
|
148 "Dorothy",
|
|
149 "Elizabeth",
|
|
150 "Emily",
|
|
151 "Emma",
|
|
152 "Isabella",
|
|
153 "Jennifer",
|
|
154 "Lily",
|
|
155 "Linda",
|
|
156 "Margaret",
|
|
157 "Maria",
|
|
158 "Mary",
|
|
159 "Mia",
|
|
160 "Olivia",
|
|
161 "Patricia",
|
|
162 "Roxy",
|
|
163 "Sophia",
|
|
164 "Susan",
|
|
165 "Zoe",
|
|
166 ],
|
|
167 "last" => [
|
|
168 "Smith",
|
|
169 "Johnson",
|
|
170 "Williams",
|
|
171 "Jones",
|
|
172 "Brown",
|
|
173 "Davis",
|
|
174 "Miller",
|
|
175 "Wilson",
|
|
176 "Moore",
|
|
177 "Taylor",
|
|
178 "Anderson",
|
|
179 "Thomas",
|
|
180 "Jackson",
|
|
181 "White",
|
|
182 "Harris",
|
|
183 "Martin",
|
|
184 "Thompson",
|
|
185 "Garcia",
|
|
186 "Martinez",
|
|
187 "Robinson",
|
|
188 ],
|
|
189 ],
|
|
190 ];
|
|
191
|
|
192 $current = 0;
|
|
193
|
|
194 $r = function($arr) {
|
|
195
|
|
196 return $arr[mt_rand(0,count($arr)-1)];
|
|
197
|
|
198 };
|
|
199
|
|
200 $bdayStart = strtotime('-85 years');
|
|
201 $bdayEnd = strtotime('-20 years');
|
|
202
|
|
203 while($current < $count) {
|
|
204
|
|
205 $current++;
|
|
206 fwrite(STDERR, "\033[100D$current/$count");
|
|
207
|
|
208 $country = array_rand($sets);
|
|
209 $gender = mt_rand(0,1)?'girls':'boys';
|
|
210
|
|
211 $vcard = new Component\VCard([
|
|
212 'VERSION' => '4.0',
|
|
213 'FN' => $r($sets[$country][$gender]) . ' ' . $r($sets[$country]['last']),
|
|
214 'UID' => UUIDUtil::getUUID(),
|
|
215 ]);
|
|
216
|
|
217 $bdayRatio = mt_rand(0,9);
|
|
218
|
|
219 if($bdayRatio < 2) {
|
|
220 // 20% has a birthday property with a full date
|
|
221 $dt = new \DateTime('@' . mt_rand($bdayStart, $bdayEnd));
|
|
222 $vcard->add('BDAY', $dt->format('Ymd'));
|
|
223
|
|
224 } elseif ($bdayRatio < 3) {
|
|
225 // 10% we only know the month and date of
|
|
226 $dt = new \DateTime('@' . mt_rand($bdayStart, $bdayEnd));
|
|
227 $vcard->add('BDAY', '--' . $dt->format('md'));
|
|
228 }
|
|
229 if ($result = $vcard->validate()) {
|
|
230 ob_start();
|
|
231 echo "\nWe produced an invalid vcard somehow!\n";
|
|
232 foreach($result as $message) {
|
|
233 echo " " . $message['message'] . "\n";
|
|
234 }
|
|
235 fwrite(STDERR, ob_get_clean());
|
|
236 }
|
|
237 echo $vcard->serialize();
|
|
238
|
|
239 }
|
|
240
|
|
241 fwrite(STDERR,"\nDone.\n");
|