Source for file mailbox_display.php
Documentation is available at mailbox_display.php
* This contains functions that display mailbox information, such as the
* table row that has sender, date, subject, etc...
* @copyright © 1999-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: mailbox_display.php,v 1.321.2.36 2006/09/30 06:50:27 tokul Exp $
/** The standard includes.. */
require_once(SM_PATH .
'functions/strings.php');
require_once(SM_PATH .
'functions/html.php');
require_once(SM_PATH .
'class/html.class.php');
require_once(SM_PATH .
'functions/imap_mailbox.php');
* PG_SEL_MAX: default value for page_selector_max
* SUBJ_TRIM_AT: the length at which we trim off subjects
list
($start2, $start1) =
explode(" ", $start);
list
($end2, $end1) =
explode(" ", $end);
$diff1 =
$end1 -
$start1;
$diff2 =
$end2 -
$start2;
$start_msg, $where, $what) {
$color, $msgs, $msort, $td_str, $msg,
$color_string =
$color[4];
if ($GLOBALS['alt_index_colors']) {
if (!isset
($row_count)) {
if (!isset
($color[12])) {
$color_string =
$color[12];
$mailbox =
$boxes[0]['unformatted'];
$msg['FROM'] =
$msg['TO'];
* This is done in case you're looking into Sent folders,
* because you can have multiple receivers.
$senderNames =
$msg['FROM'];
foreach ($senderNames as $senderNames_part) {
if ($senderNames_part[1]) {
echo
html_tag( 'tr','','','','valign="top"') .
"\n";
if (isset
($msg['FLAG_FLAGGED']) &&
($msg['FLAG_FLAGGED'] ==
true)) {
$flag =
"<font color=\"$color[2]\">";
if (!isset
($msg['FLAG_SEEN']) ||
($msg['FLAG_SEEN'] ==
false)) {
if (isset
($msg['FLAG_DELETED']) &&
$msg['FLAG_DELETED']) {
$fontstr =
"<font color=\"$color[9]\">";
$fontstr_end =
'</font>';
$searchstr =
'&where='.
$where.
'&what='.
$what;
if (is_array($message_highlight_list) &&
count($message_highlight_list)) {
foreach ($message_highlight_list as $message_highlight_list_part) {
if (trim($message_highlight_list_part['value']) !=
'') {
$high_val =
strtolower($message_highlight_list_part['value']);
$match_type =
strtoupper($message_highlight_list_part['match_type']);
if($match_type ==
'TO_CC') {
$match =
array('TO', 'CC');
$match =
array($match_type);
foreach($match as $match_type) {
foreach ($msg[$match_type] as $address) {
$hlt_color =
$message_highlight_list_part['color'];
if (strstr('^^' .
$headertest, $high_val)) {
$hlt_color =
$message_highlight_list_part['color'];
if (!isset
($hlt_color)) {
$hlt_color =
$color_string;
$checked =
($checkall ==
1) ?
' CHECKED' :
'';
// $subject = processSubject($msg['SUBJECT'], $indent_array[$msg['ID']]);
foreach ($index_order as $index_order_part) {
switch ($index_order_part) {
"<input type=checkbox name=\"msg[$t]\" value=\"".
$msg['ID'].
"\"$checked>",
$from_xtra =
'title="' .
$senderFrom .
'"';
$fontstr_end .
$flag_end .
$bold_end .
$italic_end,
$hlt_color, $from_xtra );
$date_string =
$msg['DATE_STRING'] .
'';
if ($date_string ==
'') {
$date_string =
_("Unknown date");
$bold .
$flag .
$fontstr .
$date_string .
$fontstr_end .
$flag_end .
$bold_end,
if ($thread_sort_messages ==
1) {
if (isset
($indent_array[$msg['ID']])) {
$td_str .=
str_repeat(" ",$indent_array[$msg['ID']]);
$td_str .=
'<a href="read_body.php?mailbox='.
$urlMailbox
.
'&passed_id='.
$msg["ID"]
.
'&startMessage='.
$start_msg.
$searchstr.
'"';
if ($subject !=
$msg['SUBJECT']) {
$title =
strtr($msg['SUBJECT'], $title);
$td_str .=
" title=\"$title\"";
$td_str .=
">$flag$subject$flag_end</a>$bold_end";
echo
html_tag( 'td', $td_str, 'left', $hlt_color );
if (isset
($msg['FLAG_ANSWERED']) &&
$msg['FLAG_ANSWERED'] ==
true) {
if ($msg['TYPE0'] ==
'multipart') {
if ($default_use_priority) {
if ( ($msg['PRIORITY'] ==
1) ||
($msg['PRIORITY'] ==
2) ) {
$td_str .=
"<font color=\"$color[1]\">!</font>";
if ($msg['PRIORITY'] ==
5) {
$td_str .=
"<font color=\"$color[8]\">?</font>";
if (isset
($msg['FLAG_DELETED']) &&
$msg['FLAG_DELETED'] ==
true) {
$td_str .=
"<font color=\"$color[1]\">D</font>";
$td_str .=
'</small></b>';
$fontstr_end .
$bold_end,
echo
'</tr>' .
"\n" .
'<tr><td colspan="' .
$col .
'" bgcolor="' .
$color[0] .
'" height="1"></td></tr>' .
"\n";
$end =
$start_msg +
$show_num -
1;
if ($num_msgs <
$show_num) {
} else if ($end >
$num_msgs) {
$end_loop =
$num_msgs -
$start_msg +
1;
$num_msgs, $server_sort_order, $mbxresponse) {
$num_msgs, $sort, $mbxresponse) {
/* set shownum to 999999 to fool sqimap_get_small_header_list
and rebuild the msgs_str to 1:* */
if ($start_msg +
($show_num -
1) <
$num_msgs) {
$end_msg =
$start_msg +
($show_num -
1);
if ($end_msg <
$start_msg) {
$start_msg =
$start_msg -
$show_num;
$end =
$start_msg +
$show_num -
1;
if ($num_msgs <
$show_num) {
} else if ($end >
$num_msgs) {
$end_loop =
$num_msgs -
$start_msg +
1;
* This function loops through a group of messages in the mailbox
* and shows them to the user.
$start_msg, $sort, $color, $show_num,
global $msgs, $msort, $auto_expunge, $thread_sort_messages,
* For some reason, on PHP 4.3+, this being unset, and set in the session causes havoc
* so setting it to an empty array beforehand seems to clean up the issue, and stopping the
* "Your script possibly relies on a session side-effect which existed until PHP 4.2.3" error
/* If autoexpunge is turned on, then do it now. */
/* If autoexpunge is turned on, then do it now. */
if ($auto_expunge ==
true) {
$mbxresponse['EXISTS'] =
$mbxresponse['EXISTS'] -
$exp_cnt;
$num_msgs =
$mbxresponse['EXISTS'];
if ($mbxresponse['EXISTS'] >
0) {
/* if $start_msg is lower than $num_msgs, we probably deleted all messages
* in the last page. We need to re-adjust the start_msg
if($start_msg >
$num_msgs) {
/* This code and the next if() block check for
* server-side sorting methods. The $id array is
* formatted and $sort is set to 6 to disable
if ($thread_sort_messages ==
1) {
} elseif ($allow_server_sort ==
1) {
echo
'<b><small><center><font color=red>' .
_("Thread sorting is not supported by your IMAP server.") .
'<br />' .
_("Please contact your system administrator and report this error.") .
$thread_sort_messages =
0;
$msort =
$msgs =
array();
echo
'<b><small><center><font color=red>' .
_( "Server-side sorting is not supported by your IMAP server.") .
'<br />' .
_("Please contact your system administrator and report this error.") .
$sort =
$server_sort_order;
$allow_server_sort =
FALSE;
$msort =
$msgs =
array();
$num_msgs, $sort, $mbxresponse);
$num_msgs, $show_num, $sort);
echo
'<table border="0" width="100%" cellpadding="0" cellspacing="0">';
$msg_cnt_str, $paginator_str, $start_msg);
/* line between the button area and the list */
echo
'<tr><td height="5" bgcolor="'.
$color[4].
'"></td></tr>';
echo
' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.
' border="0" bgcolor="'.
$color[9].
'">';
echo
' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.
$color[5].
'">';
printHeader($mailbox, $srt, $color, !$thread_sort_messages);
$msort, $mailbox, $sort, $color, $show_num,0,0);
echo
'</td></tr></table></td></tr></table>';
echo
'</td></tr></table>';
//echo("elapsed time = $t seconds\n");
if (($sort ==
0) ||
($sort ==
1)) {
foreach ($msgs as $item) {
$msort[] =
$item['TIME_STAMP'];
} elseif (($sort ==
2) ||
($sort ==
3)) {
foreach ($msgs as $item) {
$msort[] =
$item['FROM-SORT'];
} elseif (($sort ==
4) ||
($sort ==
5)) {
foreach ($msgs as $item) {
$msort[] =
$item['SUBJECT-SORT'];
/* Generic function to convert the msgs array into an HTML table. */
$msort, $mailbox, $sort, $color,
$show_num, $where=
0, $what=
0) {
$server_sort_order, $PHP_SELF;
/* get indent level for subject display */
if ($thread_sort_messages ==
1 &&
$num_msgs) {
$real_startMessage =
$start_msg;
if ($end_msg -
$start_msg <
$show_num -
1) {
$end_msg =
$end_msg -
$start_msg +
1;
} else if ($start_msg >
$show_num) {
* Loop through and display the info for each message.
* ($t is used for the checkbox number)
/* if there's no messages in this folder */
"<br><b>" .
_("THIS FOLDER IS EMPTY") .
"</b><br> ",
'colspan="' .
count($index_order) .
'"'
} elseif ($start_msg ==
$end_msg) {
/* if there's only one message in the box, handle it differently. */
} while (isset
($key) &&
($k <
$i));
$real_startMessage, $where, $what);
} while (isset
($key) &&
($k <
$i));
if (!$i ||
$i ==
$endVar-
1) $not_last =
false;
$real_startMessage, $where, $what);
} while ($i &&
$i <
$endVar);
* Displays the standard message list header. To finish the table,
* you need to do a "</table></table>";
* $moveURL is the URL to submit the delete/move form to
* $mailbox is the current mailbox
* $sort is the current sorting method (-1 for no sorting available [searches])
* $Message is a message that is centered on top of the list
* $More is a second line that is left aligned
$mailbox =
'', $sort = -
1,
global $color, $auto_expunge, $base_uri, $thread_sort_messages,
/* fix for incorrect $PHP_SELF */
if (strpos($php_self, 'move_messages.php')) {
$php_self =
str_replace('move_messages.php', 'right_main.php', $php_self);
$moveFields =
'<input type="hidden" name="msg" value="'.
htmlspecialchars($msg).
'">' .
"\n" .
'<input type="hidden" name="mailbox" value="'.
htmlspecialchars($mailbox).
'">' .
"\n" .
'<input type="hidden" name="startMessage" value="'.
htmlspecialchars($start_msg).
'">' .
"\n";
* This is the beginning of the message list table.
* It wraps around all messages
$safe_name =
preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
$form_name =
"FormMsgs" .
$safe_name;
echo
'<form name="' .
$form_name .
'" method="post" action="move_messages.php">' .
"\n"
if (!empty($paginator) &&
!empty($msg_cnt_str)) {
, '', $color[4], 'border="0" width="100%" cellpadding="1" cellspacing="0"' )
, '', '', 'border="0" width="100%" cellpadding="1" cellspacing="0"' );
/* line between header and button area */
echo
'</td></tr><tr><td height="5" bgcolor="'.
$color[4].
'"></td></tr>';
.
html_tag( 'table' ,'' , '', $color[9], 'border="0" width="100%" cellpadding="1" cellspacing="0"' )
.
html_tag( 'table' ,'' , '', $color[0], 'border="0" width="100%" cellpadding="1" cellspacing="0"' )
.
html_tag( 'td', '', 'left', '', 'valign="middle" nowrap' );
echo
getButton('SUBMIT', 'moveButton',_("Move")) .
"\n";
echo
getButton('SUBMIT', 'attache',_("Forward")) .
"\n";
.
html_tag( 'td', '', 'right', '', 'nowrap' );
echo
getButton('SUBMIT', 'expungeButton',_("Expunge"))
echo
getButton('SUBMIT', 'markUnread',_("Unread"));
echo
getButton('SUBMIT', 'delete',_("Delete")) .
" \n";
if (!strpos($php_self,'mailbox')) {
$location =
$php_self.
'?mailbox=INBOX&startMessage=1';
// $location = urlencode($location);
echo
'<input type="hidden" name="location" value="'.
$location.
'">';
/* draws thread sorting links */
if ($allow_thread_sort ==
TRUE) {
if ($thread_sort_messages ==
1 ) {
$thread_name =
_("Unthread View");
} elseif ($thread_sort_messages ==
0) {
$thread_name =
_("Thread View");
' <small><a href="' .
$source_url .
'?sort='
.
"$sort" .
'&start_messages=1&set_thread=' .
"$set_thread"
.
'&mailbox=' .
urlencode($mailbox) .
'">' .
$thread_name
echo
"</table></td></tr></table></td></tr>\n";
/* if using server sort we highjack the
* the $sort var and use $server_sort_order
* instead. but here we reset sort for a bit
if ($allow_server_sort ==
TRUE) {
$sort =
$server_sort_order;
/* space between list and footer */
echo
'<tr><td height="5" bgcolor="'.
$color[4].
'" colspan="1">';
echo
'</td></tr><tr><td>';
, '', $color[4], 'width="100%" border="0" cellpadding="1" cellspacing="0"' )
, '', $color[9], 'width="100%" border="0" cellpadding="1" cellspacing="0"' );
/* End of message-list table */
function printHeader($mailbox, $sort, $color, $showsort=
true) {
echo
html_tag( 'tr' ,'' , 'center', $color[5] );
/* calculate the width of the subject column based on the
* widths of the other columns */
$widths =
array(1=>
1,2=>
25,3=>
5,4=>
0,5=>
1,6=>
5);
foreach($index_order as $item) {
$subjectwidth -=
$widths[$item];
foreach ($index_order as $item) {
echo
html_tag( 'td' ,' ' , '', '', 'width="1%"' );
echo
html_tag( 'td' ,'' , 'left', '', 'width="25%"' )
.
'<b>' .
_("To") .
'</b>';
echo
html_tag( 'td' ,'' , 'left', '', 'width="25%"' )
.
'<b>' .
_("From") .
'</b>';
echo
html_tag( 'td' ,'' , 'left', '', 'width="5%" nowrap' )
.
'<b>' .
_("Date") .
'</b>';
echo
html_tag( 'td' ,'' , 'left', '', 'width="'.
$subjectwidth.
'%"' )
.
'<b>' .
_("Subject") .
'</b>';
echo
html_tag( 'td', '<b>' .
_("Size") .
'</b>', 'center', '', 'width="5%" nowrap' );
* This function shows the sort button. Isn't this a good comment?
/* Figure out which image we want to use. */
if ($sort !=
$Up &&
$sort !=
$Down) {
} elseif ($sort ==
$Up) {
$img =
'down_pointer.png';
/* Now that we have everything figured out, show the actual button. */
echo
' <a href="' .
$source_url .
'?newsort=' .
$which
.
'&startMessage=1&mailbox=' .
urlencode($mailbox)
.
'"><img src="../images/' .
$img
.
'" border="0" width="12" height="10" alt="sort"></a>';
global $checkall, $what, $where, $mailbox, $javascript_on;
global $PHP_SELF, $PG_SHOWNUM;
$safe_name =
preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
$func_name =
"CheckAll" .
$safe_name;
$form_name =
"FormMsgs" .
$safe_name;
$result =
'<script language="JavaScript" type="text/javascript">'
.
"function " .
$func_name .
"() {\n"
.
" for (var i = 0; i < document." .
$form_name .
".elements.length; i++) {\n"
.
" if(document." .
$form_name .
".elements[i].type == 'checkbox'){\n"
.
" document." .
$form_name .
".elements[i].checked = "
.
" !(document." .
$form_name .
".elements[i].checked);\n"
.
'</script><a href="javascript:void(0)" onClick="' .
$func_name .
'();">' .
_("Toggle All")
/* . '</script><a href="javascript:' . $func_name . '()">' . _("Toggle All")*/
$result .=
"<a href=\"$PHP_SELF&mailbox=" .
urlencode($mailbox)
.
"&startMessage=$start_msg&sort=$sort&checkall=";
$result .=
"<a href=\"$PHP_SELF?mailbox=" .
urlencode($mailbox)
.
"&startMessage=$start_msg&sort=$sort&checkall=";
if (isset
($checkall) &&
$checkall ==
'1') {
if (isset
($where) && isset
($what)) {
if (isset
($checkall) &&
($checkall ==
'1')) {
$result .=
_("Unselect All");
$result .=
_("Select All");
/* Return our final result. */
* This function computes the "Viewing Messages..." string.
/* Compute the $msg_cnt_str. */
if ($start_msg <
$end_msg) {
$result =
sprintf(_("Viewing Messages: %s to %s (%s total)"),
'<b>'.
$start_msg.
'</b>', '<b>'.
$end_msg.
'</b>', $num_msgs);
} else if ($start_msg ==
$end_msg) {
$result =
sprintf(_("Viewing Message: %s (%s total)"), '<b>'.
$start_msg.
'</b>', $num_msgs);
/* Return our result string. */
* Generate a paginator link.
$result =
"<a href=\"right_main.php?use_mailbox_cache=$use"
.
"&startMessage=$start_msg&mailbox=$box\" "
if (preg_match('/^(.+)\?.+$/',$PHP_SELF,$regs)) {
$result = '<A HREF="'. $source_url . "?use_mailbox_cache=$use"
. "&startMessage=$start_msg&mailbox=$box\" "
* This function computes the paginator string.
global $username, $data_dir, $use_mailbox_cache, $color, $PG_SHOWNUM;
/* Initialize paginator string chunks. */
/* 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. */
/* 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. */
/* 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)) {
} else if (($next_grp >
$num_msgs) &&
($prev_grp >=
0)) {
$nxt_str =
"<font color=\"$color[9]\">".
_("Next").
"</font>\n";
} else if (($next_grp <=
$num_msgs) &&
($prev_grp <
0)) {
$prv_str =
"<font color=\"$color[9]\">".
_("Previous") .
'</font>';
/* Page selector block. Following code computes page links. */
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 number 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) {
$q4_pgs =
$tot_pgs -
$cur_pg;
/* Otherwise, compute some magic to choose the four quarters. */
* 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;
$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 -=
ceil(($cur_pg -
$q1_pgs -
1) *
3/
4);
$q2_pgs =
ceil(($cur_pg -
$q1_pgs -
1) *
3/
4);
$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;
$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) >=
($tot_pgs -
$q4_pgs)) {
$extra_pgs -=
ceil(($tot_pgs -
$cur_pg -
$q4_pgs) *
3/
4);
$q3_pgs =
ceil(($tot_pgs -
$cur_pg -
$q4_pgs) *
3/
4);
$q1_pgs +=
floor($extra_pgs /
2);
$q2_pgs +=
ceil($extra_pgs /
2);
* 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) . '<br>';
/* Print out the page links from the compute page quarters. */
/* Start with the first quarter. */
if (($q1_pgs ==
0) &&
($cur_pg >
1)) {
for ($pg =
1; $pg <=
$q1_pgs; ++
$pg) {
$start =
(($pg-
1) *
$show_num) +
1;
if ($cur_pg -
$q2_pgs -
$q1_pgs >
1) {
/* Continue with the second quarter. */
for ($pg =
$cur_pg -
$q2_pgs; $pg <
$cur_pg; ++
$pg) {
$start =
(($pg-
1) *
$show_num) +
1;
/* 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;
/* And last, print the forth quarter page links. */
if (($q4_pgs ==
0) &&
($cur_pg <
$tot_pgs)) {
if (($tot_pgs -
$q4_pgs) >
($cur_pg +
$q3_pgs)) {
for ($pg =
$tot_pgs -
$q4_pgs +
1; $pg <=
$tot_pgs; ++
$pg) {
$start =
(($pg-
1) *
$show_num) +
1;
} else if ($PG_SHOWNUM ==
999999) {
$pg_str =
"<a href=\"right_main.php?PG_SHOWALL=0"
.
"&use_mailbox_cache=$use&startMessage=1&mailbox=$box\" "
.
">" .
_("Paginate") .
'</a>' .
$spc;
/* If necessary, compute the 'show all' string. */
if (($prv_str !=
'') ||
($nxt_str !=
'')) {
$all_str =
"<a href=\"right_main.php?PG_SHOWALL=1"
.
"&use_mailbox_cache=$use&startMessage=1&mailbox=$box\" "
.
">" .
_("Show All") .
'</a>';
/* Last but not least, get the value for the toggle all link. */
/* Put all the pieces of the paginator string together. */
* Hairy code... But let's leave it like it is since I am not certain
* a different approach would be any easier to read. ;)
$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. */
/* Return our final magical paginator string. */
global $languages, $squirrelmail_language;
/* Shouldn't ever happen -- caught too many times in the IMAP functions */
return _("(no subject)");
/* if this is threaded, subtract two chars per indentlevel */
if($threadlevel >
0 &&
$threadlevel <=
10) {
$trim_at -=
(2*
$threadlevel);
if (strlen($subject) <=
$trim_at) {
$ent_strlen =
$orig_len =
strlen($subject);
$trim_val =
$trim_at -
5;
* see if this is entities-encoded string
* If so, Iterate through the whole string, find out
* the real number of characters, and if more
* than 55, substr with an updated trim value.
while ( $ent_loc <
$trim_val &&
(($ent_loc =
strpos($subject, '&', $ent_offset)) !==
false) &&
(($ent_loc_end =
strpos($subject, ';', $ent_loc+
3)) !==
false) ) {
$trim_val +=
($ent_loc_end-
$ent_loc);
$ent_offset =
$ent_loc_end+
1;
if (($trim_val >
50) &&
(strlen($subject) >
($trim_val))&&
(strpos($subject,';',$trim_val) <
($trim_val +
6))) {
$i =
strpos($subject,';',$trim_val);
$trim_val =
strpos($subject,';',$trim_val);
if ($ent_strlen <=
$trim_at){
if (isset
($languages[$squirrelmail_language]['XTRA_CODE']) &&
return $languages[$squirrelmail_language]['XTRA_CODE']('strimwidth', $subject, $trim_val);
// only print '...' when we're actually dropping part of the subject
if(strlen($subject) <=
$trim_val) {
return substr($subject, 0, $trim_val) .
'...';
global $lastTargetMailbox;
echo
' <small> <tt><select name="targetMailbox">';
echo
' </select></tt> ';
return '<input type="'.
$type.
'" name="'.
$name.
'" value="'.
$value .
'">';
'<small>' .
$string .
': </small>',
if ($start_msg +
($show_num -
1) <
$num_msgs){
$end_msg =
$start_msg +
($show_num -
1);
if ($end_msg <
$start_msg) {
$start_msg =
$start_msg -
$show_num;
return (array($start_msg,$end_msg));
global $handleAsSent_result;
/* First check if this is the sent or draft folder. */
/* Then check the result of the handleAsSent hook. */
do_hook('check_handleAsSent_result', $mailbox);
/* And return the result. */
return $handleAsSent_result;
Documentation generated on Sat, 07 Oct 2006 16:32:17 +0300 by phpDocumentor 1.3.0RC6