533f1f8713c00584688592a5fc94af249ee4383e
[moodle.git] / cache / forms.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Forms used for the administration and managemement of the cache setup.
19  *
20  * This file is part of Moodle's cache API, affectionately called MUC.
21  *
22  * @package    core
23  * @category   cache
24  * @copyright  2012 Sam Hemelryk
25  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26  */
28 defined('MOODLE_INTERNAL') || die();
30 require_once($CFG->dirroot.'/lib/formslib.php');
32 /**
33  * Add store instance form.
34  *
35  * @package    core
36  * @category   cache
37  * @copyright  2012 Sam Hemelryk
38  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
39  */
40 class cachestore_addinstance_form extends moodleform {
42     /**
43      * The definition of the add instance form
44      */
45     protected final function definition() {
46         $form = $this->_form;
47         $store = $this->_customdata['store'];
48         $plugin = $this->_customdata['plugin'];
49         $locks = $this->_customdata['locks'];
51         $form->addElement('hidden', 'plugin', $plugin);
52         $form->addElement('hidden', 'editing', !empty($this->_customdata['store']));
54         if (!$store) {
55             $form->addElement('text', 'name', get_string('storename', 'cache'));
56             $form->addHelpButton('name', 'storename', 'cache');
57             $form->addRule('name', get_string('required'), 'required');
58             $form->setType('name', PARAM_TEXT);
59         } else {
60             $form->addElement('hidden', 'name', $store);
61             $form->addElement('static', 'name-value', get_string('storename', 'cache'), $store);
62         }
64         if (is_array($locks)) {
65             $form->addElement('select', 'lock', get_string('lockmethod', 'cache'), $locks);
66             $form->addHelpButton('lock', 'lockmethod', 'cache');
67             $form->setType('lock', PARAM_TEXT);
68         } else {
69             $form->addElement('hidden', 'lock', '');
70             $form->addElement('static', 'lock-value', get_string('lockmethod', 'cache'),
71                     '<em>'.get_string('nativelocking', 'cache').'</em>');
72         }
74         if (method_exists($this, 'configuration_definition')) {
75             $form->addElement('header', 'storeconfiguration', get_string('storeconfiguration', 'cache'));
76             $this->configuration_definition();
77         }
79         $this->add_action_buttons();
80     }
82     /**
83      * Validates the add instance form data
84      *
85      * @param array $data
86      * @param array $files
87      * @return array
88      */
89     public function validation($data, $files) {
90         $errors = parent::validation($data, $files);
92         if (!array_key_exists('name', $errors)) {
93             if (!preg_match('#^[a-zA-Z0-9\-_ ]+$#', $data['name'])) {
94                 $errors['name'] = get_string('storenameinvalid', 'cache');
95             } else if (empty($this->_customdata['store'])) {
96                 $stores = cache_administration_helper::get_store_instance_summaries();
97                 if (array_key_exists($data['name'], $stores)) {
98                     $errors['name'] = get_string('storenamealreadyused', 'cache');
99                 }
100             }
101         }
103         if (method_exists($this, 'configuration_validation')) {
104             $errors = $this->configuration_validation($data, $files);
105         }
107         return $errors;
108     }
111 /**
112  * Form to set definition mappings
113  *
114  * @package    core
115  * @category   cache
116  * @copyright  2012 Sam Hemelryk
117  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
118  */
119 class cache_definition_mappings_form extends moodleform {
121     /**
122      * The definition of the form
123      */
124     protected final function definition() {
125         $definition = $this->_customdata['definition'];
126         $form = $this->_form;
128         list($component, $area) = explode('/', $definition, 2);
129         list($currentstores, $storeoptions, $defaults) =
130                 cache_administration_helper::get_definition_store_options($component, $area);
132         $form->addElement('hidden', 'definition', $definition);
133         $form->addElement('hidden', 'action', 'editdefinitionmapping');
135         $requiredoptions = max(3, count($currentstores)+1);
136         $requiredoptions = min($requiredoptions, count($storeoptions));
138         $options = array('' => get_string('none'));
139         foreach ($storeoptions as $option => $def) {
140             $options[$option] = $option;
141             if ($def['default']) {
142                 $options[$option] .= ' '.get_string('mappingdefault', 'cache');
143             }
144         }
146         for ($i = 0; $i < $requiredoptions; $i++) {
147             $title = '...';
148             if ($i === 0) {
149                 $title = get_string('mappingprimary', 'cache');
150             } else if ($i === $requiredoptions-1) {
151                 $title = get_string('mappingfinal', 'cache');
152             }
153             $form->addElement('select', 'mappings['.$i.']', $title, $options);
154         }
155         $i = 0;
156         foreach ($currentstores as $store => $def) {
157             $form->setDefault('mappings['.$i.']', $store);
158             $i++;
159         }
161         if (!empty($defaults)) {
162             $form->addElement('static', 'defaults', get_string('defaultmappings', 'cache'),
163                     html_writer::tag('strong', join(', ', $defaults)));
164             $form->addHelpButton('defaults', 'defaultmappings', 'cache');
165         }
167         $this->add_action_buttons();
168     }
171 /**
172  * Form to set the mappings for a mode.
173  *
174  * @package    core
175  * @category   cache
176  * @copyright  2012 Sam Hemelryk
177  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
178  */
179 class cache_mode_mappings_form extends moodleform {
180     /**
181      * The definition of the form
182      */
183     protected function definition() {
184         $form = $this->_form;
185         $stores = $this->_customdata;
187         $options = array(
188             cache_store::MODE_APPLICATION => array(),
189             cache_store::MODE_SESSION => array(),
190             cache_store::MODE_REQUEST => array()
191         );
192         foreach ($stores as $storename => $store) {
193             foreach ($store['modes'] as $mode => $enabled) {
194                 if ($enabled) {
195                     if (empty($store['default'])) {
196                         $options[$mode][$storename] = $store['name'];
197                     } else {
198                         $options[$mode][$storename] = get_string('store_'.$store['name'], 'cache');
199                     }
200                 }
201             }
202         }
204         $form->addElement('hidden', 'action', 'editmodemappings');
205         foreach ($options as $mode => $optionset) {
206             $form->addElement('select', 'mode_'.$mode, get_string('mode_'.$mode, 'cache'), $optionset);
207         }
209         $this->add_action_buttons();
210     }