From 5731a1b01cc5ba1a4f1226336a56761d967c8e88 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Mon, 11 Feb 2013 22:01:52 +0100 Subject: [PATCH] introduce new virtual method hasUserListings() to determine if a user backend can list it's users. --- apps/user_ldap/user_ldap.php | 6 ++ apps/user_ldap/user_proxy.php | 8 +++ apps/user_webdavauth/user_webdavauth.php | 6 ++ lib/user.php | 2 +- lib/user/backend.php | 24 ++++--- lib/user/database.php | 82 +++++++++++++----------- lib/user/dummy.php | 7 ++ lib/user/interface.php | 7 +- 8 files changed, 95 insertions(+), 47 deletions(-) diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 0962756228c..7778c37c794 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -261,4 +261,10 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface { return (bool)((OC_USER_BACKEND_CHECK_PASSWORD | OC_USER_BACKEND_GET_HOME) & $actions); } + /** + * @return bool + */ + public function hasUserListings() { + return true; + } } \ No newline at end of file diff --git a/apps/user_ldap/user_proxy.php b/apps/user_ldap/user_proxy.php index a94be3354fc..b150e2f32c3 100644 --- a/apps/user_ldap/user_proxy.php +++ b/apps/user_ldap/user_proxy.php @@ -183,4 +183,12 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface { public function deleteUser($uid) { return false; } + + /** + * @return bool + */ + public function hasUserListings() { + return true; + } + } \ No newline at end of file diff --git a/apps/user_webdavauth/user_webdavauth.php b/apps/user_webdavauth/user_webdavauth.php index dd34e0ad2f1..6417e45434d 100755 --- a/apps/user_webdavauth/user_webdavauth.php +++ b/apps/user_webdavauth/user_webdavauth.php @@ -65,6 +65,12 @@ class OC_USER_WEBDAVAUTH extends OC_User_Backend { return true; } + /** + * @return bool + */ + public function hasUserListings() { + return false; + } /* * we donĀ“t know the users so all we can do it return an empty array here diff --git a/lib/user.php b/lib/user.php index 0ab224bb15f..16680be4aa0 100644 --- a/lib/user.php +++ b/lib/user.php @@ -555,7 +555,7 @@ class OC_User { public static function userExistsForCreation($uid) { foreach(self::$_usedBackends as $backend) { - if(!$backend->implementsActions(OC_USER_BACKEND_CREATE_USER)) + if(!$backend->hasUserListings()) continue; $result=$backend->userExists($uid); diff --git a/lib/user/backend.php b/lib/user/backend.php index 56fa3195978..34de1e50698 100644 --- a/lib/user/backend.php +++ b/lib/user/backend.php @@ -134,18 +134,26 @@ abstract class OC_User_Backend implements OC_User_Interface { return $uid; } - /** - * @brief Get a list of all display names - * @returns array with all displayNames (value) and the correspondig uids (key) - * - * Get a list of all display names and user ids. - */ - public function getDisplayNames($search = '', $limit = null, $offset = null) { + /** + * @brief Get a list of all display names + * @returns array with all displayNames (value) and the corresponding uids (key) + * + * Get a list of all display names and user ids. + */ + public function getDisplayNames($search = '', $limit = null, $offset = null) { $displayNames = array(); $users = $this->getUsers($search, $limit, $offset); foreach ( $users as $user) { $displayNames[$user] = $user; } - return $displayNames; + return $displayNames; + } + + /** + * @brief Check if a user list is available or not + * @return boolean if users can be listed or not + */ + public function hasUserListings() { + return false; } } diff --git a/lib/user/database.php b/lib/user/database.php index 8dfd9534a96..1a6a22d7a16 100644 --- a/lib/user/database.php +++ b/lib/user/database.php @@ -111,30 +111,30 @@ class OC_User_Database extends OC_User_Backend { } } - /** - * @brief Set display name - * @param $uid The username - * @param $displayName The new display name - * @returns true/false - * - * Change the display name of a user + /** + * @brief Set display name + * @param $uid The username + * @param $displayName The new display name + * @returns true/false + * + * Change the display name of a user */ public function setDisplayName( $uid, $displayName ) { - if( $this->userExists($uid) ) { - $query = OC_DB::prepare( 'UPDATE `*PREFIX*users` SET `displayname` = ? WHERE `uid` = ?' ); - $query->execute( array( $displayName, $uid )); - return true; - }else{ - return false; - } + if( $this->userExists($uid) ) { + $query = OC_DB::prepare( 'UPDATE `*PREFIX*users` SET `displayname` = ? WHERE `uid` = ?' ); + $query->execute( array( $displayName, $uid )); + return true; + }else{ + return false; + } } - /** - * @brief get display name of the user - * @param $uid user ID of the user - * @return display name - */ - public function getDisplayName($uid) { + /** + * @brief get display name of the user + * @param $uid user ID of the user + * @return display name + */ + public function getDisplayName($uid) { if( $this->userExists($uid) ) { $query = OC_DB::prepare( 'SELECT displayname FROM `*PREFIX*users` WHERE `uid` = ?' ); $result = $query->execute( array( $uid ))->fetchAll(); @@ -144,36 +144,36 @@ class OC_User_Database extends OC_User_Backend { } else { return $uid; } - } + } } - /** - * @brief Get a list of all display names - * @returns array with all displayNames (value) and the correspondig uids (key) - * - * Get a list of all display names and user ids. - */ + /** + * @brief Get a list of all display names + * @returns array with all displayNames (value) and the correspondig uids (key) + * + * Get a list of all display names and user ids. + */ public function getDisplayNames($search = '', $limit = null, $offset = null) { $displayNames = array(); - $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset); + $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset); $result = $query->execute(array($search.'%')); - $users = array(); - while ($row = $result->fetchRow()) { - $displayNames[$row['uid']] = $row['displayname']; + $users = array(); + while ($row = $result->fetchRow()) { + $displayNames[$row['uid']] = $row['displayname']; } // let's see if we can also find some users who don't have a display name yet - $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset); + $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset); $result = $query->execute(array($search.'%')); - while ($row = $result->fetchRow()) { + while ($row = $result->fetchRow()) { $displayName = trim($row['displayname'], ' '); - if ( empty($displayName) ) { + if ( empty($displayName) ) { $displayNames[$row['uid']] = $row['uid']; - } + } } - - return $displayNames; + + return $displayNames; } /** @@ -256,4 +256,12 @@ class OC_User_Database extends OC_User_Backend { return false; } } + + /** + * @return bool + */ + public function hasUserListings() { + return true; + } + } diff --git a/lib/user/dummy.php b/lib/user/dummy.php index 4dbbc02b888..d63f60efbeb 100644 --- a/lib/user/dummy.php +++ b/lib/user/dummy.php @@ -112,4 +112,11 @@ class OC_User_Dummy extends OC_User_Backend { public function userExists($uid) { return isset($this->users[$uid]); } + + /** + * @return bool + */ + public function hasUserListings() { + return true; + } } diff --git a/lib/user/interface.php b/lib/user/interface.php index b4667633b50..b1e19aea7fb 100644 --- a/lib/user/interface.php +++ b/lib/user/interface.php @@ -66,10 +66,15 @@ interface OC_User_Interface { /** * @brief Get a list of all display names - * @returns array with all displayNames (value) and the correspondig uids (key) + * @returns array with all displayNames (value) and the corresponding uids (key) * * Get a list of all display names and user ids. */ public function getDisplayNames($search = '', $limit = null, $offset = null); + /** + * @brief Check if a user list is available or not + * @return boolean if users can be listed or not + */ + public function hasUserListings(); } \ No newline at end of file