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