X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fmailbox_display.php;h=1a304005bd4e146f772bb3f8b11aef5eb3a8519c;hb=1681f4d9d7070f1bfc4f9f5ce46b39caa8142537;hp=8e80efa69bfb6feba4dab4e51d4f322b4dbdf87c;hpb=bdfb67f8c88976632ff76bd2b40ad9c74f2c4136;p=squirrelmail.git diff --git a/functions/mailbox_display.php b/functions/mailbox_display.php index 8e80efa6..1a304005 100644 --- a/functions/mailbox_display.php +++ b/functions/mailbox_display.php @@ -3,7 +3,7 @@ /** * mailbox_display.php * - * Copyright (c) 1999-2001 The SquirrelMail Development Team + * Copyright (c) 1999-2002 The SquirrelMail Project Team * Licensed under the GNU GPL. For full terms see the file COPYING. * * This contains functions that display mailbox information, such as the @@ -12,6 +12,8 @@ * $Id$ */ +require_once('../functions/strings.php'); + define('PG_SEL_MAX', 10); /* Default value for page_selector_max. */ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start_msg, $where, $what) { @@ -21,6 +23,7 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start global $default_use_priority; global $message_highlight_list; global $index_order; + global $pos; /* Search postion (if any) */ $color_string = $color[4]; if ($GLOBALS['alt_index_colors']) { @@ -35,7 +38,19 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start } $msg = $msgs[$key]; - $senderName = htmlspecialchars(sqimap_find_displayable_name($msg['FROM'])); + /** + * This is done in case you're looking into Sent folders, + * because you can have multi receiver. + */ + $sendersName = split(',', $msg['FROM']); + $senderName = ''; + for ($index = 0 ; $index < count($sendersName) ; $index++) { + if ($senderName != '') { + $senderName .= ', '; + } + $senderName .= sqimap_find_displayable_name($sendersName[$index]); + } + if( $mailbox == 'None' ) { // $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); $boxes = sqimap_mailbox_list($imapConnection); @@ -48,7 +63,7 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start echo "\n"; if (isset($msg['FLAG_FLAGGED']) && ($msg['FLAG_FLAGGED'] == true)) { - $flag = ""; + $flag = ""; $flag_end = ''; } else { $flag = ''; @@ -62,7 +77,7 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start $bold_end = ''; } - if (($mailbox == $sent_folder) || ($mailbox == $draft_folder)) { + if (handleAsSent($mailbox)) { $italic = ''; $italic_end = ''; } else { @@ -97,7 +112,10 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start } if ($where && $what) { - $search_stuff = '&where='.urlencode($where).'&what='.urlencode($what); + if( !isset( $pos ) || $pos == '' ) { + $pos = '0'; + } + $search_stuff = "&pos=" . urlencode( $pos ) . "&where=".urlencode($where).'&what='.urlencode($what); } $checked = ($checkall == 1 ?' checked' : ''); @@ -105,16 +123,16 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start for ($i=1; $i <= count($index_order); $i++) { switch ($index_order[$i]) { case 1: /* checkbox */ - echo " \n"; + echo " \n"; break; case 2: /* from */ - echo " $italic$bold$flag$fontstr$senderName$fontstr_end$flag_end$bold_end$italic_end\n"; + echo " $italic$bold$flag$fontstr$senderName$fontstr_end$flag_end$bold_end$italic_end\n"; break; case 3: /* date */ - echo "
$bold$flag$fontstr".$msg["DATE_STRING"]."$fontstr_end$flag_end$bold_end
\n"; + echo "
$bold$flag$fontstr".$msg["DATE_STRING"]."$fontstr_end$flag_end$bold_end
\n"; break; case 4: /* subject */ - echo " $bold"; + echo " $bold"; if (! isset($search_stuff)) { $search_stuff = ''; } echo "\n"; + echo " \n"; if (isset($msg['FLAG_ANSWERED']) && $msg['FLAG_ANSWERED'] == true) { echo "A\n"; @@ -142,11 +160,11 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start } if ($default_use_priority) { if (ereg('(1|2)',substr($msg['PRIORITY'],0,1))) { - echo "!\n"; + echo "!\n"; $stuff = true; } if (ereg('(5)',substr($msg['PRIORITY'],0,1))) { - echo "?\n"; + echo "?\n"; $stuff = true; } } @@ -161,7 +179,7 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start echo "\n"; break; case 6: /* size */ - echo " $bold$fontstr" . + echo " $bold$fontstr" . show_readable_size($msg['SIZE']) . "$fontstr_end$bold_end\n"; break; @@ -175,8 +193,8 @@ function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start * and shows them to the user. */ function showMessagesForMailbox - ($imapConnection, $mailbox, $num_msgs, $start_msg, - $sort, $color,$show_num, $use_cache) { +($imapConnection, $mailbox, $num_msgs, $start_msg, $sort, + $color, $show_num, $use_cache) { global $msgs, $msort; global $sent_folder, $draft_folder; global $message_highlight_list; @@ -188,7 +206,7 @@ function showMessagesForMailbox } sqimap_mailbox_select($imapConnection, $mailbox); - $issent = (($mailbox == $sent_folder) || ($mailbox == $draft_folder)); + $issent = handleAsSent($mailbox); if (!$use_cache) { /* If it is sorted... */ if ($num_msgs >= 1) { @@ -378,14 +396,14 @@ function displayMessageArray($imapConnection, $num_msgs, $start_msg, &$msgs, $ms do_hook('mailbox_index_before'); $msg_cnt_str = get_msgcnt_str($start_msg, $end_msg, $num_msgs); - $paginator_str = get_paginator_str($urlMailbox, $start_msg, $end_msg, $num_msgs, $show_num, $sort); + $paginator_str = get_paginator_str + ($urlMailbox, $start_msg, $end_msg, $num_msgs, $show_num, $sort); if (! isset($msg)) { $msg = ''; } - mail_message_listing_beginning - ($imapConnection, + mail_message_listing_beginning( $imapConnection, "move_messages.php?msg=$msg&mailbox=$urlMailbox&startMessage=$start_msg", $mailbox, $sort, $msg_cnt_str, $paginator_str, $start_msg); @@ -445,11 +463,11 @@ function displayMessageArray($imapConnection, $num_msgs, $start_msg, &$msgs, $ms } echo ''. - "" . - "" . - "
". + "
$paginator_str
" . + "". + "". "
" . + "". "
$paginator_str$msg_cnt_str
". - "
"; /** End of message-list table */ @@ -478,33 +496,27 @@ function mail_message_listing_beginning * This is the beginning of the message list table. * It wraps around all messages */ - echo "\n". - "'. - "
". - "\n". - " \n". - " \n". - "
$paginator"; - - if( $paginator <> ' ' ) { - echo ' | '; - } - - echo get_selectall_link($start_msg, $sort) . "$msg_cnt_str
\n". - '
\n". - "
\n". - "\n". - " \n" . - " \n" . - " \n" . - " \n" . - " \n" . - "
\n" . - '  ' . _("Move selected to:") . "\n" . - " \n" . - '  ' . _("Transform Selected Messages") . ":  
\n" . - "
\n" . - '  \n" + . "' + . "
" + . " \n" + . " \n" + . " \n" + . "
$paginator$msg_cnt_str
\n" + . '
\n" + . "\n" + . " \n" + . " \n" + . " \n" + . " \n" + . " \n" + . " \n". " '. "
\n" + . '  ' . _("Move Selected To:") . "\n" + . " \n" + . '  ' . _("Transform Selected Messages") . ":  
\n" + . "
\n" + . '  '. - "\n". + echo '  '. + "\n". "    \n"; if (!$auto_expunge) { @@ -531,7 +543,7 @@ function mail_message_listing_beginning echo '
". - "'. _("To") .''; } else { echo '
'. _("From") .''; @@ -586,13 +597,13 @@ function mail_message_listing_beginning function ShowSortButton($sort, $mailbox, $Up, $Down) { /* Figure out which image we want to use. */ if ($sort != $Up && $sort != $Down) { - $img = 'sort_none.gif'; + $img = 'sort_none.png'; $which = $Up; } elseif ($sort == $Up) { - $img = 'up_pointer.gif'; + $img = 'up_pointer.png'; $which = $Down; } else { - $img = 'down_pointer.gif'; + $img = 'down_pointer.png'; $which = 6; } @@ -604,7 +615,8 @@ function ShowSortButton($sort, $mailbox, $Up, $Down) { } function get_selectall_link($start_msg, $sort) { - global $checkall, $PHP_SELF, $what, $where, $mailbox, $javascript_on; + global $checkall, $what, $where, $mailbox, $javascript_on; + global $PHP_SELF, $PG_SHOWNUM; if ($javascript_on) { $result = @@ -618,7 +630,7 @@ function get_selectall_link($start_msg, $sort) { " }\n" . "}\n" . "//-->\n" . - '' . _("Toggle All") . "\n"; + '' . _("Toggle All") . "\n"; } else { $result .= ""; if (isset($checkall) && ($checkall == '1')) { @@ -667,75 +683,209 @@ function get_msgcnt_str($start_msg, $end_msg, $num_msgs) { } /** -* This function computes the paginator string. -*/ + * Generate a paginator link. + */ +function get_paginator_link +($box, $start_msg, $use, $text) { + $result = "$text"; + return ($result); +} + +/** + * This function computes the paginator string. + */ function get_paginator_str -($urlMailbox, $start_msg, $end_msg, $num_msgs, $show_num, $sort) { - global $username, $data_dir, $use_mailbox_cache, $color; +($box, $start_msg, $end_msg, $num_msgs, $show_num, $sort) { + global $username, $data_dir, $use_mailbox_cache, $color, $PG_SHOWNUM; + + /* Initialize paginator string chunks. */ + $prv_str = ''; + $nxt_str = ''; + $pg_str = ''; + $all_str = ''; + $tgl_str = ''; + + /* Create simple strings that will be creating the paginator. */ + $spc = ' '; /* This will be used as a space. */ + $sep = '|'; /* This will be used as a seperator. */ + + /* Get some paginator preference values. */ + $pg_sel = getPref($data_dir, $username, 'page_selector', SMPREF_ON); + $pg_max = getPref($data_dir, $username, 'page_selector_max', PG_SEL_MAX); - $nextGroup = $start_msg + $show_num; - $prevGroup = $start_msg - $show_num; + /* Make sure that our start message number is not too big. */ + $start_msg = min($start_msg, $num_msgs); + /* Decide whether or not we will use the mailbox cache. */ + /* Not sure why $use_mailbox_cache is even passed in. */ if ($sort == 6) { $use = 0; } else { $use = 1; } - $lMore = ''; - $rMore = ''; - if (($nextGroup <= $num_msgs) && ($prevGroup >= 0)) { - $lMore = "". _("Previous") . ''; - $rMore = "". _("Next") ."\n"; - } else if (($nextGroup > $num_msgs) && ($prevGroup >= 0)) { - $lMore = "". _("Previous") . ''; - $rMore = ""._("Next")."\n"; - } else if (($nextGroup <= $num_msgs) && ($prevGroup < 0)) { - $lMore = ""._("Previous") . ''; - $rMore = "". _("Next") ."\n"; - } - if ($lMore <> '') { - $lMore .= ' | '; - } - if ($rMore <> '' || $lMore <> '' ) { - $rMore = "" . - _("All") . ' | ' . $rMore; + + /* Compute the starting message of the previous and next page group. */ + $next_grp = $start_msg + $show_num; + $prev_grp = $start_msg - $show_num; + + /* Compute the basic previous and next strings. */ + if (($next_grp <= $num_msgs) && ($prev_grp >= 0)) { + $prv_str = get_paginator_link($box, $prev_grp, $use, _("Previous")); + $nxt_str = get_paginator_link($box, $next_grp, $use, _("Next")); + } else if (($next_grp > $num_msgs) && ($prev_grp >= 0)) { + $prv_str = get_paginator_link($box, $prev_grp, $use, _("Previous")); + $nxt_str = ""._("Next")."\n"; + } else if (($next_grp <= $num_msgs) && ($prev_grp < 0)) { + $prv_str = ""._("Previous") . ''; + $nxt_str = get_paginator_link($box, $next_grp, $use, _("Next")); } + /* Page selector block. Following code computes page links. */ - $mMore = ''; - if (getPref($data_dir, $username, 'page_selector') - && ($num_msgs > $show_num)) { - $j = intval( $num_msgs / $show_num ); // Max pages - $k = max( 1, $j / getPref($data_dir, $username, 'page_selector_max', PG_SEL_MAX ) ); - if ($num_msgs % $show_num <> 0 ) { - $j++; + if ($pg_sel && ($num_msgs > $show_num)) { + /* Most importantly, what is the current page!!! */ + $cur_pg = intval($start_msg / $show_num) + 1; + + /* Compute total # of pages and # of paginator page links. */ + $tot_pgs = ceil($num_msgs / $show_num); /* Total # of Pages */ + $vis_pgs = min($pg_max, $tot_pgs - 1); /* Visible Pages */ + + /************************************************************/ + /* Compute the size of the four quarters of the page links. */ + /************************************************************/ + + /* If we can, just show all the pages. */ + if (($tot_pgs - 1) <= $pg_max) { + $q1_pgs = $cur_pg - 1; + $q2_pgs = $q3_pgs = 0; + $q4_pgs = $tot_pgs - $cur_pg; + + /* Otherwise, compute some magic to choose the four quarters. */ + } else { + /* Compute the magic base values. Added together, */ + /* these values will always equal to the $pag_pgs. */ + /* NOTE: These are DEFAULT values and do not take */ + /* the current page into account. That is below. */ + $q1_pgs = floor($vis_pgs/4); + $q2_pgs = round($vis_pgs/4, 0); + $q3_pgs = ceil($vis_pgs/4); + $q4_pgs = round(($vis_pgs - $q2_pgs)/3, 0); + + /* Adjust if the first quarter contains the current page. */ + if (($cur_pg - $q1_pgs) < 1) { + $extra_pgs = ($q1_pgs - ($cur_pg - 1)) + $q2_pgs; + $q1_pgs = $cur_pg - 1; + $q2_pgs = 0; + $q3_pgs += ceil($extra_pgs / 2); + $q4_pgs += floor($extra_pgs / 2); + + /* Adjust if the first and second quarters intersect. */ + } else if (($cur_pg - $q2_pgs - ceil($q2_pgs/3)) <= $q1_pgs) { + $extra_pgs = $q2_pgs; + $extra_pgs -= ceil(($cur_pg - $q1_pgs - 1) * 0.75); + $q2_pgs = ceil(($cur_pg - $q1_pgs - 1) * 0.75); + $q3_pgs += ceil($extra_pgs / 2); + $q4_pgs += floor($extra_pgs / 2); + + /* Adjust if the fourth quarter contains the current page. */ + } else if (($cur_pg + $q4_pgs) >= $tot_pgs) { + $extra_pgs = ($q4_pgs - ($tot_pgs - $cur_pg)) + $q3_pgs; + $q3_pgs = 0; + $q4_pgs = $tot_pgs - $cur_pg; + $q1_pgs += floor($extra_pgs / 2); + $q2_pgs += ceil($extra_pgs / 2); + + /* Adjust if the third and fourth quarter intersect. */ + } else if (($cur_pg + $q3_pgs + 1) >= ($tot_pgs - $q4_pgs + 1)) { + $extra_pgs = $q3_pgs; + $extra_pgs -= ceil(($tot_pgs - $cur_pg - $q4_pgs) * 0.75); + $q3_pgs = ceil(($tot_pgs - $cur_pg - $q4_pgs) * 0.75); + $q1_pgs += floor($extra_pgs / 2); + $q2_pgs += ceil($extra_pgs / 2); + } } - $start_msg = min( $start_msg, $num_msgs ); - $p = intval( $start_msg / $show_num ) + 1; - $i = 1; - while( $i < $p ) { - $pg = intval( $i ); - $start = ( ($pg-1) * $show_num ) + 1; - $mMore .= "$pg "; - $i += $k; + + /* I am leaving this debug code here, commented out, because */ + /* it is a really nice way to see what the above code is doing. */ + /* echo "qts = $q1_pgs/$q2_pgs/$q3_pgs/$q4_pgs = " */ + /* . ($q1_pgs + $q2_pgs + $q3_pgs + $q4_pgs) . '
'; */ + + /************************************************************/ + /* Print out the page links from the compute page quarters. */ + /************************************************************/ + + /* Start with the first quarter. */ + if (($q1_pgs == 0) && ($cur_pg > 1)) { + $pg_str .= "...$spc"; + } else { + for ($pg = 1; $pg <= $q1_pgs; ++$pg) { + $start = (($pg-1) * $show_num) + 1; + $pg_str .= get_paginator_link($box, $start, $use, $pg) . $spc; + } + if ($cur_pg - $q2_pgs - $q1_pgs > 1) { + $pg_str .= "...$spc"; + } } - $mMore .= "$p "; - $i += $k; - while( $i <= $j ) { - $pg = intval( $i ); - $start = ( ($pg-1) * $show_num ) + 1; - $mMore .= "$pg "; - $i+=$k; + + /* Continue with the second quarter. */ + for ($pg = $cur_pg - $q2_pgs; $pg < $cur_pg; ++$pg) { + $start = (($pg-1) * $show_num) + 1; + $pg_str .= get_paginator_link($box, $start, $use, $pg) . $spc; + } + + /* Now print the current page. */ + $pg_str .= $cur_pg . $spc; + + /* Next comes the third quarter. */ + for ($pg = $cur_pg + 1; $pg <= $cur_pg + $q3_pgs; ++$pg) { + $start = (($pg-1) * $show_num) + 1; + $pg_str .= get_paginator_link($box, $start, $use, $pg) . $spc; } - $mMore .= ' | '; + + /* And last, print the forth quarter page links. */ + if (($q4_pgs == 0) && ($cur_pg < $tot_pgs)) { + $pg_str .= "...$spc"; + } else { + if (($tot_pgs - $q4_pgs) > ($cur_pg + $q3_pgs)) { + $pg_str .= "...$spc"; + } + for ($pg = $tot_pgs - $q4_pgs + 1; $pg <= $tot_pgs; ++$pg) { + $start = (($pg-1) * $show_num) + 1; + $pg_str .= get_paginator_link($box, $start, $use, $pg) . $spc; + } + } + } else if ($PG_SHOWNUM == 999999) { + $pg_str = "" + . _("Paginate") . '' . $spc; } - /* Return the resulting string. */ - if( $lMore . $mMore . $rMore == '' ) { - $lMore = ' '; + /* If necessary, compute the 'show all' string. */ + if (($prv_str != '') || ($nxt_str != '')) { + $all_str = "" . _("Show All") . ''; } - return ($lMore . $mMore . $rMore); + + /* Last but not least, get the value for the toggle all link. */ + $tgl_str = get_selectall_link($start_msg, $sort); + + /* Put all the pieces of the paginator string together. */ + $result = ''; + $result .= ($prv_str != '' ? $prv_str . $spc . $sep . $spc : ''); + $result .= ($nxt_str != '' ? $nxt_str . $spc . $sep . $spc : ''); + $result .= ($pg_str != '' ? $pg_str : ''); + $result .= ($all_str != '' ? $sep . $spc . $all_str . $spc : ''); + $result .= ($result != '' ? $sep . $spc . $tgl_str: $tgl_str); + + /* If the resulting string is blank, return a non-breaking space. */ + if ($result == '') { + $result = ' '; + } + + /* Return our final magical paginator string. */ + return ($result); } function processSubject($subject) { @@ -767,4 +917,19 @@ function processSubject($subject) { return substr($subject, 0, $trim_val) . '...'; } +function handleAsSent($mailbox) { + global $sent_folder, $draft_folder; + global $handleAsSent_result; + + /* First check if this is the sent or draft folder. */ + $handleAsSent_result = (($mailbox == $sent_folder) + || ($mailbox == $draft_folder)); + + /* Then check the result of the handleAsSent hook. */ + do_hook('check_handleAsSent_result', $mailbox); + + /* And return the result. */ + return ($handleAsSent_result); +} + ?>