]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Use the Action class itself as error handler
authorMikael Nordfeldth <mmn@hethane.se>
Thu, 14 Jan 2016 17:11:54 +0000 (18:11 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Thu, 14 Jan 2016 17:21:11 +0000 (18:21 +0100)
lib/action.php

index 29dbbc618e60c30a103fc4812034d163083f4007..03751c6f77a9eb7e391c09fd04d58ccecfd990d0 100644 (file)
@@ -95,9 +95,22 @@ class Action extends HTMLOutputter // lawsuit
         return $this->msg;
     }
 
+    public function handleError($e)
+    {
+        if ($e instanceof ClientException) {
+            $this->clientError($e->getMessage(), $e->getCode());
+        } elseif ($e instanceof ServerException) {
+            $this->serverError($e->getMessage(), $e->getCode());
+        } else {
+            // If it wasn't specified more closely which kind of exception it was
+            $this->serverError($e->getMessage(), 500);
+        }
+    }
+
     static public function run(array $args=array(), $output='php://output', $indent=null) {
         $class = get_called_class();
         $action = new $class($output, $indent);
+        set_exception_handler(array($action, 'handleError'));
         $action->execute($args);
         return $action;
     }
@@ -1443,7 +1456,7 @@ class Action extends HTMLOutputter // lawsuit
             $this->endDocument('json');
             break;
         default:
-            throw new ServerException($msg, $code);
+            common_log(LOG_ERR, 'Handled '.get_class($e).' but cannot output into desired format: '._ve($e->getMessage()));
         }
 
         exit((int)$code);
@@ -1471,7 +1484,7 @@ class Action extends HTMLOutputter // lawsuit
         if (!array_key_exists($code, ClientErrorAction::$status)) {
             $code = 400;
         }
-        
+
         $status_string = ClientErrorAction::$status[$code];
 
         switch ($format) {
@@ -1499,7 +1512,7 @@ class Action extends HTMLOutputter // lawsuit
             echo $msg;
             break;
         default:
-            throw new ClientException($msg, $code);
+            common_log(LOG_ERR, 'Handled '.get_class($e).' but cannot output into desired format: '._ve($e->getMessage()));
         }
         exit((int)$code);
     }