diff options
Diffstat (limited to '3dparty/Sabre/DAVACL/Exception/NeedPrivileges.php')
-rw-r--r-- | 3dparty/Sabre/DAVACL/Exception/NeedPrivileges.php | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/3dparty/Sabre/DAVACL/Exception/NeedPrivileges.php b/3dparty/Sabre/DAVACL/Exception/NeedPrivileges.php new file mode 100644 index 00000000000..640ab8efff4 --- /dev/null +++ b/3dparty/Sabre/DAVACL/Exception/NeedPrivileges.php @@ -0,0 +1,84 @@ +<?php + +/** + * NeedPrivileges + * + * @package Sabre + * @subpackage DAVACL + * @version $Id$ + * @copyright Copyright (C) 2007-2011 Rooftop Solutions. All rights reserved. + * @author Evert Pot (http://www.rooftopsolutions.nl/) + * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License + */ + +/** + * NeedPrivileges + * + * The 403-need privileges is thrown when a user didn't have the appropriate + * permissions to perform an operation + */ +class Sabre_DAVACL_Exception_NeedPrivileges extends Sabre_DAV_Exception_Forbidden { + + /** + * The relevant uri + * + * @var string + */ + protected $uri; + + /** + * The privileges the user didn't have. + * + * @var array + */ + protected $privileges; + + /** + * Constructor + * + * @param string $uri + * @param array $privileges + */ + public function __construct($uri,array $privileges) { + + $this->uri = $uri; + $this->privileges = $privileges; + + } + + /** + * Adds in extra information in the xml response. + * + * This method adds the {DAV:}need-privileges element as defined in rfc3744 + * + * @param Sabre_DAV_Server $server + * @param DOMElement $errorNode + * @return void + */ + public function serialize(Sabre_DAV_Server $server,DOMElement $errorNode) { + + $doc = $errorNode->ownerDocument; + + $np = $doc->createElementNS('DAV:','d:need-privileges'); + $errorNode->appendChild($np); + + foreach($this->privileges as $privilege) { + + $resource = $doc->createElementNS('DAV:','d:resource'); + $np->appendChild($resource); + + $resource->appendChild($doc->createElementNS('DAV:','d:href',$server->getBaseUri() . $this->uri)); + + $priv = $doc->createElementNS('DAV:','d:privilege'); + $resource->appendChild($priv); + + preg_match('/^{([^}]*)}(.*)$/',$privilege,$privilegeParts); + $priv->appendChild($doc->createElementNS($privilegeParts[1],'d:' . $privilegeParts[2])); + + + } + + } + +} + |