From 90da1250b832518daafdf4df1114fbd80a6dcf4c Mon Sep 17 00:00:00 2001 From: "Aleksander Machniak (Kolab Systems)" Date: Mon, 1 Aug 2011 11:35:12 +0200 Subject: [PATCH 1/2] Fixed object name formatting of other users folders Fixed parent folder handling in folder_selector() --- plugins/kolab_core/rcube_kolab.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/plugins/kolab_core/rcube_kolab.php b/plugins/kolab_core/rcube_kolab.php index 63ff2dc0..c93b96f0 100644 --- a/plugins/kolab_core/rcube_kolab.php +++ b/plugins/kolab_core/rcube_kolab.php @@ -348,8 +348,14 @@ class rcube_kolab $delim = $ns[1]; // get username $pos = strpos($folder, $delim); - $prefix = '('.substr($folder, 0, $pos).') '; - $folder = substr($folder, $pos+1); + if ($pos) { + $prefix = '('.substr($folder, 0, $pos).') '; + $folder = substr($folder, $pos+1); + } + else { + $prefix = '('.$folder.')'; + $folder = ''; + } $found = true; $folder_ns = 'other'; break; @@ -427,12 +433,12 @@ class rcube_kolab // get all folders of specified type $folders = self::get_folders($type); - $delim = $_SESSION['delimiter']; + $delim = $_SESSION['imap_delimiter']; $names = array(); $len = strlen($current); if ($len && ($rpos = strrpos($current, $delim))) { - $parent = substr($current, 0, $rpos-1); + $parent = substr($current, 0, $rpos); $p_len = strlen($parent); } @@ -457,6 +463,11 @@ class rcube_kolab $names[$name] = rcube_charset_convert($name, 'UTF7-IMAP'); } + // Make sure parent folder is listed (might be skipped e.g. if it's namespace root) + if ($p_len && !isset($names[$parent])) { + $names[$parent] = rcube_charset_convert($parent, 'UTF7-IMAP'); + } + // Sort folders list asort($names, SORT_LOCALE_STRING); From b67430379f179740468c626f401d0477753a3c46 Mon Sep 17 00:00:00 2001 From: "Aleksander Machniak (Kolab Systems)" Date: Mon, 1 Aug 2011 12:44:30 +0200 Subject: [PATCH 2/2] Improved folder rename handling --- .../calendar/drivers/kolab/kolab_driver.php | 22 ++++++++++++++----- .../kolab_addressbook/kolab_addressbook.php | 13 +++++++---- .../lib/kolab_addressbook_ui.php | 11 +++++++--- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 1780a6cb..0b6f5ecd 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -207,8 +207,15 @@ class kolab_driver extends calendar_driver $parent = $prop['parent']; // UTF7 $delimiter = $_SESSION['imap_delimiter']; + if (strlen($oldfolder)) { + $this->rc->imap_connect(); + $options = $this->rc->imap->mailbox_info($oldfolder); + } + + if (!empty($options) && ($options['norename'] || $options['protected'])) { + } // sanity checks (from steps/settings/save_folder.inc) - if (!strlen($folder)) { + else if (!strlen($folder)) { return false; } else if (strlen($folder) > 128) { @@ -223,9 +230,7 @@ class kolab_driver extends calendar_driver } } - // @TODO: $options - $options = array(); - if ($options['protected'] || $options['norename']) { + if (!empty($options) && ($options['protected'] || $options['norename'])) { $folder = $oldfolder; } else if (strlen($parent)) { @@ -909,6 +914,13 @@ class kolab_driver extends calendar_driver 'name' => $this->rc->gettext('properties'), ); + // Disable folder name input + if (!empty($options) && ($options['norename'] || $options['protected'])) { + $input_name = new html_hiddenfield(array('name' => 'name', 'id' => 'calendar-name')); + $formfields['name']['value'] = Q(str_replace($delimiter, ' » ', rcube_kolab::object_name($folder))) + . $input_name->show($folder); + } + // calendar name (default field) $form['props']['fieldsets']['location'] = array( 'name' => $this->rc->gettext('location'), @@ -917,7 +929,7 @@ class kolab_driver extends calendar_driver ), ); - if (!empty($options) && ($options['norename'] || $options['namespace'] != 'personal')) { + if (!empty($options) && ($options['norename'] || $options['protected'])) { // prevent user from moving folder $hidden_fields[] = array('name' => 'parent', 'value' => $path_imap); } diff --git a/plugins/kolab_addressbook/kolab_addressbook.php b/plugins/kolab_addressbook/kolab_addressbook.php index 3f88a38e..207f5412 100644 --- a/plugins/kolab_addressbook/kolab_addressbook.php +++ b/plugins/kolab_addressbook/kolab_addressbook.php @@ -420,8 +420,15 @@ class kolab_addressbook extends rcube_plugin $path = trim(get_input_value('_parent', RCUBE_INPUT_POST, true)); // UTF7-IMAP $delimiter = $_SESSION['imap_delimiter']; + if (strlen($oldfolder)) { + $this->rc->imap_connect(); + $options = $this->rc->imap->mailbox_info($oldfolder); + } + + if (!empty($options) && ($options['norename'] || $options['protected'])) { + } // sanity checks (from steps/settings/save_folder.inc) - if (!strlen($folder)) { + else if (!strlen($folder)) { $error = rcube_label('cannotbeempty'); } else if (strlen($folder) > 128) { @@ -438,9 +445,7 @@ class kolab_addressbook extends rcube_plugin } if (!$error) { - // @TODO: $options - $options = array(); - if ($options['protected'] || $options['norename']) { + if (!empty($options) && ($options['protected'] || $options['norename'])) { $folder = $oldfolder; } else if (strlen($path)) { diff --git a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php index 1cae4780..d6469935 100644 --- a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php +++ b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php @@ -144,8 +144,13 @@ class kolab_addressbook_ui 'name' => $this->rc->gettext('properties'), ); - $foldername = new html_inputfield(array('name' => '_name', 'id' => '_name', 'size' => 30)); - $foldername = $foldername->show($name); + if (!empty($options) && ($options['norename'] || $options['protected'])) { + $foldername = Q(str_replace($delimiter, ' » ', rcube_kolab::object_name($folder))); + } + else { + $foldername = new html_inputfield(array('name' => '_name', 'id' => '_name', 'size' => 30)); + $foldername = $foldername->show($name); + } $form['props']['fieldsets']['location'] = array( 'name' => $this->rc->gettext('location'), @@ -157,7 +162,7 @@ class kolab_addressbook_ui ), ); - if (!empty($options) && ($options['norename'] || $options['namespace'] != 'personal')) { + if (!empty($options) && ($options['norename'] || $options['protected'])) { // prevent user from moving folder $hidden_fields[] = array('name' => '_parent', 'value' => $path_imap); }