1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Backend; 4*a1a3b679SAndreas Boehleruse Sabre\DAV; 5*a1a3b679SAndreas Boehleruse Sabre\CalDAV; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehlerclass Mock extends AbstractBackend { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler protected $calendarData; 10*a1a3b679SAndreas Boehler protected $calendars; 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler function __construct(array $calendars = [], array $calendarData = []) { 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler foreach($calendars as &$calendar) { 15*a1a3b679SAndreas Boehler if (!isset($calendar['id'])) { 16*a1a3b679SAndreas Boehler $calendar['id'] = DAV\UUIDUtil::getUUID(); 17*a1a3b679SAndreas Boehler } 18*a1a3b679SAndreas Boehler } 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler $this->calendars = $calendars; 21*a1a3b679SAndreas Boehler $this->calendarData = $calendarData; 22*a1a3b679SAndreas Boehler 23*a1a3b679SAndreas Boehler } 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler /** 26*a1a3b679SAndreas Boehler * Returns a list of calendars for a principal. 27*a1a3b679SAndreas Boehler * 28*a1a3b679SAndreas Boehler * Every project is an array with the following keys: 29*a1a3b679SAndreas Boehler * * id, a unique id that will be used by other functions to modify the 30*a1a3b679SAndreas Boehler * calendar. This can be the same as the uri or a database key. 31*a1a3b679SAndreas Boehler * * uri, which the basename of the uri with which the calendar is 32*a1a3b679SAndreas Boehler * accessed. 33*a1a3b679SAndreas Boehler * * principalUri. The owner of the calendar. Almost always the same as 34*a1a3b679SAndreas Boehler * principalUri passed to this method. 35*a1a3b679SAndreas Boehler * 36*a1a3b679SAndreas Boehler * Furthermore it can contain webdav properties in clark notation. A very 37*a1a3b679SAndreas Boehler * common one is '{DAV:}displayname'. 38*a1a3b679SAndreas Boehler * 39*a1a3b679SAndreas Boehler * @param string $principalUri 40*a1a3b679SAndreas Boehler * @return array 41*a1a3b679SAndreas Boehler */ 42*a1a3b679SAndreas Boehler function getCalendarsForUser($principalUri) { 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler $r = array(); 45*a1a3b679SAndreas Boehler foreach($this->calendars as $row) { 46*a1a3b679SAndreas Boehler if ($row['principaluri'] == $principalUri) { 47*a1a3b679SAndreas Boehler $r[] = $row; 48*a1a3b679SAndreas Boehler } 49*a1a3b679SAndreas Boehler } 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler return $r; 52*a1a3b679SAndreas Boehler 53*a1a3b679SAndreas Boehler } 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler /** 56*a1a3b679SAndreas Boehler * Creates a new calendar for a principal. 57*a1a3b679SAndreas Boehler * 58*a1a3b679SAndreas Boehler * If the creation was a success, an id must be returned that can be used to reference 59*a1a3b679SAndreas Boehler * this calendar in other methods, such as updateCalendar. 60*a1a3b679SAndreas Boehler * 61*a1a3b679SAndreas Boehler * This function must return a server-wide unique id that can be used 62*a1a3b679SAndreas Boehler * later to reference the calendar. 63*a1a3b679SAndreas Boehler * 64*a1a3b679SAndreas Boehler * @param string $principalUri 65*a1a3b679SAndreas Boehler * @param string $calendarUri 66*a1a3b679SAndreas Boehler * @param array $properties 67*a1a3b679SAndreas Boehler * @return string|int 68*a1a3b679SAndreas Boehler */ 69*a1a3b679SAndreas Boehler function createCalendar($principalUri,$calendarUri,array $properties) { 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler $id = DAV\UUIDUtil::getUUID(); 72*a1a3b679SAndreas Boehler $this->calendars[] = array_merge([ 73*a1a3b679SAndreas Boehler 'id' => $id, 74*a1a3b679SAndreas Boehler 'principaluri' => $principalUri, 75*a1a3b679SAndreas Boehler 'uri' => $calendarUri, 76*a1a3b679SAndreas Boehler '{' . CalDAV\Plugin::NS_CALDAV . '}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(['VEVENT','VTODO']), 77*a1a3b679SAndreas Boehler ], $properties); 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler return $id; 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler } 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler /** 84*a1a3b679SAndreas Boehler * Delete a calendar and all it's objects 85*a1a3b679SAndreas Boehler * 86*a1a3b679SAndreas Boehler * @param string $calendarId 87*a1a3b679SAndreas Boehler * @return void 88*a1a3b679SAndreas Boehler */ 89*a1a3b679SAndreas Boehler public function deleteCalendar($calendarId) { 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler foreach($this->calendars as $k=>$calendar) { 92*a1a3b679SAndreas Boehler if ($calendar['id'] === $calendarId) { 93*a1a3b679SAndreas Boehler unset($this->calendars[$k]); 94*a1a3b679SAndreas Boehler } 95*a1a3b679SAndreas Boehler } 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler } 98*a1a3b679SAndreas Boehler 99*a1a3b679SAndreas Boehler /** 100*a1a3b679SAndreas Boehler * Returns all calendar objects within a calendar object. 101*a1a3b679SAndreas Boehler * 102*a1a3b679SAndreas Boehler * Every item contains an array with the following keys: 103*a1a3b679SAndreas Boehler * * id - unique identifier which will be used for subsequent updates 104*a1a3b679SAndreas Boehler * * calendardata - The iCalendar-compatible calendar data 105*a1a3b679SAndreas Boehler * * uri - a unique key which will be used to construct the uri. This can be any arbitrary string. 106*a1a3b679SAndreas Boehler * * lastmodified - a timestamp of the last modification time 107*a1a3b679SAndreas Boehler * * etag - An arbitrary string, surrounded by double-quotes. (e.g.: 108*a1a3b679SAndreas Boehler * ' "abcdef"') 109*a1a3b679SAndreas Boehler * * calendarid - The calendarid as it was passed to this function. 110*a1a3b679SAndreas Boehler * 111*a1a3b679SAndreas Boehler * Note that the etag is optional, but it's highly encouraged to return for 112*a1a3b679SAndreas Boehler * speed reasons. 113*a1a3b679SAndreas Boehler * 114*a1a3b679SAndreas Boehler * The calendardata is also optional. If it's not returned 115*a1a3b679SAndreas Boehler * 'getCalendarObject' will be called later, which *is* expected to return 116*a1a3b679SAndreas Boehler * calendardata. 117*a1a3b679SAndreas Boehler * 118*a1a3b679SAndreas Boehler * @param string $calendarId 119*a1a3b679SAndreas Boehler * @return array 120*a1a3b679SAndreas Boehler */ 121*a1a3b679SAndreas Boehler public function getCalendarObjects($calendarId) { 122*a1a3b679SAndreas Boehler 123*a1a3b679SAndreas Boehler if (!isset($this->calendarData[$calendarId])) 124*a1a3b679SAndreas Boehler return array(); 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler $objects = $this->calendarData[$calendarId]; 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler foreach($objects as $uri => &$object) { 129*a1a3b679SAndreas Boehler $object['calendarid'] = $calendarId; 130*a1a3b679SAndreas Boehler $object['uri'] = $uri; 131*a1a3b679SAndreas Boehler $object['lastmodified'] = null; 132*a1a3b679SAndreas Boehler } 133*a1a3b679SAndreas Boehler return $objects; 134*a1a3b679SAndreas Boehler 135*a1a3b679SAndreas Boehler } 136*a1a3b679SAndreas Boehler 137*a1a3b679SAndreas Boehler /** 138*a1a3b679SAndreas Boehler * Returns information from a single calendar object, based on it's object 139*a1a3b679SAndreas Boehler * uri. 140*a1a3b679SAndreas Boehler * 141*a1a3b679SAndreas Boehler * The returned array must have the same keys as getCalendarObjects. The 142*a1a3b679SAndreas Boehler * 'calendardata' object is required here though, while it's not required 143*a1a3b679SAndreas Boehler * for getCalendarObjects. 144*a1a3b679SAndreas Boehler * 145*a1a3b679SAndreas Boehler * @param string $calendarId 146*a1a3b679SAndreas Boehler * @param string $objectUri 147*a1a3b679SAndreas Boehler * @return array 148*a1a3b679SAndreas Boehler */ 149*a1a3b679SAndreas Boehler function getCalendarObject($calendarId,$objectUri) { 150*a1a3b679SAndreas Boehler 151*a1a3b679SAndreas Boehler if (!isset($this->calendarData[$calendarId][$objectUri])) { 152*a1a3b679SAndreas Boehler throw new DAV\Exception\NotFound('Object could not be found'); 153*a1a3b679SAndreas Boehler } 154*a1a3b679SAndreas Boehler $object = $this->calendarData[$calendarId][$objectUri]; 155*a1a3b679SAndreas Boehler $object['calendarid'] = $calendarId; 156*a1a3b679SAndreas Boehler $object['uri'] = $objectUri; 157*a1a3b679SAndreas Boehler $object['lastmodified'] = null; 158*a1a3b679SAndreas Boehler return $object; 159*a1a3b679SAndreas Boehler 160*a1a3b679SAndreas Boehler } 161*a1a3b679SAndreas Boehler 162*a1a3b679SAndreas Boehler /** 163*a1a3b679SAndreas Boehler * Creates a new calendar object. 164*a1a3b679SAndreas Boehler * 165*a1a3b679SAndreas Boehler * @param string $calendarId 166*a1a3b679SAndreas Boehler * @param string $objectUri 167*a1a3b679SAndreas Boehler * @param string $calendarData 168*a1a3b679SAndreas Boehler * @return void 169*a1a3b679SAndreas Boehler */ 170*a1a3b679SAndreas Boehler function createCalendarObject($calendarId,$objectUri,$calendarData) { 171*a1a3b679SAndreas Boehler 172*a1a3b679SAndreas Boehler $this->calendarData[$calendarId][$objectUri] = array( 173*a1a3b679SAndreas Boehler 'calendardata' => $calendarData, 174*a1a3b679SAndreas Boehler 'calendarid' => $calendarId, 175*a1a3b679SAndreas Boehler 'uri' => $objectUri, 176*a1a3b679SAndreas Boehler ); 177*a1a3b679SAndreas Boehler return '"' . md5($calendarData) . '"'; 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler } 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler /** 182*a1a3b679SAndreas Boehler * Updates an existing calendarobject, based on it's uri. 183*a1a3b679SAndreas Boehler * 184*a1a3b679SAndreas Boehler * @param string $calendarId 185*a1a3b679SAndreas Boehler * @param string $objectUri 186*a1a3b679SAndreas Boehler * @param string $calendarData 187*a1a3b679SAndreas Boehler * @return void 188*a1a3b679SAndreas Boehler */ 189*a1a3b679SAndreas Boehler function updateCalendarObject($calendarId,$objectUri,$calendarData) { 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler $this->calendarData[$calendarId][$objectUri] = array( 192*a1a3b679SAndreas Boehler 'calendardata' => $calendarData, 193*a1a3b679SAndreas Boehler 'calendarid' => $calendarId, 194*a1a3b679SAndreas Boehler 'uri' => $objectUri, 195*a1a3b679SAndreas Boehler ); 196*a1a3b679SAndreas Boehler return '"' . md5($calendarData) . '"'; 197*a1a3b679SAndreas Boehler 198*a1a3b679SAndreas Boehler } 199*a1a3b679SAndreas Boehler 200*a1a3b679SAndreas Boehler /** 201*a1a3b679SAndreas Boehler * Deletes an existing calendar object. 202*a1a3b679SAndreas Boehler * 203*a1a3b679SAndreas Boehler * @param string $calendarId 204*a1a3b679SAndreas Boehler * @param string $objectUri 205*a1a3b679SAndreas Boehler * @return void 206*a1a3b679SAndreas Boehler */ 207*a1a3b679SAndreas Boehler function deleteCalendarObject($calendarId,$objectUri) { 208*a1a3b679SAndreas Boehler 209*a1a3b679SAndreas Boehler throw new Exception('Not implemented'); 210*a1a3b679SAndreas Boehler 211*a1a3b679SAndreas Boehler 212*a1a3b679SAndreas Boehler } 213*a1a3b679SAndreas Boehler 214*a1a3b679SAndreas Boehler} 215