]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/managedaction.php
[CORE] MySQL 5.5 support fully restored
[quix0rs-gnu-social.git] / lib / managedaction.php
index 580d8c09e3c72e3abb6b73affd82178544534711..e630925e8ffaa865c302465fa9a17a97d0c7f83d 100644 (file)
@@ -32,6 +32,20 @@ if (!defined('GNUSOCIAL')) { exit(1); }
 
 class ManagedAction extends Action
 {
+    protected function prepare(array $args = [])
+    {
+        if (!parent::prepare($args)) {
+            return false;
+        }
+        $this->doPreparation();
+        return true;
+    }
+
+    protected function doPreparation()
+    {
+        // pass by default
+    }
+
     /**
      * Handler method
      */
@@ -39,23 +53,48 @@ class ManagedAction extends Action
     {
         parent::handle();
 
-        if (StatusNet::isAjax()) {
-            $this->showAjax();
-        } else {
-            $this->showPage();
+        if ($this->canPost && $this->isPost()) {
+            try {
+                $this->msg = $this->handlePost();
+            } catch (Exception $e) {
+                $this->error = $e->getMessage();
+            }
         }
+
+        $this->showPage();
     }
 
-    public function showAjax()
+    /**
+     * If this is extended in child classes, they should
+     * end with 'return parent::handlePost();' - and they
+     * should only extend this function if what they do
+     * cannot be handled in ->doPost()
+     */
+    protected function handlePost()
     {
-        $this->startHTML('text/xml;charset=utf-8');
-        $this->elementStart('head');
-        // TRANS: Title for conversation page.
-        $this->element('title', null, _m('TITLE','Notice'));
-        $this->elementEnd('head');
-        $this->elementStart('body');
-        $this->showContent();
-        $this->elementEnd('body');
-        $this->endHTML();
+        // This will only be run if the Action has the property canPost==true
+        assert($this->canPost);
+
+        // check for this before token since all POST and FILES data
+        // is losts when size is exceeded
+        if (empty($_POST) && $_SERVER['CONTENT_LENGTH']>0) {
+            // TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit.
+            // TRANS: %s is the number of bytes of the CONTENT_LENGTH.
+            $msg = sprintf(_m('The server was unable to handle that much POST data (%s MiB) due to its current configuration.'),
+                      round($_SERVER['CONTENT_LENGTH']/1024/1024,2));
+            throw new ClientException($msg);
+        }
+
+        $this->checkSessionToken();
+        return $this->doPost();
+    }
+
+    /**
+     * Do Post stuff. Return a string if successful,
+     * describing what has been done. Always throw an
+     * exception on failure, with a descriptive message.
+     */
+    protected function doPost() {
+        return false;
     }
 }