MDL-26869 admin: Added page to view admin categories and included in navigation with...
authorSam Hemelryk <sam@moodle.com>
Wed, 5 Oct 2011 22:58:22 +0000 (11:58 +1300)
committerSam Hemelryk <sam@moodle.com>
Mon, 2 Jan 2012 20:39:10 +0000 (09:39 +1300)
admin/category.php [new file with mode: 0644]
admin/settings.php
admin/settings/appearance.php
lang/en/admin.php
lang/en/error.php
lib/navigationlib.php

diff --git a/admin/category.php b/admin/category.php
new file mode 100644 (file)
index 0000000..f9cd940
--- /dev/null
@@ -0,0 +1,160 @@
+<?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 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
index ddccf31..3344f35 100644 (file)
@@ -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);
index d5d7b14..7bc3b58 100644 (file)
@@ -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);
index f648a3d..d525c59 100644 (file)
@@ -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';
index cf21dec..ee10b9b 100644 (file)
@@ -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.';
index 121b432..2ab7dde 100644 (file)
@@ -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