]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - lib/formaction.php
Conforming to code layout
[quix0rs-gnu-social.git] / lib / formaction.php
1 <?php
2 /**
3  * Form action extendable class.
4  *
5  * PHP version 5
6  *
7  * @category Action
8  * @package  StatusNet
9  * @author   Evan Prodromou <evan@status.net>
10  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
11  * @link     http://status.net/
12  *
13  * StatusNet - the distributed open-source microblogging tool
14  * Copyright (C) 2008, 2009, StatusNet, Inc.
15  *
16  * This program is free software: you can redistribute it and/or modify
17  * it under the terms of the GNU Affero General Public License as published by
18  * the Free Software Foundation, either version 3 of the License, or
19  * (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24  * GNU Affero General Public License for more details.
25  *
26  * You should have received a copy of the GNU Affero General Public License
27  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
28  */
29
30 if (!defined('STATUSNET')) {
31     exit(1);
32 }
33
34 /**
35  * Form action extendable class
36  *
37  * @category Action
38  * @package  StatusNet
39  * @author   Evan Prodromou <evan@status.net>
40  * @author   Mikael Nordfeldth <evan@status.net>
41  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
42  * @link     http://status.net/
43  */
44 class FormAction extends Action
45 {
46     protected $form = null;
47     protected $type = null;
48
49     protected function prepare(array $args=array()) {
50         parent::prepare($args);
51
52         $this->form = $this->form ?: $this->action;
53         $this->args['form'] = $this->form;
54
55         $this->type = !is_null($this->type) ? $this->type : $this->trimmed('type');
56         $this->args['context'] = $this->trimmed('action');  // reply for notice for example
57
58         if (!$this->type) {
59             $this->type = null;
60         }
61
62         return true;
63     }
64
65     protected function handle()
66     {
67         parent::handle();
68
69         if ($this->isPost()) {
70             try {
71                 $msg = $this->handlePost();
72                 $this->showForm($msg, true);
73             } catch (Exception $e) {
74                 $this->showForm($e->getMessage());
75             }
76         } else {
77             $this->showForm();
78         }
79     }
80
81     public function isReadOnly($args) {
82         return !$this->isPost();
83     }
84
85     public function showPageNotice()
86     {
87         $this->showInstructions();
88         if ($msg = $this->getError()) {
89             $this->element('div', 'error', $msg);
90         }
91         if ($msg = $this->getInfo()) {
92             $this->element('div', 'info', $msg);
93         }
94     }
95
96     /**
97      * Outputs the instructions for the form
98      *
99      * SHOULD overload
100      */
101     public function showInstructions()
102     {
103         // instructions are nice, so users know what to do
104     }
105
106     public function showForm($msg=null, $success=false)
107     {
108         if ($success) {
109             $this->msg = $msg;
110         } else {
111             $this->error = $msg;
112         }
113         $this->showPage();
114     }
115
116     /**
117      * Gets called from handle() if isPost() is true;
118      * @return void
119      */
120     protected function handlePost()
121     {
122         // check for this before token since all POST and FILES data
123         // is losts when size is exceeded
124         if (empty($_POST) && $_SERVER['CONTENT_LENGTH']>0) {
125             // TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit.
126             // TRANS: %s is the number of bytes of the CONTENT_LENGTH.
127             $msg = _m('The server was unable to handle that much POST data (%s MiB) due to its current configuration.',
128                       'The server was unable to handle that much POST data (%s MiB) due to its current configuration.',
129                       round($_SERVER['CONTENT_LENGTH']/1024/1024,2));
130             throw new ClientException($msg);
131         }
132
133         $this->checkSessionToken();
134     }
135 }