ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilMailTemplateContext.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
29 abstract class ilMailTemplateContext
30 {
31  protected ilLanguage $language;
36 
37  public function __construct(
38  OrgUnitUserService $orgUnitUserService = null,
39  ilMailEnvironmentHelper $envHelper = null,
40  ilMailUserHelper $usernameHelper = null,
41  ilMailLanguageHelper $languageHelper = null
42  ) {
43  $this->orgUnitUserService = $orgUnitUserService ?? new OrgUnitUserService();
44  $this->envHelper = $envHelper ?? new ilMailEnvironmentHelper();
45  $this->userHelper = $usernameHelper ?? new ilMailUserHelper();
46  $this->languageHelper = $languageHelper ?? new ilMailLanguageHelper();
47  }
48 
49  public function getLanguage(): ilLanguage
50  {
51  return $this->language ?? $this->languageHelper->getCurrentLanguage();
52  }
53 
54  abstract public function getId(): string;
55 
56  abstract public function getTitle(): string;
57 
58  abstract public function getDescription(): string;
59 
63  private function getGenericPlaceholders(): array
64  {
65  return [
66  'mail_salutation' => [
67  'placeholder' => 'MAIL_SALUTATION',
68  'label' => $this->getLanguage()->txt('mail_nacc_salutation'),
69  'supportsNestedPlaceholders' => true,
70  ],
71  'first_name' => [
72  'placeholder' => 'FIRST_NAME',
73  'label' => $this->getLanguage()->txt('firstname'),
74  ],
75  'last_name' => [
76  'placeholder' => 'LAST_NAME',
77  'label' => $this->getLanguage()->txt('lastname'),
78  ],
79  'login' => [
80  'placeholder' => 'LOGIN',
81  'label' => $this->getLanguage()->txt('mail_nacc_login'),
82  ],
83  'title' => [
84  'placeholder' => 'TITLE',
85  'label' => $this->getLanguage()->txt('mail_nacc_title'),
86  'supportsCondition' => true,
87  ],
88  'firstname_lastname_superior' => [
89  'placeholder' => 'FIRSTNAME_LASTNAME_SUPERIOR',
90  'label' => $this->getLanguage()->txt('mail_firstname_last_name_superior'),
91  ],
92  'ilias_url' => [
93  'placeholder' => 'ILIAS_URL',
94  'label' => $this->getLanguage()->txt('mail_nacc_ilias_url'),
95  ],
96  'installation_name' => [
97  'placeholder' => 'INSTALLATION_NAME',
98  'label' => $this->getLanguage()->txt('mail_nacc_installation_name'),
99  ],
100  ];
101  }
102 
106  public function getNestedPlaceholders(): array
107  {
108  $nested_placeholders = [];
109  foreach ($this->getPlaceholders() as $key => $ph) {
110  if (isset($ph['supportsNestedPlaceholders']) && $ph['supportsNestedPlaceholders']) {
111  $nested_placeholders[] = $ph['placeholder'];
112  }
113  }
114 
115  return $nested_placeholders;
116  }
117 
118  final public function getPlaceholders(): array
119  {
120  $placeholders = $this->getGenericPlaceholders();
121  $specific = $this->getSpecificPlaceholders();
122 
123  return array_merge($placeholders, $specific);
124  }
125 
126  abstract public function getSpecificPlaceholders(): array;
127 
128  abstract public function resolveSpecificPlaceholder(
129  string $placeholder_id,
130  array $context_parameters,
131  ilObjUser $recipient = null
132  ): string;
133 
134  public function resolvePlaceholder(
135  string $placeholder_id,
136  array $context_parameters,
137  ilObjUser $recipient = null
138  ): string {
139  if ($recipient !== null) {
140  $this->initLanguage($recipient);
141  }
142 
143  $placeholder_id = strtolower($placeholder_id);
144  $resolved = '';
145  switch (true) {
146  case ('mail_salutation' === $placeholder_id && $recipient !== null):
147  $resolved = $this->getLanguage()->txt('mail_salutation_n');
148  switch ($recipient->getGender()) {
149  case 'f':
150  $resolved = $this->getLanguage()->txt('mail_salutation_f');
151  break;
152 
153  case 'm':
154  $resolved = $this->getLanguage()->txt('mail_salutation_m');
155  break;
156 
157  case 'n':
158  $resolved = $this->getLanguage()->txt('mail_salutation_n');
159  break;
160  }
161  break;
162 
163  case ('first_name' === $placeholder_id && $recipient !== null):
164  $resolved = $recipient->getFirstname();
165  break;
166 
167  case ('last_name' === $placeholder_id && $recipient !== null):
168  $resolved = $recipient->getLastname();
169  break;
170 
171  case ('login' === $placeholder_id && $recipient !== null):
172  $resolved = $recipient->getLogin();
173  break;
174 
175  case ('title' === $placeholder_id && $recipient !== null):
176  $resolved = $recipient->getUTitle();
177  break;
178 
179  case 'ilias_url' === $placeholder_id:
180  $resolved = $this->envHelper->getHttpPath() . ' ';
181  break;
182 
183  case 'installation_name' === $placeholder_id:
184  $resolved = $this->envHelper->getClientId();
185  break;
186 
187  case 'firstname_lastname_superior' === $placeholder_id && $recipient !== null:
188  $ouUsers = $this->orgUnitUserService->getUsers([$recipient->getId()], true);
189  foreach ($ouUsers as $ouUser) {
190  $superiors = $ouUser->getSuperiors();
191 
192  $superiorUsrIds = array_map(static function (ilOrgUnitUser $ouUser): int {
193  return $ouUser->getUserId();
194  }, $superiors);
195 
196  $usrIdByNameMap = $this->userHelper->getUsernameMapForIds($superiorUsrIds);
197 
198  $resolved = implode(', ', $usrIdByNameMap);
199  break;
200  }
201  break;
202 
203  case !array_key_exists($placeholder_id, $this->getGenericPlaceholders()):
204  $datePresentationLanguage = ilDatePresentation::getLanguage();
206 
207  $resolved = $this->resolveSpecificPlaceholder(
208  $placeholder_id,
209  $context_parameters,
210  $recipient
211  );
212 
213  ilDatePresentation::setLanguage($datePresentationLanguage);
214  break;
215  }
216 
217  return $resolved;
218  }
219 
220  protected function initLanguage(ilObjUser $user): void
221  {
222  $this->initLanguageByIso2Code($user->getLanguage());
223  }
224 
225  protected function initLanguageByIso2Code(string $isoCode): void
226  {
227  $this->language = $this->languageHelper->getLanguageByIsoCode($isoCode);
228  $this->language->loadLanguageModule('mail');
229  }
230 }
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.
string $key
Consumer key/client ID value.
Definition: System.php:193
Class ilMailTemplateContext.
__construct(OrgUnitUserService $orgUnitUserService=null, ilMailEnvironmentHelper $envHelper=null, ilMailUserHelper $usernameHelper=null, ilMailLanguageHelper $languageHelper=null)
ilMailEnvironmentHelper $envHelper