@@ -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()); |
@@ -0,0 +1,68 @@ | |||
<?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 = 'xmlns:oc="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'; | |||
unset($requestedProperties[array_search($fileid_propertyname, $requestedProperties)]); | |||
/** @var $node OC_Connector_Sabre_Node */ | |||
$returnedProperties[200][$fileid_propertyname] = $node->getFileId(); | |||
} | |||
} | |||
} |
@@ -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,15 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr | |||
} | |||
return $this->fileView; | |||
} | |||
/** | |||
* @return mixed | |||
*/ | |||
public function getFileId() | |||
{ | |||
$this->getFileinfoCache(); | |||
$instanceId = OC_Util::getInstanceId(); | |||
$id = sprintf('%08d', $this->fileinfo_cache['fileid']); | |||
return $instanceId . $id; | |||
} | |||
} |