17
17
namespace PKP \pages \invitation ;
18
18
19
19
use APP \core \Application ;
20
+ use APP \core \PageRouter ;
20
21
use APP \core \Request ;
21
22
use APP \facades \Repo ;
22
23
use APP \handler \Handler ;
23
24
use APP \template \TemplateManager ;
24
25
use PKP \context \Context ;
25
- use PKP \core \PKPApplication ;
26
+ use PKP \core \PKPRequest ;
26
27
use PKP \facades \Locale ;
27
- use PKP \i18n \LocaleMetadata ;
28
28
use PKP \invitation \core \enums \InvitationAction ;
29
29
use PKP \invitation \core \Invitation ;
30
30
use PKP \invitation \stepTypes \SendInvitationStep ;
31
- use PKP \user \User ;
31
+ use PKP \security \authorization \ContextAccessPolicy ;
32
+ use PKP \security \authorization \PolicySet ;
33
+ use PKP \security \authorization \RoleBasedHandlerOperationPolicy ;
34
+ use PKP \security \Role ;
32
35
use PKP \userGroup \relationships \UserUserGroup ;
33
36
34
37
class InvitationHandler extends Handler
@@ -38,6 +41,34 @@ class InvitationHandler extends Handler
38
41
public const REPLY_OP_ACCEPT = 'accept ' ;
39
42
public const REPLY_OP_DECLINE = 'decline ' ;
40
43
44
+ /**
45
+ * @see PKPHandler::authorize()
46
+ *
47
+ * @param PKPRequest $request
48
+ * @param array $args
49
+ * @param array $roleAssignments
50
+ */
51
+ public function authorize ($ request , &$ args , $ roleAssignments )
52
+ {
53
+ /** @var PageRouter */
54
+ $ router = $ request ->getRouter ();
55
+ $ op = $ router ->getRequestedOp ($ request );
56
+ $ rolePolicy = new PolicySet (PolicySet::COMBINING_PERMIT_OVERRIDES );
57
+ $ rolePolicy ->addPolicy (
58
+ new RoleBasedHandlerOperationPolicy (
59
+ $ request ,
60
+ [Role::ROLE_ID_SITE_ADMIN , Role::ROLE_ID_MANAGER ],
61
+ ['invite ' , 'editUser ' ]
62
+ )
63
+ );
64
+ $ this ->addPolicy ($ rolePolicy );
65
+
66
+ if (in_array ($ op , ['accept ' , 'decline ' ])) {
67
+ return true ;
68
+ }
69
+ return parent ::authorize ($ request , $ args , $ roleAssignments );
70
+ }
71
+
41
72
/**
42
73
* Accept invitation handler
43
74
*/
@@ -155,8 +186,8 @@ public function invite(array $args, Request $request): void
155
186
$ invitationModel = $ invitation ->invitationModel ->toArray ();
156
187
157
188
$ invitationMode = 'edit ' ;
158
- $ payload ['email ' ]= $ invitationModel ['email ' ];
159
- $ invitationData = $ this ->generateInvitationPayload ($ invitationModel ['userId ' ],$ payload ,$ request ->getContext ())[ ' invitationPayload ' ] ;
189
+ $ payload ['email ' ] = $ invitationModel ['email ' ];
190
+ $ invitationData = $ this ->generateInvitationPayload ($ invitationModel ['userId ' ], $ payload , $ request ->getContext ());
160
191
$ user = $ invitationData ['user ' ];
161
192
$ invitationPayload = $ invitationData ['invitationPayload ' ];
162
193
}
@@ -206,7 +237,8 @@ public function invite(array $args, Request $request): void
206
237
'pageTitleDescription ' => $ invitation ?
207
238
__ (
208
239
'invitation.wizard.viewPageTitleDescription ' ,
209
- ['name ' => $ invitationPayload ['givenName ' ][Locale::getLocale ()]]
240
+ ['name ' => $ invitationPayload ['givenName ' ][Locale::getLocale ()] ?
241
+ $ invitationPayload ['givenName ' ][Locale::getLocale ()] : $ invitationPayload ['inviteeEmail ' ]]
210
242
)
211
243
: __ ('invitation.wizard.pageTitleDescription ' ),
212
244
]);
@@ -228,9 +260,9 @@ public function invite(array $args, Request $request): void
228
260
public function editUser ($ args , $ request ): void
229
261
{
230
262
$ invitation = null ;
231
- if (!empty ($ args )) {
263
+ if (!empty ($ args )) {
232
264
$ invitationMode = 'editUser ' ;
233
- $ invitationData = $ this ->generateInvitationPayload ($ args [0 ],[],$ request ->getContext ());
265
+ $ invitationData = $ this ->generateInvitationPayload ($ args [0 ], [], $ request ->getContext ());
234
266
$ user = $ invitationData ['user ' ];
235
267
$ invitationPayload = $ invitationData ['invitationPayload ' ];
236
268
$ templateMgr = TemplateManager::getManager ($ request );
@@ -257,7 +289,7 @@ public function editUser($args, $request): void
257
289
];
258
290
$ steps = new SendInvitationStep ();
259
291
$ templateMgr ->setState ([
260
- 'steps ' => $ steps ->getSteps ($ invitation , $ context ,$ user ),
292
+ 'steps ' => $ steps ->getSteps ($ invitation , $ context , $ user ),
261
293
'emailTemplatesApiUrl ' => $ request
262
294
->getDispatcher ()
263
295
->url (
@@ -295,7 +327,7 @@ public function editUser($args, $request): void
295
327
* @param Context $context
296
328
* @param int $id
297
329
*/
298
- private function getUserUserGroups (int $ id , Context $ context ): array
330
+ private function getUserUserGroups (int $ id , Context $ context ): array
299
331
{
300
332
$ userGroups = [];
301
333
$ userUserGroups = UserUserGroup::query ()
@@ -325,11 +357,11 @@ private function getUserUserGroups(int $id , Context $context): array
325
357
private function generateInvitationPayload ($ userId , array $ payload , Context $ context ): array
326
358
{
327
359
$ user = null ;
328
- if ($ userId ){
329
- $ user = Repo::user ()->get ($ userId ,true );
360
+ if ($ userId ) {
361
+ $ user = Repo::user ()->get ($ userId , true );
330
362
}
331
363
332
- $ invitationPayload =[];
364
+ $ invitationPayload = [];
333
365
$ invitationPayload ['userId ' ] = $ user ? $ user ->getId () : $ userId ;
334
366
$ invitationPayload ['inviteeEmail ' ] = $ user ? $ user ->getEmail () : $ payload ['email ' ];
335
367
$ invitationPayload ['orcid ' ] = $ user ? $ user ->getData ('orcid ' ) : $ payload ['orcid ' ];
@@ -341,12 +373,12 @@ private function generateInvitationPayload($userId, array $payload, Context $con
341
373
$ invitationPayload ['phone ' ] = $ user ?->getPhone();
342
374
$ invitationPayload ['mailingAddress ' ] = $ user ?->getMailingAddress();
343
375
$ invitationPayload ['signature ' ] = $ user ?->getSignature(null );
344
- $ invitationPayload ['locales ' ] = $ user ? $ this ->getWorkingLanguages ($ context ,$ user ->getLocales ()) : null ;
376
+ $ invitationPayload ['locales ' ] = $ user ? $ this ->getWorkingLanguages ($ context , $ user ->getLocales ()) : null ;
345
377
$ invitationPayload ['reviewInterests ' ] = $ user ?->getInterestString();
346
378
$ invitationPayload ['homePageUrl ' ] = $ user ?->getUrl();
347
379
$ invitationPayload ['disabled ' ] = $ user ?->getData('disabled ' );
348
380
$ invitationPayload ['userGroupsToAdd ' ] = !$ payload ['userGroupsToAdd ' ] ? [] : $ payload ['userGroupsToAdd ' ];
349
- $ invitationPayload ['currentUserGroups ' ] = !$ userId ? [] : $ this ->getUserUserGroups ($ userId ,$ context );
381
+ $ invitationPayload ['currentUserGroups ' ] = !$ userId ? [] : $ this ->getUserUserGroups ($ userId , $ context );
350
382
$ invitationPayload ['userGroupsToRemove ' ] = [];
351
383
$ invitationPayload ['emailComposer ' ] = [
352
384
'emailBody ' => '' ,
@@ -364,7 +396,7 @@ private function generateInvitationPayload($userId, array $payload, Context $con
364
396
* @param $userLocales
365
397
* @return string
366
398
*/
367
- private function getWorkingLanguages (Context $ context ,$ userLocales ): string
399
+ private function getWorkingLanguages (Context $ context , $ userLocales ): string
368
400
{
369
401
$ locales = $ context ->getSupportedLocaleNames ();
370
402
return join (__ ('common.commaListSeparator ' ), array_map (fn ($ key ) => $ locales [$ key ], $ userLocales ));
0 commit comments