You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
5.5 KiB
124 lines
5.5 KiB
<?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/>.
|
|
|
|
/**
|
|
* Page called by administrator to carry out admin functions from plugin settings page.
|
|
*
|
|
* @package format_tiles
|
|
* @copyright 2019 David Watson {@link http://evolutioncode.uk}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late
|
|
**/
|
|
|
|
require_once('../../../config.php');
|
|
|
|
global $PAGE, $DB;
|
|
|
|
require_login();
|
|
require_sesskey();
|
|
$context = context_system::instance();
|
|
require_capability('moodle/site:config', $context);
|
|
$sesskey = required_param('sesskey', PARAM_TEXT);
|
|
$action = required_param('action', PARAM_TEXT);
|
|
$pageurl = new moodle_url('/course/format/tiles/admintools.php', array('sesskey' => $sesskey, 'action' => $action));
|
|
$settingsurl = new moodle_url('/admin/settings.php', array('section' => 'formatsettingtiles'));
|
|
|
|
$PAGE->set_url($pageurl);
|
|
$PAGE->set_context($context);
|
|
$PAGE->set_heading(get_string('admintools', 'format_tiles'));
|
|
$PAGE->navbar->add(get_string('administrationsite'), new moodle_url('/admin/search.php'));
|
|
$PAGE->navbar->add(get_string('plugins', 'admin'), new moodle_url('/admin/category.php', array('category' => 'modules')));
|
|
$PAGE->navbar->add(get_string('courseformats'), new moodle_url('/admin/category.php', array('category' => 'formatsettings')));
|
|
$PAGE->navbar->add(get_string('pluginname', 'format_tiles'), $settingsurl);
|
|
$PAGE->navbar->add(get_string('admintools', 'format_tiles'));
|
|
|
|
if ($action === "resetcolours") {
|
|
$permittedcolours = permitted_colours();
|
|
if (count($permittedcolours) === 0) {
|
|
redirect(
|
|
$settingsurl,
|
|
get_string('novaliddefaultcolour', 'format_tiles'), null, \core\output\notification::NOTIFY_ERROR
|
|
);
|
|
}
|
|
// Prepare a "NOT IN" statement for the permitted colours, to find records which have other colours.
|
|
list($permittedcolourssql, $params) = $DB->get_in_or_equal($permittedcolours, SQL_PARAMS_NAMED, 'param', false);
|
|
|
|
if (!optional_param('sure', 0, PARAM_INT)) {
|
|
// User has not said they are sure yet so count how many courses are affected and offer user chance to confirm.
|
|
$requiredchangecount = $DB->count_records_sql(
|
|
"SELECT COUNT(courseid) FROM {course_format_options}
|
|
WHERE format = 'tiles' AND name = 'basecolour'
|
|
AND value " . $permittedcolourssql,
|
|
$params
|
|
);
|
|
|
|
if ($requiredchangecount === 0) {
|
|
redirect($settingsurl, get_string('allcoursescomplypalette', 'format_tiles'));
|
|
} else {
|
|
echo $OUTPUT->header();
|
|
echo html_writer::div(get_string('sureresetcolours', 'format_tiles', $requiredchangecount), 'mb-3 mt-3');
|
|
$pageurl->param('sure', '1');
|
|
echo html_writer::link($pageurl, get_string('resetcolours', 'format_tiles'), array('class' => 'btn btn-danger'));
|
|
echo html_writer::link($settingsurl, get_string('cancel'), array('class' => 'btn btn-secondary'));
|
|
}
|
|
} else {
|
|
// User has said they are sure so go ahead and reset.
|
|
$defaultvalue = get_config('format_tiles', 'tilecolour1');
|
|
|
|
// Validate our default value before we apply it to multiple courses.
|
|
if (!$defaultvalue || strlen($defaultvalue) > 7 || substr($defaultvalue, 0, 1) !== "#"
|
|
|| !ctype_xdigit(substr($defaultvalue, 1)) || hexdec($defaultvalue) === 0) {
|
|
redirect(
|
|
$settingsurl,
|
|
get_string('novaliddefaultcolour', 'format_tiles'), null, \core\output\notification::NOTIFY_ERROR
|
|
);
|
|
}
|
|
// We don't want to trawl through and update each course record individually as it may take a while.
|
|
// Better to just reset the 'illegal' colours in the DB in one query, given that we know what the permitted colours are.
|
|
$sql = "UPDATE {course_format_options} SET value = :defaultvalue
|
|
WHERE format = 'tiles' AND name = 'basecolour' AND sectionid = '0'
|
|
AND value " . $permittedcolourssql;
|
|
$params['defaultvalue'] = $defaultvalue;
|
|
$DB->execute($sql, $params);
|
|
|
|
redirect(
|
|
$settingsurl,
|
|
get_string('tilecolourschanged', 'format_tiles'), null, \core\output\notification::NOTIFY_SUCCESS
|
|
);
|
|
}
|
|
}
|
|
echo $OUTPUT->footer();
|
|
|
|
/**
|
|
* Get an array of all the permitted colour hex values allowed by site admin in plugin settings.
|
|
* @package format_tiles
|
|
* @return array
|
|
* @throws dml_exception
|
|
*/
|
|
function permitted_colours() {
|
|
global $DB;
|
|
$records = $DB->get_records_select(
|
|
'config_plugins',
|
|
"plugin = 'format_tiles' AND " . $DB->sql_like('name', '?', false), array("tilecolour%")
|
|
);
|
|
$permittedcolours = [];
|
|
foreach ($records as $record) {
|
|
if (hexdec($record->value) !== 0) {
|
|
// If the colour is #000 or #000000 we ignore as this means admin has disabled the colour.
|
|
$permittedcolours[] = $record->value;
|
|
}
|
|
}
|
|
return $permittedcolours;
|
|
}
|