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 qbank_managecategories\output;use action_menu;use action_menu_link;use context;use core\plugininfo\qbank;use core_question\category_manager;use moodle_url;use pix_icon;use qbank_managecategories\helper;use renderable;use renderer_base;use stdClass;use templatable;/*** Output component for a single category** @package qbank_managecategories* @copyright 2024 onwards Catalyst IT EU {@link https://catalyst-eu.net}* @author Mark Johnson <mark.johnson@catalyst-eu.net>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class category implements renderable, templatable {/*** @var bool Can this category be reordered?*/protected bool $canreorder;/*** Constructor** @param stdClass $category The record of category we are rendering* @param context $context The context the category belongs to.* @param int $cmid The cmid of the course module context the category belongs to (optional).* @param int $courseid The course ID of the course context the category belongs to (optional).*/public function __construct(/** @var stdClass $category The record of category we are rendering */protected stdClass $category,/** @var context $context The context the category belongs to. */protected context $context,/** @var int $cmid The cmid of the course module context the category belongs to. */protected int $cmid = 0,/** @var int $courseid The course ID of the course context the category belongs to. */protected int $courseid = 0,) {$manager = new category_manager();$this->canreorder = !$manager->is_only_child_of_top_category_in_context($this->category->id);}/*** Get the canreorder flag.** @return bool*/public function get_canreorder(): bool {return $this->canreorder;}/*** Create the template data for a category, and call recursively for child categories.** @param renderer_base $output* @return array*/public function export_for_template(renderer_base $output): array {global $PAGE;$canmanagecategory = has_capability('moodle/question:managecategory', $this->context);$params = $PAGE->url->params();$cmid = $params['cmid'] ?? $this->cmid;$courseid = $params['courseid'] ?? $this->courseid;// Each section adds html to be displayed as part of this list item.$questionbankurl = new moodle_url('/question/edit.php', $params);$questionbankurl->param('cat', helper::combine_id_context($this->category));$categoryname = format_string($this->category->name, true, ['context' => $this->context, 'escape' => false]);$idnumber = null;if ($this->category->idnumber !== null && $this->category->idnumber !== '') {$idnumber = $this->category->idnumber;}$categorydesc = format_text($this->category->info,$this->category->infoformat,['context' => $this->context, 'noclean' => true],);$menu = new action_menu();$menu->attributes['draggable'] = 'false';$menu->set_kebab_trigger();$menu->prioritise = true;// Don't allow movement if only subcat.if ($canmanagecategory) {// This item display a modal for moving a category.// Move category modal.$menu->add(new action_menu_link(new \moodle_url('#'),new pix_icon('t/move',get_string('move'),'moodle',['class' => 'iconsmall',]),get_string('move'),false,['class' => 'show-when-movable', // Don't allow moving when this is the only category in the context.'data-categoryid' => $this->category->id,'data-actiontype' => 'move','data-contextid' => (int) $this->category->contextid,'data-categoryname' => $categoryname,'title' => get_string('movecategory', 'qbank_managecategories', $categoryname),]));$thiscontext = (int) $this->category->contextid;$editurl = new moodle_url('#');$menu->add(new action_menu_link($editurl,new pix_icon('t/edit', 'edit'),get_string('editsettings'),false,['data-action' => 'addeditcategory','data-actiontype' => 'edit','data-contextid' => $thiscontext,'data-categoryid' => $this->category->id,'data-cmid' => $cmid,'data-courseid' => $courseid,'data-questioncount' => $this->category->questioncount,]));}// Sets up export to XML link.if (qbank::is_plugin_enabled('qbank_exportquestions')) {$exporturl = new moodle_url('/question/bank/exportquestions/export.php',['cat' => helper::combine_id_context($this->category)]);if ($courseid !== 0) {$exporturl->param('courseid', $courseid);} else {$exporturl->param('cmid', $cmid);}$menu->add(new action_menu_link($exporturl,new pix_icon('t/download', 'download'),get_string('exportasxml', 'question'),false,));}// The delete action which should be last.if ($canmanagecategory) {// Sets up delete link.$deleteurl = new moodle_url('/question/bank/managecategories/category.php',['delete' => $this->category->id, 'sesskey' => sesskey()]);if ($courseid !== 0) {$deleteurl->param('courseid', $courseid);} else {$deleteurl->param('cmid', $cmid);}$menu->add(new action_menu_link($deleteurl,new pix_icon('t/delete', 'delete'),get_string('delete'),false,['class' => 'text-danger show-when-movable', // Don't allow deletion when this is the only category in context.'data-confirmation' => 'modal','data-confirmation-type' => 'delete','data-confirmation-title-str' => json_encode(['delete', 'core']),'data-confirmation-yes-button-str' => json_encode(['delete', 'core']),'data-confirmation-content-str' => json_encode(['confirmdelete','qbank_managecategories',$this->category->name,]),],));}$children = [];if (!empty($this->category->children)) {foreach ($this->category->children as $child) {$childcategory = new category($child, $this->context);$children[] = $childcategory->export_for_template($output);}}$itemdata = ['categoryid' => $this->category->id,'contextid' => $this->category->contextid,'questionbankurl' => $questionbankurl->out(false),'categoryname' => $categoryname,'idnumber' => $idnumber,'questioncount' => $this->category->questioncount,'categorydesc' => $categorydesc,'editactionmenu' => $menu->export_for_template($output),'draghandle' => $canmanagecategory && $this->canreorder,'haschildren' => !empty($children),'children' => $children,'parent' => $this->category->parent,'sortorder' => $this->category->sortorder,'newchildtooltip' => get_string('newchild', 'qbank_managecategories', $categoryname),];return $itemdata;}}