ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
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
58 private function getGenericPlaceholders(): array
59 {
60 return [
61 'mail_salutation' => [
62 'placeholder' => 'MAIL_SALUTATION',
63 'label' => $this->getLanguage()->txt('mail_nacc_salutation'),
64 'supportsNestedPlaceholders' => true,
65 ],
66 'first_name' => [
67 'placeholder' => 'FIRST_NAME',
68 'label' => $this->getLanguage()->txt('firstname'),
69 ],
70 'last_name' => [
71 'placeholder' => 'LAST_NAME',
72 'label' => $this->getLanguage()->txt('lastname'),
73 ],
74 'login' => [
75 'placeholder' => 'LOGIN',
76 'label' => $this->getLanguage()->txt('mail_nacc_login'),
77 ],
78 'title' => [
79 'placeholder' => 'TITLE',
80 'label' => $this->getLanguage()->txt('mail_nacc_title'),
81 'supportsCondition' => true,
82 ],
83 'firstname_lastname_superior' => [
84 'placeholder' => 'FIRSTNAME_LASTNAME_SUPERIOR',
85 'label' => $this->getLanguage()->txt('mail_firstname_last_name_superior'),
86 ],
87 'ilias_url' => [
88 'placeholder' => 'ILIAS_URL',
89 'label' => $this->getLanguage()->txt('mail_nacc_ilias_url'),
90 ],
91 'installation_name' => [
92 'placeholder' => 'INSTALLATION_NAME',
93 'label' => $this->getLanguage()->txt('mail_nacc_installation_name'),
94 ],
95 ];
96 }
97
101 public function getNestedPlaceholders(): array
102 {
103 $nested_placeholders = [];
104 foreach ($this->getPlaceholders() as $key => $ph) {
105 if (isset($ph['supportsNestedPlaceholders']) && $ph['supportsNestedPlaceholders']) {
106 $nested_placeholders[] = $ph['placeholder'];
107 }
108 }
109
110 return $nested_placeholders;
111 }
112
116 final public function getPlaceholders(): array
117 {
118 $placeholders = $this->getGenericPlaceholders();
119 $specific = $this->getSpecificPlaceholders();
120
121 return array_merge($placeholders, $specific);
122 }
123
127 abstract public function getSpecificPlaceholders(): array;
128
132 abstract public function resolveSpecificPlaceholder(
133 string $placeholder_id,
134 array $context_parameters,
135 ?ilObjUser $recipient = null
136 ): string;
137
141 public function resolvePlaceholder(
142 string $placeholder_id,
143 array $context_parameters,
144 ?ilObjUser $recipient = null
145 ): string {
146 if ($recipient !== null) {
147 $this->initLanguage($recipient);
148 }
149
150 $placeholder_id = strtolower($placeholder_id);
151 $resolved = '';
152 switch (true) {
153 case ($placeholder_id === 'mail_salutation' && $recipient !== null):
154 $resolved = $this->getLanguage()->txt('mail_salutation_n');
155 switch ($recipient->getGender()) {
156 case 'f':
157 $resolved = $this->getLanguage()->txt('mail_salutation_f');
158 break;
159
160 case 'm':
161 $resolved = $this->getLanguage()->txt('mail_salutation_m');
162 break;
163
164 case 'n':
165 $resolved = $this->getLanguage()->txt('mail_salutation_n');
166 break;
167 }
168 break;
169
170 case ($placeholder_id === 'first_name' && $recipient !== null):
171 $resolved = $recipient->getFirstname();
172 break;
173
174 case ($placeholder_id === 'last_name' && $recipient !== null):
175 $resolved = $recipient->getLastname();
176 break;
177
178 case ($placeholder_id === 'login' && $recipient !== null):
179 $resolved = $recipient->getLogin();
180 break;
181
182 case ($placeholder_id === 'title' && $recipient !== null):
183 $resolved = $recipient->getUTitle();
184 break;
185
186 case $placeholder_id === 'ilias_url':
187 $resolved = $this->env_helper->getHttpPath() . ' ';
188 break;
189
190 case $placeholder_id === 'installation_name':
191 $resolved = $this->env_helper->getClientId();
192 break;
193
194 case $placeholder_id === 'firstname_lastname_superior' && $recipient !== null:
195 $ou_users = $this->org_unit_user_service->getUsers([$recipient->getId()], true);
196 foreach ($ou_users as $ou_user) {
197 $superiors = $ou_user->getSuperiors();
198
199 $superior_usr_ids = array_map(static fn(ilOrgUnitUser $ou_user): int => $ou_user->getUserId(), $superiors);
200
201 $usr_id_by_name_map = $this->user_helper->getUsernameMapForIds($superior_usr_ids);
202
203 $resolved = implode(', ', $usr_id_by_name_map);
204 break;
205 }
206 break;
207
208 case !array_key_exists($placeholder_id, $this->getGenericPlaceholders()):
209 $date_presentation_language = ilDatePresentation::getLanguage();
211
212 $resolved = $this->resolveSpecificPlaceholder(
213 $placeholder_id,
214 $context_parameters,
215 $recipient
216 );
217
218 ilDatePresentation::setLanguage($date_presentation_language);
219 break;
220 }
221
222 return $resolved;
223 }
224
225 protected function initLanguage(ilObjUser $user): void
226 {
227 $this->initLanguageByIso2Code($user->getLanguage());
228 }
229
230 protected function initLanguageByIso2Code(string $iso_code): void
231 {
232 $this->language = $this->language_helper->getLanguageByIsoCode($iso_code);
233 $this->language->loadLanguageModule('mail');
234 }
235}
Class for date presentation.
static setLanguage(ilLanguage $a_lng)
language handling
resolveSpecificPlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
ilMailEnvironmentHelper $env_helper
ilMailLanguageHelper $language_helper
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)
User class.
if(!file_exists('../ilias.ini.php'))