░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/var/www/moodle/public/question/bank/managecategories/classes/output
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: category.php
<?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; } }
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 categories.php
PHP
3.2 KB
2026-02-11 01:44
EDIT
📄 categories_header.php
PHP
2.6 KB
2026-02-11 01:44
EDIT
📄 category.php
PHP
8.9 KB
2026-02-11 01:44
EDIT