See Release Notes
Long Term Support Release
<?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 core_tag_tag; use mod_data\manager; /** * Renderable class for template editor tools. * * @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_tools 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 { $tools = [ $this->get_field_tags($this->templatename),< $this->get_field_id_tags($this->templatename),> $this->get_field_info_tags($this->templatename),$this->get_action_tags($this->templatename), $this->get_other_tags($this->templatename), ]; $tools = array_filter($tools, static function ($value) { return !empty($value['tags']); }); return [ 'toolshelp' => $output->help_icon('availabletags', 'data'), 'hastools' => !empty($tools), 'tools' => array_values($tools), ]; } /** * Return the field template tags. * * @param string $templatename the template name * @return array|null array of tags. */ protected function get_field_tags(string $templatename): array { $name = get_string('fields', 'data'); if ($templatename == 'csstemplate' || $templatename == 'jstemplate') { return $this->get_optgroup_data($name, []); } $taglist = []; $fields = $this->manager->get_fields(); foreach ($fields as $field) { if ($field->type === 'unknown') { continue; } $fieldname = $field->get_name(); $taglist["[[$fieldname]]"] = $fieldname; }> $taglist['##otherfields##'] = get_string('otherfields', 'data');return $this->get_optgroup_data($name, $taglist); } /**< * Return the field IDs template tags.> * Return the field information template tags.* * @param string $templatename the template name * @return array|null array of tags. */< protected function get_field_id_tags(string $templatename): array { < $name = get_string('fieldids', 'data'); < if ($templatename != 'addtemplate') { < return $this->get_optgroup_data($name, []); < }> protected function get_field_info_tags(string $templatename): array { > $name = get_string('fieldsinformationtags', 'data');$taglist = [];< // Field IDs.$fields = $this->manager->get_fields(); foreach ($fields as $field) { if ($field->type === 'unknown') { continue; } $fieldname = $field->get_name();< $taglist["[[$fieldname#id]]"] = "$fieldname id";> if ($templatename == 'addtemplate') { > $taglist["[[$fieldname#id]]"] = get_string('fieldtagid', 'mod_data', $fieldname); > } > $taglist["[[$fieldname#name]]"] = get_string('fieldtagname', 'mod_data', $fieldname); > $taglist["[[$fieldname#description]]"] = get_string('fieldtagdescription', 'mod_data', $fieldname);} return $this->get_optgroup_data($name, $taglist); } /** * Return the field action tags. * * @param string $templatename the template name * @return array|null array of tags. */ protected function get_action_tags(string $templatename): array { $name = get_string('actions'); if ($templatename == 'addtemplate' || $templatename == 'asearchtemplate') { return $this->get_optgroup_data($name, []); } $taglist = [> '##actionsmenu##' => get_string('actionsmenu', 'data'),'##edit##' => get_string('edit', 'data'), '##delete##' => get_string('delete', 'data'), '##approve##' => get_string('approve', 'data'), '##disapprove##' => get_string('disapprove', 'data'),< '##actionsmenu##' => get_string('actionsmenu', 'data'),]; if ($templatename != 'rsstemplate') { $taglist['##export##'] = get_string('export', 'data'); } if ($templatename != 'singletemplate') { $taglist['##more##'] = get_string('more', 'data'); $taglist['##moreurl##'] = get_string('moreurl', 'data'); $taglist['##delcheck##'] = get_string('delcheck', 'data'); } return $this->get_optgroup_data($name, $taglist); } /** * Return the available other tags * * @param string $templatename the template name * @return array associative array of tags => tag name */ protected function get_other_tags(string $templatename): array { $name = get_string('other', 'data'); $taglist = []; if ($templatename == 'asearchtemplate') { $taglist['##firstname##'] = get_string('firstname'); $taglist['##lastname##'] = get_string('lastname'); return $this->get_optgroup_data($name, $taglist); } if (core_tag_tag::is_enabled('mod_data', 'data_records')) { $taglist['##tags##'] = get_string('tags'); } if ($templatename == 'addtemplate') { return $this->get_optgroup_data($name, $taglist); } $taglist['##timeadded##'] = get_string('timeadded', 'data'); $taglist['##timemodified##'] = get_string('timemodified', 'data'); $taglist['##user##'] = get_string('user'); $taglist['##userpicture##'] = get_string('userpic'); $taglist['##approvalstatus##'] = get_string('approvalstatus', 'data'); $taglist['##id##'] = get_string('id', 'data'); if ($templatename == 'singletemplate') { return $this->get_optgroup_data($name, $taglist); } $taglist['##comments##'] = get_string('comments', 'data'); return $this->get_optgroup_data($name, $taglist); } /** * Generate a valid optgroup data. * * @param string $name the optgroup name * @param array $taglist the indexed array of taglists ($tag => $tagname) * @return array of optgroup data */ protected function get_optgroup_data (string $name, array $taglist): array { $tags = []; foreach ($taglist as $tag => $tagname) { $tags[] = [ 'tag' => "$tag", 'tagname' => $tagname . ' - ' . $tag, ]; } return [ 'name' => $name, 'tags' => $tags, ]; } }