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);
 }
예제 #5
0
 /**
  * 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;
 }