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)