From c153f66a25e4e0911f9917fc52af8c609f6b02a2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alfonso=20Mar=C3=ADn=20Mar=C3=ADn?= Date: Thu, 22 Jan 2009 18:57:26 +0100 Subject: [PATCH] Add individual notification methods for single events. --- kronolith/docs/CHANGES | 2 + kronolith/lib/Driver.php | 33 +++++++- kronolith/lib/Driver/sql.php | 16 +++- kronolith/scripts/sql/kronolith.mssql.sql | 3 +- kronolith/scripts/sql/kronolith.mysql.sql | 3 +- kronolith/scripts/sql/kronolith.oci8.sql | 3 +- kronolith/scripts/sql/kronolith.pgsql.sql | 3 +- kronolith/scripts/sql/kronolith.sql | 3 +- kronolith/scripts/sql/kronolith.xml | 5 ++ .../2009-01-22_add_alarm_methods.mssql.sql | 1 + .../upgrades/2009-01-22_add_alarm_methods.oci8.sql | 1 + .../upgrades/2009-01-22_add_alarm_methods.sql | 1 + kronolith/templates/edit/edit.inc | 92 ++++++++++++++++------ kronolith/templates/edit/javascript.inc | 11 +++ 14 files changed, 138 insertions(+), 39 deletions(-) create mode 100644 kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.mssql.sql create mode 100644 kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.oci8.sql create mode 100644 kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.sql diff --git a/kronolith/docs/CHANGES b/kronolith/docs/CHANGES index 5130fb1c9..c20a2423e 100644 --- a/kronolith/docs/CHANGES +++ b/kronolith/docs/CHANGES @@ -2,6 +2,8 @@ v3.0-cvs -------- +[jan] Add individual notification methods for single events (Alfonso Marín + Marín ). [jan] Add Ajax interface. [jan] Store events in UTC and convert to the user's timezone on the fly. [jan] Remove alarm reminder code. diff --git a/kronolith/lib/Driver.php b/kronolith/lib/Driver.php index 97e3e5bce..cb49daba9 100644 --- a/kronolith/lib/Driver.php +++ b/kronolith/lib/Driver.php @@ -428,6 +428,13 @@ class Kronolith_Event { var $alarm = 0; /** + * Parameter of the particular alarm method overridden for this event. + * + * @var array + */ + var $methods; + + /** * The identifier of the calender this event exists on. * * @var string @@ -1198,7 +1205,7 @@ class Kronolith_Event { $prefs = $GLOBALS['prefs']; } - $methods = @unserialize($prefs->getValue('event_alarms')); + $methods = !empty($this->methods) ? $this->methods : @unserialize($prefs->getValue('event_alarms')); $start = Util::cloneObject($this->start); $start->min -= $this->getAlarm(); $start->correct(); @@ -1875,8 +1882,32 @@ class Kronolith_Event { // Alarm. if (Util::getFormData('alarm') == 1) { $this->setAlarm(Util::getFormData('alarm_value') * Util::getFormData('alarm_unit')); + // Notification. + if (Util::getFormData('alarm_change_method')) { + $types = Util::getFormData('event_alarms'); + if (!empty($types)) { + $methods = array(); + foreach ($types as $type) { + $methods[$type] = array(); + switch ($type){ + case 'notify': + $methods[$type]['sound'] = Util::getFormData('event_alarms_sound'); + break; + case 'mail': + $methods[$type]['email'] = Util::getFormData('event_alarms_email'); + break; + case 'popup': + break; + } + } + $this->methods = $methods; + } + } else { + $this->methods = array(); + } } else { $this->setAlarm(0); + $this->methods = array(); } // Recurrence. diff --git a/kronolith/lib/Driver/sql.php b/kronolith/lib/Driver/sql.php index 396dedb1a..a87b8ab2e 100644 --- a/kronolith/lib/Driver/sql.php +++ b/kronolith/lib/Driver/sql.php @@ -281,7 +281,8 @@ class Kronolith_Driver_sql extends Kronolith_Driver { ' event_keywords, event_title, event_category, event_recurcount,' . ' event_recurtype, event_recurenddate, event_recurinterval,' . ' event_recurdays, event_start, event_end, event_allday,' . - ' event_alarm, event_modified, event_exceptions, event_creator_id' . + ' event_alarm, event_alarm_methods, event_modified,' . + ' event_exceptions, event_creator_id' . ' FROM ' . $this->_params['table'] . ' WHERE calendar_id = ? AND (('; $values = array($this->_calendar); @@ -377,7 +378,8 @@ class Kronolith_Driver_sql extends Kronolith_Driver { ' event_keywords, event_title, event_category, event_recurcount,' . ' event_recurtype, event_recurenddate, event_recurinterval,' . ' event_recurdays, event_start, event_end, event_allday,' . - ' event_alarm, event_modified, event_exceptions, event_creator_id' . + ' event_alarm, event_alarm_methods, event_modified,' . + ' event_exceptions, event_creator_id' . ' FROM ' . $this->_params['table'] . ' WHERE event_id = ? AND calendar_id = ?'; $values = array($eventId, $this->_calendar); @@ -417,7 +419,8 @@ class Kronolith_Driver_sql extends Kronolith_Driver { ' event_keywords, event_title, event_category, event_recurcount,' . ' event_recurtype, event_recurenddate, event_recurinterval,' . ' event_recurdays, event_start, event_end, event_allday,' . - ' event_alarm, event_modified, event_exceptions, event_creator_id' . + ' event_alarm, event_alarm_methods, event_modified,' . + ' event_exceptions, event_creator_id' . ' FROM ' . $this->_params['table'] . ' WHERE event_uid = ?'; $values = array($uid); @@ -947,7 +950,9 @@ class Kronolith_Event_sql extends Kronolith_Event { if (isset($SQLEvent['event_alarm'])) { $this->alarm = (int)$SQLEvent['event_alarm']; } - + if (isset($SQLEvent['event_alarm_methods'])) { + $this->methods = $driver->convertFromDriver(unserialize($SQLEvent['event_alarm_methods'])); + } $this->initialized = true; $this->stored = true; } @@ -990,6 +995,9 @@ class Kronolith_Event_sql extends Kronolith_Event { /* Alarm. */ $this->_properties['event_alarm'] = (int)$this->getAlarm(); + /* Alarm Notification Methods. */ + $this->_properties['event_alarm_methods'] = serialize($driver->convertToDriver($this->methods)); + /* Recurrence. */ if (!$this->recurs()) { $this->_properties['event_recurtype'] = 0; diff --git a/kronolith/scripts/sql/kronolith.mssql.sql b/kronolith/scripts/sql/kronolith.mssql.sql index 3da4e8c7e..6bb584444 100644 --- a/kronolith/scripts/sql/kronolith.mssql.sql +++ b/kronolith/scripts/sql/kronolith.mssql.sql @@ -1,5 +1,3 @@ --- $Horde: kronolith/scripts/sql/kronolith.mssql.sql,v 1.13 2008/10/22 21:14:07 jan Exp $ - CREATE TABLE kronolith_events ( event_id VARCHAR(32) NOT NULL, event_uid VARCHAR(255) NOT NULL, @@ -22,6 +20,7 @@ CREATE TABLE kronolith_events ( event_end DATETIME, event_allday INT DEFAULT 0, event_alarm INT DEFAULT 0, + event_alarm_methods VARCHAR(MAX), event_modified INT NOT NULL, event_private INT DEFAULT 0 NOT NULL, diff --git a/kronolith/scripts/sql/kronolith.mysql.sql b/kronolith/scripts/sql/kronolith.mysql.sql index 74b41fa71..0fd4a0c00 100644 --- a/kronolith/scripts/sql/kronolith.mysql.sql +++ b/kronolith/scripts/sql/kronolith.mysql.sql @@ -1,5 +1,3 @@ --- $Horde: kronolith/scripts/sql/kronolith.mysql.sql,v 1.17 2008/10/22 21:14:07 jan Exp $ - CREATE TABLE kronolith_events ( event_id VARCHAR(32) NOT NULL, event_uid VARCHAR(255) NOT NULL, @@ -22,6 +20,7 @@ CREATE TABLE kronolith_events ( event_end DATETIME, event_allday TINYINT DEFAULT 0, event_alarm INT DEFAULT 0, + event_alarm_methods TEXT, event_modified INT NOT NULL, event_private TINYINT DEFAULT 0 NOT NULL, diff --git a/kronolith/scripts/sql/kronolith.oci8.sql b/kronolith/scripts/sql/kronolith.oci8.sql index 01d55e25b..61e09f41f 100644 --- a/kronolith/scripts/sql/kronolith.oci8.sql +++ b/kronolith/scripts/sql/kronolith.oci8.sql @@ -1,5 +1,3 @@ --- $Horde: kronolith/scripts/sql/kronolith.oci8.sql,v 1.17 2008/10/22 21:14:07 jan Exp $ - CREATE TABLE kronolith_events ( event_id VARCHAR2(32) NOT NULL, event_uid VARCHAR2(255) NOT NULL, @@ -22,6 +20,7 @@ CREATE TABLE kronolith_events ( event_end DATE, event_allday INT DEFAULT 0, event_alarm INT DEFAULT 0, + event_alarm_methods VARCHAR2(4000), event_modified INT NOT NULL, event_private INT DEFAULT 0 NOT NULL, -- diff --git a/kronolith/scripts/sql/kronolith.pgsql.sql b/kronolith/scripts/sql/kronolith.pgsql.sql index 86ac0b197..0fb5f1871 100644 --- a/kronolith/scripts/sql/kronolith.pgsql.sql +++ b/kronolith/scripts/sql/kronolith.pgsql.sql @@ -1,5 +1,3 @@ --- $Horde: kronolith/scripts/sql/kronolith.pgsql.sql,v 1.15 2008/10/22 21:14:07 jan Exp $ - CREATE TABLE kronolith_events ( event_id VARCHAR(32) NOT NULL, event_uid VARCHAR(255) NOT NULL, @@ -22,6 +20,7 @@ CREATE TABLE kronolith_events ( event_end TIMESTAMP, event_allday INT DEFAULT 0, event_alarm INT DEFAULT 0, + event_alarm_methods TEXT, event_modified INT NOT NULL, event_private INT DEFAULT 0 NOT NULL, diff --git a/kronolith/scripts/sql/kronolith.sql b/kronolith/scripts/sql/kronolith.sql index 13f269ea2..d3b1bc4da 100644 --- a/kronolith/scripts/sql/kronolith.sql +++ b/kronolith/scripts/sql/kronolith.sql @@ -1,5 +1,3 @@ --- $Horde: kronolith/scripts/sql/kronolith.sql,v 1.15 2008/10/22 21:14:08 jan Exp $ - CREATE TABLE kronolith_events ( event_id VARCHAR(32) NOT NULL, event_uid VARCHAR(255) NOT NULL, @@ -22,6 +20,7 @@ CREATE TABLE kronolith_events ( event_end DATETIME, event_allday INT DEFAULT 0, event_alarm INT DEFAULT 0, + event_alarm_methods TEXT, event_modified INT NOT NULL, event_private INT DEFAULT 0 NOT NULL, diff --git a/kronolith/scripts/sql/kronolith.xml b/kronolith/scripts/sql/kronolith.xml index 4720fc149..874fa194a 100644 --- a/kronolith/scripts/sql/kronolith.xml +++ b/kronolith/scripts/sql/kronolith.xml @@ -128,6 +128,11 @@ + event_alarm_methods + clob + + + event_allday integer 1 diff --git a/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.mssql.sql b/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.mssql.sql new file mode 100644 index 000000000..21897573a --- /dev/null +++ b/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.mssql.sql @@ -0,0 +1 @@ +ALTER TABLE kronolith_events ADD event_alarm_methods VARCHAR(MAX); diff --git a/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.oci8.sql b/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.oci8.sql new file mode 100644 index 000000000..a569f6e9a --- /dev/null +++ b/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.oci8.sql @@ -0,0 +1 @@ +ALTER TABLE kronolith_events ADD event_alarm_methods VARCHAR2(4000); diff --git a/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.sql b/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.sql new file mode 100644 index 000000000..70feaed98 --- /dev/null +++ b/kronolith/scripts/upgrades/2009-01-22_add_alarm_methods.sql @@ -0,0 +1 @@ +ALTER TABLE kronolith_events ADD event_alarm_methods TEXT; diff --git a/kronolith/templates/edit/edit.inc b/kronolith/templates/edit/edit.inc index 2e7d37f49..ba9baa1e9 100644 --- a/kronolith/templates/edit/edit.inc +++ b/kronolith/templates/edit/edit.inc @@ -127,40 +127,51 @@ +alarm) { + $alarm_set = true; + if ($event->alarm % 10080 == 0) { + $alarm_value = $event->alarm / 10080; + $alarm_unit = 'week'; + $alarm_unit_title = _("Week(s)"); + } elseif ($event->alarm % 1440 == 0) { + $alarm_value = $event->alarm / 1440; + $alarm_unit = 'day'; + $alarm_unit_title = _("Day(s)"); + } elseif ($event->alarm % 60 == 0) { + $alarm_value = $event->alarm / 60; + $alarm_unit = 'hour'; + $alarm_unit_title = _("Hour(s)"); + } else { + $alarm_value = $event->alarm; + $alarm_unit = 'min'; + $alarm_unit_title = _("Minute(s)"); + } +} else { + $alarm_value = 15; + $alarm_unit = 'min'; + $alarm_set = false; +} +?> + + + 'toggle_alarm'), $GLOBALS['registry']->getImageDir('horde')) . ' ' . Horde::label('alarm', _("_Alarm")) ?> + + + + - + - alarm) { - $alarm_set = true; - if ($event->alarm % 10080 == 0) { - $alarm_value = $event->alarm / 10080; - $alarm_unit = 'week'; - } elseif ($event->alarm % 1440 == 0) { - $alarm_value = $event->alarm / 1440; - $alarm_unit = 'day'; - } elseif ($event->alarm % 60 == 0) { - $alarm_value = $event->alarm / 60; - $alarm_unit = 'hour'; - } else { - $alarm_value = $event->alarm; - $alarm_unit = 'min'; - } - } else { - $alarm_value = 15; - $alarm_unit = 'min'; - $alarm_set = false; - } - ?> />
/>   -
+
  @@ -173,6 +184,39 @@ + + + + + + methods)) echo ' checked="checked"' ?> onclick="toggleAlarmMethods()" />
