b7fd060bca15fba74a6ab9b0ee1bbca6e11af595
[tine20] / tine20 / Tinebase / WebDav / Plugin / OwnCloud.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Tinebase
6  * @subpackage  WebDAV
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @author      Lars Kneschke <l.kneschke@metaways.de>
9  * @copyright   Copyright (c) 2013-2013 Metaways Infosystems GmbH (http://www.metaways.de)
10  *
11  */
12
13 /**
14  * ownCloud Integrator plugin
15  *
16  * This plugin provides functionality reuqired by ownCloud sync clients
17  *
18  * @package     Tinebase
19  * @subpackage  WebDAV
20  */
21
22 class Tinebase_WebDav_Plugin_OwnCloud extends Sabre\DAV\ServerPlugin {
23
24     const NS_OWNCLOUD = 'http://owncloud.org/ns';
25  
26     /**
27      * Reference to server object 
28      * 
29      * @var Sabre\DAV\Server 
30      */
31     private $server;
32
33     /**
34      * Initializes the plugin 
35      * 
36      * @param Sabre\DAV\Server $server 
37      * @return void
38      */
39     public function initialize(Sabre\DAV\Server $server) 
40     {
41         $this->server = $server;
42         
43         $server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties'));
44         
45         /* Namespaces */
46         $server->xmlNamespaces[self::NS_OWNCLOUD] = 'owncloud';
47         
48         array_push($server->protectedProperties,
49             '{' . self::NS_OWNCLOUD . '}id'
50         );
51     }
52     
53     /**
54      * Adds ownCloud specific properties
55      *
56      * @param string $path
57      * @param DAV\INode $node
58      * @param array $requestedProperties
59      * @param array $returnedProperties
60      * @return void
61      */
62     public function beforeGetProperties($path, Sabre\DAV\INode $node, array &$requestedProperties, array &$returnedProperties) 
63     {
64         $id = '{' . self::NS_OWNCLOUD . '}id';
65         
66         if (in_array($id, $requestedProperties)) {
67             unset($requestedProperties[array_search($id, $requestedProperties)]);
68             if ($node instanceof Tinebase_Frontend_WebDAV_Node) {
69                 $returnedProperties[200][$id] = $node->getId();
70             } else {
71                 // the path does not change for the other nodes => hence the id is "static"
72                 $returnedProperties[200][$id] = sha1($path);
73             }
74         }
75     }
76 }