Trigger plugin hooks to display and snooze/dismiss alarms

This commit is contained in:
Thomas Bruederli 2012-08-03 21:29:10 +02:00
parent 370b60e3ee
commit c0fc38ab9c
2 changed files with 40 additions and 16 deletions

View file

@ -772,8 +772,13 @@ class calendar extends rcube_plugin
break;
case "dismiss":
foreach (explode(',', $event['id']) as $id)
$success |= $this->driver->dismiss_alarm($id, $event['snooze']);
$event['ids'] = explode(',', $event['id']);
$plugin = $this->rc->plugins->exec_hook('dismiss_alarms', $event);
$success = $plugin['success'];
foreach ($event['ids'] as $id) {
if (strpos($id, 'cal:') === 0)
$success |= $this->driver->dismiss_alarm(substr($id, 4), $event['snooze']);
}
break;
}
@ -833,15 +838,25 @@ class calendar extends rcube_plugin
*/
function keep_alive($attr)
{
$timestamp = time();
$this->load_driver();
$alarms = $this->driver->pending_alarms(time());
if ($alarms) {
$alarms = $this->driver->pending_alarms($timestamp);
foreach ($alarms as $i => $alarm) {
$alarms[$i]['id'] = 'cal:' . $alarm['id']; // prefix ID with cal:
}
$plugin = $this->rc->plugins->exec_hook('pending_alarms', array(
'time' => $timestamp,
'alarms' => $alarms,
));
if (!$plugin['abort'] && $plugin['alarms']) {
// make sure texts and env vars are available on client
if ($this->rc->task != 'calendar') {
$this->add_texts('localization/', true);
$this->rc->output->set_env('snooze_select', $this->ui->snooze_select());
}
$this->rc->output->command('plugin.display_alarms', $this->_alarms_output($alarms));
$this->rc->output->command('plugin.display_alarms', $this->_alarms_output($plugin['alarms']));
}
}
@ -1181,9 +1196,9 @@ class calendar extends rcube_plugin
foreach ($alarms as $alarm) {
$out[] = array(
'id' => $alarm['id'],
'start' => $this->adjust_timezone($alarm['start'])->format('c'),
'end' => $this->adjust_timezone($alarm['end'])->format('c'),
'allDay' => ($event['allday'] == 1)?true:false,
'start' => $alarm['start'] ? $this->adjust_timezone($alarm['start'])->format('c') : '',
'end' => $alarm['end'] ? $this->adjust_timezone($alarm['end'])->format('c') : '',
'allDay' => ($alarm['allday'] == 1)?true:false,
'title' => $alarm['title'],
'location' => $alarm['location'],
'calendar' => $alarm['calendar'],

View file

@ -46,15 +46,24 @@ function rcube_calendar(settings)
// create a nice human-readable string for the date/time range
this.event_date_text = function(event)
{
if (!event.start)
return '';
if (!event.end)
event.end = event.start;
var fromto, duration = event.end.getTime() / 1000 - event.start.getTime() / 1000;
if (event.allDay)
fromto = $.fullCalendar.formatDate(event.start, settings['date_format']) + (duration > 86400 || event.start.getDay() != event.end.getDay() ? ' — ' + $.fullCalendar.formatDate(event.end, settings['date_format']) : '');
else if (duration < 86400 && event.start.getDay() == event.end.getDay())
fromto = $.fullCalendar.formatDate(event.start, settings['date_format']) + ' ' + $.fullCalendar.formatDate(event.start, settings['time_format']) + ' &mdash; '
+ $.fullCalendar.formatDate(event.end, settings['time_format']);
else
fromto = $.fullCalendar.formatDate(event.start, settings['date_format']) + ' ' + $.fullCalendar.formatDate(event.start, settings['time_format']) + ' &mdash; '
+ $.fullCalendar.formatDate(event.end, settings['date_format']) + ' ' + $.fullCalendar.formatDate(event.end, settings['time_format']);
if (event.allDay) {
fromto = $.fullCalendar.formatDate(event.start, settings['date_format'])
+ (duration > 86400 || event.start.getDay() != event.end.getDay() ? ' &mdash; ' + $.fullCalendar.formatDate(event.end, settings['date_format']) : '');
}
else if (duration < 86400 && event.start.getDay() == event.end.getDay()) {
fromto = $.fullCalendar.formatDate(event.start, settings['date_format']) + ' ' + $.fullCalendar.formatDate(event.start, settings['time_format'])
+ (duration > 0 ? ' &mdash; ' + $.fullCalendar.formatDate(event.end, settings['time_format']) : '');
}
else {
fromto = $.fullCalendar.formatDate(event.start, settings['date_format']) + ' ' + $.fullCalendar.formatDate(event.start, settings['time_format'])
+ (duration > 0 ? ' &mdash; ' + $.fullCalendar.formatDate(event.end, settings['date_format']) + ' ' + $.fullCalendar.formatDate(event.end, settings['time_format']) : '');
}
return fromto;
};