| Author: Ryo Chijiiwa <Ryo@IlohaMail.org> |
+-----------------------------------------------------------------------+
- $Id: rcube_imap_generic.php 5402 2011-11-09 10:03:54Z alec $
+ $Id: rcube_imap_generic.php 5970 2012-03-06 19:43:49Z alec $
*/
}
if (!$this->select($mailbox)) {
+ }
+
+ // RFC 5957: SORT=DISPLAY
+ if (($field == 'FROM' || $field == 'TO') && $this->getCapability('SORT=DISPLAY')) {
+ $field = 'DISPLAY' . $field;
return null;
}
$folders[$mailbox] = array();
}
- // Add to options array
- if (empty($this->data['LIST'][$mailbox]))
- $this->data['LIST'][$mailbox] = $opts;
- else if (!empty($opts))
- $this->data['LIST'][$mailbox] = array_unique(array_merge(
- $this->data['LIST'][$mailbox], $opts));
+ // store LSUB options only if not empty, this way
+ // we can detect a situation when LIST doesn't return specified folder
+ if (!empty($opts) || $cmd == 'LIST') {
+ // Add to options array
+ if (empty($this->data['LIST'][$mailbox]))
+ $this->data['LIST'][$mailbox] = $opts;
+ else if (!empty($opts))
+ $this->data['LIST'][$mailbox] = array_unique(array_merge(
+ $this->data['LIST'][$mailbox], $opts));
+ }
}
// * STATUS <mailbox> (<result>)
else if ($cmd == 'STATUS') {
if (!is_array($a)) {
return false;
}
+
+ if (empty($part)) {
+ return $a;
+ }
+
+ $ctype = is_string($a[0]) && is_string($a[1]) ? $a[0] . '/' . $a[1] : '';
+
+ if (strcasecmp($ctype, 'message/rfc822') == 0) {
+ $a = $a[8];
+ }
+
if (strpos($part, '.') > 0) {
- $original_part = $part;
- $pos = strpos($part, '.');
- $rest = substr($original_part, $pos+1);
- $part = substr($original_part, 0, $pos);
- if ((strcasecmp($a[0], 'message') == 0) && (strcasecmp($a[1], 'rfc822') == 0)) {
- $a = $a[8];
- }
+ $orig_part = $part;
+ $pos = strpos($part, '.');
+ $rest = substr($orig_part, $pos+1);
+ $part = substr($orig_part, 0, $pos);
+
return self::getStructurePartArray($a[$part-1], $rest);
}
- else if ($part>0) {
- if (!is_array($a[0]) && (strcasecmp($a[0], 'message') == 0)
- && (strcasecmp($a[1], 'rfc822') == 0)) {
- $a = $a[8];
- }
+ else if ($part > 0) {
if (is_array($a[$part-1]))
return $a[$part-1];
else
return $a;
}
- else if (($part == 0) || (empty($part))) {
- return $a;
- }
}
/**
if ($string === null) {
return 'NIL';
}
+
if ($string === '') {
return '""';
}
+
// atom-string (only safe characters)
- if (!$force_quotes && !preg_match('/[\x00-\x20\x22\x28-\x2A\x5B-\x5D\x7B\x7D\x80-\xFF]/', $string)) {
+ if (!$force_quotes && !preg_match('/[\x00-\x20\x22\x25\x28-\x2A\x5B-\x5D\x7B\x7D\x80-\xFF]/', $string)) {
return $string;
}
+
// quoted-string
if (!preg_match('/[\r\n\x00\x80-\xFF]/', $string)) {
return '"' . addcslashes($string, '\\"') . '"';