]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Index and Action use Exceptions
authorEvan Prodromou <evan@controlyourself.ca>
Mon, 9 Feb 2009 12:15:52 +0000 (07:15 -0500)
committerEvan Prodromou <evan@controlyourself.ca>
Mon, 9 Feb 2009 12:15:52 +0000 (07:15 -0500)
Main Web entry point accepts exceptions, and main code in Action
throws them.

index.php
lib/action.php

index 387b642e2c6a2e8a81772bbbf8b29f36b1c1ffcc..075ee967687a1c37d63dc60ac0d9417324973661 100644 (file)
--- a/index.php
+++ b/index.php
@@ -47,7 +47,11 @@ if (!$user && common_config('site', 'private') &&
 
 $actionfile = INSTALLDIR."/actions/$action.php";
 
-if (file_exists($actionfile)) {
+if (!file_exists($actionfile)) {
+    $cac = new ClientErrorAction();
+    $cac->handle(array('code' => 404,
+                       'message' => _('Unknown action')));
+} else {
 
     include_once $actionfile;
 
@@ -66,9 +70,22 @@ if (file_exists($actionfile)) {
         }
         $config['db']['database'] = $mirror;
     }
-    if (call_user_func(array($action_obj, 'prepare'), $_REQUEST)) {
-        call_user_func(array($action_obj, 'handle'), $_REQUEST);
+
+    try {
+        if ($action_obj->prepare($_REQUEST)) {
+            $action_obj->handle($_REQUEST);
+        }
+    } catch (ClientException cex) {
+        $cac = new ClientErrorAction();
+        $cac->handle(array('code' => $cex->code,
+                           'message' => $cex->message));
+    } catch (ServerException sex) { // snort snort guffaw
+        $sac = new ServerErrorAction();
+        $sac->handle(array('code' => $sex->code,
+                           'message' => $sex->message));
+    } catch (Exception ex) {
+        $sac = new ServerErrorAction();
+        $sac->handle(array('code' => 500,
+                           'message' => $ex->message));
     }
-} else {
-    common_user_error(_('Unknown action'));
-}
\ No newline at end of file
+}
index c4172ada1135293fd2ce5a5d7c3487cfb7184c8a..9fbabb4fcb37cb676e4cf9762fe9f8c5782f24b9 100644 (file)
@@ -789,11 +789,12 @@ class Action extends HTMLOutputter // lawsuit
      *
      * @return nothing
      */
+
     function serverError($msg, $code=500)
     {
         $action = $this->trimmed('action');
         common_debug("Server error '$code' on '$action': $msg", __FILE__);
-        common_server_error($msg, $code);
+        throw new ServerException($msg, $code);
     }
 
     /**
@@ -804,11 +805,12 @@ class Action extends HTMLOutputter // lawsuit
      *
      * @return nothing
      */
+
     function clientError($msg, $code=400)
     {
         $action = $this->trimmed('action');
         common_debug("User error '$code' on '$action': $msg", __FILE__);
-        common_user_error($msg, $code);
+        throw new ClientException($msg, $code);
     }
 
     /**