* @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')) {
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);
}
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;
$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'));
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;
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');
} 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');
*/
},
- 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();