+ global $data_dir, $username, $list_special_folders_first;
+ global $trash_folder, $sent_folder;
+ global $move_to_trash, $move_to_sent, $folder_prefix;
+
+ $inbox_in_list = false;
+ $inbox_subscribed = false;
+
+ include "../src/load_prefs.php";
+ 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 **/
+ /** LUKE: This introduced errors.. do a check first **/
+ if (substr($lsub_ary[count($lsub_ary)-1], 0, 4) == "* OK") {
+ 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, "user_strcasecmp");
+ //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);
+ if (isset($sorted_list_ary[$i]))
+ $sorted_list_ary[$i] = "";
+ if (isset($read[0]))
+ $sorted_list_ary[$i] = $read[0];
+ else
+ $sorted_list_ary[$i] = "";
+ if (isset($sorted_list_ary[$i]) && 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];
+ $used[$i] = 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];
+ $used[$i] = true;
+ }
+ elseif ($move_to_sent &&
+ eregi('^' . quotemeta($sent_folder) . '(' .
+ quotemeta($dm) . '.*)?$', $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;
+ }
+ }
+
+ }
+
+ // 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;
+ }
+ }
+
+ 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;