Add property for event status; specially annotate CANCELLED events in the UI
This commit is contained in:
parent
9a9cf8fe89
commit
2123ea7d97
23 changed files with 153 additions and 11 deletions
|
@ -1652,7 +1652,7 @@ class calendar extends rcube_plugin
|
||||||
*/
|
*/
|
||||||
private function notify_attendees($event, $old, $action = 'edit')
|
private function notify_attendees($event, $old, $action = 'edit')
|
||||||
{
|
{
|
||||||
if ($action == 'remove') {
|
if ($action == 'remove' || ($event['status'] == 'CANCELLED' && $old['status'] != $event['status'])) {
|
||||||
$event['cancelled'] = true;
|
$event['cancelled'] = true;
|
||||||
$is_cancelled = true;
|
$is_cancelled = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -325,6 +325,11 @@ function rcube_calendar_ui(settings)
|
||||||
$('#event-priority').show().children('.event-text').html(Q(event.priority+' '+priolabels[event.priority]));
|
$('#event-priority').show().children('.event-text').html(Q(event.priority+' '+priolabels[event.priority]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (event.status) {
|
||||||
|
var status_lc = String(event.status).toLowerCase();
|
||||||
|
$('#event-status').show().children('.event-text').html(Q(rcmail.gettext(status_lc,'calendar')));
|
||||||
|
$dialog.addClass('status-'+status_lc);
|
||||||
|
}
|
||||||
if (event.sensitivity && event.sensitivity != 'public') {
|
if (event.sensitivity && event.sensitivity != 'public') {
|
||||||
$('#event-sensitivity').show().children('.event-text').html(Q(sensitivitylabels[event.sensitivity]));
|
$('#event-sensitivity').show().children('.event-text').html(Q(sensitivitylabels[event.sensitivity]));
|
||||||
$dialog.addClass('sensitivity-'+event.sensitivity);
|
$dialog.addClass('sensitivity-'+event.sensitivity);
|
||||||
|
@ -491,6 +496,7 @@ function rcube_calendar_ui(settings)
|
||||||
var vurl = $('#edit-url').val(event.vurl || '');
|
var vurl = $('#edit-url').val(event.vurl || '');
|
||||||
var categories = $('#edit-categories').val(event.categories);
|
var categories = $('#edit-categories').val(event.categories);
|
||||||
var calendars = $('#edit-calendar').val(event.calendar);
|
var calendars = $('#edit-calendar').val(event.calendar);
|
||||||
|
var eventstatus = $('#edit-event-status').val(event.status);
|
||||||
var freebusy = $('#edit-free-busy').val(event.free_busy);
|
var freebusy = $('#edit-free-busy').val(event.free_busy);
|
||||||
var priority = $('#edit-priority').val(event.priority);
|
var priority = $('#edit-priority').val(event.priority);
|
||||||
var sensitivity = $('#edit-sensitivity').val(event.sensitivity);
|
var sensitivity = $('#edit-sensitivity').val(event.sensitivity);
|
||||||
|
@ -682,6 +688,7 @@ function rcube_calendar_ui(settings)
|
||||||
free_busy: freebusy.val(),
|
free_busy: freebusy.val(),
|
||||||
priority: priority.val(),
|
priority: priority.val(),
|
||||||
sensitivity: sensitivity.val(),
|
sensitivity: sensitivity.val(),
|
||||||
|
status: eventstatus.val(),
|
||||||
recurrence: '',
|
recurrence: '',
|
||||||
alarms: '',
|
alarms: '',
|
||||||
attendees: event_attendees,
|
attendees: event_attendees,
|
||||||
|
@ -2146,6 +2153,9 @@ function rcube_calendar_ui(settings)
|
||||||
if (event.alarms)
|
if (event.alarms)
|
||||||
element.find('div.fc-event-time').append('<i class="fc-icon-alarms"></i>');
|
element.find('div.fc-event-time').append('<i class="fc-icon-alarms"></i>');
|
||||||
}
|
}
|
||||||
|
if (event.status) {
|
||||||
|
element.addClass('cal-event-status-' + String(event.status).toLowerCase());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
* 'recurrence_id' => 'ID of the recurrence group', // usually the ID of the starting event
|
* 'recurrence_id' => 'ID of the recurrence group', // usually the ID of the starting event
|
||||||
* 'categories' => 'Event category',
|
* 'categories' => 'Event category',
|
||||||
* 'free_busy' => 'free|busy|outofoffice|tentative', // Show time as
|
* 'free_busy' => 'free|busy|outofoffice|tentative', // Show time as
|
||||||
|
* 'status' => 'TENTATIVE|CONFIRMED|CANCELLED', // event status according to RFC 2445
|
||||||
* 'priority' => 0-9, // Event priority (0=undefined, 1=highest, 9=lowest)
|
* 'priority' => 0-9, // Event priority (0=undefined, 1=highest, 9=lowest)
|
||||||
* 'sensitivity' => 'public|private|confidential', // Event sensitivity
|
* 'sensitivity' => 'public|private|confidential', // Event sensitivity
|
||||||
* 'alarms' => '-15M:DISPLAY', // DEPRECATED Reminder settings inspired by valarm definition (e.g. display alert 15 minutes before event)
|
* 'alarms' => '-15M:DISPLAY', // DEPRECATED Reminder settings inspired by valarm definition (e.g. display alert 15 minutes before event)
|
||||||
|
|
|
@ -44,6 +44,7 @@ CREATE TABLE IF NOT EXISTS `events` (
|
||||||
`free_busy` tinyint(1) NOT NULL DEFAULT '0',
|
`free_busy` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
`priority` tinyint(1) NOT NULL DEFAULT '0',
|
`priority` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
`sensitivity` tinyint(1) NOT NULL DEFAULT '0',
|
`sensitivity` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
`status` varchar(32) NOT NULL DEFAULT '',
|
||||||
`alarms` varchar(255) DEFAULT NULL,
|
`alarms` varchar(255) DEFAULT NULL,
|
||||||
`attendees` text DEFAULT NULL,
|
`attendees` text DEFAULT NULL,
|
||||||
`notifyat` datetime DEFAULT NULL,
|
`notifyat` datetime DEFAULT NULL,
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
-- MySQL database updates since version 1.0
|
||||||
|
|
||||||
|
ALTER TABLE `events` ADD `status` VARCHAR(32) NOT NULL AFTER `sensitivity`;
|
|
@ -60,6 +60,7 @@ CREATE TABLE events (
|
||||||
free_busy smallint NOT NULL DEFAULT 0,
|
free_busy smallint NOT NULL DEFAULT 0,
|
||||||
priority smallint NOT NULL DEFAULT 0,
|
priority smallint NOT NULL DEFAULT 0,
|
||||||
sensitivity smallint NOT NULL DEFAULT 0,
|
sensitivity smallint NOT NULL DEFAULT 0,
|
||||||
|
status character varying(32) NOT NULL,
|
||||||
alarms varchar(255) DEFAULT NULL,
|
alarms varchar(255) DEFAULT NULL,
|
||||||
attendees text DEFAULT NULL,
|
attendees text DEFAULT NULL,
|
||||||
notifyat timestamp without time zone DEFAULT NULL,
|
notifyat timestamp without time zone DEFAULT NULL,
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
-- Postgres database updates since version 1.0
|
||||||
|
|
||||||
|
ALTER TABLE events ADD status character varying(32) NOT NULL;
|
|
@ -43,6 +43,7 @@ CREATE TABLE events (
|
||||||
free_busy tinyint(1) NOT NULL default '0',
|
free_busy tinyint(1) NOT NULL default '0',
|
||||||
priority tinyint(1) NOT NULL default '0',
|
priority tinyint(1) NOT NULL default '0',
|
||||||
sensitivity tinyint(1) NOT NULL default '0',
|
sensitivity tinyint(1) NOT NULL default '0',
|
||||||
|
status varchar(32) NOT NULL default '',
|
||||||
alarms varchar(255) default NULL,
|
alarms varchar(255) default NULL,
|
||||||
attendees text default NULL,
|
attendees text default NULL,
|
||||||
notifyat datetime default NULL,
|
notifyat datetime default NULL,
|
||||||
|
|
67
plugins/calendar/drivers/database/SQL/sqlite/2014040900.sql
Normal file
67
plugins/calendar/drivers/database/SQL/sqlite/2014040900.sql
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
-- SQLite database updates since version 0.9-beta
|
||||||
|
|
||||||
|
-- ALTER TABLE events ADD url varchar(255) NOT NULL AFTER categories;
|
||||||
|
|
||||||
|
CREATE TABLE temp_events (
|
||||||
|
event_id integer NOT NULL PRIMARY KEY,
|
||||||
|
calendar_id integer NOT NULL default '0',
|
||||||
|
recurrence_id integer NOT NULL default '0',
|
||||||
|
uid varchar(255) NOT NULL default '',
|
||||||
|
created datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
changed datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
sequence integer NOT NULL default '0',
|
||||||
|
start datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
end datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
recurrence varchar(255) default NULL,
|
||||||
|
title varchar(255) NOT NULL,
|
||||||
|
description text NOT NULL,
|
||||||
|
location varchar(255) NOT NULL default '',
|
||||||
|
categories varchar(255) NOT NULL default '',
|
||||||
|
url varchar(255) NOT NULL default '',
|
||||||
|
all_day tinyint(1) NOT NULL default '0',
|
||||||
|
free_busy tinyint(1) NOT NULL default '0',
|
||||||
|
priority tinyint(1) NOT NULL default '0',
|
||||||
|
sensitivity tinyint(1) NOT NULL default '0',
|
||||||
|
alarms varchar(255) default NULL,
|
||||||
|
attendees text default NULL,
|
||||||
|
notifyat datetime default NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO temp_events (event_id, calendar_id, recurrence_id, uid, created, changed, sequence, start, end, recurrence, title, description, location, categories, url, all_day, free_busy, priority, sensitivity, alarms, attendees, notifyat)
|
||||||
|
SELECT event_id, calendar_id, recurrence_id, uid, created, changed, sequence, start, end, recurrence, title, description, location, categories, url, all_day, free_busy, priority, sensitivity, alarms, attendees, notifyat
|
||||||
|
FROM events;
|
||||||
|
|
||||||
|
DROP TABLE events;
|
||||||
|
|
||||||
|
CREATE TABLE events (
|
||||||
|
event_id integer NOT NULL PRIMARY KEY,
|
||||||
|
calendar_id integer NOT NULL default '0',
|
||||||
|
recurrence_id integer NOT NULL default '0',
|
||||||
|
uid varchar(255) NOT NULL default '',
|
||||||
|
created datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
changed datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
sequence integer NOT NULL default '0',
|
||||||
|
start datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
end datetime NOT NULL default '1000-01-01 00:00:00',
|
||||||
|
recurrence varchar(255) default NULL,
|
||||||
|
title varchar(255) NOT NULL,
|
||||||
|
description text NOT NULL,
|
||||||
|
location varchar(255) NOT NULL default '',
|
||||||
|
categories varchar(255) NOT NULL default '',
|
||||||
|
url varchar(255) NOT NULL default '',
|
||||||
|
all_day tinyint(1) NOT NULL default '0',
|
||||||
|
free_busy tinyint(1) NOT NULL default '0',
|
||||||
|
priority tinyint(1) NOT NULL default '0',
|
||||||
|
sensitivity tinyint(1) NOT NULL default '0',
|
||||||
|
status varchar(32) NOT NULL default '',
|
||||||
|
alarms varchar(255) default NULL,
|
||||||
|
attendees text default NULL,
|
||||||
|
notifyat datetime default NULL,
|
||||||
|
CONSTRAINT fk_events_calendar_id FOREIGN KEY (calendar_id)
|
||||||
|
REFERENCES calendars(calendar_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO events (event_id, calendar_id, recurrence_id, uid, created, changed, sequence, start, end, recurrence, title, description, location, categories, url, all_day, free_busy, priority, sensitivity, alarms, attendees, notifyat)
|
||||||
|
SELECT event_id, calendar_id, recurrence_id, uid, created, changed, sequence, start, end, recurrence, title, description, location, categories, url, all_day, free_busy, priority, sensitivity, alarms, attendees, notifyat
|
||||||
|
FROM temp_events;
|
||||||
|
|
|
@ -271,8 +271,8 @@ class database_driver extends calendar_driver
|
||||||
|
|
||||||
$this->rc->db->query(sprintf(
|
$this->rc->db->query(sprintf(
|
||||||
"INSERT INTO " . $this->db_events . "
|
"INSERT INTO " . $this->db_events . "
|
||||||
(calendar_id, created, changed, uid, %s, %s, all_day, recurrence, title, description, location, categories, url, free_busy, priority, sensitivity, attendees, alarms, notifyat)
|
(calendar_id, created, changed, uid, %s, %s, all_day, recurrence, title, description, location, categories, url, free_busy, priority, sensitivity, status, attendees, alarms, notifyat)
|
||||||
VALUES (?, %s, %s, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
VALUES (?, %s, %s, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||||
$this->rc->db->quote_identifier('start'),
|
$this->rc->db->quote_identifier('start'),
|
||||||
$this->rc->db->quote_identifier('end'),
|
$this->rc->db->quote_identifier('end'),
|
||||||
$this->rc->db->now(),
|
$this->rc->db->now(),
|
||||||
|
@ -292,6 +292,7 @@ class database_driver extends calendar_driver
|
||||||
intval($event['free_busy']),
|
intval($event['free_busy']),
|
||||||
intval($event['priority']),
|
intval($event['priority']),
|
||||||
intval($event['sensitivity']),
|
intval($event['sensitivity']),
|
||||||
|
strval($event['status']),
|
||||||
$event['attendees'],
|
$event['attendees'],
|
||||||
$event['alarms'],
|
$event['alarms'],
|
||||||
$event['notifyat']
|
$event['notifyat']
|
||||||
|
@ -451,6 +452,10 @@ class database_driver extends calendar_driver
|
||||||
$event['free_busy'] = intval($this->free_busy_map[strtolower($event['free_busy'])]);
|
$event['free_busy'] = intval($this->free_busy_map[strtolower($event['free_busy'])]);
|
||||||
$event['sensitivity'] = intval($this->sensitivity_map[strtolower($event['sensitivity'])]);
|
$event['sensitivity'] = intval($this->sensitivity_map[strtolower($event['sensitivity'])]);
|
||||||
|
|
||||||
|
if ($event['free_busy'] == 'tentative') {
|
||||||
|
$event['status'] = 'TENTATIVE';
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($event['allday'])) {
|
if (isset($event['allday'])) {
|
||||||
$event['all_day'] = $event['allday'] ? 1 : 0;
|
$event['all_day'] = $event['allday'] ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
@ -499,13 +504,13 @@ class database_driver extends calendar_driver
|
||||||
{
|
{
|
||||||
$event = $this->_save_preprocess($event);
|
$event = $this->_save_preprocess($event);
|
||||||
$sql_set = array();
|
$sql_set = array();
|
||||||
$set_cols = array('start', 'end', 'all_day', 'recurrence_id', 'sequence', 'title', 'description', 'location', 'categories', 'url', 'free_busy', 'priority', 'sensitivity', 'attendees', 'alarms', 'notifyat');
|
$set_cols = array('start', 'end', 'all_day', 'recurrence_id', 'sequence', 'title', 'description', 'location', 'categories', 'url', 'free_busy', 'priority', 'sensitivity', 'status', 'attendees', 'alarms', 'notifyat');
|
||||||
foreach ($set_cols as $col) {
|
foreach ($set_cols as $col) {
|
||||||
if (is_object($event[$col]) && is_a($event[$col], 'DateTime'))
|
if (is_object($event[$col]) && is_a($event[$col], 'DateTime'))
|
||||||
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote($event[$col]->format(self::DB_DATE_FORMAT));
|
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote($event[$col]->format(self::DB_DATE_FORMAT));
|
||||||
else if (is_array($event[$col]))
|
else if (is_array($event[$col]))
|
||||||
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote(join(',', $event[$col]));
|
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote(join(',', $event[$col]));
|
||||||
else if (isset($event[$col]))
|
else if (array_key_exists($col, $event))
|
||||||
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote($event[$col]);
|
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote($event[$col]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,11 +586,11 @@ class database_driver extends calendar_driver
|
||||||
$next_start->setTimezone($this->server_timezone);
|
$next_start->setTimezone($this->server_timezone);
|
||||||
$next_end = clone $next_start;
|
$next_end = clone $next_start;
|
||||||
$next_end->add($duration);
|
$next_end->add($duration);
|
||||||
$notify_at = $this->_get_notification(array('alarms' => $event['alarms'], 'start' => $next_start, 'end' => $next_end));
|
$notify_at = $this->_get_notification(array('alarms' => $event['alarms'], 'start' => $next_start, 'end' => $next_end, 'status' => $event['status']));
|
||||||
$query = $this->rc->db->query(sprintf(
|
$query = $this->rc->db->query(sprintf(
|
||||||
"INSERT INTO " . $this->db_events . "
|
"INSERT INTO " . $this->db_events . "
|
||||||
(calendar_id, recurrence_id, created, changed, uid, %s, %s, all_day, recurrence, title, description, location, categories, url, free_busy, priority, sensitivity, alarms, attendees, notifyat)
|
(calendar_id, recurrence_id, created, changed, uid, %s, %s, all_day, recurrence, title, description, location, categories, url, free_busy, priority, sensitivity, status, alarms, attendees, notifyat)
|
||||||
SELECT calendar_id, ?, %s, %s, uid, ?, ?, all_day, recurrence, title, description, location, categories, url, free_busy, priority, sensitivity, alarms, attendees, ?
|
SELECT calendar_id, ?, %s, %s, uid, ?, ?, all_day, recurrence, title, description, location, categories, url, free_busy, priority, sensitivity, status, alarms, attendees, ?
|
||||||
FROM " . $this->db_events . " WHERE event_id=? AND calendar_id IN (" . $this->calendar_ids . ")",
|
FROM " . $this->db_events . " WHERE event_id=? AND calendar_id IN (" . $this->calendar_ids . ")",
|
||||||
$this->rc->db->quote_identifier('start'),
|
$this->rc->db->quote_identifier('start'),
|
||||||
$this->rc->db->quote_identifier('end'),
|
$this->rc->db->quote_identifier('end'),
|
||||||
|
|
|
@ -597,6 +597,10 @@ class kolab_calendar
|
||||||
if (is_array($record['categories']))
|
if (is_array($record['categories']))
|
||||||
$record['categories'] = $record['categories'][0];
|
$record['categories'] = $record['categories'][0];
|
||||||
|
|
||||||
|
// the cancelled flag transltes into status=CANCELLED
|
||||||
|
if ($record['cancelled'])
|
||||||
|
$record['status'] = 'CANCELLED';
|
||||||
|
|
||||||
// The web client only supports DISPLAY type of alarms
|
// The web client only supports DISPLAY type of alarms
|
||||||
if (!empty($record['alarms']))
|
if (!empty($record['alarms']))
|
||||||
$record['alarms'] = preg_replace('/:[A-Z]+$/', ':DISPLAY', $record['alarms']);
|
$record['alarms'] = preg_replace('/:[A-Z]+$/', ':DISPLAY', $record['alarms']);
|
||||||
|
|
|
@ -74,6 +74,7 @@ class calendar_ui
|
||||||
$this->cal->register_handler('plugin.calendar_select', array($this, 'calendar_select'));
|
$this->cal->register_handler('plugin.calendar_select', array($this, 'calendar_select'));
|
||||||
$this->cal->register_handler('plugin.identity_select', array($this, 'identity_select'));
|
$this->cal->register_handler('plugin.identity_select', array($this, 'identity_select'));
|
||||||
$this->cal->register_handler('plugin.category_select', array($this, 'category_select'));
|
$this->cal->register_handler('plugin.category_select', array($this, 'category_select'));
|
||||||
|
$this->cal->register_handler('plugin.status_select', array($this, 'status_select'));
|
||||||
$this->cal->register_handler('plugin.freebusy_select', array($this, 'freebusy_select'));
|
$this->cal->register_handler('plugin.freebusy_select', array($this, 'freebusy_select'));
|
||||||
$this->cal->register_handler('plugin.priority_select', array($this, 'priority_select'));
|
$this->cal->register_handler('plugin.priority_select', array($this, 'priority_select'));
|
||||||
$this->cal->register_handler('plugin.sensitivity_select', array($this, 'sensitivity_select'));
|
$this->cal->register_handler('plugin.sensitivity_select', array($this, 'sensitivity_select'));
|
||||||
|
@ -303,6 +304,20 @@ class calendar_ui
|
||||||
return $select->show(null);
|
return $select->show(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render a HTML select box for status property
|
||||||
|
*/
|
||||||
|
function status_select($attrib = array())
|
||||||
|
{
|
||||||
|
$attrib['name'] = 'status';
|
||||||
|
$select = new html_select($attrib);
|
||||||
|
$select->add('---', '');
|
||||||
|
$select->add($this->cal->gettext('confirmed'), 'CONFIRMED');
|
||||||
|
$select->add($this->cal->gettext('cancelled'), 'CANCELLED');
|
||||||
|
//$select->add($this->cal->gettext('tentative'), 'TENTATIVE');
|
||||||
|
return $select->show(null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render a HTML select box for free/busy/out-of-office property
|
* Render a HTML select box for free/busy/out-of-office property
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -60,6 +60,9 @@ $labels['free'] = 'Free';
|
||||||
$labels['busy'] = 'Busy';
|
$labels['busy'] = 'Busy';
|
||||||
$labels['outofoffice'] = 'Out of Office';
|
$labels['outofoffice'] = 'Out of Office';
|
||||||
$labels['tentative'] = 'Tentative';
|
$labels['tentative'] = 'Tentative';
|
||||||
|
$labels['status'] = 'Status';
|
||||||
|
$labels['confirmed'] = 'Confirmed';
|
||||||
|
$labels['cancelled'] = 'Cancelled';
|
||||||
$labels['priority'] = 'Priority';
|
$labels['priority'] = 'Priority';
|
||||||
$labels['sensitivity'] = 'Privacy';
|
$labels['sensitivity'] = 'Privacy';
|
||||||
$labels['public'] = 'public';
|
$labels['public'] = 'public';
|
||||||
|
|
|
@ -446,6 +446,10 @@ a.miniColors-trigger {
|
||||||
margin: 0 -0.2em;
|
margin: 0 -0.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#eventshow.status-cancelled {
|
||||||
|
background: url(images/badge_cancelled.png) top right no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
#eventshow.sensitivity-private {
|
#eventshow.sensitivity-private {
|
||||||
background: url(images/badge_private.png) top right no-repeat;
|
background: url(images/badge_private.png) top right no-repeat;
|
||||||
}
|
}
|
||||||
|
@ -1257,6 +1261,10 @@ span.spacer {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cal-event-status-cancelled .fc-event-title {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
|
||||||
.fc-event-hori .fc-event-title {
|
.fc-event-hori .fc-event-title {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
BIN
plugins/calendar/skins/classic/images/badge_cancelled.png
Normal file
BIN
plugins/calendar/skins/classic/images/badge_cancelled.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
|
@ -52,6 +52,10 @@
|
||||||
<label for="edit-categories"><roundcube:label name="calendar.category" /></label>
|
<label for="edit-categories"><roundcube:label name="calendar.category" /></label>
|
||||||
<roundcube:object name="plugin.category_select" id="edit-categories" />
|
<roundcube:object name="plugin.category_select" id="edit-categories" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="event-section">
|
||||||
|
<label for="edit-event-status"><roundcube:label name="calendar.status" /></label>
|
||||||
|
<roundcube:object name="plugin.status_select" id="edit-event-status" />
|
||||||
|
</div>
|
||||||
<div class="event-section">
|
<div class="event-section">
|
||||||
<label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
|
<label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
|
||||||
<roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
|
<roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
|
||||||
|
|
|
@ -536,6 +536,10 @@ a.miniColors-trigger {
|
||||||
margin: 0 -0.2em;
|
margin: 0 -0.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#eventshow.status-cancelled {
|
||||||
|
background: url(images/badge_cancelled.png) top right no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
#eventshow.sensitivity-private {
|
#eventshow.sensitivity-private {
|
||||||
background: url(images/badge_private.png) top right no-repeat;
|
background: url(images/badge_private.png) top right no-repeat;
|
||||||
}
|
}
|
||||||
|
@ -1395,6 +1399,10 @@ a.dropdown-link:after {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cal-event-status-cancelled .fc-event-title {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
|
||||||
.fc-event-hori .fc-event-title {
|
.fc-event-hori .fc-event-title {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
BIN
plugins/calendar/skins/larry/images/badge_cancelled.png
Normal file
BIN
plugins/calendar/skins/larry/images/badge_cancelled.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.1 KiB |
|
@ -91,6 +91,10 @@
|
||||||
<label><roundcube:label name="calendar.category" /></label>
|
<label><roundcube:label name="calendar.category" /></label>
|
||||||
<span class="event-text"></span>
|
<span class="event-text"></span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="event-line" id="event-status">
|
||||||
|
<label><roundcube:label name="calendar.status" /></label>
|
||||||
|
<span class="event-text"></span>
|
||||||
|
</div>
|
||||||
<div class="event-line" id="event-free-busy">
|
<div class="event-line" id="event-free-busy">
|
||||||
<label><roundcube:label name="calendar.freebusy" /></label>
|
<label><roundcube:label name="calendar.freebusy" /></label>
|
||||||
<span class="event-text"></span>
|
<span class="event-text"></span>
|
||||||
|
|
|
@ -48,6 +48,10 @@
|
||||||
<label for="edit-categories"><roundcube:label name="calendar.category" /></label>
|
<label for="edit-categories"><roundcube:label name="calendar.category" /></label>
|
||||||
<roundcube:object name="plugin.category_select" id="edit-categories" />
|
<roundcube:object name="plugin.category_select" id="edit-categories" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="event-section">
|
||||||
|
<label for="edit-event-status"><roundcube:label name="calendar.status" /></label>
|
||||||
|
<roundcube:object name="plugin.status_select" id="edit-event-status" />
|
||||||
|
</div>
|
||||||
<div class="event-section">
|
<div class="event-section">
|
||||||
<label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
|
<label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
|
||||||
<roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
|
<roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
|
||||||
|
|
|
@ -400,7 +400,7 @@ class libcalendaring extends rcube_plugin
|
||||||
*/
|
*/
|
||||||
public static function get_next_alarm($rec, $type = 'event')
|
public static function get_next_alarm($rec, $type = 'event')
|
||||||
{
|
{
|
||||||
if (!$rec['alarms'])
|
if (!$rec['alarms'] || $rec['cancelled'] || $rec['status'] == 'CANCELLED')
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if ($type == 'task') {
|
if ($type == 'task') {
|
||||||
|
|
Loading…
Add table
Reference in a new issue