diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index a71d9cd4..661ede94 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -494,8 +494,10 @@ class calendar extends rcube_plugin if ($success) $this->rc->output->show_message('successfullysaved', 'confirmation'); - else - $this->rc->output->show_message('calendar.errorsaving', 'error'); + else { + $error_msg = $this->gettext('errorsaving') . ($this->driver->last_error ? ': ' . $this->driver->last_error :''); + $this->rc->output->show_message($error_msg, 'error'); + } // TODO: keep view and date selection if ($success && $reload) diff --git a/plugins/calendar/drivers/calendar_driver.php b/plugins/calendar/drivers/calendar_driver.php index d5015a2d..8b35f6ad 100644 --- a/plugins/calendar/drivers/calendar_driver.php +++ b/plugins/calendar/drivers/calendar_driver.php @@ -82,6 +82,7 @@ abstract class calendar_driver public $undelete = false; // event undelete action public $categoriesimmutable = false; public $alarm_types = array('DISPLAY'); + public $last_error; /** * Get a list of available calendars from this source diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 50792db7..9a77f1a0 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -221,15 +221,18 @@ class kolab_driver extends calendar_driver } // sanity checks (from steps/settings/save_folder.inc) else if (!strlen($folder)) { + $this->last_error = 'Invalid folder name'; return false; } else if (strlen($folder) > 128) { + $this->last_error = 'Folder name too long'; return false; } else { // these characters are problematic e.g. when used in LIST/LSUB foreach (array($delimiter, '%', '*') as $char) { if (strpos($folder, $delimiter) !== false) { + $this->last_error = 'Invalid folder name'; return false; } } @@ -254,20 +257,24 @@ class kolab_driver extends calendar_driver if ($parent_opts['namespace'] != 'personal' && (empty($parent_opts['rights']) || !preg_match('/[ck]/', implode($parent_opts))) ) { + $this->last_error = 'No permission to create folder'; return false; } } // update the folder name if (strlen($oldfolder)) { - if ($oldfolder != $folder) - $result = rcube_kolab::folder_rename($oldfolder, $folder); + if ($oldfolder != $folder) { + if (!($result = rcube_kolab::folder_rename($oldfolder, $folder))) + $this->last_error = rcube_kolab::$last_error; + } else $result = true; } // create new folder else { - $result = rcube_kolab::folder_create($folder, 'event', false); + if (!($result = rcube_kolab::folder_create($folder, 'event', false))) + $this->last_error = rcube_kolab::$last_error; } return $result ? $folder : false; @@ -291,6 +298,8 @@ class kolab_driver extends calendar_driver $this->rc->user->save_prefs($prefs); return true; } + else + $this->last_error = rcube_kolab::$last_error; } return false; diff --git a/plugins/kolab_core/rcube_kolab.php b/plugins/kolab_core/rcube_kolab.php index a97512e9..d5b87c51 100644 --- a/plugins/kolab_core/rcube_kolab.php +++ b/plugins/kolab_core/rcube_kolab.php @@ -26,6 +26,8 @@ require_once 'Horde/Perms.php'; */ class rcube_kolab { + public static $last_error; + private static $horde_auth; private static $config; private static $ready = false; @@ -254,6 +256,7 @@ class rcube_kolab $result = $folder->delete(); if (is_a($result, 'PEAR_Error')) { + self::$last_error = $result->getMessage(); return false; } @@ -283,6 +286,7 @@ class rcube_kolab )); if (is_a($result, 'PEAR_Error')) { + self::$last_error = $result->getMessage(); return false; } @@ -306,6 +310,7 @@ class rcube_kolab $result = $kolab->rename($folder); if (is_a($result, 'PEAR_Error')) { + self::$last_error = $result->getMessage(); return false; }