+ 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;
+
+ $inbox_in_list = false;
+ $inbox_subscribed = false;
+
+ require_once('../src/load_prefs.php');
+ require_once('../functions/array.php');
+
+ $dm = sqimap_get_delimiter ($imap_stream);
+
+ /** LSUB array **/
+ fputs ($imap_stream, sqimap_session_id() . " LSUB \"$folder_prefix\" \"*\"\r\n");
+ $lsub_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), 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]*)$",
+ $lsub_ary[$i], $regs)) {
+ $i ++;
+ $lsub_ary[$i] = $regs[1] . '"' . addslashes(trim($lsub_ary[$i])) .
+ '"' . $regs[2];
+ }
+ $temp_mailbox_name = find_mailbox_name($lsub_ary[$i]);
+ $sorted_lsub_ary[] = $temp_mailbox_name;
+ if (strtoupper($temp_mailbox_name) == '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 **/
+ $sorted_list_ary = 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, sqimap_session_id() . " LIST \"\" \"$mbx\"\r\n");
+ $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
+ // Another workaround for EIMS
+ 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];
+ }
+ 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]) &&
+ 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) {
+ fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"INBOX\"\r\n");
+ $inbox_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
+ // Another workaround for EIMS
+ if (isset($inbox_ary[1]) &&
+ 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, $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);
+ }
+ }
+
+ /* 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($dm) . '.*)?$', $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($dm) . '.*)?$', $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($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;
+