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