if ( !$allow_thread_sort ) {
$allow_thread_sort = 'false';
}
+if ( !$allow_server_sort ) {
+ $allow_server_sort = 'false';
+}
if ( !$prefs_user_field ) {
$prefs_user_field = 'user';
}
print "9. Allow use of receipts : $WHT$default_use_mdn$NRM\n";
print "10. Allow editing of identity : $WHT$edit_identity$NRM\n";
print "11. Allow server thread sort : $WHT$allow_thread_sort$NRM\n";
+ print "12. Allow server-side sorting : $WHT$allow_server_sort$NRM\n";
if ( lc($edit_identity) eq "false" ) {
- print "12. Allow editing of name : $WHT$edit_name$NRM\n";
+ print "13. Allow editing of name : $WHT$edit_name$NRM\n";
}
print "\n";
print "R Return to Main Menu\n";
elsif ( $command == 9 ) { $default_use_mdn = command39(); }
elsif ( $command == 10 ) { $edit_identity = command310(); }
elsif ( $command == 11 ) { $allow_thread_sort = command312(); }
- elsif ( $command == 12 ) { $edit_name = command311(); }
+ elsif ( $command == 12 ) { $allow_server_sort = command313(); }
+ elsif ( $command == 13 ) { $edit_name = command311(); }
} elsif ( $menu == 5 ) {
if ( $command == 1 ) { command41(); }
elsif ( $command == 2 ) { $theme_css = command42(); }
sub command312 {
print "This option allows you to choose if users can use thread sorting\n";
print "Your IMAP server must support the THREAD command for this to work\n";
+ print "PHP versions later than 4.0.3 recommended\n";
print "\n";
if ( lc($allow_thread_sort) eq "true" ) {
return $allow_thread_sort;
}
+sub command313 {
+ print "This option allows you to choose if SM uses server-side sorting\n";
+ print "Your IMAP server must support the SORT command for this to work\n";
+ print "\n";
+
+ if ( lc($allow_server_sort) eq "true" ) {
+ $default_value = "y";
+ } else {
+ $default_value = "n";
+ }
+ print "Allow server-side sorting? (y/n) [$WHT$default_value$NRM]: $WHT";
+ $allow_server_sort = <STDIN>;
+ if ( ( $allow_server_sort =~ /^y\n/i ) || ( ( $allow_server_sort =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+ $allow_server_sort = "true";
+ } else {
+ $allow_server_sort = "false";
+ }
+ return $allow_server_sort;
+}
+
sub command41 {
print "\nNow we will define the themes that you wish to use. If you have added\n";
print "a theme of your own, just follow the instructions (?) about how to add\n";
print CF "\$edit_identity = $edit_identity;\n";
print CF "\$edit_name = $edit_name;\n";
print CF "\$allow_thread_sort = $allow_thread_sort;\n";
+ print CF "\$allow_server_sort = $allow_server_sort;\n";
print CF "\n";
for ( $ct = 0 ; $ct <= $#plugins ; $ct++ ) {
return $responses;
}
+
+/* get sort order from server and
+ * return it as the $id array for
+ * mailbox_display
+ */
+
+function sqimap_get_sort_order ($imap_stream, $sort) {
+ global $default_charset, $thread_sort_messages, $internal_date_sort;
+ $sid = sqimap_session_id();
+ $sort_on = array();
+ $reverse = 0;
+ $server_sort_array = array();
+ $sort_test = array();
+ $sort_query = '';
+ $sort_on = array (0=> 'DATE',
+ 1=> 'DATE',
+ 2=> 'FROM',
+ 3=> 'FROM',
+ 4=> 'SUBJECT',
+ 5=> 'SUBJECT',
+ 6=> 'DATE');
+ if ($internal_date_sort == true) {
+ $sort_on[0] = 'ARRIVAL';
+ $sort_on[1] = 'ARRIVAL';
+ }
+ if (!empty($sort_on[$sort])) {
+ $sort_query = "$sid SORT ($sort_on[$sort]) ".strtoupper($default_charset)." ALL\r\n";
+ fputs($imap_stream, $sort_query);
+ $sort_test = sqimap_read_data($imap_stream, $sid, true, $response, $message);
+ }
+ if (preg_match("/^\* SORT (.+)$/", $sort_test[0], $regs)) {
+ $server_sort_array = preg_split("/ /", trim($regs[1]));
+ }
+ if ($sort == 0 || $sort == 2 || $sort == 4) {
+ $server_sort_array = array_reverse($server_sort_array);
+ }
+ return $server_sort_array;
+}
+
/* returns an indent array for printMessageinfo()
this represents the amount of indent needed
for this message number
else {
$sort_type = 'ORDEREDSUBJECT';
}
- $thread_query = "$sid THREAD $sort_type $default_charset ALL\r\n";
+ $thread_query = "$sid THREAD $sort_type ".strtoupper($default_charset)." ALL\r\n";
fputs($imap_stream, $thread_query);
$thread_test = sqimap_read_data($imap_stream, $sid, true, $response, $message);
if (preg_match("/^\* THREAD (.+)$/", $thread_test[0], $regs)) {
-
function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) {
global $squirrelmail_language, $color, $data_dir, $username;
$indent_array, /* indent subject by */
$pos, /* Search postion (if any) */
$thread_sort_messages, /* thread sorting on/off */
- $row_count;
+ $server_sort_order, /* sort value when using server-sorting */
+ $row_count,
+ $allow_server_sort; /* enable/disable server-side sorting */
$color_string = $color[4];
if ($GLOBALS['alt_index_colors']) {
$use_cache) {
global $msgs, $msort,
$sent_folder, $draft_folder,
- $message_highlight_list,
- $auto_expunge, $thread_sort_messages,
- $data_dir, $username;
- /* If autoexpunge is turned on, then do it now. */
-
+ $message_highlight_list,
+ $auto_expunge, $thread_sort_messages, $allow_server_sort,
+ $data_dir, $username, $server_sort_order;
+
+ /* 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
+ * SM internal sorting
+ */
if ($thread_sort_messages == 1) {
$id = get_thread_sort($imapConnection);
$sort = 6;
if ($start_msg + ($show_num - 1) < $num_msgs) {
$end_msg = $start_msg + ($show_num-1);
- } else {
+ }
+ else {
+ $end_msg = $num_msgs;
+ }
+ $id = array_slice($id, ($start_msg-1), ($end_msg));
+ }
+
+ if ($allow_server_sort == TRUE && $thread_sort_messages != 1) {
+ $server_sort_order = $sort;
+ $id = sqimap_get_sort_order($imapConnection, $server_sort_order);
+ $sort = 6;
+ if ($start_msg + ($show_num - 1) < $num_msgs) {
+ $end_msg = $start_msg + ($show_num-1);
+ }
+ else {
$end_msg = $num_msgs;
}
$id = array_slice($id, ($start_msg-1), ($end_msg));
}
+
+ /* If autoexpunge is turned on, then do it now. */
if ($auto_expunge == true) {
sqimap_mailbox_expunge($imapConnection, $mailbox, false);
}
if ($sort < 6 ) {
$id = range(1, $num_msgs);
}
- elseif ($thread_sort_messages != 1) {
+ elseif ($thread_sort_messages != 1 && $allow_server_sort != TRUE && $sort == 6) {
/* if it's not sorted */
if ($start_msg + ($show_num - 1) < $num_msgs){
$end_msg = $start_msg + ($show_num - 1);
}
}
session_register('msort');
- } elseif ($thread_sort_messages == 1 ) {
+ } elseif ($thread_sort_messages == 1 || $allow_server_sort == TRUE) {
$msort = $msgs;
session_unregister('msgs');
session_register('msort');
global $folder_prefix, $sent_folder,
$imapServerAddress, $data_dir, $username, $use_mailbox_cache,
$index_order, $real_endMessage, $real_startMessage, $checkall,
- $indent_array, $thread_sort_messages;
+ $indent_array, $thread_sort_messages, $allow_server_sort, $server_sort_order;
/* If cache isn't already set, do it now. */
if (!session_is_registered('msgs')) {
$start_msg = 1) {
global $color, $index_order, $auto_expunge, $move_to_trash, $base_uri,
$checkall, $sent_folder, $draft_folder, $thread_sort_messages,
- $allow_thread_sort;
+ $allow_thread_sort, $allow_server_sort, $server_sort_order;
$urlMailbox = urlencode($mailbox);
/*
. "CELLSPACING=\"0\" BORDER=\"0\"><TR>\n"
. " <TD ALIGN=LEFT>$paginator\n";
- if ($allow_thread_sort == TRUE) {
- if ($thread_sort_messages == 1 ) {
- $set_thread = 2;
- $thread_name = 'Unthread View';
- } elseif ($thread_sort_messages == 0) {
- $set_thread = 1;
- $thread_name = 'Thread View';
- }
- echo '| <a href=' . "$base_uri" . 'src/right_main.php?sort='
- . "$sort" . '&start_messages=1&set_thread=' . "$set_thread"
- . '&mailbox=' . urlencode($mailbox) . '>' . _("$thread_name")
- . '</a> ';
- }
-
echo " <TD ALIGN=RIGHT>$msg_cnt_str</TD>\n"
. " </TR></TABLE>\n"
. '</TD></TR>'
. '<INPUT TYPE="SUBMIT" NAME="markUnread" VALUE="' . _("Unread") . '">'
. '<INPUT TYPE="SUBMIT" VALUE="' . _("Delete") . '"> '
. "</TD>\n"
- . " </TR>\n"
- . "</TABLE>\n";
+ . " </TR>\n";
+
+/* draws thread sorting links */
+ if ($allow_thread_sort == TRUE) {
+ if ($thread_sort_messages == 1 ) {
+ $set_thread = 2;
+ $thread_name = 'Unthread View';
+ }
+ elseif ($thread_sort_messages == 0) {
+ $set_thread = 1;
+ $thread_name = 'Thread View';
+ }
+ echo '<tr><td> <a href=' . "$base_uri" . 'src/right_main.php?sort='
+ . "$sort" . '&start_messages=1&set_thread=' . "$set_thread"
+ . '&mailbox=' . urlencode($mailbox) . '><small>' . _("$thread_name")
+ . '</a></small> </td></tr>';
+ }
+
+ echo "</TABLE>\n";
do_hook('mailbox_form_before');
echo '</TD></TR>'
. "<TR><TD BGCOLOR=\"$color[0]\">"
}
echo " BGCOLOR=\"$color[0]\">"
. "<TR BGCOLOR=\"$color[5]\" ALIGN=\"center\">";
-
+ /* if using server sort we highjack the
+ * the $sort var and use $server_sort_order
+ * instead. but here we reset sort for a bit
+ * since its easy
+ */
+ if ($allow_server_sort == TRUE) {
+ $sort = $server_sort_order;
+ }
/* Print the headers. */
for ($i=1; $i <= count($index_order); $i++) {
switch ($index_order[$i]) {
break;
}
}
+ /* if using server-sorting,
+ * send sort back to 6
+ */
+ if ($allow_server_sort == TRUE) {
+ $sort = 6;
+ }
echo "</TR>\n";
}