Skip to content

Commit d539294

Browse files
authored
Merge pull request #4471 from bozana/4340-master
#4340 Users in multicontext install are offered links to unprivileged contexts
2 parents 19b15b2 + 8e06e0f commit d539294

File tree

7 files changed

+31
-15
lines changed

7 files changed

+31
-15
lines changed

classes/context/ContextDAO.inc.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ function getAll($enabledOnly = false, $rangeInfo = null) {
109109

110110
/**
111111
* Retrieve available contexts.
112+
* If user-based contexts, retrieve all contexts assigned by user group
113+
* or all contexts for site admin
114+
* If not user-based, retrieve all enabled contexts.
112115
* @param $userId int Optional user ID to find available contexts for
113116
* @param $rangeInfo Object optional
114117
* @return DAOResultFactory containing matching Contexts
@@ -122,12 +125,12 @@ function getAvailable($userId = null, $rangeInfo = null) {
122125

123126
$result = $this->retrieveRange(
124127
'SELECT c.* FROM ' . $this->tableName . ' c
125-
WHERE c.enabled = 1 ' .
128+
WHERE ' .
126129
($userId?
127-
'OR c.' . $this->primaryKeyColumn . ' IN (SELECT DISTINCT ug.context_id FROM user_groups ug JOIN user_user_groups uug ON (ug.user_group_id = uug.user_group_id) WHERE uug.user_id = ?)
128-
OR ? IN (SELECT user_id FROM user_groups ug JOIN user_user_groups uug ON (ug.user_group_id = uug.user_group_id) WHERE ug.role_id = ?) '
129-
:'') .
130-
'ORDER BY seq',
130+
'c.' . $this->_getPrimaryKeyColumn() . ' IN (SELECT DISTINCT ug.context_id FROM user_groups ug JOIN user_user_groups uug ON (ug.user_group_id = uug.user_group_id) WHERE uug.user_id = ?)
131+
OR ? IN (SELECT user_id FROM user_groups ug JOIN user_user_groups uug ON (ug.user_group_id = uug.user_group_id) WHERE ug.role_id = ?)'
132+
:'c.enabled = 1') .
133+
' ORDER BY seq',
131134
$params,
132135
$rangeInfo
133136
);

classes/security/RoleDAO.inc.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,12 @@ function userHasRole($contextId, $userId, $roleId) {
140140
*/
141141
function getByUserId($userId, $contextId = null) {
142142
$params = array((int) $userId);
143-
if ($contextId) $params[] = (int) $contextId;
143+
if ($contextId !== null) $params[] = (int) $contextId;
144144
$result = $this->retrieve(
145145
'SELECT DISTINCT ug.role_id
146146
FROM user_groups ug
147147
JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
148-
WHERE uug.user_id = ?' . ($contextId?' AND ug.context_id = ?':''),
148+
WHERE uug.user_id = ?' . ($contextId !== null ? ' AND ug.context_id = ?' : ''),
149149
$params
150150
);
151151

classes/services/PKPNavigationMenuService.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ function getDisplayStatus(&$navigationMenuItem, &$navigationMenu) {
166166
$navigationMenuItem->setIsDisplayed($isUserLoggedIn);
167167
break;
168168
case NMI_TYPE_ADMINISTRATION:
169-
$navigationMenuItem->setIsDisplayed($isUserLoggedIn && ($currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), $contextId) || $currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE)));
169+
$navigationMenuItem->setIsDisplayed($isUserLoggedIn && $currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE));
170170
break;
171171
case NMI_TYPE_SEARCH:
172172
$navigationMenuItem->setIsDisplayed($context);

