1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAVACL\Exception; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler/** 8*a1a3b679SAndreas Boehler * NeedPrivileges 9*a1a3b679SAndreas Boehler * 10*a1a3b679SAndreas Boehler * The 403-need privileges is thrown when a user didn't have the appropriate 11*a1a3b679SAndreas Boehler * permissions to perform an operation 12*a1a3b679SAndreas Boehler * 13*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 14*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 15*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 16*a1a3b679SAndreas Boehler */ 17*a1a3b679SAndreas Boehlerclass NeedPrivileges extends DAV\Exception\Forbidden { 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler /** 20*a1a3b679SAndreas Boehler * The relevant uri 21*a1a3b679SAndreas Boehler * 22*a1a3b679SAndreas Boehler * @var string 23*a1a3b679SAndreas Boehler */ 24*a1a3b679SAndreas Boehler protected $uri; 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler /** 27*a1a3b679SAndreas Boehler * The privileges the user didn't have. 28*a1a3b679SAndreas Boehler * 29*a1a3b679SAndreas Boehler * @var array 30*a1a3b679SAndreas Boehler */ 31*a1a3b679SAndreas Boehler protected $privileges; 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler /** 34*a1a3b679SAndreas Boehler * Constructor 35*a1a3b679SAndreas Boehler * 36*a1a3b679SAndreas Boehler * @param string $uri 37*a1a3b679SAndreas Boehler * @param array $privileges 38*a1a3b679SAndreas Boehler */ 39*a1a3b679SAndreas Boehler function __construct($uri, array $privileges) { 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler $this->uri = $uri; 42*a1a3b679SAndreas Boehler $this->privileges = $privileges; 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler parent::__construct('User did not have the required privileges (' . implode(',', $privileges) . ') for path "' . $uri . '"'); 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler } 47*a1a3b679SAndreas Boehler 48*a1a3b679SAndreas Boehler /** 49*a1a3b679SAndreas Boehler * Adds in extra information in the xml response. 50*a1a3b679SAndreas Boehler * 51*a1a3b679SAndreas Boehler * This method adds the {DAV:}need-privileges element as defined in rfc3744 52*a1a3b679SAndreas Boehler * 53*a1a3b679SAndreas Boehler * @param DAV\Server $server 54*a1a3b679SAndreas Boehler * @param \DOMElement $errorNode 55*a1a3b679SAndreas Boehler * @return void 56*a1a3b679SAndreas Boehler */ 57*a1a3b679SAndreas Boehler function serialize(DAV\Server $server, \DOMElement $errorNode) { 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler $doc = $errorNode->ownerDocument; 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler $np = $doc->createElementNS('DAV:', 'd:need-privileges'); 62*a1a3b679SAndreas Boehler $errorNode->appendChild($np); 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler foreach ($this->privileges as $privilege) { 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler $resource = $doc->createElementNS('DAV:', 'd:resource'); 67*a1a3b679SAndreas Boehler $np->appendChild($resource); 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler $resource->appendChild($doc->createElementNS('DAV:', 'd:href', $server->getBaseUri() . $this->uri)); 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler $priv = $doc->createElementNS('DAV:', 'd:privilege'); 72*a1a3b679SAndreas Boehler $resource->appendChild($priv); 73*a1a3b679SAndreas Boehler 74*a1a3b679SAndreas Boehler preg_match('/^{([^}]*)}(.*)$/', $privilege, $privilegeParts); 75*a1a3b679SAndreas Boehler $priv->appendChild($doc->createElementNS($privilegeParts[1], 'd:' . $privilegeParts[2])); 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler 78*a1a3b679SAndreas Boehler } 79*a1a3b679SAndreas Boehler 80*a1a3b679SAndreas Boehler } 81*a1a3b679SAndreas Boehler 82*a1a3b679SAndreas Boehler} 83