Skip to content

Commit 5ff6ece

Browse files
committed
pkp#11118 Proposed fixes for cleanup
1 parent 62e9132 commit 5ff6ece

File tree

8 files changed

+134
-53
lines changed

8 files changed

+134
-53
lines changed

classes/invitation/core/Invitation.php

+7-10
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ abstract public static function getType(): string;
7272
*/
7373
abstract public function getInvitationActionRedirectController(): ?InvitationActionRedirectController;
7474

75+
/**
76+
* Defines the controller that is responsible for the handle of the create/edit
77+
* invitation views
78+
* @return InvitationUIActionRedirectController|null
79+
*/
80+
abstract public function getInvitationUIActionRedirectController(): ?InvitationUIActionRedirectController;
81+
7582
/**
7683
* Get a specific payload instance for the child class.
7784
*/
@@ -502,14 +509,4 @@ public function isPending(): bool
502509

503510
return false;
504511
}
505-
506-
/**
507-
* Defines the controller that is responsible for the handle of the create/edit
508-
* invitation views
509-
* @return InvitationUIActionRedirectController|null
510-
*/
511-
public function getInvitationUIActionRedirectController(): ?InvitationUIActionRedirectController
512-
{
513-
return new UserRoleAssignmentInviteUIController($this);
514-
}
515512
}

classes/invitation/invitations/changeProfileEmail/ChangeProfileEmailInvite.php

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use PKP\invitation\core\enums\ValidationContext;
2626
use PKP\invitation\core\Invitation;
2727
use PKP\invitation\core\InvitationActionRedirectController;
28+
use PKP\invitation\core\InvitationUIActionRedirectController;
2829
use PKP\invitation\core\traits\HasMailable;
2930
use PKP\invitation\core\traits\ShouldValidate;
3031
use PKP\invitation\invitations\changeProfileEmail\handlers\ChangeProfileEmailInviteRedirectController;
@@ -138,6 +139,11 @@ public function getInvitationActionRedirectController(): ?InvitationActionRedire
138139
return new ChangeProfileEmailInviteRedirectController($this);
139140
}
140141

142+
public function getInvitationUIActionRedirectController(): ?InvitationUIActionRedirectController
143+
{
144+
return null;
145+
}
146+
141147
/**
142148
* @inheritDoc
143149
*/

classes/invitation/invitations/registrationAccess/RegistrationAccessInvite.php

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use PKP\invitation\core\enums\InvitationStatus;
2626
use PKP\invitation\core\Invitation;
2727
use PKP\invitation\core\InvitationActionRedirectController;
28+
use PKP\invitation\core\InvitationUIActionRedirectController;
2829
use PKP\invitation\invitations\registrationAccess\handlers\RegistrationAccessInviteRedirectController;
2930
use PKP\user\User;
3031

@@ -101,4 +102,9 @@ public function getInvitationActionRedirectController(): ?InvitationActionRedire
101102
{
102103
return new RegistrationAccessInviteRedirectController($this);
103104
}
105+
106+
public function getInvitationUIActionRedirectController(): ?InvitationUIActionRedirectController
107+
{
108+
return null;
109+
}
104110
}

classes/invitation/invitations/reviewerAccess/ReviewerAccessInvite.php

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use PKP\invitation\core\enums\ValidationContext;
2626
use PKP\invitation\core\Invitation;
2727
use PKP\invitation\core\InvitationActionRedirectController;
28+
use PKP\invitation\core\InvitationUIActionRedirectController;
2829
use PKP\invitation\core\traits\ShouldValidate;
2930
use PKP\invitation\invitations\reviewerAccess\handlers\ReviewerAccessInviteRedirectController;
3031
use PKP\invitation\invitations\reviewerAccess\payload\ReviewerAccessInvitePayload;
@@ -148,6 +149,11 @@ public function getInvitationActionRedirectController(): ?InvitationActionRedire
148149
return new ReviewerAccessInviteRedirectController($this);
149150
}
150151

