ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilObjMailGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
29 {
30  private const SETTINGS_SUB_TAB_ID_GENERAL = 'settings_general';
31  private const SETTINGS_SUB_TAB_ID_EXTERNAL = 'settings_external';
32  private const PASSWORD_PLACE_HOLDER = '***********************';
33 
34  private readonly ilTabsGUI $tabs;
36 
37  public function __construct($a_data, int $a_id, bool $a_call_by_reference)
38  {
39  global $DIC;
40  $this->type = 'mail';
41  parent::__construct($a_data, $a_id, $a_call_by_reference, false);
42 
43  $this->tabs = $DIC->tabs();
44  $this->mustache_factory = $DIC->mail()->mustacheFactory();
45 
46  $this->lng->loadLanguageModule('mail');
47  }
48 
49  public function executeCommand(): void
50  {
51  $next_class = $this->ctrl->getNextClass($this);
52  $cmd = $this->ctrl->getCmd();
53  $this->prepareOutput();
54 
55  switch (strtolower($next_class)) {
56  case strtolower(ilPermissionGUI::class):
57  $perm_gui = new ilPermissionGUI($this);
58  $this->ctrl->forwardCommand($perm_gui);
59  break;
60 
61  case strtolower(ilMailTemplateGUI::class):
62  if (!$this->isViewAllowed()) {
63  $this->ilias->raiseError(
64  $this->lng->txt('msg_no_perm_write'),
65  $this->ilias->error_obj->WARNING
66  );
67  }
68 
69  $this->ctrl->forwardCommand(new ilMailTemplateGUI($this->object));
70  break;
71 
72  default:
73  if (!$cmd) {
74  $cmd = 'view';
75  }
76  $cmd .= 'Object';
77  $this->$cmd();
78  break;
79  }
80  }
81 
82  private function isEditingAllowed(): bool
83  {
84  return $this->rbac_system->checkAccess('write', $this->object->getRefId());
85  }
86 
87  private function isViewAllowed(): bool
88  {
89  return $this->rbac_system->checkAccess('read', $this->object->getRefId());
90  }
91 
92  private function isPermissionChangeAllowed(): bool
93  {
94  return $this->rbac_system->checkAccess('edit_permission', $this->object->getRefId());
95  }
96 
97  public function getAdminTabs(): void
98  {
99  $this->getTabs();
100  }
101 
102  protected function getTabs(): void
103  {
104  if ($this->isViewAllowed()) {
105  $this->tabs->addTarget(
106  'settings',
107  $this->ctrl->getLinkTarget($this, 'view'),
108  [
109  'view',
110  'save',
111  '',
112  'showExternalSettingsForm',
113  'saveExternalSettingsForm',
114  'sendTestUserMail',
115  'sendTestSystemMail',
116  ]
117  );
118  }
119 
120  if ($this->isViewAllowed()) {
121  $this->tabs->addTarget(
122  'mail_templates',
123  $this->ctrl->getLinkTargetByClass(ilMailTemplateGUI::class, 'showTemplates'),
124  '',
125  ilMailTemplateGUI::class
126  );
127  }
128 
129  if ($this->isPermissionChangeAllowed()) {
130  $this->tabs->addTarget(
131  'perm_settings',
132  $this->ctrl->getLinkTargetByClass([static::class, ilPermissionGUI::class], 'perm'),
133  ['perm', 'info', 'owner'],
134  ilPermissionGUI::class
135  );
136  }
137  }
138 
139  protected function buildSettingsSubTabs(string $activeSubTab): void
140  {
141  if ($this->isViewAllowed()) {
142  $this->tabs->addSubTab(
143  self::SETTINGS_SUB_TAB_ID_GENERAL,
144  $this->lng->txt('mail_settings_general_tab'),
145  $this->ctrl->getLinkTarget($this, 'view')
146  );
147 
148  if ($this->settings->get('mail_allow_external', '0')) {
149  $this->tabs->addSubTab(
150  self::SETTINGS_SUB_TAB_ID_EXTERNAL,
151  $this->lng->txt('mail_settings_external_tab'),
152  $this->ctrl->getLinkTarget($this, 'showExternalSettingsForm')
153  );
154  }
155 
156  $this->tabs->activateSubTab($activeSubTab);
157  }
158  }
159 
160  public function viewObject(): void
161  {
162  $this->showGeneralSettingsForm();
163  }
164 
165  protected function showGeneralSettingsForm(ilPropertyFormGUI $form = null): void
166  {
167  if (!$this->isViewAllowed()) {
168  $this->ilias->raiseError($this->lng->txt('msg_no_perm_write'), $this->ilias->error_obj->WARNING);
169  }
170 
171  $this->buildSettingsSubTabs(self::SETTINGS_SUB_TAB_ID_GENERAL);
172 
173  if ($form === null) {
174  $form = $this->getGeneralSettingsForm();
175  $this->populateGeneralSettingsForm($form);
176  }
177 
178  $this->tpl->setContent($form->getHTML());
179  }
180 
182  {
183  $form = new ilPropertyFormGUI();
184 
185  $form->setFormAction($this->ctrl->getFormAction($this, 'save'));
186  $form->setTitle($this->lng->txt('general_settings'));
187 
188  $cb = new ilCheckboxInputGUI($this->lng->txt('mail_allow_external'), 'mail_allow_external');
189  $cb->setInfo($this->lng->txt('mail_allow_external_info'));
190  $cb->setValue('1');
191  $cb->setDisabled(!$this->isEditingAllowed());
192  $form->addItem($cb);
193 
194  $incoming_mail_gui = new ilIncomingMailInputGUI(
195  $this->lng->txt('mail_incoming'),
196  'incoming_type'
197  );
198  $incoming_mail_gui->setDisabled(!$this->isEditingAllowed());
199  $this->ctrl->setParameterByClass(ilObjUserFolderGUI::class, 'ref_id', USER_FOLDER_ID);
200  $incoming_mail_gui->setInfo(sprintf(
201  $this->lng->txt('mail_settings_incoming_type_see_also'),
202  $this->ctrl->getLinkTargetByClass(ilObjUserFolderGUI::class, 'settings')
203  ));
204  $this->ctrl->clearParametersByClass(ilObjUserFolderGUI::class);
205  $form->addItem($incoming_mail_gui);
206 
207  $show_mail_settings_gui = new ilCheckboxInputGUI(
208  $this->lng->txt('show_mail_settings'),
209  'show_mail_settings'
210  );
211  $show_mail_settings_gui->setInfo($this->lng->txt('show_mail_settings_info'));
212  $show_mail_settings_gui->setValue('1');
213  $form->addItem($show_mail_settings_gui);
214 
215  $ti = new ilNumberInputGUI($this->lng->txt('mail_maxsize_attach'), 'mail_maxsize_attach');
216  $ti->setSuffix($this->lng->txt('kb'));
217  $ti->setInfo($this->lng->txt('mail_max_size_attachments_total'));
218  $ti->setMaxLength(10);
219  $ti->setSize(10);
220  $ti->setDisabled(!$this->isEditingAllowed());
221  $form->addItem($ti);
222 
223  $mn = new ilFormSectionHeaderGUI();
224  $mn->setTitle($this->lng->txt('mail_member_notification'));
225  $form->addItem($mn);
226 
227  $cron_mail = new ilSelectInputGUI(
228  $this->lng->txt('cron_mail_notification'),
229  'mail_notification'
230  );
231  $cron_options = [
232  0 => $this->lng->txt('cron_mail_notification_never'),
233  1 => $this->lng->txt('cron_mail_notification_cron'),
234  ];
235  $cron_mail->setOptions($cron_options);
236  $cron_mail->setInfo(sprintf(
237  $this->lng->txt('cron_mail_notification_desc'),
238  $this->lng->txt('mail_allow_external')
239  ));
240  $cron_mail->setDisabled(!$this->isEditingAllowed());
241  $form->addItem($cron_mail);
242 
245  $form,
246  $this
247  );
248 
249  $mn = new ilFormSectionHeaderGUI();
250  $mn->setTitle($this->lng->txt('mail_auto_responder'));
251  $form->addItem($mn);
252 
253  $input = new ilNumberInputGUI($this->lng->txt('mail_auto_responder_idle_time'), 'mail_auto_responder_idle_time');
254  $input->setMinValue(1);
255  $input->allowDecimals(false);
256  $input->setInfo($this->lng->txt('mail_auto_responder_idle_time_info'));
257  $input->setSuffix($this->lng->txt('days'));
258  $input->setDisabled(!$this->isEditingAllowed());
259  $input->setSize(5);
260  $form->addItem($input);
261 
262  if ($this->isEditingAllowed()) {
263  $form->addCommandButton('save', $this->lng->txt('save'));
264  }
265 
266  return $form;
267  }
268 
269  protected function populateGeneralSettingsForm(ilPropertyFormGUI $form): void
270  {
271  $form->setValuesByArray([
272  'mail_allow_external' => (bool) $this->settings->get('mail_allow_external', '0'),
273  'incoming_type' => (string) $this->settings->get('mail_incoming_mail', '0'),
274  'mail_address_option' => $this->settings->get('mail_address_option', '') !== '' ?
275  $this->settings->get('mail_address_option') :
277  'mail_address_option_both' => $this->settings->get('mail_address_option', '') !== '' ?
278  $this->settings->get('mail_address_option') :
280  'show_mail_settings' => (bool) $this->settings->get('show_mail_settings', '1'),
281  'mail_maxsize_attach' => $this->settings->get('mail_maxsize_attach', ''),
282  'mail_notification' => $this->settings->get('mail_notification', ''),
283  'mail_auto_responder_idle_time' => is_numeric($this->settings->get('mail_auto_responder_idle_time', (string) AutoresponderService::AUTO_RESPONDER_DEFAULT_IDLE_TIME)) ?
284  (string) $this->settings->get('mail_auto_responder_idle_time', '3') :
285  '',
286  ]);
287  }
288 
289  public function saveObject(): void
290  {
291  if (!$this->isEditingAllowed()) {
292  $this->ilias->raiseError($this->lng->txt('msg_no_perm_write'), $this->ilias->error_obj->WARNING);
293  }
294 
295  $form = $this->getGeneralSettingsForm();
296  if ($form->checkInput()) {
297  $incoming_type = (int) $form->getInput('incoming_type');
298 
299  $mail_address_option = ilMailOptions::FIRST_EMAIL;
300  if ($incoming_type === ilMailOptions::INCOMING_EMAIL) {
301  $mail_address_option = (int) $form->getInput('mail_address_option');
302  } elseif ($incoming_type === ilMailOptions::INCOMING_BOTH) {
303  $mail_address_option = (int) $form->getInput('mail_address_option_both');
304  }
305 
306  $this->settings->set('mail_allow_external', (string) ((int) $form->getInput('mail_allow_external')));
307  $this->settings->set('mail_incoming_mail', (string) $incoming_type);
308  $this->settings->set('show_mail_settings', (string) ((int) $form->getInput('show_mail_settings')));
309  $this->settings->set('mail_address_option', (string) $mail_address_option);
310  $this->settings->set('mail_maxsize_attach', (string) $form->getInput('mail_maxsize_attach'));
311  $this->settings->set('mail_notification', (string) ((int) $form->getInput('mail_notification')));
312  $this->settings->set('mail_auto_responder_idle_time', (string) $form->getInput('mail_auto_responder_idle_time'));
313 
314  $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'), true);
315  $this->ctrl->redirect($this);
316  }
317 
318  $form->setValuesByPost();
319  $this->showGeneralSettingsForm($form);
320  }
321 
322  protected function showExternalSettingsFormObject(ilPropertyFormGUI $form = null): void
323  {
324  if (!$this->isViewAllowed()) {
325  $this->ilias->raiseError($this->lng->txt('msg_no_perm_write'), $this->ilias->error_obj->WARNING);
326  }
327 
328  $this->buildSettingsSubTabs(self::SETTINGS_SUB_TAB_ID_EXTERNAL);
329 
330  if ($form === null) {
331  $form = $this->getExternalSettingsForm();
332  $this->populateExternalSettingsForm($form);
333  }
334 
335  if ($this->user->getEmail() !== '') {
336  $this->toolbar->addComponent($this->ui_factory->button()->standard(
337  $this->lng->txt('mail_external_send_test_usr'),
338  $this->ctrl->getLinkTarget($this, 'sendTestUserMail')
339  ));
340  $this->toolbar->addComponent($this->ui_factory->button()->standard(
341  $this->lng->txt('mail_external_send_test_sys'),
342  $this->ctrl->getLinkTarget($this, 'sendTestSystemMail')
343  ));
344  }
345 
346  $this->tpl->setContent($form->getHTML());
347  }
348 
349  protected function sendTestUserMailObject(): void
350  {
351  $this->sendTestMail(true);
352  }
353 
354  protected function sendTestSystemMailObject(): void
355  {
356  $this->sendTestMail();
357  }
358 
359  protected function sendTestMail(bool $isManualMail = false): void
360  {
361  if (!$this->isViewAllowed()) {
362  $this->ilias->raiseError($this->lng->txt('msg_no_perm_write'), $this->ilias->error_obj->WARNING);
363  }
364 
365  if ($this->user->getEmail() === '') {
367  return;
368  }
369 
370  if ($isManualMail) {
371  $mail = new ilMail($this->user->getId());
372  } else {
373  $mail = new ilMail(ANONYMOUS_USER_ID);
374  }
375 
376  $mail->setSaveInSentbox(false);
377  $mail->appendInstallationSignature(true);
378 
379  $lngVariablePrefix = 'sys';
380  if ($isManualMail) {
381  $lngVariablePrefix = 'usr';
382  }
383 
384  $mail->enqueue(
385  $this->user->getEmail(),
386  '',
387  '',
388  $this->lng->txt('mail_email_' . $lngVariablePrefix . '_subject'),
389  $this->lng->txt('mail_email_' . $lngVariablePrefix . '_body'),
390  []
391  );
392 
393  $this->tpl->setOnScreenMessage('success', $this->lng->txt('mail_external_test_sent'));
395  }
396 
398  {
399  $form = new ilPropertyFormGUI();
400 
401  $form->setFormAction($this->ctrl->getFormAction($this, 'saveExternalSettingsForm'));
402  $form->setTitle($this->lng->txt('mail_settings_external_frm_head'));
403 
404  $smtp = new ilCheckboxInputGUI($this->lng->txt('mail_smtp_status'), 'mail_smtp_status');
405  $smtp->setInfo($this->lng->txt('mail_smtp_status_info'));
406  $smtp->setValue('1');
407  $smtp->setDisabled(!$this->isEditingAllowed());
408  $form->addItem($smtp);
409 
410  $host = new ilTextInputGUI($this->lng->txt('mail_smtp_host'), 'mail_smtp_host');
411  $host->setInfo($this->lng->txt('mail_smtp_host_info'));
412  $host->setRequired(true);
413  $host->setDisabled(!$this->isEditingAllowed());
414  $smtp->addSubItem($host);
415 
416  $port = new ilNumberInputGUI($this->lng->txt('mail_smtp_port'), 'mail_smtp_port');
417  $port->setInfo($this->lng->txt('mail_smtp_port_info'));
418  $port->allowDecimals(false);
419  $port->setMinValue(0);
420  $port->setMinValue(0);
421  $port->setRequired(true);
422  $port->setDisabled(!$this->isEditingAllowed());
423  $smtp->addSubItem($port);
424 
425  $encryption = new ilSelectInputGUI(
426  $this->lng->txt('mail_smtp_encryption'),
427  'mail_smtp_encryption'
428  );
429  $encryptionOptions = [
430  '' => $this->lng->txt('please_choose'),
431  'tls' => $this->lng->txt('mail_smtp_encryption_tls'),
432  'ssl' => $this->lng->txt('mail_smtp_encryption_ssl'),
433  ];
434 
435  $encryption->setOptions($encryptionOptions);
436  $encryption->setDisabled(!$this->isEditingAllowed());
437  $smtp->addSubItem($encryption);
438 
439  $user = new ilTextInputGUI($this->lng->txt('mail_smtp_user'), 'mail_smtp_user');
440  $user->setDisabled(!$this->isEditingAllowed());
441  $user->setDisableHtmlAutoComplete(true);
442  $smtp->addSubItem($user);
443 
444  $password = new ilPasswordInputGUI(
445  $this->lng->txt('mail_smtp_password'),
446  'mail_smtp_password'
447  );
448  $password->setRetype(false);
449  $password->setSkipSyntaxCheck(true);
450  $password->setDisabled(!$this->isEditingAllowed());
451  $password->setDisableHtmlAutoComplete(true);
452  $smtp->addSubItem($password);
453 
454  $pre = new ilTextInputGUI($this->lng->txt('mail_subject_prefix'), 'mail_subject_prefix');
455  $pre->setSize(12);
456  $pre->setMaxLength(32);
457  $pre->setInfo($this->lng->txt('mail_subject_prefix_info'));
458  $pre->setDisabled(!$this->isEditingAllowed());
459  $form->addItem($pre);
460 
461  $send_html = new ilCheckboxInputGUI($this->lng->txt('mail_send_html'), 'mail_send_html');
462  $send_html->setInfo($this->lng->txt('mail_send_html_info'));
463  $send_html->setValue('1');
464  $send_html->setDisabled(!$this->isEditingAllowed());
465  $form->addItem($send_html);
466 
467  $sh = new ilFormSectionHeaderGUI();
468  $sh->setTitle($this->lng->txt('mail_settings_user_frm_head'));
469  $form->addItem($sh);
470 
471  $user_from_address = new ilEMailInputGUI(
472  $this->lng->txt('mail_system_usr_from_addr'),
473  'mail_system_usr_from_addr'
474  );
475  $user_from_address->setInfo($this->lng->txt('mail_system_usr_from_addr_info'));
476  $user_from_address->setRequired(true);
477  $user_from_address->setDisabled(!$this->isEditingAllowed());
478  $form->addItem($user_from_address);
479 
480  $useGlobalReplyToAddress = new ilCheckboxInputGUI(
481  $this->lng->txt('mail_use_global_reply_to_addr'),
482  'use_global_reply_to_addr'
483  );
484  $useGlobalReplyToAddress->setInfo($this->lng->txt('mail_use_global_reply_to_addr_info'));
485  $useGlobalReplyToAddress->setValue('1');
486  $useGlobalReplyToAddress->setDisabled(!$this->isEditingAllowed());
487  $form->addItem($useGlobalReplyToAddress);
488  $globalReplyTo = new ilEMailInputGUI(
489  $this->lng->txt('mail_global_reply_to_addr'),
490  'global_reply_to_addr'
491  );
492  $globalReplyTo->setInfo($this->lng->txt('mail_global_reply_to_addr_info'));
493  $globalReplyTo->setRequired(true);
494  $globalReplyTo->setDisabled(!$this->isEditingAllowed());
495  $useGlobalReplyToAddress->addSubItem($globalReplyTo);
496 
497  $user_from_name = new ilTextInputGUI(
498  $this->lng->txt('mail_system_usr_from_name'),
499  'mail_system_usr_from_name'
500  );
501  $user_from_name->setInfo($this->lng->txt('mail_system_usr_from_name_info'));
502  $user_from_name->setRequired(true);
503  $user_from_name->setDisabled(!$this->isEditingAllowed());
504  $form->addItem($user_from_name);
505 
506  $user_envelope_from_addr = new ilEMailInputGUI(
507  $this->lng->txt('mail_system_usr_env_from_addr'),
508  'mail_system_usr_env_from_addr'
509  );
510  $user_envelope_from_addr->setInfo($this->lng->txt('mail_system_usr_env_from_addr_info'));
511  $user_envelope_from_addr->setDisabled(!$this->isEditingAllowed());
512  $form->addItem($user_envelope_from_addr);
513 
514  $sh = new ilFormSectionHeaderGUI();
515  $sh->setTitle($this->lng->txt('mail_settings_system_frm_head'));
516  $form->addItem($sh);
517 
518  $system_from_addr = new ilEMailInputGUI(
519  $this->lng->txt('mail_system_sys_from_addr'),
520  'mail_system_sys_from_addr'
521  );
522  $system_from_addr->setInfo($this->lng->txt('mail_system_sys_from_addr_info'));
523  $system_from_addr->setRequired(true);
524  $system_from_addr->setDisabled(!$this->isEditingAllowed());
525  $form->addItem($system_from_addr);
526 
527  $system_from_name = new ilTextInputGUI(
528  $this->lng->txt('mail_system_sys_from_name'),
529  'mail_system_sys_from_name'
530  );
531  $system_from_name->setRequired(true);
532  $system_from_name->setDisabled(!$this->isEditingAllowed());
533  $form->addItem($system_from_name);
534 
535  $system_reply_to_addr = new ilEMailInputGUI(
536  $this->lng->txt('mail_system_sys_reply_to_addr'),
537  'mail_system_sys_reply_to_addr'
538  );
539  $system_reply_to_addr->setRequired(true);
540  $system_reply_to_addr->setDisabled(!$this->isEditingAllowed());
541  $form->addItem($system_reply_to_addr);
542 
543  $system_return_path = new ilEMailInputGUI(
544  $this->lng->txt('mail_system_sys_env_from_addr'),
545  'mail_system_sys_env_from_addr'
546  );
547  $system_return_path->setInfo($this->lng->txt('mail_system_sys_env_from_addr_info'));
548  $system_return_path->setDisabled(!$this->isEditingAllowed());
549  $form->addItem($system_return_path);
550 
551  $signature = new ilTextAreaInputGUI(
552  $this->lng->txt('mail_system_sys_signature'),
553  'mail_system_sys_signature'
554  );
555  $signature->setRows(8);
556  $signature->setDisabled(!$this->isEditingAllowed());
557  $form->addItem($signature);
558 
559  $placeholders = new ilManualPlaceholderInputGUI(
560  $this->lng->txt('mail_form_placeholders_label'),
561  'm_placeholders',
562  'mail_system_sys_signature'
563  );
564  $placeholder_list = [
565  ['placeholder' => 'INSTALLATION_NAME', 'label' => $this->lng->txt('mail_nacc_installation_name')],
566  ['placeholder' => 'INSTALLATION_DESC', 'label' => $this->lng->txt('mail_nacc_installation_desc')],
567  ['placeholder' => 'ILIAS_URL', 'label' => $this->lng->txt('mail_nacc_ilias_url')],
568  ];
569  foreach ($placeholder_list as $value) {
570  $placeholders->addPlaceholder($value['placeholder'], $value['label']);
571  }
572  $placeholders->setDisabled(!$this->isEditingAllowed());
573  $form->addItem($placeholders);
574 
575  if ($this->isEditingAllowed()) {
576  $form->addCommandButton('saveExternalSettingsForm', $this->lng->txt('save'));
577  }
578 
579  return $form;
580  }
581 
582  protected function populateExternalSettingsForm(ilPropertyFormGUI $form): void
583  {
584  $subjectPrefix = $this->settings->get('mail_subject_prefix');
585  if (null === $subjectPrefix) {
586  $subjectPrefix = ilMimeMail::MAIL_SUBJECT_PREFIX;
587  }
588 
589  $form->setValuesByArray([
590  'mail_smtp_status' => (bool) $this->settings->get('mail_smtp_status', '0'),
591  'mail_smtp_host' => $this->settings->get('mail_smtp_host', ''),
592  'mail_smtp_port' => $this->settings->get('mail_smtp_port', ''),
593  'mail_smtp_user' => $this->settings->get('mail_smtp_user', ''),
594  'mail_smtp_password' => $this->settings->get('mail_smtp_password') !== '' ?
595  self::PASSWORD_PLACE_HOLDER :
596  '',
597  'mail_smtp_encryption' => $this->settings->get('mail_smtp_encryption', ''),
598  'mail_subject_prefix' => $subjectPrefix,
599  'mail_send_html' => (bool) $this->settings->get('mail_send_html', '0'),
600  'mail_system_usr_from_addr' => $this->settings->get('mail_system_usr_from_addr', ''),
601  'mail_system_usr_from_name' => $this->settings->get('mail_system_usr_from_name', ''),
602  'mail_system_usr_env_from_addr' => $this->settings->get('mail_system_usr_env_from_addr', ''),
603  'mail_system_sys_from_addr' => $this->settings->get('mail_system_sys_from_addr', ''),
604  'mail_system_sys_from_name' => $this->settings->get('mail_system_sys_from_name', ''),
605  'mail_system_sys_reply_to_addr' => $this->settings->get('mail_system_sys_reply_to_addr', ''),
606  'mail_system_sys_env_from_addr' => $this->settings->get('mail_system_sys_env_from_addr', ''),
607  'mail_system_sys_signature' => $this->settings->get('mail_system_sys_signature', ''),
608  'use_global_reply_to_addr' => (bool) $this->settings->get('use_global_reply_to_addr', '0'),
609  'global_reply_to_addr' => $this->settings->get('global_reply_to_addr', ''),
610  ]);
611  }
612 
613  protected function saveExternalSettingsFormObject(): void
614  {
615  if (!$this->isEditingAllowed()) {
616  $this->ilias->raiseError($this->lng->txt('msg_no_perm_write'), $this->ilias->error_obj->WARNING);
617  }
618 
619  $form = $this->getExternalSettingsForm();
620  $isFormValid = $form->checkInput();
621 
622  if (!$isFormValid) {
623  $form->setValuesByPost();
624  $this->showExternalSettingsFormObject($form);
625  return;
626  }
627 
628  $isSmtpEnabled = (bool) $form->getInput('mail_smtp_status');
629  if ($isSmtpEnabled && $form->getInput('mail_smtp_user') &&
630  !$form->getInput('mail_smtp_password')
631  ) {
632  $form->getItemByPostVar('mail_smtp_password')->setRequired(true);
633  $form->getItemByPostVar('mail_smtp_password')
634  ->setAlert($this->lng->txt('mail_smtp_password_req'));
635  $form->setValuesByPost();
636  $this->showExternalSettingsFormObject($form);
637  return;
638  }
639 
640  // If all forms in ILIAS use the UI/KS forms (here and in Services/Mail), we should move this to a proper constraint/trafo
641  $is_valid_template_syntax = $this->refinery->custom()->constraint(function ($value): bool {
642  try {
643  $this->mustache_factory->getBasicEngine()->render((string) $value, []);
644  return true;
645  } catch (Exception) {
646  return false;
647  }
648  }, $this->lng->txt('mail_template_invalid_tpl_syntax'));
649 
650  $valid_templates = true;
651  foreach (['mail_system_usr_from_name', 'mail_system_sys_signature'] as $template) {
652  try {
653  $is_valid_template_syntax->check((string) $form->getInput($template));
654  } catch (Exception) {
655  $form->getItemByPostVar($template)->setAlert(
656  $is_valid_template_syntax->problemWith((string) $form->getInput($template))
657  );
658  $valid_templates = false;
659  }
660  }
661  if (!$valid_templates) {
662  $form->setValuesByPost();
663  $this->showExternalSettingsFormObject($form);
664  return;
665  }
666 
667  $this->settings->set('mail_smtp_status', (string) ((int) $form->getInput('mail_smtp_status')));
668  $this->settings->set('mail_smtp_host', (string) $form->getInput('mail_smtp_host'));
669  $this->settings->set('mail_smtp_port', (string) ((int) $form->getInput('mail_smtp_port')));
670  $this->settings->set('mail_smtp_user', (string) $form->getInput('mail_smtp_user'));
671  if ($form->getInput('mail_smtp_password') !== self::PASSWORD_PLACE_HOLDER) {
672  $this->settings->set('mail_smtp_password', (string) $form->getInput('mail_smtp_password'));
673  }
674  $this->settings->set('mail_smtp_encryption', (string) $form->getInput('mail_smtp_encryption'));
675  $this->settings->set('mail_send_html', (string) $form->getInput('mail_send_html'));
676  $this->settings->set('mail_subject_prefix', (string) $form->getInput('mail_subject_prefix'));
677  $this->settings->set('mail_system_usr_from_addr', (string) $form->getInput('mail_system_usr_from_addr'));
678  $this->settings->set('mail_system_usr_from_name', (string) $form->getInput('mail_system_usr_from_name'));
679  $this->settings->set(
680  'mail_system_usr_env_from_addr',
681  (string) $form->getInput('mail_system_usr_env_from_addr')
682  );
683  $this->settings->set(
684  'mail_system_sys_from_addr',
685  (string) $form->getInput('mail_system_sys_from_addr')
686  );
687  $this->settings->set('mail_system_sys_from_name', (string) $form->getInput('mail_system_sys_from_name'));
688  $this->settings->set(
689  'mail_system_sys_reply_to_addr',
690  (string) $form->getInput('mail_system_sys_reply_to_addr')
691  );
692  $this->settings->set(
693  'mail_system_sys_env_from_addr',
694  (string) $form->getInput('mail_system_sys_env_from_addr')
695  );
696  $this->settings->set('use_global_reply_to_addr', (string) ((int) $form->getInput('use_global_reply_to_addr')));
697  $this->settings->set('global_reply_to_addr', (string) $form->getInput('global_reply_to_addr'));
698  $this->settings->set('mail_system_sys_signature', (string) $form->getInput('mail_system_sys_signature'));
699 
700  $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'), true);
701  $this->ctrl->redirect($this, 'showExternalSettingsForm');
702  }
703 
704  public static function _goto(string $target): void
705  {
706  global $DIC;
707  $main_tpl = $DIC->ui()->mainTemplate();
708 
709  $mail = new ilMail($DIC->user()->getId());
710 
711  if ($DIC->rbac()->system()->checkAccess('internal_mail', $mail->getMailObjectReferenceId())) {
712  $DIC->ctrl()->redirectToURL('ilias.php?baseClass=ilMailGUI');
713  } elseif ($DIC->access()->checkAccess('read', '', ROOT_FOLDER_ID)) {
714  $main_tpl->setOnScreenMessage('failure', sprintf(
715  $DIC->language()->txt('msg_no_perm_read_item'),
717  ), true);
718 
719  $DIC->ctrl()->setTargetScript('ilias.php');
720  $DIC->ctrl()->setParameterByClass(ilRepositoryGUI::class, 'ref_id', ROOT_FOLDER_ID);
721  $DIC->ctrl()->redirectByClass(ilRepositoryGUI::class);
722  }
723 
724  $DIC['ilErr']->raiseError($DIC->language()->txt('msg_no_perm_read'), $DIC['ilErr']->FATAL);
725  }
726 }
const ANONYMOUS_USER_ID
Definition: constants.php:27
const USER_FOLDER_ID
Definition: constants.php:33
This class represents a selection list property in a property form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const ROOT_FOLDER_ID
Definition: constants.php:32
Class ilMailTemplateGUI.
sendTestMail(bool $isManualMail=false)
populateGeneralSettingsForm(ilPropertyFormGUI $form)
prepareOutput(bool $show_sub_objects=true)
readonly ilMustacheFactory $mustache_factory
addPlaceholder(string $placeholder, string $title)
setOptions(array $a_options)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _goto(string $target)
static _lookupObjId(int $ref_id)
Class ilManualPlaceholderInputGUI.
global $DIC
Definition: feed.php:28
const SETTINGS_SUB_TAB_ID_EXTERNAL
final const INCOMING_EMAIL
__construct(VocabulariesInterface $vocabularies)
__construct($a_data, int $a_id, bool $a_call_by_reference)
showExternalSettingsFormObject(ilPropertyFormGUI $form=null)
static _lookupTitle(int $obj_id)
Class ilObjectGUI Basic methods of all Output classes.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
header include for all ilias files.
setValuesByArray(array $a_values, bool $a_restrict_to_value_keys=false)
setRequired(bool $a_required)
showGeneralSettingsForm(ilPropertyFormGUI $form=null)
const SETTINGS_SUB_TAB_ID_GENERAL
This class represents a text area property in a property form.
static addFieldsToForm(int $a_form_id, ilPropertyFormGUI $a_form, ilObjectGUI $a_parent_gui)
final const FIRST_EMAIL
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
readonly ilTabsGUI $tabs
final const INCOMING_BOTH
final const MAIL_SUBJECT_PREFIX
setDisabled(bool $a_disabled)
Class ilIncomingMailInputGUI.
buildSettingsSubTabs(string $activeSubTab)
populateExternalSettingsForm(ilPropertyFormGUI $form)