1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Principal; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAVACL; 6*a1a3b679SAndreas Boehleruse Sabre\DAV; 7*a1a3b679SAndreas Boehler 8*a1a3b679SAndreas Boehler/** 9*a1a3b679SAndreas Boehler * ProxyRead principal 10*a1a3b679SAndreas Boehler * 11*a1a3b679SAndreas Boehler * This class represents a principal group, hosted under the main principal. 12*a1a3b679SAndreas Boehler * This is needed to implement 'Calendar delegation' support. This class is 13*a1a3b679SAndreas Boehler * instantiated by User. 14*a1a3b679SAndreas Boehler * 15*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 16*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 17*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 18*a1a3b679SAndreas Boehler */ 19*a1a3b679SAndreas Boehlerclass ProxyRead implements IProxyRead { 20*a1a3b679SAndreas Boehler 21*a1a3b679SAndreas Boehler /** 22*a1a3b679SAndreas Boehler * Principal information from the parent principal. 23*a1a3b679SAndreas Boehler * 24*a1a3b679SAndreas Boehler * @var array 25*a1a3b679SAndreas Boehler */ 26*a1a3b679SAndreas Boehler protected $principalInfo; 27*a1a3b679SAndreas Boehler 28*a1a3b679SAndreas Boehler /** 29*a1a3b679SAndreas Boehler * Principal backend 30*a1a3b679SAndreas Boehler * 31*a1a3b679SAndreas Boehler * @var DAVACL\PrincipalBackend\BackendInterface 32*a1a3b679SAndreas Boehler */ 33*a1a3b679SAndreas Boehler protected $principalBackend; 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler /** 36*a1a3b679SAndreas Boehler * Creates the object. 37*a1a3b679SAndreas Boehler * 38*a1a3b679SAndreas Boehler * Note that you MUST supply the parent principal information. 39*a1a3b679SAndreas Boehler * 40*a1a3b679SAndreas Boehler * @param DAVACL\PrincipalBackend\BackendInterface $principalBackend 41*a1a3b679SAndreas Boehler * @param array $principalInfo 42*a1a3b679SAndreas Boehler */ 43*a1a3b679SAndreas Boehler function __construct(DAVACL\PrincipalBackend\BackendInterface $principalBackend, array $principalInfo) { 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler $this->principalInfo = $principalInfo; 46*a1a3b679SAndreas Boehler $this->principalBackend = $principalBackend; 47*a1a3b679SAndreas Boehler 48*a1a3b679SAndreas Boehler } 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler /** 51*a1a3b679SAndreas Boehler * Returns this principals name. 52*a1a3b679SAndreas Boehler * 53*a1a3b679SAndreas Boehler * @return string 54*a1a3b679SAndreas Boehler */ 55*a1a3b679SAndreas Boehler function getName() { 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler return 'calendar-proxy-read'; 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler } 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler /** 62*a1a3b679SAndreas Boehler * Returns the last modification time 63*a1a3b679SAndreas Boehler * 64*a1a3b679SAndreas Boehler * @return null 65*a1a3b679SAndreas Boehler */ 66*a1a3b679SAndreas Boehler function getLastModified() { 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler return null; 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler } 71*a1a3b679SAndreas Boehler 72*a1a3b679SAndreas Boehler /** 73*a1a3b679SAndreas Boehler * Deletes the current node 74*a1a3b679SAndreas Boehler * 75*a1a3b679SAndreas Boehler * @throws DAV\Exception\Forbidden 76*a1a3b679SAndreas Boehler * @return void 77*a1a3b679SAndreas Boehler */ 78*a1a3b679SAndreas Boehler function delete() { 79*a1a3b679SAndreas Boehler 80*a1a3b679SAndreas Boehler throw new DAV\Exception\Forbidden('Permission denied to delete node'); 81*a1a3b679SAndreas Boehler 82*a1a3b679SAndreas Boehler } 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler /** 85*a1a3b679SAndreas Boehler * Renames the node 86*a1a3b679SAndreas Boehler * 87*a1a3b679SAndreas Boehler * @throws DAV\Exception\Forbidden 88*a1a3b679SAndreas Boehler * @param string $name The new name 89*a1a3b679SAndreas Boehler * @return void 90*a1a3b679SAndreas Boehler */ 91*a1a3b679SAndreas Boehler function setName($name) { 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler throw new DAV\Exception\Forbidden('Permission denied to rename file'); 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler } 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler 98*a1a3b679SAndreas Boehler /** 99*a1a3b679SAndreas Boehler * Returns a list of alternative urls for a principal 100*a1a3b679SAndreas Boehler * 101*a1a3b679SAndreas Boehler * This can for example be an email address, or ldap url. 102*a1a3b679SAndreas Boehler * 103*a1a3b679SAndreas Boehler * @return array 104*a1a3b679SAndreas Boehler */ 105*a1a3b679SAndreas Boehler function getAlternateUriSet() { 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler return []; 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler } 110*a1a3b679SAndreas Boehler 111*a1a3b679SAndreas Boehler /** 112*a1a3b679SAndreas Boehler * Returns the full principal url 113*a1a3b679SAndreas Boehler * 114*a1a3b679SAndreas Boehler * @return string 115*a1a3b679SAndreas Boehler */ 116*a1a3b679SAndreas Boehler function getPrincipalUrl() { 117*a1a3b679SAndreas Boehler 118*a1a3b679SAndreas Boehler return $this->principalInfo['uri'] . '/' . $this->getName(); 119*a1a3b679SAndreas Boehler 120*a1a3b679SAndreas Boehler } 121*a1a3b679SAndreas Boehler 122*a1a3b679SAndreas Boehler /** 123*a1a3b679SAndreas Boehler * Returns the list of group members 124*a1a3b679SAndreas Boehler * 125*a1a3b679SAndreas Boehler * If this principal is a group, this function should return 126*a1a3b679SAndreas Boehler * all member principal uri's for the group. 127*a1a3b679SAndreas Boehler * 128*a1a3b679SAndreas Boehler * @return array 129*a1a3b679SAndreas Boehler */ 130*a1a3b679SAndreas Boehler function getGroupMemberSet() { 131*a1a3b679SAndreas Boehler 132*a1a3b679SAndreas Boehler return $this->principalBackend->getGroupMemberSet($this->getPrincipalUrl()); 133*a1a3b679SAndreas Boehler 134*a1a3b679SAndreas Boehler } 135*a1a3b679SAndreas Boehler 136*a1a3b679SAndreas Boehler /** 137*a1a3b679SAndreas Boehler * Returns the list of groups this principal is member of 138*a1a3b679SAndreas Boehler * 139*a1a3b679SAndreas Boehler * If this principal is a member of a (list of) groups, this function 140*a1a3b679SAndreas Boehler * should return a list of principal uri's for it's members. 141*a1a3b679SAndreas Boehler * 142*a1a3b679SAndreas Boehler * @return array 143*a1a3b679SAndreas Boehler */ 144*a1a3b679SAndreas Boehler function getGroupMembership() { 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler return $this->principalBackend->getGroupMembership($this->getPrincipalUrl()); 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler } 149*a1a3b679SAndreas Boehler 150*a1a3b679SAndreas Boehler /** 151*a1a3b679SAndreas Boehler * Sets a list of group members 152*a1a3b679SAndreas Boehler * 153*a1a3b679SAndreas Boehler * If this principal is a group, this method sets all the group members. 154*a1a3b679SAndreas Boehler * The list of members is always overwritten, never appended to. 155*a1a3b679SAndreas Boehler * 156*a1a3b679SAndreas Boehler * This method should throw an exception if the members could not be set. 157*a1a3b679SAndreas Boehler * 158*a1a3b679SAndreas Boehler * @param array $principals 159*a1a3b679SAndreas Boehler * @return void 160*a1a3b679SAndreas Boehler */ 161*a1a3b679SAndreas Boehler function setGroupMemberSet(array $principals) { 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler $this->principalBackend->setGroupMemberSet($this->getPrincipalUrl(), $principals); 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler } 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler /** 168*a1a3b679SAndreas Boehler * Returns the displayname 169*a1a3b679SAndreas Boehler * 170*a1a3b679SAndreas Boehler * This should be a human readable name for the principal. 171*a1a3b679SAndreas Boehler * If none is available, return the nodename. 172*a1a3b679SAndreas Boehler * 173*a1a3b679SAndreas Boehler * @return string 174*a1a3b679SAndreas Boehler */ 175*a1a3b679SAndreas Boehler function getDisplayName() { 176*a1a3b679SAndreas Boehler 177*a1a3b679SAndreas Boehler return $this->getName(); 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler } 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler} 182