source: moodle/trunk/fuentes/cache/renderer.php @ 1331

Last change on this file since 1331 was 1331, checked in by jrpelegrina, 3 years ago

Updated to moodle 3.0.3

File size: 14.4 KB
Line 
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/>.
16
17/**
18 * The Cache renderer.
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 */
27
28defined('MOODLE_INTERNAL') || die();
29
30/**
31 * The cache renderer (mainly admin interfaces).
32 *
33 * @package    core
34 * @category   cache
35 * @copyright  2012 Sam Hemelryk
36 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37 */
38class core_cache_renderer extends plugin_renderer_base {
39
40    /**
41     * Displays store summaries.
42     *
43     * @param array $stores
44     * @param array $plugins
45     * @return string HTML
46     */
47    public function store_instance_summariers(array $stores, array $plugins) {
48        $table = new html_table();
49        $table->head = array(
50            get_string('storename', 'cache'),
51            get_string('plugin', 'cache'),
52            get_string('storeready', 'cache'),
53            get_string('mappings', 'cache'),
54            get_string('modes', 'cache'),
55            get_string('supports', 'cache'),
56            get_string('locking', 'cache') . ' ' . $this->output->help_icon('locking', 'cache'),
57            get_string('actions', 'cache'),
58        );
59        $table->colclasses = array(
60            'storename',
61            'plugin',
62            'storeready',
63            'mappings',
64            'modes',
65            'supports',
66            'locking',
67            'actions'
68        );
69        $table->data = array();
70
71        $defaultstoreactions = get_string('defaultstoreactions', 'cache');
72
73        foreach ($stores as $name => $store) {
74            $actions = cache_administration_helper::get_store_instance_actions($name, $store);
75            $modes = array();
76            foreach ($store['modes'] as $mode => $enabled) {
77                if ($enabled) {
78                    $modes[] = get_string('mode_'.$mode, 'cache');
79                }
80            }
81
82            $supports = array();
83            foreach ($store['supports'] as $support => $enabled) {
84                if ($enabled) {
85                    $supports[] = get_string('supports_'.$support, 'cache');
86                }
87            }
88
89            $info = '';
90            if (!empty($store['default'])) {
91                $info = $this->output->pix_icon('i/info', $defaultstoreactions, '', array('class' => 'icon'));
92            }
93            $htmlactions = array();
94            foreach ($actions as $action) {
95                $htmlactions[] = $this->output->action_link($action['url'], $action['text']);
96            }
97
98            $isready = $store['isready'] && $store['requirementsmet'];
99            $readycell = new html_table_cell;
100            if ($isready) {
101                $readycell->text = $this->output->pix_icon('i/valid', '1');
102            }
103
104            $storename = $store['name'];
105            if (!empty($store['default'])) {
106                $storename = get_string('store_'.$store['name'], 'cache');
107            }
108            if (!$isready && (int)$store['mappings'] > 0) {
109                $readycell->text = $this->output->help_icon('storerequiresattention', 'cache');
110                $readycell->attributes['class'] = 'store-requires-attention';
111            }
112
113            $lock = $store['lock']['name'];
114            if (!empty($store['lock']['default'])) {
115                $lock = get_string($store['lock']['name'], 'cache');
116            }
117
118            $row = new html_table_row(array(
119                $storename,
120                get_string('pluginname', 'cachestore_'.$store['plugin']),
121                $readycell,
122                $store['mappings'],
123                join(', ', $modes),
124                join(', ', $supports),
125                $lock,
126                $info.join(', ', $htmlactions)
127            ));
128            $row->attributes['class'] = 'store-'.$name;
129            if ($store['default']) {
130                $row->attributes['class'] .= ' default-store';
131            }
132            $table->data[] = $row;
133        }
134
135        $html  = html_writer::start_tag('div', array('id' => 'core-cache-store-summaries'));
136        $html .= $this->output->heading(get_string('storesummaries', 'cache'), 3);
137        $html .= html_writer::table($table);
138        $html .= html_writer::end_tag('div');
139        return $html;
140    }
141
142    /**
143     * Displays plugin summaries
144     *
145     * @param array $plugins
146     * @return string HTML
147     */
148    public function store_plugin_summaries(array $plugins) {
149        $table = new html_table();
150        $table->head = array(
151            get_string('plugin', 'cache'),
152            get_string('storeready', 'cache'),
153            get_string('stores', 'cache'),
154            get_string('modes', 'cache'),
155            get_string('supports', 'cache'),
156            get_string('actions', 'cache'),
157        );
158        $table->colclasses = array(
159            'plugin',
160            'storeready',
161            'stores',
162            'modes',
163            'supports',
164            'actions'
165        );
166        $table->data = array();
167
168        foreach ($plugins as $name => $plugin) {
169            $actions = cache_administration_helper::get_store_plugin_actions($name, $plugin);
170
171            $modes = array();
172            foreach ($plugin['modes'] as $mode => $enabled) {
173                if ($enabled) {
174                    $modes[] = get_string('mode_'.$mode, 'cache');
175                }
176            }
177
178            $supports = array();
179            foreach ($plugin['supports'] as $support => $enabled) {
180                if ($enabled) {
181                    $supports[] = get_string('supports_'.$support, 'cache');
182                }
183            }
184
185            $htmlactions = array();
186            foreach ($actions as $action) {
187                $htmlactions[] = $this->output->action_link($action['url'], $action['text']);
188            }
189
190            $row = new html_table_row(array(
191                $plugin['name'],
192                ($plugin['requirementsmet']) ? $this->output->pix_icon('i/valid', '1') : '',
193                $plugin['instances'],
194                join(', ', $modes),
195                join(', ', $supports),
196                join(', ', $htmlactions)
197            ));
198
199            $row->attributes['class'] = 'plugin-'.$name;
200            $table->data[] = $row;
201        }
202
203        $html  = html_writer::start_tag('div', array('id' => 'core-cache-plugin-summaries'));
204        $html .= $this->output->heading(get_string('pluginsummaries', 'cache'), 3);
205        $html .= html_writer::table($table);
206        $html .= html_writer::end_tag('div');
207        return $html;
208    }
209
210    /**
211     * Displays definition summaries
212     *
213     * @param array $definitions
214     * @return string HTML
215     */
216    public function definition_summaries(array $definitions, context $context) {
217        $table = new html_table();
218        $table->head = array(
219            get_string('definition', 'cache'),
220            get_string('mode', 'cache'),
221            get_string('component', 'cache'),
222            get_string('area', 'cache'),
223            get_string('mappings', 'cache'),
224            get_string('sharing', 'cache'),
225            get_string('actions', 'cache'),
226        );
227        $table->colclasses = array(
228            'definition',
229            'mode',
230            'component',
231            'area',
232            'mappings',
233            'sharing',
234            'actions'
235        );
236        $table->data = array();
237
238        core_collator::asort_array_of_arrays_by_key($definitions, 'name');
239
240        $none = new lang_string('none', 'cache');
241        foreach ($definitions as $id => $definition) {
242            $actions = cache_administration_helper::get_definition_actions($context, $definition);
243            $htmlactions = array();
244            foreach ($actions as $action) {
245                $action['url']->param('definition', $id);
246                $htmlactions[] = $this->output->action_link($action['url'], $action['text']);
247            }
248            if (!empty($definition['mappings'])) {
249                $mapping = join(', ', $definition['mappings']);
250            } else {
251                $mapping = '<em>'.$none.'</em>';
252            }
253
254            $row = new html_table_row(array(
255                $definition['name'],
256                get_string('mode_'.$definition['mode'], 'cache'),
257                $definition['component'],
258                $definition['area'],
259                $mapping,
260                join(', ', $definition['selectedsharingoption']),
261                join(', ', $htmlactions)
262            ));
263            $row->attributes['class'] = 'definition-'.$definition['component'].'-'.$definition['area'];
264            $table->data[] = $row;
265        }
266
267        $html  = html_writer::start_tag('div', array('id' => 'core-cache-definition-summaries'));
268        $html .= $this->output->heading(get_string('definitionsummaries', 'cache'), 3);
269        $html .= html_writer::table($table);
270
271        $url = new moodle_url('/cache/admin.php', array('action' => 'rescandefinitions', 'sesskey' => sesskey()));
272        $link = html_writer::link($url, get_string('rescandefinitions', 'cache'));
273        $html .= html_writer::tag('div', $link, array('id' => 'core-cache-rescan-definitions'));
274
275        $html .= html_writer::end_tag('div');
276        return $html;
277    }
278
279    /**
280     * Displays mode mappings
281     *
282     * @param string $applicationstore
283     * @param string $sessionstore
284     * @param string $requeststore
285     * @param moodle_url $editurl
286     * @return string HTML
287     */
288    public function mode_mappings($applicationstore, $sessionstore, $requeststore, moodle_url $editurl) {
289        $table = new html_table();
290        $table->colclasses = array(
291            'mode',
292            'mapping',
293        );
294        $table->rowclasses = array(
295            'mode_application',
296            'mode_session',
297            'mode_request'
298        );
299        $table->head = array(
300            get_string('mode', 'cache'),
301            get_string('mappings', 'cache'),
302        );
303        $table->data = array(
304            array(get_string('mode_'.cache_store::MODE_APPLICATION, 'cache'), $applicationstore),
305            array(get_string('mode_'.cache_store::MODE_SESSION, 'cache'), $sessionstore),
306            array(get_string('mode_'.cache_store::MODE_REQUEST, 'cache'), $requeststore)
307        );
308
309        $html = html_writer::start_tag('div', array('id' => 'core-cache-mode-mappings'));
310        $html .= $this->output->heading(get_string('defaultmappings', 'cache'), 3);
311        $html .= html_writer::table($table);
312        $link = html_writer::link($editurl, get_string('editmappings', 'cache'));
313        $html .= html_writer::tag('div', $link, array('class' => 'edit-link'));
314        $html .= html_writer::end_tag('div');
315        return $html;
316    }
317
318    /**
319     * Display basic information about lock instances.
320     *
321     * @todo Add some actions so that people can configure lock instances.
322     *
323     * @param array $locks
324     * @return string
325     */
326    public function lock_summaries(array $locks) {
327        $table = new html_table();
328        $table->colclasses = array(
329            'name',
330            'type',
331            'default',
332            'uses',
333            'actions'
334        );
335        $table->rowclasses = array(
336            'lock_name',
337            'lock_type',
338            'lock_default',
339            'lock_uses',
340            'lock_actions',
341        );
342        $table->head = array(
343            get_string('lockname', 'cache'),
344            get_string('locktype', 'cache'),
345            get_string('lockdefault', 'cache'),
346            get_string('lockuses', 'cache'),
347            get_string('actions', 'cache')
348        );
349        $table->data = array();
350        $tick = $this->output->pix_icon('i/valid', '');
351        foreach ($locks as $lock) {
352            $actions = array();
353            if ($lock['uses'] === 0 && !$lock['default']) {
354                $url = new moodle_url('/cache/admin.php', array('lock' => $lock['name'], 'action' => 'deletelock', 'sesskey' => sesskey()));
355                $actions[] = html_writer::link($url, get_string('delete', 'cache'));
356            }
357            $table->data[] = new html_table_row(array(
358                new html_table_cell($lock['name']),
359                new html_table_cell($lock['type']),
360                new html_table_cell($lock['default'] ? $tick : ''),
361                new html_table_cell($lock['uses']),
362                new html_table_cell(join(' ', $actions))
363            ));
364        }
365
366        $url = new moodle_url('/cache/admin.php', array('action' => 'newlockinstance', 'sesskey' => sesskey()));
367        $select = new single_select($url, 'lock', cache_administration_helper::get_addable_lock_options());
368        $select->label = get_string('addnewlockinstance', 'cache');
369
370        $html = html_writer::start_tag('div', array('id' => 'core-cache-lock-summary'));
371        $html .= $this->output->heading(get_string('locksummary', 'cache'), 3);
372        $html .= html_writer::table($table);
373        $html .= html_writer::tag('div', $this->output->render($select), array('class' => 'new-instance'));
374        $html .= html_writer::end_tag('div');
375        return $html;
376    }
377
378    /**
379     * Renders an array of notifications for the cache configuration screen.
380     *
381     * Takes an array of notifications with the form:
382     * $notifications = array(
383     *     array('This is a success message', true),
384     *     array('This is a failure message', false),
385     * );
386     *
387     * @param array $notifications
388     * @return string
389     */
390    public function notifications(array $notifications = array()) {
391        if (count($notifications) === 0) {
392            // There are no notifications to render.
393            return '';
394        }
395        $html = html_writer::start_div('notifications');
396        foreach ($notifications as $notification) {
397            list($message, $notifysuccess) = $notification;
398            $html .= $this->notification($message, ($notifysuccess) ? 'notifysuccess' : 'notifyproblem');
399        }
400        $html .= html_writer::end_div();
401        return $html;
402    }
403}
Note: See TracBrowser for help on using the repository browser.