classes/services/PKPSubmissionService.inc.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,9 @@ public function getWorkflowUrlByUserRoles($submission, $userId = null) {
183183
// Send authors, journal managers and site admins to the submission
184184
// wizard for incomplete submissions
185185
if ($submission->getSubmissionProgress() > 0 &&
186-
($authorDashboard || $user->hasRole(array(ROLE_ID_MANAGER, ROLE_ID_SITE_ADMIN), $submissionContext->getId()))) {
186+
($authorDashboard ||
187+
$user->hasRole(array(ROLE_ID_MANAGER), $submissionContext->getId()) ||
188+
$user->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE))) {
187189
return $dispatcher->url(
188190
$request,
189191
ROUTE_PAGE,
@@ -257,8 +259,7 @@ public function canCurrentUserDelete($submission) {
257259
}
258260

259261
$request = Application::getRequest();
260-
$context = $request->getContext();
261-
$contextId = $context ? $context->getId() : 0;
262+
$contextId = $submission->getContextId();
262263

263264
$currentUser = $request->getUser();
264265
if (!$currentUser) {
@@ -269,7 +270,7 @@ public function canCurrentUserDelete($submission) {
269270

270271
// Only allow admins and journal managers to delete submissions, except
271272
// for authors who can delete their own incomplete submissions
272-
if ($currentUser->hasRole(array(ROLE_ID_MANAGER, ROLE_ID_SITE_ADMIN), $contextId)) {
273+
if ($currentUser->hasRole(array(ROLE_ID_MANAGER), $contextId) || $currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE)) {
273274
$canDelete = true;
274275
} else {
275276
if ($submission->getSubmissionProgress() != 0 ) {
@@ -347,7 +348,7 @@ public function canUserViewAuthor($user, $submission) {
347348

348349
$contextId = $submission->getContextId();
349350

350-
if ($user->hasRole(array(ROLE_ID_MANAGER), $contextId) || $user->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_ID_NONE)) {
351+
if ($user->hasRole(array(ROLE_ID_MANAGER), $contextId) || $user->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE)) {
351352
return true;
352353
}
353354

controllers/grid/queries/form/QueryForm.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ function fetch($request, $template = null, $display = false, $actionArgs = array
231231
}
232232

233233
// if current user is editor, add all reviewers
234-
if ( $user->hasRole(array(ROLE_ID_MANAGER, ROLE_ID_SITE_ADMIN), $context->getId()) || array_intersect(array(ROLE_ID_SUB_EDITOR), $userRoles) ) {
234+
if ( $user->hasRole(array(ROLE_ID_MANAGER), $context->getId()) || $user->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE) || array_intersect(array(ROLE_ID_SUB_EDITOR), $userRoles) ) {
235235
foreach ($reviewAssignments as $reviewAssignment) {
236236
$includeUsers[] = $reviewAssignment->getReviewerId();
237237
}

pages/dashboard/DashboardHandler.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ function index($args, $request) {
9494
),
9595
'lazyLoad' => true,
9696
);
97-
if (!$currentUser->hasRole(array(ROLE_ID_SITE_ADMIN, ROLE_ID_MANAGER), $request->getContext()->getId())) {
97+
if (!$currentUser->hasRole(array(ROLE_ID_MANAGER), $request->getContext()->getId()) && !$currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE)) {
9898
$params['getParams']['assignedTo'] = $currentUser->getId();
9999
}
100100
$archivedListPanel = new SubmissionsListPanel($params);

pages/user/ProfileHandler.inc.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ function authorize($request, &$args, $roleAssignments) {
4646
* @param $request PKPRequest
4747
*/
4848
function profile($args, $request) {
49+
$context = $request->getContext();
50+
if (!$context) {
51+
$user = $request->getUser();
52+
$contextDao = Application::getContextDAO();
53+
$workingContexts = $contextDao->getAvailable($user?$user->getId():null);
54+
if ($workingContexts && $workingContexts->getCount() == 1) {
55+
$workingContext = $workingContexts->next();
56+
$contextPath = $workingContext->getPath();
57+
$request->redirect($contextPath, 'user', 'profile', null, $args);
58+
}
59+
}
60+
4961
if ($anchor = array_shift($args)) {
5062
// Some requests will try to specify a tab name in the args. Redirect
5163
// to use this as an anchor name instead.

0 commit comments

Comments
 (0)