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