aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Sack <kde@jakobsack.de>2011-07-22 16:21:29 +0200
committerJakob Sack <kde@jakobsack.de>2011-07-22 16:21:29 +0200
commit5851da47f11d0b06c6415e22b080341d643aef14 (patch)
treec18a33c0d4f2ec66fa2eebc8cf66a449702344b9
parent7c9f356abeaaa9348332908bfcced21be88011ac (diff)
downloadnextcloud-server-5851da47f11d0b06c6415e22b080341d643aef14.tar.gz
nextcloud-server-5851da47f11d0b06c6415e22b080341d643aef14.zip
properties nearly work
-rw-r--r--lib/Connector/Sabre/locks.php17
-rw-r--r--lib/Connector/Sabre/node.php77
2 files changed, 93 insertions, 1 deletions
diff --git a/lib/Connector/Sabre/locks.php b/lib/Connector/Sabre/locks.php
index 58a0359899e..ed5ea17beab 100644
--- a/lib/Connector/Sabre/locks.php
+++ b/lib/Connector/Sabre/locks.php
@@ -13,6 +13,23 @@ require_once("lib/base.php");
* @author Evert Pot (http://www.rooftopsolutions.nl/)
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
*/
+/*
+ *
+ * The following SQL statement is just a help for developers and will not be
+ * executed!
+ *
+ * CREATE TABLE locks (
+ * `id` INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ * `owner` VARCHAR(100),
+ * `timeout` INTEGER UNSIGNED,
+ * `created` INTEGER,
+ * `token` VARCHAR(100),
+ * `scope` TINYINT,
+ * `depth` TINYINT,
+ * `uri` text
+ * );
+ *
+ */
class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
/**
diff --git a/lib/Connector/Sabre/node.php b/lib/Connector/Sabre/node.php
index fb607a709e4..0e8bae75fd9 100644
--- a/lib/Connector/Sabre/node.php
+++ b/lib/Connector/Sabre/node.php
@@ -13,7 +13,20 @@ require_once("lib/base.php");
* @author Evert Pot (http://www.rooftopsolutions.nl/)
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
*/
-abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode {
+/*
+ *
+ * The following SQL statement is just a help for developers and will not be
+ * executed!
+ *
+ * CREATE TABLE IF NOT EXISTS `properties` (
+ * `userid` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
+ * `propertypath` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ * `propertyname` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ * `propertyvalue` text COLLATE utf8_unicode_ci NOT NULL
+ * ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+ *
+ */
+abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IProperties {
/**
* The path to the current node
@@ -77,5 +90,67 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode {
}
+ /**
+ * Updates properties on this node,
+ *
+ * @param array $mutations
+ * @see Sabre_DAV_IProperties::updateProperties
+ * @return bool|array
+ */
+ public function updateProperties($properties) {
+ $existing = $this->getProperties(array());
+ foreach($properties as $propertyName => $propertyValue) {
+ // If it was null, we need to delete the property
+ if (is_null($propertyValue)) {
+ if(array_key_exists( $propertyName, $existing )){
+ $query = OC_DB::prepare( 'DELETE FROM *PREFIX*properties WHERE userid = ? AND propertypath = ? AND propertyname = ?' );
+ $query->execute( array( 'OC_USER::getUser()', $this->path, $propertyName ));
+ }
+ }
+ else {
+ if(!array_key_exists( $propertyName, $existing )){
+ $query = OC_DB::prepare( 'INSERT INTO *PREFIX*properties (userid,propertypath,propertyname,propertyvalue) VALUES(?,?,?,?)' );
+ $query->execute( array( 'OC_USER::getUser()', $this->path, $propertyName,$propertyValue ));
+ }
+ elseif($existing[$propertyName] !== $propertyValue){
+ $query = OC_DB::prepare( 'UPDATE *PREFIX*properties SET propertyvalue = ? WHERE userid = ? AND propertypath = ? AND propertyname = ?' );
+ $query->execute( array( $propertyValue,'OC_USER::getUser()', $this->path, $propertyName ));
+ }
+ }
+
+ }
+ return true;
+ }
+
+ /**
+ * Returns a list of properties for this nodes.;
+ *
+ * The properties list is a list of propertynames the client requested, encoded as xmlnamespace#tagName, for example: http://www.example.org/namespace#author
+ * If the array is empty, all properties should be returned
+ *
+ * @param array $properties
+ * @return void
+ */
+ function getProperties($properties) {
+ // At least some magic in here :-)
+ $query = OC_DB::prepare( 'SELECT * FROM *PREFIX*properties WHERE userid = ? AND propertypath = ?' );
+ $result = $query->execute( array( 'OC_USER::getUser()', $this->path ));
+
+ $existing = array();
+ while( $row = $result->fetchRow()){
+ $existing[$row['propertyname']] = $row['propertyvalue'];
+ }
+
+ if(count($properties) == 0){
+ return $existing;
+ }
+
+ // if the array was empty, we need to return everything
+ $props = array();
+ foreach($properties as $property) {
+ if (isset($existing[$property])) $props[$property] = $existing[$property];
+ }
+ return $props;
+ }
}