diff --git a/plugins/calendar/TODO b/plugins/calendar/TODO index 4751843f..cec5762c 100644 --- a/plugins/calendar/TODO +++ b/plugins/calendar/TODO @@ -21,7 +21,7 @@ + View: 3.7: Small month overview calendar - View: 3.5: Search + View: 3.9: Alter event with drag/drop -- Option: 4.12: Set default reminder time ++ Option: 4.12: Set default reminder time - Edit: 3.23: Specify folder for new event (prefs) - Receive: 1.20: Invitation handling diff --git a/plugins/calendar/calendar.js b/plugins/calendar/calendar.js index 6630dfa2..1ef5894e 100644 --- a/plugins/calendar/calendar.js +++ b/plugins/calendar/calendar.js @@ -199,14 +199,13 @@ window.rcmail && rcmail.addEventListener('init', function(evt) { $('select.edit-alarm-offset').val(''+RegExp.$1+RegExp.$3); } } - // set correct visibility by triggering onchange handlers - $('select.edit-alarm-type, select.edit-alarm-offset').change(); } + // set correct visibility by triggering onchange handlers + $('select.edit-alarm-type, select.edit-alarm-offset').change(); // enable/disable alarm property according to backend support $('#edit-alarms')[(calendar.alarms ? 'show' : 'hide')](); - // set recurrence form var recurrence = $('#edit-recurrence-frequency').val(event.recurrence ? event.recurrence.FREQ : '').change(); var interval = $('select.edit-recurrence-interval').val(event.recurrence ? event.recurrence.INTERVAL : 1); diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index eaf4cef5..86da06c9 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -174,9 +174,9 @@ class calendar extends rcube_plugin ); $field_id = 'rcmfd_time_format'; - $choices = array('HH:mm', 'H:mm', 'h:mmt'); + $choices = array('HH:mm', 'H:mm', 'h:mmt'); $select = new html_select(array('name' => '_time_format', 'id' => $field_id)); - $select->add($choices); + $select->add($choices); $p['blocks']['view']['options']['time_format'] = array( 'title' => html::label($field_id, Q($this->gettext('time_format'))), 'content' => $select->show($this->rc->config->get('calendar_time_format', "HH:mm")), @@ -185,13 +185,13 @@ class calendar extends rcube_plugin $field_id = 'rcmfd_timeslot'; $choices = array('1', '2', '3', '4', '6'); $select = new html_select(array('name' => '_timeslots', 'id' => $field_id)); - $select->add($choices); + $select->add($choices); $p['blocks']['view']['options']['timeslots'] = array( 'title' => html::label($field_id, Q($this->gettext('timeslots'))), 'content' => $select->show($this->rc->config->get('calendar_timeslots', 2)), ); - $field_id = 'rcmfd_timeslot'; + $field_id = 'rcmfd_firstday'; $select = new html_select(array('name' => '_first_day', 'id' => $field_id)); $select->add(rcube_label('sunday'), '0'); $select->add(rcube_label('monday'), '1'); @@ -205,6 +205,27 @@ class calendar extends rcube_plugin 'content' => $select->show($this->rc->config->get('calendar_first_day', 1)), ); + $field_id = 'rcmfd_alarm'; + $select_type = new html_select(array('name' => '_alarm_type', 'id' => $field_id)); + $select_type->add($this->gettext('none'), ''); + $select_type->add($this->gettext('alarmdisplayoption'), 'DISPLAY'); + $select_type->add($this->gettext('alarmemailoption'), 'EMAIL'); + + $input_value = new html_inputfield(array('name' => '_alarm_value', 'id' => $field_id . 'value', 'size' => 3)); + $select_offset = new html_select(array('name' => '_alarm_offset', 'id' => $field_id . 'offset')); + foreach (array('-M','-H','-D','+M','+H','+D') as $trigger) + $select_offset->add($this->gettext('trigger' . $trigger), $trigger); + + $p['blocks']['view']['options']['alarmtype'] = array( + 'title' => html::label($field_id, Q($this->gettext('defaultalarmtype'))), + 'content' => $select_type->show($this->rc->config->get('calendar_default_alarm_type', '')), + ); + $preset = self::parse_alaram_value($this->rc->config->get('calendar_default_alarm_offset', '-15M')); + $p['blocks']['view']['options']['alarmoffset'] = array( + 'title' => html::label($field_id . 'value', Q($this->gettext('defaultalarmoffset'))), + 'content' => $input_value->show($preset[0]) . ' ' . $select_offset->show($preset[1]), + ); + // category definitions $p['blocks']['categories']['name'] = $this->gettext('categories'); @@ -280,13 +301,19 @@ class calendar extends rcube_plugin foreach ((array)$old_categories[$key] as $key => $name) { $this->driver->remove_category($name); } + + // compose default alarm preset value + $alarm_offset = get_input_value('_alarm_offset', RCUBE_INPUT_POST); + $default_alam = $alarm_offset[0] . intval(get_input_value('_alarm_value', RCUBE_INPUT_POST)) . $alarm_offset[1]; $p['prefs'] = array( + 'calendar_categories' => $new_categories, 'calendar_default_view' => get_input_value('_default_view', RCUBE_INPUT_POST), 'calendar_time_format' => get_input_value('_time_format', RCUBE_INPUT_POST), 'calendar_timeslots' => get_input_value('_timeslots', RCUBE_INPUT_POST), 'calendar_first_day' => get_input_value('_first_day', RCUBE_INPUT_POST), - 'calendar_categories' => $new_categories, + 'calendar_default_alarm_type' => get_input_value('_alarm_type', RCUBE_INPUT_POST), + 'calendar_default_alarm_offset' => $default_alam, ); } @@ -471,8 +498,8 @@ class calendar extends rcube_plugin if (preg_match('/@(\d+)/', $trigger, $m)) { $text .= ' ' . $this->gettext(array('name' => 'alarmat', 'vars' => array('datetime' => format_date($m[1])))); } - else if (preg_match('/([+-])(\d+)([HMD])/', $trigger, $m)) { - $text .= ' ' . intval($m[2]) . ' ' . $this->gettext('trigger' . $m[1] . $m[3]); + else if ($val = self::parse_alaram_value($trigger)) { + $text .= ' ' . intval($val[0]) . ' ' . $this->gettext('trigger' . $val[1]); } else return false; @@ -488,4 +515,12 @@ class calendar extends rcube_plugin } + public static function parse_alaram_value($val) + { + if (preg_match('/([+-])(\d+)([HMD])/', $val, $m)) + return array($m[2], $m[1].$m[3]); + + return false; + } + } diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php index 96e39e64..afb622a2 100644 --- a/plugins/calendar/lib/calendar_ui.php +++ b/plugins/calendar/lib/calendar_ui.php @@ -210,7 +210,7 @@ class calendar_ui unset($attrib['name']); $select_type = new html_select(array('name' => 'alarmtype[]', 'class' => 'edit-alarm-type')); $select_type->add( - array($this->calendar->gettext('none'), $this->calendar->gettext('showmessage'), $this->calendar->gettext('byemail')), + array($this->calendar->gettext('none'), $this->calendar->gettext('alarmdisplayoption'), $this->calendar->gettext('alarmemailoption')), array('','DISPLAY','EMAIL')); $input_value = new html_inputfield(array('name' => 'alarmvalue[]', 'class' => 'edit-alarm-value', 'size' => 3)); @@ -221,13 +221,14 @@ class calendar_ui foreach (array('-M','-H','-D','+M','+H','+D','@') as $trigger) $select_offset->add($this->calendar->gettext('trigger' . $trigger), $trigger); - // TODO: pre-set with default values from user settings + // pre-set with default values from user settings + $preset = calendar::parse_alaram_value($this->rc->config->get('calendar_default_alarm_offset', '-15M')); $hidden = array('style' => 'display:none'); $html = html::span('edit-alarm-set', - $select_type->show('') . ' ' . + $select_type->show($this->rc->config->get('calendar_default_alarm_type', '')) . ' ' . html::span(array('class' => 'edit-alarm-values', 'style' => 'display:none'), - $input_value->show(15) . ' ' . - $select_offset->show('-M') . ' ' . + $input_value->show($preset[0]) . ' ' . + $select_offset->show($preset[1]) . ' ' . $input_date->show('', $hidden) . ' ' . $input_time->show('', $hidden) ) diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc index d7bcb5b5..835dead0 100644 --- a/plugins/calendar/localization/en_US.inc +++ b/plugins/calendar/localization/en_US.inc @@ -49,8 +49,12 @@ $labels['next_year'] = 'Next year'; $labels['next_month'] = 'Next month'; $labels['choose_date'] = 'Choose date'; -$labels['showmessage'] = 'Message'; -$labels['byemail'] = 'E-mail'; +// alarm/reminder settings +$labels['alarmemail'] = 'Send E-mail'; +$labels['alarmdisplay'] = 'Show message'; +$labels['alarmdisplayoption'] = 'Message'; +$labels['alarmemailoption'] = 'E-mail'; +$labels['alarmat'] = 'at $datetime'; $labels['trigger@'] = 'on date'; $labels['trigger-M'] = 'minutes before'; $labels['trigger-H'] = 'hours before'; @@ -59,11 +63,10 @@ $labels['trigger+M'] = 'minutes after'; $labels['trigger+H'] = 'hours after'; $labels['trigger+D'] = 'days after'; $labels['addalarm'] = 'add alarm'; +$labels['defaultalarmtype'] = 'Default reminder setting'; +$labels['defaultalarmoffset'] = 'Default reminder time'; -$labels['alarmemail'] = 'Send E-mail'; -$labels['alarmdisplay'] = 'Show message'; -$labels['alarmat'] = 'at $datetime'; - +// event dialog tabs $labels['tabsummary'] = 'Summary'; $labels['tabrecurrence'] = 'Recurrence'; $labels['tabattendees'] = 'Participants';