Пример #1
0
 /**
  * Handles a DAV:principal-property-search REPORT request
  * 
  * @param   DAVACL_Principal_Collection  $principal_collection  The resource to perform the request on
  * @return  void
  */
 private function handle_principal_property_search($principal_collection)
 {
     $principals = $principal_collection->report_principal_property_search($this->entity['match']);
     DAV_Multistatus::inst();
     foreach ($principals as $path) {
         $principal = DAV::$REGISTRY->resource($path);
         if ($principal && $principal->isVisible()) {
             $response = new DAV_Element_response($path);
             foreach ($this->entity['prop'] as $prop) {
                 try {
                     $propval = $principal->prop($prop);
                     $response->setProperty($prop, $propval);
                 } catch (DAV_Status $e) {
                     $response->setStatus($prop, $e);
                 }
             }
             DAV_Multistatus::inst()->addResponse($response);
         }
     }
 }
 /**
  * @depends testSetProperty
  * @param   DAV_Element_response  $obj  The response object from previous tests
  * @return  void
  */
 public function testSetStatus($obj)
 {
     $obj->setStatus('test://test/ empty_prop', new DAV_Status(DAV::HTTP_CONFLICT));
     $obj->setStatus('test://test/ prop_with_value', new DAV_Status(DAV::HTTP_METHOD_NOT_ALLOWED));
     $this->assertSame('<D:response><D:href>/path</D:href><D:propstat><D:prop><ns:empty_prop xmlns:ns="test://test/"/></D:prop><D:status>HTTP/1.1 409 Conflict</D:status></D:propstat><D:propstat><D:prop><ns:prop_with_value xmlns:ns="test://test/"><![CDATA[Some piece of data]]></ns:prop_with_value></D:prop><D:status>HTTP/1.1 405 Method Not Allowed</D:status></D:propstat></D:response>', str_replace("\n", '', $obj->toXML()), 'DAV_Element_response: the path set by the constructor should be used in toXML()');
 }
Пример #3
0
 /**
  * Handle the PROPPATCH request
  *
  * @param DAV_Resource $resource
  * @return void
  * @throws DAV_Status
  */
 protected function handle($resource)
 {
     $resource->assertLock();
     if (empty($this->props)) {
         throw new DAV_Status(DAV::HTTP_BAD_REQUEST, 'No properties found in request body.');
     }
     $priv_write = $resource->property_priv_write(array_keys($this->props));
     $errors = array();
     foreach ($this->props as $name => $value) {
         try {
             if (@DAV::$PROTECTED_PROPERTIES[$name]) {
                 throw new DAV_Status(DAV::HTTP_FORBIDDEN, DAV::COND_CANNOT_MODIFY_PROTECTED_PROPERTY);
             }
             if (!@$priv_write[$name]) {
                 throw DAV::forbidden();
             }
             $resource->method_PROPPATCH($name, $value);
         } catch (DAV_Status $e) {
             $errors[$name] = $e;
         }
     }
     $response = new DAV_Element_response(DAV::getPath());
     if (empty($errors)) {
         try {
             $resource->storeProperties();
         } catch (DAV_Status $e) {
             foreach (array_keys($this->props) as $propname) {
                 $errors[$propname] = $e;
             }
         }
     }
     if (empty($errors)) {
         foreach (array_keys($this->props) as $propname) {
             $response->setStatus($propname, DAV_Status::$OK);
         }
     } else {
         $failed_dependency = new DAV_Status(DAV::HTTP_FAILED_DEPENDENCY);
         foreach (array_keys($this->props) as $propname) {
             if (!isset($errors[$propname])) {
                 $errors[$propname] = $failed_dependency;
             }
         }
         foreach ($errors as $propname => $status) {
             $response->setStatus($propname, $status);
         }
     }
     DAV_Multistatus::inst()->addResponse($response);
     DAV_Multistatus::inst()->close();
 }
Пример #4
0
 /**
  * Called by {@link method_PROPFIND()}
  * @param string $path
  * @param DAV_Resource $resource
  * @param array $props
  */
 private function handle3($resource, $props)
 {
     $propprivs = $resource->property_priv_read($props);
     $response = new DAV_Element_response($resource->path);
     foreach ($props as $prop) {
         if (array_key_exists($prop, $propprivs) && !$propprivs[$prop]) {
             $response->setStatus($prop, DAV::forbidden());
         } else {
             try {
                 $value = $resource->prop($prop);
                 if (!is_null($value)) {
                     $response->setProperty($prop, $value);
                 } else {
                     $response->setStatus($prop, DAV_Status::$NOT_FOUND);
                 }
             } catch (DAV_Status $e) {
                 $response->setStatus($prop, $e);
             }
         }
     }
     DAV_Multistatus::inst()->addResponse($response);
 }