Fix handling of alarms specified as PT0S, PT0M, etc. (T653)

This commit is contained in:
Aleksander Machniak 2015-08-05 04:39:46 -04:00
parent d49a4457b1
commit f7293f555b
3 changed files with 19 additions and 9 deletions

View file

@ -337,9 +337,9 @@ function rcube_libcalendaring(settings)
$(this).parent().find('span.edit-alarm-values')[(this.selectedIndex>0?'show':'hide')]();
});
$(prefix+' select.edit-alarm-offset').change(function(){
var mode = $(this).val() == '@' ? 'show' : 'hide';
$(this).parent().find('.edit-alarm-date, .edit-alarm-time')[mode]();
$(this).parent().find('.edit-alarm-value').prop('disabled', mode == 'show');
var val = $(this).val();
$(this).parent().find('.edit-alarm-date, .edit-alarm-time')[val == '@' ? 'show' : 'hide']();
$(this).parent().find('.edit-alarm-value').prop('disabled', val === '@' || val === '0');
});
$(prefix+' .edit-alarm-date').removeClass('hasDatepicker').removeAttr('id').datepicker(datepicker_settings);
@ -397,6 +397,10 @@ function rcube_libcalendaring(settings)
$('input.edit-alarm-date', domnode).val(this.format_datetime(ondate, 1));
$('input.edit-alarm-time', domnode).val(this.format_datetime(ondate, 2));
}
else if (String(alarm.trigger).match(/^[-+]*0[MHDS]$/)) {
$('input.edit-alarm-value', domnode).val('0');
$('select.edit-alarm-offset', domnode).val('0');
}
else if (String(alarm.trigger).match(/([-+])(\d+)([MHDS])/)) {
val = RegExp.$2; offset = ''+RegExp.$1+RegExp.$3;
$('input.edit-alarm-value', domnode).val(val);
@ -419,6 +423,9 @@ function rcube_libcalendaring(settings)
if (offset == '@') {
alarm.trigger = '@' + me.date2unixtime(me.parse_datetime($('input.edit-alarm-time', elem).val(), $('input.edit-alarm-date', elem).val()));
}
else if (offset === '0') {
alarm.trigger = '0S';
}
else if (!isNaN((val = parseInt($('input.edit-alarm-value', elem).val()))) && val >= 0) {
alarm.trigger = offset[0] + val + offset[1];
}

View file

@ -324,19 +324,21 @@ class libcalendaring extends rcube_plugin
public function alarm_select($attrib, $alarm_types, $absolute_time = true)
{
unset($attrib['name']);
$select_type = new html_select(array('name' => 'alarmtype[]', 'class' => 'edit-alarm-type', 'id' => $attrib['id']));
$input_value = new html_inputfield(array('name' => 'alarmvalue[]', 'class' => 'edit-alarm-value', 'size' => 3));
$input_date = new html_inputfield(array('name' => 'alarmdate[]', 'class' => 'edit-alarm-date', 'size' => 10));
$input_time = new html_inputfield(array('name' => 'alarmtime[]', 'class' => 'edit-alarm-time', 'size' => 6));
$select_type = new html_select(array('name' => 'alarmtype[]', 'class' => 'edit-alarm-type', 'id' => $attrib['id']));
$select_offset = new html_select(array('name' => 'alarmoffset[]', 'class' => 'edit-alarm-offset'));
$select_type->add($this->gettext('none'), '');
foreach ($alarm_types as $type)
$select_type->add($this->gettext(strtolower("alarm{$type}option")), $type);
$input_value = new html_inputfield(array('name' => 'alarmvalue[]', 'class' => 'edit-alarm-value', 'size' => 3));
$input_date = new html_inputfield(array('name' => 'alarmdate[]', 'class' => 'edit-alarm-date', 'size' => 10));
$input_time = new html_inputfield(array('name' => 'alarmtime[]', 'class' => 'edit-alarm-time', 'size' => 6));
$select_offset = new html_select(array('name' => 'alarmoffset[]', 'class' => 'edit-alarm-offset'));
foreach (array('-M','-H','-D','+M','+H','+D') as $trigger)
$select_offset->add($this->gettext('trigger' . $trigger), $trigger);
$select_offset->add($this->gettext('trigger0'), '0');
if ($absolute_time)
$select_offset->add($this->gettext('trigger@'), '@');

View file

@ -29,6 +29,7 @@ $labels['trigger-D'] = 'days before';
$labels['trigger+M'] = 'minutes after';
$labels['trigger+H'] = 'hours after';
$labels['trigger+D'] = 'days after';
$labels['trigger0'] = 'on time';
$labels['triggerattime'] = 'at time';
$labels['addalarm'] = 'Add alarm';
$labels['removealarm'] = 'Remove alarm';