** imap_mailbox.php
**
** This impliments all functions that manipulate mailboxes
+ **
+ ** $Id$
**/
/******************************************************************************
function sqimap_mailbox_exists ($imap_stream, $mailbox) {
fputs ($imap_stream, "a001 LIST \"\" \"$mailbox\"\r\n");
$mbx = sqimap_read_data($imap_stream, "a001", true, $response, $message);
- if ($mailbox) {
+ if (isset($mailbox) && isset($mbx[0])) {
return !!(ereg ("$mailbox", $mbx[0])); // To force into true/false
}
}
** formatted - nicely formatted folder name
** unformatted - unformatted, but with delimiter at end removed
** unformatted-dm - folder name as it appears in raw response
- ** unformatted-disp - unformatted without $folder_prefix
+ ** unformatted-disp - unformatted without $folder_prefix
**
******************************************************************************/
function sqimap_mailbox_parse ($line, $line_lsub, $dm) {
$boxesbyname[$mailbox] = $g;
$parentfolder = readMailboxParent($mailbox, $dm);
if((eregi("^inbox".quotemeta($dm), $mailbox)) ||
- (ereg("^".$folder_prefix, $mailbox)) ||
+ (ereg("^".$folder_prefix, $mailbox)) ||
( isset($boxesbyname[$parentfolder]) && (strlen($parentfolder) > 0) ) ) {
$indent = $dm_count - (countCharInString($folder_prefix, $dm));
if ($indent)
return $boxes;
}
-
- /* patch from dave_michmerhuizen@yahoo.com
- * allows case insensativity when sorting folders
+
+ /* Apparently you must call a user function with usort instead
+ * of calling a built-in directly. Stupid.
+ * Patch from dave_michmerhuizen@yahoo.com
+ * Allows case insensitivity when sorting folders
*/
- function _icmp ($a, $b) {
- return strcasecmp($a, $b);
+ function user_strcasecmp($a, $b)
+ {
+ return strcasecmp($a, $b);
}
-
+
+
/******************************************************************************
** Returns sorted mailbox lists in several different ways.
** See comment on sqimap_mailbox_parse() for info about the returned array.
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]);
+ /** 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]);
}
$sorted_lsub_ary = $new_ary;
if (isset($sorted_lsub_ary)) {
- usort($sorted_lsub_ary, "_icmp");
+ usort($sorted_lsub_ary, "user_strcasecmp");
//sort($sorted_lsub_ary);
}
for ($i = 0; $i < count($boxes); $i++) {
if (strtolower($boxes[$i]["unformatted"]) == "inbox") {
$boxesnew[] = $boxes[$i];
- $boxes[$i]["used"] = true;
+ $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"]))
- {
+ 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;
+ $used[$i] = true;
}
elseif ($move_to_sent &&
- eregi("^" . quotemeta($sent_folder) . "(" .
- quotemeta($dm) . ")?$", $boxes[$i]["unformatted"]))
- {
+ eregi("^" . quotemeta($sent_folder) . "(" .
+ quotemeta($dm) . ".*)?$", $boxes[$i]["unformatted"])) {
$boxesnew[] = $boxes[$i];
- $boxes[$i]["used"] = true;
+ $used[$i] = true;
}
}
// Put INBOX.* folders ahead of the rest
- for ($i = 0; $i <= count($boxes); $i++) {
+ for ($i = 0; $i < count($boxes); $i++) {
if (eregi("^inbox\.", $boxes[$i]["unformatted"]) &&
- ($boxes[$i]["used"] == false)) {
+ (!isset($used[$i]) || $used[$i] == false)) {
$boxesnew[] = $boxes[$i];
- $boxes[$i]["used"] = true;
+ $used[$i] = true;
}
}
// Rest of the folders
for ($i = 0; $i < count($boxes); $i++) {
if ((strtolower($boxes[$i]["unformatted"]) != "inbox") &&
- ($boxes[$i]["used"] == false)) {
+ (!isset($used[$i]) || $used[$i] == false)) {
$boxesnew[] = $boxes[$i];
- $boxes[$i]["used"] = true;
+ $used[$i] = true;
}
}