From 90de175589bcd8ea2b4d338c8b7eedb456a81da2 Mon Sep 17 00:00:00 2001 From: philippe_mingo Date: Sat, 12 Jan 2002 19:30:49 +0000 Subject: [PATCH] Ok, this should fix the subsent folders left panel order. Please test and report. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@2130 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_mailbox.php | 269 ++++++++++++++++++------------------- src/left_main.php | 42 ++---- 2 files changed, 145 insertions(+), 166 deletions(-) diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 781c7eb0..39fc5a37 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -11,10 +11,34 @@ * $Id$ */ +/* + Defines Special Mail Boxes +*/ + +function isSpecialMailbox( $box ) { + + global $trash_folder, $sent_folder, $draft_folder, + $move_to_trash, $move_to_sent, $save_as_draft, + $delimiter, $folder_prefix; + + $i = strpos( $sent_folder, $delimiter, strlen( $folder_prefix ) ); + + $ret = ( (strtolower($box) == 'inbox') || + ($box == $trash_folder && + $move_to_trash) || + (substr( $sent_folder, 0, max( $i, strlen( $box ) ) ) == $box && + $move_to_sent) || + ($box == $draft_folder && + $save_as_draft) ); + + return( $ret ); + +} + /************************* ** Expunges a mailbox ** *************************/ -function sqimap_mailbox_expunge ($imap_stream, $mailbox,$handle_errors = true) +function sqimap_mailbox_expunge ($imap_stream, $mailbox,$handle_errors = TRUE) { $read = sqimap_run_command($imap_stream, 'EXPUNGE', $handle_errors, $response, $message); @@ -30,7 +54,7 @@ function sqimap_mailbox_exists ($imap_stream, $mailbox) return false; } $mbx = sqimap_run_command($imap_stream, "LIST \"\" \"$mailbox\"", - true, $response, $message); + TRUE, $response, $message); return isset($mbx[0]); } @@ -38,7 +62,7 @@ function sqimap_mailbox_exists ($imap_stream, $mailbox) ** Selects a mailbox ******************************************************************************/ function sqimap_mailbox_select ($imap_stream, $mailbox, - $hide=true, $recent=false) + $hide=TRUE, $recent=false) { global $auto_expunge; @@ -47,7 +71,7 @@ function sqimap_mailbox_select ($imap_stream, $mailbox, } $read = sqimap_run_command($imap_stream, "SELECT \"$mailbox\"", - true, $response, $message); + TRUE, $response, $message); if ($recent) { for ($i=0; $i 0) ) ) { $indent = $dm_count - ( substr_count($folder_prefix, $delimiter)); if ($indent > 0) { - $boxes[$g]["formatted"] = str_repeat("  ", $indent); + $boxes[$g]['formatted'] = str_repeat("  ", $indent); } else { - $boxes[$g]["formatted"] = ''; + $boxes[$g]['formatted'] = ''; } - $boxes[$g]["formatted"] .= readShortMailboxName($mailbox, $delimiter); + $boxes[$g]['formatted'] .= readShortMailboxName($mailbox, $delimiter); } else { - $boxes[$g]["formatted"] = $mailbox; + $boxes[$g]['formatted'] = $mailbox; } - + $boxes[$g]['unformatted-dm'] = $mailbox; if (substr($mailbox, -1) == $delimiter) { $mailbox = substr($mailbox, 0, strlen($mailbox) - 1); @@ -238,7 +262,7 @@ function sqimap_mailbox_parse ($line, $line_lsub) } $boxes[$g]['unformatted-disp'] = $mailbox; $boxes[$g]['id'] = $g; - + $boxes[$g]['flags'] = array(); if (isset($line[$g])) { ereg("\(([^)]*)\)",$line[$g],$regs); @@ -248,7 +272,7 @@ function sqimap_mailbox_parse ($line, $line_lsub) } } } - + return $boxes; } @@ -294,7 +318,7 @@ function user_strcasecmp($a, $b) { break; } } - + /* If one string is a prefix of the other... */ if ($result == 0) { if ($a_length < $b_length) { @@ -313,30 +337,30 @@ function user_strcasecmp($a, $b) { ** See comment on sqimap_mailbox_parse() for info about the returned array. ******************************************************************************/ function sqimap_mailbox_list ($imap_stream) { - global $data_dir, $username, $list_special_folders_first; - global $folder_prefix, $trash_folder, $sent_folder, $draft_folder; - global $move_to_trash, $move_to_sent, $save_as_draft; - global $delimiter; - + global $data_dir, $username, $list_special_folders_first, + $folder_prefix, $trash_folder, $sent_folder, $draft_folder, + $move_to_trash, $move_to_sent, $save_as_draft, + $delimiter; + $inbox_in_list = false; $inbox_subscribed = false; - + require_once('../src/load_prefs.php'); require_once('../functions/array.php'); - + /** LSUB array **/ $lsub_ary = sqimap_run_command ($imap_stream, "LSUB \"$folder_prefix\" \"*\"", - true, $response, $message); - + TRUE, $response, $message); + /* Section about removing the last element was removed */ /* We don't return "* OK" anymore from sqimap_read_data */ - + $sorted_lsub_ary = array(); for ($i=0;$i < count($lsub_ary); $i++) { /* Workaround for EIMS */ /* Doesn't work if the mailbox name is multiple lines */ if (isset($lsub_ary[$i + 1]) && - ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", $lsub_ary[$i], $regs)) { $i ++; $lsub_ary[$i] = $regs[1] . '"' . addslashes(trim($lsub_ary[$i])) . @@ -345,7 +369,7 @@ function sqimap_mailbox_list ($imap_stream) { $temp_mailbox_name = find_mailbox_name($lsub_ary[$i]); $sorted_lsub_ary[] = $temp_mailbox_name; if (strtoupper($temp_mailbox_name) == 'INBOX') { - $inbox_subscribed = true; + $inbox_subscribed = TRUE; } } $new_ary = array(); @@ -357,8 +381,8 @@ function sqimap_mailbox_list ($imap_stream) { $sorted_lsub_ary = $new_ary; if (isset($sorted_lsub_ary)) { usort($sorted_lsub_ary, 'user_strcasecmp'); - } - + } + /** LIST array **/ $sorted_list_ary = array(); for ($i=0; $i < count($sorted_lsub_ary); $i++) { @@ -368,152 +392,122 @@ function sqimap_mailbox_list ($imap_stream) { else { $mbx = $sorted_lsub_ary[$i]; } - + $read = sqimap_run_command ($imap_stream, "LIST \"\" \"$mbx\"", - true, $response, $message); + TRUE, $response, $message); /* Another workaround for EIMS */ - if (isset($read[1]) && - ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + if (isset($read[1]) && + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", $read[0], $regs)) { $read[0] = $regs[1] . '"' . addslashes(trim($read[1])) . - '"' . $regs[2]; + '"' . $regs[2]; } - + if (isset($sorted_list_ary[$i])) { - $sorted_list_ary[$i] = ""; + $sorted_list_ary[$i] = ''; } - + if (isset($read[0])) { $sorted_list_ary[$i] = $read[0]; } else { - $sorted_list_ary[$i] = ""; + $sorted_list_ary[$i] = ''; } - - if (isset($sorted_list_ary[$i]) && - strtoupper(find_mailbox_name($sorted_list_ary[$i])) == "INBOX") { - $inbox_in_list = true; + + if (isset($sorted_list_ary[$i]) && + strtoupper(find_mailbox_name($sorted_list_ary[$i])) == 'INBOX') { + $inbox_in_list = TRUE; } } - + /** * Just in case they're not subscribed to their inbox, * we'll get it for them anyway */ if ($inbox_subscribed == false || $inbox_in_list == false) { $inbox_ary = sqimap_run_command ($imap_stream, "LIST \"\" \"INBOX\"", - true, $response, $message); + TRUE, $response, $message); /* Another workaround for EIMS */ if (isset($inbox_ary[1]) && - ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", $inbox_ary[0], $regs)) { $inbox_ary[0] = $regs[1] . '"' . addslashes(trim($inbox_ary[1])) . '"' . $regs[2]; } - + $sorted_list_ary[] = $inbox_ary[0]; $sorted_lsub_ary[] = find_mailbox_name($inbox_ary[0]); } - + $boxes = sqimap_mailbox_parse ($sorted_list_ary, $sorted_lsub_ary); - + /** Now, lets sort for special folders **/ - $boxesnew = Array(); - + $boxesnew = $used = array(); + /* Find INBOX */ - for ($i = 0; $i < count($boxes); $i++) { - if (strtolower($boxes[$i]["unformatted"]) == "inbox") { - $boxesnew[] = $boxes[$i]; - $used[$i] = true; - $i = count($boxes); + foreach ( $boxes as $k => $box ) { + if ( strtolower($box['unformatted']) == 'inbox') { + $boxesnew[] = $box; + $used[$k] = TRUE; + } else { + $used[$k] = FALSE; } } - + /* List special folders and their subfolders, if requested. */ - if ($list_special_folders_first == true) { - /* First list the trash folder. */ - for ($i = 0 ; $i < count($boxes) ; $i++) { - if ($move_to_trash && - eregi('^' . quotemeta($trash_folder) . '(' . - quotemeta($delimiter) . '.*)?$', $boxes[$i]['unformatted'])) { - $boxesnew[] = $boxes[$i]; - $used[$i] = true; - } - } - - /* Then list the sent folder. */ - for ($i = 0 ; $i < count($boxes) ; $i++) { - if ($move_to_sent && - eregi('^' . quotemeta($sent_folder) . '(' . - quotemeta($delimiter) . '.*)?$', $boxes[$i]['unformatted'])) { - $boxesnew[] = $boxes[$i]; - $used[$i] = true; - } - } - - /* Lastly, list the list the draft folder. */ - for ($i = 0 ; $i < count($boxes) ; $i++) { - if ($save_as_draft && - eregi('^' . quotemeta($draft_folder) . '(' . - quotemeta($delimiter) . '.*)?$', $boxes[$i]['unformatted'])) { - $boxesnew[] = $boxes[$i]; - $used[$i] = true; - } - } - - /* Put INBOX.* folders ahead of the rest. */ - for ($i = 0; $i < count($boxes); $i++) { - if (eregi('^inbox\\.', $boxes[$i]["unformatted"]) && - (!isset($used[$i]) || $used[$i] == false)) { - $boxesnew[] = $boxes[$i]; - $used[$i] = true; + if ($list_special_folders_first == TRUE) { + + foreach ( $boxes as $k => $box ) { + if ( !$used[$k] && + isSpecialMailbox( $box['unformatted'] ) ) { + $boxesnew[] = $box; + $used[$k] = TRUE; } } + } - + /* Rest of the folders */ - for ($i = 0; $i < count($boxes); $i++) { - if ((strtolower($boxes[$i]["unformatted"]) != "inbox") && - (!isset($used[$i]) || $used[$i] == false)) { - $boxesnew[] = $boxes[$i]; - $used[$i] = true; + foreach ( $boxes as $k => $box ) { + if ( !$used[$k] ) { + $boxesnew[] = $box; } } - - return $boxesnew; + + return( $boxesnew ); } -/****************************************************************************** - ** Returns a list of all folders, subscribed or not - ******************************************************************************/ +/* + * Returns a list of all folders, subscribed or not + */ function sqimap_mailbox_list_all ($imap_stream) { global $list_special_folders_first, $folder_prefix; global $delimiter; - - if (!function_exists ("ary_sort")) { + + if (!function_exists('ary_sort')) { include_once('../functions/array.php'); } - + $ssid = sqimap_session_id(); - $lsid = strlen( $ssid ); + $lsid = strlen( $ssid ); fputs ($imap_stream, $ssid . " LIST \"$folder_prefix\" *\r\n"); - $read_ary = sqimap_read_data ($imap_stream, $ssid, true, $response, $message); + $read_ary = sqimap_read_data ($imap_stream, $ssid, TRUE, $response, $message); $g = 0; - $phase = "inbox"; - + $phase = 'inbox'; + for ($i = 0; $i < count($read_ary); $i++) { /* Another workaround for EIMS */ if (isset($read_ary[$i + 1]) && - ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", $read_ary[$i], $regs)) { $i ++; - $read_ary[$i] = $regs[1] . '"' . + $read_ary[$i] = $regs[1] . '"' . addslashes(trim($read_ary[$i])) . '"' . $regs[2]; } - if (substr ($read_ary[$i], 0, $lsid) != $ssid ) { - + if (substr($read_ary[$i], 0, $lsid) != $ssid ) { + /* Store the raw IMAP reply */ $boxes[$g]["raw"] = $read_ary[$i]; @@ -522,58 +516,57 @@ function sqimap_mailbox_list_all ($imap_stream) $dm_count = substr_count($mailbox, $delimiter); if (substr($mailbox, -1) == $delimiter) { /* If name ends in delimiter - decrement count by one */ - $dm_count--; + $dm_count--; } - + /* Format folder name, but only if it's a INBOX.* or have */ /* a parent. */ $boxesbyname[$mailbox] = $g; $parentfolder = readMailboxParent($mailbox, $delimiter); - if((eregi('^inbox'.quotemeta($delimiter), $mailbox)) || + if((eregi('^inbox'.quotemeta($delimiter), $mailbox)) || (ereg('^'.$folder_prefix, $mailbox)) || ( isset($boxesbyname[$parentfolder]) && (strlen($parentfolder) > 0) ) ) { if ($dm_count) { - $boxes[$g]["formatted"] = str_repeat("  ", $dm_count); + $boxes[$g]['formatted'] = str_repeat('  ', $dm_count); } else { - $boxes[$g]["formatted"] = ''; + $boxes[$g]['formatted'] = ''; } - $boxes[$g]["formatted"] .= readShortMailboxName($mailbox, $delimiter); + $boxes[$g]['formatted'] .= readShortMailboxName($mailbox, $delimiter); } else { - $boxes[$g]["formatted"] = $mailbox; + $boxes[$g]['formatted'] = $mailbox; } - + $boxes[$g]["unformatted-dm"] = $mailbox; if (substr($mailbox, -1) == $delimiter) { $mailbox = substr($mailbox, 0, strlen($mailbox) - 1); } - $boxes[$g]["unformatted"] = $mailbox; - $boxes[$g]["unformatted-disp"] = + $boxes[$g]['unformatted'] = $mailbox; + $boxes[$g]['unformatted-disp'] = ereg_replace('^' . $folder_prefix, '', $mailbox); - $boxes[$g]["id"] = $g; - + $boxes[$g]['id'] = $g; + /** Now lets get the flags for this mailbox **/ $read_mlbx = sqimap_run_command ($imap_stream, "LIST \"\" \"$mailbox\"", - true, $response, $message); - + TRUE, $response, $message); + /* Another workaround for EIMS */ if (isset($read_mlbx[1]) && - ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", $read_mlbx[0], $regs)) { $read_mlbx[0] = $regs[1] . '"' . addslashes(trim($read_mlbx[1])) . '"' . $regs[2]; } - - $flags = substr($read_mlbx[0], strpos($read_mlbx[0], "(")+1); - $flags = substr($flags, 0, strpos($flags, ")")); + + $flags = substr($read_mlbx[0], strpos($read_mlbx[0], '(')+1); + $flags = substr($flags, 0, strpos($flags, ')')); $flags = str_replace('\\', '', $flags); $flags = trim(strtolower($flags)); if ($flags) { $boxes[$g]['flags'] = explode(' ', $flags); - } - else { + } else { $boxes[$g]['flags'] = array(); } } @@ -582,7 +575,7 @@ function sqimap_mailbox_list_all ($imap_stream) if(is_array($boxes)) { $boxes = ary_sort ($boxes, 'unformatted', 1); } - + return $boxes; } diff --git a/src/left_main.php b/src/left_main.php index eb4b5379..7fc9191d 100644 --- a/src/left_main.php +++ b/src/left_main.php @@ -24,30 +24,13 @@ define('SM_BOX_COLLAPSED', 1); /* --------------------- FUNCTIONS ------------------------- */ -function isSpecialMailbox( $box ) { - - global $trash_folder, $sent_folder, $draft_folder, - $move_to_trash, $move_to_sent, $save_as_draft; - - $ret = ( (strtolower($box) == 'inbox') || - (($box == $trash_folder) && - ($move_to_trash)) || - ((substr( $sent_folder, 0, strlen( $box ) ) == $box) && - ($move_to_sent)) || - (($box == $draft_folder) && - ($save_as_draft)) ); - - return( $ret ); - -} - function formatMailboxName($imapConnection, $box_array) { - global $folder_prefix, $trash_folder, $sent_folder; - global $color, $move_to_sent, $move_to_trash; - global $unseen_notify, $unseen_type, $collapse_folders; - global $draft_folder, $save_as_draft; - global $use_special_folder_color; + global $folder_prefix, $trash_folder, $sent_folder, + $color, $move_to_sent, $move_to_trash, + $unseen_notify, $unseen_type, $collapse_folders, + $draft_folder, $save_as_draft, + $use_special_folder_color; $real_box = $box_array['unformatted']; $mailbox = str_replace(' ','',$box_array['formatted']); @@ -65,11 +48,11 @@ function formatMailboxName($imapConnection, $box_array) { $unseen = sqimap_unseen_messages($imapConnection, $real_box); if ($unseen_type == 1 && $unseen > 0) { $unseen_string = "($unseen)"; - $unseen_found = true; + $unseen_found = TRUE; } else if ($unseen_type == 2) { $numMessages = sqimap_get_num_messages($imapConnection, $real_box); $unseen_string = "($unseen/$numMessages)"; - $unseen_found = true; + $unseen_found = TRUE; } } @@ -87,7 +70,7 @@ function formatMailboxName($imapConnection, $box_array) { $line .= ""; } $line .= str_replace(' ',' ',$mailbox); - if ($special_color == true) + if ($special_color == TRUE) $line .= ""; $line .= ''; @@ -176,8 +159,8 @@ function create_collapse_link($boxnum) { $mailbox = urlencode($boxes[$boxnum]['unformatted']); /* Create the link for this collapse link. */ - $link = '+"; } else { @@ -238,7 +221,7 @@ if ($auto_create_special && !isset($auto_create_done)) { } /* Let the world know that autocreation is complete! Hurrah! */ - $auto_create_done = true; + $auto_create_done = TRUE; session_register('auto_create_done'); } @@ -304,11 +287,13 @@ $curbox = 0; $boxcount = count($boxes); /* Compute the collapsedness and visibility of each box. */ + while ($curbox < $boxcount) { $boxes[$curbox]['visible'] = TRUE; compute_folder_children($curbox, $boxcount); } + for ($i = 0; $i < count($boxes); $i++) { if ( $boxes[$i]['visible'] ) { $mailbox = $boxes[$i]['formatted']; @@ -328,6 +313,7 @@ for ($i = 0; $i < count($boxes); $i++) { if (! isset($color[15])) { $color[15] = $color[6]; } + if (in_array('noselect', $boxes[$i]['flags'])) { if( isSpecialMailbox( $boxes[$i]['unformatted']) ) { $line .= ""; -- 2.25.1