We probably don't want to show these in production, but catch and display Exceptions...
authorJan Schneider <jan@fe1-webmail.dev.sapo.pt>
Tue, 24 Mar 2009 11:41:34 +0000 (11:41 +0000)
committerJan Schneider <jan@fe1-webmail.dev.sapo.pt>
Tue, 24 Mar 2009 11:41:34 +0000 (11:41 +0000)
kronolith/ajax.php

index 2e8d496..8053d21 100644 (file)
@@ -86,181 +86,185 @@ $cacheid = Util::getPost('cacheid');
 // encoding.
 ob_start();
 
-$notify = true;
-$result = false;
-
-switch ($action) {
-case 'ListEvents':
-    $start = new Horde_Date(Util::getFormData('start'));
-    $end   = new Horde_Date(Util::getFormData('end'));
-    if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
-        $result = true;
-        break;
-    }
-    $events = $kronolith_driver->listEvents($start, $end, true, false, true);
-    if (is_a($events, 'PEAR_Error')) {
-        $notification->push($events, 'horde.error');
-        $result = true;
-        break;
-    }
-    $result = new stdClass;
-    $result->cal = $cal;
-    $result->view = Util::getFormData('view');
-    $result->sig = $start->dateString() . $end->dateString();
-    if (count($events)) {
-        $result->events = $events;
-    }
-    break;
-
-case 'GetEvent':
-    if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
-        $result = true;
-        break;
-    }
-    if (is_null($id = Util::getFormData('id'))) {
-        $result = true;
-        break;
-    }
-    $event = $kronolith_driver->getEvent($id);
-    if (is_a($event, 'PEAR_Error')) {
-        $notification->push($event, 'horde.error');
-        $result = true;
-        break;
-    }
-    if (!$event) {
-        $notification->push(_("The requested event was not found."), 'horde.error');
-        $result = true;
-        break;
-    }
-    $result = new stdClass;
-    $result->event = $event->toJSON(true, $prefs->getValue('twentyFour') ? 'H:i' : 'h:i A');
-    break;
-
-case 'SaveEvent':
-    $cal = Util::getFormData('cal');
-    if (!($kronolith_driver = getDriver($cal))) {
-        $result = true;
-        break;
-    }
-    $event = $kronolith_driver->getEvent(Util::getFormData('id'));
-    if (is_a($event, 'PEAR_Error')) {
-        $notification->push($event, 'horde.error');
-        $result = true;
-        break;
-    }
-    if (!$event) {
-        $notification->push(_("The requested event was not found."), 'horde.error');
-        $result = true;
-        break;
-    }
-    if (!$event->hasPermission(PERMS_EDIT)) {
-        $notification->push(_("You do not have permission to edit this event."), 'horde.warning');
-        $result = true;
-        break;
-    }
-    $event->readForm();
-    $result = $event->save();
-    if (is_a($result, 'PEAR_Error')) {
-        $notification->push($result, 'horde.error');
-    }
-    $start = new Horde_Date(Util::getFormData('view_start'));
-    $end   = new Horde_Date(Util::getFormData('view_end'));
-    Kronolith::addEvents($events, $event, $start, $end, true, true);
-    $result = new stdClass;
-    $result->cal = $cal;
-    $result->view = Util::getFormData('view');
-    $result->sig = $start->dateString() . $end->dateString();
-    if (count($events)) {
-        $result->events = $events;
-    }
-    break;
-
-case 'UpdateEvent':
-    if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
-        break;
-    }
-    if (is_null($id = Util::getFormData('id'))) {
-        $result = true;
-        break;
-    }
-    $event = $kronolith_driver->getEvent($id);
-    if (is_a($event, 'PEAR_Error')) {
-        $notification->push($event, 'horde.error');
-        break;
-    }
-    if (!$event) {
-        $notification->push(_("The requested event was not found."), 'horde.error');
-        break;
-    }
-    if (!$event->hasPermission(PERMS_EDIT)) {
-        $notification->push(_("You do not have permission to edit this event."), 'horde.warning');
-        $result = true;
+try {
+    $notify = true;
+    $result = false;
+    
+    switch ($action) {
+    case 'ListEvents':
+        $start = new Horde_Date(Util::getFormData('start'));
+        $end   = new Horde_Date(Util::getFormData('end'));
+        if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
+            $result = true;
+            break;
+        }
+        $events = $kronolith_driver->listEvents($start, $end, true, false, true);
+        if (is_a($events, 'PEAR_Error')) {
+            $notification->push($events, 'horde.error');
+            $result = true;
+            break;
+        }
+        $result = new stdClass;
+        $result->cal = $cal;
+        $result->view = Util::getFormData('view');
+        $result->sig = $start->dateString() . $end->dateString();
+        if (count($events)) {
+            $result->events = $events;
+        }
         break;
-    }
-    $attributes = Horde_Serialize::unserialize(Util::getFormData('att'), Horde_Serialize::JSON);
-    foreach ($attributes as $attribute => $value) {
-        switch ($attribute) {
-        case 'start_date':
-            $start = new Horde_Date($value);
-            $event->start->year = $start->year;
-            $event->start->month = $start->month;
-            $event->start->mday = $start->mday;
-            $event->end = $event->start->add(array('min' => $event->durMin));
+    
+    case 'GetEvent':
+        if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
+            $result = true;
             break;
         }
-    }
-    $result = $event->save();
-    if (is_a($result, 'PEAR_Error')) {
-        $notification->push($result, 'horde.error');
-    }
-    break;
-
-case 'DeleteEvent':
-    if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
-        $result = true;
+        if (is_null($id = Util::getFormData('id'))) {
+            $result = true;
+            break;
+        }
+        $event = $kronolith_driver->getEvent($id);
+        if (is_a($event, 'PEAR_Error')) {
+            $notification->push($event, 'horde.error');
+            $result = true;
+            break;
+        }
+        if (!$event) {
+            $notification->push(_("The requested event was not found."), 'horde.error');
+            $result = true;
+            break;
+        }
+        $result = new stdClass;
+        $result->event = $event->toJSON(true, $prefs->getValue('twentyFour') ? 'H:i' : 'h:i A');
         break;
-    }
-    if (is_null($id = Util::getFormData('id'))) {
-        $result = true;
+    
+    case 'SaveEvent':
+        $cal = Util::getFormData('cal');
+        if (!($kronolith_driver = getDriver($cal))) {
+            $result = true;
+            break;
+        }
+        $event = $kronolith_driver->getEvent(Util::getFormData('id'));
+        if (is_a($event, 'PEAR_Error')) {
+            $notification->push($event, 'horde.error');
+            $result = true;
+            break;
+        }
+        if (!$event) {
+            $notification->push(_("The requested event was not found."), 'horde.error');
+            $result = true;
+            break;
+        }
+        if (!$event->hasPermission(PERMS_EDIT)) {
+            $notification->push(_("You do not have permission to edit this event."), 'horde.warning');
+            $result = true;
+            break;
+        }
+        $event->readForm();
+        $result = $event->save();
+        if (is_a($result, 'PEAR_Error')) {
+            $notification->push($result, 'horde.error');
+        }
+        $start = new Horde_Date(Util::getFormData('view_start'));
+        $end   = new Horde_Date(Util::getFormData('view_end'));
+        Kronolith::addEvents($events, $event, $start, $end, true, true);
+        $result = new stdClass;
+        $result->cal = $cal;
+        $result->view = Util::getFormData('view');
+        $result->sig = $start->dateString() . $end->dateString();
+        if (count($events)) {
+            $result->events = $events;
+        }
         break;
-    }
-    $event = $kronolith_driver->getEvent($id);
-    if (is_a($event, 'PEAR_Error')) {
-        $notification->push($event, 'horde.error');
-        $result = true;
+    
+    case 'UpdateEvent':
+        if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
+            break;
+        }
+        if (is_null($id = Util::getFormData('id'))) {
+            $result = true;
+            break;
+        }
+        $event = $kronolith_driver->getEvent($id);
+        if (is_a($event, 'PEAR_Error')) {
+            $notification->push($event, 'horde.error');
+            break;
+        }
+        if (!$event) {
+            $notification->push(_("The requested event was not found."), 'horde.error');
+            break;
+        }
+        if (!$event->hasPermission(PERMS_EDIT)) {
+            $notification->push(_("You do not have permission to edit this event."), 'horde.warning');
+            $result = true;
+            break;
+        }
+        $attributes = Horde_Serialize::unserialize(Util::getFormData('att'), Horde_Serialize::JSON);
+        foreach ($attributes as $attribute => $value) {
+            switch ($attribute) {
+            case 'start_date':
+                $start = new Horde_Date($value);
+                $event->start->year = $start->year;
+                $event->start->month = $start->month;
+                $event->start->mday = $start->mday;
+                $event->end = $event->start->add(array('min' => $event->durMin));
+                break;
+            }
+        }
+        $result = $event->save();
+        if (is_a($result, 'PEAR_Error')) {
+            $notification->push($result, 'horde.error');
+        }
         break;
