aboutsummaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorcweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>2009-09-22 06:12:25 +0000
committercweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>2009-09-22 06:12:25 +0000
commit724d9fa421dad542a9ea74f14cd8b43ec44e22d3 (patch)
tree3cb1ea7ce0aac5f4e0c99a884c7de63984721ceb /services
parentf05dad73e062f5efbc5579f0ac60df8a8e8ff970 (diff)
downloadsemanticscuttle-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.php44
-rw-r--r--services/userservice.php21
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;