MDL-44834 editor_atto: Delegate change event to one editor
[moodle.git] / lib / editor / atto / adminlib.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  * Atto admin setting stuff.
19  *
20  * @package   editor_atto
21  * @copyright 2014 Jerome Mouneyrac
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
28 /**
29  * Special class for Atto plugins administration.
30  *
31  * @package   editor_atto
32  * @copyright 2014 Jerome Mouneyrac
33  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
34  */
35 class atto_subplugins_settings extends admin_setting {
37     /**
38      * Constructor.
39      */
40     public function __construct() {
41         $this->nosave = true;
42         parent::__construct('attosubplugins', get_string('subplugintype_atto_plural', 'editor_atto'), '', '');
43     }
45     /**
46      * Returns current value of this setting.
47      * Always returns true, does nothing.
48      *
49      * @return true
50      */
51     public function get_setting() {
52         return true;
53     }
55     /**
56      * Returns default setting if exists.
57      * Always returns true, does nothing.
58      *
59      * @return true
60      */
61     public function get_defaultsetting() {
62         return true;
63     }
65     /**
66      * Store new setting.
67      * Always returns '', does not write anything.
68      *
69      * @param string $data string or array, must not be NULL.
70      * @return string Always returns ''.
71      */
72     public function write_setting($data) {
73         // Do not write any setting.
74         return '';
75     }
77     /**
78      * Checks if $query is one of the available subplugins.
79      *
80      * @param string $query The string to search for.
81      * @return bool Returns true if found, false if not.
82      */
83     public function is_related($query) {
84         if (parent::is_related($query)) {
85             return true;
86         }
88         $subplugins = core_component::get_plugin_list('atto');
89         foreach ($subplugins as $name => $dir) {
90             if (stripos($name, $query) !== false) {
91                 return true;
92             }
94             $namestr = get_string('pluginname', 'atto_' . $name);
95             if (strpos(core_text::strtolower($namestr), core_text::strtolower($query)) !== false) {
96                 return true;
97             }
98         }
99         return false;
100     }
102     /**
103      * Builds the XHTML to display the control.
104      *
105      * @param mixed $data Unused.
106      * @param string $query
107      * @return string highlight.
108      */
109     public function output_html($data, $query = '') {
110         global $CFG, $OUTPUT, $PAGE;
111         require_once($CFG->libdir . "/editorlib.php");
112         require_once(__DIR__ . '/lib.php');
113         $pluginmanager = core_plugin_manager::instance();
115         // Display strings.
116         $strtoolbarconfig = get_string('toolbarconfig', 'editor_atto');
117         $strname = get_string('name');
118         $strsettings = get_string('settings');
119         $struninstall = get_string('uninstallplugin', 'core_admin');
120         $strversion = get_string('version');
122         $subplugins = core_component::get_plugin_list('atto');
124         $return = $OUTPUT->heading(get_string('subplugintype_atto_plural', 'editor_atto'), 3, 'main', true);
125         $return .= $OUTPUT->box_start('generalbox attosubplugins');
127         $table = new html_table();
128         $table->head  = array($strname, $strversion, $strtoolbarconfig, $strsettings, $struninstall);
129         $table->align = array('left', 'left', 'center', 'center', 'center', 'center');
130         $table->data  = array();
131         $table->attributes['class'] = 'admintable generaltable';
133         $corepluginicons = array(
134             'accessibilitychecker' => $OUTPUT->pix_url('e/visual_blocks', 'core'),
135             'accessibilityhelper' => $OUTPUT->pix_url('e/visual_aid'),
136             'align' => array(
137                 $OUTPUT->pix_url('e/align_left', 'core'),
138                 $OUTPUT->pix_url('e/align_center', 'core'), $OUTPUT->pix_url('e/align_right', 'core')
139             ),
140             'backcolor' => $OUTPUT->pix_url('e/text_highlight', 'core'),
141             'bold' => $OUTPUT->pix_url('e/bold', 'core'),
142             'charmap' => $OUTPUT->pix_url('e/special_character', 'core'),
143             'clear' => $OUTPUT->pix_url('e/clear_formatting', 'core'),
144             'emoticon' => $OUTPUT->pix_url('e/emoticons', 'core'),
145             'equation' => $OUTPUT->pix_url('e/math', 'core'),
146             'fontcolor' => $OUTPUT->pix_url('e/text_color', 'core'),
147             'html' => $OUTPUT->pix_url('e/source_code', 'core'),
148             'image' => $OUTPUT->pix_url('e/insert_edit_image', 'core'),
149             'indent' => array(
150                 $OUTPUT->pix_url('e/increase_indent', 'core'),
151                 $OUTPUT->pix_url('e/decrease_indent', 'core'),
152             ),
153             'italic' => $OUTPUT->pix_url('e/italic', 'core'),
154             'link' => $OUTPUT->pix_url('e/insert_edit_link', 'core'),
155             'managefiles' => $OUTPUT->pix_url('e/manage_files', 'core'),
156             'media' => $OUTPUT->pix_url('e/insert_edit_video', 'core'),
157             'orderedlist' => $OUTPUT->pix_url('e/numbered_list', 'core'),
158             'rtl' => array($OUTPUT->pix_url('e/left_to_right', 'core'),
159                 $OUTPUT->pix_url('e/right_to_left', 'core')),
160             'strike' => $OUTPUT->pix_url('e/strikethrough', 'core'),
161             'subscript' => $OUTPUT->pix_url('e/subscript', 'core'),
162             'superscript' => $OUTPUT->pix_url('e/superscript', 'core'),
163             'table' => $OUTPUT->pix_url('e/table', 'core'),
164             'title' => $OUTPUT->pix_url('e/styleprops', 'core'),
165             'underline' => $OUTPUT->pix_url('e/underline', 'core'),
166             'undo' => array($OUTPUT->pix_url('e/undo', 'core'), $OUTPUT->pix_url('e/redo', 'core')),
167             'unlink' => $OUTPUT->pix_url('e/remove_link', 'core'),
168             'unorderedlist' => $OUTPUT->pix_url('e/bullet_list', 'core')
169         );
171         // Iterate through subplugins.
172         foreach ($subplugins as $name => $dir) {
173             $namestr = get_string('pluginname', 'atto_' . $name);
174             $version = get_config('atto_' . $name, 'version');
175             if ($version === false) {
176                 $version = '';
177             }
178             $plugininfo = $pluginmanager->get_plugin_info('atto_' . $name);
180             $toolbarconfig = $name;
182             $displayname = $namestr;
184             // Check if there is a pix folder in the atto plugin.
185             if ($PAGE->theme->resolve_image_location('icon', 'atto_' . $name, false)) {
186                 $icon = $OUTPUT->pix_icon('icon', '', 'atto_' . $name, array('class' => 'icon pluginicon'));
187             } else {
188                 // Attempt to find out the icons for core atto plugins.
189                 if (array_key_exists($name, $corepluginicons)) {
190                     // It's a core plugin.
191                     $icons = array();
192                     if (!is_array($corepluginicons[$name])) {
193                         $icons[] = $corepluginicons[$name];
194                     } else {
195                         $icons = $corepluginicons[$name];
196                     }
197                     $icon = '';
198                     foreach ($icons as $anicon) {
199                         $icon .= html_writer::empty_tag('img', array('src' => $anicon,
200                             "class" => "pluginicon", "alt" => $displayname));
201                     }
202                 } else {
203                     // No icon found.
204                     $icon = $OUTPUT->pix_icon('spacer', '', 'moodle', array('class' => 'icon pluginicon noicon'));
205                 }
206             }
207             $displayname  = $icon . ' ' . $displayname;
209             // Add settings link.
210             if (!$version) {
211                 $settings = '';
212             } else if ($url = $plugininfo->get_settings_url()) {
213                 $settings = html_writer::link($url, $strsettings);
214             } else {
215                 $settings = '';
216             }
218             // Add uninstall info.
219             $uninstall = '';
220             if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('atto_' . $name, 'manage')) {
221                 $uninstall = html_writer::link($uninstallurl, $struninstall);
222             }
224             // Add a row to the table.
225             $row = new html_table_row(array($displayname, $version, $toolbarconfig, $settings, $uninstall));
226             $table->data[] = $row;
227         }
228         $return .= html_writer::table($table);
229         $return .= html_writer::tag('p', get_string('tablenosave', 'admin'));
230         $return .= $OUTPUT->box_end();
231         return highlight($query, $return);
232     }