function testSetBadNode() { $tree = [new DAV\SimpleCollection('foo')]; $server = new DAV\Server($tree); $server->addPlugin(new Plugin()); $result = $server->updateProperties('foo', ['{DAV:}group-member-set' => new DAV\Xml\Property\Href(['/bar', '/baz'], false)]); $expected = ['{DAV:}group-member-set' => 403]; $this->assertEquals($expected, $result); }
public function testSetBadNode() { $tree = array(new DAV\SimpleCollection('foo')); $server = new DAV\Server($tree); $server->addPlugin(new Plugin()); $result = $server->updateProperties('foo', array('{DAV:}group-member-set' => new DAV\Property\HrefList(array('/bar', '/baz'), false))); $expected = array('{DAV:}group-member-set' => 403); $this->assertEquals($expected, $result); }
function testUpdatePropertiesEventSuccess() { $tree = array(new SimpleCollection('foo')); $server = new Server($tree); $server->subscribeEvent('updateProperties', array($this, 'updatepropsuccess')); $result = $server->updateProperties('foo', array('{DAV:}foo' => 'bar', '{DAV:}foo2' => 'bla')); $expected = array('href' => 'foo', '200' => array('{DAV:}foo' => null), '201' => array('{DAV:}foo2' => null)); $this->assertEquals($expected, $result); }
function testUpdatePropertiesEventSuccess() { $tree = array(new SimpleCollection('foo')); $server = new Server($tree); $server->on('propPatch', function ($path, PropPatch $propPatch) { $propPatch->handle(['{DAV:}foo', '{DAV:}foo2'], function () { return ['{DAV:}foo' => 200, '{DAV:}foo2' => 201]; }); }); $result = $server->updateProperties('foo', array('{DAV:}foo' => 'bar', '{DAV:}foo2' => 'bla')); $expected = array('{DAV:}foo' => 200, '{DAV:}foo2' => 201); $this->assertEquals($expected, $result); }
/** * WebDAV PROPPATCH * * This method is called to update properties on a Node. The request is an XML body with all the mutations. * In this XML body it is specified which properties should be set/updated and/or deleted * * @param RequestInterface $request * @param ResponseInterface $response * @return bool */ function httpPropPatch(RequestInterface $request, ResponseInterface $response) { $path = $request->getPath(); try { $propPatch = $this->server->xml->expect('{DAV:}propertyupdate', $request->getBody()); } catch (ParseException $e) { throw new BadRequest($e->getMessage(), null, $e); } $newProperties = $propPatch->properties; $result = $this->server->updateProperties($path, $newProperties); $prefer = $this->server->getHTTPPrefer(); $response->setHeader('Vary', 'Brief,Prefer'); if ($prefer['return'] === 'minimal') { // If return-minimal is specified, we only have to check if the // request was succesful, and don't need to return the // multi-status. $ok = true; foreach ($result as $prop => $code) { if ((int) $code > 299) { $ok = false; } } if ($ok) { $response->setStatus(204); return false; } } $response->setStatus(207); $response->setHeader('Content-Type', 'application/xml; charset=utf-8'); // Reorganizing the result for generateMultiStatus $multiStatus = []; foreach ($result as $propertyName => $code) { if (isset($multiStatus[$code])) { $multiStatus[$code][$propertyName] = null; } else { $multiStatus[$code] = [$propertyName => null]; } } $multiStatus['href'] = $path; $response->setBody($this->server->generateMultiStatus([$multiStatus])); // Sending back false will interupt the event chain and tell the server // we've handled this method. return false; }