1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Backend; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV; 6*a1a3b679SAndreas Boehleruse Sabre\CalDAV; 7*a1a3b679SAndreas Boehleruse Sabre\CalDAV\Xml\Notification\NotificationInterface; 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehlerclass MockSharing extends Mock implements NotificationSupport, SharingSupport { 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler private $shares = []; 12*a1a3b679SAndreas Boehler private $notifications; 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler function __construct(array $calendars = [], array $calendarData = [], array $notifications = []) { 15*a1a3b679SAndreas Boehler 16*a1a3b679SAndreas Boehler parent::__construct($calendars, $calendarData); 17*a1a3b679SAndreas Boehler $this->notifications = $notifications; 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler } 20*a1a3b679SAndreas Boehler 21*a1a3b679SAndreas Boehler /** 22*a1a3b679SAndreas Boehler * Returns a list of notifications for a given principal url. 23*a1a3b679SAndreas Boehler * 24*a1a3b679SAndreas Boehler * The returned array should only consist of implementations of 25*a1a3b679SAndreas Boehler * Sabre\CalDAV\Notifications\INotificationType. 26*a1a3b679SAndreas Boehler * 27*a1a3b679SAndreas Boehler * @param string $principalUri 28*a1a3b679SAndreas Boehler * @return array 29*a1a3b679SAndreas Boehler */ 30*a1a3b679SAndreas Boehler function getNotificationsForPrincipal($principalUri) { 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler if (isset($this->notifications[$principalUri])) { 33*a1a3b679SAndreas Boehler return $this->notifications[$principalUri]; 34*a1a3b679SAndreas Boehler } 35*a1a3b679SAndreas Boehler return []; 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler } 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler /** 40*a1a3b679SAndreas Boehler * This deletes a specific notifcation. 41*a1a3b679SAndreas Boehler * 42*a1a3b679SAndreas Boehler * This may be called by a client once it deems a notification handled. 43*a1a3b679SAndreas Boehler * 44*a1a3b679SAndreas Boehler * @param string $principalUri 45*a1a3b679SAndreas Boehler * @param NotificationInterface $notification 46*a1a3b679SAndreas Boehler * @return void 47*a1a3b679SAndreas Boehler */ 48*a1a3b679SAndreas Boehler function deleteNotification($principalUri, NotificationInterface $notification) { 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler foreach($this->notifications[$principalUri] as $key=>$value) { 51*a1a3b679SAndreas Boehler if ($notification === $value) { 52*a1a3b679SAndreas Boehler unset($this->notifications[$principalUri][$key]); 53*a1a3b679SAndreas Boehler } 54*a1a3b679SAndreas Boehler } 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler } 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler /** 59*a1a3b679SAndreas Boehler * Updates the list of shares. 60*a1a3b679SAndreas Boehler * 61*a1a3b679SAndreas Boehler * The first array is a list of people that are to be added to the 62*a1a3b679SAndreas Boehler * calendar. 63*a1a3b679SAndreas Boehler * 64*a1a3b679SAndreas Boehler * Every element in the add array has the following properties: 65*a1a3b679SAndreas Boehler * * href - A url. Usually a mailto: address 66*a1a3b679SAndreas Boehler * * commonName - Usually a first and last name, or false 67*a1a3b679SAndreas Boehler * * summary - A description of the share, can also be false 68*a1a3b679SAndreas Boehler * * readOnly - A boolean value 69*a1a3b679SAndreas Boehler * 70*a1a3b679SAndreas Boehler * Every element in the remove array is just the address string. 71*a1a3b679SAndreas Boehler * 72*a1a3b679SAndreas Boehler * Note that if the calendar is currently marked as 'not shared' by and 73*a1a3b679SAndreas Boehler * this method is called, the calendar should be 'upgraded' to a shared 74*a1a3b679SAndreas Boehler * calendar. 75*a1a3b679SAndreas Boehler * 76*a1a3b679SAndreas Boehler * @param mixed $calendarId 77*a1a3b679SAndreas Boehler * @param array $add 78*a1a3b679SAndreas Boehler * @param array $remove 79*a1a3b679SAndreas Boehler * @return void 80*a1a3b679SAndreas Boehler */ 81*a1a3b679SAndreas Boehler function updateShares($calendarId, array $add, array $remove) { 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler if (!isset($this->shares[$calendarId])) { 84*a1a3b679SAndreas Boehler $this->shares[$calendarId] = []; 85*a1a3b679SAndreas Boehler } 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler foreach($add as $val) { 88*a1a3b679SAndreas Boehler $val['status'] = CalDAV\SharingPlugin::STATUS_NORESPONSE; 89*a1a3b679SAndreas Boehler $this->shares[$calendarId][] = $val; 90*a1a3b679SAndreas Boehler } 91*a1a3b679SAndreas Boehler 92*a1a3b679SAndreas Boehler foreach($this->shares[$calendarId] as $k=>$share) { 93*a1a3b679SAndreas Boehler 94*a1a3b679SAndreas Boehler if (in_array($share['href'], $remove)) { 95*a1a3b679SAndreas Boehler unset($this->shares[$calendarId][$k]); 96*a1a3b679SAndreas Boehler } 97*a1a3b679SAndreas Boehler 98*a1a3b679SAndreas Boehler } 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehler // Re-numbering keys 101*a1a3b679SAndreas Boehler $this->shares[$calendarId] = array_values($this->shares[$calendarId]); 102*a1a3b679SAndreas Boehler 103*a1a3b679SAndreas Boehler } 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler /** 106*a1a3b679SAndreas Boehler * Returns the list of people whom this calendar is shared with. 107*a1a3b679SAndreas Boehler * 108*a1a3b679SAndreas Boehler * Every element in this array should have the following properties: 109*a1a3b679SAndreas Boehler * * href - Often a mailto: address 110*a1a3b679SAndreas Boehler * * commonName - Optional, for example a first + last name 111*a1a3b679SAndreas Boehler * * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants. 112*a1a3b679SAndreas Boehler * * readOnly - boolean 113*a1a3b679SAndreas Boehler * * summary - Optional, a description for the share 114*a1a3b679SAndreas Boehler * 115*a1a3b679SAndreas Boehler * @param mixed $calendarId 116*a1a3b679SAndreas Boehler * @return array 117*a1a3b679SAndreas Boehler */ 118*a1a3b679SAndreas Boehler function getShares($calendarId) { 119*a1a3b679SAndreas Boehler 120*a1a3b679SAndreas Boehler if (!isset($this->shares[$calendarId])) { 121*a1a3b679SAndreas Boehler return []; 122*a1a3b679SAndreas Boehler } 123*a1a3b679SAndreas Boehler 124*a1a3b679SAndreas Boehler return $this->shares[$calendarId]; 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler } 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler /** 129*a1a3b679SAndreas Boehler * This method is called when a user replied to a request to share. 130*a1a3b679SAndreas Boehler * 131*a1a3b679SAndreas Boehler * @param string href The sharee who is replying (often a mailto: address) 132*a1a3b679SAndreas Boehler * @param int status One of the SharingPlugin::STATUS_* constants 133*a1a3b679SAndreas Boehler * @param string $calendarUri The url to the calendar thats being shared 134*a1a3b679SAndreas Boehler * @param string $inReplyTo The unique id this message is a response to 135*a1a3b679SAndreas Boehler * @param string $summary A description of the reply 136*a1a3b679SAndreas Boehler * @return void 137*a1a3b679SAndreas Boehler */ 138*a1a3b679SAndreas Boehler function shareReply($href, $status, $calendarUri, $inReplyTo, $summary = null) { 139*a1a3b679SAndreas Boehler 140*a1a3b679SAndreas Boehler // This operation basically doesn't do anything yet 141*a1a3b679SAndreas Boehler if ($status === CalDAV\SharingPlugin::STATUS_ACCEPTED) { 142*a1a3b679SAndreas Boehler return 'calendars/blabla/calendar'; 143*a1a3b679SAndreas Boehler } 144*a1a3b679SAndreas Boehler 145*a1a3b679SAndreas Boehler } 146*a1a3b679SAndreas Boehler 147*a1a3b679SAndreas Boehler /** 148*a1a3b679SAndreas Boehler * Publishes a calendar 149*a1a3b679SAndreas Boehler * 150*a1a3b679SAndreas Boehler * @param mixed $calendarId 151*a1a3b679SAndreas Boehler * @param bool $value 152*a1a3b679SAndreas Boehler * @return void 153*a1a3b679SAndreas Boehler */ 154*a1a3b679SAndreas Boehler function setPublishStatus($calendarId, $value) { 155*a1a3b679SAndreas Boehler 156*a1a3b679SAndreas Boehler foreach($this->calendars as $k=>$cal) { 157*a1a3b679SAndreas Boehler if ($cal['id'] === $calendarId) { 158*a1a3b679SAndreas Boehler if (!$value) { 159*a1a3b679SAndreas Boehler unset($cal['{http://calendarserver.org/ns/}publish-url']); 160*a1a3b679SAndreas Boehler } else { 161*a1a3b679SAndreas Boehler $cal['{http://calendarserver.org/ns/}publish-url'] = 'http://example.org/public/ ' . $calendarId . '.ics'; 162*a1a3b679SAndreas Boehler } 163*a1a3b679SAndreas Boehler return; 164*a1a3b679SAndreas Boehler } 165*a1a3b679SAndreas Boehler } 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler throw new DAV\Exception('Calendar with id "' . $calendarId . '" not found'); 168*a1a3b679SAndreas Boehler 169*a1a3b679SAndreas Boehler } 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler} 172*a1a3b679SAndreas Boehler 173