ILIAS  trunk Revision v11.0_alpha-1723-g8e69f309bab
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
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  ],
65  'first_name' => [
66  'placeholder' => 'FIRST_NAME',
67  'label' => $this->getLanguage()->txt('firstname'),
68  ],
69  'last_name' => [
70  'placeholder' => 'LAST_NAME',
71  'label' => $this->getLanguage()->txt('lastname'),
72  ],
73  'login' => [
74  'placeholder' => 'LOGIN',
75  'label' => $this->getLanguage()->txt('mail_nacc_login'),
76  ],
77  'title' => [
78  'placeholder' => 'TITLE',
79  'label' => $this->getLanguage()->txt('mail_nacc_title'),
80  'supportsCondition' => true,
81  ],
82  'firstname_lastname_superior' => [
83  'placeholder' => 'FIRSTNAME_LASTNAME_SUPERIOR',
84  'label' => $this->getLanguage()->txt('mail_firstname_last_name_superior'),
85  ],
86  'ilias_url' => [
87  'placeholder' => 'ILIAS_URL',
88  'label' => $this->getLanguage()->txt('mail_nacc_ilias_url'),
89  ],
90  'installation_name' => [
91  'placeholder' => 'INSTALLATION_NAME',
92  'label' => $this->getLanguage()->txt('mail_nacc_installation_name'),
93  ],
94  ];
95  }
96 
100  final public function getPlaceholders(): array
101  {
102  $placeholders = $this->getGenericPlaceholders();
103  $specific = $this->getSpecificPlaceholders();
104 
105  return array_merge($placeholders, $specific);
106  }
107 
111  abstract public function getSpecificPlaceholders(): array;
112 
116  abstract public function resolveSpecificPlaceholder(
117  string $placeholder_id,
118  array $context_parameters,
119  ?ilObjUser $recipient = null
120  ): string;
121 
125  public function resolvePlaceholder(
126  string $placeholder_id,
127  array $context_parameters,
128  ?ilObjUser $recipient = null
129  ): string {
130  if ($recipient !== null) {
131  $this->initLanguage($recipient);
132  }
133 
134  $placeholder_id = strtolower($placeholder_id);
135  $resolved = '';
136  switch (true) {
137  case ('mail_salutation' === $placeholder_id && $recipient !== null):
138  $resolved = $this->getLanguage()->txt('mail_salutation_n');
139  switch ($recipient->getGender()) {
140  case 'f':
141  $resolved = $this->getLanguage()->txt('mail_salutation_f');
142  break;
143 
144  case 'm':
145  $resolved = $this->getLanguage()->txt('mail_salutation_m');
146  break;
147 
148  case 'n':
149  $resolved = $this->getLanguage()->txt('mail_salutation_n');
150  break;
151  }
152  break;
153 
154  case ('first_name' === $placeholder_id && $recipient !== null):
155  $resolved = $recipient->getFirstname();
156  break;
157 
158  case ('last_name' === $placeholder_id && $recipient !== null):
159  $resolved = $recipient->getLastname();
160  break;
161 
162  case ('login' === $placeholder_id && $recipient !== null):
163  $resolved = $recipient->getLogin();
164  break;
165 
166  case ('title' === $placeholder_id && $recipient !== null):
167  $resolved = $recipient->getUTitle();
168  break;
169 
170  case 'ilias_url' === $placeholder_id:
171  $resolved = $this->envHelper->getHttpPath() . ' ';
172  break;
173 
174  case 'installation_name' === $placeholder_id:
175  $resolved = $this->envHelper->getClientId();
176  break;
177 
178  case 'firstname_lastname_superior' === $placeholder_id && $recipient !== null:
179  $ouUsers = $this->orgUnitUserService->getUsers([$recipient->getId()], true);
180  foreach ($ouUsers as $ouUser) {
181  $superiors = $ouUser->getSuperiors();
182 
183  $superiorUsrIds = array_map(static function (ilOrgUnitUser $ouUser): int {
184  return $ouUser->getUserId();
185  }, $superiors);
186 
187  $usrIdByNameMap = $this->userHelper->getUsernameMapForIds($superiorUsrIds);
188 
189  $resolved = implode(', ', $usrIdByNameMap);
190  break;
191  }
192  break;
193 
194  case !array_key_exists($placeholder_id, $this->getGenericPlaceholders()):
195  $datePresentationLanguage = ilDatePresentation::getLanguage();
197 
198  $resolved = $this->resolveSpecificPlaceholder(
199  $placeholder_id,
200  $context_parameters,
201  $recipient
202  );
203 
204  ilDatePresentation::setLanguage($datePresentationLanguage);
205  break;
206  }
207 
208  return $resolved;
209  }
210 
211  protected function initLanguage(ilObjUser $user): void
212  {
213  $this->initLanguageByIso2Code($user->getLanguage());
214  }
215 
216  protected function initLanguageByIso2Code(string $isoCode): void
217  {
218  $this->language = $this->languageHelper->getLanguageByIsoCode($isoCode);
219  $this->language->loadLanguageModule('mail');
220  }
221 }
OrgUnitUserService $orgUnitUserService
resolvePlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
Class ilMailEnvironmentHelper.
static setLanguage(ilLanguage $a_lng)
Class ilMailUserHelper.
ilMailLanguageHelper $languageHelper
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
Class ilMailLanguageHelper.
resolveSpecificPlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
ilMailEnvironmentHelper $envHelper
language()
description: > Example for rendring a language glyph.
Definition: language.php:41
__construct(?OrgUnitUserService $orgUnitUserService=null, ?ilMailEnvironmentHelper $envHelper=null, ?ilMailUserHelper $usernameHelper=null, ?ilMailLanguageHelper $languageHelper=null)