Branch 'dev/new-foldernav' - 3 commits - plugins/libkolab
Thomas Brüderli
bruederli at kolabsys.com
Fri May 23 10:08:26 CEST 2014
plugins/libkolab/lib/kolab_storage.php | 35 ++++++++++++++++++++++-----------
1 file changed, 24 insertions(+), 11 deletions(-)
New commits:
commit 6454bb57cfbf59846eb5f6f8f80a620e95f73682
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Fri May 23 10:08:20 2014 +0200
Small fix when listing subscribed user folders
diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php
index dd61513..28c22e9 100644
--- a/plugins/libkolab/lib/kolab_storage.php
+++ b/plugins/libkolab/lib/kolab_storage.php
@@ -792,8 +792,9 @@ class kolab_storage
$folders = self::$imap->list_folders_subscribed($root, $mbox);
// add temporarily subscribed folders
- if (self::$with_tempsubs && is_array($_SESSION['kolab_subscribed_folders']))
+ if (self::$with_tempsubs && is_array($_SESSION['kolab_subscribed_folders'])) {
$folders = array_unique(array_merge($folders, $_SESSION['kolab_subscribed_folders']));
+ }
}
else {
$folders = self::_imap_list_folders($root, $mbox);
@@ -1494,12 +1495,18 @@ class kolab_storage
$other_ns = rtrim(self::namespace_root('other'), $delimiter);
$path_len = count(explode($delimiter, $other_ns));
- foreach ((array)self::list_folders($other_ns . $delimiter, '*', $type, $subscribed) as $foldername) {
+ foreach ((array)self::list_folders($other_ns . $delimiter, '*', '', $subscribed) as $foldername) {
if ($foldername == 'INBOX') // skip INBOX which is added by default
continue;
- // truncate folder path to top-level folders of the 'other' namespace
$path = explode($delimiter, $foldername);
+
+ // compare folder type if a subfolder is listed
+ if ($type && count($path) > $path_len + 1 && $type != self::folder_type($foldername)) {
+ continue;
+ }
+
+ // truncate folder path to top-level folders of the 'other' namespace
$foldername = join($delimiter, array_slice($path, 0, $path_len + 1));
if (!$folders[$foldername]) {
commit 5079da4a90dc69a6de4d8a674fa6c5612c7d743a
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Fri May 23 09:32:43 2014 +0200
Don't fetch all annotations from 'other' namespace when called from kolab_storage::list_user_folders()
diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php
index 609ac5e..dd61513 100644
--- a/plugins/libkolab/lib/kolab_storage.php
+++ b/plugins/libkolab/lib/kolab_storage.php
@@ -760,12 +760,17 @@ class kolab_storage
return $folders;
}
-
$prefix = $root . $mbox;
$regexp = '/^' . preg_quote($filter, '/') . '(\..+)?$/';
- // get folders types
- $folderdata = self::folders_typedata($prefix);
+ // get folders types for all folders
+ if (!$subscribed || $prefix == '*' || !self::$config->get('kolab_skip_namespace')) {
+ $folderdata = self::folders_typedata($prefix);
+ }
+ else {
+ // fetch folder types for the effective list of (subscribed) folders when post-filtering
+ $folderdata = array();
+ }
if (!is_array($folderdata)) {
return array();
@@ -1489,7 +1494,7 @@ class kolab_storage
$other_ns = rtrim(self::namespace_root('other'), $delimiter);
$path_len = count(explode($delimiter, $other_ns));
- foreach ((array)self::list_folders($other_ns, '*', $type, $subscribed) as $foldername) {
+ foreach ((array)self::list_folders($other_ns . $delimiter, '*', $type, $subscribed) as $foldername) {
if ($foldername == 'INBOX') // skip INBOX which is added by default
continue;
commit bb0312280cc72e2a5b48a08ba85b6a6282f54630
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Fri May 23 09:18:35 2014 +0200
Avoid PHP errors when IMAP doesn't provide valid data
diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php
index 1fd3d58..609ac5e 100644
--- a/plugins/libkolab/lib/kolab_storage.php
+++ b/plugins/libkolab/lib/kolab_storage.php
@@ -1023,14 +1023,15 @@ class kolab_storage
// GETMETADATA "%" doesn't list shared or other namespace folders but "*" would
if ($ns_root == '') {
foreach ((array)self::$imap->get_metadata('%', $type_keys) as $folder => $metadata) {
- if (!in_array($folder, $blacklist)) {
+ if (!in_array($folder, $blacklist) &&
+ ($data = self::$imap->get_metadata($folder.$delimiter.'*', $type_keys))) {
$folderdata[$folder] = $metadata;
- $folderdata += self::$imap->get_metadata($folder.$delimiter.'*', $type_keys);
+ $folderdata += $data;
}
}
}
- else {
- $folderdata += self::$imap->get_metadata($ns_root.$delimiter.'*', $type_keys);
+ else if ($data = self::$imap->get_metadata($ns_root.$delimiter.'*', $type_keys)) {
+ $folderdata += $data;
}
}
}
@@ -1324,7 +1325,7 @@ class kolab_storage
// check if we have any folder in personal namespace
// folder(s) may exist but not subscribed
- foreach ($folders as $f => $data) {
+ foreach ((array)$folders as $f => $data) {
if (strpos($data[self::CTYPE_KEY_PRIVATE], $type) === 0) {
$folder = $f;
break;
More information about the commits
mailing list