Merge pull request #8893 from owncloud/feature/get-users-by-preference

Add method to get users by their preference
This commit is contained in:
Thomas Müller 2014-06-05 16:52:00 +02:00
commit 4b650a20a4
2 changed files with 48 additions and 0 deletions

View file

@ -242,6 +242,36 @@ class Preferences {
return $userValues;
}
/**
* Gets the users for a preference
* @param string $app
* @param string $key
* @param string $value
* @return array
*/
public function getUsersForValue($app, $key, $value) {
$users = array();
$query = 'SELECT `userid` '
. ' FROM `*PREFIX*preferences` '
. ' WHERE `appid` = ? AND `configkey` = ? AND ';
if (\OC_Config::getValue( 'dbtype', 'sqlite' ) === 'oci') {
//FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
$query .= ' to_char(`configvalue`)= ?';
} else {
$query .= ' `configvalue` = ?';
}
$result = $this->conn->executeQuery($query, array($app, $key, $value));
while ($row = $result->fetch()) {
$users[] = $row['userid'];
}
return $users;
}
/**
* Deletes a key
* @param string $user user

View file

@ -221,6 +221,24 @@ class Test_Preferences_Object extends PHPUnit_Framework_TestCase {
$this->assertEquals('someothervalue', $values['AnotherUser']);
}
public function testGetValueUsers()
{
// Prepare data
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*preferences` VALUES(?, ?, ?, ?)');
$query->execute(array('SomeUser', 'testGetUsersForValue', 'somekey', 'somevalue'));
$query->execute(array('AnotherUser', 'testGetUsersForValue', 'somekey', 'someothervalue'));
$query->execute(array('AUser', 'testGetUsersForValue', 'somekey', 'somevalue'));
$preferences = new OC\Preferences(\OC_DB::getConnection());
$result = $preferences->getUsersForValue('testGetUsersForValue', 'somekey', 'somevalue');
sort($result);
$this->assertEquals(array('AUser', 'SomeUser'), $result);
// Clean DB after the test
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*preferences` WHERE `appid` = ?');
$query->execute(array('testGetUsersForValue'));
}
public function testDeleteKey()
{
$connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false);