Merge pull request #5494 from owncloud/fixing-3593-master

introducing new dav property {xmlns:oc="http://owncloud.org/ns}id
This commit is contained in:
Thomas Müller 2013-10-24 09:41:56 -07:00
commit 222f1b8da2
3 changed files with 96 additions and 1 deletions

View File

@ -48,6 +48,7 @@ $defaults = new OC_Defaults();
$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, $defaults->getName()));
$server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
$server->addPlugin(new OC_Connector_Sabre_FilesPlugin());
$server->addPlugin(new OC_Connector_Sabre_AbortedUploadDetectionPlugin());
$server->addPlugin(new OC_Connector_Sabre_QuotaPlugin());
$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());

View File

@ -0,0 +1,73 @@
<?php
/**
* ownCloud
*
* @author Thomas Müller
* @copyright 2013 Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL3
*/
class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin
{
// namespace
const NS_OWNCLOUD = 'http://owncloud.org/ns';
/**
* Reference to main server object
*
* @var Sabre_DAV_Server
*/
private $server;
/**
* This initializes the plugin.
*
* This function is called by Sabre_DAV_Server, after
* addPlugin is called.
*
* This method should set up the required event subscriptions.
*
* @param Sabre_DAV_Server $server
* @return void
*/
public function initialize(Sabre_DAV_Server $server) {
$server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc';
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id';
$this->server = $server;
$this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties'));
}
/**
* Adds all ownCloud-specific properties
*
* @param string $path
* @param Sabre_DAV_INode $node
* @param array $requestedProperties
* @param array $returnedProperties
* @return void
*/
public function beforeGetProperties($path, Sabre_DAV_INode $node, array &$requestedProperties, array &$returnedProperties) {
if ($node instanceof OC_Connector_Sabre_Node) {
$fileid_propertyname = '{' . self::NS_OWNCLOUD . '}id';
if (array_search($fileid_propertyname, $requestedProperties)) {
unset($requestedProperties[array_search($fileid_propertyname, $requestedProperties)]);
}
/** @var $node OC_Connector_Sabre_Node */
$fileId = $node->getFileId();
if (!is_null($fileId)) {
$returnedProperties[200][$fileid_propertyname] = $fileId;
}
}
}
}

View File

@ -45,6 +45,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
* @var string
*/
protected $path;
/**
* node fileinfo cache
* @var array
@ -211,6 +212,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
* properties should be returned
*/
public function getProperties($properties) {
if (is_null($this->property_cache)) {
$sql = 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?';
$result = OC_DB::executeAudited( $sql, array( OC_User::getUser(), $this->path ) );
@ -236,8 +238,11 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
$props = array();
foreach($properties as $property) {
if (isset($this->property_cache[$property])) $props[$property] = $this->property_cache[$property];
if (isset($this->property_cache[$property])) {
$props[$property] = $this->property_cache[$property];
}
}
return $props;
}
@ -260,4 +265,20 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
}
return $this->fileView;
}
/**
* @return mixed
*/
public function getFileId()
{
$this->getFileinfoCache();
if (isset($this->fileinfo_cache['fileid'])) {
$instanceId = OC_Util::getInstanceId();
$id = sprintf('%08d', $this->fileinfo_cache['fileid']);
return $instanceId . $id;
}
return null;
}
}