diff options
author | Frank Karlitschek <frank@owncloud.org> | 2013-10-30 19:36:29 +0100 |
---|---|---|
committer | Frank Karlitschek <frank@owncloud.org> | 2013-10-30 19:36:29 +0100 |
commit | 330d026be73efb6e6630094c34607a0feb6dd3ff (patch) | |
tree | 56ab0a1c73ef041e52d9286a714b996ee4277135 /lib/private/ocs | |
parent | d21a5b45f3f47d27a72d9acee4189eefc8104092 (diff) | |
download | nextcloud-server-330d026be73efb6e6630094c34607a0feb6dd3ff.tar.gz nextcloud-server-330d026be73efb6e6630094c34607a0feb6dd3ff.zip |
fix the privatedata key value store
Diffstat (limited to 'lib/private/ocs')
-rw-r--r-- | lib/private/ocs/privatedata.php | 66 |
1 files changed, 55 insertions, 11 deletions
diff --git a/lib/private/ocs/privatedata.php b/lib/private/ocs/privatedata.php index 4dfd0a6e66e..b489cd0fbb3 100644 --- a/lib/private/ocs/privatedata.php +++ b/lib/private/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); } } + |