summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--program/steps/mail/func.inc26
2 files changed, 21 insertions, 6 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 86694689d..ebcfbd16d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail
===========================
+- Add 'messages_list' hook (#1486266)
- Add request* event triggers in http_post/http_request (#1486054)
- Fix use RFC-compliant line-delimiter when saving messages on IMAP (#1486712)
- Add 'imap_timeout' option (#1486760)
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 384074b71..5e53a75e5 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -227,7 +227,7 @@ function rcmail_message_list($attrib)
*/
function rcmail_js_message_list($a_headers, $insert_top=FALSE, $head_replace=FALSE)
{
- global $CONFIG, $IMAP, $OUTPUT;
+ global $CONFIG, $IMAP, $RCMAIL, $OUTPUT;
if (!empty($_SESSION['list_attrib']['columns']))
$a_show_cols = $_SESSION['list_attrib']['columns'];
@@ -246,6 +246,14 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $head_replace=FAL
if (!in_array('threads', $a_show_cols))
array_unshift($a_show_cols, 'threads');
+ // Plugins may set header's list_cols/list_flags and other rcube_mail_header variables
+ // and list columns
+ $plugin = $RCMAIL->plugins->exec_hook('messages_list',
+ array('messages' => $a_headers, 'cols' => $a_show_cols));
+
+ $a_show_cols = $plugin['cols'];
+ $a_headers = $plugin['messages'];
+
$thead = $head_replace ? rcmail_message_list_head($_SESSION['list_attrib'], $a_show_cols) : NULL;
$OUTPUT->command('set_message_coltypes', $a_show_cols, $thead);
@@ -260,16 +268,16 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $head_replace=FAL
unset($a_show_cols[$key]);
if (($key = array_search('threads', $a_show_cols)) !== FALSE)
unset($a_show_cols[$key]);
-
// loop through message headers
+
foreach ($a_headers as $n => $header)
{
- $a_msg_cols = array();
- $a_msg_flags = array();
-
if (empty($header))
continue;
+ $a_msg_cols = array();
+ $a_msg_flags = array();
+
$IMAP->set_charset(!empty($header->charset) ? $header->charset : $CONFIG['default_charset']);
// format each col; similar as in rcmail_message_list()
@@ -317,6 +325,12 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $head_replace=FAL
$a_msg_flags['attachment'] = 1;
$a_msg_flags['mbox'] = $mbox;
+ // merge with plugin result
+ if (!empty($header->list_flags) && is_array($header->list_flags))
+ $a_msg_flags = array_merge($a_msg_flags, $header->list_flags);
+ if (!empty($header->list_cols) && is_array($header->list_cols))
+ $a_msg_cols = array_merge($a_msg_cols, $header->list_cols);
+
$OUTPUT->command('add_message_row',
$header->uid,
$a_msg_cols,
@@ -324,7 +338,7 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $head_replace=FAL
$insert_top);
}
- if ($IMAP->threading && $a_headers) {
+ if ($IMAP->threading) {
$OUTPUT->command('init_threads', (array) $roots);
}
}