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
This commit is contained in:
cweiske 2009-09-22 06:12:25 +00:00
parent f05dad73e0
commit 724d9fa421
2 changed files with 47 additions and 18 deletions

View file

@ -97,22 +97,38 @@ class BookmarkService {
return $this->db->sql_fetchfield(0, 0); return $this->db->sql_fetchfield(0, 0);
} }
function editAllowed($bookmark) { /**
if (!is_numeric($bookmark) && (!is_array($bookmark) || !is_numeric($bookmark['bId']))) * 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; return false;
}
if (!is_array($bookmark)) if (!is_array($bookmark)
if (!($bookmark = $this->getBookmark($bookmark))) && !($bookmark = $this->getBookmark($bookmark))
) {
return false; return false;
}
$userservice = & ServiceFactory :: getServiceInstance('UserService'); $userservice = & ServiceFactory::getServiceInstance('UserService');
$userid = $userservice->getCurrentUserId(); $user = $userservice->getCurrentUser();
if(!is_numeric($userid))
return false; // useful for few servers configuration (see brunaud bugs) //user has to be either admin, or owner
if ($GLOBALS['adminsCanModifyBookmarksFromOtherUsers'] && $userservice->isAdmin($userid) && !$userservice->isAdmin($bookmark['uId'])) if ($GLOBALS['adminsCanModifyBookmarksFromOtherUsers']
&& $userservice->isAdmin($user)
) {
return true; return true;
else } else {
return ($bookmark['uId'] == $userid); return ($bookmark['uId'] == $user['uId']);
}
} }
function bookmarkExists($address = false, $uid = NULL) { function bookmarkExists($address = false, $uid = NULL) {

View file

@ -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']) if (isset($GLOBALS['admin_users'])
&& in_array($user['username'], $GLOBALS['admin_users'])) { && in_array($user['username'], $GLOBALS['admin_users'])
) {
return true; return true;
} else { } else {
return false; return false;