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);
}
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;
}
if (!is_array($bookmark))
if (!($bookmark = $this->getBookmark($bookmark)))
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']))
$user = $userservice->getCurrentUser();
//user has to be either admin, or owner
if ($GLOBALS['adminsCanModifyBookmarksFromOtherUsers']
&& $userservice->isAdmin($user)
) {
return true;
else
return ($bookmark['uId'] == $userid);
} else {
return ($bookmark['uId'] == $user['uId']);
}
}
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'])
&& in_array($user['username'], $GLOBALS['admin_users'])) {
&& in_array($user['username'], $GLOBALS['admin_users'])
) {
return true;
} else {
return false;