]> source.dussan.org Git - nextcloud-server.git/commitdiff
Convert OC_Preference to object interface
authorBart Visscher <bartv@thisnet.nl>
Sun, 3 Mar 2013 11:04:29 +0000 (12:04 +0100)
committerBart Visscher <bartv@thisnet.nl>
Thu, 19 Sep 2013 16:13:06 +0000 (18:13 +0200)
lib/legacy/preferences.php [new file with mode: 0644]
lib/preferences.php
tests/lib/preferences.php

diff --git a/lib/legacy/preferences.php b/lib/legacy/preferences.php
new file mode 100644 (file)
index 0000000..8bfac84
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Frank Karlitschek
+ * @author Jakob Sack
+ * @copyright 2012 Frank Karlitschek frank@owncloud.org
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * This class provides an easy way for storing user preferences.
+ */
+OC_Preferences::$object = new \OC\Preferences(OC_DB::getConnection());
+class OC_Preferences{
+       public static $object;
+       /**
+        * @brief Get all users using the preferences
+        * @return array with user ids
+        *
+        * This function returns a list of all users that have at least one entry
+        * in the preferences table.
+        */
+       public static function getUsers() {
+               return self::$object->getUsers();
+       }
+
+       /**
+        * @brief Get all apps of a user
+        * @param string $user user
+        * @return array with app ids
+        *
+        * This function returns a list of all apps of the user that have at least
+        * one entry in the preferences table.
+        */
+       public static function getApps( $user ) {
+               return self::$object->getApps( $user );
+       }
+
+       /**
+        * @brief Get the available keys for an app
+        * @param string $user user
+        * @param string $app the app we are looking for
+        * @return array with key names
+        *
+        * This function gets all keys of an app of an user. Please note that the
+        * values are not returned.
+        */
+       public static function getKeys( $user, $app ) {
+               return self::$object->getKeys( $user, $app );
+       }
+
+       /**
+        * @brief Gets the preference
+        * @param string $user user
+        * @param string $app app
+        * @param string $key key
+        * @param string $default = null, default value if the key does not exist
+        * @return string the value or $default
+        *
+        * This function gets a value from the preferences table. If the key does
+        * not exist the default value will be returned
+        */
+       public static function getValue( $user, $app, $key, $default = null ) {
+               return self::$object->getValue( $user, $app, $key, $default );
+       }
+
+       /**
+        * @brief sets a value in the preferences
+        * @param string $user user
+        * @param string $app app
+        * @param string $key key
+        * @param string $value value
+        *
+        * Adds a value to the preferences. If the key did not exist before, it
+        * will be added automagically.
+        */
+       public static function setValue( $user, $app, $key, $value ) {
+               self::$object->setValue( $user, $app, $key, $value );
+       }
+
+       /**
+        * @brief Deletes a key
+        * @param string $user user
+        * @param string $app app
+        * @param string $key key
+        *
+        * Deletes a key.
+        */
+       public function deleteKey( $user, $app, $key ) {
+               self::$object->deleteKey( $user, $app, $key );
+       }
+
+       /**
+        * @brief Remove app of user from preferences
+        * @param string $user user
+        * @param string $app app
+        *
+        * Removes all keys in preferences belonging to the app and the user.
+        */
+       public static function deleteApp( $user, $app ) {
+               self::$object->deleteApp( $user, $app );
+       }
+
+       /**
+        * @brief Remove user from preferences
+        * @param string $user user
+        *
+        * Removes all keys in preferences belonging to the user.
+        */
+       public static function deleteUser( $user ) {
+               self::$object->deleteUser( $user );
+       }
+
+       /**
+        * @brief Remove app from all users
+        * @param string $app app
+        *
+        * Removes all keys in preferences belonging to the app.
+        */
+       public static function deleteAppFromAllUsers( $app ) {
+               self::$object->deleteAppFromAllUsers( $app );
+       }
+}
index 11ca760830edea40b35ead1154e02d516fc92328..359d9a83589923e688f20a3ef92e3fb2a8ed380d 100644 (file)
  *
  */
 
+namespace OC;
+
+use \OC\DB\Connection;
+
+
 /**
  * This class provides an easy way for storing user preferences.
  */
