From 48879ef0fc84e2adc42e90fd7b1667c9804f9b30 Mon Sep 17 00:00:00 2001 From: stekkel Date: Fri, 10 Feb 2006 22:16:07 +0000 Subject: [PATCH] Patches from Michael Long * implementing imap status cache in order to reduce the amount of status calls generated from the newmail and filter plugin. * enable the cumulative message account in left_main.php again Patches reviewed by me. I fixed a few small things in newmail and I added RECENT status calls in imap_mailbox.php in order to make the "only check recent mail" option work. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@10697 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_general.php | 22 +++-- functions/imap_mailbox.php | 29 ++++-- plugins/filters/filters.php | 42 +++++++-- plugins/newmail/functions.php | 132 +++++++++------------------ plugins/newmail/newmail_opt.php | 14 +-- plugins/newmail/setup.php | 7 +- src/left_main.php | 155 +++++++++++++++++--------------- 7 files changed, 201 insertions(+), 200 deletions(-) diff --git a/functions/imap_general.php b/functions/imap_general.php index 7551cbaf..14672a6b 100755 --- a/functions/imap_general.php +++ b/functions/imap_general.php @@ -1040,13 +1040,8 @@ function sqimap_encode_mailbox_name($what) * @deprecated */ function sqimap_get_num_messages ($imap_stream, $mailbox) { - $read_ary = sqimap_run_command ($imap_stream, 'EXAMINE ' . sqimap_encode_mailbox_name($mailbox), false, $result, $message); - for ($i = 0; $i < count($read_ary); $i++) { - if (ereg("[^ ]+ +([^ ]+) +EXISTS", $read_ary[$i], $regs)) { - return $regs[1]; - } - } - return false; //"BUG! Couldn't get number of messages in $mailbox!"; + $aStatus = sqimap_status_messages($imap_stream,$mailbox,array('MESSAGES')); + return $aStatus['MESSAGES']; } /** @@ -1141,11 +1136,22 @@ function sqimap_status_messages ($imap_stream, $mailbox, } $i++; } - return array('MESSAGES' => $messages, + + $status=array('MESSAGES' => $messages, 'UNSEEN'=>$unseen, 'RECENT' => $recent, 'UIDNEXT' => $uidnext, 'UIDVALIDITY' => $uidvalidity); + + if (!empty($messages)) { $hook_status['MESSAGES']=$messages; } + if (!empty($unseen)) { $hook_status['UNSEEN']=$unseen; } + if (!empty($recent)) { $hook_status['RECENT']=$recent; } + if (!empty($hook_status)) { + $hook_status['MAILBOX']=$mailbox; + $hook_status['CALLER']='sqimap_status_messages'; + do_hook_function('folder_status',$hook_status); + } + return $status; } diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 5f81aebe..684b34b0 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -39,7 +39,7 @@ class mailboxes { var $mailboxname_full = '', $mailboxname_sub= '', $is_noselect = false, $is_noinferiors = false, $is_special = false, $is_root = false, $is_inbox = false, $is_sent = false, $is_trash = false, $is_draft = false, $mbxs = array(), - $unseen = false, $total = false; + $unseen = false, $total = false, $recent = false; function addMbx($mbx, $delimiter, $start, $specialfirst) { $ary = explode($delimiter, $mbx->mailboxname_full); @@ -1092,7 +1092,6 @@ function sqimap_fill_mailbox_tree($mbx_ary, $mbxs=false,$imap_stream) { $trail_del = false; $start = 0; - if (isset($folder_prefix) && ($folder_prefix != '')) { $start = substr_count($folder_prefix,$delimiter); if (strrpos($folder_prefix, $delimiter) == (strlen($folder_prefix)-1)) { @@ -1205,13 +1204,13 @@ function sqimap_get_status_mbx_tree($imap_stream,&$mbx_tree) { $mbx = $oMbx->mailboxname_full; if ($unseen_type == 2 || ($move_to_trash && $oMbx->mailboxname_full == $trash_folder)) { - $query = 'STATUS ' . sqimap_encode_mailbox_name($mbx) . ' (MESSAGES UNSEEN)'; + $query = 'STATUS ' . sqimap_encode_mailbox_name($mbx) . ' (MESSAGES UNSEEN RECENT)'; } else { - $query = 'STATUS ' . sqimap_encode_mailbox_name($mbx) . ' (UNSEEN)'; + $query = 'STATUS ' . sqimap_encode_mailbox_name($mbx) . ' (UNSEEN RECENT)'; } sqimap_prepare_pipelined_query($query,$tag,$aQuery,false); } else { - $oMbx->unseen = $oMbx->total = false; + $oMbx->unseen = $oMbx->total = $oMbx->recent = false; $tag = false; } $oMbx->tag = $tag; @@ -1231,6 +1230,10 @@ function sqimap_get_status_mbx_tree($imap_stream,&$mbx_tree) { if (preg_match('/MESSAGES\s+([0-9]+)/i', $sResponse, $regs)) { $oMbx->total = $regs[1]; } + if (preg_match('/RECENT\s+([0-9]+)/i', $sResponse, $regs)) { + $oMbx->recent = $regs[1]; + } + } unset($oMbx->tag); } @@ -1245,6 +1248,7 @@ function sqimap_get_status_mbx_tree($imap_stream,&$mbx_tree) { $aStatus = sqimap_status_messages($imap_stream,$oMbx->mailboxname_full); $oMbx->unseen = $aStatus['UNSEEN']; $oMbx->total = $aStatus['MESSAGES']; + $oMbx->recent = $aStatus['RECENT']; } else { $oMbx->unseen = sqimap_unseen_messages($imap_stream,$oMbx->mailboxname_full); } @@ -1260,6 +1264,21 @@ function sqimap_get_status_mbx_tree($imap_stream,&$mbx_tree) { } } } + + $cnt = count($aMbxs); + for($i=0;$i<$cnt;++$i) { + $oMbx =& $aMbxs[$i]; + unset($hook_status); + if (!empty($oMbx->unseen)) { $hook_status['UNSEEN']=$oMbx->unseen; } + if (!empty($oMbx->total)) { $hook_status['MESSAGES']=$oMbx->total; } + if (!empty($oMbx->recent)) { $hook_status['RECENT']=$oMbx->recent; } + if (!empty($hook_status)) + { + $hook_status['MAILBOX']=$oMbx->mailboxname_full; + $hook_status['CALLER']='sqimap_get_status_mbx_tree'; // helps w/ debugging + do_hook_function('folder_status',$hook_status); + } + } } /** diff --git a/plugins/filters/filters.php b/plugins/filters/filters.php index 7470d789..ea01c2d0 100644 --- a/plugins/filters/filters.php +++ b/plugins/filters/filters.php @@ -14,9 +14,9 @@ if (! defined('SM_PATH')) define('SM_PATH','../../'); /** load globals */ -global $UseSeparateImapConnection, - $AllowSpamFilters, $SpamFilters_YourHop, $SpamFilters_ShowCommercial, - $SpamFilters_DNScache, $SpamFilters_BulkQuery, $SpamFilters_SharedCache, +global $UseSeparateImapConnection, + $AllowSpamFilters, $SpamFilters_YourHop, $SpamFilters_ShowCommercial, + $SpamFilters_DNScache, $SpamFilters_BulkQuery, $SpamFilters_SharedCache, $SpamFilters_CacheTTL; /** load default config */ @@ -59,6 +59,7 @@ function filters_init_hooks () { $squirrelmail_plugin_hooks['special_mailbox']['filters'] = 'filters_special_mailbox'; $squirrelmail_plugin_hooks['rename_or_delete_folder']['filters'] = 'update_for_folder_hook'; $squirrelmail_plugin_hooks['webmail_bottom']['filters'] = 'start_filters_hook'; + $squirrelmail_plugin_hooks['folder_status']['filters'] = 'filters_folder_status'; } /** @@ -85,6 +86,22 @@ function filters_optpage_register_block() { } } +/* Receive the status of the folder and do something with it */ +function filters_folder_status($statusarr) { + + global $filter_inbox_count; + if (empty($filter_inbox_count)) $filter_inbox_count=0; + + //echo "GOT HOOK
";
+    //var_dump($statusarr);
+    //echo "

\n"; + + if ($statusarr['MAILBOX'] == 'INBOX') + { + if (!empty($statusarr['MESSAGES'])) $filter_inbox_count=$statusarr['MESSAGES']; + } +} + /** * Saves the DNS Cache to disk * @access private @@ -187,7 +204,7 @@ function filters_bulkquery($filters, $IPs) { */ function start_filters() { global $imapServerAddress, $imapPort, $imap_stream, $imapConnection, - $UseSeparateImapConnection, $AllowSpamFilters; + $UseSeparateImapConnection, $AllowSpamFilters, $filter_inbox_count; sqgetGlobalVar('username', $username, SQ_SESSION); sqgetGlobalVar('key', $key, SQ_COOKIE); @@ -216,9 +233,8 @@ function start_filters() { // Also check if we are forced to use a separate IMAP connection if ((!isset($imap_stream) && !isset($imapConnection)) || $UseSeparateImapConnection ) { - $stream = sqimap_login($username, $key, $imapServerAddress, - $imapPort, 10); - $previously_connected = false; + $stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 10); + $previously_connected = false; } else if (isset($imapConnection)) { $stream = $imapConnection; $previously_connected = true; @@ -226,9 +242,17 @@ function start_filters() { $previously_connected = true; $stream = $imap_stream; } - $aStatus = sqimap_status_messages ($stream, 'INBOX', array('MESSAGES')); - if ($aStatus['MESSAGES']) { + if (!isset($filter_inbox_count)) { + $aStatus = sqimap_status_messages ($stream, 'INBOX', array('MESSAGES')); + if (!empty($aStatus['MESSAGES'])) { + $filter_inbox_count=$aStatus['MESSAGES']; + } else { + $filter_inbox_count=0; + } + } + + if ($filter_inbox_count > 0) { sqimap_mailbox_select($stream, 'INBOX'); // Filter spam from inbox before we sort them into folders if ($AllowSpamFilters) { diff --git a/plugins/newmail/functions.php b/plugins/newmail/functions.php index 9f60c21c..a9536a0a 100644 --- a/plugins/newmail/functions.php +++ b/plugins/newmail/functions.php @@ -67,7 +67,6 @@ function newmail_sav_function() { if ( sqgetGlobalVar('submit_newmail', $submit, SQ_POST) ) { $media_enable = ''; $media_popup = ''; - $media_allbox = ''; $media_recent = ''; $media_changetitle = ''; $media_sel = ''; @@ -76,7 +75,6 @@ function newmail_sav_function() { sqgetGlobalVar('media_enable', $media_enable, SQ_POST); sqgetGlobalVar('media_popup', $media_popup, SQ_POST); - sqgetGlobalVar('media_allbox', $media_allbox, SQ_POST); sqgetGlobalVar('media_recent', $media_recent, SQ_POST); sqgetGlobalVar('media_changetitle', $media_changetitle, SQ_POST); sqgetGlobalVar('popup_width', $popup_width, SQ_POST); @@ -90,7 +88,6 @@ function newmail_sav_function() { setPref($data_dir,$username,'newmail_enable',$media_enable); setPref($data_dir,$username,'newmail_popup', $media_popup); - setPref($data_dir,$username,'newmail_allbox',$media_allbox); setPref($data_dir,$username,'newmail_recent',$media_recent); setPref($data_dir,$username,'newmail_changetitle',$media_changetitle); setPref($data_dir,$username,'newmail_popup_width',$popup_width); @@ -139,13 +136,13 @@ function newmail_sav_function() { */ function newmail_pref_function() { global $username,$data_dir; - global $newmail_media,$newmail_enable,$newmail_popup,$newmail_allbox; + global $newmail_media,$newmail_media_enable,$newmail_popup; global $newmail_recent, $newmail_changetitle; global $newmail_userfile_type, $newmail_userfile_name; global $newmail_popup_width, $newmail_popup_height; $newmail_recent = getPref($data_dir,$username,'newmail_recent'); - $newmail_enable = getPref($data_dir,$username,'newmail_enable'); + $newmail_media_enable = getPref($data_dir,$username,'newmail_enable'); $newmail_media = getPref($data_dir, $username, 'newmail_media', '(none)'); // remove full location from setting (since SM 1.5.1 plugin uses only filename). if ($newmail_media!='(none)') @@ -154,7 +151,6 @@ function newmail_pref_function() { $newmail_popup = getPref($data_dir, $username, 'newmail_popup'); $newmail_popup_width = getPref($data_dir, $username, 'newmail_popup_width',200); $newmail_popup_height = getPref($data_dir, $username, 'newmail_popup_height',130); - $newmail_allbox = getPref($data_dir, $username, 'newmail_allbox'); $newmail_changetitle = getPref($data_dir, $username, 'newmail_changetitle'); $newmail_userfile_type = getPref($data_dir, $username, 'newmail_userfile_type'); @@ -173,61 +169,53 @@ function newmail_set_loadinfo_function() { } } + +/* Receive the status of the folder and do something with it */ +function newmail_folder_status($statusarr) { + global $newmail_media_enable,$newmail_popup,$newmail_changetitle,$trash_folder, + $send_folder,$totalNewArr,$unseen_notify, $newmail_recent; + + //echo "GOT HOOK
";
+    //var_dump($statusarr);
+    //echo "

\n"; + + $mailbox=$statusarr['MAILBOX']; + if ($newmail_media_enable == 'on' || + $newmail_popup == 'on' || + $newmail_changetitle == 'on') { + + // Skip folders for Sent and Trash + if ($statusarr['MAILBOX'] == $send_folder || $statusarr['MAILBOX'] == $trash_folder) { + return 0; + } + + if ((($mailbox == 'INBOX') && ($unseen_notify == 2)) || ($unseen_notify == 3)) { + if (($newmail_recent == 'on') && (!empty($statusarr['RECENT']))) { + $totalNewArr[$mailbox] = $statusarr['RECENT']; + } elseif ($newmail_recent != 'on' && !empty($statusarr['UNSEEN'])) { + $totalNewArr[$mailbox] = $statusarr['UNSEEN']; + } + } + } +} + /** * Insert needed data in left_main */ function newmail_plugin_function() { - global $username, $newmail_media, $newmail_enable, $newmail_popup, + global $username, $newmail_media, $newmail_media_enable, $newmail_popup, $newmail_recent, $newmail_changetitle, $imapConnection, $PHP_SELF; global $newmail_mmedia, $newmail_allowsound; global $newmail_userfile_type; global $newmail_popup_width, $newmail_popup_height; + global $totalNewArr; - if ($newmail_enable == 'on' || + if ($newmail_media_enable == 'on' || $newmail_popup == 'on' || $newmail_changetitle) { - // open a connection on the imap port (143) - - $boxes = sqimap_mailbox_list($imapConnection); - $delimeter = sqimap_get_delimiter($imapConnection); - - $status = 0; - $totalNew = 0; - - for ($i = 0;$i < count($boxes); $i++) { - - $mailbox = $boxes[$i]['formatted']; - - if (! isset($boxes[$i]['unseen'])) { - $boxes[$i]['unseen'] = ''; - } - if ($boxes[$i]['flags']) { - $noselect = false; - for ($h = 0; $h < count($boxes[$i]['flags']); $h++) { - if (strtolower($boxes[$i]["flags"][$h]) == 'noselect') { - $noselect = TRUE; - } - } - if (! $noselect) { - $status += CheckNewMailboxSound($imapConnection, - $mailbox, - $boxes[$i]['unformatted'], - $delimeter, - $boxes[$i]['unseen'], - $totalNew); - } - } else { - $status += CheckNewMailboxSound($imapConnection, - $mailbox, - $boxes[$i]['unformatted'], - $delimeter, - $boxes[$i]['unseen'], - $totalNew); - } - } - - // sqimap_logout($imapConnection); + if (!empty($totalNewArr)) { $totalNew=array_sum($totalNewArr); } + else { $totalNew=0; } // If we found unseen messages, then we // will play the sound as follows: @@ -238,7 +226,7 @@ function newmail_plugin_function() { echo 'window.parent.document.title = "' . sprintf(ngettext("%s New Message","%s New Messages",$totalNew), $totalNew) . "\";\n"; - echo "if (BeforeChangeTitle != null)\n". + echo "if (BeforeChangeTitle != null)\n". "BeforeChangeTitle();\n". "}\n". "BeforeChangeTitle = window.onload;\n". @@ -247,7 +235,9 @@ function newmail_plugin_function() { } // create media output if there are new email messages - if ($newmail_allowsound && $totalNew > 0 && $newmail_enable == 'on' && $newmail_media != '' ) { + if ($newmail_allowsound && $totalNew > 0 + && $newmail_media_enable == 'on' + && $newmail_media != '' ) { echo newmail_create_media_tags($newmail_media); } @@ -274,45 +264,7 @@ function newmail_plugin_function() { // ----- end of hooked functions ----- -/** - * Checks if mailbox contains new messages. - * - * @param stream $imapConnection - * @param string $mailbox FIXME: option is not used - * @param string $real_box unformated mailbox name - * @param string $delimeter FIXME: option is not used - * @param string $unseen FIXME: option is not used - * @param integer $total_new number of new messages - * @return bool true, if there are new messages - */ -function CheckNewMailboxSound($imapConnection, $mailbox, $real_box, $delimeter, $unseen, &$total_new) { - global $trash_folder, $sent_folder, - $unseen_notify, $newmail_allbox, - $newmail_recent; - $mailboxURL = urlencode($real_box); - - // Skip folders for Sent and Trash - if ($real_box == $sent_folder || - $real_box == $trash_folder) { - return 0; - } - - if (($unseen_notify == 2 && $real_box == 'INBOX') || - ($unseen_notify == 3 && ($newmail_allbox == 'on' || - $real_box == 'INBOX'))) { - $status = sqimap_status_messages( $imapConnection, $real_box); - if($newmail_recent == 'on') { - $total_new += $status['RECENT']; - } else { - $total_new += $status['UNSEEN']; - } - if ($total_new) { - return 1; - } - } - return 0; -} /** * Function tries to detect if file contents match declared file type @@ -520,7 +472,7 @@ function newmail_media_object($object,$type,$path,$args=array(),$addsuffix=true) * @param array $args media object attributes * @param bool $addsuffix controls addition of suffix to media object url * @return string object html tags and attributes required by selected media type. - * @todo add ogg and svg support + * @todo add ogg and svg support */ function newmail_media_object_ie($object,$type,$path,$args=array(),$addsuffix) { $ret_ie=''; diff --git a/plugins/newmail/newmail_opt.php b/plugins/newmail/newmail_opt.php index eb798bfa..18390007 100644 --- a/plugins/newmail/newmail_opt.php +++ b/plugins/newmail/newmail_opt.php @@ -35,9 +35,7 @@ echo html_tag( 'table', '', 'center', $color[0], 'width="95%" cellpadding="1" ce html_tag( 'tr' ) . "\n" . html_tag( 'td', '', 'left', $color[4] ) . "
\n"; -echo html_tag( 'p', - sprintf(_("The %s option will check ALL of your folders for unseen mail, not just the inbox for notification."), '"'._("Check all boxes, not just INBOX").'"') - ) . "\n" . +echo html_tag( 'p',"The NewMail plugin will follow the Folder Preferences option "Enable Unread Message Notification"") . "\n" . html_tag( 'p', sprintf(_("Selecting the %s option will enable the showing of a popup window when unseen mail is in your folders (requires JavaScript)."), '"'._("Show popup window on new mail").'"') ) . "\n" . @@ -63,16 +61,6 @@ echo '' . echo '
' . "\n" . html_tag( 'table', '', '', '', 'width="100%" cellpadding="5" cellspacing="0" border="0"' ) . "\n"; -// Option: media_allbox -echo html_tag( 'tr' ) . - html_tag( 'td', _("Check all boxes, not just INBOX").':', 'right', '', 'style="white-space: nowrap;"' ) . - html_tag( 'td', '', 'left' ) . - '' . "\n"; - // Option: media_recent echo html_tag( 'tr' ) . html_tag( 'td', _("Count only messages that are RECENT").':', 'right', '', 'style="white-space: nowrap;"' ) . diff --git a/plugins/newmail/setup.php b/plugins/newmail/setup.php index 4c149474..8b384141 100644 --- a/plugins/newmail/setup.php +++ b/plugins/newmail/setup.php @@ -35,8 +35,11 @@ if (! defined('SM_PATH')) define('SM_PATH','../../'); */ function squirrelmail_plugin_init_newmail() { global $squirrelmail_plugin_hooks; + $totalNewArr=array(); + global $totalNewArr; - $squirrelmail_plugin_hooks['left_main_before']['newmail'] = 'newmail_plugin'; + $squirrelmail_plugin_hooks['folder_status']['newmail'] = 'newmail_folder_status'; + $squirrelmail_plugin_hooks['left_main_after']['newmail'] = 'newmail_plugin'; $squirrelmail_plugin_hooks['optpage_register_block']['newmail'] = 'newmail_optpage_register_block'; $squirrelmail_plugin_hooks['options_save']['newmail'] = 'newmail_sav'; $squirrelmail_plugin_hooks['loading_prefs']['newmail'] = 'newmail_pref'; @@ -84,4 +87,4 @@ function newmail_plugin() { include_once(SM_PATH . 'plugins/newmail/functions.php'); newmail_plugin_function(); } -?> \ No newline at end of file +?> diff --git a/src/left_main.php b/src/left_main.php index e90c5949..646d664f 100644 --- a/src/left_main.php +++ b/src/left_main.php @@ -42,7 +42,7 @@ define('SM_BOX_COLLAPSED', 1); function ListBoxes ($boxes, $j=0 ) { global $data_dir, $username, $color, $unseen_notify, $unseen_type, $move_to_trash, $trash_folder, $collapse_folders, $imapConnection, - $use_icons, $icon_theme, $use_special_folder_color; + $use_icons, $icon_theme, $use_special_folder_color, $unseen_cum; // stop condition if (empty($boxes)) { @@ -61,34 +61,38 @@ function ListBoxes ($boxes, $j=0 ) { /* get unseen/total messages information */ /* Only need to display info when option is set */ - if (isset($unseen_notify) && ($unseen_notify > 1) && - (($boxes->unseen !== false) || ($boxes->total !== false))) { - - if ($boxes->unseen !== false) - $unseen = $boxes->unseen; - - /* - Should only display unseen info if the folder is inbox - or you set the option for all folders - */ - - if ((strtolower($mailbox) == 'inbox') || ($unseen_notify == 3)) { - $unseen_string = $unseen; - - /* If users requests, display message count too */ - if (isset($unseen_type) && ($unseen_type == 2) && ($boxes->total !== false)) { - $unseen_string .= '/' . $boxes->total; + if (isset($unseen_notify) && ($unseen_notify > 1)) { + /* handle Cumulative Unread Message Notification */ + if ($collapse && $unseen_cum) { + foreach ($boxes->mbxs as $cumn_box) { + if (!empty($cumn_box->unseen)) $boxes->unseen += $cumn_box->unseen; + if (!empty($cumn_box->total)) $boxes->total += $cumn_box->total; + } + } + if (($boxes->unseen !== false) || ($boxes->total !== false)) { + if ($boxes->unseen !== false) { + $unseen = $boxes->unseen; } - - $unseen_string = "($unseen_string)"; - /* - Finally allow the script to display the values by setting a boolean. - This can only occur if the unseen count is great than 0 (if you have - unseen count only), or you have the message count too. - */ - if (($unseen > 0) || (isset($unseen_type) && ($unseen_type ==2))) { - $unseen_found = true; + * Should only display unseen info if the folder is inbox + * or you set the option for all folders + */ + if ((strtolower($mailbox) == 'inbox') || ($unseen_notify == 3)) { + $unseen_string = $unseen; + /* If users requests, display message count too */ + if (isset($unseen_type) && ($unseen_type == 2) && ($boxes->total !== false)) { + $unseen_string .= '/' . $boxes->total; + } + $unseen_string = "($unseen_string)"; + + /* + * Finally allow the script to display the values by setting a boolean. + * This can only occur if the unseen count is great than 0 (if you have + * unseen count only), or you have the message count too. + */ + if (($unseen > 0) || (isset($unseen_type) && ($unseen_type ==2))) { + $unseen_found = true; + } } } } @@ -96,7 +100,6 @@ function ListBoxes ($boxes, $j=0 ) { if (isset($boxes->mbxs[0]) && $collapse_folders) { $collapse = getPref($data_dir, $username, 'collapse_folder_' . $mailbox); $collapse = ($collapse == '' ? SM_BOX_UNCOLLAPSED : $collapse); - $link = '' . + " "; + } else { + $collapse_link=''; + } + /* get unseen/total messages information */ /* Only need to display info when option is set */ - if (isset($unseen_notify) && ($unseen_notify > 1) && - (($boxes->unseen !== false) || ($boxes->total !== false))) { - - if ($boxes->unseen !== false) - $unseen = $boxes->unseen; - - /* - Should only display unseen info if the folder is inbox - or you set the option for all folders - */ - - if ((strtolower($mailbox) == 'inbox') || ($unseen_notify == 3)) { - $unseen_string = $unseen; - - /* If users requests, display message count too */ - if (isset($unseen_type) && ($unseen_type == 2) && ($boxes->total !== false)) { - $unseen_string .= '/' . $boxes->total; + if (isset($unseen_notify) && ($unseen_notify > 1)) { + /* handle Cumulative Unread Message Notification */ + if ($collapse && $unseen_cum) { + foreach ($boxes->mbxs as $cumn_box) { + if (!empty($cumn_box->unseen)) $boxes->unseen += $cumn_box->unseen; + if (!empty($cumn_box->total)) $boxes->total += $cumn_box->total; } - - $unseen_string = "($unseen_string)"; - - /* - Finally allow the script to display the values by setting a boolean. - This can only occur if the unseen count is great than 0 (if you have - unseen count only), or you have the message count too. - */ - if (($unseen > 0) || (isset($unseen_type) && ($unseen_type ==2))) { - $unseen_found = true; + } + if (($boxes->unseen !== false) || ($boxes->total !== false)) { + if ($boxes->unseen !== false) $unseen = $boxes->unseen; + /* + * Should only display unseen info if the folder is inbox + * or you set the option for all folders + */ + if ((strtolower($mailbox) == 'inbox') || ($unseen_notify == 3)) { + $unseen_string = $unseen; + + /* If users requests, display message count too */ + if (isset($unseen_type) && ($unseen_type == 2) && ($boxes->total !== false)) { + $unseen_string .= '/' . $boxes->total; + } + + $unseen_string = "($unseen_string)"; + + /* + * Finally allow the script to display the values by setting a boolean. + * This can only occur if the unseen count is great than 0 (if you have + * unseen count only), or you have the message count too. + */ + if (($unseen > 0) || (isset($unseen_type) && ($unseen_type ==2))) { + $unseen_found = true; + } } } } @@ -310,23 +335,7 @@ function ListAdvancedBoxes ($boxes, $mbx, $j='ID.0000' ) { $end, 'left', '', 'class="mbx_sub" id="' .$j. '"' ) . "\n"; } else { - /* get collapse information */ - if ($collapse_folders) { - $form_entry = $j.'F'; - if (isset($mbx) && isset($mbx[$form_entry])) { - $collapse = $mbx[$form_entry]; - setPref($data_dir, $username, 'collapse_folder_'.$boxes->mailboxname_full , - $collapse ? SM_BOX_COLLAPSED : SM_BOX_UNCOLLAPSED); - } else { - $collapse = getPref($data_dir, $username, 'collapse_folder_' . $mailbox); - $collapse = ($collapse == '' ? SM_BOX_UNCOLLAPSED : $collapse); - } - $img_src = ($collapse ? '../images/plus.png' : '../images/minus.png'); - $collapse_link = '' . - " "; - } else { - $collapse_link=''; - } + echo ' ' . html_tag( 'div', $collapse_link . $pre . $folder_img . ' '. $boxes->mailboxname_sub . $end , 'left', '', 'class="mbx_par" id="' .$j. 'P"' ) . "\n"; -- 2.25.1