]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/licenseadminpanel.php
Stronger typing and fixes in RequireValidatedEmail
[quix0rs-gnu-social.git] / actions / licenseadminpanel.php
1 <?php
2 /**
3  * StatusNet, the distributed open-source microblogging tool
4  *
5  * License administration panel
6  *
7  * PHP version 5
8  *
9  * LICENCE: This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU Affero General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU Affero General Public License for more details.
18  *
19  * You should have received a copy of the GNU Affero General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  * @category  Settings
23  * @package   StatusNet
24  * @author    Zach Copley <zach@status.net>
25  * @copyright 2010 StatusNet, Inc.
26  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
27  * @link      http://status.net/
28  */
29
30 if (!defined('STATUSNET')) {
31     exit(1);
32 }
33
34 /**
35  * License settings
36  *
37  * @category Admin
38  * @package  StatusNet
39  * @author   Zach Copley <zach@status.net>
40  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
41  * @link     http://status.net/
42  */
43 class LicenseadminpanelAction extends AdminPanelAction
44 {
45     /**
46      * Returns the page title
47      *
48      * @return string page title
49      */
50
51     function title()
52     {
53         // TRANS: User admin panel title
54         return _m('TITLE', 'License');
55     }
56
57     /**
58      * Instructions for using this form.
59      *
60      * @return string instructions
61      */
62     function getInstructions()
63     {
64         // TRANS: Form instructions for the site license admin panel.
65         return _('License for this StatusNet site');
66     }
67
68     /**
69      * Show the site admin panel form
70      *
71      * @return void
72      */
73     function showForm()
74     {
75         $form = new LicenseAdminPanelForm($this);
76         $form->show();
77         return;
78     }
79
80     /**
81      * Save settings from the form
82      *
83      * @return void
84      */
85     function saveSettings()
86     {
87         static $settings = array(
88             'license' => array('type', 'owner', 'url', 'title', 'image')
89         );
90
91         $values = array();
92
93         foreach ($settings as $section => $parts) {
94             foreach ($parts as $setting) {
95                 $values[$section][$setting] = $this->trimmed($setting);
96             }
97         }
98
99         // This throws an exception on validation errors
100
101         $this->validate($values);
102
103         // assert(all values are valid);
104
105         $config = new Config();
106
107         $config->query('BEGIN');
108
109         foreach ($settings as $section => $parts) {
110             foreach ($parts as $setting) {
111                 Config::save($section, $setting, $values[$section][$setting]);
112             }
113         }
114
115         $config->query('COMMIT');
116
117         return;
118     }
119
120     /**
121      * Validate License admin form values
122      *
123      * @param array &$values from the form
124      *
125      * @return nothing
126      */
127     function validate(&$values)
128     {
129         // Validate license type (shouldn't have to do it, but just in case)
130
131         $types = array('private', 'allrightsreserved', 'cc');
132
133         if (!in_array($values['license']['type'], $types)) {
134             // TRANS: Client error displayed selecting an invalid license in the license admin panel.
135             $this->clientError(_('Invalid license selection.'));
136         }
137
138         // Make sure the user has set an owner if the site has a private
139         // license
140
141         if ($values['license']['type'] == 'allrightsreserved'
142             && empty($values['license']['owner'])
143         ) {
144             $this->clientError(
145                 // TRANS: Client error displayed when not specifying an owner for the all rights reserved license in the license admin panel.
146                 _('You must specify the owner of the content when using the All Rights Reserved license.')
147             );
148         }
149
150         // Make sure the license title is not too long
151         if (mb_strlen($values['license']['type']) > 255) {
152             $this->clientError(
153                 // TRANS: Client error displayed selecting a too long license title in the license admin panel.
154                 _('Invalid license title. Maximum length is 255 characters.')
155             );
156         }
157
158         // URLs should be set for cc license
159
160         if ($values['license']['type'] == 'cc') {
161             if (!common_valid_http_url($values['license']['url'])) {
162                 // TRANS: Client error displayed specifying an invalid license URL in the license admin panel.
163                 $this->clientError(_('Invalid license URL.'));
164             }
165             if (!common_valid_http_url($values['license']['image'])) {
166                 // TRANS: Client error displayed specifying an invalid license image URL in the license admin panel.
167                 $this->clientError(_('Invalid license image URL.'));
168             }
169         }
170
171         // can be either blank or a valid URL for private & allrightsreserved
172
173         if (!empty($values['license']['url'])) {
174             if (!common_valid_http_url($values['license']['url'])) {
175                 // TRANS: Client error displayed specifying an invalid license URL in the license admin panel.
176                 $this->clientError(_('License URL must be blank or a valid URL.'));
177             }
178         }
179
180         // can be either blank or a valid URL for private & allrightsreserved
181
182         if (!empty($values['license']['image'])) {
183             if (!common_valid_http_url($values['license']['image'])) {
184                 // TRANS: Client error displayed specifying an invalid license image URL in the license admin panel.
185                 $this->clientError(_('License image must be blank or valid URL.'));
186             }
187         }
188     }
189 }
190
191 class LicenseAdminPanelForm extends AdminForm
192 {
193     /**
194      * ID of the form
195      *
196      * @return int ID of the form
197      */
198     function id()
199     {
200         return 'licenseadminpanel';
201     }
202
203     /**
204      * class of the form
205      *
206      * @return string class of the form
207      */
208     function formClass()
209     {
210         return 'form_settings';
211     }
212
213     /**
214      * Action of the form
215      *
216      * @return string URL of the action
217      */
218
219     function action()
220     {
221         return common_local_url('licenseadminpanel');
222     }
223
224     /**
225      * Data elements of the form
226      *
227      * @return void
228      */
229
230     function formData()
231     {
232         $this->out->elementStart(
233             'fieldset', array('id' => 'settings_license-selection')
234         );
235         // TRANS: Form legend in the license admin panel.
236         $this->out->element('legend', null, _('License selection'));
237         $this->out->elementStart('ul', 'form_data');
238
239         $this->li();
240
241         $types = array(
242             // TRANS: License option in the license admin panel.
243             'private' => _('Private'),
244             // TRANS: License option in the license admin panel.
245             'allrightsreserved' => _('All Rights Reserved'),
246             // TRANS: License option in the license admin panel.
247             'cc' => _('Creative Commons')
248         );
249
250         $this->out->dropdown(
251             'type',
252             // TRANS: Dropdown field label in the license admin panel.
253             _('Type'),
254             $types,
255             // TRANS: Dropdown field instructions in the license admin panel.
256             _('Select a license.'),
257             false,
258             $this->value('type', 'license')
259         );
260
261         $this->unli();
262
263         $this->out->elementEnd('ul');
264         $this->out->elementEnd('fieldset');
265
266         $this->out->elementStart(
267             'fieldset',
268             array('id' => 'settings_license-details')
269         );
270         // TRANS: Form legend in the license admin panel.
271         $this->out->element('legend', null, _('License details'));
272         $this->out->elementStart('ul', 'form_data');
273
274         $this->li();
275         $this->input(
276             'owner',
277             // TRANS: Field label in the license admin panel.
278             _('Owner'),
279             // TRANS: Field title in the license admin panel.
280             _('Name of the owner of the site\'s content (if applicable).'),
281             'license'
282         );
283         $this->unli();
284
285         $this->li();
286         $this->input(
287             'title',
288             // TRANS: Field label in the license admin panel.
289             _('License Title'),
290             // TRANS: Field title in the license admin panel.
291             _('The title of the license.'),
292             'license'
293         );
294         $this->unli();
295
296         $this->li();
297         $this->input(
298             'url',
299             // TRANS: Field label in the license admin panel.
300             _('License URL'),
301             // TRANS: Field title in the license admin panel.
302             _('URL for more information about the license.'),
303             'license'
304         );
305         $this->unli();
306
307         $this->li();
308         $this->input(
309             // TRANS: Field label in the license admin panel.
310             'image', _('License Image URL'),
311             // TRANS: Field title in the license admin panel.
312             _('URL for an image to display with the license.'),
313             'license'
314         );
315         $this->unli();
316
317         $this->out->elementEnd('ul');
318         $this->out->elementEnd('fieldset');
319     }
320
321     /**
322      * Action elements
323      *
324      * @return void
325      */
326     function formActions()
327     {
328         $this->out->submit(
329             'submit',
330             // TRANS: Button text in the license admin panel.
331             _m('BUTTON','Save'),
332             'submit',
333             null,
334             // TRANS: Button title in the license admin panel.
335             _('Save license settings.')
336         );
337     }
338 }