-class OC_Preferences{
+class Preferences {
+       protected $conn;
+
+       public function __construct(Connection $conn) {
+               $this->conn = $conn;
+       }
+
        /**
         * @brief Get all users using the preferences
         * @return array with user ids
@@ -45,14 +56,13 @@ class OC_Preferences{
         * This function returns a list of all users that have at least one entry
         * in the preferences table.
         */
-       public static function getUsers() {
-               // No need for more comments
-               $query = OC_DB::prepare( 'SELECT DISTINCT( `userid` ) FROM `*PREFIX*preferences`' );
-               $result = $query->execute();
+       public function getUsers() {
+               $query = 'SELECT DISTINCT `userid` FROM `*PREFIX*preferences`';
+               $result = $this->conn->executeQuery( $query );
 
                $users = array();
-               while( $row = $result->fetchRow()) {
-                       $users[] = $row["userid"];
+               while( $userid = $result->fetchColumn()) {
+                       $users[] = $userid;
                }
 
                return $users;
@@ -66,14 +76,13 @@ class OC_Preferences{
         * This function returns a list of all apps of the user that have at least
         * one entry in the preferences table.
         */
-       public static function getApps( $user ) {
-               // No need for more comments
-               $query = OC_DB::prepare( 'SELECT DISTINCT( `appid` ) FROM `*PREFIX*preferences` WHERE `userid` = ?' );
-               $result = $query->execute( array( $user ));
+       public function getApps( $user ) {
+               $query = 'SELECT DISTINCT `appid` FROM `*PREFIX*preferences` WHERE `userid` = ?';
+               $result = $this->conn->executeQuery( $query, array( $user ) );
 
                $apps = array();
-               while( $row = $result->fetchRow()) {
-                       $apps[] = $row["appid"];
+               while( $appid = $result->fetchColumn()) {
+                       $apps[] = $appid;
                }
 
                return $apps;
@@ -88,14 +97,13 @@ class OC_Preferences{
         * This function gets all keys of an app of an user. Please note that the
         * values are not returned.
         */
-       public static function getKeys( $user, $app ) {
-               // No need for more comments
-               $query = OC_DB::prepare( 'SELECT `configkey` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?' );
-               $result = $query->execute( array( $user, $app ));
+       public function getKeys( $user, $app ) {
+               $query = 'SELECT `configkey` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?';
+               $result = $this->conn->executeQuery( $query, array( $user, $app ));
 
                $keys = array();
-               while( $row = $result->fetchRow()) {
-                       $keys[] = $row["configkey"];
+               while( $key = $result->fetchColumn()) {
+                       $keys[] = $key;
                }
 
                return $keys;
@@ -112,16 +120,14 @@ class OC_Preferences{
         * This function gets a value from the preferences table. If the key does
         * not exist the default value will be returned
         */
-       public static function getValue( $user, $app, $key, $default = null ) {
+       public function getValue( $user, $app, $key, $default = null ) {
                // Try to fetch the value, return default if not exists.
-               $query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
-                       .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-               $result = $query->execute( array( $user, $app, $key ));
-
-               $row = $result->fetchRow();
+               $query = 'SELECT `configvalue` FROM `*PREFIX*preferences`'
+                       .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?';
+               $row = $this->conn->fetchAssoc( $query, array( $user, $app, $key ));
                if($row) {
                        return $row["configvalue"];
-               }else{
+               } else {
                        return $default;
                }
        }
@@ -132,29 +138,36 @@ class OC_Preferences{
         * @param string $app app
         * @param string $key key
         * @param string $value value
-        * @return bool
         *
         * Adds a value to the preferences. If the key did not exist before, it
         * will be added automagically.
         */
-       public static function setValue( $user, $app, $key, $value ) {
+       public function setValue( $user, $app, $key, $value ) {
                // Check if the key does exist
-               $query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
-                       .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-               $values=$query->execute(array($user, $app, $key))->fetchAll();
-               $exists=(count($values)>0);
+               $query = 'SELECT COUNT(*) FROM `*PREFIX*preferences`'
+                       .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?';
+               $count = $this->conn->fetchColumn( $query, array( $user, $app, $key ));
+               $exists = $count > 0;
 
                if( !$exists ) {
-                       $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*preferences`'
-                               .' ( `userid`, `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ?, ? )' );
-                       $query->execute( array( $user, $app, $key, $value ));
+                       $data = array(
+                               'userid' => $user,
+                               'appid' => $app,
+                               'configkey' => $key,
+                               'configvalue' => $value,
+                       );
+                       $this->conn->insert('*PREFIX*preferences', $data);
+               } else {
+                       $data = array(
+                               'configvalue' => $value,
+                       );
+                       $where = array(
+                               'userid' => $user,
+                               'appid' => $app,
+                               'configkey' => $key,
+                       );
+                       $this->conn->update('*PREFIX*preferences', $data, $where);
                }
-               else{
-                       $query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ?'
-                               .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-                       $query->execute( array( $value, $user, $app, $key ));
-               }
-               return true;
        }
 
        /**
@@ -162,62 +175,58 @@ class OC_Preferences{
         * @param string $user user
         * @param string $app app
         * @param string $key key
-        * @return bool
         *
         * Deletes a key.
         */
-       public static function deleteKey( $user, $app, $key ) {
-               // No need for more comments
-               $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences`'
-                       .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
-               $query->execute( array( $user, $app, $key ));
-
-               return true;
+       public function deleteKey( $user, $app, $key ) {
+               $where = array(
+                       'userid' => $user,
+                       'appid' => $app,
+                       'configkey' => $key,
+               );
+               $this->conn->delete('*PREFIX*preferences', $where);
        }
 
        /**
         * @brief Remove app of user from preferences
         * @param string $user user
         * @param string $app app
-        * @return bool
         *
-        * Removes all keys in appconfig belonging to the app and the user.
+        * Removes all keys in preferences belonging to the app and the user.
         */
-       public static function deleteApp( $user, $app ) {
-               // No need for more comments
-               $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?' );
-               $query->execute( array( $user, $app ));
-
-               return true;
+       public function deleteApp( $user, $app ) {
+               $where = array(
+                       'userid' => $user,
+                       'appid' => $app,
+               );
+               $this->conn->delete('*PREFIX*preferences', $where);
        }
 
        /**
         * @brief Remove user from preferences
         * @param string $user user
-        * @return bool
         *
-        * Removes all keys in appconfig belonging to the user.
+        * Removes all keys in preferences belonging to the user.
         */
-       public static function deleteUser( $user ) {
-               // No need for more comments
-               $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `userid` = ?' );
-               $query->execute( array( $user ));
-
-               return true;
+       public function deleteUser( $user ) {
+               $where = array(
+                       'userid' => $user,
+               );
+               $this->conn->delete('*PREFIX*preferences', $where);
        }
 
        /**
         * @brief Remove app from all users
         * @param string $app app
-        * @return bool
         *
         * Removes all keys in preferences belonging to the app.
         */
-       public static function deleteAppFromAllUsers( $app ) {
-               // No need for more comments
-               $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `appid` = ?' );
-               $query->execute( array( $app ));
-
-               return true;
+       public function deleteAppFromAllUsers( $app ) {
+               $where = array(
+                       'appid' => $app,
+               );
+               $this->conn->delete('*PREFIX*preferences', $where);
        }
 }
+
+require_once __DIR__.'/legacy/'.basename(__FILE__);
index 612cc81926ba8e33302513f89b5dde73d42e2617..68b794e9ea9526d574710d10552978a0c36efc24 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
  * Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
  * This file is licensed under the Affero General Public License version 3 or
  * later.
  * See the COPYING-README file.
@@ -124,3 +125,181 @@ class Test_Preferences extends PHPUnit_Framework_TestCase {
                $this->assertEquals(0, $result->numRows());
        }
 }
+
+class Test_Preferences_Object extends PHPUnit_Framework_TestCase {
+       public function testGetUsers()
+       {
+               $statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
+               $statementMock->expects($this->exactly(2))
+                       ->method('fetchColumn')
+                       ->will($this->onConsecutiveCalls('foo', false));
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->once())
+                       ->method('executeQuery')
+                       ->with($this->equalTo('SELECT DISTINCT `userid` FROM `*PREFIX*preferences`'))
+                       ->will($this->returnValue($statementMock));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $apps = $preferences->getUsers();
+               $this->assertEquals(array('foo'), $apps);
+       }
+
+       public function testGetApps()
+       {
+               $statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
+               $statementMock->expects($this->exactly(2))
+                       ->method('fetchColumn')
+                       ->will($this->onConsecutiveCalls('foo', false));
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->once())
+                       ->method('executeQuery')
+                       ->with($this->equalTo('SELECT DISTINCT `appid` FROM `*PREFIX*preferences` WHERE `userid` = ?'),
+                               $this->equalTo(array('bar')))
+                       ->will($this->returnValue($statementMock));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $apps = $preferences->getApps('bar');
+               $this->assertEquals(array('foo'), $apps);
+       }
+
+       public function testGetKeys()
+       {
+               $statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
+               $statementMock->expects($this->exactly(2))
+                       ->method('fetchColumn')
+                       ->will($this->onConsecutiveCalls('foo', false));
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->once())
+                       ->method('executeQuery')
+                       ->with($this->equalTo('SELECT `configkey` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ?'),
+                               $this->equalTo(array('bar', 'moo')))
+                       ->will($this->returnValue($statementMock));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $keys = $preferences->getKeys('bar', 'moo');
+               $this->assertEquals(array('foo'), $keys);
+       }
+
+       public function testGetValue()
+       {
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->exactly(2))
+                       ->method('fetchAssoc')
+                       ->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
+                               $this->equalTo(array('grg', 'bar', 'red')))
+                       ->will($this->onConsecutiveCalls(array('configvalue'=>'foo'), null));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $value = $preferences->getValue('grg', 'bar', 'red');
+               $this->assertEquals('foo', $value);
+               $value = $preferences->getValue('grg', 'bar', 'red', 'def');
+               $this->assertEquals('def', $value);
+       }
+
+       public function testSetValue()
+       {
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->exactly(2))
+                       ->method('fetchColumn')
+                       ->with($this->equalTo('SELECT COUNT(*) FROM `*PREFIX*preferences`'
+                               .' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'),
+                               $this->equalTo(array('grg', 'bar', 'foo')))
+                       ->will($this->onConsecutiveCalls(0, 1));
+               $connectionMock->expects($this->once())
+                       ->method('insert')
+                       ->with($this->equalTo('*PREFIX*preferences'),
+                               $this->equalTo(
+                                       array(
+                                               'userid' => 'grg',
+                                               'appid' => 'bar',
+                                               'configkey' => 'foo',
+                                               'configvalue' => 'v1',
+                                       )
+                               ));
+               $connectionMock->expects($this->once())
+                       ->method('update')
+                       ->with($this->equalTo('*PREFIX*preferences'),
+                               $this->equalTo(
+                                       array(
+                                               'configvalue' => 'v2',
+                                       )),
+                               $this->equalTo(
+                                       array(
+                                               'userid' => 'grg',
+                                               'appid' => 'bar',
+                                               'configkey' => 'foo',
+                                       )
+                               ));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $preferences->setValue('grg', 'bar', 'foo', 'v1');
+               $preferences->setValue('grg', 'bar', 'foo', 'v2');
+       }
+
+       public function testDeleteKey()
+       {
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->once())
+                       ->method('delete')
+                       ->with($this->equalTo('*PREFIX*preferences'),
+                               $this->equalTo(
+                                       array(
+                                               'userid' => 'grg',
+                                               'appid' => 'bar',
+                                               'configkey' => 'foo',
+                                       )
+                               ));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $preferences->deleteKey('grg', 'bar', 'foo');
+       }
+
+       public function testDeleteApp()
+       {
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->once())
+                       ->method('delete')
+                       ->with($this->equalTo('*PREFIX*preferences'),
+                               $this->equalTo(
+                                       array(
+                                               'userid' => 'grg',
+                                               'appid' => 'bar',
+                                       )
+                               ));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $preferences->deleteApp('grg', 'bar');
+       }
+
+       public function testDeleteUser()
+       {
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->once())
+                       ->method('delete')
+                       ->with($this->equalTo('*PREFIX*preferences'),
+                               $this->equalTo(
+                                       array(
+                                               'userid' => 'grg',
+                                       )
+                               ));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $preferences->deleteUser('grg');
+       }
+
+       public function testDeleteAppFromAllUsers()
+       {
+               $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);
+               $connectionMock->expects($this->once())
+                       ->method('delete')
+                       ->with($this->equalTo('*PREFIX*preferences'),
+                               $this->equalTo(
+                                       array(
+                                               'appid' => 'bar',
+                                       )
+                               ));
+
+               $preferences = new OC\Preferences($connectionMock);
+               $preferences->deleteAppFromAllUsers('bar');
+       }
+}