|
22 | 22 | use Illuminate\Support\Str; |
23 | 23 | use PKP\config\Config; |
24 | 24 | use PKP\core\Core; |
| 25 | +use PKP\core\PKPApplication; |
25 | 26 | use PKP\db\DAORegistry; |
26 | 27 | use PKP\site\Site; |
27 | 28 | use PKP\site\SiteDAO; |
28 | 29 | use PKP\user\User; |
29 | 30 | use PKP\userGroup\UserGroup; |
30 | | -use PKP\security\Role; |
31 | | -use PKP\core\PKPApplication; |
32 | 31 |
|
33 | 32 | class Validation |
34 | 33 | { |
@@ -417,56 +416,56 @@ public static function canAdminister($administeredUserId, $administratorUserId) |
417 | 416 | ->withRoleIds(Role::ROLE_ID_SITE_ADMIN) |
418 | 417 | ->whereHas('userUserGroups', function ($query) use ($administeredUserId) { |
419 | 418 | $query->withUserId($administeredUserId) |
420 | | - ->withActive(); |
| 419 | + ->withActive(); |
421 | 420 | }) |
422 | 421 | ->exists(); |
423 | | - |
| 422 | + |
424 | 423 | if ($isAdministeredUserSiteAdmin) { |
425 | 424 | return false; |
426 | 425 | } |
427 | | - |
| 426 | + |
428 | 427 | // check if administrator user is site admin |
429 | 428 | $isAdministratorUserSiteAdmin = UserGroup::query() |
430 | 429 | ->withContextIds($siteContextId) |
431 | 430 | ->withRoleIds(Role::ROLE_ID_SITE_ADMIN) |
432 | 431 | ->whereHas('userUserGroups', function ($query) use ($administratorUserId) { |
433 | 432 | $query->withUserId($administratorUserId) |
434 | | - ->withActive(); |
| 433 | + ->withActive(); |
435 | 434 | }) |
436 | 435 | ->exists(); |
437 | | - |
| 436 | + |
438 | 437 | if ($isAdministratorUserSiteAdmin) { |
439 | 438 | return true; |
440 | 439 | } |
441 | | - |
| 440 | + |
442 | 441 | // Get contexts where administered user has roles |
443 | 442 | $administeredUserContexts = UserGroup::query() |
444 | 443 | ->whereHas('userUserGroups', function ($query) use ($administeredUserId) { |
445 | 444 | $query->withUserId($administeredUserId) |
446 | | - ->withActive(); |
| 445 | + ->withActive(); |
447 | 446 | }) |
448 | 447 | ->get() |
449 | 448 | ->map(fn ($userGroup) => $userGroup->contextId) |
450 | 449 | ->unique() |
451 | 450 | ->values() |
452 | 451 | ->toArray(); |
453 | | - |
| 452 | + |
454 | 453 | // get contexts where administrator user has manager role |
455 | 454 | $administratorManagerContexts = UserGroup::query() |
456 | 455 | ->withRoleIds(Role::ROLE_ID_MANAGER) |
457 | 456 | ->whereHas('userUserGroups', function ($query) use ($administratorUserId) { |
458 | 457 | $query->withUserId($administratorUserId) |
459 | | - ->withActive(); |
| 458 | + ->withActive(); |
460 | 459 | }) |
461 | 460 | ->get() |
462 | 461 | ->map(fn ($userGroup) => $userGroup->contextId) |
463 | 462 | ->unique() |
464 | 463 | ->values() |
465 | 464 | ->toArray(); |
466 | | - |
| 465 | + |
467 | 466 | // check for conflicting contexts |
468 | 467 | $conflictingContexts = array_diff($administeredUserContexts, $administratorManagerContexts); |
469 | | - |
| 468 | + |
470 | 469 | if (!empty($conflictingContexts)) { |
471 | 470 | // found conflicting contexts: disqualified |
472 | 471 | return false; |
@@ -504,12 +503,11 @@ public static function getAdministrationLevel( |
504 | 503 |
|
505 | 504 | // single query to fetch user groups assigned to either user |
506 | 505 | $allUserGroups = UserGroup::query() |
507 | | - ->whereHas('userUserGroups', fn($q) => |
| 506 | + ->whereHas( |
| 507 | + 'userUserGroups', |
| 508 | + fn ($q) => |
508 | 509 | $q->withActive()->withUserIds([$administratorUserId, $administeredUserId]) |
509 | 510 | ) |
510 | | - ->with(['userUserGroups' => fn($q) => |
511 | | - $q->withActive()->withUserIds([$administratorUserId, $administeredUserId]) |
512 | | - ]) |
513 | 511 | ->get(); |
514 | 512 |
|
515 | 513 | $administratorMap = []; |
|
0 commit comments