<?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) {
    print_error('sectionerror', 'admin', "{$CFG->wwwroot}/{$CFG->admin}/");
    die;
}
if (!$settingspage->check_access()) {
    print_error('accessdenied', 'admin');
    die;
}
/// WRITING SUBMITTED DATA (IF ANY) -------------------------------------------------------------------------------
$statusmsg = '';
$errormsg = '';
if ($data = data_submitted() and confirm_sesskey()) {
    if (admin_write_settings($data)) {
Exemple #2
0
/**
 * Initialise admin page - this function does require login and permission
 * checks specified in page definition.
 *
 * This function must be called on each admin page before other code.
 *
 * @global moodle_page $PAGE
 *
 * @param string $section name of page
 * @param string $extrabutton extra HTML that is added after the blocks editing on/off button.
 * @param array $extraurlparams an array paramname => paramvalue, or parameters that need to be
 *      added to the turn blocks editing on/off form, so this page reloads correctly.
 * @param string $actualurl if the actual page being viewed is not the normal one for this
 *      page (e.g. admin/roles/allow.php, instead of admin/roles/manage.php, you can pass the alternate URL here.
 * @param array $options Additional options that can be specified for page setup.
 *      pagelayout - This option can be used to set a specific pagelyaout, admin is default.
 */
function admin_externalpage_setup($section, $extrabutton = '', array $extraurlparams = null, $actualurl = '', array $options = array())
{
    global $CFG, $PAGE, $USER, $SITE, $OUTPUT;
    $PAGE->set_context(null);
    // hack - set context to something, by default to system context
    $site = get_site();
    require_login();
    if (!empty($options['pagelayout'])) {
        // A specific page layout has been requested.
        $PAGE->set_pagelayout($options['pagelayout']);
    } else {
        if ($section === 'upgradesettings') {
            $PAGE->set_pagelayout('maintenance');
        } else {
            $PAGE->set_pagelayout('admin');
        }
    }
    $adminroot = admin_get_root(false, false);
    // settings not required for external pages
    $extpage = $adminroot->locate($section, true);
    if (empty($extpage) or !$extpage instanceof admin_externalpage) {
        // The requested section isn't in the admin tree
        // It could be because the user has inadequate capapbilities or because the section doesn't exist
        if (!has_capability('moodle/site:config', context_system::instance())) {
            // The requested section could depend on a different capability
            // but most likely the user has inadequate capabilities
            print_error('accessdenied', 'admin');
        } else {
            print_error('sectionerror', 'admin', "{$CFG->wwwroot}/{$CFG->admin}/");
        }
    }
    // this eliminates our need to authenticate on the actual pages
    if (!$extpage->check_access()) {
        print_error('accessdenied', 'admin');
        die;
    }
    navigation_node::require_admin_tree();
    // $PAGE->set_extra_button($extrabutton); TODO
    if (!$actualurl) {
        $actualurl = $extpage->url;
    }
    $PAGE->set_url($actualurl, $extraurlparams);
    if (strpos($PAGE->pagetype, 'admin-') !== 0) {
        $PAGE->set_pagetype('admin-' . $PAGE->pagetype);
    }
    if (empty($SITE->fullname) || empty($SITE->shortname)) {
        // During initial install.
        $strinstallation = get_string('installation', 'install');
        $strsettings = get_string('settings');
        $PAGE->navbar->add($strsettings);
        $PAGE->set_title($strinstallation);
        $PAGE->set_heading($strinstallation);
        $PAGE->set_cacheable(false);
        return;
    }
    // Locate the current item on the navigation and make it active when found.
    $path = $extpage->path;
    $node = $PAGE->settingsnav;
    while ($node && count($path) > 0) {
        $node = $node->get(array_pop($path));
    }
    if ($node) {
        $node->make_active();
    }
    // Normal case.
    $adminediting = optional_param('adminedit', -1, PARAM_BOOL);
    if ($PAGE->user_allowed_editing() && $adminediting != -1) {
        $USER->editing = $adminediting;
    }
    $visiblepathtosection = array_reverse($extpage->visiblepath);
    if ($PAGE->user_allowed_editing()) {
        if ($PAGE->user_is_editing()) {
            $caption = get_string('blockseditoff');
            $url = new moodle_url($PAGE->url, array('adminedit' => '0', 'sesskey' => sesskey()));
        } else {
            $caption = get_string('blocksediton');
            $url = new moodle_url($PAGE->url, array('adminedit' => '1', 'sesskey' => sesskey()));
        }
        $PAGE->set_button($OUTPUT->single_button($url, $caption, 'get'));
    }
    $PAGE->set_title("{$SITE->shortname}: " . implode(": ", $visiblepathtosection));
    $PAGE->set_heading($SITE->fullname);
    // prevent caching in nav block
    $PAGE->navigation->clear_cache();
}