xref: /plugin/davcal/vendor/sabre/vobject/bin/generateicalendardata.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler#!/usr/bin/env php
2*a1a3b679SAndreas Boehler<?php
3*a1a3b679SAndreas Boehler
4*a1a3b679SAndreas Boehleruse Sabre\VObject;
5*a1a3b679SAndreas Boehler
6*a1a3b679SAndreas Boehlerif ($argc<2) {
7*a1a3b679SAndreas Boehler    $cmd = $argv[0];
8*a1a3b679SAndreas Boehler    fwrite(STDERR, <<<HI
9*a1a3b679SAndreas BoehlerFruux test data generator
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas BoehlerThis script generates a lot of test data. This is used for profiling and stuff.
12*a1a3b679SAndreas BoehlerCurrently it just generates events in a single calendar.
13*a1a3b679SAndreas Boehler
14*a1a3b679SAndreas BoehlerThe iCalendar output goes to stdout. Other messages to stderr.
15*a1a3b679SAndreas Boehler
16*a1a3b679SAndreas Boehler{$cmd} [events]
17*a1a3b679SAndreas Boehler
18*a1a3b679SAndreas Boehler
19*a1a3b679SAndreas BoehlerHI
20*a1a3b679SAndreas Boehler    );
21*a1a3b679SAndreas Boehler    die();
22*a1a3b679SAndreas Boehler}
23*a1a3b679SAndreas Boehler
24*a1a3b679SAndreas Boehler$events = 100;
25*a1a3b679SAndreas Boehler
26*a1a3b679SAndreas Boehlerif (isset($argv[1])) $events = (int)$argv[1];
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehlerinclude __DIR__ . '/../vendor/autoload.php';
29*a1a3b679SAndreas Boehler
30*a1a3b679SAndreas Boehlerfwrite(STDERR, "Generating " . $events . " events\n");
31*a1a3b679SAndreas Boehler
32*a1a3b679SAndreas Boehler$currentDate = new DateTime('-' . round($events/2) .  ' days');
33*a1a3b679SAndreas Boehler
34*a1a3b679SAndreas Boehler$calendar = VObject\Component::create('VCALENDAR');
35*a1a3b679SAndreas Boehler$calendar->version = '2.0';
36*a1a3b679SAndreas Boehler$calendar->calscale = 'GREGORIAN';
37*a1a3b679SAndreas Boehler
38*a1a3b679SAndreas Boehler$ii=0;
39*a1a3b679SAndreas Boehler
40*a1a3b679SAndreas Boehlerwhile($ii < $events) {
41*a1a3b679SAndreas Boehler
42*a1a3b679SAndreas Boehler    $ii++;
43*a1a3b679SAndreas Boehler
44*a1a3b679SAndreas Boehler    $event = VObject\Component::create('VEVENT');
45*a1a3b679SAndreas Boehler    $event->DTSTART = 'bla';
46*a1a3b679SAndreas Boehler    $event->SUMMARY = 'Event #' . $ii;
47*a1a3b679SAndreas Boehler    $event->UID = md5(microtime(true));
48*a1a3b679SAndreas Boehler
49*a1a3b679SAndreas Boehler    $doctorRandom = mt_rand(1,1000);
50*a1a3b679SAndreas Boehler
51*a1a3b679SAndreas Boehler    switch($doctorRandom) {
52*a1a3b679SAndreas Boehler        // All-day event
53*a1a3b679SAndreas Boehler        case 1 :
54*a1a3b679SAndreas Boehler            $event->DTEND = 'bla';
55*a1a3b679SAndreas Boehler            $dtStart = clone $currentDate;
56*a1a3b679SAndreas Boehler            $dtEnd = clone $currentDate;
57*a1a3b679SAndreas Boehler            $dtEnd->modify('+' . mt_rand(1,3) . ' days');
58*a1a3b679SAndreas Boehler            $event->DTSTART->setDateTime($dtStart, VObject\Property\DateTime::DATE);
59*a1a3b679SAndreas Boehler            $event->DTEND->setDateTime($dtEnd, VObject\Property\DateTime::DATE);
60*a1a3b679SAndreas Boehler            break;
61*a1a3b679SAndreas Boehler        case 2 :
62*a1a3b679SAndreas Boehler            $event->RRULE = 'FREQ=DAILY;COUNT=' . mt_rand(1,10);
63*a1a3b679SAndreas Boehler            // No break intentional
64*a1a3b679SAndreas Boehler        default :
65*a1a3b679SAndreas Boehler            $dtStart = clone $currentDate;
66*a1a3b679SAndreas Boehler            $dtStart->setTime(mt_rand(1,23), mt_rand(0,59), mt_rand(0,59));
67*a1a3b679SAndreas Boehler            $event->DTSTART->setDateTime($dtStart, VObject\Property\DateTime::UTC);
68*a1a3b679SAndreas Boehler            $event->DURATION = 'PT'.mt_rand(1,3).'H';
69*a1a3b679SAndreas Boehler            break;
70*a1a3b679SAndreas Boehler
71*a1a3b679SAndreas Boehler    }
72*a1a3b679SAndreas Boehler
73*a1a3b679SAndreas Boehler    $calendar->add($event);
74*a1a3b679SAndreas Boehler    $currentDate->modify('+ ' . mt_rand(0,3) . ' days');
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler}
77*a1a3b679SAndreas Boehlerfwrite(STDERR, "Validating\n");
78*a1a3b679SAndreas Boehler
79*a1a3b679SAndreas Boehler$result = $calendar->validate();
80*a1a3b679SAndreas Boehlerif ($result) {
81*a1a3b679SAndreas Boehler    fwrite(STDERR, "Errors!\n");
82*a1a3b679SAndreas Boehler    fwrite(STDERR, print_r($result,true));
83*a1a3b679SAndreas Boehler    die(-1);
84*a1a3b679SAndreas Boehler}
85*a1a3b679SAndreas Boehler
86*a1a3b679SAndreas Boehlerfwrite(STDERR, "Serializing this beast\n");
87*a1a3b679SAndreas Boehler
88*a1a3b679SAndreas Boehlerecho $calendar->serialize();
89*a1a3b679SAndreas Boehler
90*a1a3b679SAndreas Boehlerfwrite(STDERR, "done.\n");
91*a1a3b679SAndreas Boehler
92