ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
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 $orgUnitUserService = null,
34  ilMailEnvironmentHelper $envHelper = null,
35  ilMailUserHelper $usernameHelper = null,
36  ilMailLanguageHelper $languageHelper = null
37  ) {
38  $this->orgUnitUserService = $orgUnitUserService ?? new OrgUnitUserService();
39  $this->envHelper = $envHelper ?? new ilMailEnvironmentHelper();
40  $this->userHelper = $usernameHelper ?? new ilMailUserHelper();
41  $this->languageHelper = $languageHelper ?? new ilMailLanguageHelper();
42  }
43 
44  public function getLanguage(): ilLanguage
45  {
46  return $this->language ?? $this->languageHelper->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 ('mail_salutation' === $placeholder_id && $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 ('first_name' === $placeholder_id && $recipient !== null):
171  $resolved = $recipient->getFirstname();
172  break;
173 
174  case ('last_name' === $placeholder_id && $recipient !== null):
175  $resolved = $recipient->getLastname();
176  break;
177 
178  case ('login' === $placeholder_id && $recipient !== null):
179  $resolved = $recipient->getLogin();
180  break;
181 
182  case ('title' === $placeholder_id && $recipient !== null):
183  $resolved = $recipient->getUTitle();
184  break;
185 
186  case 'ilias_url' === $placeholder_id:
187  $resolved = $this->envHelper->getHttpPath() . ' ';
188  break;
189 
190  case 'installation_name' === $placeholder_id:
191  $resolved = $this->envHelper->getClientId();
192  break;
193 
194  case 'firstname_lastname_superior' === $placeholder_id && $recipient !== null:
195  $ouUsers = $this->orgUnitUserService->getUsers([$recipient->getId()], true);
196  foreach ($ouUsers as $ouUser) {
197  $superiors = $ouUser->getSuperiors();
198 
199  $superiorUsrIds = array_map(static function (ilOrgUnitUser $ouUser): int {
200  return $ouUser->getUserId();
201  }, $superiors);
202 
203  $usrIdByNameMap = $this->userHelper->getUsernameMapForIds($superiorUsrIds);
204 
205  $resolved = implode(', ', $usrIdByNameMap);
206  break;
207  }
208  break;
209 
210  case !array_key_exists($placeholder_id, $this->getGenericPlaceholders()):
211  $datePresentationLanguage = ilDatePresentation::getLanguage();
213 
214  $resolved = $this->resolveSpecificPlaceholder(
215  $placeholder_id,
216  $context_parameters,
217  $recipient
218  );
219 
220  ilDatePresentation::setLanguage($datePresentationLanguage);
221  break;
222  }
223 
224  return $resolved;
225  }
226 
227  protected function initLanguage(ilObjUser $user): void
228  {
229  $this->initLanguageByIso2Code($user->getLanguage());
230  }
231 
232  protected function initLanguageByIso2Code(string $isoCode): void
233  {
234  $this->language = $this->languageHelper->getLanguageByIsoCode($isoCode);
235  $this->language->loadLanguageModule('mail');
236  }
237 }
OrgUnitUserService $orgUnitUserService
resolvePlaceholder(string $placeholder_id, array $context_parameters, ilObjUser $recipient=null)
Class ilMailEnvironmentHelper.
static setLanguage(ilLanguage $a_lng)
Class ilMailUserHelper.
ilMailLanguageHelper $languageHelper
resolveSpecificPlaceholder(string $placeholder_id, array $context_parameters, ilObjUser $recipient=null)
Class ilMailLanguageHelper.
__construct(OrgUnitUserService $orgUnitUserService=null, ilMailEnvironmentHelper $envHelper=null, ilMailUserHelper $usernameHelper=null, ilMailLanguageHelper $languageHelper=null)
ilMailEnvironmentHelper $envHelper
language()
description: > Example for rendring a language glyph.
Definition: language.php:25