[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