152+
public function getInvitationUIActionRedirectController(): ?InvitationUIActionRedirectController
153+
{
154+
return null;
155+
}
156+
151157
/**
152158
* @inheritDoc
153159
*/

classes/invitation/invitations/userRoleAssignment/UserRoleAssignmentInvite.php

+7
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
use PKP\invitation\core\enums\ValidationContext;
2424
use PKP\invitation\core\Invitation;
2525
use PKP\invitation\core\InvitationActionRedirectController;
26+
use PKP\invitation\core\InvitationUIActionRedirectController;
2627
use PKP\invitation\core\ReceiveInvitationController;
2728
use PKP\invitation\core\traits\HasMailable;
2829
use PKP\invitation\core\traits\ShouldValidate;
2930
use PKP\invitation\invitations\userRoleAssignment\handlers\api\UserRoleAssignmentCreateController;
3031
use PKP\invitation\invitations\userRoleAssignment\handlers\api\UserRoleAssignmentReceiveController;
3132
use PKP\invitation\invitations\userRoleAssignment\handlers\UserRoleAssignmentInviteRedirectController;
33+
use PKP\invitation\invitations\userRoleAssignment\handlers\UserRoleAssignmentInviteUIController;
3234
use PKP\invitation\invitations\userRoleAssignment\payload\UserRoleAssignmentInvitePayload;
3335
use PKP\invitation\invitations\userRoleAssignment\rules\EmailMustNotExistRule;
3436
use PKP\invitation\invitations\userRoleAssignment\rules\NoUserGroupChangesRule;
@@ -138,6 +140,11 @@ public function getInvitationActionRedirectController(): ?InvitationActionRedire
138140
return new UserRoleAssignmentInviteRedirectController($this);
139141
}
140142

143+
public function getInvitationUIActionRedirectController(): ?InvitationUIActionRedirectController
144+
{
145+
return new UserRoleAssignmentInviteUIController($this);
146+
}
147+
141148
/**
142149
* @inheritDoc
143150
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?php
2+
3+
/**
4+
* @file pages/invitation/InitializeInvitationUIHandler.php
5+
*
6+
* Copyright (c) 2023 Simon Fraser University
7+
* Copyright (c) 2023 John Willinsky
8+
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
9+
*
10+
* @class InitializeInvitationUIHandler
11+
*
12+
* @ingroup pages_invitation
13+
*
14+
* @brief Handles page requests for invitations op
15+
*/
16+
17+
namespace PKP\pages\invitation;
18+
19+
use APP\core\Application;
20+
use APP\core\Request;
21+
use APP\facades\Repo;
22+
use APP\handler\Handler;
23+
use PKP\invitation\core\enums\InvitationAction;
24+
use PKP\invitation\core\Invitation;
25+
use PKP\invitation\invitations\userRoleAssignment\handlers\UserRoleAssignmentInviteUIController;
26+
use PKP\security\authorization\ContextAccessPolicy;
27+
use PKP\security\authorization\PolicySet;
28+
use PKP\security\authorization\RoleBasedHandlerOperationPolicy;
29+
use PKP\security\authorization\UserRequiredPolicy;
30+
use PKP\security\authorization\UserRolesRequiredPolicy;
31+
use PKP\security\Role;
32+
33+
class InitializeInvitationUIHandler extends Handler
34+
{
35+
public function __construct()
36+
{
37+
parent::__construct();
38+
39+
$this->addRoleAssignment(
40+
[
41+
Role::ROLE_ID_SITE_ADMIN,
42+
Role::ROLE_ID_MANAGER,
43+
Role::ROLE_ID_SUB_EDITOR,
44+
ROLE::ROLE_ID_ASSISTANT,
45+
],
46+
[
47+
'initializeUI',
48+
]
49+
);
50+
}
51+
52+
public function authorize($request, &$args, $roleAssignments)
53+
{
54+
$this->addPolicy(new UserRequiredPolicy($request));
55+
56+
$this->addPolicy(new UserRolesRequiredPolicy($request), true);
57+
58+
$this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
59+
60+
$rolePolicy = new PolicySet(PolicySet::COMBINING_PERMIT_OVERRIDES);
61+
foreach ($roleAssignments as $role => $operations) {
62+
$rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, $role, $operations));
63+
}
64+
$this->addPolicy($rolePolicy);
65+
66+
return parent::authorize($request, $args, $roleAssignments);
67+
}
68+
69+
/**
70+
* Create an invitation for a user to accept new roles
71+
* @throws \Exception
72+
*/
73+
public function initializeUI(array $args, Request $request): void
74+
{
75+
if (empty($args) || count($args) < 1) {
76+
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
77+
}
78+
79+
$this->setupTemplate($request);
80+
81+
$arg = $args[0];
82+
83+
if (is_numeric($arg)) {
84+
// Handle existing invitation by ID
85+
$invitationId = (int) $arg;
86+
$invitation = Repo::invitation()->getById($invitationId);
87+
if (!$invitation) {
88+
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
89+
}
90+
$invitationHandler = $invitation->getInvitationUIActionRedirectController();
91+
$invitationHandler->editHandle($request);
92+
} else {
93+
// Handle new invitation by type
94+
$invitationType = $arg;
95+
$invitation = app(Invitation::class)->createNew($invitationType);
96+
$invitationHandler = $invitation->getInvitationUIActionRedirectController();
97+
$invitationHandler->createHandle($request);
98+
}
99+
}
100+
}

