-/******************************************************************************
- ** Returns sorted mailbox lists in several different ways.
- ** 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;
-
- $inbox_in_list = false;
- $inbox_subscribed = false;
-
- require_once('../src/load_prefs.php');
- require_once('../functions/array.php');
-
- /** 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) == $delimiter) {
- $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);
-
- /** 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($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;
- }