19 declare(strict_types=1);
53 int $a_current_folder_id,
62 $this->
user = $DIC->user();
63 $this->uiFactory = $uiFactory ?? $DIC->ui()->factory();
64 $this->uiRenderer = $uiRenderer ?? $DIC->ui()->renderer();
65 $this->
http = $DIC->http();
67 $this->_currentFolderId = $a_current_folder_id;
68 $this->_parentObject = $a_parent_obj;
70 $this->_isTrashFolder = $isTrashFolder;
71 $this->_isSentFolder = $isSentFolder;
72 $this->_isDraftsFolder = $isDraftsFolder;
74 $this->
setId(
'mail_folder_tbl_' . $a_current_folder_id);
85 $this->
setFormAction($this->
ctrl->getFormAction($this->getParentObject(),
'showFolder'));
90 $this->
setRowTemplate(
'tpl.mail_folder_row.html',
'Services/Mail');
99 return isset($column[
'optional']) && $column[
'optional'];
103 foreach ($optionalColumns as $column) {
104 $columns[$column[
'field']] =
$column;
113 if (array_key_exists($index, $columnDefinition)) {
118 if (array_key_exists(
$column[
'field'], $this->visibleOptionalColumns)) {
126 final protected function fillRow(array $a_set): void
129 $this->tpl->setVariable(strtoupper(
$key), $value);
135 if (!array_key_exists(
'attachments', $this->visibleOptionalColumns)) {
136 unset($row[
'attachment_indicator']);
139 if (!array_key_exists(
'personal_picture', $this->visibleOptionalColumns)) {
140 unset($row[
'img_sender'], $row[
'alt_sender']);
148 if ($this->column_definition !== null) {
162 'is_checkbox' =>
true,
167 'field' =>
'attachments',
168 'txt' => $this->
lng->txt(
'mail_tbl_head_attachments'),
177 'field' =>
'personal_picture',
178 'txt' => $this->
lng->txt(
'personal_picture'),
189 'txt' => $this->
lng->txt(
'recipient'),
198 'txt' => $this->
lng->txt(
'sender'),
208 'field' =>
'search_content',
209 'txt' => $this->
lng->txt(
'search_content'),
217 'field' =>
'm_subject',
218 'txt' => $this->
lng->txt(
'subject'),
227 'field' =>
'send_time',
228 'txt' => $this->
lng->txt(
'date'),
236 'field' =>
'actions',
237 'txt' => $this->
lng->txt(
'actions'),
244 $this->column_definition = $columns;
261 $column[
'width'] ??
'',
262 isset($column[
'is_checkbox']) && $column[
'is_checkbox']
268 $mtree->setTableNames(
'mail_tree',
'mail_obj_data');
269 $this->_folderNode = $mtree->getNodeData($this->_currentFolderId);
274 $this->
initMultiCommands($this->_parentObject->mbox->getActions($this->_currentFolderId));
296 if ($this->_folderNode[
'm_type'] ===
'trash' && $this->
getNumberOfMails() > 0) {
305 foreach ($actions as
$key => $action) {
306 if (
$key ===
'moveMails') {
307 $folders = $this->_parentObject->mbox->getSubFolders();
308 foreach ($folders as $folder) {
309 if ($folder[
'type'] !==
'trash' || !$this->
isTrashFolder()) {
310 if ($folder[
'type'] !==
'user_folder') {
311 $label = $action .
' ' . $this->
lng->txt(
'mail_' . $folder[
'title']) .
312 ($folder[
'type'] ===
'trash' ?
' (' . $this->
lng->txt(
'delete') .
')' :
'');
316 $key .
'_' . $folder[
'obj_id'],
317 $action .
' ' . $folder[
'title']
332 $this->_selectedItems = $a_selected_items;
344 return isset($this->
filter[
'mail_filter']) &&
345 is_string($this->
filter[
'mail_filter']) &&
346 $this->
filter[
'mail_filter'] !==
'' &&
360 if ($this->_folderNode[
'm_type'] ===
'user_folder') {
361 $txt_folder = $this->_folderNode[
'title'];
362 $img_folder =
'icon_user_folder.png';
364 $txt_folder = $this->
lng->txt(
'mail_' . $this->_folderNode[
'title']);
365 $img_folder =
'icon' . substr($this->_folderNode[
'title'], 1) .
'.png';
373 $query_parser->setFields([
374 'title' => (
bool) ($this->
filter[
'mail_filter_subject'] ??
false),
375 'content' => (
bool) ($this->
filter[
'mail_filter_body'] ??
false),
376 'mattachment' => (
bool) ($this->
filter[
'mail_filter_attach'] ??
false),
377 'msender' => (
bool) ($this->
filter[
'mail_filter_sender'] ??
false),
378 'mrcp' => (
bool) ($this->
filter[
'mail_filter_recipients'] ??
false)
380 $query_parser->parse();
386 if (!$result->getIds()) {
392 'mail_filter_only_unread' => $this->
filter[
'mail_filter_only_unread'] ??
false,
393 'mail_filter_only_with_attachments' => $this->
filter[
'mail_filter_only_with_attachments'] ??
false,
428 if (
'mail_search_empty_result' === $e->getMessage()) {
431 $data[
'cnt_unread'] = 0;
439 foreach (
$data[
'set'] as $mail) {
441 $user_ids[$mail[
'sender_id']] = $mail[
'sender_id'];
449 foreach (
$data[
'set'] as
$key => $mail) {
453 $mail[
'checked'] =
' checked="checked" ';
456 $mail[
'txt_select_mail_with_subject'] = sprintf(
457 $this->
lng->txt(
'select_mail_with_subject_x'),
458 htmlspecialchars($mail[
'm_subject'] ??
'')
463 $this->_parentObject->umail->formatNamesForOutput((
string) $mail[
'rcp_to']),
469 $mail[
'mail_login'] =
470 $mail[
'alt_sender'] =
471 htmlspecialchars(ilMail::_getIliasMailerName());
477 $mail[
'from'] = $mail[
'mail_login'] = $mail[
'alt_sender'] = htmlspecialchars(
481 $mail[
'img_sender'] =
'';
482 $mail[
'from'] = $mail[
'mail_login'] = trim(($mail[
'import_name'] ??
'') .
' (' 483 . $this->
lng->txt(
'user_deleted') .
')');
488 $this->
ctrl->setParameterByClass(
489 ilMailFormGUI::class,
493 $this->
ctrl->setParameterByClass(
494 ilMailFormGUI::class,
496 $this->_currentFolderId
498 $this->
ctrl->setParameterByClass(
499 ilMailFormGUI::class,
503 $link_mark_as_read = $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class);
504 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
511 $css_class = $mail[
'm_status'] ===
'read' ?
'mailread' :
'mailunread';
515 foreach ($result->getFields($mail[
'mail_id']) as $content) {
516 if (
'title' === $content[0]) {
517 $mail[
'msr_subject_link_read'] = $link_mark_as_read;
518 $mail[
'msr_subject_mailclass'] = $css_class;
519 $mail[
'msr_subject'] = $content[1];
521 $search_result[] = $content[1];
524 $mail[
'msr_data'] = implode(
'', array_map(
static function ($value):
string {
525 return '<p>' . $value .
'</p>';
528 if (!isset($mail[
'msr_subject']) || !$mail[
'msr_subject']) {
529 $mail[
'msr_subject_link_read'] = $link_mark_as_read;
530 $mail[
'msr_subject_mailclass'] = $css_class;
531 $mail[
'msr_subject'] = htmlspecialchars($mail[
'm_subject'] ??
'');
533 $mail[
'msr_subject_read_unread'] = $mail[
'm_status'] ===
'read' ? $this->
lng->txt(
'mail_is_read') : $this->
lng->txt(
'mail_is_unread');
535 $mail[
'mail_link_read'] = $link_mark_as_read;
536 $mail[
'mailclass'] = $css_class;
537 if ($mail[
'm_subject']) {
538 $mail[
'mail_subject'] = htmlspecialchars($mail[
'm_subject']);
540 $mail[
'mail_subject'] = $this->
lng->txt(
'mail_no_subject');
542 $mail[
'mail_subject_read_unread'] = $mail[
'm_status'] ===
'read' ? $this->
lng->txt(
'mail_is_read') : $this->
lng->txt(
'mail_is_unread');
549 $mail[
'attachment_indicator'] =
'';
550 if (is_array($mail[
'attachments']) && count($mail[
'attachments']) > 0) {
556 $mail[
'attachment_indicator'] = $this->uiRenderer->render(
557 $this->uiFactory->symbol()->glyph()->attachment(
558 $this->
ctrl->getLinkTarget($this->getParentObject(),
'deliverAttachments')
573 $this->
setTitleData($txt_folder, (
int) $data[
'cnt'], (
int) $data[
'cnt_unread'], $img_folder);
581 protected function setTitleData(
string $folderLabel,
int $mailCount,
int $unreadCount,
string $imgFolder): self
584 'tpl.mail_folder_title.html',
589 $titleTemplate->setVariable(
'TXT_FOLDER', $folderLabel);
590 $titleTemplate->setVariable(
'MAIL_COUNT', $mailCount);
591 $titleTemplate->setVariable(
'TXT_MAIL_S', $this->
lng->txt(
'mail_s'));
592 $titleTemplate->setVariable(
'MAIL_COUNT_UNREAD', $unreadCount);
593 $titleTemplate->setVariable(
'TXT_UNREAD', $this->
lng->txt(
'unread'));
595 $this->
setTitle($titleTemplate->get(), $imgFolder);
602 $this->_number_of_mails = $a_number_of_mails;
619 $quickFilter->readFromSession();
620 $this->
filter[
'mail_filter'] = $quickFilter->getValue();
624 $this->
lng->txt(
'mail_filter_recipients'),
625 'mail_filter_recipients' 627 $subFilterInRecipients->
setOptionTitle($this->
lng->txt(
'mail_filter_recipients'));
628 $subFilterInRecipients->setValue(
'1');
629 $quickFilter->addSubItem($subFilterInRecipients);
630 $subFilterInRecipients->setParentTable($this);
631 $subFilterInRecipients->readFromSession();
632 $this->
filter[
'mail_filter_recipients'] = (
int) $subFilterInRecipients->getChecked();
635 $this->
lng->txt(
'mail_filter_sender'),
639 $subFilterInSender->setValue(
'1');
640 $quickFilter->addSubItem($subFilterInSender);
641 $subFilterInSender->setParentTable($this);
642 $subFilterInSender->readFromSession();
643 $this->
filter[
'mail_filter_sender'] = (
int) $subFilterInSender->getChecked();
647 $this->
lng->txt(
'mail_filter_subject'),
648 'mail_filter_subject' 651 $subFilterInSubject->setValue(
'1');
652 $quickFilter->addSubItem($subFilterInSubject);
653 $subFilterInSubject->setParentTable($this);
654 $subFilterInSubject->readFromSession();
655 $this->
filter[
'mail_filter_subject'] = (
int) $subFilterInSubject->getChecked();
658 $this->
lng->txt(
'mail_filter_body'),
662 $subFilterInBody->setValue(
'1');
663 $quickFilter->addSubItem($subFilterInBody);
664 $subFilterInBody->setParentTable($this);
665 $subFilterInBody->readFromSession();
666 $this->
filter[
'mail_filter_body'] = (
int) $subFilterInBody->getChecked();
670 $this->
lng->txt(
'mail_filter_attach'),
674 $subFilterInAttachments->setValue(
'1');
675 $quickFilter->addSubItem($subFilterInAttachments);
676 $subFilterInAttachments->setParentTable($this);
677 $subFilterInAttachments->readFromSession();
678 $this->
filter[
'mail_filter_attach'] = (
int) $subFilterInAttachments->getChecked();
683 $this->
lng->txt(
'mail_filter_only_unread'),
684 'mail_filter_only_unread' 688 $onlyUnread->readFromSession();
689 $this->
filter[
'mail_filter_only_unread'] = (
int) $onlyUnread->getChecked();
692 $this->
lng->txt(
'mail_filter_only_user_mails'),
693 'mail_filter_only_user_mails' 697 $onlyUserMails->readFromSession();
698 $this->
filter[
'mail_filter_only_user_mails'] = (
int) $onlyUserMails->getChecked();
703 $this->
lng->txt(
'mail_filter_only_with_attachments'),
704 'mail_filter_only_with_attachments' 706 $onlyWithAttachments->
setValue(
'1');
708 $onlyWithAttachments->readFromSession();
709 $this->
filter[
'mail_filter_only_with_attachments'] = (
int) $onlyWithAttachments->getChecked();
714 $duration->setStartText($this->
lng->txt(
'mail_filter_period_from'));
715 $duration->setEndText($this->
lng->txt(
'mail_filter_period_until'));
718 $duration->setShowTime(
false);
720 $duration->readFromSession();
721 $this->
filter[
'period'] = $duration->getValue();
726 parent::writeFilterToSession();
728 foreach ($this->sub_filter as $item) {
729 if ($item->checkInput()) {
730 $item->setValueByArray($this->
http->request()->getParsedBody());
731 $item->writeToSession();
738 parent::resetFilter();
740 foreach ($this->sub_filter as $item) {
741 if ($item->checkInput()) {
742 $item->setValueByArray($this->
http->request()->getParsedBody());
743 $item->clearFromSession();
757 $dropDown = $this->uiFactory
760 ->withLabel($this->
lng->txt(
'actions'));
762 return $this->uiRenderer->render([$dropDown]);
768 $this->
ctrl->setParameterByClass(
769 ilMailFormGUI::class,
771 (
int) $mail[
'mail_id']
773 $this->
ctrl->setParameterByClass(
774 ilMailFormGUI::class,
776 $this->_currentFolderId
778 $this->
ctrl->setParameterByClass(
779 ilMailFormGUI::class,
783 $viewButton = $this->uiFactory
786 $this->
lng->txt(
'view'),
787 $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class)
789 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
793 $viewButton = $this->uiFactory
796 $this->
lng->txt(
'view'),
802 $buttons[] = $viewButton;
808 isset($mail[
'sender_id']) && $mail[
'sender_id'] > 0 && $mail[
'sender_id'] !==
ANONYMOUS_USER_ID &&
811 $this->
ctrl->setParameterByClass(
812 ilMailFormGUI::class,
814 $this->_currentFolderId
816 $this->
ctrl->setParameterByClass(
817 ilMailFormGUI::class,
819 (
int) $mail[
'mail_id']
821 $this->
ctrl->setParameterByClass(
822 ilMailFormGUI::class,
826 $replyButton = $this->uiFactory
829 $this->
lng->txt(
'reply'),
830 $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class)
832 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
834 $buttons[] = $replyButton;
841 $this->
ctrl->setParameterByClass(
842 ilMailFormGUI::class,
844 $this->_currentFolderId
846 $this->
ctrl->setParameterByClass(
847 ilMailFormGUI::class,
849 (
int) $mail[
'mail_id']
851 $this->
ctrl->setParameterByClass(
852 ilMailFormGUI::class,
856 $forwardButton = $this->uiFactory
859 $this->
lng->txt(
'forward'),
860 $this->
ctrl->getLinkTargetByClass(ilMailFormGUI::class)
862 $this->
ctrl->clearParametersByClass(ilMailFormGUI::class);
864 $buttons[] = $forwardButton;
873 $printButton = $this->uiFactory
876 $this->
lng->txt(
'print'),
878 )->withOpenInNewViewport(
true);
881 $buttons[] = $printButton;
888 $html = parent::getHTML();
Interface GlobalHttpState.
addForwardRowAction(array $mail, array &$buttons)
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)
ilMailFolderGUI $_parentObject
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
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(ilMailFolderGUI $a_parent_obj, int $a_current_folder_id, string $a_parent_cmd, bool $isTrashFolder, bool $isSentFolder, 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="")
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="")
getPersonalPicturePath(string $a_size="small", bool $a_force_pic=false)
setSubmitFormOnEnter(bool $a_val)
__construct(Container $dic, ilPlugin $plugin)
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
addMultiCommand(string $a_cmd, string $a_text)
determineOffsetAndOrder(bool $a_omit_offset=false)
setMaxCount(int $a_max_count)
set max.
setExternalSegmentation(bool $a_val)
setPrefix(string $a_prefix)