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