19 declare(strict_types=1);
48 protected int $_currentFolderId,
50 protected bool $_isTrashFolder,
51 protected bool $_isSentFolder,
52 protected bool $_isDraftsFolder,
57 $this->
user = $DIC->user();
58 $this->uiFactory = $uiFactory ?? $DIC->ui()->factory();
59 $this->uiRenderer = $uiRenderer ?? $DIC->ui()->renderer();
60 $this->
http = $DIC->http();
62 $this->
setId(
'mail_folder_tbl_' . $_currentFolderId);
73 $this->
setFormAction($this->
ctrl->getFormAction($this->getParentObject(),
'showFolder'));
78 $this->
setRowTemplate(
'tpl.mail_folder_row.html',
'Services/Mail');
88 foreach ($columns as $index =>
$column) {
93 $column[
'width'] ??
'',
94 isset($column[
'is_checkbox']) && $column[
'is_checkbox']
103 return isset($column[
'optional']) && $column[
'optional'];
107 foreach ($optionalColumns as $column) {
108 $columns[$column[
'field']] =
$column;
117 if (array_key_exists($index, $columnDefinition)) {
118 $column = $columnDefinition[$index];
122 if (array_key_exists(
$column[
'field'], $this->visibleOptionalColumns)) {
130 final protected function fillRow(array $a_set): void
133 $this->tpl->setVariable(strtoupper(
$key), $value);
139 if (!array_key_exists(
'attachments', $this->visibleOptionalColumns)) {
140 unset($row[
'attachment_indicator']);
143 if (!array_key_exists(
'personal_picture', $this->visibleOptionalColumns)) {
144 unset($row[
'img_sender'], $row[
'alt_sender']);
152 if ($use_cached_result && $this->column_definition !== null) {
166 'is_checkbox' =>
true,
171 'field' =>
'attachments',
172 'txt' => $this->
lng->txt(
'mail_tbl_head_attachments'),
181 'field' =>
'personal_picture',
182 'txt' => $this->
lng->txt(
'personal_picture'),
193 'txt' => $this->
lng->txt(
'recipient'),
202 'txt' => $this->
lng->txt(
'sender'),
212 'field' =>
'search_content',
213 'txt' => $this->
lng->txt(
'search_content'),
221 'field' =>
'm_subject',
222 'txt' => $this->
lng->txt(
'subject'),
231 'field' =>
'send_time',
232 'txt' => $this->
lng->txt(
'date'),
240 'field' =>
'actions',
241 'txt' => $this->
lng->txt(
'actions'),
248 $this->column_definition = $columns;
258 $mtree->setTableNames(
'mail_tree',
'mail_obj_data');
259 $this->_folderNode = $mtree->getNodeData($this->_currentFolderId);
264 $this->
initMultiCommands($this->_parentObject->mbox->getActions($this->_currentFolderId));
271 return $this->_isDraftsFolder;
276 return $this->_isSentFolder;
281 return $this->_isTrashFolder;
286 if ($this->_folderNode[
'm_type'] ===
'trash' && $this->
getNumberOfMails() > 0) {
295 foreach ($actions as
$key => $action) {
296 if (
$key ===
'moveMails') {
297 $folders = $this->_parentObject->mbox->getSubFolders();
298 foreach ($folders as $folder) {
299 if ($folder[
'type'] !==
'trash' || !$this->
isTrashFolder()) {
300 if ($folder[
'type'] !==
'user_folder') {
301 $label = $action .
' ' . $this->
lng->txt(
'mail_' . $folder[
'title']) .
302 ($folder[
'type'] ===
'trash' ?
' (' . $this->
lng->txt(
'delete') .
')' :
'');
306 $key .
'_' . $folder[
'obj_id'],
307 $action .
' ' . $folder[
'title']
322 $this->_selectedItems = $a_selected_items;
334 return isset($this->
filter[
'mail_filter']) &&
335 is_string($this->
filter[
'mail_filter']) &&
336 $this->
filter[
'mail_filter'] !==
'' &&
351 if ($this->_folderNode[
'm_type'] ===
'user_folder') {
352 $txt_folder = $this->_folderNode[
'title'];
353 $img_folder =
'icon_user_folder.png';
355 $txt_folder = $this->
lng->txt(
'mail_' . $this->_folderNode[
'title']);
356 $img_folder =
'icon' . substr($this->_folderNode[
'title'], 1) .
'.png';
364 $query_parser->setFields([
365 'title' => (
bool) ($this->
filter[
'mail_filter_subject'] ??
false),
366 'content' => (
bool) ($this->
filter[
'mail_filter_body'] ??
false),
367 'mattachment' => (
bool) ($this->
filter[
'mail_filter_attach'] ??
false),
368 'msender' => (
bool) ($this->
filter[
'mail_filter_sender'] ??
false),
369 'mrcp' => (
bool) ($this->
filter[
'mail_filter_recipients'] ??
false)
371 $query_parser->parse();
375 $searcher->search($this->
user->getId(), $this->_currentFolderId);
377 if (!$result->getIds()) {
383 'mail_filter_only_unread' => $this->
filter[
'mail_filter_only_unread'] ??
false,
384 'mail_filter_only_with_attachments' => $this->
filter[
'mail_filter_only_with_attachments'] ??
false,
419 if (
'mail_search_empty_result' === $e->getMessage()) {
422 $data[
'cnt_unread'] = 0;
430 foreach (
$data[
'set'] as $mail) {
432 $user_ids[$mail[
'sender_id']] = $mail[
'sender_id'];
440 foreach (
$data[
'set'] as
$key => $mail) {
444 $mail[
'checked'] =
' checked="checked" ';
447 $mail[
'txt_select_mail_with_subject'] = sprintf(
448 $this->
lng->txt(
'select_mail_with_subject_x'),
449 htmlspecialchars($mail[
'm_subject'] ??
'')
454 $this->_parentObject->umail->formatNamesForOutput((
string) $mail[
'rcp_to']),
460 $mail[
'mail_login'] =
461 $mail[
'alt_sender'] =
466 if ($user !== null) {
468 $mail[
'from'] = $mail[
'mail_login'] = $mail[
'alt_sender'] = htmlspecialchars(
472 $mail[
'img_sender'] =
'';
473 $mail[
'from'] = $mail[
'mail_login'] = trim(($mail[
'import_name'] ??
'') .
' (' 474 . $this->
lng->txt(
'user_deleted') .
')');
479 $this->
ctrl->setParameterByClass(
480 ilMailFormGUI::class,
484 $this->
ctrl->setParameterByClass(
485 ilMailFormGUI::class,
487 $this->_currentFolderId
489 $this->
ctrl->setParameterByClass(
490 ilMailFormGUI::class,
494 $link_mark_as_read = $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class);
495 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
502 $css_class = $mail[
'm_status'] ===
'read' ?
'mailread' :
'mailunread';
506 foreach ($result->getFields($mail[
'mail_id']) as $content) {
507 if (
'title' === $content[0]) {
508 $mail[
'msr_subject_link_read'] = $link_mark_as_read;
509 $mail[
'msr_subject_mailclass'] = $css_class;
510 $mail[
'msr_subject'] = $content[1];
512 $search_result[] = $content[1];
515 $mail[
'msr_data'] = implode(
'', array_map(
static function ($value):
string {
516 return '<p>' . $value .
'</p>';
519 if (!isset($mail[
'msr_subject']) || !$mail[
'msr_subject']) {
520 $mail[
'msr_subject_link_read'] = $link_mark_as_read;
521 $mail[
'msr_subject_mailclass'] = $css_class;
522 $mail[
'msr_subject'] = htmlspecialchars($mail[
'm_subject'] ??
'');
524 $mail[
'msr_subject_read_unread'] = $mail[
'm_status'] ===
'read' ? $this->
lng->txt(
'mail_is_read') : $this->
lng->txt(
'mail_is_unread');
526 $mail[
'mail_link_read'] = $link_mark_as_read;
527 $mail[
'mailclass'] = $css_class;
528 if ($mail[
'm_subject']) {
529 $mail[
'mail_subject'] = htmlspecialchars($mail[
'm_subject']);
531 $mail[
'mail_subject'] = $this->
lng->txt(
'mail_no_subject');
533 $mail[
'mail_subject_read_unread'] = $mail[
'm_status'] ===
'read' ? $this->
lng->txt(
'mail_is_read') : $this->
lng->txt(
'mail_is_unread');
540 $mail[
'attachment_indicator'] =
'';
541 if (is_array($mail[
'attachments']) && $mail[
'attachments'] !== []) {
547 $mail[
'attachment_indicator'] = $this->uiRenderer->render(
548 $this->uiFactory->symbol()->glyph()->attachment(
549 $this->
ctrl->getLinkTarget($this->getParentObject(),
'deliverAttachments')
564 $this->
setTitleData($txt_folder, (
int) $data[
'cnt'], (
int) $data[
'cnt_unread'], $img_folder);
572 protected function setTitleData(
string $folderLabel,
int $mailCount,
int $unreadCount,
string $imgFolder): self
575 'tpl.mail_folder_title.html',
580 $titleTemplate->setVariable(
'TXT_FOLDER', $folderLabel);
581 $titleTemplate->setVariable(
'MAIL_COUNT', $mailCount);
582 $titleTemplate->setVariable(
'TXT_MAIL_S', $this->
lng->txt(
'mail_s'));
583 $titleTemplate->setVariable(
'MAIL_COUNT_UNREAD', $unreadCount);
584 $titleTemplate->setVariable(
'TXT_UNREAD', $this->
lng->txt(
'unread'));
586 $this->
setTitle($titleTemplate->get(), $imgFolder);
593 $this->_number_of_mails = $a_number_of_mails;
610 $quickFilter->readFromSession();
611 $this->
filter[
'mail_filter'] = $quickFilter->getValue();
615 $this->
lng->txt(
'mail_filter_recipients'),
616 'mail_filter_recipients' 618 $subFilterInRecipients->setOptionTitle($this->
lng->txt(
'mail_filter_recipients'));
619 $subFilterInRecipients->setValue(
'1');
620 $quickFilter->addSubItem($subFilterInRecipients);
621 $subFilterInRecipients->setParentTable($this);
622 $subFilterInRecipients->readFromSession();
623 $this->
filter[
'mail_filter_recipients'] = (
int) $subFilterInRecipients->getChecked();
626 $this->
lng->txt(
'mail_filter_sender'),
629 $subFilterInSender->setOptionTitle($this->
lng->txt(
'mail_filter_sender'));
630 $subFilterInSender->setValue(
'1');
631 $quickFilter->addSubItem($subFilterInSender);
632 $subFilterInSender->setParentTable($this);
633 $subFilterInSender->readFromSession();
634 $this->
filter[
'mail_filter_sender'] = (
int) $subFilterInSender->getChecked();
638 $this->
lng->txt(
'mail_filter_subject'),
639 'mail_filter_subject' 641 $subFilterInSubject->setOptionTitle($this->
lng->txt(
'mail_filter_subject'));
642 $subFilterInSubject->setValue(
'1');
643 $quickFilter->addSubItem($subFilterInSubject);
644 $subFilterInSubject->setParentTable($this);
645 $subFilterInSubject->readFromSession();
646 $this->
filter[
'mail_filter_subject'] = (
int) $subFilterInSubject->getChecked();
649 $this->
lng->txt(
'mail_filter_body'),
652 $subFilterInBody->setOptionTitle($this->
lng->txt(
'mail_filter_body'));
653 $subFilterInBody->setValue(
'1');
654 $quickFilter->addSubItem($subFilterInBody);
655 $subFilterInBody->setParentTable($this);
656 $subFilterInBody->readFromSession();
657 $this->
filter[
'mail_filter_body'] = (
int) $subFilterInBody->getChecked();
661 $this->
lng->txt(
'mail_filter_attach'),
664 $subFilterInAttachments->setOptionTitle($this->
lng->txt(
'mail_filter_attach'));
665 $subFilterInAttachments->setValue(
'1');
666 $quickFilter->addSubItem($subFilterInAttachments);
667 $subFilterInAttachments->setParentTable($this);
668 $subFilterInAttachments->readFromSession();
669 $this->
filter[
'mail_filter_attach'] = (
int) $subFilterInAttachments->getChecked();
674 $this->
lng->txt(
'mail_filter_only_unread'),
675 'mail_filter_only_unread' 677 $onlyUnread->setValue(
'1');
679 $onlyUnread->readFromSession();
680 $this->
filter[
'mail_filter_only_unread'] = (
int) $onlyUnread->getChecked();
683 $this->
lng->txt(
'mail_filter_only_user_mails'),
684 'mail_filter_only_user_mails' 686 $onlyUserMails->setValue(
'1');
688 $onlyUserMails->readFromSession();
689 $this->
filter[
'mail_filter_only_user_mails'] = (
int) $onlyUserMails->getChecked();
694 $this->
lng->txt(
'mail_filter_only_with_attachments'),
695 'mail_filter_only_with_attachments' 697 $onlyWithAttachments->setValue(
'1');
699 $onlyWithAttachments->readFromSession();
700 $this->
filter[
'mail_filter_only_with_attachments'] = (
int) $onlyWithAttachments->getChecked();
705 $duration->setStartText($this->
lng->txt(
'mail_filter_period_from'));
706 $duration->setEndText($this->
lng->txt(
'mail_filter_period_until'));
717 parent::writeFilterToSession();
719 foreach ($this->sub_filter as $item) {
720 if ($item->checkInput()) {
721 $item->setValueByArray($this->
http->request()->getParsedBody());
722 $item->writeToSession();
729 parent::resetFilter();
731 foreach ($this->sub_filter as $item) {
732 if ($item->checkInput()) {
733 $item->setValueByArray($this->
http->request()->getParsedBody());
734 $item->clearFromSession();
748 $dropDown = $this->uiFactory
751 ->withLabel($this->
lng->txt(
'actions'));
753 return $this->uiRenderer->render([$dropDown]);
759 $this->
ctrl->setParameterByClass(
760 ilMailFormGUI::class,
762 (
int) $mail[
'mail_id']
764 $this->
ctrl->setParameterByClass(
765 ilMailFormGUI::class,
767 $this->_currentFolderId
769 $this->
ctrl->setParameterByClass(
770 ilMailFormGUI::class,
774 $viewButton = $this->uiFactory
777 $this->
lng->txt(
'view'),
778 $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class)
780 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
784 $viewButton = $this->uiFactory
787 $this->
lng->txt(
'view'),
793 $buttons[] = $viewButton;
799 isset($mail[
'sender_id']) && $mail[
'sender_id'] > 0 && $mail[
'sender_id'] !==
ANONYMOUS_USER_ID &&
802 $this->
ctrl->setParameterByClass(
803 ilMailFormGUI::class,
805 $this->_currentFolderId
807 $this->
ctrl->setParameterByClass(
808 ilMailFormGUI::class,
810 (
int) $mail[
'mail_id']
812 $this->
ctrl->setParameterByClass(
813 ilMailFormGUI::class,
817 $replyButton = $this->uiFactory
820 $this->
lng->txt(
'reply'),
821 $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class)
823 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
825 $buttons[] = $replyButton;
832 $this->
ctrl->setParameterByClass(
833 ilMailFormGUI::class,
835 $this->_currentFolderId
837 $this->
ctrl->setParameterByClass(
838 ilMailFormGUI::class,
840 (
int) $mail[
'mail_id']
842 $this->
ctrl->setParameterByClass(
843 ilMailFormGUI::class,
847 $forwardButton = $this->uiFactory
850 $this->
lng->txt(
'forward'),
851 $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class)
853 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
855 $buttons[] = $forwardButton;
864 $printButton = $this->uiFactory
867 $this->
lng->txt(
'print'),
869 )->withOpenInNewViewport(
true);
872 $buttons[] = $printButton;
879 $html = parent::getHTML();
Interface GlobalHttpState.
addForwardRowAction(array $mail, array &$buttons)
readonly GlobalHttpState $http
An entity that renders components to a string output.
static getUserObjectById(int $usr_id)
setFormAction(string $a_form_action, bool $a_multipart=false)
addFilterItem(ilTableFilterItem $a_input_item, bool $a_optional=false)
addReplyRowAction(array $mail, array &$buttons)
setEnableTitle(bool $a_enabletitle)
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
setTitleData(string $folderLabel, int $mailCount, int $unreadCount, string $imgFolder)
setResetCommand(string $a_val, string $a_caption="")
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
static _getMailBoxListData()
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
static string $orderDirection
static _getIliasMailerName()
initMultiCommands(array $actions)
getPublicName()
returns firstname lastname and login if profile is public, login otherwise
static string $orderColumn
static htmlencodePlainString(string $a_str, bool $a_make_links_clickable, bool $a_detect_goto_links=false)
Encodes a plain text string into HTML for display in a browser.
removeInvisibleFields(array $row)
addViewRowAction(array $mail, array &$buttons)
resetOffset(bool $a_in_determination=false)
setExternalSorting(bool $a_val)
static http()
Fetches the global http state from ILIAS.
setDefaultOrderField(string $a_defaultorderfield)
__construct(protected ilMailFolderGUI $_parentObject, protected int $_currentFolderId, string $a_parent_cmd, protected bool $_isTrashFolder, protected bool $_isSentFolder, protected bool $_isDraftsFolder, Factory $uiFactory=null, Renderer $uiRenderer=null)
formatActionsDropDown(array $mail)
array $visibleOptionalColumns
setSelectedItems(array $a_selected_items)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setFilterCommand(string $a_val, string $a_caption="")
readonly Factory $uiFactory
static preloadUserObjects(array $usr_ids)
setDefaultOrderDirection(string $a_defaultorderdirection)
setNumberOfMails(int $a_number_of_mails)
isColumnVisible(int $index)
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
readonly Renderer $uiRenderer
getPersonalPicturePath(string $a_size="small", bool $a_force_pic=false)
setSubmitFormOnEnter(bool $a_val)
addPrintRowAction(array $mail, array &$buttons)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
static array $filtered_ids
filter(string $filter_id, $class_path, string $cmd, bool $activated=true, bool $expanded=true)
addMultiCommand(string $a_cmd, string $a_text)
determineOffsetAndOrder(bool $a_omit_offset=false)
setMaxCount(int $a_max_count)
set max.
setExternalSegmentation(bool $a_val)
getColumnDefinition(bool $use_cached_result=true)
setPrefix(string $a_prefix)