Respect .default annotation for calendar selection (if no user setting exists)

This commit is contained in:
Thomas Bruederli 2012-09-20 10:10:50 +02:00
parent cf6a99b1c8
commit 517c86c8df
3 changed files with 19 additions and 18 deletions

View file

@ -229,23 +229,26 @@ class calendar extends rcube_plugin
}
/**
*
* Get properties of the calendar this user has specified as default
*/
public function get_default_calendar($writeable = false)
{
$cal_id = $this->rc->config->get('calendar_default_calendar');
$default_id = $this->rc->config->get('calendar_default_calendar');
$calendars = $this->driver->list_calendars();
$calendar = $calendars[$cal_id] ? $calendars[$cal_id] : null;
$calendar = $calendars[$default_id] ?: null;
if (!$calendar || ($writeable && $calendar['readonly'])) {
foreach ($calendars as $cal) {
if (!$writeable || !$cal['readonly']) {
if ($cal['default']) {
$calendar = $cal;
break;
}
if (!$writeable || !$cal['readonly']) {
$first = $cal;
}
}
}
return $calendar;
return $calendar ?: $first;
}
@ -402,10 +405,12 @@ class calendar extends rcube_plugin
foreach ((array)$this->driver->list_calendars() as $id => $prop) {
if (!$prop['readonly'])
$select_cal->add($prop['name'], strval($id));
if ($prop['default'])
$default_calendar = $id;
}
$p['blocks']['view']['options']['defaultcalendar'] = array(
'title' => html::label($field_id . 'value', Q($this->gettext('defaultcalendar'))),
'content' => $select_cal->show($this->rc->config->get('calendar_default_calendar', '')),
'content' => $select_cal->show($this->rc->config->get('calendar_default_calendar', $default_calendar)),
);
@ -726,13 +731,14 @@ class calendar extends rcube_plugin
}
}
$default_calendar = $calendar_select ? $this->get_default_calendar(true) : null;
$this->rc->output->command('plugin.update_event_rsvp_status', array(
'uid' => $event['uid'],
'id' => asciiwords($event['uid'], true),
'status' => $status,
'action' => $action,
'html' => $html,
'select' => $calendar_select ? html::span('calendar-select', $this->gettext('saveincalendar') . ' ' . $calendar_select->show($this->rc->config->get('calendar_default_calendar'))) : '',
'select' => $calendar_select ? html::span('calendar-select', $this->gettext('saveincalendar') . ' ' . $calendar_select->show($this->rc->config->get('calendar_default_calendar', $default_calendar['id']))) : '',
));
return;
@ -1768,17 +1774,9 @@ class calendar extends rcube_plugin
// successfully parsed events?
if (!empty($events) && ($event = $events[$index])) {
// find writeable calendar to store event
$cal_id = !empty($_REQUEST['_calendar']) ? get_input_value('_calendar', RCUBE_INPUT_POST) : $this->rc->config->get('calendar_default_calendar');
$cal_id = !empty($_REQUEST['_calendar']) ? get_input_value('_calendar', RCUBE_INPUT_POST) : null;
$calendars = $this->driver->list_calendars();
$calendar = $calendars[$cal_id] ? $calendars[$cal_id] : null;
if (!$calendar || $calendar['readonly']) {
foreach ($calendars as $cal) {
if (!$cal['readonly']) {
$calendar = $cal;
break;
}
}
}
$calendar = $calendars[$cal_id] ?: $this->get_default_calendar(true);
// update my attendee status according to submitted method
if (!empty($status)) {

View file

@ -103,6 +103,7 @@ class kolab_driver extends calendar_driver
}
$calendars = $names = array();
$default_folder = class_exists('kolab_folders') ? kolab_folders::default_folder('event') : '';
foreach ($this->calendars as $id => $cal) {
if ($cal->ready) {
@ -116,6 +117,7 @@ class kolab_driver extends calendar_driver
'readonly' => $cal->readonly,
'showalarms' => $cal->alarms,
'class_name' => $cal->get_namespace(),
'default' => $cal->get_realname() == $default_folder,
'active' => $cal->storage->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION),
);
}

View file

@ -115,6 +115,7 @@ class tasklist_kolab_driver extends tasklist_driver
'editable' => !$readonly,
'active' => $folder->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION),
'parentfolder' => $path_imap,
'default' => $utf7name == $default_folder,
'class_name' => trim($folder->get_namespace() . ($utf7name == $default_folder ? ' default' : '')),
);
$this->lists[$tasklist['id']] = $tasklist;