1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass TestUtil { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler static function getBackend() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler $backend = new Backend\PDO(self::getSQLiteDB()); 10*a1a3b679SAndreas Boehler return $backend; 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler } 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler static function getSQLiteDB() { 15*a1a3b679SAndreas Boehler 16*a1a3b679SAndreas Boehler if (file_exists(SABRE_TEMPDIR . '/testdb.sqlite')) 17*a1a3b679SAndreas Boehler unlink(SABRE_TEMPDIR . '/testdb.sqlite'); 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler $pdo = new \PDO('sqlite:' . SABRE_TEMPDIR . '/testdb.sqlite'); 20*a1a3b679SAndreas Boehler $pdo->setAttribute(\PDO::ATTR_ERRMODE,\PDO::ERRMODE_EXCEPTION); 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler // Yup this is definitely not 'fool proof', but good enough for now. 23*a1a3b679SAndreas Boehler $queries = explode(';', file_get_contents(__DIR__ . '/../../../examples/sql/sqlite.calendars.sql')); 24*a1a3b679SAndreas Boehler foreach($queries as $query) { 25*a1a3b679SAndreas Boehler $pdo->exec($query); 26*a1a3b679SAndreas Boehler } 27*a1a3b679SAndreas Boehler // Inserting events through a backend class. 28*a1a3b679SAndreas Boehler $backend = new Backend\PDO($pdo); 29*a1a3b679SAndreas Boehler $calendarId = $backend->createCalendar( 30*a1a3b679SAndreas Boehler 'principals/user1', 31*a1a3b679SAndreas Boehler 'UUID-123467', 32*a1a3b679SAndreas Boehler array( 33*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'user1 calendar', 34*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description', 35*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-order' => '1', 36*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-color' => '#FF0000', 37*a1a3b679SAndreas Boehler ) 38*a1a3b679SAndreas Boehler ); 39*a1a3b679SAndreas Boehler $backend->createCalendar( 40*a1a3b679SAndreas Boehler 'principals/user1', 41*a1a3b679SAndreas Boehler 'UUID-123468', 42*a1a3b679SAndreas Boehler array( 43*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'user1 calendar2', 44*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description', 45*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-order' => '1', 46*a1a3b679SAndreas Boehler '{http://apple.com/ns/ical/}calendar-color' => '#FF0000', 47*a1a3b679SAndreas Boehler ) 48*a1a3b679SAndreas Boehler ); 49*a1a3b679SAndreas Boehler $backend->createCalendarObject($calendarId, 'UUID-2345', self::getTestCalendarData()); 50*a1a3b679SAndreas Boehler return $pdo; 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler } 53*a1a3b679SAndreas Boehler 54*a1a3b679SAndreas Boehler static function getTestCalendarData($type = 1) { 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler $calendarData = 'BEGIN:VCALENDAR 57*a1a3b679SAndreas BoehlerVERSION:2.0 58*a1a3b679SAndreas BoehlerPRODID:-//Apple Inc.//iCal 4.0.1//EN 59*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 60*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 61*a1a3b679SAndreas BoehlerTZID:Asia/Seoul 62*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT 63*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0900 64*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYMONTH=5;BYDAY=2SU 65*a1a3b679SAndreas BoehlerDTSTART:19870510T000000 66*a1a3b679SAndreas BoehlerTZNAME:GMT+09:00 67*a1a3b679SAndreas BoehlerTZOFFSETTO:+1000 68*a1a3b679SAndreas BoehlerEND:DAYLIGHT 69*a1a3b679SAndreas BoehlerBEGIN:STANDARD 70*a1a3b679SAndreas BoehlerTZOFFSETFROM:+1000 71*a1a3b679SAndreas BoehlerDTSTART:19881009T000000 72*a1a3b679SAndreas BoehlerTZNAME:GMT+09:00 73*a1a3b679SAndreas BoehlerTZOFFSETTO:+0900 74*a1a3b679SAndreas BoehlerEND:STANDARD 75*a1a3b679SAndreas BoehlerEND:VTIMEZONE 76*a1a3b679SAndreas BoehlerBEGIN:VEVENT 77*a1a3b679SAndreas BoehlerCREATED:20100225T154229Z 78*a1a3b679SAndreas BoehlerUID:39A6B5ED-DD51-4AFE-A683-C35EE3749627 79*a1a3b679SAndreas BoehlerTRANSP:TRANSPARENT 80*a1a3b679SAndreas BoehlerSUMMARY:Something here 81*a1a3b679SAndreas BoehlerDTSTAMP:20100228T130202Z'; 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler switch($type) { 84*a1a3b679SAndreas Boehler case 1 : 85*a1a3b679SAndreas Boehler $calendarData.="\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDTEND;TZID=Asia/Seoul:20100223T070000\n"; 86*a1a3b679SAndreas Boehler break; 87*a1a3b679SAndreas Boehler case 2 : 88*a1a3b679SAndreas Boehler $calendarData.="\nDTSTART:20100223T060000\nDTEND:20100223T070000\n"; 89*a1a3b679SAndreas Boehler break; 90*a1a3b679SAndreas Boehler case 3 : 91*a1a3b679SAndreas Boehler $calendarData.="\nDTSTART;VALUE=DATE:20100223\nDTEND;VALUE=DATE:20100223\n"; 92*a1a3b679SAndreas Boehler break; 93*a1a3b679SAndreas Boehler case 4 : 94*a1a3b679SAndreas Boehler $calendarData.="\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDURATION:PT1H\n"; 95*a1a3b679SAndreas Boehler break; 96*a1a3b679SAndreas Boehler case 5 : 97*a1a3b679SAndreas Boehler $calendarData.="\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDURATION:-P5D\n"; 98*a1a3b679SAndreas Boehler break; 99*a1a3b679SAndreas Boehler case 6 : 100*a1a3b679SAndreas Boehler $calendarData.="\nDTSTART;VALUE=DATE:20100223\n"; 101*a1a3b679SAndreas Boehler break; 102*a1a3b679SAndreas Boehler case 7 : 103*a1a3b679SAndreas Boehler $calendarData.="\nDTSTART;VALUE=DATETIME:20100223T060000\n"; 104*a1a3b679SAndreas Boehler break; 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler // No DTSTART, so intentionally broken 107*a1a3b679SAndreas Boehler case 'X' : 108*a1a3b679SAndreas Boehler $calendarData.="\n"; 109*a1a3b679SAndreas Boehler break; 110*a1a3b679SAndreas Boehler } 111*a1a3b679SAndreas Boehler 112*a1a3b679SAndreas Boehler 113*a1a3b679SAndreas Boehler $calendarData.='ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com 114*a1a3b679SAndreas BoehlerSEQUENCE:2 115*a1a3b679SAndreas BoehlerEND:VEVENT 116*a1a3b679SAndreas BoehlerEND:VCALENDAR'; 117*a1a3b679SAndreas Boehler 118*a1a3b679SAndreas Boehler return $calendarData; 119*a1a3b679SAndreas Boehler 120*a1a3b679SAndreas Boehler } 121*a1a3b679SAndreas Boehler 122*a1a3b679SAndreas Boehler static function getTestTODO($type = 'due') { 123*a1a3b679SAndreas Boehler 124*a1a3b679SAndreas Boehler switch($type) { 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler case 'due' : 127*a1a3b679SAndreas Boehler $extra = "DUE:20100104T000000Z"; 128*a1a3b679SAndreas Boehler break; 129*a1a3b679SAndreas Boehler case 'due2' : 130*a1a3b679SAndreas Boehler $extra = "DUE:20060104T000000Z"; 131*a1a3b679SAndreas Boehler break; 132*a1a3b679SAndreas Boehler case 'due_date' : 133*a1a3b679SAndreas Boehler $extra = "DUE;VALUE=DATE:20060104"; 134*a1a3b679SAndreas Boehler break; 135*a1a3b679SAndreas Boehler case 'due_tz' : 136*a1a3b679SAndreas Boehler $extra = "DUE;TZID=Asia/Seoul:20060104T000000Z"; 137*a1a3b679SAndreas Boehler break; 138*a1a3b679SAndreas Boehler case 'due_dtstart' : 139*a1a3b679SAndreas Boehler $extra = "DTSTART:20050223T060000Z\nDUE:20060104T000000Z"; 140*a1a3b679SAndreas Boehler break; 141*a1a3b679SAndreas Boehler case 'due_dtstart2' : 142*a1a3b679SAndreas Boehler $extra = "DTSTART:20090223T060000Z\nDUE:20100104T000000Z"; 143*a1a3b679SAndreas Boehler break; 144*a1a3b679SAndreas Boehler case 'dtstart' : 145*a1a3b679SAndreas Boehler $extra = 'DTSTART:20100223T060000Z'; 146*a1a3b679SAndreas Boehler break; 147*a1a3b679SAndreas Boehler case 'dtstart2' : 148*a1a3b679SAndreas Boehler $extra = 'DTSTART:20060223T060000Z'; 149*a1a3b679SAndreas Boehler break; 150*a1a3b679SAndreas Boehler case 'dtstart_date' : 151*a1a3b679SAndreas Boehler $extra = 'DTSTART;VALUE=DATE:20100223'; 152*a1a3b679SAndreas Boehler break; 153*a1a3b679SAndreas Boehler case 'dtstart_tz' : 154*a1a3b679SAndreas Boehler $extra = 'DTSTART;TZID=Asia/Seoul:20100223T060000Z'; 155*a1a3b679SAndreas Boehler break; 156*a1a3b679SAndreas Boehler case 'dtstart_duration' : 157*a1a3b679SAndreas Boehler $extra = "DTSTART:20061023T060000Z\nDURATION:PT1H"; 158*a1a3b679SAndreas Boehler break; 159*a1a3b679SAndreas Boehler case 'dtstart_duration2' : 160*a1a3b679SAndreas Boehler $extra = "DTSTART:20101023T060000Z\nDURATION:PT1H"; 161*a1a3b679SAndreas Boehler break; 162*a1a3b679SAndreas Boehler case 'completed' : 163*a1a3b679SAndreas Boehler $extra = 'COMPLETED:20060601T000000Z'; 164*a1a3b679SAndreas Boehler break; 165*a1a3b679SAndreas Boehler case 'completed2' : 166*a1a3b679SAndreas Boehler $extra = 'COMPLETED:20090601T000000Z'; 167*a1a3b679SAndreas Boehler break; 168*a1a3b679SAndreas Boehler case 'created' : 169*a1a3b679SAndreas Boehler $extra = 'CREATED:20060601T000000Z'; 170*a1a3b679SAndreas Boehler break; 171*a1a3b679SAndreas Boehler case 'created2' : 172*a1a3b679SAndreas Boehler $extra = 'CREATED:20090601T000000Z'; 173*a1a3b679SAndreas Boehler break; 174*a1a3b679SAndreas Boehler case 'completedcreated' : 175*a1a3b679SAndreas Boehler $extra = "CREATED:20060601T000000Z\nCOMPLETED:20070101T000000Z"; 176*a1a3b679SAndreas Boehler break; 177*a1a3b679SAndreas Boehler case 'completedcreated2' : 178*a1a3b679SAndreas Boehler $extra = "CREATED:20090601T000000Z\nCOMPLETED:20100101T000000Z"; 179*a1a3b679SAndreas Boehler break; 180*a1a3b679SAndreas Boehler case 'notime' : 181*a1a3b679SAndreas Boehler $extra = 'X-FILLER:oh hello'; 182*a1a3b679SAndreas Boehler break; 183*a1a3b679SAndreas Boehler default : 184*a1a3b679SAndreas Boehler throw new Exception('Unknown type: ' . $type); 185*a1a3b679SAndreas Boehler 186*a1a3b679SAndreas Boehler } 187*a1a3b679SAndreas Boehler 188*a1a3b679SAndreas Boehler $todo = 'BEGIN:VCALENDAR 189*a1a3b679SAndreas BoehlerVERSION:2.0 190*a1a3b679SAndreas BoehlerPRODID:-//Example Corp.//CalDAV Client//EN 191*a1a3b679SAndreas BoehlerBEGIN:VTODO 192*a1a3b679SAndreas BoehlerDTSTAMP:20060205T235335Z 193*a1a3b679SAndreas Boehler' . $extra . ' 194*a1a3b679SAndreas BoehlerSTATUS:NEEDS-ACTION 195*a1a3b679SAndreas BoehlerSUMMARY:Task #1 196*a1a3b679SAndreas BoehlerUID:DDDEEB7915FA61233B861457@example.com 197*a1a3b679SAndreas BoehlerBEGIN:VALARM 198*a1a3b679SAndreas BoehlerACTION:AUDIO 199*a1a3b679SAndreas BoehlerTRIGGER;RELATED=START:-PT10M 200*a1a3b679SAndreas BoehlerEND:VALARM 201*a1a3b679SAndreas BoehlerEND:VTODO 202*a1a3b679SAndreas BoehlerEND:VCALENDAR'; 203*a1a3b679SAndreas Boehler 204*a1a3b679SAndreas Boehler return $todo; 205*a1a3b679SAndreas Boehler 206*a1a3b679SAndreas Boehler } 207*a1a3b679SAndreas Boehler 208*a1a3b679SAndreas Boehler} 209