From b6051baa065d02eb704ca8251ccdf128a631657e Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Fri, 13 Mar 2009 16:25:04 +0100 Subject: [PATCH] Very basic event form display. --- kronolith/ajax.php | 77 ++++++++++++++++++++++++------------- kronolith/js/src/kronolith.js | 62 +++++++++++++++++++---------- kronolith/templates/index/index.inc | 2 +- 3 files changed, 94 insertions(+), 47 deletions(-) diff --git a/kronolith/ajax.php b/kronolith/ajax.php index 2ff04cf27..0ca1c511d 100644 --- a/kronolith/ajax.php +++ b/kronolith/ajax.php @@ -12,6 +12,40 @@ * @package Kronolith */ +function getDriver($cal) +{ + list($driver, $calendar) = explode('|', $cal); + switch ($driver) { + case 'internal': + if (!array_key_exists($calendar, + Kronolith::listCalendars(false, PERMS_READ))) { + $GLOBALS['notification']->push(_("Permission Denied"), 'horde.error'); + return false; + } + $driver = ''; + break; + case 'external': + $driver = 'Horde'; + break; + case 'remote': + $driver = 'Ical'; + break; + case 'holiday': + $driver = 'Holidays'; + break; + } + + $kronolith_driver = Kronolith::getDriver($driver, $calendar); + + switch ($driver) { + case 'Ical': + $kronolith_driver->setParam('timeout', 15); + break; + } + + return $kronolith_driver; +} + // Need to load Util:: to give us access to Util::getPathInfo(). $kronolith_dir = dirname(__FILE__); if (!defined('HORDE_BASE')) { @@ -56,32 +90,8 @@ switch ($action) { case 'ListEvents': $start = new Horde_Date(Util::getFormData('start')); $end = new Horde_Date(Util::getFormData('end')); - $cal = Util::getFormData('cal'); - list($driver, $calendar) = explode('|', $cal); - switch ($driver) { - case 'internal': - if (!array_key_exists($calendar, - Kronolith::listCalendars(false, PERMS_READ))) { - $notification->push(_("Permission Denied"), 'horde.error'); - $result = true; - break 2; - } - $driver = ''; - break; - case 'external': - $driver = 'Horde'; - break; - case 'remote': - $driver = 'Ical'; - break; - case 'holiday': - $driver = 'Holidays'; - break; - } - $kronolith_driver = Kronolith::getDriver($driver, $calendar); - switch ($driver) { - case 'Ical': - $kronolith_driver->setParam('timeout', 15); + if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) { + $result = true; break; } $events = $kronolith_driver->listEvents($start, $end, true, false, true); @@ -99,6 +109,21 @@ case 'ListEvents': } break; +case 'GetEvent': + if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) { + $result = true; + break; + } + $event = $kronolith_driver->getEvent(Util::getFormData('id')); + if (is_a($event, 'PEAR_Error')) { + $notification->push($event, 'horde.error'); + $result = true; + } else { + $result = new stdClass; + $result->event = $event; + } + break; + case 'SaveCalPref': $result = true; break; diff --git a/kronolith/js/src/kronolith.js b/kronolith/js/src/kronolith.js index d5731790f..21fc0a5f7 100644 --- a/kronolith/js/src/kronolith.js +++ b/kronolith/js/src/kronolith.js @@ -579,7 +579,13 @@ KronolithCore = { $H(date.value).each(function(event) { switch (this.view) { case 'month': - div = new Element('DIV', { 'id' : 'kronolithEventM' + event.key, 'class': 'kronolithEvent', 'style': 'background-color:' + event.value.bg + ';color:' + event.value.fg, 'calendar': event.value.c }); + div = new Element('DIV', { + 'id': 'kronolithEventmonth' + r.response.cal + event.key, + 'calendar': r.response.cal, + 'eventid' : event.key, + 'class': 'kronolithEvent', + 'style': 'background-color:' + event.value.bg + ';color:' + event.value.fg + }); div.setText(event.value.t) .observe('mouseover', div.addClassName.curry('kronolithSelected')) .observe('mouseout', div.removeClassName.curry('kronolithSelected')); @@ -797,17 +803,6 @@ KronolithCore = { e.stop(); return; - case 'kronolithBody': - var tmp = orig; - if (!tmp.match('div.kronolithEvent')) { - tmp = tmp.up('div.kronolithEvent'); - } - if (tmp) { - this.editEvent(); - } - e.stop(); - return; - case 'alertsloglink': this.toggleAlertsLog(); break; @@ -817,6 +812,12 @@ KronolithCore = { break; } + if (elt.hasClassName('kronolithEvent')) { + this.editEvent(elt.readAttribute('calendar'), elt.readAttribute('eventid')); + e.stop(); + return; + } + calClass = elt.readAttribute('calendarclass'); if (calClass) { var calendar = elt.readAttribute('calendar'); @@ -827,9 +828,9 @@ KronolithCore = { } else { this.ecache[calClass][calendar].each(function(day) { $H(day.value).each(function(event) { - $('kronolithEventM' + event.key).toggle(); - }); - }); + $('kronolithEvent' + this.view + calClass + '|' + calendar + event.key).toggle(); + }, this); + }, this); } elt.toggleClassName('kronolithCalOn'); elt.toggleClassName('kronolithCalOff'); @@ -860,12 +861,33 @@ KronolithCore = { */ }, - editEvent: function() + editEvent: function(calendar, id) { - // todo: fill form. - $('kronolithEventForm').select('div.kronolithTags span').each(function(s) { - $('id_tags').value = $F('id_tags') + s.getText() + ', '; - }); + RedBox.loading(); + this.doAction('GetEvent', { 'cal': calendar, 'id': id }, this._editEvent.bind(this)); + }, + + /** + * Callback method for showing event forms. + * + * @param object r The ajax response object. + */ + _editEvent: function(r) + { + if (!r.response.event) { + RedBox.close(); + return; + } + + var ev = r.response.event; + $('id_ttl').value = ev.title; + $('id_local').value = ev.location; + $('id_fullday').checked = ev.allday; + $('id_from').value = ev.start._year + '-' + ev.start._month + '-' + ev.start._mday; + $('tobechanged').from_Hi.value = ev.start._hour + ':' + ev.start._min; + $('id_to').value = ev.end._year + '-' + ev.end._month + '-' + ev.end._mday; + $('tobechanged').to_Hi.value = ev.end._hour + ':' + ev.end._min; + $('id_tags').value = ev.tags.join(', '); RedBox.showHtml($('kronolithEventForm').show()); this.eventForm = RedBox.getWindowContents(); diff --git a/kronolith/templates/index/index.inc b/kronolith/templates/index/index.inc index 2bf9fdaa9..84a23792d 100644 --- a/kronolith/templates/index/index.inc +++ b/kronolith/templates/index/index.inc @@ -111,7 +111,7 @@ -