/** * 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()'); }
/** * 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(); }
/** * 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); }