Exemple #1
0
 /**
  * Parses the PROPPATCH request and returns a request object.
  *
  * This method is responsible for parsing the PROPPATCH request. It
  * retrieves the current request URI in $path and the request body as
  * $body.  The return value, if no exception is thrown, is a valid {@link
  * ezcWebdavPropPatchRequest} object.
  *
  * This method may be overwritten to adjust it to special client behaviour.
  * 
  * @param string $path 
  * @param string $body 
  * @return ezcWebdavPropPatchRequest
  */
 protected function parsePropPatchRequest($path, $body)
 {
     $request = new ezcWebdavPropPatchRequest($path);
     try {
         $dom = ezcWebdavServer::getInstance()->xmlTool->createDom($body);
     } catch (ezcWebdavInvalidXmlException $e) {
         throw new ezcWebdavInvalidRequestBodyException('PROPPATCH', $e->getMessage());
     }
     if ($dom->documentElement->localName !== 'propertyupdate') {
         throw new ezcWebdavInvalidRequestBodyException('PROPPATCH', "Expected XML element <propertyupdate />, received <{$dom->documentElement->localName} />.");
     }
     $propElements = $dom->documentElement->getElementsByTagNameNS(ezcWebdavXmlTool::XML_DEFAULT_NAMESPACE, 'prop');
     try {
         foreach ($propElements as $propElement) {
             if ($propElement->hasChildNodes()) {
                 ezcWebdavServer::getInstance()->propertyHandler->extractProperties($propElement->childNodes, $request->updates, $propElement->parentNode->localName === 'remove' ? ezcWebdavPropPatchRequest::REMOVE : ezcWebdavPropPatchRequest::SET);
             }
         }
     } catch (ezcBaseValueException $e) {
         throw new ezcWebdavInvalidRequestBodyException('PROPPATCH', "Property extraction produced value exception: '{$e->getMessage()}'.");
     }
     $request->setHeaders(ezcWebdavServer::getInstance()->headerHandler->parseHeaders());
     return $request;
 }