+ global $load_prefs_php, $prefs_php, $config_php;
+ global $data_dir, $username, $list_special_folders_first;
+ global $trash_folder, $sent_folder;
+ 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;
+ fputs ($imap_stream, "a001 LSUB \"\" \"*\"\r\n");
+ $lsub_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+
+ /** OS: we don't want to parse last element of array, 'cause it is OK command, so we unset it **/
+ unset($lsub_ary[count($lsub_ary)-1]);
+
+ 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)) {
+ usort($sorted_lsub_ary, "_icmp");
+ //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 **/
+
+ $boxesnew = Array();
+
+ // Find INBOX
+ for ($i = 0; $i < count($boxes); $i++) {
+ if (strtolower($boxes[$i]["unformatted"]) == "inbox") {
+ $boxesnew[] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ $i = count($boxes);
+ }
+ }
+
+ if ($list_special_folders_first == true) {
+
+ // Then list special folders and their subfolders
+ for ($i = 0 ; $i <= count($boxes) ; $i++) {
+ if ($move_to_trash &&
+ eregi("^" . quotemeta($trash_folder) . "(" .
+ quotemeta($dm) . ")?$", $boxes[$i]["unformatted"]))
+ {
+ $boxesnew[] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ }
+ elseif ($move_to_sent &&
+ eregi("^" . quotemeta($sent_folder) . "(" .
+ quotemeta($dm) . ")?$", $boxes[$i]["unformatted"]))
+ {
+ $boxesnew[] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ }
+ }
+
+ // Put INBOX.* folders ahead of the rest
+ for ($i = 0; $i <= count($boxes); $i++) {
+ if (eregi("^inbox\.", $boxes[$i]["unformatted"]) &&
+ ($boxes[$i]["used"] == false)) {
+ $boxesnew[] = $boxes[$i];
+ $boxes[$i]["used"] = true;
+ }
+ }
+
+ }
+
+ // Rest of the folders
+ for ($i = 0; $i < count($boxes); $i++) {
+ if ((strtolower($boxes[$i]["unformatted"]) != "inbox") &&
+ ($boxes[$i]["used"] == false)) {
+ $boxesnew[] = $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;