ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilMailTemplateContext.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
24 abstract class ilMailTemplateContext
25 {
26  protected ilLanguage $language;
31 
32  public function __construct(
33  ?OrgUnitUserService $org_unit_user_service = null,
34  ?ilMailEnvironmentHelper $environment_helper = null,
35  ?ilMailUserHelper $user_helper = null,
36  ?ilMailLanguageHelper $language_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 }
__construct(?OrgUnitUserService $org_unit_user_service=null, ?ilMailEnvironmentHelper $environment_helper=null, ?ilMailUserHelper $user_helper=null, ?ilMailLanguageHelper $language_helper=null)
resolvePlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
static setLanguage(ilLanguage $a_lng)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
ilMailEnvironmentHelper $env_helper
ilMailLanguageHelper $language_helper
OrgUnitUserService $org_unit_user_service
resolveSpecificPlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
language()
description: > Example for rendring a language glyph.
Definition: language.php:41