Source for file mailbox_display.php

Documentation is available at mailbox_display.php

  1. <?php
  2.  
  3. /**
  4.  * mailbox_display.php
  5.  *
  6.  * This contains functions that display mailbox information, such as the
  7.  * table row that has sender, date, subject, etc...
  8.  *
  9.  * @copyright 1999-2015 The SquirrelMail Project Team
  10.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  11.  * @version $Id: mailbox_display.php 14496 2015-01-25 01:42:38Z pdontthink $
  12.  * @package squirrelmail
  13.  */
  14.  
  15. /** The standard includes.. */
  16. require_once(SM_PATH 'functions/strings.php');
  17. require_once(SM_PATH 'functions/html.php');
  18. require_once(SM_PATH 'class/html.class.php');
  19. require_once(SM_PATH 'functions/imap_mailbox.php');
  20.  
  21. /* Constants:
  22.  *   PG_SEL_MAX:   default value for page_selector_max
  23.  *   SUBJ_TRIM_AT: the length at which we trim off subjects
  24.  */
  25. define('PG_SEL_MAX'10);
  26. define('SUBJ_TRIM_AT'55);
  27.  
  28. function elapsed($start)
  29. {
  30.    $end microtime();
  31.    list($start2$start1explode(" "$start);
  32.    list($end2$end1explode(" "$end);
  33.    $diff1 $end1 $start1;
  34.    $diff2 $end2 $start2;
  35.    if$diff2 ){
  36.        $diff1 -= 1;
  37.        $diff2 += 1.0;
  38.    }
  39.    return $diff2 $diff1;
  40. }
  41.  
  42. function printMessageInfo($imapConnection$t$not_last=true$key$mailbox,
  43.                           $start_msg$where$what{
  44.     global $checkall$preselected,
  45.            $color$msgs$msort$td_str$msg,
  46.            $default_use_priority,
  47.            $message_highlight_list,
  48.            $index_order,
  49.            $indent_array,   /* indent subject by */
  50.            $pos,            /* Search postion (if any)  */
  51.            $thread_sort_messages/* thread sorting on/off */
  52.            $server_sort_order/* sort value when using server-sorting */
  53.            $row_count,
  54.            $allow_server_sort/* enable/disable server-side sorting */
  55.            $truncate_subject,
  56.            $truncate_sender,
  57.            $internal_date_sort;
  58.  
  59.     sqgetGlobalVar('sort'$sortSQ_SESSION);
  60.  
  61.     $color_string $color[4];
  62.  
  63.     if ($GLOBALS['alt_index_colors']{
  64.         if (!isset($row_count)) {
  65.             $row_count 0;
  66.         }
  67.         $row_count++;
  68.         if ($row_count 2{
  69.             if (!isset($color[12])) {
  70.                 $color[12'#EAEAEA';
  71.             }
  72.             $color_string $color[12];
  73.         }
  74.     }
  75.     $msg $msgs[$key];
  76.  
  77.     if($mailbox == 'None'{
  78.         $boxes   sqimap_mailbox_list($imapConnection);
  79.         $mailbox $boxes[0]['unformatted'];
  80.         unset($boxes);
  81.     }
  82.     $urlMailbox urlencode($mailbox);
  83.  
  84.     if (handleAsSent($mailbox)) {
  85.        $msg['FROM'$msg['TO'];
  86.     }
  87.     $msg['FROM'parseAddress($msg['FROM'],1);
  88.  
  89.  
  90.        /*
  91.         * This is done in case you're looking into Sent folders,
  92.         * because you can have multiple receivers.
  93.         */
  94.  
  95.     $senderNames $msg['FROM'];
  96.     $senderName  '';
  97.     $senderFrom '';
  98.  
  99.  
  100.     if (sizeof($senderNames)){
  101.         foreach ($senderNames as $senderNames_part{
  102.             if ($senderName != ''{
  103.                 $senderName .= ', ';
  104.             }
  105.  
  106.             if ($senderFrom != ''{
  107.                 $senderFrom .= ', ';
  108.             }
  109.  
  110.             if ($senderNames_part[1]{
  111.                 $senderName .= decodeHeader($senderNames_part[1]);
  112.             else {
  113.                 $senderName .= sm_encode_html_special_chars($senderNames_part[0]);
  114.             }
  115.  
  116.             $senderFrom .= sm_encode_html_special_chars($senderNames_part[0]);
  117.         }
  118.     }
  119.     $senderName str_replace('&nbsp;',' ',$senderName);
  120.     if (substr($senderName06== '&quot;'
  121.      && substr($senderName-6== '&quot;')
  122.         $senderName substr(substr($senderName0-6)6);
  123.     echo html_tag'tr','','','','valign="top"'"\n";
  124.  
  125.     if (isset($msg['FLAG_FLAGGED']&& ($msg['FLAG_FLAGGED'== true)) {
  126.         $flag "<font color=\"$color[2]\">";
  127.         $flag_end '</font>';
  128.     else {
  129.         $flag '';
  130.         $flag_end '';
  131.     }
  132.     if (!isset($msg['FLAG_SEEN']|| ($msg['FLAG_SEEN'== false)) {
  133.         $bold '<b>';
  134.         $bold_end '</b>';
  135.     else {
  136.         $bold '';
  137.         $bold_end '';
  138.     }
  139.     if (handleAsSent($mailbox)) {
  140.         $italic '<i>';
  141.         $italic_end '</i>';
  142.     else {
  143.         $italic '';
  144.         $italic_end '';
  145.     }
  146.     if (isset($msg['FLAG_DELETED']&& $msg['FLAG_DELETED']{
  147.         $fontstr "<font color=\"$color[9]\">";
  148.         $fontstr_end '</font>';
  149.     else {
  150.         $fontstr '';
  151.         $fontstr_end '';
  152.     }
  153.  
  154.     if ($where && $what{
  155.         $searchstr '&amp;where='.$where.'&amp;what='.$what;
  156.     else {
  157.         $searchstr '';
  158.     }
  159.  
  160.     if (is_array($message_highlight_list&& count($message_highlight_list)) {
  161.         $msg['TO'parseAddress($msg['TO']);
  162.         $msg['CC'parseAddress($msg['CC']);
  163.         $decoded_addresses array();
  164.         foreach ($message_highlight_list as $message_highlight_list_part{
  165.             if (trim($message_highlight_list_part['value']!= ''{
  166.                 $high_val   strtolower($message_highlight_list_part['value']);
  167.                 $match_type strtoupper($message_highlight_list_part['match_type']);
  168.                 if($match_type == 'TO_CC'{
  169.                     $match array('TO''CC');
  170.                 else {
  171.                     $match array($match_type);
  172.                 }
  173.                 foreach($match as $match_type{
  174.                     switch($match_type{
  175.                         case('TO'):
  176.                         case('CC'):
  177.                         case('FROM'):
  178.                             foreach ($msg[$match_typeas $i => $address{
  179.                                 if (empty($decoded_addresses[$match_type][$i])) {
  180.                                     $decoded_addresses[$match_type][$i][0decodeHeader($address[0]truefalse);
  181.                                     $decoded_addresses[$match_type][$i][1decodeHeader($address[1]truefalse);
  182.                                 }
  183.                                 $address $decoded_addresses[$match_type][$i];
  184.                                 if (strstr('^^' strtolower($address[0])$high_val||
  185.                                     strstr('^^' strtolower($address[1])$high_val)) {
  186.                                     $hlt_color $message_highlight_list_part['color'];
  187.                                     break 4;
  188.                                 }
  189.                             }
  190.                             break;
  191.                         default:
  192.                             $headertest strtolower(decodeHeader($msg[$match_type]truefalse));
  193.                             if (strstr('^^' $headertest$high_val)) {
  194.                                 $hlt_color $message_highlight_list_part['color'];
  195.                                 break 3;
  196.                             }
  197.                             break;
  198.                     }
  199.                 }
  200.             }
  201.         }
  202.     }
  203.  
  204.     if (!isset($hlt_color)) {
  205.         $hlt_color $color_string;
  206.     }
  207.     if ($checkall == || in_array($msg['ID']$preselected))
  208.         $checked ' checked="checked"';
  209.     else
  210.         $checked '';
  211.     $col 0;
  212.     $msg['SUBJECT'decodeHeader($msg['SUBJECT']);
  213.     $subject sm_truncate_string(str_replace('&nbsp;',' ',$msg['SUBJECT'])$truncate_subject'...'TRUE);
  214.     if (sizeof($index_order)) {
  215.         foreach ($index_order as $index_order_part{
  216.             switch ($index_order_part{
  217.             case 1/* checkbox */
  218.                 echo html_tag'td',
  219.                                "<input type=\"checkbox\" name=\"msg[$t]\" id=\"msg".$msg['ID'].
  220.                                    "\" value=\"".$msg['ID']."\"$checked>",
  221.                                'center',
  222.                                $hlt_color );
  223.                 break;
  224.             case 2/* from */
  225.                 $from_xtra '';
  226.                 $from_xtra 'title="' $senderFrom '"';
  227.                 if (trim($senderName== ''{
  228.                     $senderName '(' _("unknown"')';
  229.                 }
  230.                 echo html_tag'td',
  231.                     html_tag('label',
  232.                                $italic $bold $flag $fontstr sm_truncate_string($senderName$truncate_sender'...'TRUE.
  233.                                $fontstr_end $flag_end $bold_end $italic_end,
  234.                            '','','for="msg'.$msg['ID'].'"'),
  235.                            'left',
  236.                            $hlt_color$from_xtra );
  237.                 break;
  238.             case 3/* date */
  239.                 // show internal date if using it to sort
  240.                 if ($internal_date_sort && ($sort == || $sort == 1)) {
  241.                     $date_string $msg['RECEIVED_DATE_STRING''';
  242.                     $date_title_string $msg['RECEIVED_DATE_STRING_FULL''';
  243.                 else {
  244.                     $date_string $msg['DATE_STRING''';
  245.                     $date_title_string $msg['DATE_STRING_FULL''';
  246.                 }
  247.                 if ($date_string == ''{
  248.                     $date_string _("Unknown date");
  249.                 }
  250.                 echo html_tag'td',
  251.                                $bold $flag $fontstr $date_string .
  252.                                $fontstr_end $flag_end $bold_end,
  253.                                'center',
  254.                                $hlt_color,
  255.                                'nowrap title="' $date_title_string '"' );
  256.                 break;
  257.             case 4/* subject */
  258.                 if (trim($subject== ''{
  259.                     $subject '(' _("unknown"')';
  260.                 }
  261.                 $td_str $bold;
  262.                 if ($thread_sort_messages == 1{
  263.                     if (isset($indent_array[$msg['ID']])) {
  264.                         $td_str .= str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;",$indent_array[$msg['ID']]);
  265.                     }
  266.                 }
  267.                 $td_str .= '<a href="read_body.php?mailbox='.$urlMailbox
  268.                         .  '&amp;passed_id='$msg["ID"]
  269.                         .  '&amp;startMessage='.$start_msg.$searchstr.'"';
  270.                 $td_str .= ' ' .concat_hook_function('subject_link'array($start_msg$searchstr));
  271.                 if ($subject != $msg['SUBJECT']{
  272.                     $title get_html_translation_table(HTML_SPECIALCHARS);
  273.                     $title array_flip($title);
  274.                     $title strtr($msg['SUBJECT']$title);
  275.                     $title str_replace('"'"''"$title);
  276.                     $td_str .= " title=\"$title\"";
  277.                 }
  278.                 $td_str .= ">$flag$subject$flag_end</a>$bold_end";
  279.                 echo html_tag'td'$td_str'left'$hlt_color );
  280.                 break;
  281.             case 5/* flags */
  282.                 $stuff false;
  283.                 $td_str "<b><small>";
  284.  
  285.                 if (isset($msg['FLAG_ANSWERED']&& $msg['FLAG_ANSWERED'== true{
  286.                     // i18n: "A" is short for "Answered". Make sure that two icon strings aren't translated to the same character (only in 1.5).
  287.                     $td_str .= _("A");
  288.                     $stuff true;
  289.                 }
  290.                 if ($msg['TYPE0'== 'multipart' && $msg['TYPE1'== 'mixed'{
  291.                     $td_str .= '+';
  292.                     $stuff true;
  293.                 }
  294.                 if ($default_use_priority{
  295.                     if ( ($msg['PRIORITY'== 1|| ($msg['PRIORITY'== 2) ) {
  296.                         $td_str .= "<font color=\"$color[1]\">!</font>";
  297.                         $stuff true;
  298.                     }
  299.                     if ($msg['PRIORITY'== 5{
  300.                         $td_str .= "<font color=\"$color[8]\">?</font>";
  301.                         $stuff true;
  302.                     }
  303.                 }
  304.                 if (isset($msg['FLAG_DELETED']&& $msg['FLAG_DELETED'== true{
  305.                     $td_str .= "<font color=\"$color[1]\">D</font>";
  306.                     $stuff true;
  307.                 }
  308.                 if (!$stuff{
  309.                     $td_str .= '&nbsp;';
  310.                 }
  311.                 do_hook("msg_envelope");
  312.                 $td_str .= '</small></b>';
  313.                 echo html_tag'td',
  314.                                $td_str,
  315.                                'center',
  316.                                $hlt_color,
  317.                                'nowrap' );
  318.                 break;
  319.             case 6/* size */
  320.                 echo html_tag'td',
  321.                                $bold $fontstr show_readable_size($msg['SIZE'].
  322.                                $fontstr_end $bold_end,
  323.                                'right',
  324.                                $hlt_color );
  325.                 break;
  326.             }
  327.             ++$col;
  328.         }
  329.     }
  330.     if ($not_last{
  331.         echo '</tr>' "\n" '<tr><td colspan="' $col '" bgcolor="' .
  332.              $color[0'" height="1"></td></tr>' "\n";
  333.     else {
  334.         echo '</tr>'."\n";
  335.     }
  336. }
  337.  
  338. function getServerMessages($imapConnection$start_msg$show_num$num_msgs$id{
  339.     if ($id != 'no'{
  340.         $id array_slice($id($start_msg-1)$show_num);
  341.         $end $start_msg $show_num 1;
  342.         if ($num_msgs $show_num{
  343.             $end_loop $num_msgs;
  344.         else if ($end $num_msgs{
  345.             $end_loop $num_msgs $start_msg 1;
  346.         else {
  347.             $end_loop $show_num;
  348.         }
  349.         return fillMessageArray($imapConnection,$id,$end_loop,$show_num);
  350.     else {
  351.         return false;
  352.     }
  353. }
  354.  
  355. function getThreadMessages($imapConnection$start_msg$show_num$num_msgs{
  356.     $id get_thread_sort($imapConnection);
  357.     return getServerMessages($imapConnection$start_msg$show_num$num_msgs$id);
  358. }
  359.  
  360. function getServerSortMessages($imapConnection$start_msg$show_num,
  361.                                $num_msgs$server_sort_order$mbxresponse{
  362.     $id sqimap_get_sort_order($imapConnection$server_sort_order,$mbxresponse);
  363.     return getServerMessages($imapConnection$start_msg$show_num$num_msgs$id);
  364. }
  365.  
  366. function getSelfSortMessages($imapConnection$start_msg$show_num,
  367.                               $num_msgs$sort$mbxresponse{
  368.     $msgs array();
  369.     if ($num_msgs >= 1{
  370.         $id sqimap_get_php_sort_order ($imapConnection$mbxresponse);
  371.         if ($sort != {
  372.             $end $num_msgs;
  373.             $end_loop $end;
  374.             /* set shownum to 999999 to fool sqimap_get_small_header_list
  375.                and rebuild the msgs_str to 1:* */
  376.             $show_num 999999;
  377.         else {
  378.             /* if it's not sorted */
  379.             if ($start_msg ($show_num 1$num_msgs{
  380.                 $end_msg $start_msg ($show_num 1);
  381.             else {
  382.                 $end_msg $num_msgs;
  383.             }
  384.             if ($end_msg $start_msg{
  385.                 $start_msg $start_msg $show_num;
  386.                 if ($start_msg 1{
  387.                     $start_msg 1;
  388.                 }
  389.             }
  390.             $id array_slice(array_reverse($id)($start_msg-1)$show_num);
  391.             $end $start_msg $show_num 1;
  392.             if ($num_msgs $show_num{
  393.                 $end_loop $num_msgs;
  394.             else if ($end $num_msgs{
  395.                 $end_loop $num_msgs $start_msg 1;
  396.             else {
  397.                 $end_loop $show_num;
  398.             }
  399.         }
  400.         $msgs fillMessageArray($imapConnection,$id,$end_loop$show_num);
  401.     }
  402.     return $msgs;
  403. }
  404.  
  405.  
  406.  
  407. /*
  408.  * This function loops through a group of messages in the mailbox
  409.  * and shows them to the user.
  410.  */
  411. function showMessagesForMailbox($imapConnection$mailbox$num_msgs,
  412.                                 $start_msg$sort$color$show_num,
  413.                                 $use_cache$mode=''{
  414.     global $msgs$msort$auto_expunge$thread_sort_messages,
  415.            $allow_server_sort$server_sort_order;
  416.  
  417.     /*
  418.      * For some reason, on PHP 4.3+, this being unset, and set in the session causes havoc
  419.      * so setting it to an empty array beforehand seems to clean up the issue, and stopping the
  420.      * "Your script possibly relies on a session side-effect which existed until PHP 4.2.3" error
  421.      */
  422.  
  423.     if (!isset($msort)) {
  424.         $msort array();
  425.     }
  426.  
  427.     if (!isset($msgs)) {
  428.         $msgs array();
  429.     }
  430.  
  431.     //$start = microtime();
  432.     /* If autoexpunge is turned on, then do it now. */
  433.     $mbxresponse sqimap_mailbox_select($imapConnection$mailbox);
  434.     $srt $sort;
  435.     /* If autoexpunge is turned on, then do it now. */
  436.     if ($auto_expunge == true{
  437.         $exp_cnt sqimap_mailbox_expunge($imapConnection$mailboxfalse'');
  438.         $mbxresponse['EXISTS'$mbxresponse['EXISTS'$exp_cnt;
  439.         $num_msgs $mbxresponse['EXISTS'];
  440.     }
  441.  
  442.     if ($mbxresponse['EXISTS'0{
  443.         /* if $start_msg is lower than $num_msgs, we probably deleted all messages
  444.          * in the last page. We need to re-adjust the start_msg
  445.          */
  446.  
  447.         if($start_msg $num_msgs{
  448.             $start_msg -= $show_num;
  449.             if($start_msg 1{
  450.                 $start_msg 1;
  451.             }
  452.         }
  453.  
  454.         /* This code and the next if() block check for
  455.          * server-side sorting methods. The $id array is
  456.          * formatted and $sort is set to 6 to disable
  457.          * SM internal sorting
  458.          */
  459.  
  460.         if ($thread_sort_messages == 1{
  461.             $mode 'thread';
  462.         elseif ($allow_server_sort == 1{
  463.             $mode 'serversort';
  464.         else {
  465.             $mode '';
  466.         }
  467.  
  468.         if ($use_cache{
  469.             sqgetGlobalVar('msgs'$msgsSQ_SESSION);
  470.             sqgetGlobalVar('msort'$msortSQ_SESSION);
  471.         else {
  472.             sqsession_unregister('msort');
  473.             sqsession_unregister('msgs');
  474.         }
  475.         switch ($mode{
  476.             case 'thread':
  477.                 $id   get_thread_sort($imapConnection);
  478.                 $msgs getServerMessages($imapConnection$start_msg$show_num$num_msgs$id);
  479.                 if ($msgs === false{
  480.                     echo '<b><small><center><font color="red">' .
  481.                         _("Thread sorting is not supported by your IMAP server."'<br />' .
  482.                         _("Please contact your system administrator and report this error.".
  483.                         '</font></center></small></b>';
  484.                     $thread_sort_messages 0;
  485.                     $msort $msgs array();
  486.                 else {
  487.                     $msort$msgs;
  488.                     $sort 6;
  489.                 }
  490.                 break;
  491.             case 'serversort':
  492.                 $id   sqimap_get_sort_order($imapConnection$sort$mbxresponse);
  493.                 $msgs getServerMessages($imapConnection$start_msg$show_num$num_msgs$id);
  494.                 if ($msgs === false{
  495.                     echo '<b><small><center><font color="red">' .
  496.                         _"Server-side sorting is not supported by your IMAP server."'<br />' .
  497.                         _("Please contact your system administrator and report this error.".
  498.                         '</font></center></small></b>';
  499.                     $sort $server_sort_order;
  500.                     $allow_server_sort FALSE;
  501.                     $msort $msgs array();
  502.                     $id array();
  503.                 else {
  504.                     $msort $msgs;
  505.                     $sort 6;
  506.                 }
  507.                 break;
  508.             default:
  509.                 if (!$use_cache{
  510.                     $msgs getSelfSortMessages($imapConnection$start_msg$show_num,
  511.                                                 $num_msgs$sort$mbxresponse);
  512.                     $msort calc_msort($msgs$sort$mailbox);
  513.                 /* !use cache */
  514.                 break;
  515.         // switch
  516.         sqsession_register($msort'msort');
  517.         sqsession_register($msgs,  'msgs');
  518.  
  519.     /* if exists > 0 */
  520.  
  521.     $res getEndMessage($start_msg$show_num$num_msgs);
  522.     $start_msg $res[0];
  523.     $end_msg   $res[1];
  524.  
  525.     if ($num_msgs 0{
  526.         $paginator_str get_paginator_str($mailbox$start_msg$end_msg,
  527.                                            $num_msgs$show_num$sort);
  528.     else {
  529.         $paginator_str '';
  530.     }
  531.  
  532.     $msg_cnt_str get_msgcnt_str($start_msg$end_msg$num_msgs);
  533.  
  534.     do_hook('mailbox_index_before');
  535.  
  536.     $safe_name preg_replace("/[^0-9A-Za-z_]/"'_'$mailbox);
  537.     $form_name "FormMsgs" $safe_name;
  538.     echo '<form name="' $form_name '" method="post" action="move_messages.php">' ."\n" .
  539.         '<input type="hidden" name="smtoken" value="'.sm_generate_security_token().'">' "\n" .
  540.         '<input type="hidden" name="mailbox" value="'.sm_encode_html_special_chars($mailbox).'">' "\n" .
  541.         '<input type="hidden" name="startMessage" value="'.sm_encode_html_special_chars($start_msg).'">' "\n";
  542.     
  543.     echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">';
  544.     echo '<tr><td>';
  545.  
  546.     mail_message_listing_beginning($imapConnection$mailbox$sort,
  547.                                   $msg_cnt_str$paginator_str$start_msg);
  548.     /* line between the button area and the list */
  549.     echo '<tr><td height="5" bgcolor="'.$color[4].'"></td></tr>';
  550.  
  551.     echo '<tr><td>';
  552.     echo '    <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
  553.     echo '     <tr><td>';
  554.     echo '       <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[5].'">';
  555.     printHeader($mailbox$srt$color!$thread_sort_messages);
  556.  
  557.     displayMessageArray($imapConnection$num_msgs$start_msg,
  558.                         $msort$mailbox$sort$color$show_num,0,0);
  559.     echo '</table></td></tr></table>';
  560.  
  561.     mail_message_listing_end($num_msgs$paginator_str$msg_cnt_str$color);
  562.     echo '</table>';
  563.  
  564.     echo "\n</form>\n\n";
  565.     
  566.     //$t = elapsed($start);
  567.     //echo("elapsed time = $t seconds\n");
  568. }
  569.  
  570. function calc_msort($msgs$sort$mailbox 'INBOX'{
  571.  
  572.     /*
  573.      * 0 = Date (up)
  574.      * 1 = Date (dn)
  575.      * 2 = Name (up)
  576.      * 3 = Name (dn)
  577.      * 4 = Subject (up)
  578.      * 5 = Subject (dn)
  579.      * 6 = default no sort
  580.      * 7 - UNUSED
  581.      * 8 = Size (up)
  582.      * 9 = Size (dn)
  583.      */
  584.  
  585.     global $internal_date_sort;
  586.  
  587.     if (($sort == 0|| ($sort == 1)) {
  588.         foreach ($msgs as $item{
  589.             if ($internal_date_sort)
  590.                 $msort[$item['RECEIVED_TIME_STAMP'];
  591.             else
  592.                 $msort[$item['TIME_STAMP'];
  593.         }
  594.     elseif (($sort == 2|| ($sort == 3)) {
  595.         $fld_sort (handleAsSent($mailbox)?'TO-SORT':'FROM-SORT');
  596.         foreach ($msgs as $item{
  597.             $msort[$item[$fld_sort];
  598.         }
  599.     elseif (($sort == 4|| ($sort == 5)) {
  600.         foreach ($msgs as $item{
  601.             $msort[$item['SUBJECT-SORT'];
  602.         }
  603.     elseif (($sort == 8|| ($sort == 9)) {
  604.        foreach ($msgs as $item{
  605.            $msort[$item['SIZE'];
  606.        }
  607.     else {
  608.         $msort $msgs;
  609.     }
  610.     if ($sort != 6{
  611.         if ($sort 2{
  612.             asort($msort);
  613.         else {
  614.             arsort($msort);
  615.         }
  616.     }
  617.     return $msort;
  618. }
  619.  
  620. function fillMessageArray($imapConnection$id$count$show_num=false{
  621.     return sqimap_get_small_header_list($imapConnection$id$show_num);
  622. }
  623.  
  624.  
  625. /* Generic function to convert the msgs array into an HTML table. */
  626. function displayMessageArray($imapConnection$num_msgs$start_msg,
  627.                              $msort$mailbox$sort$color,
  628.                              $show_num$where=0$what=0{
  629.     global $imapServerAddress$use_mailbox_cache$index_order,
  630.            $indent_array$thread_sort_messages$allow_server_sort,
  631.            $server_sort_order$PHP_SELF;
  632.  
  633.     $res getEndMessage($start_msg$show_num$num_msgs);
  634.     $start_msg $res[0];
  635.     $end_msg   $res[1];
  636.  
  637.     $urlMailbox urlencode($mailbox);
  638.  
  639.     /* get indent level for subject display */
  640.     if ($thread_sort_messages == && $num_msgs{
  641.         $indent_array get_parent_level($imapConnection);
  642.     }
  643.  
  644.     $real_startMessage $start_msg;
  645.     if ($sort == 6{
  646.         if ($end_msg $start_msg $show_num 1{
  647.             $end_msg $end_msg $start_msg 1;
  648.             $start_msg 1;
  649.         else if ($start_msg $show_num{
  650.             $end_msg $show_num;
  651.             $start_msg 1;
  652.         }
  653.     }
  654.     $endVar $end_msg 1;
  655.  
  656.     /*
  657.      * Loop through and display the info for each message.
  658.      * ($t is used for the checkbox number)
  659.      */
  660.     $t 0;
  661.  
  662.     /* messages display */
  663.  
  664.     if (!$num_msgs{
  665.     /* if there's no messages in this folder */
  666.         echo html_tag'tr',
  667.                 html_tag'td',
  668.                           "<br><b>" _("THIS FOLDER IS EMPTY""</b><br>&nbsp;",
  669.                           'center',
  670.                           $color[4],
  671.                           'colspan="' count($index_order'"'
  672.                 )
  673.         );
  674.     elseif ($start_msg == $end_msg{
  675.     /* if there's only one message in the box, handle it differently. */
  676.         if ($sort != 6{
  677.             $i $start_msg;
  678.         else {
  679.             $i 1;
  680.         }
  681.         reset($msort);
  682.         $k 0;
  683.         do {
  684.             $key key($msort);
  685.             next($msort);
  686.             $k++;
  687.         while (isset ($key&& ($k $i));
  688.         printMessageInfo($imapConnection$ttrue$key$mailbox,
  689.                          $real_startMessage$where$what);
  690.     else {
  691.         $i $start_msg;
  692.         reset($msort);
  693.         $k 0;
  694.         do {
  695.             $key key($msort);
  696.             next($msort);
  697.             $k++;
  698.         while (isset ($key&& ($k $i));
  699.         $not_last true;
  700.         do {
  701.             if (!$i || $i == $endVar-1$not_last false;
  702.                 printMessageInfo($imapConnection$t$not_last$key$mailbox,
  703.                                  $real_startMessage$where$what);
  704.             $key key($msort);
  705.             $t++;
  706.             $i++;
  707.             next($msort);
  708.         while ($i && $i $endVar);
  709.     }
  710. }
  711.  
  712. /*
  713.  * Displays the standard message list header. To finish the table,
  714.  * you need to do a "</table></table>";
  715.  *
  716.  * $moveURL is the URL to submit the delete/move form to
  717.  * $mailbox is the current mailbox
  718.  * $sort is the current sorting method (-1 for no sorting available [searches])
  719.  * $Message is a message that is centered on top of the list
  720.  * $More is a second line that is left aligned
  721.  */
  722.  
  723. function mail_message_listing_beginning ($imapConnection,
  724.                                          $mailbox ''$sort = -1,
  725.                                          $msg_cnt_str '',
  726.                                          $paginator '&nbsp;',
  727.                                          $start_msg 1{
  728.     global $color$auto_expunge$base_uri$thread_sort_messages,
  729.            $allow_thread_sort$allow_server_sort$server_sort_order,
  730.            $PHP_SELF;
  731.  
  732.     $php_self $PHP_SELF;
  733.     /* fix for incorrect $PHP_SELF */
  734.     if (strpos($php_self'move_messages.php')) {
  735.         $php_self str_replace('move_messages.php''right_main.php'$php_self);
  736.     }
  737.     $urlMailbox urlencode($mailbox);
  738.  
  739.     if (preg_match('/^(.+)\?.+$/',$php_self,$regs)) {
  740.         $source_url $regs[1];
  741.     else {
  742.         $source_url $php_self;
  743.     }
  744.  
  745.     /*
  746.      * This is the beginning of the message list table.
  747.      * It wraps around all messages
  748.      */
  749.  
  750.     if (!empty($paginator&& !empty($msg_cnt_str)) {
  751.  
  752.         echo html_tag'table' ,
  753.             html_tag'tr',
  754.                 html_tag'td' ,
  755.                     html_tag'table' ,
  756.                         html_tag'tr',
  757.                             html_tag'td'$paginator'left' .
  758.                             html_tag'td'$msg_cnt_str'right' )
  759.                         )
  760.                     ''$color[4]'border="0" width="100%" cellpadding="1"  cellspacing="0"' )
  761.                 'left''''' )
  762.             ''$color[0)
  763.          '''''border="0" width="100%" cellpadding="1"  cellspacing="0"' );
  764.     }
  765.     /* line between header and button area */
  766.         echo '</td></tr><tr><td height="5" bgcolor="'.$color[4].'"></td></tr>';
  767.  
  768.         echo html_tag'tr' "\n"
  769.         . html_tag'td' ,'' 'left''''' )
  770.          . html_tag'table' ,'' ''$color[9]'border="0" width="100%" cellpadding="1"  cellspacing="0"' )
  771.           . '<tr><td>'
  772.            . html_tag'table' ,'' ''$color[0]'border="0" width="100%" cellpadding="1"  cellspacing="0"' )
  773.             . html_tag'tr',
  774.              getSmallStringCell(_("Move Selected To")'left''nowrap'.
  775.              getSmallStringCell(_("Transform Selected Messages")'right')
  776.             )
  777.             . html_tag'tr' ."\n"
  778.             . html_tag'td''''left''''valign="middle" nowrap' );
  779.             getMbxList($imapConnection);
  780.             echo getButton('SUBMIT''moveButton',_("Move")) "\n";
  781.             echo getButton('SUBMIT''attache',_("Forward")) "\n";
  782.             do_hook('mailbox_display_buttons');
  783.  
  784.     echo "      </small></td>\n"
  785.          . html_tag'td''''right''''nowrap' );
  786.  
  787.     if (!$auto_expunge{
  788.         echo getButton('SUBMIT''expungeButton',_("Expunge")) ."\n";
  789.     }
  790.  
  791.     echo getButton('SUBMIT''markRead',_("Read")) "\n";
  792.     echo getButton('SUBMIT''markUnread',_("Unread")) "\n";
  793.     echo getButton('SUBMIT''delete',_("Delete")) ."&nbsp;\n";
  794.     if (!strpos($php_self,'mailbox')) {
  795.         $location $php_self.'?mailbox=INBOX&amp;startMessage=1';
  796.     else {
  797.         $location $php_self;
  798.     }
  799.  
  800. //    $location = urlencode($location);
  801.  
  802.     echo '<input type="hidden" name="location" value="'.$location.'">';
  803.     echo "</td>\n"
  804.          . "   </tr>\n";
  805.  
  806.     /* draws thread sorting links */
  807.     if ($allow_thread_sort == TRUE{
  808.         if ($thread_sort_messages == {
  809.             $set_thread 2;
  810.             $thread_name _("Unthread View");
  811.         elseif ($thread_sort_messages == 0{
  812.             $set_thread 1;
  813.             $thread_name _("Thread View");
  814.         }
  815.         echo html_tag'tr' ,
  816.                     html_tag'td' ,
  817.                               '&nbsp;<small><a href="' $source_url '?sort='
  818.                               . "$sort'&amp;start_messages=1&amp;set_thread=' "$set_thread"
  819.                               . '&amp;mailbox=' urlencode($mailbox'">' $thread_name
  820.                               . '</a></small>&nbsp;'
  821.                      '''''' )
  822.                  '''''' );
  823.     }
  824.  
  825.     echo "</table></td></tr></table></td></tr>\n";
  826.  
  827.     do_hook('mailbox_form_before');
  828.  
  829.     /* if using server sort we highjack the
  830.      * the $sort var and use $server_sort_order
  831.      * instead. but here we reset sort for a bit
  832.      * since its easy
  833.      */
  834.     if ($allow_server_sort == TRUE{
  835.         $sort $server_sort_order;
  836.     }
  837. }
  838.  
  839. function mail_message_listing_end($num_msgs$paginator_str$msg_cnt_str$color{
  840.   if ($num_msgs{
  841.     /* space between list and footer */
  842.     echo '<tr><td height="5" bgcolor="'.$color[4].'" colspan="1">';
  843.  
  844.     echo '</td></tr><tr><td>';
  845.     echo html_tag'table',
  846.             html_tag'tr',
  847.                 html_tag'td',
  848.                     html_tag'table',
  849.                         html_tag'tr',
  850.                             html_tag'td'$paginator_str .
  851.                             html_tag'td'$msg_cnt_str'right' )
  852.                         )
  853.                     ''$color[4]'width="100%" border="0" cellpadding="1" cellspacing="0"' )
  854.                 )
  855.             )
  856.         ''$color[9]'width="100%" border="0" cellpadding="1"  cellspacing="0"' );
  857.     echo '</td></tr>';
  858.   }
  859.     /* End of message-list table */
  860.  
  861.     do_hook('mailbox_index_after');
  862. }
  863.  
  864. function printHeader($mailbox$sort$color$showsort=true{
  865.  
  866.     global $index_order$internal_date_sort$imap_server_type;
  867.  
  868.     // gmail doesn't support custom sorting, so we always
  869.     // hide the sort buttons when using gmail
  870.     if ($imap_server_type == 'gmail'$showsort false;
  871.  
  872.     echo html_tag'tr' ,'' 'center'$color[5);
  873.  
  874.     /* calculate the width of the subject column based on the
  875.      * widths of the other columns */
  876.     $widths array(1=>1,2=>25,3=>5,4=>0,5=>1,6=>5);
  877.     $subjectwidth 100;
  878.     foreach($index_order as $item{
  879.         $subjectwidth -= $widths[$item];
  880.     }
  881.  
  882.     foreach ($index_order as $item{
  883.         switch ($item{
  884.         case 1/* checkbox */
  885.         case 5/* flags */
  886.             echo html_tag'td' ,'&nbsp;' '''''width="1%"' );
  887.             break;
  888.         case 2/* from */
  889.             if (handleAsSent($mailbox)) {
  890.                 echo html_tag'td' ,'' 'left''''width="25%"' )
  891.                      . '<b>' _("To"'</b>';
  892.             else {
  893.                 echo html_tag'td' ,'' 'left''''width="25%"' )
  894.                      . '<b>' _("From"'</b>';
  895.             }
  896.             if ($showsort{
  897.                 ShowSortButton($sort$mailbox23);
  898.             }
  899.             echo "</td>\n";
  900.             break;
  901.         case 3/* date */
  902.             echo html_tag'td' ,'' 'left''''width="5%" nowrap' )
  903.                  . '<b>'
  904.                  . ($internal_date_sort && ($sort == || $sort == 1_("Received"_("Date"))
  905.                  . '</b>';
  906.             if ($showsort{
  907.                 ShowSortButton($sort$mailbox01);
  908.             }
  909.             echo "</td>\n";
  910.             break;
  911.         case 4/* subject */
  912.             echo html_tag'td' ,'' 'left''''width="'.$subjectwidth.'%"' )
  913.                  . '<b>' _("Subject"'</b>';
  914.             if ($showsort{
  915.                 ShowSortButton($sort$mailbox45);
  916.             }
  917.             echo "</td>\n";
  918.             break;
  919.         case 6/* size */
  920.             echo html_tag'td' ,'' 'left''''width="5%" nowrap' )
  921.                  . '<b>' _("Size"'</b>';
  922.             if ($showsort{
  923.                 ShowSortButton($sort$mailbox89);
  924.             }
  925.             echo "</td>\n";
  926.             break;
  927.         }
  928.     }
  929.     echo "</tr>\n";
  930. }
  931.  
  932.  
  933. /*
  934.  * This function shows the sort button. Isn't this a good comment?
  935.  */
  936. function ShowSortButton($sort$mailbox$Up$Down {
  937.     global $PHP_SELF;
  938.     /* Figure out which image we want to use. */
  939.     if ($sort != $Up && $sort != $Down{
  940.         $img 'sort_none.png';
  941.         $which $Up;
  942.     elseif ($sort == $Up{
  943.         $img 'up_pointer.png';
  944.         $which $Down;
  945.     else {
  946.         $img 'down_pointer.png';
  947.         $which 6;
  948.     }
  949.  
  950.     if (preg_match('/^(.+)\?.+$/',$PHP_SELF,$regs)) {
  951.         $source_url $regs[1];
  952.     else {
  953.         $source_url $PHP_SELF;
  954.     }
  955.  
  956.     /* Now that we have everything figured out, show the actual button. */
  957.     echo ' <a href="' $source_url .'?newsort=' $which
  958.          . '&amp;startMessage=1&amp;mailbox=' urlencode($mailbox)
  959.          . '"><img src="../images/' $img
  960.          . '" border="0" width="12" height="10" alt="sort"></a>';
  961. }
  962.  
  963. function get_selectall_link($start_msg$sort{
  964.     global $checkall$what$where$mailbox$javascript_on;
  965.     global $PHP_SELF$PG_SHOWNUM;
  966.  
  967.     $result '';
  968.     if ($javascript_on{
  969.         $safe_name preg_replace("/[^0-9A-Za-z_]/"'_'$mailbox);
  970.         $func_name "CheckAll" $safe_name;
  971.         $form_name "FormMsgs" $safe_name;
  972.         $result '<script language="JavaScript" type="text/javascript">'
  973.                 . "\n<!-- \n"
  974.                 . "function " $func_name "() {\n"
  975.                 . "  for (var i = 0; i < document." $form_name ".elements.length; i++) {\n"
  976.                 . "    if(document." $form_name ".elements[i].type == 'checkbox'){\n"
  977.                 . "      document." $form_name ".elements[i].checked = "
  978.                 . "        !(document." $form_name ".elements[i].checked);\n"
  979.                 . "    }\n"
  980.                 . "  }\n"
  981.                 . "}\n"
  982.                 . "//-->\n"
  983.                 . '</script><a href="javascript:void(0)" onClick="' $func_name '();">' _("Toggle All")
  984. /*                . '</script><a href="javascript:' . $func_name . '()">' . _("Toggle All")*/
  985.                 . "</a>\n";
  986.     else {
  987.         if (strpos($PHP_SELF"?")) {
  988.             $result .= "<a href=\"$PHP_SELF&amp;mailbox=urlencode($mailbox)
  989.                     .  "&amp;startMessage=$start_msg&amp;sort=$sort&amp;checkall=";
  990.         else {
  991.             $result .= "<a href=\"$PHP_SELF?mailbox=urlencode($mailbox)
  992.                     .  "&amp;startMessage=$start_msg&amp;sort=$sort&amp;checkall=";
  993.         }
  994.         if (isset($checkall&& $checkall == '1'{
  995.             $result .= '0';
  996.         else {
  997.             $result .= '1';
  998.         }
  999.  
  1000.         if (isset($where&& isset($what)) {
  1001.             $result .= '&amp;where=' urlencode($where)
  1002.                     .  '&amp;what=' urlencode($what);
  1003.         }
  1004.         $result .= "\">";
  1005.  
  1006.         if (isset($checkall&& ($checkall == '1')) {
  1007.             $result .= _("Unselect All");
  1008.         else {
  1009.             $result .= _("Select All");
  1010.         }
  1011.         $result .= "</a>\n";
  1012.     }
  1013.  
  1014.     /* Return our final result. */
  1015.     return ($result);
  1016. }
  1017.  
  1018. /*
  1019.  * This function computes the "Viewing Messages..." string.
  1020.  */
  1021. function get_msgcnt_str($start_msg$end_msg$num_msgs{
  1022.     /* Compute the $msg_cnt_str. */
  1023.     $result '';
  1024.     if ($start_msg $end_msg{
  1025.         $result sprintf(_("Viewing Messages: %s to %s (%s total)"),
  1026.                   '<b>'.$start_msg.'</b>''<b>'.$end_msg.'</b>'$num_msgs);
  1027.     else if ($start_msg == $end_msg{
  1028.         $result sprintf(_("Viewing Message: %s (%s total)")'<b>'.$start_msg.'</b>'$num_msgs);
  1029.     else {
  1030.         $result '<br>';
  1031.     }
  1032.     /* Return our result string. */
  1033.     return ($result);
  1034. }
  1035.  
  1036. /*
  1037.  * Generate a paginator link.
  1038.  */
  1039. function get_paginator_link($box$start_msg$use$text{
  1040.     global $PHP_SELF;
  1041.  
  1042.     $result "<a href=\"right_main.php?use_mailbox_cache=$use"
  1043.             . "&amp;startMessage=$start_msg&amp;mailbox=$box\" "
  1044.             . ">$text</a>";
  1045.     return ($result);
  1046. /*
  1047.     if (preg_match('/^(.+)\?.+$/',$PHP_SELF,$regs)) {
  1048.         $source_url = $regs[1];
  1049.     } else {
  1050.         $source_url = $PHP_SELF;
  1051.     }
  1052.  
  1053.     $result = '<A HREF="'. $source_url . "?use_mailbox_cache=$use"
  1054.             . "&amp;startMessage=$start_msg&amp;mailbox=$box\" "
  1055.             . ">$text</A>";
  1056.     return ($result);
  1057. */
  1058. }
  1059.  
  1060. /*
  1061.  * This function computes the paginator string.
  1062.  */
  1063. function get_paginator_str($box$start_msg$end_msg$num_msgs,
  1064.                            $show_num$sort{
  1065.     global $username$data_dir$use_mailbox_cache$color$PG_SHOWNUM;
  1066.  
  1067.     /* Initialize paginator string chunks. */
  1068.     $prv_str '';
  1069.     $nxt_str '';
  1070.     $pg_str  '';
  1071.     $all_str '';
  1072.     $tgl_str '';
  1073.  
  1074.     $box urlencode($box);
  1075.  
  1076.     /* Create simple strings that will be creating the paginator. */
  1077.     $spc '&nbsp;';     /* This will be used as a space. */
  1078.     $sep '|';          /* This will be used as a seperator. */
  1079.  
  1080.     /* Get some paginator preference values. */
  1081.     $pg_sel getPref($data_dir$username'page_selector'SMPREF_ON);
  1082.     $pg_max getPref($data_dir$username'page_selector_max'PG_SEL_MAX);
  1083.  
  1084.     /* Make sure that our start message number is not too big. */
  1085.     $start_msg min($start_msg$num_msgs);
  1086.  
  1087.     /* Decide whether or not we will use the mailbox cache. */
  1088.     /* Not sure why $use_mailbox_cache is even passed in.   */
  1089.     if ($sort == 6{
  1090.         $use 0;
  1091.     else {
  1092.         $use 1;
  1093.     }
  1094.  
  1095.     /* Compute the starting message of the previous and next page group. */
  1096.     $next_grp $start_msg $show_num;
  1097.     $prev_grp $start_msg $show_num;
  1098.  
  1099.     /* Compute the basic previous and next strings. */
  1100.     if (($next_grp <= $num_msgs&& ($prev_grp >= 0)) {
  1101.         $prv_str get_paginator_link($box$prev_grp$use_("Previous"));
  1102.         $nxt_str get_paginator_link($box$next_grp$use_("Next"));
  1103.     else if (($next_grp $num_msgs&& ($prev_grp >= 0)) {
  1104.         $prv_str get_paginator_link($box$prev_grp$use_("Previous"));
  1105.         $nxt_str "<font color=\"$color[9]\">"._("Next")."</font>\n";
  1106.     else if (($next_grp <= $num_msgs&& ($prev_grp 0)) {
  1107.         $prv_str "<font color=\"$color[9]\">"._("Previous"'</font>';
  1108.         $nxt_str get_paginator_link($box$next_grp$use_("Next"));
  1109.     }
  1110.  
  1111.     /* Page selector block. Following code computes page links. */
  1112.     if ($pg_sel && ($num_msgs $show_num)) {
  1113.         /* Most importantly, what is the current page!!! */
  1114.         $cur_pg intval($start_msg $show_num1;
  1115.  
  1116.         /* Compute total # of pages and # of paginator page links. */
  1117.         $tot_pgs ceil($num_msgs $show_num);  /* Total number of Pages */
  1118.         $vis_pgs min($pg_max$tot_pgs 1);   /* Visible Pages    */
  1119.  
  1120.         /* Compute the size of the four quarters of the page links. */
  1121.  
  1122.         /* If we can, just show all the pages. */
  1123.         if (($tot_pgs 1<= $pg_max{
  1124.             $q1_pgs $cur_pg 1;
  1125.             $q2_pgs $q3_pgs 0;
  1126.             $q4_pgs $tot_pgs $cur_pg;
  1127.  
  1128.         /* Otherwise, compute some magic to choose the four quarters. */
  1129.         else {
  1130.             /*
  1131.              * Compute the magic base values. Added together,
  1132.              * these values will always equal to the $pag_pgs.
  1133.              * NOTE: These are DEFAULT values and do not take
  1134.              * the current page into account. That is below.
  1135.              */
  1136.             $q1_pgs floor($vis_pgs/4);
  1137.             $q2_pgs round($vis_pgs/40);
  1138.             $q3_pgs ceil($vis_pgs/4);
  1139.             $q4_pgs round(($vis_pgs $q2_pgs)/30);
  1140.  
  1141.             /* Adjust if the first quarter contains the current page. */
  1142.             if (($cur_pg $q1_pgs1{
  1143.                 $extra_pgs ($q1_pgs ($cur_pg 1)) $q2_pgs;
  1144.                 $q1_pgs $cur_pg 1;
  1145.                 $q2_pgs 0;
  1146.                 $q3_pgs += ceil($extra_pgs 2);
  1147.                 $q4_pgs += floor($extra_pgs 2);
  1148.  
  1149.             /* Adjust if the first and second quarters intersect. */
  1150.             else if (($cur_pg $q2_pgs ceil($q2_pgs/3)) <= $q1_pgs{
  1151.                 $extra_pgs $q2_pgs;
  1152.                 $extra_pgs -= ceil(($cur_pg $q1_pgs 13/4);
  1153.                 $q2_pgs ceil(($cur_pg $q1_pgs 13/4);
  1154.                 $q3_pgs += ceil($extra_pgs 2);
  1155.                 $q4_pgs += floor($extra_pgs 2);
  1156.  
  1157.             /* Adjust if the fourth quarter contains the current page. */
  1158.             else if (($cur_pg $q4_pgs>= $tot_pgs{
  1159.                 $extra_pgs ($q4_pgs ($tot_pgs $cur_pg)) $q3_pgs;
  1160.                 $q3_pgs 0;
  1161.                 $q4_pgs $tot_pgs $cur_pg;
  1162.                 $q1_pgs += floor($extra_pgs 2);
  1163.                 $q2_pgs += ceil($extra_pgs 2);
  1164.  
  1165.             /* Adjust if the third and fourth quarter intersect. */
  1166.             else if (($cur_pg $q3_pgs>= ($tot_pgs $q4_pgs)) {
  1167.                 $extra_pgs $q3_pgs;
  1168.                 $extra_pgs -= ceil(($tot_pgs $cur_pg $q4_pgs3/4);
  1169.                 $q3_pgs ceil(($tot_pgs $cur_pg $q4_pgs3/4);
  1170.                 $q1_pgs += floor($extra_pgs 2);
  1171.                 $q2_pgs += ceil($extra_pgs 2);
  1172.             }
  1173.         }
  1174.  
  1175.         /*
  1176.          * I am leaving this debug code here, commented out, because
  1177.          * it is a really nice way to see what the above code is doing.
  1178.          */
  1179.          // echo "qts =  $q1_pgs/$q2_pgs/$q3_pgs/$q4_pgs = "
  1180.          //     . ($q1_pgs + $q2_pgs + $q3_pgs + $q4_pgs) . '<br>';
  1181.  
  1182.  
  1183.         /* Print out the page links from the compute page quarters. */
  1184.  
  1185.         /* Start with the first quarter. */
  1186.         if (($q1_pgs == 0&& ($cur_pg 1)) {
  1187.             $pg_str .= "...$spc";
  1188.         else {
  1189.             for ($pg 1$pg <= $q1_pgs++$pg{
  1190.                 $start (($pg-1$show_num1;
  1191.                 $pg_str .= get_paginator_link($box$start$use$pg$spc;
  1192.             }
  1193.             if ($cur_pg $q2_pgs $q1_pgs 1{
  1194.                 $pg_str .= "...$spc";
  1195.             }
  1196.         }
  1197.  
  1198.         /* Continue with the second quarter. */
  1199.         for ($pg $cur_pg $q2_pgs$pg $cur_pg++$pg{
  1200.             $start (($pg-1$show_num1;
  1201.             $pg_str .= get_paginator_link($box$start$use$pg$spc;
  1202.         }
  1203.  
  1204.         /* Now print the current page. */
  1205.         $pg_str .= $cur_pg $spc;
  1206.  
  1207.         /* Next comes the third quarter. */
  1208.         for ($pg $cur_pg 1$pg <= $cur_pg $q3_pgs++$pg{
  1209.             $start (($pg-1$show_num1;
  1210.             $pg_str .= get_paginator_link($box$start$use$pg$spc;
  1211.         }
  1212.  
  1213.         /* And last, print the forth quarter page links. */
  1214.         if (($q4_pgs == 0&& ($cur_pg $tot_pgs)) {
  1215.             $pg_str .= "...$spc";
  1216.         else {
  1217.             if (($tot_pgs $q4_pgs($cur_pg $q3_pgs)) {
  1218.                 $pg_str .= "...$spc";
  1219.             }
  1220.             for ($pg $tot_pgs $q4_pgs 1$pg <= $tot_pgs++$pg{
  1221.                 $start (($pg-1$show_num1;
  1222.                 $pg_str .= get_paginator_link($box$start$use$pg$spc;
  1223.             }
  1224.         }
  1225.     else if ($PG_SHOWNUM == 999999{
  1226.         $pg_str "<a href=\"right_main.php?PG_SHOWALL=0"
  1227.                 . "&amp;use_mailbox_cache=$use&amp;startMessage=1&amp;mailbox=$box\" "
  1228.                 . ">" ._("Paginate"'</a>' $spc;
  1229.     }
  1230.  
  1231.     /* If necessary, compute the 'show all' string. */
  1232.     if (($prv_str != ''|| ($nxt_str != '')) {
  1233.         $all_str "<a href=\"right_main.php?PG_SHOWALL=1"
  1234.                  . "&amp;use_mailbox_cache=$use&amp;startMessage=1&amp;mailbox=$box\" "
  1235.                  . ">" _("Show All"'</a>';
  1236.     }
  1237.  
  1238.     /* Last but not least, get the value for the toggle all link. */
  1239.     $tgl_str get_selectall_link($start_msg$sort);
  1240.  
  1241.     /* Put all the pieces of the paginator string together. */
  1242.     /**
  1243.      * Hairy code... But let's leave it like it is since I am not certain
  1244.      * a different approach would be any easier to read. ;)
  1245.      */
  1246.     $result '';
  1247.     $result .= ($prv_str != '' $prv_str $spc $sep $spc '');
  1248.     $result .= ($nxt_str != '' $nxt_str $spc $sep $spc '');
  1249.     $result .= ($pg_str  != '' $pg_str '');
  1250.     $result .= ($all_str != '' $sep $spc $all_str $spc '');
  1251.     $result .= ($result  != '' $sep $spc $tgl_str$tgl_str);
  1252.  
  1253.     /* If the resulting string is blank, return a non-breaking space. */
  1254.     if ($result == ''{
  1255.         $result '&nbsp;';
  1256.     }
  1257.  
  1258.     /* Return our final magical paginator string. */
  1259.     return ($result);
  1260. }
  1261.  
  1262. function processSubject($subject$threadlevel 0{
  1263.     global $languages$squirrelmail_language;
  1264.     /* Shouldn't ever happen -- caught too many times in the IMAP functions */
  1265.     if ($subject == ''{
  1266.         return _("(no subject)");
  1267.     }
  1268.  
  1269.     $trim_at SUBJ_TRIM_AT;
  1270.  
  1271.     /* if this is threaded, subtract two chars per indentlevel */
  1272.     if($threadlevel && $threadlevel <= 10{
  1273.         $trim_at -= (2*$threadlevel);
  1274.     }
  1275.  
  1276.     if (strlen($subject<= $trim_at{
  1277.         return $subject;
  1278.     }
  1279.  
  1280.     $ent_strlen $orig_len strlen($subject);
  1281.     $trim_val $trim_at 5;
  1282.     $ent_offset 0;
  1283.     /*
  1284.      * see if this is entities-encoded string
  1285.      * If so, Iterate through the whole string, find out
  1286.      * the real number of characters, and if more
  1287.      * than 55, substr with an updated trim value.
  1288.      */
  1289.     $step $ent_loc 0;
  1290.     while $ent_loc $trim_val && (($ent_loc strpos($subject'&'$ent_offset)) !== false&&
  1291.             (($ent_loc_end strpos($subject';'$ent_loc+3)) !== false) ) {
  1292.         $trim_val += ($ent_loc_end-$ent_loc);
  1293.         $ent_offset  $ent_loc_end+1;
  1294.         ++$step;
  1295.     }
  1296.  
  1297.     if (($trim_val 50&& (strlen($subject($trim_val))&& (strpos($subject,';',$trim_val($trim_val +6))) {
  1298.         $i strpos($subject,';',$trim_val);
  1299.         if ($i{
  1300.             $trim_val strpos($subject,';',$trim_val);
  1301.         }
  1302.     }
  1303.     if ($ent_strlen <= $trim_at){
  1304.         return $subject;
  1305.     }
  1306.  
  1307.     if (isset($languages[$squirrelmail_language]['XTRA_CODE']&&
  1308.         function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
  1309.         return $languages[$squirrelmail_language]['XTRA_CODE']('strimwidth'$subject$trim_val);
  1310.     }
  1311.  
  1312.     // only print '...' when we're actually dropping part of the subject
  1313.     if(strlen($subject<= $trim_val{
  1314.         return $subject;
  1315.     else {
  1316.         return substr($subject0$trim_val'...';
  1317.     }
  1318. }
  1319.  
  1320. function getMbxList($imapConnection{
  1321.     global $lastTargetMailbox;
  1322.     echo  '         <small>&nbsp;<tt><select name="targetMailbox">';
  1323.     echo sqimap_mailbox_option_list($imapConnectionarray(strtolower($lastTargetMailbox)) );
  1324.     echo '         </select></tt>&nbsp;';
  1325. }
  1326.  
  1327. function getButton($type$name$value{
  1328.     return '<input type="'.$type.'" name="'.$name.'" value="'.$value '">';
  1329. }
  1330.  
  1331. function getSmallStringCell($string$align{
  1332.     return html_tag('td',
  1333.                     '<small>' $string ':&nbsp; </small>',
  1334.                     $align,
  1335.                     '',
  1336.                     'nowrap' );
  1337. }
  1338.  
  1339. function getEndMessage($start_msg$show_num$num_msgs{
  1340.     if ($start_msg ($show_num 1$num_msgs){
  1341.         $end_msg $start_msg ($show_num 1);
  1342.     else {
  1343.         $end_msg $num_msgs;
  1344.     }
  1345.  
  1346.     if ($end_msg $start_msg{
  1347.         $start_msg $start_msg $show_num;
  1348.         if ($start_msg 1{
  1349.             $start_msg 1;
  1350.         }
  1351.     }
  1352.     return (array($start_msg,$end_msg));
  1353. }
  1354.  
  1355. function handleAsSent($mailbox{
  1356.     global $handleAsSent_result;
  1357.  
  1358.     /* First check if this is the sent or draft folder. */
  1359.     $handleAsSent_result isSentMailbox($mailbox|| isDraftMailbox($mailbox);
  1360.  
  1361.     /* Then check the result of the handleAsSent hook. */
  1362.     do_hook('check_handleAsSent_result'$mailbox);
  1363.  
  1364.     /* And return the result. */
  1365.     return $handleAsSent_result;
  1366. }

Documentation generated on Wed, 29 Jul 2015 04:21:47 +0200 by phpDocumentor 1.4.3