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;use context;use moodle_url;/*** Builds a tree for categories for rendering the category management page.** @package qbank_managecategories* @copyright 2024 Catalyst IT Europe Ltd.* @author Mark Johnson <mark.johnson@catalyst-eu.net>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class question_categories {/*** @var moodle_url Object representing url for this page*/public moodle_url $pageurl;/*** @var ?int cmid.*/public ?int $cmid;/*** @var ?int courseid.*/public ?int $courseid;/*** @var ?int The context ID of the current page.*/public ?int $contextid;/*** @var array An array containing a tree of categories for each context.*/public array $editlists;/*** Constructor.** @param moodle_url $pageurl base URL of the display categories page. Used for redirects.* @param context[] $contexts contexts where the current user can edit categories.* @param ?int $cmid course module id for the current page.* @param ?int $courseid course id for the current page.* @param ?int $thiscontext The context ID of the current page.*/public function __construct(moodle_url $pageurl,array $contexts,?int $cmid = null,?int $courseid = null,?int $thiscontext = null,) {global $DB;$this->cmid = $cmid;$this->courseid = $courseid;$this->pageurl = $pageurl;$this->contextid = $thiscontext;$contextids = array_map(fn($context) => $context->id, $contexts);[$insql, $params] = $DB->get_in_or_equal($contextids);$topcategories = $DB->get_records_select_menu('question_categories','parent = 0 AND contextid ' . $insql,$params,fields: 'contextid, id');foreach ($contexts as $context) {// We can only have categories in module context.if ($context->contextlevel !== CONTEXT_MODULE) {continue;}$items = helper::get_categories_for_contexts($context->id);// Create an ordered tree with children correctly nested under parents.foreach ($items as $item) {if (array_key_exists((int) $item->parent, $items)) {$item->parentitem = $items[$item->parent];$items[$item->parent]->children[$item->id] = $item;}}foreach ($items as $item) {if (isset($item->children)) {foreach ($item->children as $children) {unset($items[$children->id]);}}}$this->editlists[$context->id] = (object) ['items' => $items,'context' => $context,'categoryid' => $topcategories[$context->id],];}}}