From 83f78f8dac061ed3d861daf0b127dce4387ac44b Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Thu, 6 Oct 2011 11:58:22 +1300 Subject: [PATCH] MDL-26869 admin: Added page to view admin categories and included in navigation with a new setting --- admin/category.php | 160 ++++++++++++++++++++++++++++++++++ admin/settings.php | 2 - admin/settings/appearance.php | 1 + lang/en/admin.php | 3 + lang/en/error.php | 1 + lib/navigationlib.php | 6 +- 6 files changed, 169 insertions(+), 4 deletions(-) create mode 100644 admin/category.php diff --git a/admin/category.php b/admin/category.php new file mode 100644 index 00000000000..f9cd940e9ff --- /dev/null +++ b/admin/category.php @@ -0,0 +1,160 @@ +. + +/** + * This file is used to display a categories sub categories, external pages, and settings. + * + * @since 2.3 + * @package admin + * @copyright 2011 Sam Hemelryk + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once('../config.php'); +require_once($CFG->libdir.'/adminlib.php'); + +$category = required_param('category', 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(get_context_instance(CONTEXT_SYSTEM)); +$PAGE->set_url('/admin/category.php', array('category' => $category)); +$PAGE->set_pagetype('admin-setting-' . $category); +$PAGE->set_pagelayout('admin'); +$PAGE->navigation->clear_cache(); + +$adminroot = admin_get_root(); // need all settings +$settingspage = $adminroot->locate($category, true); + +if (empty($settingspage) or !($settingspage instanceof admin_category)) { + print_error('categoryerror', 'admin', "$CFG->wwwroot/$CFG->admin/"); +} + +if (!($settingspage->check_access())) { + print_error('accessdenied', 'admin'); +} + + +$statusmsg = ''; +$errormsg = ''; + +if ($data = data_submitted() and confirm_sesskey()) { + if (admin_write_settings($data)) { + $statusmsg = get_string('changessaved'); + } + + if (empty($adminroot->errors)) { + switch ($return) { + case 'site': redirect("$CFG->wwwroot/"); + case 'admin': redirect("$CFG->wwwroot/$CFG->admin/"); + } + } else { + $errormsg = get_string('errorwithsettings', 'admin'); + $firsterror = reset($adminroot->errors); + } + $adminroot = admin_get_root(true); //reload tree + $settingspage = $adminroot->locate($category, true); +} + +if ($PAGE->user_allowed_editing() && $adminediting != -1) { + $USER->editing = $adminediting; +} + +if ($PAGE->user_allowed_editing()) { + $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'); +} + +$savebutton = false; +$outputhtml = ''; +foreach ($settingspage->children as $childpage) { + if ($childpage->is_hidden()) { + continue; + } + if ($childpage instanceof admin_externalpage) { + $outputhtml .= $OUTPUT->heading(html_writer::link($childpage->url, $childpage->visiblename), 3); + } else if ($childpage instanceof admin_settingpage) { + $outputhtml .= $OUTPUT->heading(html_writer::link(new moodle_url('/'.$CFG->admin.'/settings.php', array('section' => $childpage->name)), $childpage->visiblename), 3); + } else if ($childpage instanceof admin_category) { + $outputhtml .= $OUTPUT->heading(html_writer::link(new moodle_url('/'.$CFG->admin.'/category.php', array('category' => $childpage->name)), get_string('admincategory', 'admin', $childpage->visiblename)), 3); + } else { + continue; + } + if (!empty($childpage->settings)) { + $outputhtml .= html_writer::start_tag('fieldset', array('class' => 'adminsettings')); + foreach ($childpage->settings as $setting) { + if (empty($setting->nosave)) { + $savebutton = true; + } + $fullname = $setting->get_full_name(); + if (array_key_exists($fullname, $adminroot->errors)) { + $data = $adminroot->errors[$fullname]->data; + } else { + $data = $setting->get_setting(); + } + $outputhtml .= html_writer::tag('div', '', array('class' => 'clearer')); + $outputhtml .= $setting->output_html($data); + } + $outputhtml .= html_writer::end_tag('fieldset'); + } +} +if ($savebutton) { + $outputhtml .= html_writer::start_tag('div', array('class' => 'form-buttons')); + $outputhtml .= html_writer::empty_tag('input', array('class' => 'form-submit', 'type' => 'submit', 'value' => get_string('savechanges','admin'))); + $outputhtml .= html_writer::end_tag('div'); +} + +$visiblepathtosection = array_reverse($settingspage->visiblepath); +$PAGE->set_title("$SITE->shortname: " . implode(": ",$visiblepathtosection)); +$PAGE->set_heading($SITE->fullname); +$PAGE->set_button($buttons); + +echo $OUTPUT->header(); + +if ($errormsg !== '') { + echo $OUTPUT->notification($errormsg); +} else if ($statusmsg !== '') { + echo $OUTPUT->notification($statusmsg, 'notifysuccess'); +} + +$path = array_reverse($settingspage->visiblepath); +if (is_array($path)) { + $visiblename = join(' / ', $path); +} else { + $visiblename = $path; +} +echo $OUTPUT->heading(get_string('admincategory', 'admin', $visiblename), 2); + +echo html_writer::start_tag('form', array('action' => '', 'method' => 'post', 'id' => 'adminsettings')); +echo html_writer::start_tag('div'); +echo html_writer::input_hidden_params(new moodle_url($PAGE->url, array('sesskey' => sesskey(), 'return' => $return))); +echo html_writer::end_tag('div'); +echo html_writer::start_tag('fieldset'); +echo html_writer::tag('div', '', array('class' => 'clearer')); +echo $outputhtml; +echo html_writer::end_tag('fieldset'); +echo html_writer::end_tag('form'); + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/admin/settings.php b/admin/settings.php index ddccf31804d..3344f354b87 100644 --- a/admin/settings.php +++ b/admin/settings.php @@ -32,7 +32,6 @@ if (!($settingspage->check_access())) { $statusmsg = ''; $errormsg = ''; -$focus = ''; if ($data = data_submitted() and confirm_sesskey()) { if (admin_write_settings($data)) { @@ -47,7 +46,6 @@ if ($data = data_submitted() and confirm_sesskey()) { } else { $errormsg = get_string('errorwithsettings', 'admin'); $firsterror = reset($adminroot->errors); - $focus = $firsterror->id; } $adminroot = admin_get_root(true); //reload tree $settingspage = $adminroot->locate($section, true); diff --git a/admin/settings/appearance.php b/admin/settings/appearance.php index d5d7b14995e..7bc3b58748f 100644 --- a/admin/settings/appearance.php +++ b/admin/settings/appearance.php @@ -101,6 +101,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page $temp->add(new admin_setting_configtext('navcourselimit',new lang_string('navcourselimit','admin'),new lang_string('confignavcourselimit', 'admin'),20,PARAM_INT)); $temp->add(new admin_setting_configcheckbox('navlinkcoursesections', new lang_string('navlinkcoursesections', 'admin'), new lang_string('navlinkcoursesections_help', 'admin'), 0)); $temp->add(new admin_setting_configcheckbox('usesitenameforsitepages', new lang_string('usesitenameforsitepages', 'admin'), new lang_string('configusesitenameforsitepages', 'admin'), 0)); + $temp->add(new admin_setting_configcheckbox('linkadmincategories', new lang_string('linkadmincategories', 'admin'), new lang_string('linkadmincategories_help', 'admin'), 0)); $temp->add(new admin_setting_configcheckbox('navadduserpostslinks', new lang_string('navadduserpostslinks', 'admin'), new lang_string('navadduserpostslinks_help', 'admin'), 1)); $ADMIN->add('appearance', $temp); diff --git a/lang/en/admin.php b/lang/en/admin.php index f648a3dbdd8..d525c5986da 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -34,6 +34,7 @@ $string['additionalhtmltopofbody'] = 'When BODY is opened'; $string['additionalhtmltopofbody_desc'] = 'Content here will be added in to every page immediately after the opening body tag.'; $string['additionalhtmlfooter'] = 'Before BODY is closed'; $string['additionalhtmlfooter_desc'] = 'Content here will be added in to every page right before the body tag is closed.'; +$string['admincategory'] = 'Category: {$a}'; $string['adminseesall'] = 'Admins see all'; $string['adminseesallevents'] = 'Administrators see all events'; $string['adminseesownevents'] = 'Administrators are just like other users'; @@ -601,6 +602,8 @@ $string['latinexcelexport'] = 'Excel encoding'; $string['legacyfilesinnewcourses'] = 'Legacy course files in new courses'; $string['legacyfilesinnewcourses_help'] = 'By default legacy course files areas are available only in upgraded courses. Please note some features like single activity backup/restore are not compatible with this settings.'; $string['licensesettings'] = 'Licence settings'; +$string['linkadmincategories'] = 'Link admin categories'; +$string['linkadmincategories_help'] = 'If enabled admin setting categories will be displayed as links in the navigation and will lead to the admin category pages.'; $string['loading'] = 'Loading'; $string['localetext'] = 'Sitewide locale'; $string['localstringcustomization'] = 'Local string customization'; diff --git a/lang/en/error.php b/lang/en/error.php index cf21dec507a..ee10b9bdc71 100644 --- a/lang/en/error.php +++ b/lang/en/error.php @@ -157,6 +157,7 @@ $string['cannotusepage2'] = 'Sorry, you may not use this page'; $string['cannotviewprofile'] = 'You cannot view the profile of this user'; $string['cannotviewreport'] = 'You cannot view this report'; $string['cannotwritefile'] = 'Cannot write to file ({$a})'; +$string['categoryerror'] = 'Category error'; $string['commentmisconf'] = 'Comment ID is misconfigured'; $string['componentisuptodate'] = 'Component is up-to-date'; $string['confirmsesskeybad'] = 'Sorry, but your session key could not be confirmed to carry out this action. This security feature prevents against accidental or malicious execution of important functions in your name. Please make sure you really wanted to execute this function.'; diff --git a/lib/navigationlib.php b/lib/navigationlib.php index 121b4329016..2ab7dde423b 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -1048,7 +1048,7 @@ class global_navigation extends navigation_node { $this->rootnodes['site'] = $this->add_course($SITE); $this->rootnodes['myprofile'] = $this->add(get_string('myprofile'), null, self::TYPE_USER, null, 'myprofile'); $this->rootnodes['mycourses'] = $this->add(get_string('mycourses'), null, self::TYPE_ROOTNODE, null, 'mycourses'); - $this->rootnodes['courses'] = $this->add(get_string('courses'), null, self::TYPE_ROOTNODE, null, 'courses'); + $this->rootnodes['courses'] = $this->add(get_string('courses'), new moodle_url('/course/index.php'), self::TYPE_ROOTNODE, null, 'courses'); $this->rootnodes['users'] = $this->add(get_string('users'), null, self::TYPE_ROOTNODE, null, 'users'); // Fetch all of the users courses. @@ -3000,9 +3000,11 @@ class settings_navigation extends navigation_node { $url = null; $icon = null; if ($adminbranch instanceof admin_settingpage) { - $url = new moodle_url('/admin/settings.php', array('section'=>$adminbranch->name)); + $url = new moodle_url('/'.$CFG->admin.'/settings.php', array('section'=>$adminbranch->name)); } else if ($adminbranch instanceof admin_externalpage) { $url = $adminbranch->url; + } else if (!empty($CFG->linkadmincategories) && $adminbranch instanceof admin_category) { + $url = new moodle_url('/'.$CFG->admin.'/category.php', array('category' => $adminbranch->name)); } // Add the branch -- 2.43.0