ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
StaticURLHandler.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\User;
22
28use ILIAS\User\Settings\StartingPoint\Repository as StartingPointRepository;
30use ILIAS\LegalDocuments\Conductor as LegalDocumentsConductor;
39
40class StaticURLHandler extends BaseHandler implements Handler
41{
42 public const NAMESPACE = 'usr';
43 public const CHANGE_EMAIL_OPERATION = 'email';
44 public const REGISTRATION_OPERATION = 'registration';
45 public const USERNAME_ASSIST_OPERATION = 'nameassist';
46 public const PASSWORD_ASSIST_OPERATION = 'pwassist';
47 public const DEL_OWN_ACCOUNT_OPERATION = 'delown';
48 public const CONTACT_APPROVE_OPERATION = '_contact_approved';
49 public const CONTACT_IGNORE_OPERATION = '_contact_ignored';
50
51 private readonly LegalDocumentsConductor $legal_documents;
52 private readonly \ilObjUser $user;
53 private readonly StartingPointRepository $starting_point_repository;
54
55 public function __construct()
56 {
57 global $DIC;
58 $this->legal_documents = $DIC['legalDocuments'];
59 $this->user = $DIC['ilUser'];
60 $this->starting_point_repository = LocalDIC::dic()[StartingPointRepository::class];
61 }
62
63 public function getNamespace(): string
64 {
65 return self::NAMESPACE;
66 }
67
68 public function handle(
69 Request $request,
70 Context $context,
71 Factory $response_factory
72 ): Response {
73 $additional_params = $request->getAdditionalParameters();
74 $cmd = $additional_params[0] ?? '';
75
76 $uri = match ($cmd) {
77 self::CHANGE_EMAIL_OPERATION => $context->isUserLoggedIn()
78 ? $this->buildChangeEmailUrl($additional_params[1], $context->ctrl())
79 : $this->getLoginUrl($request, $context),
80 self::REGISTRATION_OPERATION => $context->ctrl()->redirectByClass(
81 [\ilStartUpGUI::class, \ilAccountRegistrationGUI::class],
82 ''
83 ),
84 self::USERNAME_ASSIST_OPERATION => $context->ctrl()->redirectByClass(
85 [\ilStartUpGUI::class, \ilPasswordAssistanceGUI::class],
86 'showUsernameAssistanceForm'
87 ),
88 self::PASSWORD_ASSIST_OPERATION => $context->ctrl()->redirectByClass(
89 [\ilStartUpGUI::class, \ilPasswordAssistanceGUI::class],
90 ''
91 ),
92 self::CONTACT_APPROVE_OPERATION => $this->buildProfileUrl(
93 $context->ctrl(),
94 $request->getReferenceId(),
95 'approveContactRequest'
96 ),
97 self::CONTACT_IGNORE_OPERATION => $this->buildProfileUrl(
98 $context->ctrl(),
99 $request->getReferenceId(),
100 'ignoreContactRequest'
101 ),
102 self::DEL_OWN_ACCOUNT_OPERATION => $this->buildDeleteUsrUrl($context),
104 $context->ctrl(),
105 $request->getReferenceId(),
106 $cmd
107 )
108 };
109
110 return $response_factory->can($uri);
111 }
112
113 private function buildChangeEmailUrl(string $token, \ilCtrl $ctrl): string
114 {
115 $ctrl->setParameterByClass(PersonalProfileGUI::class, 'token', $token);
116 $link = $ctrl->getLinkTargetByClass([\ilDashboardGUI::class, PersonalProfileGUI::class], PersonalProfileGUI::CHANGE_EMAIL_CMD);
117 $ctrl->clearParameterByClass(PersonalProfileGUI::class, 'token');
118 return $link;
119 }
120
121 private function getLoginUrl(
122 Request $request,
123 Context $context
124 ): string {
125 $target = (new StandardURIBuilder(new StaticURLConfig()))->buildTarget(
126 $request->getNamespace(),
127 $request->getReferenceId(),
128 $request->getAdditionalParameters()
129 );
130
131 return '/login.php?target='
132 . str_replace('/', '_', rtrim($target, '/'))
133 . '&cmd=force_login&lang=' . $context->getUserLanguage();
134
135 }
136
137 private function buildDeleteUsrUrl(
138 Context $context
139 ): string {
140 if ($context->getUserId() !== ANONYMOUS_USER_ID
141 && $this->user->hasDeletionFlag()) {
142 $context->ctrl()->setTargetScript('ilias.php');
143 return $context->ctrl()->getLinkTargetByClass(
144 [\ilDashboardGUI::class, PersonalSettingsGUI::class, DeleteAccountGUI::class],
145 'deleteOwnAccountStep2'
146 );
147 }
148
149 $context->mainTemplate()->setOnScreenMessage(
150 'failure',
151 $context->lng()->txt('account_not_flagged_for_deletion'),
152 true
153 );
154 return $this->starting_point_repository->getValidAndAccessibleStartingPointAsUrl();
155 }
156
158 \ilCtrl $ctrl,
159 ?ReferenceId $target_user_id,
160 string $cmd
161 ): string {
162 if (str_starts_with($cmd, '_bdg')) {
163 return $ctrl->getLinkTargetByClass(\ilDashboardGUI::class, 'jumpToBadges');
164 }
165
166 $legal_documents_target = $this->legal_documents->findGotoLink($cmd);
167 if ($legal_documents_target->isOK()) {
168 $ctrl->setTargetScript('ilias.php');
169 foreach ($legal_documents_target->value()->queryParams() as $key => $value) {
170 $ctrl->setParameterByClass(
171 $legal_documents_target->value()->guiName(),
172 (string) $key,
173 $value
174 );
175 }
176 return $ctrl->getLinkTargetByClass(
177 $legal_documents_target->value()->guiPath(),
178 $legal_documents_target->value()->command()
179 );
180 }
181
182 return $this->buildProfileUrl(
183 $ctrl,
184 $target_user_id,
185 PublicProfileGUI::DEFAULT_CMD
186 );
187 }
188
189 private function buildProfileUrl(
190 \ilCtrl $ctrl,
191 ?ReferenceId $target_user_id,
192 string $cmd
193 ): string {
194 if ($target_user_id === null) {
195 return $ctrl->getLinkTargetByClass(
196 [\ilDashboardGUI::class],
197 'jumpToProfile'
198 );
199 }
200 $ctrl->setParameterByClass(PublicProfileGUI::class, 'user_id', $target_user_id->toInt());
201 return $ctrl->getLinkTargetByClass([\ilPublicProfileBaseClassGUI::class, PublicProfileGUI::class], $cmd);
202 }
203}
can(string $uri_path, bool $shift=false)
Definition: Factory.php:47
GUI class for public user profile presentation.
@ilCtrl_Calls ILIAS\User\Settings\PersonalSettingsGUI: ILIAS\User\Account\DeleteAccountGUI @ilCtrl_Ca...
buildProfileUrl(\ilCtrl $ctrl, ?ReferenceId $target_user_id, string $cmd)
handle(Request $request, Context $context, Factory $response_factory)
buildChangeEmailUrl(string $token, \ilCtrl $ctrl)
readonly StartingPointRepository $starting_point_repository
getRedirectToOtherComponentsOrProfile(\ilCtrl $ctrl, ?ReferenceId $target_user_id, string $cmd)
buildDeleteUsrUrl(Context $context)
getLoginUrl(Request $request, Context $context)
readonly LegalDocumentsConductor $legal_documents
Class ilCtrl provides processing control methods.
clearParameterByClass(string $a_class, string $a_parameter)
@inheritDoc
setParameterByClass(string $a_class, string $a_parameter, $a_value)
@inheritDoc
getLinkTargetByClass( $a_class, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false, bool $has_xml_style=false)
@inheritDoc
const ANONYMOUS_USER_ID
Definition: constants.php:27
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: UserEvent.php:21
if(!file_exists('../ilias.ini.php'))
global $DIC
Definition: shib_login.php:26
$token
Definition: xapitoken.php:67