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 = [
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 = array(
68     "nl" => array(
69         "country" => "Netherlands",
70         "boys" => array(
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" => array(
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" => array(
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" => array(
123         "country" => "United States",
124         "boys" => array(
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" => array(
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" => array(
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(array(
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");
242