+ methods)) echo ' checked="checked"' ?> onclick="toggleAlarmMethods()" /> + +   + +
+ +
+ array('desc' => '')); + $helplink = ''; + $original_value = $prefs->getValue($pref); + if (!empty($event->methods)) { + $prefs->setValue($pref, serialize($event->methods)); + } + include $GLOBALS['registry']->get('templates', 'horde') . '/prefs/alarm.inc'; + if (!empty($event->methods)) { + $prefs->setValue($pref, $original_value); + } + ?> +
+ + + + diff --git a/kronolith/templates/edit/javascript.inc b/kronolith/templates/edit/javascript.inc index 010c23247..936fb91a2 100644 --- a/kronolith/templates/edit/javascript.inc +++ b/kronolith/templates/edit/javascript.inc @@ -219,6 +219,16 @@ function updateEndDate() updateWday('end_wday'); } +function toggleAlarmMethods() +{ + if ($('nooverwrite').checked) { + $('notification_options').hide(); + } else { + $('notification_options').show(); + $('yesalarm').checked = true; + } +} + function setStartDate(date) { var year = parseInt(date.substr(0, 4)); @@ -265,6 +275,7 @@ function toggleSection(section) } } Event.observe(window, 'load', function() { + toggleSection('alarm'); toggleSection('description'); toggleSection('attendees'); toggleSection('recurrence'); -- 2.11.0