Skip to content

Commit 99fd632

Browse files
committed
clean up invtation handler
1 parent 932fce7 commit 99fd632

File tree

7 files changed

+220
-245
lines changed

7 files changed

+220
-245
lines changed

classes/invitation/core/InvitationActionRedirectController.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
abstract class InvitationActionRedirectController extends Controller
2525
{
2626
/** @var TInvitation */
27-
protected Invitation $invitation;
27+
protected ?Invitation $invitation;
2828

29-
public function __construct(Invitation $invitation)
29+
public function __construct(?Invitation $invitation)
3030
{
3131
$this->invitation = $invitation;
3232
}

classes/invitation/invitations/userRoleAssignment/handlers/UserRoleAssignmentInviteRedirectController.php

+118-1
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,26 @@
1313

1414
namespace PKP\invitation\invitations\userRoleAssignment\handlers;
1515

16+
use APP\core\Application;
1617
use APP\core\Request;
1718
use APP\facades\Repo;
1819
use APP\template\TemplateManager;
1920
use PKP\core\PKPApplication;
21+
use PKP\facades\Locale;
2022
use PKP\invitation\core\enums\InvitationAction;
2123
use PKP\invitation\core\enums\InvitationStatus;
2224
use PKP\invitation\core\InvitationActionRedirectController;
25+
use PKP\invitation\invitations\userRoleAssignment\resources\UserRoleAssignmentInviteResource;
2326
use PKP\invitation\invitations\userRoleAssignment\UserRoleAssignmentInvite;
2427
use PKP\invitation\stepTypes\AcceptInvitationStep;
28+
use PKP\invitation\stepTypes\SendInvitationStep;
2529

2630
/**
2731
* @extends InvitationActionRedirectController<UserRoleAssignmentInvite>
2832
*/
2933
class UserRoleAssignmentInviteRedirectController extends InvitationActionRedirectController
3034
{
31-
public function getInvitation(): UserRoleAssignmentInvite
35+
public function getInvitation(): UserRoleAssignmentInvite|null
3236
{
3337
return $this->invitation;
3438
}
@@ -98,4 +102,117 @@ public function preRedirectActions(InvitationAction $action): void
98102
{
99103
return;
100104
}
105+
106+
/**
107+
* Redirect to invitation handle or edit user handle
108+
* @param Request $request
109+
* @param $userId
110+
* @param string $invitationMode
111+
* @return void
112+
* @throws \Exception
113+
*/
114+
public function inviteHandle(Request $request, $userId = null, string $invitationMode = 'create'): void
115+
{
116+
$user = null;
117+
$invitation = null;
118+
$invitationPayload = [
119+
'userId' => null,
120+
'inviteeEmail' => '',
121+
'orcid' => '',
122+
'givenName' => '',
123+
'familyName' => '',
124+
'orcidValidation' => false,
125+
'disabled' => false,
126+
'userGroupsToAdd' => [
127+
[
128+
'userGroupId' => null,
129+
'dateStart' => null,
130+
'dateEnd' => null,
131+
'masthead' => null,
132+
]
133+
],
134+
'currentUserGroups' => [],
135+
'userGroupsToRemove' => [],
136+
'emailComposer' => [
137+
'body' => '',
138+
'subject' => '',
139+
]
140+
];
141+
if($this->getInvitation() && $invitationMode == 'create') {
142+
$invitation = $this->getInvitation();
143+
$payload = $invitation->getPayload()->toArray();
144+
$invitationModel = $invitation->invitationModel->toArray();
145+
$invitationMode = 'edit';
146+
$payload['email']=$invitationModel['email'];
147+
$invitationData = (
148+
new UserRoleAssignmentInviteResource($this->invitation))
149+
->transformInvitationPayload($invitationModel['userId'],$payload,$request->getContext()
150+
);
151+
$user = $invitationData['user'];
152+
$invitationPayload = $invitationData['invitationPayload'];
153+
} elseif ($invitationMode == 'editUser') {
154+
$invitationData = (
155+
new UserRoleAssignmentInviteResource($this->invitation))
156+
->transformInvitationPayload($userId,[],$request->getContext()
157+
);
158+
$user = $invitationData['user'];
159+
$invitationPayload = $invitationData['invitationPayload'];
160+
}
161+
$templateMgr = TemplateManager::getManager($request);
162+
163+
$breadcrumbs = $templateMgr->getTemplateVars('breadcrumbs');
164+
$context = $request->getContext();
165+
$breadcrumbs[] = [
166+
'id' => 'contexts',
167+
'name' => __('navigation.access'),
168+
'url' => $request
169+
->getDispatcher()
170+
->url(
171+
$request,
172+
Application::ROUTE_PAGE,
173+
null,
174+
'management',
175+
'settings',
176+
['access']
177+
)
178+
];
179+
$breadcrumbs[] = [
180+
'id' => 'invitationWizard',
181+
'name' => __('invitation.wizard.pageTitle'),
182+
];
183+
$steps = new SendInvitationStep();
184+
$templateMgr->setState([
185+
'steps' => $steps->getSteps($invitation, $context, $user),
186+
'emailTemplatesApiUrl' => $request
187+
->getDispatcher()
188+
->url(
189+
$request,
190+
Application::ROUTE_API,
191+
$context->getData('urlPath'),
192+
'emailTemplates'
193+
),
194+
'primaryLocale' => $context->getData('primaryLocale'),
195+
'invitationType' => 'userRoleAssignment',
196+
'invitationPayload' => $invitationPayload,
197+
'invitationMode' => $invitationMode,
198+
'pageTitle' => $invitation ?
199+
(
200+
$invitationPayload['givenName'][Locale::getLocale()] . ' '
201+
. $invitationPayload['familyName'][Locale::getLocale()]
202+
)
203+
: __('invitation.wizard.pageTitle'),
204+
'pageTitleDescription' => $invitation ?
205+
__(
206+
'invitation.wizard.viewPageTitleDescription',
207+
['name' => $invitationPayload['givenName'][Locale::getLocale()]]
208+
)
209+
: __('invitation.wizard.pageTitleDescription'),
210+
]);
211+
$templateMgr->assign([
212+
'pageComponent' => 'Page',
213+
'breadcrumbs' => $breadcrumbs,
214+
'pageWidth' => TemplateManager::PAGE_WIDTH_FULL,
215+
]);
216+
$templateMgr->display('/invitation/userInvitation.tpl');
217+
}
101218
}

classes/invitation/invitations/userRoleAssignment/resources/BaseUserRoleAssignmentInviteResource.php

+35
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
use APP\facades\Repo;
1818
use Illuminate\Http\Request;
1919
use Illuminate\Http\Resources\Json\JsonResource;
20+
use PKP\context\Context;
21+
use PKP\facades\Locale;
2022
use PKP\invitation\invitations\userRoleAssignment\payload\UserRoleAssignmentInvitePayload;
2123
use PKP\user\User;
24+
use PKP\userGroup\relationships\UserUserGroup;
2225

2326
class BaseUserRoleAssignmentInviteResource extends JsonResource
2427
{
@@ -91,4 +94,36 @@ protected function createNewUserFromPayload(UserRoleAssignmentInvitePayload $pay
9194

9295
return $newUser;
9396
}
97+
98+
protected function transformCurrentUserGroups(int $id , Context $context): array
99+
{
100+
$userGroups = [];
101+
$userUserGroups = UserUserGroup::query()
102+
->withUserId($id)
103+
->withContextId($context->getId())
104+
->get()
105+
->toArray();
106+
foreach ($userUserGroups as $key => $userUserGroup) {
107+
$userGroup = Repo::userGroup()
108+
->get($userUserGroup['userGroupId'])
109+
->toArray();
110+
$userGroups[$key] = $userUserGroup;
111+
$userGroups[$key]['masthead'] = $userUserGroup['masthead'] === 1;
112+
$userGroups[$key]['name'] = $userGroup['name'][Locale::getLocale()];
113+
$userGroups[$key]['id'] = $userGroup['userGroupId'];
114+
}
115+
return $userGroups;
116+
}
117+
118+
/**
119+
* get user working languages
120+
* @param Context $context
121+
* @param $userLocales
122+
* @return string
123+
*/
124+
protected function transformWorkingLanguages(Context $context,$userLocales): string
125+
{
126+
$locales = $context->getSupportedLocaleNames();
127+
return join(__('common.commaListSeparator'), array_map(fn($key) => $locales[$key], $userLocales));
128+
}
94129
}

classes/invitation/invitations/userRoleAssignment/resources/UserRoleAssignmentInviteResource.php

+38
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414

1515
namespace PKP\invitation\invitations\userRoleAssignment\resources;
1616

17+
use APP\facades\Repo;
1718
use Illuminate\Http\Request;
19+
use PKP\context\Context;
1820
use PKP\user\User;
1921

2022
class UserRoleAssignmentInviteResource extends BaseUserRoleAssignmentInviteResource
@@ -65,4 +67,40 @@ public function toArray(Request $request)
6567
'newUser' => $this->transformUser($newUser),
6668
]);
6769
}
70+
71+
public function transformInvitationPayload($userId, array $payload, Context $context)
72+
{
73+
$user = null;
74+
if($userId){
75+
$user = Repo::user()->get($userId,true);
76+
}
77+
78+
$invitationPayload =[];
79+
$invitationPayload['userId'] = $user ? $user->getId() : $userId;
80+
$invitationPayload['inviteeEmail'] = $user ? $user->getEmail() : $payload['email'];
81+
$invitationPayload['orcid'] = $user ? $user->getData('orcid') : $payload['orcid'];
82+
$invitationPayload['givenName'] = $user ? $user->getGivenName(null) : $payload['givenName'];
83+
$invitationPayload['familyName'] = $user ? $user->getFamilyName(null) : $payload['familyName'];
84+
$invitationPayload['affiliation'] = $user ? $user->getAffiliation(null) : $payload['affiliation'];
85+
$invitationPayload['country'] = $user ? $user->getCountryLocalized() : $payload['userCountry'];
86+
$invitationPayload['biography'] = $user?->getBiography(null);
87+
$invitationPayload['phone'] = $user?->getPhone();
88+
$invitationPayload['mailingAddress'] = $user?->getMailingAddress();
89+
$invitationPayload['signature'] = $user?->getSignature(null);
90+
$invitationPayload['locales'] = $user? $this->transformWorkingLanguages($context,$user->getLocales()) : null;
91+
$invitationPayload['reviewInterests'] = $user?->getInterestString();
92+
$invitationPayload['homePageUrl'] = $user?->getUrl();
93+
$invitationPayload['disabled'] = $user?->getData('disabled');
94+
$invitationPayload['userGroupsToAdd'] = !$payload['userGroupsToAdd'] ? [] : $payload['userGroupsToAdd'];
95+
$invitationPayload['currentUserGroups'] = !$userId ? [] : $this->transformCurrentUserGroups($userId,$context);
96+
$invitationPayload['userGroupsToRemove'] = [];
97+
$invitationPayload['emailComposer'] = [
98+
'emailBody' => '',
99+
'emailSubject' => '',
100+
];
101+
return [
102+
'invitationPayload' => $invitationPayload,
103+
'user' => $user
104+
];
105+
}
68106
}

0 commit comments

Comments
 (0)