[Pkg-owncloud-commits] [owncloud] 24/66: fix the privatedata key value store

David Prévot taffit at moszumanska.debian.org
Fri Apr 18 22:49:44 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to annotated tag v5.0.15
in repository owncloud.

commit cada6b50b419dfb00cbcd3dfa354554144b5af37
Author: Frank Karlitschek <frank at owncloud.org>
Date:   Wed Oct 30 19:36:29 2013 +0100

    fix the privatedata key value store
---
 db_structure.xml        | 63 ++++++++++++++++++++++++++++++++++++++++++++++
 lib/ocs.php             | 32 ------------------------
 lib/ocs/privatedata.php | 66 ++++++++++++++++++++++++++++++++++++++++---------
 3 files changed, 118 insertions(+), 43 deletions(-)

diff --git a/db_structure.xml b/db_structure.xml
index 5c2b69a..d9b21cd 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -1020,4 +1020,67 @@
 
 	</table>
 
+	<table>
+
+		<name>*dbprefix*privatedata</name>
+
+		<declaration>
+
+		<field>
+			<name>keyid</name>
+			<type>integer</type>
+			<default>0</default>
+			<notnull>true</notnull>
+			<unsigned>true</unsigned>
+			<length>4</length>
+			<autoincrement>1</autoincrement>
+		</field>
+
+		<field>
+			<name>user</name>
+			<type>text</type>
+			<default></default>
+			<notnull>true</notnull>
+			<length>255</length>
+		</field>
+
+		<field>
+			<name>app</name>
+			<type>text</type>
+			<default></default>
+			<notnull>true</notnull>
+			<length>255</length>
+		</field>
+
+		<field>
+			<name>key</name>
+			<type>text</type>
+			<default></default>
+			<notnull>true</notnull>
+			<length>255</length>
+		</field>
+
+		<field>
+			<name>value</name>
+			<type>text</type>
+			<default></default>
+			<notnull>true</notnull>
+			<length>255</length>
+		</field>
+
+		<index>
+			<primary>true</primary>
+			<unique>true</unique>
+			<name>keyid_index</name>
+			<field>
+				<name>keyid</name>
+				<sorting>ascending</sorting>
+			</field>
+		</index>
+
+		</declaration>
+
+	</table>
+
+
 </database>
diff --git a/lib/ocs.php b/lib/ocs.php
index 93e8931..e067196 100644
--- a/lib/ocs.php
+++ b/lib/ocs.php
@@ -228,36 +228,4 @@ class OC_OCS {
 			}
 		}
 	}
-
-	/**
-	* get private data
-	* @param string $user
-	* @param string $app
-	* @param string $key
-	* @param bool $like use LIKE instead of = when comparing keys
-	* @return array
-	*/
-	public static function getData($user, $app="", $key="") {
-		if($app) {
-			$apps=array($app);
-		}else{
-			$apps=OC_Preferences::getApps($user);
-		}
-		if($key) {
-			$keys=array($key);
-		}else{
-			foreach($apps as $app) {
-				$keys=OC_Preferences::getKeys($user, $app);
-			}
-		}
-		$result=array();
-		foreach($apps as $app) {
-			foreach($keys as $key) {
-				$value=OC_Preferences::getValue($user, $app, $key);
-				$result[]=array('app'=>$app, 'key'=>$key, 'value'=>$value);
-			}
-		}
-		return $result;
-	}
-
 }
diff --git a/lib/ocs/privatedata.php b/lib/ocs/privatedata.php
index 4dfd0a6..b489cd0 100644
--- a/lib/ocs/privatedata.php
+++ b/lib/ocs/privatedata.php
@@ -22,35 +22,75 @@
 *
 */
 
