19declare(strict_types=1);
41 public function __construct($a_data,
int $a_id,
bool $a_call_by_reference)
47 $this->
tabs = $DIC->tabs();
48 $this->template_engine_factory =
$DIC->mail()->templateEngineFactory();
49 $this->mail_signature_service =
$DIC->mail()->signature();
51 $this->
lng->loadLanguageModule(
'mail');
56 $next_class = $this->
ctrl->getNextClass($this) ??
'';
57 $cmd = $this->
ctrl->getCmd();
60 switch (strtolower($next_class)) {
61 case strtolower(ilPermissionGUI::class):
63 $this->
ctrl->forwardCommand($perm_gui);
66 case strtolower(ilMailTemplateGUI::class):
68 $this->
ilias->raiseError(
69 $this->
lng->txt(
'msg_no_perm_write'),
70 $this->ilias->error_obj->WARNING
89 return $this->rbac_system->checkAccess(
'write', $this->
object->getRefId());
94 return $this->rbac_system->checkAccess(
'read', $this->
object->getRefId());
99 return $this->rbac_system->checkAccess(
'edit_permission', $this->
object->getRefId());
110 $this->
tabs->addTarget(
112 $this->
ctrl->getLinkTarget($this,
'view'),
117 'showExternalSettingsForm',
118 'saveExternalSettingsForm',
120 'sendTestSystemMail',
126 $this->
tabs->addTarget(
128 $this->
ctrl->getLinkTargetByClass(ilMailTemplateGUI::class,
'showTemplates'),
130 ilMailTemplateGUI::class
135 $this->
tabs->addTarget(
137 $this->
ctrl->getLinkTargetByClass([static::class, ilPermissionGUI::class],
'perm'),
138 [
'perm',
'info',
'owner'],
139 ilPermissionGUI::class
147 $this->
tabs->addSubTab(
148 self::SETTINGS_SUB_TAB_ID_GENERAL,
149 $this->
lng->txt(
'mail_settings_general_tab'),
150 $this->ctrl->getLinkTarget($this,
'view')
153 if ($this->
settings->get(
'mail_allow_external',
'0')) {
154 $this->
tabs->addSubTab(
155 self::SETTINGS_SUB_TAB_ID_EXTERNAL,
156 $this->
lng->txt(
'mail_settings_external_tab'),
157 $this->ctrl->getLinkTarget($this,
'showExternalSettingsForm')
161 $this->
tabs->activateSubTab($active_sub_tab);
173 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->ilias->error_obj->WARNING);
178 if ($form ===
null) {
183 $this->tpl->setContent($form->getHTML());
190 $form->setFormAction($this->
ctrl->getFormAction($this,
'save'));
191 $form->setTitle($this->
lng->txt(
'general_settings'));
194 $cb->setInfo($this->
lng->txt(
'mail_allow_external_info'));
200 $this->
lng->txt(
'mail_incoming'),
204 $this->
ctrl->setParameterByClass(ilObjUserFolderGUI::class,
'ref_id',
USER_FOLDER_ID);
205 $this->
ctrl->clearParametersByClass(ilObjUserFolderGUI::class);
206 $form->addItem($incoming_mail_gui);
209 $this->
lng->txt(
'show_mail_settings'),
212 $show_mail_settings_gui->setInfo($this->
lng->txt(
'show_mail_settings_info'));
213 $show_mail_settings_gui->setValue(
'1');
214 $form->addItem($show_mail_settings_gui);
217 $ti->setSuffix($this->
lng->txt(
'kb'));
218 $ti->setInfo($this->
lng->txt(
'mail_max_size_attachments_total'));
219 $ti->setMaxLength(10);
225 $mn->setTitle($this->
lng->txt(
'mail_member_notification'));
229 $this->
lng->txt(
'cron_mail_notification'),
233 0 => $this->
lng->txt(
'cron_mail_notification_never'),
234 1 => $this->
lng->txt(
'cron_mail_notification_cron'),
236 $cron_mail->setOptions($cron_options);
237 $cron_mail->setInfo(sprintf(
238 $this->
lng->txt(
'cron_mail_notification_desc'),
239 $this->lng->txt(
'mail_allow_external')
242 $form->addItem($cron_mail);
251 $mn->setTitle($this->
lng->txt(
'mail_auto_responder'));
254 $input =
new ilNumberInputGUI($this->
lng->txt(
'mail_auto_responder_idle_time'),
'mail_auto_responder_idle_time');
255 $input->setMinValue(1);
256 $input->allowDecimals(
false);
257 $input->setInfo($this->
lng->txt(
'mail_auto_responder_idle_time_info'));
258 $input->setSuffix($this->
lng->txt(
'days'));
261 $form->addItem($input);
264 $form->addCommandButton(
'save', $this->
lng->txt(
'save'));
273 'mail_allow_external' => (
bool) $this->
settings->get(
'mail_allow_external',
'0'),
274 'incoming_type' => (
string) $this->settings->get(
'mail_incoming_mail',
'0'),
275 'mail_address_option' => $this->settings->get(
'mail_address_option',
'') !==
'' ?
276 $this->settings->get(
'mail_address_option') :
278 'mail_address_option_both' => $this->settings->get(
'mail_address_option',
'') !==
'' ?
279 $this->settings->get(
'mail_address_option') :
281 'show_mail_settings' => (
bool) $this->settings->get(
'show_mail_settings',
'0'),
282 'mail_maxsize_attach' => $this->settings->get(
'mail_maxsize_attach',
''),
283 'mail_notification' => $this->settings->get(
'mail_notification',
''),
284 'mail_auto_responder_idle_time' => is_numeric($this->
settings->get(
'mail_auto_responder_idle_time', (
string) AutoresponderService::AUTO_RESPONDER_DEFAULT_IDLE_TIME)) ?
285 (
string) $this->settings->get(
'mail_auto_responder_idle_time',
'3') :
293 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->ilias->error_obj->WARNING);
297 if ($form->checkInput()) {
298 $incoming_type = (
int) $form->getInput(
'incoming_type');
302 $mail_address_option = (
int) $form->getInput(
'mail_address_option');
304 $mail_address_option = (
int) $form->getInput(
'mail_address_option_both');
307 $this->
settings->set(
'mail_allow_external', (
string) ((
int) $form->getInput(
'mail_allow_external')));
308 $this->
settings->set(
'mail_incoming_mail', (
string) $incoming_type);
309 $this->
settings->set(
'show_mail_settings', (
string) ((
int) $form->getInput(
'show_mail_settings')));
310 $this->
settings->set(
'mail_address_option', (
string) $mail_address_option);
311 $this->
settings->set(
'mail_maxsize_attach', (
string) $form->getInput(
'mail_maxsize_attach'));
312 $this->
settings->set(
'mail_notification', (
string) ((
int) $form->getInput(
'mail_notification')));
313 $this->
settings->set(
'mail_auto_responder_idle_time', (
string) $form->getInput(
'mail_auto_responder_idle_time'));
315 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'saved_successfully'),
true);
316 $this->
ctrl->redirect($this);
319 $form->setValuesByPost();
326 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->ilias->error_obj->WARNING);
331 if ($form ===
null) {
336 if ($this->
user->getEmail() !==
'') {
337 $this->
toolbar->addComponent($this->ui_factory->button()->standard(
338 $this->lng->txt(
'mail_external_send_test_usr'),
339 $this->ctrl->getLinkTarget($this,
'sendTestUserMail')
341 $this->
toolbar->addComponent($this->ui_factory->button()->standard(
342 $this->lng->txt(
'mail_external_send_test_sys'),
343 $this->ctrl->getLinkTarget($this,
'sendTestSystemMail')
347 $this->tpl->setContent($form->getHTML());
363 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->ilias->error_obj->WARNING);
366 if ($this->
user->getEmail() ===
'') {
371 if ($is_manual_mail) {
377 $mail->setSaveInSentbox(
false);
378 $mail->appendInstallationSignature(!$is_manual_mail);
380 $lng_variable_prefix =
'sys';
381 if ($is_manual_mail) {
382 $lng_variable_prefix =
'usr';
386 $this->
user->getEmail(),
389 $this->lng->txt(
'mail_email_' . $lng_variable_prefix .
'_subject'),
390 $this->lng->txt(
'mail_email_' . $lng_variable_prefix .
'_body'),
394 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'mail_external_test_sent'));
402 $form->setFormAction($this->
ctrl->getFormAction($this,
'saveExternalSettingsForm'));
403 $form->setTitle($this->
lng->txt(
'mail_settings_external_frm_head'));
406 $smtp->setInfo($this->
lng->txt(
'mail_smtp_status_info'));
407 $smtp->setValue(
'1');
409 $form->addItem($smtp);
412 $host->setInfo($this->
lng->txt(
'mail_smtp_host_info'));
413 $host->setRequired(
true);
415 $smtp->addSubItem($host);
418 $port->setInfo($this->
lng->txt(
'mail_smtp_port_info'));
419 $port->allowDecimals(
false);
420 $port->setMinValue(0);
421 $port->setMinValue(0);
422 $port->setRequired(
true);
424 $smtp->addSubItem($port);
427 $this->
lng->txt(
'mail_smtp_encryption'),
428 'mail_smtp_encryption'
430 $encryption_options = [
431 '' => $this->
lng->txt(
'please_choose'),
432 'tls' => $this->
lng->txt(
'mail_smtp_encryption_tls'),
433 'ssl' => $this->
lng->txt(
'mail_smtp_encryption_ssl'),
436 $encryption->setOptions($encryption_options);
438 $smtp->addSubItem($encryption);
442 $user->setDisableHtmlAutoComplete(
true);
443 $smtp->addSubItem(
$user);
446 $this->
lng->txt(
'mail_smtp_password'),
449 $password->setRetype(
false);
450 $password->setSkipSyntaxCheck(
true);
452 $password->setDisableHtmlAutoComplete(
true);
453 $smtp->addSubItem($password);
455 $pre =
new ilTextInputGUI($this->
lng->txt(
'mail_subject_prefix'),
'mail_subject_prefix');
457 $pre->setMaxLength(32);
458 $pre->setInfo($this->
lng->txt(
'mail_subject_prefix_info'));
460 $form->addItem($pre);
463 $send_html->setInfo($this->
lng->txt(
'mail_send_html_info'));
464 $send_html->setValue(
'1');
466 $form->addItem($send_html);
469 $sh->setTitle($this->
lng->txt(
'mail_settings_user_frm_head'));
473 $this->
lng->txt(
'mail_system_usr_from_addr'),
474 'mail_system_usr_from_addr'
476 $user_from_address->setInfo($this->
lng->txt(
'mail_system_usr_from_addr_info'));
477 $user_from_address->setRequired(
true);
479 $form->addItem($user_from_address);
482 $this->
lng->txt(
'mail_use_global_reply_to_addr'),
483 'use_global_reply_to_addr'
485 $use_global_reply_to_address->setInfo($this->
lng->txt(
'mail_use_global_reply_to_addr_info'));
486 $use_global_reply_to_address->setValue(
'1');
488 $form->addItem($use_global_reply_to_address);
490 $this->
lng->txt(
'mail_global_reply_to_addr'),
491 'global_reply_to_addr'
493 $global_reply_to->setInfo($this->
lng->txt(
'mail_global_reply_to_addr_info'));
494 $global_reply_to->setRequired(
true);
496 $use_global_reply_to_address->addSubItem($global_reply_to);
499 $this->
lng->txt(
'mail_system_usr_from_name'),
500 'mail_system_usr_from_name'
502 $user_from_name->setInfo($this->
lng->txt(
'mail_system_usr_from_name_info'));
503 $user_from_name->setRequired(
true);
505 $form->addItem($user_from_name);
508 $this->
lng->txt(
'mail_system_usr_env_from_addr'),
509 'mail_system_usr_env_from_addr'
511 $user_envelope_from_addr->setInfo($this->
lng->txt(
'mail_system_usr_env_from_addr_info'));
513 $form->addItem($user_envelope_from_addr);
515 [$user_signature_inputs, $installation_signature_inputs] = array_map(
519 foreach ($user_signature_inputs as $user_signature_input) {
520 $form->addItem($user_signature_input);
524 $sh->setTitle($this->
lng->txt(
'mail_settings_system_frm_head'));
528 $this->
lng->txt(
'mail_system_sys_from_addr'),
529 'mail_system_sys_from_addr'
531 $system_from_addr->setInfo($this->
lng->txt(
'mail_system_sys_from_addr_info'));
532 $system_from_addr->setRequired(
true);
534 $form->addItem($system_from_addr);
537 $this->
lng->txt(
'mail_system_sys_from_name'),
538 'mail_system_sys_from_name'
540 $system_from_name->setRequired(
true);
542 $form->addItem($system_from_name);
545 $this->
lng->txt(
'mail_system_sys_reply_to_addr'),
546 'mail_system_sys_reply_to_addr'
548 $system_reply_to_addr->setRequired(
true);
550 $form->addItem($system_reply_to_addr);
553 $this->
lng->txt(
'mail_system_sys_env_from_addr'),
554 'mail_system_sys_env_from_addr'
556 $system_return_path->setInfo($this->
lng->txt(
'mail_system_sys_env_from_addr_info'));
558 $form->addItem($system_return_path);
560 foreach ($installation_signature_inputs as $installation_signature_input) {
561 $form->addItem($installation_signature_input);
565 $form->addCommandButton(
'saveExternalSettingsForm', $this->
lng->txt(
'save'));
580 $signature_input->setRows(8);
584 $this->
lng->txt(
'mail_form_placeholders_label'),
590 $placeholder = $this->mail_signature_service->getPlaceholder();
592 if ($signature->
supports($placeholder)) {
593 $placeholder_input->addPlaceholder($placeholder->getId(), $placeholder->getLabel());
595 }
while ($placeholder = $placeholder->getNext());
597 return [$signature_input, $placeholder_input];
602 $subject_prefix = $this->
settings->get(
'mail_subject_prefix');
603 if ($subject_prefix ===
null) {
610 'mail_smtp_status' => (
bool) $this->
settings->get(
'mail_smtp_status',
'0'),
611 'mail_smtp_host' => $this->settings->get(
'mail_smtp_host',
''),
612 'mail_smtp_port' => $this->settings->get(
'mail_smtp_port',
''),
613 'mail_smtp_user' => $this->settings->get(
'mail_smtp_user',
''),
614 'mail_smtp_password' => $this->settings->get(
'mail_smtp_password') !==
'' ?
615 self::PASSWORD_PLACE_HOLDER :
617 'mail_smtp_encryption' => $this->settings->get(
'mail_smtp_encryption',
''),
618 'mail_subject_prefix' => $subject_prefix,
619 'mail_send_html' => (
bool) $this->settings->get(
'mail_send_html',
'1'),
620 'mail_system_usr_from_addr' => $this->settings->get(
'mail_system_usr_from_addr',
''),
621 'mail_system_usr_from_name' => $this->settings->get(
'mail_system_usr_from_name',
''),
622 'mail_system_usr_env_from_addr' => $this->settings->get(
'mail_system_usr_env_from_addr',
''),
623 'mail_system_sys_from_addr' => $this->settings->get(
'mail_system_sys_from_addr',
''),
624 'mail_system_sys_from_name' => $this->settings->get(
'mail_system_sys_from_name',
''),
625 $user_signature->getPersistenceIdentifier() => $this->settings->get($user_signature->getPersistenceIdentifier(),
''),
626 'mail_system_sys_reply_to_addr' => $this->settings->get(
'mail_system_sys_reply_to_addr',
''),
627 'mail_system_sys_env_from_addr' => $this->settings->get(
'mail_system_sys_env_from_addr',
''),
628 $installation_signature->getPersistenceIdentifier() => $this->settings->get($installation_signature->getPersistenceIdentifier(),
''),
629 'use_global_reply_to_addr' => (
bool) $this->settings->get(
'use_global_reply_to_addr',
'0'),
630 'global_reply_to_addr' => $this->settings->get(
'global_reply_to_addr',
''),
637 $this->
ilias->raiseError($this->
lng->txt(
'msg_no_perm_write'), $this->ilias->error_obj->WARNING);
641 $is_form_valid = $form->checkInput();
643 if (!$is_form_valid) {
644 $form->setValuesByPost();
649 $is_smtp_enabled = (bool) $form->getInput(
'mail_smtp_status');
650 if ($is_smtp_enabled && $form->getInput(
'mail_smtp_user') &&
651 !$form->getInput(
'mail_smtp_password')
653 $form->getItemByPostVar(
'mail_smtp_password')->setRequired(
true);
654 $form->getItemByPostVar(
'mail_smtp_password')
655 ->setAlert($this->
lng->txt(
'mail_smtp_password_req'));
656 $form->setValuesByPost();
662 $is_valid_template_syntax = $this->
refinery->custom()->constraint(
function ($value):
bool {
664 $this->template_engine_factory->getBasicEngine()->render((
string) $value, []);
666 }
catch (Exception) {
669 }, $this->
lng->txt(
'mail_template_invalid_tpl_syntax'));
671 $valid_templates =
true;
672 $availabe_signatures = array_map(
674 $this->getAvailableSignatures()
677 [
'mail_system_usr_from_name', ...$availabe_signatures] as $template
680 $is_valid_template_syntax->check((
string) $form->getInput($template));
681 }
catch (Exception) {
682 $form->getItemByPostVar($template)->setAlert(
683 $is_valid_template_syntax->problemWith((
string) $form->getInput($template))
685 $valid_templates =
false;
688 if (!$valid_templates) {
689 $form->setValuesByPost();
694 $this->
settings->set(
'mail_smtp_status', (
string) ((
int) $form->getInput(
'mail_smtp_status')));
695 $this->
settings->set(
'mail_smtp_host', (
string) $form->getInput(
'mail_smtp_host'));
696 $this->
settings->set(
'mail_smtp_port', (
string) ((
int) $form->getInput(
'mail_smtp_port')));
697 $this->
settings->set(
'mail_smtp_user', (
string) $form->getInput(
'mail_smtp_user'));
698 if ($form->getInput(
'mail_smtp_password') !== self::PASSWORD_PLACE_HOLDER) {
699 $this->
settings->set(
'mail_smtp_password', (
string) $form->getInput(
'mail_smtp_password'));
701 $this->
settings->set(
'mail_smtp_encryption', (
string) $form->getInput(
'mail_smtp_encryption'));
702 $this->
settings->set(
'mail_send_html', (
string) $form->getInput(
'mail_send_html'));
703 $this->
settings->set(
'mail_subject_prefix', (
string) $form->getInput(
'mail_subject_prefix'));
704 $this->
settings->set(
'mail_system_usr_from_addr', (
string) $form->getInput(
'mail_system_usr_from_addr'));
705 $this->
settings->set(
'mail_system_usr_from_name', (
string) $form->getInput(
'mail_system_usr_from_name'));
707 'mail_system_usr_env_from_addr',
708 (
string) $form->getInput(
'mail_system_usr_env_from_addr')
711 'mail_system_sys_from_addr',
712 (
string) $form->getInput(
'mail_system_sys_from_addr')
714 $this->
settings->set(
'mail_system_sys_from_name', (
string) $form->getInput(
'mail_system_sys_from_name'));
716 'mail_system_sys_reply_to_addr',
717 (
string) $form->getInput(
'mail_system_sys_reply_to_addr')
720 'mail_system_sys_env_from_addr',
721 (
string) $form->getInput(
'mail_system_sys_env_from_addr')
723 $this->
settings->set(
'use_global_reply_to_addr', (
string) ((
int) $form->getInput(
'use_global_reply_to_addr')));
724 $this->
settings->set(
'global_reply_to_addr', (
string) $form->getInput(
'global_reply_to_addr'));
726 foreach ($availabe_signatures as $availabe_signature) {
729 (
string) $form->getInput($availabe_signature)
733 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'saved_successfully'),
true);
734 $this->
ctrl->redirect($this,
'showExternalSettingsForm');
737 public static function _goto(
string $target): void
740 $main_tpl =
$DIC->ui()->mainTemplate();
744 if (
$DIC->rbac()->system()->checkAccess(
'internal_mail', $mail->getMailObjectReferenceId())) {
745 $DIC->ctrl()->redirectToURL(
'ilias.php?baseClass=ilMailGUI');
747 $main_tpl->setOnScreenMessage(
'failure', sprintf(
748 $DIC->language()->txt(
'msg_no_perm_read_item'),
752 $DIC->ctrl()->setTargetScript(
'ilias.php');
754 $DIC->ctrl()->redirectByClass(ilRepositoryGUI::class);
757 $DIC[
'ilErr']->raiseError(
$DIC->language()->txt(
'msg_no_perm_read'),
$DIC[
'ilErr']->FATAL);
final const int INCOMING_BOTH
final const int FIRST_EMAIL
final const int INCOMING_EMAIL
@ilCtrl_isCalledBy ilMailTemplateGUI: ilObjMailGUI
final const string MAIL_SUBJECT_PREFIX
@ilCtrl_Calls ilObjMailGUI: ilPermissionGUI
viewObject()
viewObject container presentation for "administration -> repository, trash, permissions"
sendTestSystemMailObject()
getExternalSettingsForm()
readonly TemplateEngineFactoryInterface $template_engine_factory
populateGeneralSettingsForm(ilPropertyFormGUI $form)
saveExternalSettingsFormObject()
getAdminTabs()
administration tabs show only permissions and trash folder
const string SETTINGS_SUB_TAB_ID_EXTERNAL
__construct($a_data, int $a_id, bool $a_call_by_reference)
static _goto(string $target)
sendTestMail(bool $is_manual_mail=false)
isPermissionChangeAllowed()
getTabs()
@abstract overwrite in derived GUI class of your object type
const string PASSWORD_PLACE_HOLDER
readonly MailSignatureService $mail_signature_service
buildSettingsSubTabs(string $active_sub_tab)
buildSignaturePlaceholderInputs(Signature $signature)
showGeneralSettingsForm(?ilPropertyFormGUI $form=null)
const string SETTINGS_SUB_TAB_ID_GENERAL
populateExternalSettingsForm(ilPropertyFormGUI $form)
showExternalSettingsFormObject(?ilPropertyFormGUI $form=null)
Class ilObjectGUI Basic methods of all Output classes.
prepareOutput(bool $show_sub_objects=true)
static _lookupObjId(int $ref_id)
static _lookupTitle(int $obj_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a text area property in a property form.
This class represents a text property in a property form.
getPersistenceIdentifier()
supports(Placeholder $placeholder)
Factory interface for creating template engine instances.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Class ilObjForumAdministration.