ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
class.ilMailTemplateContext.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23
25{
31
32 public function __construct(
34 ?ilMailEnvironmentHelper $environment_helper = null,
37 ) {
38 $this->org_unit_user_service = $org_unit_user_service ?? new OrgUnitUserService();
39 $this->env_helper = $environment_helper ?? new ilMailEnvironmentHelper();
40 $this->user_helper = $user_helper ?? new ilMailUserHelper();
41 $this->language_helper = $language_helper ?? new ilMailLanguageHelper();
42 }
43
44 public function getLanguage(): ilLanguage
45 {
46 return $this->language ?? $this->language_helper->getCurrentLanguage();
47 }
48
49 abstract public function getId(): string;
50
51 abstract public function getTitle(): string;
52
53 abstract public function getDescription(): string;
54
67 private function getGenericPlaceholders(): array
68 {
69 return [
70 'mail_salutation' => [
71 'placeholder' => 'MAIL_SALUTATION',
72 'label' => $this->getLanguage()->txt('mail_nacc_salutation'),
73 'requiresRecipient' => true,
74 'supportsNestedPlaceholders' => true,
75 ],
76 'first_name' => [
77 'placeholder' => 'FIRST_NAME',
78 'label' => $this->getLanguage()->txt('firstname'),
79 'requiresRecipient' => true,
80 ],
81 'last_name' => [
82 'placeholder' => 'LAST_NAME',
83 'label' => $this->getLanguage()->txt('lastname'),
84 'requiresRecipient' => true,
85 ],
86 'login' => [
87 'placeholder' => 'LOGIN',
88 'label' => $this->getLanguage()->txt('mail_nacc_login'),
89 'requiresRecipient' => true,
90 ],
91 'title' => [
92 'placeholder' => 'TITLE',
93 'label' => $this->getLanguage()->txt('mail_nacc_title'),
94 'requiresRecipient' => true,
95 ],
96 'firstname_lastname_superior' => [
97 'placeholder' => 'FIRSTNAME_LASTNAME_SUPERIOR',
98 'label' => $this->getLanguage()->txt('mail_firstname_last_name_superior'),
99 'requiresRecipient' => true,
100 ],
101 'ilias_url' => [
102 'placeholder' => 'ILIAS_URL',
103 'label' => $this->getLanguage()->txt('mail_nacc_ilias_url'),
104 'requiresRecipient' => false,
105 ],
106 'installation_name' => [
107 'placeholder' => 'INSTALLATION_NAME',
108 'label' => $this->getLanguage()->txt('mail_nacc_installation_name'),
109 'requiresRecipient' => false,
110 ],
111 ];
112 }
113
117 public function getNestedPlaceholders(): array
118 {
119 $nested_placeholders = [];
120 foreach ($this->getPlaceholders() as $key => $ph) {
121 if (isset($ph['supportsNestedPlaceholders']) && $ph['supportsNestedPlaceholders']) {
122 $nested_placeholders[] = $ph['placeholder'];
123 }
124 }
125
126 return $nested_placeholders;
127 }
128
137 final public function getPlaceholders(): array
138 {
139 $placeholders = $this->getGenericPlaceholders();
140 $specific = $this->getSpecificPlaceholders();
141
142 return array_merge($placeholders, $specific);
143 }
144
153 abstract public function getSpecificPlaceholders(): array;
154
155 public function requiresRecipientByPlaceholderName(string $placeholder_name): bool
156 {
157 $found = $this->findPlaceholderByMustacheName($placeholder_name);
158 if ($found === null) {
159 return false;
160 }
161
162 return $this->placeholderDefinitionRequiresRecipient($found['definition']);
163 }
164
173 private function findPlaceholderByMustacheName(string $placeholder_name): ?array
174 {
175 foreach ($this->getPlaceholders() as $key => $placeholder_definition) {
176 if (strtoupper($placeholder_definition['placeholder']) !== strtoupper($placeholder_name)) {
177 continue;
178 }
179
180 return [
181 'key' => (string) $key,
182 'definition' => $placeholder_definition,
183 ];
184 }
185
186 return null;
187 }
188
197 private function placeholderDefinitionRequiresRecipient(array $placeholder_definition): bool
198 {
199 return $placeholder_definition['requiresRecipient'] ?? false;
200 }
201
205 abstract public function resolveSpecificPlaceholder(
206 string $placeholder_id,
207 array $context_parameters,
208 ?ilObjUser $recipient = null
209 ): string;
210
214 public function resolvePlaceholder(
215 string $placeholder_id,
216 array $context_parameters,
217 ?ilObjUser $recipient = null
218 ): string {
219 if ($recipient !== null) {
220 $this->initLanguage($recipient);
221 }
222
223 $placeholder_id = strtolower($placeholder_id);
224 $resolved = '';
225 switch (true) {
226 case ($placeholder_id === 'mail_salutation' && $recipient !== null):
227 $resolved = $this->getLanguage()->txt('mail_salutation_n');
228 switch ($recipient->getGender()) {
229 case 'f':
230 $resolved = $this->getLanguage()->txt('mail_salutation_f');
231 break;
232
233 case 'm':
234 $resolved = $this->getLanguage()->txt('mail_salutation_m');
235 break;
236
237 case 'n':
238 $resolved = $this->getLanguage()->txt('mail_salutation_n');
239 break;
240 }
241 break;
242
243 case ($placeholder_id === 'first_name' && $recipient !== null):
244 $resolved = $recipient->getFirstname();
245 break;
246
247 case ($placeholder_id === 'last_name' && $recipient !== null):
248 $resolved = $recipient->getLastname();
249 break;
250
251 case ($placeholder_id === 'login' && $recipient !== null):
252 $resolved = $recipient->getLogin();
253 break;
254
255 case ($placeholder_id === 'title' && $recipient !== null):
256 $resolved = $recipient->getUTitle();
257 break;
258
259 case $placeholder_id === 'ilias_url':
260 $resolved = $this->env_helper->getHttpPath() . ' ';
261 break;
262
263 case $placeholder_id === 'installation_name':
264 $resolved = $this->env_helper->getClientId();
265 break;
266
267 case $placeholder_id === 'firstname_lastname_superior' && $recipient !== null:
268 $ou_users = $this->org_unit_user_service->getUsers([$recipient->getId()], true);
269 foreach ($ou_users as $ou_user) {
270 $superiors = $ou_user->getSuperiors();
271
272 $superior_usr_ids = array_map(static fn(ilOrgUnitUser $ou_user): int => $ou_user->getUserId(), $superiors);
273
274 $usr_id_by_name_map = $this->user_helper->getUsernameMapForIds($superior_usr_ids);
275
276 $resolved = implode(', ', $usr_id_by_name_map);
277 break;
278 }
279 break;
280
281 case !array_key_exists($placeholder_id, $this->getGenericPlaceholders()):
282 $date_presentation_language = ilDatePresentation::getLanguage();
284
285 $resolved = $this->resolveSpecificPlaceholder(
286 $placeholder_id,
287 $context_parameters,
288 $recipient
289 );
290
291 ilDatePresentation::setLanguage($date_presentation_language);
292 break;
293 }
294
295 return $resolved;
296 }
297
298 protected function initLanguage(ilObjUser $user): void
299 {
300 $this->initLanguageByIso2Code($user->getLanguage());
301 }
302
303 protected function initLanguageByIso2Code(string $iso_code): void
304 {
305 $this->language = $this->language_helper->getLanguageByIsoCode($iso_code);
306 $this->language->loadLanguageModule('mail');
307 }
308}
Class for date presentation.
static setLanguage(ilLanguage $a_lng)
language handling
resolveSpecificPlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
ilMailEnvironmentHelper $env_helper
placeholderDefinitionRequiresRecipient(array $placeholder_definition)
ilMailLanguageHelper $language_helper
findPlaceholderByMustacheName(string $placeholder_name)
resolvePlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
OrgUnitUserService $org_unit_user_service
__construct(?OrgUnitUserService $org_unit_user_service=null, ?ilMailEnvironmentHelper $environment_helper=null, ?ilMailUserHelper $user_helper=null, ?ilMailLanguageHelper $language_helper=null)
requiresRecipientByPlaceholderName(string $placeholder_name)
User class.
if(!file_exists('../ilias.ini.php'))