diff options
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | program/steps/mail/func.inc | 26 | 
2 files changed, 21 insertions, 6 deletions
| @@ -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);      }  } | 
