AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace mod_data\output;use templatable;use renderable;use mod_data\manager;use moodle_url;use texteditor;/*** Renderable class for template editor.** @package mod_data* @copyright 2022 Ferran Recio <ferran@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class template_editor implements templatable, renderable {/** @var manager manager instance. */private $manager;/** @var string the template name. */private $templatename;/*** The class constructor.** @param manager $manager the activity instance manager* @param string $templatename the template to edit*/public function __construct(manager $manager, string $templatename) {$this->manager = $manager;$this->templatename = $templatename;}/*** Export the data for the mustache template.** @param \renderer_base $output renderer to be used to render the action bar elements.* @return array*/public function export_for_template(\renderer_base $output): array {$instance = $this->manager->get_instance();$cm = $this->manager->get_coursemodule();$data = ['title' => get_string('header' . $this->templatename, 'data'),'sesskey' => sesskey(),'disableeditor' => true,'url' => new moodle_url('/mod/data/templates.php', ['id' => $cm->id, 'mode' => $this->templatename]),];// Determine whether to use HTML editors.$usehtmleditor = false;$disableeditor = false;if (($this->templatename !== 'csstemplate') && ($this->templatename !== 'jstemplate')) {$usehtmleditor = data_get_config($instance, "editor_{$this->templatename}", true);$disableeditor = true;}$data['usehtmleditor'] = $usehtmleditor;// Some templates, like CSS, cannot enable the wysiwyg editor.$data['disableeditor'] = $disableeditor;$tools = new template_editor_tools($this->manager, $this->templatename);$data['toolbar'] = $tools->export_for_template($output);$data['editors'] = $this->get_editors_data($usehtmleditor);return $data;}/*** Get the editors data.** @param bool $usehtmleditor if the user wants wysiwyg editor or not* @return array editors data*/private function get_editors_data(bool $usehtmleditor): array {global $PAGE;$result = [];$manager = $this->manager;$instance = $manager->get_instance();// Setup editor.editors_head_setup();$PAGE->requires->js_call_amd('mod_data/templateseditor','init',['d' => $instance->id, 'mode' => $this->templatename]);$format = FORMAT_PLAIN;if ($usehtmleditor) {$format = FORMAT_HTML;}$editor = editors_get_preferred_editor($format);// Add editors.if ($this->templatename === 'listtemplate') {$template = $manager->get_template('listtemplateheader');$result[] = $this->generate_editor_data($editor,'header','listtemplateheader',$template->get_template_content());$maineditorname = 'multientry';} else {$maineditorname = $this->templatename;}$template = $manager->get_template($this->templatename);$result[] = $this->generate_editor_data($editor,$maineditorname,$this->templatename,$template->get_template_content());if ($this->templatename === 'listtemplate') {$template = $manager->get_template('listtemplatefooter');$result[] = $this->generate_editor_data($editor,'footer','listtemplatefooter',$template->get_template_content());}if ($this->templatename === 'rsstemplate') {$template = $manager->get_template('rsstitletemplate');$result[] = $this->generate_editor_data($editor,'rsstitletemplate','rsstitletemplate',$template->get_template_content());}return $result;}/*** Generate a single editor data.** @param texteditor $editor the editor object* @param string $name the editor name* @param string $fieldname the field name* @param string|null $value the current value* @return array the editor data*/private function generate_editor_data(texteditor $editor,string $name,string $fieldname,?string $value): array {$options = ['trusttext' => false,'forcehttps' => false,'subdirs' => false,'maxfiles' => 0,'maxbytes' => 0,'changeformat' => 0,'noclean' => false,];$result = ['name' => get_string($name, 'data'),'fieldname' => $fieldname,'value' => $value,];$editor->set_text($value);$editor->use_editor($fieldname, $options);return $result;}}