pages/invitation/InvitationHandler.php

-42
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
use APP\handler\Handler;
2323
use PKP\invitation\core\enums\InvitationAction;
2424
use PKP\invitation\core\Invitation;
25-
use PKP\invitation\invitations\userRoleAssignment\handlers\UserRoleAssignmentInviteUIController;
2625

2726
class InvitationHandler extends Handler
2827
{
@@ -68,20 +67,6 @@ private function getInvitationByKey(Request $request): Invitation
6867
return $invitation;
6968
}
7069

71-
/**
72-
* Get invitation by invitation id
73-
*/
74-
private function getInvitationById(Request $request, int $id): Invitation
75-
{
76-
$invitation = Repo::invitation()
77-
->getById($id);
78-
79-
if (is_null($invitation)) {
80-
throw new \Symfony\Component\HttpKernel\Exception\GoneHttpException();
81-
}
82-
return $invitation;
83-
}
84-
8570
public static function getActionUrl(InvitationAction $action, Invitation $invitation): ?string
8671
{
8772
$invitationId = $invitation->getId();
@@ -108,31 +93,4 @@ public static function getActionUrl(InvitationAction $action, Invitation $invita
10893
]
10994
);
11095
}
111-
112-
/**
113-
* Create an invitation for a user to accept new roles
114-
* @throws \Exception
115-
*/
116-
public function userInvite(array $args, Request $request): void
117-
{
118-
// Validate arguments
119-
if (empty($args) || count($args) < 2) {
120-
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
121-
}
122-
$this->setupTemplate($request);
123-
$invitationType = $args[0]; // invitation type
124-
$invitationId = (int)$args[1]; // invitation id for edit invitation
125-
if (!empty($invitationId)) {
126-
$invitation = $this->getInvitationById($request, $invitationId);
127-
if (!$invitation) {
128-
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
129-
}
130-
$invitationHandler = $invitation->getInvitationUIActionRedirectController();
131-
$invitationHandler->editHandle($request);
132-
} else {
133-
$invitation = app(Invitation::class)->createNew($invitationType);
134-
$invitationHandler = $invitation->getInvitationUIActionRedirectController();
135-
$invitationHandler->createHandle($request);
136-
}
137-
}
13896
}

pages/invitation/index.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
switch ($op) {
1717
case 'decline':
1818
case 'accept':
19-
case 'userInvite':
2019
return new PKP\pages\invitation\InvitationHandler();
20+
case 'initializeUI':
21+
return new PKP\pages\invitation\InitializeInvitationUIHandler();
2122
}

0 commit comments

Comments
 (0)