diff options
author | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2009-09-22 06:12:25 +0000 |
---|---|---|
committer | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2009-09-22 06:12:25 +0000 |
commit | 724d9fa421dad542a9ea74f14cd8b43ec44e22d3 (patch) | |
tree | 3cb1ea7ce0aac5f4e0c99a884c7de63984721ceb /services | |
parent | f05dad73e062f5efbc5579f0ac60df8a8e8ff970 (diff) | |
download | semanticscuttle-724d9fa421dad542a9ea74f14cd8b43ec44e22d3.tar.gz semanticscuttle-724d9fa421dad542a9ea74f14cd8b43ec44e22d3.tar.bz2 |
Fix bug #2674961: editAllowed optimization - make less queries for each bookmark
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@366 b3834d28-1941-0410-a4f8-b48e95affb8f
Diffstat (limited to 'services')
-rw-r--r-- | services/bookmarkservice.php | 44 | ||||
-rw-r--r-- | services/userservice.php | 21 |
2 files changed, 47 insertions, 18 deletions
diff --git a/services/bookmarkservice.php b/services/bookmarkservice.php index 6a50df5..f119593 100644 --- a/services/bookmarkservice.php +++ b/services/bookmarkservice.php @@ -97,22 +97,38 @@ class BookmarkService { return $this->db->sql_fetchfield(0, 0); } - function editAllowed($bookmark) { - if (!is_numeric($bookmark) && (!is_array($bookmark) || !is_numeric($bookmark['bId']))) - return false; + /** + * Check if a bookmark may be edited by the current user + * + * @param integer|array $bookmark Bookmark uId or bookmark array + * + * @return boolean True if allowed + */ + function editAllowed($bookmark) + { + if (!is_numeric($bookmark) && (!is_array($bookmark) + || !is_numeric($bookmark['bId'])) + ) { + return false; + } - if (!is_array($bookmark)) - if (!($bookmark = $this->getBookmark($bookmark))) - return false; + if (!is_array($bookmark) + && !($bookmark = $this->getBookmark($bookmark)) + ) { + return false; + } - $userservice = & ServiceFactory :: getServiceInstance('UserService'); - $userid = $userservice->getCurrentUserId(); - if(!is_numeric($userid)) - return false; // useful for few servers configuration (see brunaud bugs) - if ($GLOBALS['adminsCanModifyBookmarksFromOtherUsers'] && $userservice->isAdmin($userid) && !$userservice->isAdmin($bookmark['uId'])) - return true; - else - return ($bookmark['uId'] == $userid); + $userservice = & ServiceFactory::getServiceInstance('UserService'); + $user = $userservice->getCurrentUser(); + + //user has to be either admin, or owner + if ($GLOBALS['adminsCanModifyBookmarksFromOtherUsers'] + && $userservice->isAdmin($user) + ) { + return true; + } else { + return ($bookmark['uId'] == $user['uId']); + } } function bookmarkExists($address = false, $uid = NULL) { diff --git a/services/userservice.php b/services/userservice.php index 512204c..a24c7ba 100644 --- a/services/userservice.php +++ b/services/userservice.php @@ -213,11 +213,24 @@ class UserService { } } - function isAdmin($userid) { - $user = $this->getUser($userid); + /** + * Checks if the given user is an administrator. + * Uses global admin_users property containing admin + * user names + * + * @param integer|array $user User ID or user row from DB + * + * @return boolean True if the user is admin + */ + function isAdmin($user) + { + if (is_numeric($user)) { + $user = $this->getUser($user); + } - if(isset($GLOBALS['admin_users']) - && in_array($user['username'], $GLOBALS['admin_users'])) { + if (isset($GLOBALS['admin_users']) + && in_array($user['username'], $GLOBALS['admin_users']) + ) { return true; } else { return false; |