+ global $load_prefs_php, $prefs_php, $config_php, $data_dir, $username, $list_special_folders_first;
+ global $trash_folder, $sent_folder, $imap_server_type;
+ global $move_to_trash, $move_to_sent;
+
+ $inbox_in_list = false;
+ $inbox_subscribed = false;
+
+ if (!isset($load_prefs_php)) include "../src/load_prefs.php";
+ else global $folder_prefix;
+ if (!function_exists ("ary_sort")) include "../functions/array.php";
+
+ $dm = sqimap_get_delimiter ($imap_stream);
+
+ /** LSUB array **/
+ $inbox_subscribed = false;
+ if ($imap_server_type == "uw") {
+ fputs ($imap_stream, "a001 LSUB \"~\" \"*\"\r\n");
+ }
+ else {
+ fputs ($imap_stream, "a001 LSUB \"\" \"*\"\r\n");
+ }
+ $lsub_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+
+ for ($i=0;$i < count($lsub_ary); $i++) {
+ $sorted_lsub_ary[$i] = find_mailbox_name($lsub_ary[$i]);
+ if ($sorted_lsub_ary[$i] == "INBOX")
+ $inbox_subscribed = true;
+ }
+ $new_ary = array();
+ for ($i=0; $i < count($sorted_lsub_ary); $i++) {
+ if (!in_array($sorted_lsub_ary[$i], $new_ary)) {
+ $new_ary[] = $sorted_lsub_ary[$i];
+ }
+ }
+ $sorted_lsub_ary = $new_ary;
+ if (isset($sorted_lsub_ary)) {
+ sort($sorted_lsub_ary);
+ }
+
+ /** LIST array **/
+ for ($i=0; $i < count($sorted_lsub_ary); $i++) {
+ if (substr($sorted_lsub_ary[$i], -1) == $dm)
+ $mbx = substr($sorted_lsub_ary[$i], 0, strlen($sorted_lsub_ary[$i])-1);
+ else
+ $mbx = $sorted_lsub_ary[$i];
+
+ fputs ($imap_stream, "a001 LIST \"\" \"$mbx\"\r\n");
+ $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+ $sorted_list_ary[$i] = $read[0];
+ if (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) {
+ fputs ($imap_stream, "a001 LIST \"\" \"INBOX\"\r\n");
+ $inbox_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+
+ $pos = count($sorted_list_ary);
+ $sorted_list_ary[$pos] = $inbox_ary[0];
+
+ $pos = count($sorted_lsub_ary);
+ $sorted_lsub_ary[$pos] = find_mailbox_name($inbox_ary[0]);
+ }
+
+ $boxes = sqimap_mailbox_parse ($sorted_list_ary, $sorted_lsub_ary, $dm);
+
+ /** Now, lets sort for special folders **/
+ for ($i = 0; $i < count($boxes); $i++) {
+ if (strtolower($boxes[$i]["unformatted"]) == "inbox") {
+ $boxesnew[0] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ $i = count($boxes);
+ }
+ }
+
+ if ($list_special_folders_first == true) {
+ for ($i = count($boxes)-1; $i >= 0 ; $i--) {
+ if (($boxes[$i]["unformatted"] == $trash_folder) && ($move_to_trash)) {
+ $pos = count($boxesnew);
+ $boxesnew[$pos] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ $trash_found = true;
+ }
+ else if (($boxes[$i]["unformatted"] == $sent_folder) && ($move_to_sent)) {
+ $pos = count($boxesnew);
+ $boxesnew[$pos] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ $sent_found = true;
+ }
+
+ if (($sent_found && $trash_found) || ($sent_found && !$move_to_trash) || ($trash_found && !$move_to_sent) || (!$move_to_sent && !$move_to_trash))
+ $i = -1;
+ }
+ }
+
+ for ($i = 0; $i < count($boxes); $i++) {
+ if ((strtolower($boxes[$i]["unformatted"]) != "inbox") &&
+ ($boxes[$i]["used"] == false)) {
+ $pos = count($boxesnew);
+ $boxesnew[$pos] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ }
+ }
+
+ return $boxesnew;
+ }
+
+ /******************************************************************************
+ ** Returns a list of all folders, subscribed or not
+ ******************************************************************************/
+ function sqimap_mailbox_list_all ($imap_stream) {
+ global $list_special_folders_first, $folder_prefix;