]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/licenseadminpanel.php
Merge branch 'master' into 0.9.x
[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
44 class LicenseadminpanelAction extends AdminPanelAction
45 {
46
47     /**
48      * Returns the page title
49      *
50      * @return string page title
51      */
52
53     function title()
54     {
55         // TRANS: User admin panel title
56         return _m('TITLE', 'License');
57     }
58
59     /**
60      * Instructions for using this form.
61      *
62      * @return string instructions
63      */
64
65     function getInstructions()
66     {
67         return _('License for this StatusNet site');
68     }
69
70     /**
71      * Show the site admin panel form
72      *
73      * @return void
74      */
75
76     function showForm()
77     {
78         $form = new LicenseAdminPanelForm($this);
79         $form->show();
80         return;
81     }
82
83     /**
84      * Save settings from the form
85      *
86      * @return void
87      */
88
89     function saveSettings()
90     {
91         static $settings = array(
92             'license' => array('type', 'owner', 'url', 'title', 'image')
93         );
94
95         $values = array();
96
97         foreach ($settings as $section => $parts) {
98             foreach ($parts as $setting) {
99                 $values[$section][$setting] = $this->trimmed($setting);
100             }
101         }
102
103         // This throws an exception on validation errors
104
105         $this->validate($values);
106
107         // assert(all values are valid);
108
109         $config = new Config();
110
111         $config->query('BEGIN');
112
113         foreach ($settings as $section => $parts) {
114             foreach ($parts as $setting) {
115                 Config::save($section, $setting, $values[$section][$setting]);
116             }
117         }
118
119         $config->query('COMMIT');
120
121         return;
122     }
123
124     /**
125      * Validate License admin form values
126      *
127      * @param array &$values from the form
128      *
129      * @return nothing
130      */
131
132     function validate(&$values)
133     {
134         // Validate license type (shouldn't have to do it, but just in case)
135
136         $types = array('private', 'allrightsreserved', 'cc');
137
138         if (!in_array($values['license']['type'], $types)) {
139             $this->clientError(_("Invalid license selection."));
140         }
141
142         // Make sure the user has set an owner if the site has a private
143         // license
144
145         if ($values['license']['type'] == 'allrightsreserved'
146             && empty($values['license']['owner'])
147         ) {
148             $this->clientError(
149                 _("You must specify the owner of the content when using the All Rights Reserved license.")
150             );
151         }
152
153         // Make sure the license title is not too long
154         if (mb_strlen($values['license']['type']) > 255) {
155             $this->clientError(
156                 _('Invalid license title. Maximum length is 255 characters.')
157             );
158         }
159
160         // make sure the license URL and license image URL are valid URLs
161
162         $options = array('allowed_schemes' => array('http', 'https'));
163
164         // URLs should be set for cc license
165
166         if ($values['license']['type'] == 'cc') {
167             if (!Validate::uri($values['license']['url'], $options)) {
168                 $this->clientError(_("Invalid license URL."));
169             }
170             if (!Validate::uri($values['license']['image'], $options)) {
171                 $this->clientError(_("Invalid license image URL."));
172             }
173         }
174
175         // can be either blank or a valid URL for private & allrightsreserved
176
177         if (!empty($values['license']['url'])) {
178             if (!Validate::uri($values['license']['url'], $options)) {
179                 $this->clientError(_("License URL must be blank or a valid URL."));
180             }
181         }
182
183         // can be either blank or a valid URL for private & allrightsreserved
184
185         if (!empty($values['license']['image'])) {
186             if (!Validate::uri($values['license']['image'], $options)) {
187                 $this->clientError(_("License image must be blank or valid URL."));
188             }
189         }
190     }
191 }
192
193 class LicenseAdminPanelForm extends AdminForm
194 {
195     /**
196      * ID of the form
197      *
198      * @return int ID of the form
199      */
200
201     function id()
202     {
203         return 'licenseadminpanel';
204     }
205
206     /**
207      * class of the form
208      *
209      * @return string class of the form
210      */
211
212     function formClass()
213     {
214         return 'form_settings';
215     }
216
217     /**
218      * Action of the form
219      *
220      * @return string URL of the action
221      */
222
223     function action()
224     {
225         return common_local_url('licenseadminpanel');
226     }
227
228     /**
229      * Data elements of the form
230      *
231      * @return void
232      */
233
234     function formData()
235     {
236         $this->out->elementStart(
237             'fieldset', array('id' => 'settings_license-selection')
238         );
239         $this->out->element('legend', null, _('License selection'));
240         $this->out->elementStart('ul', 'form_data');
241
242         $this->li();
243
244         $types = array(
245             'private' => _('Private'),
246             'allrightsreserved' => _('All Rights Reserved'),
247             'cc' => _('Creative Commons')
248         );
249
250         $this->out->dropdown(
251             'type',
252             _('Type'),
253             $types,
254             _('Select license'),
255             false,
256             $this->value('type', 'license')
257         );
258
259         $this->unli();
260
261         $this->out->elementEnd('ul');
262         $this->out->elementEnd('fieldset');
263
264         $this->out->elementStart(
265             'fieldset',
266             array('id' => 'settings_license-details')
267         );
268         $this->out->element('legend', null, _('License details'));
269         $this->out->elementStart('ul', 'form_data');
270
271         $this->li();
272         $this->input(
273             'owner',
274             _('Owner'),
275             _('Name of the owner of the site\'s content (if applicable).'),
276             'license'
277         );
278         $this->unli();
279
280         $this->li();
281         $this->input(
282             'title',
283             _('License Title'),
284             _('The title of the license.'),
285             'license'
286         );
287         $this->unli();
288
289         $this->li();
290         $this->input(
291             'url',
292             _('License URL'),
293             _('URL for more information about the license.'),
294             'license'
295         );
296         $this->unli();
297
298         $this->li();
299         $this->input(
300             'image', _('License Image URL'),
301             _('URL for an image to display with the license.'),
302             'license'
303         );
304         $this->unli();
305
306         $this->out->elementEnd('ul');
307         $this->out->elementEnd('fieldset');
308     }
309
310     /**
311      * Action elements
312      *
313      * @return void
314      */
315
316     function formActions()
317     {
318         $this->out->submit(
319             'submit', _('Save'), 'submit', null, _('Save license settings')
320         );
321     }
322 }