19 declare(strict_types=1);
37 public function __construct($a_data,
int $a_id,
bool $a_call_by_reference)
43 $this->
tabs = $DIC->tabs();
44 $this->mustache_factory = $DIC->mail()->mustacheFactory();
46 $this->
lng->loadLanguageModule(
'mail');
51 $next_class = $this->
ctrl->getNextClass($this);
52 $cmd = $this->
ctrl->getCmd();
55 switch (strtolower($next_class)) {
56 case strtolower(ilPermissionGUI::class):
58 $this->
ctrl->forwardCommand($perm_gui);
61 case strtolower(ilMailTemplateGUI::class):
63 $this->
ilias->raiseError(
64 $this->
lng->txt(
'msg_no_perm_write'),
65 $this->
ilias->error_obj->WARNING
84 return $this->rbac_system->checkAccess(
'write', $this->
object->getRefId());
89 return $this->rbac_system->checkAccess(
'read', $this->
object->getRefId());
94 return $this->rbac_system->checkAccess(
'edit_permission', $this->
object->getRefId());
105 $this->
tabs->addTarget(
107 $this->
ctrl->getLinkTarget($this,
'view'),
112 'showExternalSettingsForm',
113 'saveExternalSettingsForm',
115 'sendTestSystemMail',
121 $this->
tabs->addTarget(
123 $this->
ctrl->getLinkTargetByClass(ilMailTemplateGUI::class,
'showTemplates'),
125 ilMailTemplateGUI::class
130 $this->
tabs->addTarget(
132 $this->
ctrl->getLinkTargetByClass([static::class, ilPermissionGUI::class],
'perm'),
133 [
'perm',
'info',
'owner'],
134 ilPermissionGUI::class
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')
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')
156 $this->
tabs->activateSubTab($activeSubTab);
168 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->
ilias->error_obj->WARNING);
173 if ($form === null) {
178 $this->tpl->setContent($form->getHTML());
185 $form->setFormAction($this->
ctrl->getFormAction($this,
'save'));
186 $form->setTitle($this->
lng->txt(
'general_settings'));
189 $cb->setInfo($this->
lng->txt(
'mail_allow_external_info'));
195 $this->
lng->txt(
'mail_incoming'),
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')
204 $this->
ctrl->clearParametersByClass(ilObjUserFolderGUI::class);
205 $form->addItem($incoming_mail_gui);
208 $this->
lng->txt(
'show_mail_settings'),
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);
216 $ti->setSuffix($this->
lng->txt(
'kb'));
217 $ti->setInfo($this->
lng->txt(
'mail_max_size_attachments_total'));
218 $ti->setMaxLength(10);
224 $mn->setTitle($this->
lng->txt(
'mail_member_notification'));
228 $this->
lng->txt(
'cron_mail_notification'),
232 0 => $this->
lng->txt(
'cron_mail_notification_never'),
233 1 => $this->
lng->txt(
'cron_mail_notification_cron'),
236 $cron_mail->setInfo(sprintf(
237 $this->
lng->txt(
'cron_mail_notification_desc'),
238 $this->
lng->txt(
'mail_allow_external')
241 $form->addItem($cron_mail);
250 $mn->setTitle($this->
lng->txt(
'mail_auto_responder'));
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'));
260 $form->addItem($input);
263 $form->addCommandButton(
'save', $this->
lng->txt(
'save'));
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') :
292 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->
ilias->error_obj->WARNING);
296 if ($form->checkInput()) {
297 $incoming_type = (
int) $form->getInput(
'incoming_type');
301 $mail_address_option = (
int) $form->getInput(
'mail_address_option');
303 $mail_address_option = (
int) $form->getInput(
'mail_address_option_both');
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'));
314 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'saved_successfully'),
true);
315 $this->
ctrl->redirect($this);
318 $form->setValuesByPost();
325 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->
ilias->error_obj->WARNING);
330 if ($form === null) {
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')
340 $this->
toolbar->addComponent($this->ui_factory->button()->standard(
341 $this->
lng->txt(
'mail_external_send_test_sys'),
342 $this->
ctrl->getLinkTarget($this,
'sendTestSystemMail')
346 $this->tpl->setContent($form->getHTML());
362 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->
ilias->error_obj->WARNING);
365 if ($this->
user->getEmail() ===
'') {
376 $mail->setSaveInSentbox(
false);
377 $mail->appendInstallationSignature(
true);
379 $lngVariablePrefix =
'sys';
381 $lngVariablePrefix =
'usr';
385 $this->
user->getEmail(),
388 $this->
lng->txt(
'mail_email_' . $lngVariablePrefix .
'_subject'),
389 $this->
lng->txt(
'mail_email_' . $lngVariablePrefix .
'_body'),
393 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'mail_external_test_sent'));
401 $form->setFormAction($this->
ctrl->getFormAction($this,
'saveExternalSettingsForm'));
402 $form->setTitle($this->
lng->txt(
'mail_settings_external_frm_head'));
405 $smtp->setInfo($this->
lng->txt(
'mail_smtp_status_info'));
406 $smtp->setValue(
'1');
408 $form->addItem($smtp);
411 $host->setInfo($this->
lng->txt(
'mail_smtp_host_info'));
412 $host->setRequired(
true);
414 $smtp->addSubItem($host);
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);
423 $smtp->addSubItem($port);
426 $this->
lng->txt(
'mail_smtp_encryption'),
427 'mail_smtp_encryption' 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'),
437 $smtp->addSubItem($encryption);
441 $user->setDisableHtmlAutoComplete(
true);
442 $smtp->addSubItem(
$user);
445 $this->
lng->txt(
'mail_smtp_password'),
449 $password->setSkipSyntaxCheck(
true);
451 $password->setDisableHtmlAutoComplete(
true);
452 $smtp->addSubItem($password);
454 $pre =
new ilTextInputGUI($this->
lng->txt(
'mail_subject_prefix'),
'mail_subject_prefix');
456 $pre->setMaxLength(32);
457 $pre->setInfo($this->
lng->txt(
'mail_subject_prefix_info'));
459 $form->addItem($pre);
462 $send_html->setInfo($this->
lng->txt(
'mail_send_html_info'));
463 $send_html->setValue(
'1');
465 $form->addItem($send_html);
468 $sh->setTitle($this->
lng->txt(
'mail_settings_user_frm_head'));
472 $this->
lng->txt(
'mail_system_usr_from_addr'),
473 'mail_system_usr_from_addr' 475 $user_from_address->
setInfo($this->
lng->txt(
'mail_system_usr_from_addr_info'));
476 $user_from_address->setRequired(
true);
478 $form->addItem($user_from_address);
481 $this->
lng->txt(
'mail_use_global_reply_to_addr'),
482 'use_global_reply_to_addr' 484 $useGlobalReplyToAddress->setInfo($this->
lng->txt(
'mail_use_global_reply_to_addr_info'));
485 $useGlobalReplyToAddress->setValue(
'1');
487 $form->addItem($useGlobalReplyToAddress);
489 $this->
lng->txt(
'mail_global_reply_to_addr'),
490 'global_reply_to_addr' 492 $globalReplyTo->
setInfo($this->
lng->txt(
'mail_global_reply_to_addr_info'));
493 $globalReplyTo->setRequired(
true);
495 $useGlobalReplyToAddress->addSubItem($globalReplyTo);
498 $this->
lng->txt(
'mail_system_usr_from_name'),
499 'mail_system_usr_from_name' 501 $user_from_name->setInfo($this->
lng->txt(
'mail_system_usr_from_name_info'));
502 $user_from_name->setRequired(
true);
504 $form->addItem($user_from_name);
507 $this->
lng->txt(
'mail_system_usr_env_from_addr'),
508 'mail_system_usr_env_from_addr' 510 $user_envelope_from_addr->
setInfo($this->
lng->txt(
'mail_system_usr_env_from_addr_info'));
512 $form->addItem($user_envelope_from_addr);
515 $sh->setTitle($this->
lng->txt(
'mail_settings_system_frm_head'));
519 $this->
lng->txt(
'mail_system_sys_from_addr'),
520 'mail_system_sys_from_addr' 522 $system_from_addr->
setInfo($this->
lng->txt(
'mail_system_sys_from_addr_info'));
523 $system_from_addr->setRequired(
true);
525 $form->addItem($system_from_addr);
528 $this->
lng->txt(
'mail_system_sys_from_name'),
529 'mail_system_sys_from_name' 531 $system_from_name->setRequired(
true);
533 $form->addItem($system_from_name);
536 $this->
lng->txt(
'mail_system_sys_reply_to_addr'),
537 'mail_system_sys_reply_to_addr' 541 $form->addItem($system_reply_to_addr);
544 $this->
lng->txt(
'mail_system_sys_env_from_addr'),
545 'mail_system_sys_env_from_addr' 547 $system_return_path->
setInfo($this->
lng->txt(
'mail_system_sys_env_from_addr_info'));
549 $form->addItem($system_return_path);
552 $this->
lng->txt(
'mail_system_sys_signature'),
553 'mail_system_sys_signature' 557 $form->addItem($signature);
560 $this->
lng->txt(
'mail_form_placeholders_label'),
562 'mail_system_sys_signature' 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')],
569 foreach ($placeholder_list as $value) {
570 $placeholders->
addPlaceholder($value[
'placeholder'], $value[
'label']);
573 $form->addItem($placeholders);
576 $form->addCommandButton(
'saveExternalSettingsForm', $this->
lng->txt(
'save'));
584 $subjectPrefix = $this->
settings->get(
'mail_subject_prefix');
585 if (null === $subjectPrefix) {
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 :
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',
''),
616 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->
ilias->error_obj->WARNING);
620 $isFormValid = $form->checkInput();
623 $form->setValuesByPost();
628 $isSmtpEnabled = (bool) $form->getInput(
'mail_smtp_status');
629 if ($isSmtpEnabled && $form->getInput(
'mail_smtp_user') &&
630 !$form->getInput(
'mail_smtp_password')
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();
641 $is_valid_template_syntax = $this->
refinery->custom()->constraint(
function ($value):
bool {
643 $this->mustache_factory->getBasicEngine()->render((
string) $value, []);
648 }, $this->
lng->txt(
'mail_template_invalid_tpl_syntax'));
650 $valid_templates =
true;
651 foreach ([
'mail_system_usr_from_name',
'mail_system_sys_signature'] as $template) {
653 $is_valid_template_syntax->check((
string) $form->getInput($template));
655 $form->getItemByPostVar($template)->setAlert(
656 $is_valid_template_syntax->problemWith((
string) $form->getInput($template))
658 $valid_templates =
false;
661 if (!$valid_templates) {
662 $form->setValuesByPost();
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'));
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'));
680 'mail_system_usr_env_from_addr',
681 (
string) $form->getInput(
'mail_system_usr_env_from_addr')
684 'mail_system_sys_from_addr',
685 (
string) $form->getInput(
'mail_system_sys_from_addr')
687 $this->
settings->set(
'mail_system_sys_from_name', (
string) $form->getInput(
'mail_system_sys_from_name'));
689 'mail_system_sys_reply_to_addr',
690 (
string) $form->getInput(
'mail_system_sys_reply_to_addr')
693 'mail_system_sys_env_from_addr',
694 (
string) $form->getInput(
'mail_system_sys_env_from_addr')
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'));
700 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'saved_successfully'),
true);
701 $this->
ctrl->redirect($this,
'showExternalSettingsForm');
704 public static function _goto(
string $target): void
707 $main_tpl = $DIC->ui()->mainTemplate();
709 $mail =
new ilMail($DIC->user()->getId());
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'),
719 $DIC->ctrl()->setTargetScript(
'ilias.php');
720 $DIC->ctrl()->setParameterByClass(ilRepositoryGUI::class,
'ref_id',
ROOT_FOLDER_ID);
721 $DIC->ctrl()->redirectByClass(ilRepositoryGUI::class);
724 $DIC[
'ilErr']->raiseError($DIC->language()->txt(
'msg_no_perm_read'), $DIC[
'ilErr']->FATAL);
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
sendTestMail(bool $isManualMail=false)
populateGeneralSettingsForm(ilPropertyFormGUI $form)
prepareOutput(bool $show_sub_objects=true)
readonly ilMustacheFactory $mustache_factory
isPermissionChangeAllowed()
const PASSWORD_PLACE_HOLDER
static _goto(string $target)
static _lookupObjId(int $ref_id)
const SETTINGS_SUB_TAB_ID_EXTERNAL
sendTestSystemMailObject()
saveExternalSettingsFormObject()
final const INCOMING_EMAIL
__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.
header include for all ilias files.
showGeneralSettingsForm(ilPropertyFormGUI $form=null)
const SETTINGS_SUB_TAB_ID_GENERAL
This class represents a text area property in a property form.
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
final const INCOMING_BOTH
final const MAIL_SUBJECT_PREFIX
buildSettingsSubTabs(string $activeSubTab)
getExternalSettingsForm()
populateExternalSettingsForm(ilPropertyFormGUI $form)