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:
parent
f05dad73e0
commit
724d9fa421
2 changed files with 47 additions and 18 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue