Rev 1 | AutorÃa | Comparar con el anterior | 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/>.
/**
* This script allows a teacher to create, edit and delete question categories.
*
* @package qbank_managecategories
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
* @author 2021, Guillermo Gomez Arias <guillermogomez@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->dirroot . '/question/editlib.php');
use core_question\output\qbank_actionbar;
use core_question\category_manager;
use qbank_managecategories\form\question_move_form;
use qbank_managecategories\helper;
use qbank_managecategories\output\categories;
use qbank_managecategories\output\categories_header;
use qbank_managecategories\question_categories;
require_login();
core_question\local\bank\helper::require_plugin_enabled(helper::PLUGINNAME);
// Since Moodle 5.0 any request with the courseid parameter is deprecated and will redirect to the banks management page.
if ($courseid = optional_param('courseid', 0, PARAM_INT)) {
redirect(new moodle_url('/question/banks.php', ['courseid' => $courseid]));
}
list($thispageurl, $contexts, $cmid, $cm, $module, $pagevars) =
question_edit_setup('categories', '/question/bank/managecategories/category.php');
$thiscontext = context_module::instance($cmid)->id;
$todelete = optional_param('delete', 0, PARAM_INT); // The ID of a category to delete.
$PAGE->set_url($thispageurl);
$PAGE->add_body_class('limitedwidth');
$manager = new category_manager($thispageurl);
if ($todelete) {
if (!$category = $DB->get_record("question_categories", ["id" => $todelete])) {
throw new moodle_exception('nocate', 'question', $thispageurl->out(), $todelete);
}
helper::question_remove_stale_questions_from_category($todelete);
$questionstomove = count($manager->get_real_question_ids_in_category($todelete));
// Second pass, if we still have questions to move, setup the form.
if ($questionstomove) {
$categorycontext = context::instance_by_id($category->contextid);
$moveform = new question_move_form($thispageurl,
['contexts' => [$categorycontext], 'currentcat' => "$todelete"]);
if ($moveform->is_cancelled()) {
$thispageurl->remove_all_params();
if (!is_null($cmid)) {
$thispageurl->param('cmid', $cmid);
} else {
$thispageurl->param('courseid', $courseid);
}
redirect($thispageurl);
} else if ($formdata = $moveform->get_data()) {
list($tocategoryid, $tocontextid) = explode(',', $formdata->category);
$manager->move_questions_and_delete_category($formdata->delete, $tocategoryid);
$thispageurl->remove_params('cat', 'category');
redirect($thispageurl);
}
}
} else {
$questionstomove = 0;
}
if ((!empty($todelete) && (!$questionstomove) && confirm_sesskey())) {
$manager->delete_category($todelete);// Delete the category now no questions to move.
$thispageurl->remove_params('cat', 'category');
redirect($thispageurl);
}
$PAGE->set_title(get_string('editcategories', 'question'));
$PAGE->set_heading($COURSE->fullname);
$PAGE->activityheader->disable();
// Print horizontal nav if needed.
$renderer = $PAGE->get_renderer('core_question', 'bank');
echo $OUTPUT->header();
$qbankaction = new \core_question\output\qbank_action_menu($thispageurl);
echo $renderer->render($qbankaction);
if ($questionstomove) {
$vars = new stdClass();
$vars->name = $category->name;
$vars->count = $questionstomove;
echo $OUTPUT->box(get_string('categorymove', 'question', $vars), 'generalbox boxaligncenter');
$moveform->display();
} else {
// Get module contexts we have capabilities to manage.
$contextswithcaps = $contexts->having_one_edit_tab_cap('categories');
$modcontexts = array_filter($contextswithcaps, static fn ($context) => $context->contextlevel === CONTEXT_MODULE);
// Display the user interface.
$questioncategories = new question_categories(
$thispageurl,
$modcontexts,
$cmid,
$courseid,
$thiscontext,
);
$PAGE->requires->js_call_amd('qbank_managecategories/categorymanager', 'init'); // Load reactive module.
echo $OUTPUT->render(new categories_header($questioncategories));
echo $OUTPUT->render(new categories($questioncategories));
}
echo $OUTPUT->footer();