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); } }