Very basic event form display.
authorJan Schneider <jan@horde.org>
Fri, 13 Mar 2009 15:25:04 +0000 (16:25 +0100)
committerJan Schneider <jan@horde.org>
Fri, 13 Mar 2009 15:25:04 +0000 (16:25 +0100)
kronolith/ajax.php
kronolith/js/src/kronolith.js
kronolith/templates/index/index.inc

index 2ff04cf..0ca1c51 100644 (file)
  * @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;
index d573179..21fc0a5 100644 (file)
@@ -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();
index 2bf9fda..84a2379 100644 (file)
 <!-- end menu -->
 
 <!-- ini edit -->
-<div id="kronolithEventForm" style="display:none"><form action="#" method="post">
+<div id="kronolithEventForm" style="display:none"><form id="tobechanged" action="#" method="post">
 <div>
   <label for="id_ttl"><?php echo _("Title") ?></label><br />
   <input type="text" name="ttl" id="id_ttl" class="kronolithLongField" />