summaryrefslogtreecommitdiff
path: root/plugins/kolab_folders
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kolab_folders')
-rw-r--r--plugins/kolab_folders/kolab_folders.php52
1 files changed, 41 insertions, 11 deletions
diff --git a/plugins/kolab_folders/kolab_folders.php b/plugins/kolab_folders/kolab_folders.php
index 0677b41..6de4ed3 100644
--- a/plugins/kolab_folders/kolab_folders.php
+++ b/plugins/kolab_folders/kolab_folders.php
@@ -26,8 +26,9 @@ class kolab_folders extends rcube_plugin
{
public $task = '?(?!login).*';
- public $types = array('mail', 'event', 'journal', 'task', 'note', 'contact', 'configuration', 'file', 'freebusy');
+ public $types = array('mail', 'event', 'journal', 'task', 'note', 'contact', 'configuration', 'file', 'freebusy');
public $mail_types = array('inbox', 'drafts', 'sentitems', 'outbox', 'wastebasket', 'junkemail');
+ public $act_types = array('event', 'task');
private $rc;
private static $instance;
@@ -86,7 +87,7 @@ class kolab_folders extends rcube_plugin
// Create default folders
if ($args['root'] == '' && $args['name'] = '*') {
- $this->create_default_folders($folders, $args['filter'], $folderdata);
+ $this->create_default_folders($folders, $args['filter'], $folderdata, $args['mode'] == 'LSUB');
}
$args['folders'] = $folders;
@@ -476,7 +477,7 @@ class kolab_folders extends rcube_plugin
/**
* Creates default folders if they doesn't exist
*/
- private function create_default_folders(&$folders, $filter, $folderdata = null)
+ private function create_default_folders(&$folders, $filter, $folderdata = null, $lsub = false)
{
$storage = $this->rc->get_storage();
$namespace = $storage->get_namespace();
@@ -530,25 +531,54 @@ class kolab_folders extends rcube_plugin
}
list($type1, $type2) = explode('.', $type);
- $exists = !empty($folderdata[$foldername]) || $foldername == 'INBOX';
+
+ $activate = in_array($type1, $this->act_types);
+ $exists = false;
+ $result = false;
+
+ // check if folder exists
+ if (!empty($folderdata[$foldername]) || $foldername == 'INBOX') {
+ $exists = true;
+ }
+ else if ((!$filter || $filter == $type1) && in_array($foldername, $folders)) {
+ // this assumes also that subscribed folder exists
+ $exists = true;
+ }
+ else {
+ $exists = $storage->folder_exists($foldername);
+ }
// create folder
- if (!$exists && !$storage->folder_exists($foldername)) {
- $storage->create_folder($foldername);
- $storage->subscribe($foldername);
+ if (!$exists) {
+ $exists = $storage->create_folder($foldername);
}
- // set type
- $result = $this->set_folder_type($foldername, $type);
+ // set type + subscribe + activate
+ if ($exists) {
+ if ($result = kolab_storage::set_folder_type($foldername, $type)) {
+ // check if folder is subscribed
+ if ((!$filter || $filter == $type1) && $lsub && in_array($foldername, $folders)) {
+ // already subscribed
+ $subscribed = true;
+ }
+ else {
+ $subscribed = $storage->subscribe($foldername);
+ }
+
+ // activate folder
+ if ($activate) {
+ kolab_storage::set_state($foldername, true);
+ }
+ }
+ }
// add new folder to the result
- if ($result && (!$filter || $filter == $type1)) {
+ if ($result && (!$filter || $filter == $type1) && (!$lsub || $subscribed)) {
$folders[] = $foldername;
}
}
}
-
/**
* Static getter for default folder of the given type
*