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