<?php
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
$section = required_param('section', PARAM_SAFEDIR);
$return = optional_param('return','', PARAM_ALPHA);
$adminediting = optional_param('adminedit', -1, PARAM_BOOL);
/// no guest autologin
require_login(0, false);
$PAGE->set_context(context_system::instance());
$PAGE->set_url('/admin/settings.php', array('section' => $section));
$PAGE->set_pagetype('admin-setting-' . $section);
$PAGE->set_pagelayout('admin');
$PAGE->navigation->clear_cache();
navigation_node::require_admin_tree();
$adminroot = admin_get_root(); // need all settings
$settingspage = $adminroot->locate($section, true);
if (empty($settingspage) or !($settingspage instanceof admin_settingpage)) {
if (moodle_needs_upgrading()) {
redirect(new moodle_url('/admin/index.php'));
} else {
< print_error('sectionerror', 'admin', "$CFG->wwwroot/$CFG->admin/");
> throw new \moodle_exception('sectionerror', 'admin', "$CFG->wwwroot/$CFG->admin/");
}
die;
}
if (!($settingspage->check_access())) {
< print_error('accessdenied', 'admin');
> throw new \moodle_exception('accessdenied', 'admin');
die;
}
> // If the context in the admin_settingpage object is explicitly defined and it is not system, reset the current
/// WRITING SUBMITTED DATA (IF ANY) -------------------------------------------------------------------------------
> // page context and use that one instead. This ensures that the proper navigation is displayed and highlighted.
> if ($settingspage->context && !$settingspage->context instanceof \context_system) {
$statusmsg = '';
> $PAGE->set_context($settingspage->context);
$errormsg = '';
> }
>
// Form is submitted with changed settings. Do not want to execute when modifying a block.
> $hassiteconfig = has_capability('moodle/site:config', context_system::instance());
if ($data = data_submitted() and confirm_sesskey() and isset($data->action) and $data->action == 'save-settings') {
> // Display the admin search input element in the page header if the user has the capability to change the site
> // configuration and the current page context is system.
$count = admin_write_settings($data);
> if ($hassiteconfig && $PAGE->context instanceof \context_system) {
// Regardless of whether any setting change was written (a positive count), check validation errors for those that didn't.
> $PAGE->add_header_action($OUTPUT->render_from_template('core_admin/header_search_input', [
if (empty($adminroot->errors)) {
> 'action' => new moodle_url('/admin/search.php'),
// No errors. Did we change any setting? If so, then redirect with success.
> ]));
if ($count) {
> }
redirect($PAGE->url, get_string('changessaved'), null, \core\output\notification::NOTIFY_SUCCESS);
>
}
// We didn't change a setting.
switch ($return) {
case 'site': redirect("$CFG->wwwroot/");
case 'admin': redirect("$CFG->wwwroot/$CFG->admin/");
}
redirect($PAGE->url);
} else {
$errormsg = get_string('errorwithsettings', 'admin');
$firsterror = reset($adminroot->errors);
}
$settingspage = $adminroot->locate($section, true);
}
if ($PAGE->user_allowed_editing() && $adminediting != -1) {
$USER->editing = $adminediting;
}
/// print header stuff ------------------------------------------------------------
if (empty($SITE->fullname)) {
$PAGE->set_title($settingspage->visiblename);
$PAGE->set_heading($settingspage->visiblename);
echo $OUTPUT->header();
echo $OUTPUT->box(get_string('configintrosite', 'admin'));
if ($errormsg !== '') {
echo $OUTPUT->notification($errormsg);
} else if ($statusmsg !== '') {
echo $OUTPUT->notification($statusmsg, 'notifysuccess');
}
// ---------------------------------------------------------------------------------------------------------------
$pageparams = $PAGE->url->params();
$context = [
'actionurl' => $PAGE->url->out(false),
'params' => array_map(function($param) use ($pageparams) {
return [
'name' => $param,
'value' => $pageparams[$param]
];
}, array_keys($pageparams)),
'sesskey' => sesskey(),
'return' => $return,
'title' => null,
'settings' => $settingspage->output_html(),
'showsave' => true
];
echo $OUTPUT->render_from_template('core_admin/settings', $context);
} else {
< if ($PAGE->user_allowed_editing()) {
> if ($PAGE->user_allowed_editing() && !$PAGE->theme->haseditswitch) {
$url = clone($PAGE->url);
if ($PAGE->user_is_editing()) {
$caption = get_string('blockseditoff');
$url->param('adminedit', 'off');
} else {
$caption = get_string('blocksediton');
$url->param('adminedit', 'on');
}
$buttons = $OUTPUT->single_button($url, $caption, 'get');
$PAGE->set_button($buttons);
}
< $visiblepathtosection = array_reverse($settingspage->visiblepath);
<
< $PAGE->set_title("$SITE->shortname: " . implode(": ",$visiblepathtosection));
> $PAGE->set_title(implode(moodle_page::TITLE_SEPARATOR, $settingspage->visiblepath));
$PAGE->set_heading($SITE->fullname);
echo $OUTPUT->header();
if ($errormsg !== '') {
echo $OUTPUT->notification($errormsg);
} else if ($statusmsg !== '') {
echo $OUTPUT->notification($statusmsg, 'notifysuccess');
}
// ---------------------------------------------------------------------------------------------------------------
$pageparams = $PAGE->url->params();
$context = [
'actionurl' => $PAGE->url->out(false),
'params' => array_map(function($param) use ($pageparams) {
return [
'name' => $param,
'value' => $pageparams[$param]
];
}, array_keys($pageparams)),
'sesskey' => sesskey(),
'return' => $return,
'title' => $settingspage->visiblename,
'settings' => $settingspage->output_html(),
'showsave' => $settingspage->show_save()
];
echo $OUTPUT->render_from_template('core_admin/settings', $context);
}
< $PAGE->requires->yui_module('moodle-core-formchangechecker',
< 'M.core_formchangechecker.init',
< array(array(
< 'formid' => 'adminsettings'
< ))
< );
< $PAGE->requires->string_for_js('changesmadereallygoaway', 'moodle');
> // Add the form change checker.
> $PAGE->requires->js_call_amd('core_form/changechecker', 'watchFormById', ['adminsettings']);
if ($settingspage->has_dependencies()) {
$opts = [
'dependencies' => $settingspage->get_dependencies_for_javascript()
];
$PAGE->requires->js_call_amd('core/showhidesettings', 'init', [$opts]);
}
echo $OUTPUT->footer();