+
 class OC_OCS_Privatedata {
 
+	/**
+	* read keys
+	* test: curl http://login:passwd@oc/core/ocs/v1.php/privatedata/getattribute/testy/123
+	* test: curl http://login:passwd@oc/core/ocs/v1.php/privatedata/getattribute/testy
+	* @param array $parameters The OCS parameter
+	*/
 	public static function get($parameters) {
 		OC_Util::checkLoggedIn();
 		$user = OC_User::getUser();
 		$app = addslashes(strip_tags($parameters['app']));
 		$key = addslashes(strip_tags($parameters['key']));
-		$result = OC_OCS::getData($user, $app, $key);
+		
+		if(empty($key)) {
+			$query = \OCP\DB::prepare('SELECT `key`, `app`, `value`  FROM `*PREFIX*privatedata` WHERE `user` = ? AND `app` = ? ');
+			$result = $query->execute(array($user, $app));
+		} else {
+			$query = \OCP\DB::prepare('SELECT `key`, `app`, `value`  FROM `*PREFIX*privatedata` WHERE `user` = ? AND `app` = ? AND `key` = ? ');
+			$result = $query->execute(array($user, $app, $key));
+		}
+		
 		$xml = array();
-		foreach($result as $i=>$log) {
-			$xml[$i]['key']=$log['key'];
-			$xml[$i]['app']=$log['app'];
-			$xml[$i]['value']=$log['value'];
+		while ($row = $result->fetchRow()) {
+			$data=array();
+			$data['key']=$row['key'];
+			$data['app']=$row['app'];
+			$data['value']=$row['value'];
+		 	$xml[] = $data;
 		}
+
 		return new OC_OCS_Result($xml);
-		//TODO: replace 'privatedata' with 'attribute' once a new libattice has been released that works with it
 	}
 
+	/**
+	* set a key
+	* test: curl http://login:passwd@oc/core/ocs/v1.php/privatedata/setattribute/testy/123  --data "value=foobar"
+	* @param array $parameters The OCS parameter
+	*/
 	public static function set($parameters) {
 		OC_Util::checkLoggedIn();
 		$user = OC_User::getUser();
 		$app = addslashes(strip_tags($parameters['app']));
 		$key = addslashes(strip_tags($parameters['key']));
 		$value = OC_OCS::readData('post', 'value', 'text');
-		if(OC_Preferences::setValue($user, $app, $key, $value)) {
-			return new OC_OCS_Result(null, 100);
+
+		// check if key is already set
+		$query = \OCP\DB::prepare('SELECT `value`  FROM `*PREFIX*privatedata` WHERE `user` = ? AND `app` = ? AND `key` = ? ');
+		$result = $query->execute(array($user, $app, $key));
+                
+        if ($result->numRows()==0) {
+			// store in DB
+			$query = \OCP\DB::prepare('INSERT INTO `*PREFIX*privatedata` (`user`, `app`, `key`, `value`)' . ' VALUES(?, ?, ?, ?)');
+			$query->execute(array($user, $app, $key, $value));
+		} else {
+			// update in DB
+			$query = \OCP\DB::prepare('UPDATE `*PREFIX*privatedata` SET `value` = ?  WHERE `user` = ? AND `app` = ? AND `key` = ? ');
+			$query->execute(array($value, $user, $app, $key ));
 		}
+
+		return new OC_OCS_Result(null, 100);
 	}
 
+	/**
+	* delete a key
+	* test: curl http://login:passwd@oc/core/ocs/v1.php/privatedata/deleteattribute/testy/123 --data "post=1"
+	* @param array $parameters The OCS parameter
+	*/
 	public static function delete($parameters) {
 		OC_Util::checkLoggedIn();
 		$user = OC_User::getUser();
@@ -59,8 +99,12 @@ class OC_OCS_Privatedata {
 		if($key==="" or $app==="") {
 			return new OC_OCS_Result(null, 101); //key and app are NOT optional here
 		}
-		if(OC_Preferences::deleteKey($user, $app, $key)) {
-			return new OC_OCS_Result(null, 100);
-		}
+		
+		// delete in DB
+		$query = \OCP\DB::prepare('DELETE FROM `*PREFIX*privatedata`  WHERE `user` = ? AND `app` = ? AND `key` = ? ');
+		$query->execute(array($user, $app, $key ));
+
+		return new OC_OCS_Result(null, 100);
 	}
 }
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list