diff --git a/admin/pagelib.php b/admin/pagelib.php index 971ae09d3d3..1dee158b54c 100644 --- a/admin/pagelib.php +++ b/admin/pagelib.php @@ -20,8 +20,11 @@ page_map_class(PAGE_ADMIN, 'page_admin'); class page_admin extends page_base { - var $section; + var $section = ''; var $visiblepathtosection; + var $extraurlparams = array(); + var $extrabutton = ''; + var $url = ''; // hack alert! // this function works around the inability to store the section name @@ -62,6 +65,9 @@ class page_admin extends page_base { function url_get_path() { global $CFG; + if (!empty($this->url)) { + return $this->url; + } $adminroot =& admin_get_root(false, false); //settings not required - only pages @@ -73,8 +79,29 @@ class page_admin extends page_base { } } + /** + * Use this to pass extra HTML that is added after the turn blocks editing on/off button. + * + * @param string $extrabutton HTML code. + */ + function set_extra_button($extrabutton) { + $this->extrabutton = $extrabutton; + } + + /** + * Use this to pass extra URL parameters that, for example, the blocks editing controls need to reload the current page accurately. + * + * @param array $extraurlparams paramname => value array. + */ + function set_extra_url_params($extraurlparams, $actualurl = '') { + $this->extraurlparams = $extraurlparams; + if (!empty($actualurl)) { + $this->url = $actualurl; + } + } + function url_get_parameters() { // only handles parameters relevant to the admin pagetype - return array('section' => (isset($this->section) ? $this->section : '')); + return array_merge($this->extraurlparams, array('section' => $this->section)); } function blocks_get_positions() { @@ -107,13 +134,19 @@ class page_admin extends page_base { // The search page currently doesn't handle block editing if ($this->section != 'search' and $this->user_allowed_editing()) { - $buttons = '
'; + $options = $this->url_get_parameters(); + if ($this->user_is_editing()) { + $caption = get_string('blockseditoff'); + $options['adminedit'] = 'off'; + } else { + $caption = get_string('blocksediton'); + $options['adminedit'] = 'on'; + } + $buttons = print_single_button($this->url_get_path(), $options, $caption, 'get', '', true); } else { $buttons = ' '; } + $buttons .= $this->extrabutton; $navlinks = array(); foreach ($this->visiblepathtosection as $element) { diff --git a/admin/report/unittest/index.php b/admin/report/unittest/index.php index 47a350f900f..53560ad65c4 100644 --- a/admin/report/unittest/index.php +++ b/admin/report/unittest/index.php @@ -29,7 +29,8 @@ $continuesetuptesttables = optional_param('continuesetuptesttables', false, PARA $droptesttables = optional_param('droptesttables', false, PARAM_BOOL); $testtablesok = optional_param('testtablesok', false, PARAM_BOOL); -admin_externalpage_setup('reportsimpletest'); +admin_externalpage_setup('reportsimpletest', '', array('showpasses' => $showpasses, + 'showsearch' => $showsearch, 'thorough' => $thorough)); admin_externalpage_print_header(); $langfile = 'simpletest'; diff --git a/admin/roles/allowassign.php b/admin/roles/allowassign.php index d0ced251dc4..81e6f83357d 100755 --- a/admin/roles/allowassign.php +++ b/admin/roles/allowassign.php @@ -76,7 +76,7 @@ } /// Display the editing form. - admin_externalpage_setup('defineroles'); + admin_externalpage_setup('defineroles', '', array(), $CFG->wwwroot . '/' . $CFG->admin . '/roles/allowassign.php'); admin_externalpage_print_header(); $currenttab='allowassign'; diff --git a/admin/roles/allowoverride.php b/admin/roles/allowoverride.php index 25272d650eb..1d1dd2fb395 100755 --- a/admin/roles/allowoverride.php +++ b/admin/roles/allowoverride.php @@ -74,7 +74,7 @@ } /// Display the editing form. - admin_externalpage_setup('defineroles'); + admin_externalpage_setup('defineroles', '', array(), $CFG->wwwroot . '/' . $CFG->admin . '/roles/allowoverride.php'); admin_externalpage_print_header(); $currenttab='allowoverride'; diff --git a/admin/roles/assign.php b/admin/roles/assign.php index 0b82a780909..b7ada55b3da 100755 --- a/admin/roles/assign.php +++ b/admin/roles/assign.php @@ -283,11 +283,11 @@ include_once($CFG->dirroot.'/user/tabs.php'); } else if ($context->contextlevel == CONTEXT_SYSTEM) { - admin_externalpage_setup('assignroles'); + admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid)); admin_externalpage_print_header(); } else if ($isfrontpage) { - admin_externalpage_setup('frontpageroles'); + admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid, 'roleid' => $roleid)); admin_externalpage_print_header(); $currenttab = 'assign'; include_once('tabs.php'); diff --git a/admin/roles/check.php b/admin/roles/check.php index 2589a91a1ab..abd55d84474 100755 --- a/admin/roles/check.php +++ b/admin/roles/check.php @@ -117,11 +117,11 @@ include_once($CFG->dirroot.'/user/tabs.php'); } else if ($context->contextlevel == CONTEXT_SYSTEM) { - admin_externalpage_setup('checkpermissions'); + admin_externalpage_setup('checkpermissions', '', array('contextid' => $contextid)); admin_externalpage_print_header(); } else if ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID) { - admin_externalpage_setup('frontpageroles'); + admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid), $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php'); admin_externalpage_print_header(); $currenttab = 'check'; include_once('tabs.php'); diff --git a/admin/roles/define.php b/admin/roles/define.php index 78be6bd9b09..7981b5f6d7d 100755 --- a/admin/roles/define.php +++ b/admin/roles/define.php @@ -65,7 +65,7 @@ $systemcontext = get_context_instance(CONTEXT_SYSTEM); require_login(); require_capability('moodle/role:manage', $systemcontext); - admin_externalpage_setup('defineroles'); + admin_externalpage_setup('defineroles', '', array($action, $roleid), $defineurl); /// Handle the cancel button. if (optional_param('cancel', false, PARAM_BOOL)) { diff --git a/admin/roles/override.php b/admin/roles/override.php index b6cdc99429f..d85cb30556f 100755 --- a/admin/roles/override.php +++ b/admin/roles/override.php @@ -165,7 +165,7 @@ include_once($CFG->dirroot.'/user/tabs.php'); } else if ($context->contextlevel==CONTEXT_COURSE and $context->instanceid == SITEID) { require_once($CFG->libdir.'/adminlib.php'); - admin_externalpage_setup('frontpageroles'); + admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid, 'roleid' => $roleid), $CFG->wwwroot . '/' . $CFG->admin . '/roles/override.php'); admin_externalpage_print_header(); $currenttab = 'override'; include_once('tabs.php'); diff --git a/course/category.php b/course/category.php index cfc5ae860a4..7473e75af59 100644 --- a/course/category.php +++ b/course/category.php @@ -88,17 +88,13 @@ // Integrate into the admin tree only if the user can edit categories at the top level, // otherwise the admin block does not appear to this user, and you get an error. require_once($CFG->libdir.'/adminlib.php'); - admin_externalpage_setup('coursemgmt'); + admin_externalpage_setup('coursemgmt', $navbaritem, array('id' => $id, + 'page' => $page, 'perpage' => $perpage), $CFG->wwwroot . '/course/category.php'); admin_externalpage_print_header(); } else { print_header("$site->shortname: $category->name", "$site->fullname: $strcourses", $navigation, '', '', true, $navbaritem); } -/// Print button to turn editing off - if ($editingon) { - echo ''; - } - /// Print link to roles if (has_capability('moodle/role:assign', $context)) { echo ''; admin_externalpage_print_footer(); @@ -369,7 +365,7 @@ function print_category_edit_header() { global $SITE; require_once($CFG->libdir.'/adminlib.php'); - admin_externalpage_setup('coursemgmt'); + admin_externalpage_setup('coursemgmt', update_category_button()); admin_externalpage_print_header(); } ?> diff --git a/lib/adminlib.php b/lib/adminlib.php index 3b56e1d28e1..724b81e38f2 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -2122,6 +2122,9 @@ class admin_externalpage extends part_of_admin_tree { * @param string $visiblename The displayed name for this external page. Usually obtained through get_string(). * @param string $url The external URL that we should link to when someone requests this external page. * @param mixed $req_capability The role capability/permission a user must have to access this external page. Defaults to 'moodle/site:config'. + * @param boolean $hidden Is this external page hidden in admin tree block? Default false. + * @param context $context The context the page relates to. Not sure what happens + * if you specify something other than system or front page. Defaults to system. */ function admin_externalpage($name, $visiblename, $url, $req_capability='moodle/site:config', $hidden=false, $context=NULL) { $this->name = $name; @@ -2132,7 +2135,7 @@ class admin_externalpage extends part_of_admin_tree { } else { $this->req_capability = array($req_capability); } - $this->hidden = $hidden; + $this->hidden = $hidden; $this->context = $context; } @@ -5169,8 +5172,13 @@ class admin_setting_manageportfolio extends admin_setting { * checks specified in page definition. * This function must be called on each admin page before other code. * @param string $section name of page + * @param string $extrabutton extra HTML that is added after the blocks editing on/off button. + * @param string $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/allowassin.php, instead of admin/roles/manage.php, you can pass the alternate URL here. */ -function admin_externalpage_setup($section) { +function admin_externalpage_setup($section, $extrabutton='', $extraurlparams=array(), $actualurl='') { global $CFG, $PAGE, $USER; require_once($CFG->libdir.'/blocklib.php'); @@ -5200,6 +5208,8 @@ function admin_externalpage_setup($section) { page_map_class(PAGE_ADMIN, 'page_admin'); $PAGE = page_create_object(PAGE_ADMIN, 0); // there must be any constant id number $PAGE->init_extra($section); // hack alert! + $PAGE->set_extra_button($extrabutton); + $PAGE->set_extra_url_params($extraurlparams, $actualurl); $adminediting = optional_param('adminedit', -1, PARAM_BOOL);