1 <?php declare(strict_types=1);
71 $this->
user = $DIC->user();
82 $this->_currentFolderId = $a_current_folder_id;
83 $this->_parentObject = $a_parent_obj;
85 $this->_isTrashFolder = $isTrashFolder;
86 $this->_isSentFolder = $isSentFolder;
87 $this->_isDraftsFolder = $isDraftsFolder;
89 $this->
setId(
'mail_folder_tbl_' . $a_current_folder_id);
99 $this->ctrl->setParameter($this->
getParentObject(),
'mobj_id', $this->_currentFolderId);
100 $this->
setFormAction($this->ctrl->getFormAction($this->getParentObject(),
'showFolder'));
105 $this->
setRowTemplate(
'tpl.mail_folder_row.html',
'Services/Mail');
117 return isset($column[
'optional']) && $column[
'optional'];
122 $columns[$column[
'field']] = $column;
135 if (array_key_exists($index, $columnDefinition)) {
136 $column = $columnDefinition[
$index];
137 if (isset($column[
'optional']) && !$column[
'optional']) {
141 is_array($this->visibleOptionalColumns) &&
142 array_key_exists($column[
'field'], $this->visibleOptionalColumns)
156 $this->tpl->setVariable(strtoupper($key), $value);
166 if (is_array($this->visibleOptionalColumns)) {
167 if (!array_key_exists(
'attachments', $this->visibleOptionalColumns)) {
168 unset($row[
'attachment_indicator']);
171 if (!array_key_exists(
'personal_picture', $this->visibleOptionalColumns)) {
172 unset($row[
'img_sender'], $row[
'alt_sender']);
184 if ($this->column_definition !== null) {
198 'is_checkbox' =>
true,
203 'field' =>
'attachments',
204 'txt' => $this->lng->txt(
'mail_tbl_head_attachments'),
213 'field' =>
'personal_picture',
214 'txt' => $this->lng->txt(
'personal_picture'),
225 'txt' => $this->lng->txt(
'recipient'),
234 'txt' => $this->lng->txt(
'sender'),
244 'field' =>
'search_content',
245 'txt' => $this->lng->txt(
'search_content'),
253 'field' =>
'm_subject',
254 'txt' => $this->lng->txt(
'subject'),
263 'field' =>
'send_time',
264 'txt' => $this->lng->txt(
'date'),
272 'field' =>
'actions',
273 'txt' => $this->lng->txt(
'actions'),
280 $this->column_definition =
$columns;
298 isset($column[
'sortable']) && $column[
'sortable'] ? $column[
'field'] :
'',
299 $column[
'width'] ??
'',
300 isset($column[
'is_checkbox']) ? (
bool) $column[
'is_checkbox'] :
false 306 $mtree->setTableNames(
'mail_tree',
'mail_obj_data');
307 $this->_folderNode = $mtree->getNodeData($this->_currentFolderId);
312 $this->
initMultiCommands($this->_parentObject->mbox->getActions($this->_currentFolderId));
337 if ($this->_folderNode[
'm_type'] ===
'trash' && $this->
getNumberOfMails() > 0) {
338 $this->
addCommandButton(
'confirmEmptyTrash', $this->lng->txt(
'mail_empty_trash'));
350 foreach ($actions as $key => $action) {
351 if ($key ===
'moveMails') {
352 $folders = $this->_parentObject->mbox->getSubFolders();
353 foreach ($folders as $folder) {
354 if ($folder[
'type'] !==
'trash' || !$this->
isTrashFolder()) {
355 if ($folder[
'type'] !==
'user_folder') {
356 $label = $action .
' ' . $this->lng->txt(
'mail_' . $folder[
'title']) .
357 ($folder[
'type'] ===
'trash' ?
' (' . $this->lng->txt(
'delete') .
')' :
'');
360 $this->
addMultiCommand($key .
'_' . $folder[
'obj_id'], $action .
' ' . $folder[
'title']);
380 $this->_selectedItems = $a_selected_items;
399 isset($this->filter[
'mail_filter']) &&
400 is_string($this->filter[
'mail_filter']) &&
401 $this->filter[
'mail_filter'] !==
'' &&
424 if ($this->_folderNode[
'm_type'] ===
'user_folder') {
425 $txt_folder = $this->_folderNode[
'title'];
426 $img_folder =
'icon_user_folder.png';
428 $txt_folder = $this->lng->txt(
'mail_' . $this->_folderNode[
'title']);
429 $img_folder =
'icon' . substr($this->_folderNode[
'title'], 1) .
'.png';
435 $query_parser->setFields([
436 'title' => (
bool) $this->filter[
'mail_filter_subject'],
437 'content' => (
bool) $this->filter[
'mail_filter_body'],
438 'mattachment' => (
bool) $this->filter[
'mail_filter_attach'],
439 'msender' => (
bool) $this->filter[
'mail_filter_sender'],
440 'mrcp' => (
bool) $this->filter[
'mail_filter_recipients']
442 $query_parser->parse();
454 'mail_filter_only_unread' => $this->filter[
'mail_filter_only_unread'],
455 'mail_filter_only_with_attachments' => $this->filter[
'mail_filter_only_with_attachments'],
490 if (
'mail_search_empty_result' === $e->getMessage()) {
493 $data[
'cnt_unread'] = 0;
501 foreach (
$data[
'set'] as $mail) {
502 if ($mail[
'sender_id'] && $mail[
'sender_id'] != ANONYMOUS_USER_ID) {
503 $user_ids[$mail[
'sender_id']] = $mail[
'sender_id'];
511 foreach (
$data[
'set'] as $key => $mail) {
515 $mail[
'checked'] =
' checked="checked" ';
520 $this->_parentObject->umail->formatNamesForOutput((
string) $mail[
'rcp_to']),
524 if ($mail[
'sender_id'] == ANONYMOUS_USER_ID) {
526 $mail[
'from'] = $mail[
'mail_login'] = $mail[
'alt_sender'] = htmlspecialchars(ilMail::_getIliasMailerName());
531 $mail[
'img_sender'] =
$user->getPersonalPicturePath(
'xxsmall');
532 $mail[
'from'] = $mail[
'mail_login'] = $mail[
'alt_sender'] = htmlspecialchars(
$user->getPublicName());
534 $mail[
'img_sender'] =
'';
535 $mail[
'from'] = $mail[
'mail_login'] = $mail[
'import_name'] .
' (' . $this->lng->txt(
'user_deleted') .
')';
541 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mail_id', $mail[
'mail_id']);
542 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mobj_id', $this->_currentFolderId);
543 $this->ctrl->setParameterByClass(
'ilmailformgui',
'type',
'draft');
544 $link_mark_as_read = $this->ctrl->getLinkTargetByClass(
'ilmailformgui');
545 $this->ctrl->clearParametersByClass(
'ilmailformgui');
547 $this->ctrl->setParameter($this->
getParentObject(),
'mail_id', $mail[
'mail_id']);
548 $this->ctrl->setParameter($this->
getParentObject(),
'mobj_id', $this->_currentFolderId);
549 $link_mark_as_read = $this->ctrl->getLinkTarget($this->
getParentObject(),
'showMail');
552 $css_class = $mail[
'm_status'] ===
'read' ?
'mailread' :
'mailunread';
555 $search_result = array();
556 foreach (
$result->getFields($mail[
'mail_id']) as $content) {
557 if (
'title' === $content[0]) {
558 $mail[
'msr_subject_link_read'] = $link_mark_as_read;
559 $mail[
'msr_subject_mailclass'] = $css_class;
560 $mail[
'msr_subject'] = $content[1];
562 $search_result[] = $content[1];
565 $mail[
'msr_data'] = implode(
'', array_map(
function ($value) {
566 return '<p>' . $value .
'</p>';
569 if (!$mail[
'msr_subject']) {
570 $mail[
'msr_subject_link_read'] = $link_mark_as_read;
571 $mail[
'msr_subject_mailclass'] = $css_class;
572 $mail[
'msr_subject'] = htmlspecialchars($mail[
'm_subject']);
575 $mail[
'mail_link_read'] = $link_mark_as_read;
576 $mail[
'mailclass'] = $css_class;
577 $mail[
'mail_subject'] = htmlspecialchars($mail[
'm_subject']);
582 $mail[
'attachment_indicator'] =
'';
583 if (is_array($mail[
'attachments']) && count($mail[
'attachments']) > 0) {
584 $this->ctrl->setParameter($this->
getParentObject(),
'mail_id', (
int) $mail[
'mail_id']);
588 $this->ctrl->setParameter($this->
getParentObject(),
'mobj_id', $this->_currentFolderId);
589 $mail[
'attachment_indicator'] = $this->uiRenderer->render(
590 $this->uiFactory->symbol()->glyph()->attachment(
591 $this->ctrl->getLinkTarget($this->getParentObject(),
'deliverAttachments')
599 $data[
'set'][$key] = $mail;
606 $this->
setTitleData($txt_folder, (
int) $data[
'cnt'], (
int) $data[
'cnt_unread'], $img_folder);
619 protected function setTitleData(
string $folderLabel,
int $mailCount,
int $unreadCount,
string $imgFolder) : self
621 $titleTemplate =
new ilTemplate(
'tpl.mail_folder_title.html',
true,
true,
'Services/Mail');
622 $titleTemplate->setVariable(
'TXT_FOLDER', $folderLabel);
623 $titleTemplate->setVariable(
'MAIL_COUNT', $mailCount);
624 $titleTemplate->setVariable(
'TXT_MAIL_S', $this->lng->txt(
'mail_s'));
625 $titleTemplate->setVariable(
'MAIL_COUNT_UNREAD', $unreadCount);
626 $titleTemplate->setVariable(
'TXT_UNREAD', $this->lng->txt(
'unread'));
628 parent::setTitle($titleTemplate->get(), $imgFolder);
639 $this->_number_of_mails = $a_number_of_mails;
662 $quickFilter->readFromSession();
663 $this->filter[
'mail_filter'] = $quickFilter->getValue();
667 $this->lng->txt(
'mail_filter_recipients'),
668 'mail_filter_recipients' 670 $subFilterInRecipients->
setOptionTitle($this->lng->txt(
'mail_filter_recipients'));
671 $subFilterInRecipients->setValue(1);
672 $quickFilter->addSubItem($subFilterInRecipients);
673 $subFilterInRecipients->setParent($this);
674 $subFilterInRecipients->readFromSession();
675 $this->filter[
'mail_filter_recipients'] = (int) $subFilterInRecipients->getChecked();
678 $this->lng->txt(
'mail_filter_sender'),
681 $subFilterInSender->
setOptionTitle($this->lng->txt(
'mail_filter_sender'));
682 $subFilterInSender->setValue(1);
683 $quickFilter->addSubItem($subFilterInSender);
684 $subFilterInSender->setParent($this);
685 $subFilterInSender->readFromSession();
686 $this->filter[
'mail_filter_sender'] = (int) $subFilterInSender->getChecked();
690 $this->lng->txt(
'mail_filter_subject'),
691 'mail_filter_subject' 693 $subFilterInSubject->
setOptionTitle($this->lng->txt(
'mail_filter_subject'));
694 $subFilterInSubject->setValue(1);
695 $quickFilter->addSubItem($subFilterInSubject);
696 $subFilterInSubject->setParent($this);
697 $subFilterInSubject->readFromSession();
698 $this->filter[
'mail_filter_subject'] = (int) $subFilterInSubject->getChecked();
701 $this->lng->txt(
'mail_filter_body'),
704 $subFilterInBody->
setOptionTitle($this->lng->txt(
'mail_filter_body'));
705 $subFilterInBody->setValue(1);
706 $quickFilter->addSubItem($subFilterInBody);
707 $subFilterInBody->setParent($this);
708 $subFilterInBody->readFromSession();
709 $this->filter[
'mail_filter_body'] = (int) $subFilterInBody->getChecked();
713 $this->lng->txt(
'mail_filter_attach'),
716 $subFilterInAttachments->
setOptionTitle($this->lng->txt(
'mail_filter_attach'));
717 $subFilterInAttachments->setValue(1);
718 $quickFilter->addSubItem($subFilterInAttachments);
719 $subFilterInAttachments->setParent($this);
720 $subFilterInAttachments->readFromSession();
721 $this->filter[
'mail_filter_attach'] = (int) $subFilterInAttachments->getChecked();
726 $this->lng->txt(
'mail_filter_only_unread'),
727 'mail_filter_only_unread' 731 $onlyUnread->readFromSession();
732 $this->filter[
'mail_filter_only_unread'] = (int) $onlyUnread->getChecked();
737 $this->lng->txt(
'mail_filter_only_with_attachments'),
738 'mail_filter_only_with_attachments' 742 $onlyWithAttachments->readFromSession();
743 $this->filter[
'mail_filter_only_with_attachments'] = (int) $onlyWithAttachments->getChecked();
748 $duration->setStartText($this->lng->txt(
'mail_filter_period_from'));
749 $duration->setEndText($this->lng->txt(
'mail_filter_period_until'));
752 $duration->setShowTime(
false);
754 $duration->readFromSession();
755 $this->filter[
'period'] = $duration->getValue();
763 parent::writeFilterToSession();
765 foreach ($this->sub_filter as $item) {
766 if ($item->checkInput()) {
767 $item->setValueByArray(
$_POST);
768 $item->writeToSession();
778 parent::resetFilter();
780 foreach ($this->sub_filter as $item) {
781 if ($item->checkInput()) {
782 $item->setValueByArray(
$_POST);
783 $item->clearFromSession();
801 $dropDown = $this->uiFactory
804 ->withLabel($this->lng->txt(
'actions'));
806 return $this->uiRenderer->render([$dropDown]);
816 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mail_id', (
int) $mail[
'mail_id']);
817 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mobj_id', $this->_currentFolderId);
818 $this->ctrl->setParameterByClass(
'ilmailformgui',
'type',
'draft');
819 $viewButton = $this->uiFactory
822 $this->lng->txt(
'view'),
823 $this->ctrl->getLinkTargetByClass(
'ilmailformgui')
825 $this->ctrl->clearParametersByClass(
'ilmailformgui');
827 $this->ctrl->setParameter($this->
getParentObject(),
'mail_id', (
int) $mail[
'mail_id']);
828 $this->ctrl->setParameter($this->
getParentObject(),
'mobj_id', $this->_currentFolderId);
829 $viewButton = $this->uiFactory
832 $this->lng->txt(
'view'),
838 $buttons[] = $viewButton;
848 if (isset($mail[
'sender_id']) && $mail[
'sender_id'] > 0 && $mail[
'sender_id'] != ANONYMOUS_USER_ID) {
849 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mobj_id', $this->_currentFolderId);
850 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mail_id', (
int) $mail[
'mail_id']);
851 $this->ctrl->setParameterByClass(
'ilmailformgui',
'type',
'reply');
852 $replyButton = $this->uiFactory
855 $this->lng->txt(
'reply'),
856 $this->ctrl->getLinkTargetByClass(
'ilmailformgui')
858 $this->ctrl->clearParametersByClass(
'ilmailformgui');
860 $buttons[] = $replyButton;
872 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mobj_id', $this->_currentFolderId);
873 $this->ctrl->setParameterByClass(
'ilmailformgui',
'mail_id', (
int) $mail[
'mail_id']);
874 $this->ctrl->setParameterByClass(
'ilmailformgui',
'type',
'forward');
875 $forwardButton = $this->uiFactory
878 $this->lng->txt(
'forward'),
879 $this->ctrl->getLinkTargetByClass(
'ilmailformgui')
881 $this->ctrl->clearParametersByClass(
'ilmailformgui');
883 $buttons[] = $forwardButton;
894 $this->ctrl->setParameter($this->
getParentObject(),
'mobj_id', $this->_currentFolderId);
895 $this->ctrl->setParameter($this->
getParentObject(),
'mail_id', (
int) $mail[
'mail_id']);
896 $printButton = $this->uiFactory
899 $this->lng->txt(
'print'),
901 )->withOpenInNewViewport(
true);
904 $buttons[] = $printButton;
913 $this->ctrl->setParameter($this->
getParentObject(),
'mobj_id', $this->_currentFolderId);
914 $html = parent::getHTML();
setSubmitFormOnEnter($a_val)
Set submit form on enter.
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
addForwardRowAction(array $mail, array &$buttons)
An entity that renders components to a string output.
setExternalSorting($a_val)
Set external sorting.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
addReplyRowAction(array $mail, array &$buttons)
setTitleData(string $folderLabel, int $mailCount, int $unreadCount, string $imgFolder)
setExternalSegmentation($a_val)
Set external segmentation.
static _getMailBoxListData()
_getMailBoxListData
resetOffset($a_in_determination=false)
Reset offset.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
getOrderDirection()
Get order direction.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date public.
getParentObject()
Get parent object.
initMultiCommands(array $actions)
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
removeInvisibleFields(array $row)
addViewRowAction(array $mail, array &$buttons)
__construct( $a_parent_obj, $a_current_folder_id, $a_parent_cmd, bool $isTrashFolder, bool $isSentFolder, bool $isDraftsFolder, Factory $uiFactory=null, Renderer $uiRenderer=null)
Constructor.
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
This is how the factory for UI elements looks.
formatActionsDropDown(array $mail)
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
setSelectedItems(array $a_selected_items)
addMultiCommand($a_cmd, $a_text)
Add Command button.
static preloadUserObjects(array $usr_ids)
static getUserObjectById($usr_id)
getSelectedColumns()
Get selected columns.
setNumberOfMails(int $a_number_of_mails)
prepareHTML()
Call this before using getHTML()
isColumnVisible(int $index)
setRowTemplate($a_template, $a_template_dir="")
Set row template.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
__construct(Container $dic, ilPlugin $plugin)
addColumn( $a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
addPrintRowAction(array $mail, array &$buttons)
static htmlencodePlainString($a_str, $a_make_links_clickable, $a_detect_goto_links=false)
Encodes a plain text string into HTML for display in a browser.
setMaxCount($a_max_count)
set max.
setEnableTitle($a_enabletitle)
Set Enable Title.
setFilterCommand($a_val, $a_caption=null)
Set filter command.