class ManagedAction extends Action
{
+ protected function prepare(array $args=array())
+ {
+ if (!parent::prepare($args)) {
+ return false;
+ }
+ $this->doPreparation();
+ return true;
+ }
+
+ protected function doPreparation()
+ {
+ // pass by default
+ }
+
/**
* Handler method
*/
{
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;
}
}