MDL-53254 tags: tag collections inplace editable
[moodle.git] / tag / classes / collections_table.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  * Contains class core_tag_collections_table
19  *
20  * @package   core_tag
21  * @copyright 2015 Marina Glancy
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * Table with the list of tag collections for "Manage tags" page.
29  *
30  * @package   core_tag
31  * @copyright 2015 Marina Glancy
32  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33  */
34 class core_tag_collections_table extends html_table {
36     /**
37      * Constructor
38      * @global \core_renderer $OUTPUT
39      * @param string|moodle_url $pageurl
40      */
41     public function __construct($pageurl) {
42         global $OUTPUT;
43         parent::__construct();
45         $this->attributes['class'] = 'generaltable tag-collections-table';
47         $this->head = array(
48             get_string('name'),
49             get_string('component', 'tag'),
50             get_string('tagareas', 'tag'),
51             get_string('searchable', 'tag') . $OUTPUT->help_icon('searchable', 'tag'),
52             ''
53         );
55         $this->data = array();
57         $tagcolls = core_tag_collection::get_collections();
58         $idx = 0;
59         foreach ($tagcolls as $tagcoll) {
60             $actions = '';
61             $name = core_tag_collection::display_name($tagcoll);
62             $url = new moodle_url($pageurl, array('sesskey' => sesskey(), 'tc' => $tagcoll->id));
63             if (!$tagcoll->isdefault) {
64                 // Move up.
65                 if ($idx > 1) {
66                     $url->param('action', 'collmoveup');
67                     $actions .= $OUTPUT->action_icon($url, new pix_icon('t/up', get_string('moveup')), null,
68                         array('class' => 'action-icon action_moveup'));
69                 }
70                 // Move down.
71                 if ($idx < count($tagcolls) - 1) {
72                     $url->param('action', 'collmovedown');
73                     $actions .= $OUTPUT->action_icon($url, new pix_icon('t/down', get_string('movedown')), null,
74                         array('class' => 'action-icon action_movedown'));
75                 }
76             }
77             if (!$tagcoll->isdefault && empty($tagcoll->component)) {
78                 // Delete.
79                 $url->param('action', 'colldelete');
80                 $actions .= $OUTPUT->action_icon('#', new pix_icon('t/delete', get_string('delete')), null,
81                         array('data-url' => $url, 'data-collname' => $name,
82                             'class' => 'action-icon action_delete'));
83             }
84             $component = '';
85             if ($tagcoll->component) {
86                 $component = ($tagcoll->component === 'core' || preg_match('/^core_/', $tagcoll->component)) ?
87                     get_string('coresystem') : get_string('pluginname', $tagcoll->component);
88             }
89             $allareas = core_tag_collection::get_areas_names(null, false);
90             $validareas = core_tag_collection::get_areas_names($tagcoll->id);
91             $areaslist = array_map(function($key) use ($allareas, $validareas) {
92                 return "<li data-areaid=\"{$key}\" " .
93                         (array_key_exists($key, $validareas) ? "" : "class=\"hidden\"") .
94                         ">{$allareas[$key]}</li>";
95             }, array_keys($allareas));
96             $displayname = new \core_tag\output\tagcollname($tagcoll);
97             $searchable = new \core_tag\output\tagcollsearchable($tagcoll);
98             $this->data[] = array(
99                 $displayname->render($OUTPUT),
100                 $component,
101                 "<ul data-collectionid=\"{$tagcoll->id}\">" . join('', $areaslist) . '</ul>',
102                 $searchable->render($OUTPUT),
103                 $actions);
104             $idx++;
105         }
107     }