-    }
-    if (!$event) {
-        $notification->push(_("The requested event was not found."), 'horde.error');
-        $result = true;
+    
+    case 'DeleteEvent':
+        if (!($kronolith_driver = getDriver($cal = Util::getFormData('cal')))) {
+            $result = true;
+            break;
+        }
+        if (is_null($id = Util::getFormData('id'))) {
+            $result = true;
+            break;
+        }
+        $event = $kronolith_driver->getEvent($id);
+        if (is_a($event, 'PEAR_Error')) {
+            $notification->push($event, 'horde.error');
+            $result = true;
+            break;
+        }
+        if (!$event) {
+            $notification->push(_("The requested event was not found."), 'horde.error');
+            $result = true;
+            break;
+        }
+        if (!$event->hasPermission(PERMS_DELETE)) {
+            $notification->push(_("You do not have permission to delete this event."), 'horde.warning');
+            $result = true;
+            break;
+        }
+        $deleted = $kronolith_driver->deleteEvent($event->getId());
+        if (is_a($deleted, 'PEAR_Error')) {
+            $notification->push($deleted, 'horde.error');
+            $result = true;
+            break;
+        }
+        $result = new stdClass;
+        $result->deleted = true;
         break;
-    }
-    if (!$event->hasPermission(PERMS_DELETE)) {
-        $notification->push(_("You do not have permission to delete this event."), 'horde.warning');
+    
+    case 'SaveCalPref':
         $result = true;
         break;
-    }
-    $deleted = $kronolith_driver->deleteEvent($event->getId());
-    if (is_a($deleted, 'PEAR_Error')) {
-        $notification->push($deleted, 'horde.error');
-        $result = true;
+    
+    case 'ChunkContent':
+        $chunk = basename(Util::getPost('chunk'));
+        if (!empty($chunk)) {
+            $result = new stdClass;
+            $result->chunk = Util::bufferOutput('include', KRONOLITH_TEMPLATES . '/chunks/' . $chunk . '.php');
+        }
         break;
     }
-    $result = new stdClass;
-    $result->deleted = true;
-    break;
-
-case 'SaveCalPref':
-    $result = true;
-    break;
-
-case 'ChunkContent':
-    $chunk = basename(Util::getPost('chunk'));
-    if (!empty($chunk)) {
-        $result = new stdClass;
-        $result->chunk = Util::bufferOutput('include', KRONOLITH_TEMPLATES . '/chunks/' . $chunk . '.php');
-    }
-    break;
+} catch (Exception $e) {
+    $notification->push($e->getMessage(), 'horde.error');
 }
 
 // Clear the output buffer that we started above, and log any unexpected