v3.0-cvs
--------
+[jan] Add individual notification methods for single events (Alfonso Marín
+ Marín <almarin@um.es>).
[jan] Add Ajax interface.
[jan] Store events in UTC and convert to the user's timezone on the fly.
[jan] Remove alarm reminder code.
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
$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();
// 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.
' 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);
' 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);
' 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);
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;
}
/* 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;
--- $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,
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,
--- $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,
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,
--- $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,
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,
--
--- $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,
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,
--- $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,
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,
</field>
<field>
+ <name>event_alarm_methods</name>
+ <type>clob</type>
+ </field>
+
+ <field>
<name>event_allday</name>
<type>integer</type>
<length>1</length>
--- /dev/null
+ALTER TABLE kronolith_events ADD event_alarm_methods VARCHAR(MAX);
--- /dev/null
+ALTER TABLE kronolith_events ADD event_alarm_methods VARCHAR2(4000);
--- /dev/null
+ALTER TABLE kronolith_events ADD event_alarm_methods TEXT;
<?php require KRONOLITH_TEMPLATES . '/edit/edit_timespan.inc' ?>
<!-- alarm -->
+<?php
+if ($event->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;
+}
+?>
+<tr>
+ <td colspan="5" class="control toggle" onclick="toggleSection('alarm')">
+ <?php echo Horde::img('tree/blank.png', '', array('id' => 'toggle_alarm'), $GLOBALS['registry']->getImageDir('horde')) . ' <strong>' . Horde::label('alarm', _("_Alarm")) ?></strong>
+ <span class="extra" id="extra_alarm"><?php if ($alarm_set) printf(_("%d %s before the event starts"), $alarm_value, $alarm_unit_title); ?></span>
+</td>
+</tr>
+<tbody id="section_alarm">
<tr>
<td class="rightAlign" valign="top">
- <strong><?php $ak = Horde::getAccessKey(_("_Alarm")); echo Horde::highlightAccessKey(_("_Alarm"), $ak) ?></strong>
+ <strong><?php echo _("Alarm") ?></strong>
</td>
<td valign="top">
- <?php
- if ($event->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;
- }
- ?>
<input id="noalarm" name="alarm" type="radio" class="checkbox" value="0"<?php if (!$alarm_set) echo ' checked="checked"' ?> /><br />
<input id="yesalarm" name="alarm" type="radio" class="checkbox" value="1"<?php if ($alarm_set) echo ' checked="checked"' ?> />
<label for="yesalarm" class="hidden"><?php echo _("Alarm enabled") ?></label>
</td>
<td> </td>
<td valign="top" colspan="2">
- <label for="noalarm" accesskey="<?php echo $ak ?>"> <?php echo _("No alarm") ?></label><br />
+ <label for="noalarm"> <?php echo _("No alarm") ?></label><br />
<label for="alarm_value" class="hidden"><?php echo _("Alarm Value") ?></label>
<input type="text" size="2" id="alarm_value" name="alarm_value" value="<?php echo $alarm_value ?>" onchange="document.eventform.alarm[1].checked=true" />
<label for="alarm_unit" class="hidden"><?php echo _("Alarm Unit") ?></label>
<?php echo _("before the event starts") ?>
</td>
</tr>
+<tr>
+ <td class="rightAlign" valign="top">
+ <strong><?php echo _("Notification") ?></strong>
+ </td>
+ <td valign="top">
+ <input id="nooverwrite" name="alarm_change_method" type="radio" class="checkbox" value="0"<?php if (empty($event->methods)) echo ' checked="checked"' ?> onclick="toggleAlarmMethods()" /><br />
+ <input id="yesoverwrite" name="alarm_change_method" type="radio" class="checkbox" value="1"<?php if (!empty($event->methods)) echo ' checked="checked"' ?> onclick="toggleAlarmMethods()" />
+ </td>
+ <td> </td>
+ <td valign="top" colspan="2">
+ <label for="nooverwrite"> <?php echo _("Use default notification method") ?></label><br/>
+ <label for="yesoverwrite"> <?php echo _("Use custom notification method") ?></label>
+ <div id="notification_options" style="display:<?php echo !empty($event->methods) ? 'block' : 'none' ?>">
+ <?php
+ // TODO: clean this hack up with H4
+ global $registry, $prefs;
+ $pref = 'event_alarms';
+ $_prefs = array($pref => 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);
+ }
+ ?>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</tr>
<!-- description -->
<tr>
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));
}
}
Event.observe(window, 'load', function() {
+ toggleSection('alarm');
toggleSection('description');
toggleSection('attendees');
toggleSection('recurrence');