From: martinlanghoff Date: Wed, 19 Sep 2007 07:27:31 +0000 (+0000) Subject: course/index: minor context-related fixes X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=dfbf98cdb35ceec3a9de60b37bb62fcab1ca19df;p=moodle.git course/index: minor context-related fixes - The code uses the system context a lot. Declare $sysctx at the top and use it. - If the category has a context property, use it (saves 1 DB query per category displayed) The DB costs of this page in editing mode are - ~100 DB queries for fix_course_sortorder() - ~50 DB queries for the categories listing If we rewrite both to lose the recursion, we could resolve the page in perhaps 5 DBq. --- diff --git a/course/index.php b/course/index.php index 92a2965f7f..7c37b647f3 100644 --- a/course/index.php +++ b/course/index.php @@ -15,8 +15,9 @@ $moveto = optional_param('moveto',-1,PARAM_INT); $moveup = optional_param('moveup',0,PARAM_INT); $movedown = optional_param('movedown',0,PARAM_INT); - - $context = get_context_instance(CONTEXT_SYSTEM, SITEID); + + $sysctx = get_context_instance(CONTEXT_SYSTEM); + $context = $sysctx; if (!$site = get_site()) { error('Site isn\'t defined!'); @@ -26,7 +27,7 @@ require_login(); } - if (has_capability('moodle/category:update', get_context_instance(CONTEXT_SYSTEM, SITEID))) { + if (has_capability('moodle/category:update', $sysctx)) { if ($categoryedit !== -1) { $USER->categoryediting = $categoryedit; } @@ -91,16 +92,16 @@ print_box_end(); } - /// I am not sure this context in the next has_capability call is correct. - if (isloggedin() and !isguest() and !has_capability('moodle/course:create', get_context_instance(CONTEXT_SYSTEM, SITEID)) and $CFG->enablecourserequests) { // Print link to request a new course + /// I am not sure this context in the next has_capability call is correct. + if (isloggedin() and !isguest() and !has_capability('moodle/course:create', $sysctx) and $CFG->enablecourserequests) { // Print link to request a new course print_single_button('request.php', NULL, get_string('courserequest'), 'get'); } - if (has_capability('moodle/course:create', get_context_instance(CONTEXT_SYSTEM, SITEID))) { // Print link to create a new course + if (has_capability('moodle/course:create', $sysctx)) { // Print link to create a new course /// Get the 1st available category $options = array('category' => get_field('course_categories', 'id', 'parent', '0')); print_single_button('edit.php', $options, get_string('addnewcourse'), 'get'); } - if (has_capability('moodle/site:approvecourse', get_context_instance(CONTEXT_SYSTEM, SITEID)) and !empty($CFG->enablecourserequests)) { + if (has_capability('moodle/site:approvecourse', $sysctx) and !empty($CFG->enablecourserequests)) { print_single_button('pending.php',NULL, get_string('coursespending'),'get'); } print_footer(); @@ -111,7 +112,7 @@ /// Print headings - if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { + if (has_capability('moodle/site:config', $sysctx)) { require_once($CFG->libdir.'/adminlib.php'); admin_externalpage_setup('coursemgmt'); admin_externalpage_print_header(); @@ -164,7 +165,11 @@ "index.php?delete=$delete&sure=".md5($deletecat->timemodified)."&sesskey=$USER->sesskey", "index.php?sesskey=$USER->sesskey"); - print_footer(); + if (has_capability('moodle/site:config', $sysctx)) { + admin_externalpage_print_footer($adminroot); + } else { + print_footer(); + } exit(); } } @@ -235,6 +240,7 @@ } $swapcategory = $category; } + unset($category); } } if (!empty($movedown)) { @@ -251,6 +257,7 @@ $choosenext = true; } } + unset($category); } } if ($swapcategory and $movecategory) { // Renumber everything for robustness @@ -266,6 +273,7 @@ notify('Could not update that category!'); } } + unset($category); } } @@ -309,11 +317,13 @@ /// Print link to create a new course if (has_capability('moodle/course:create', $context)) { unset($options); - $options['category'] = $category->id; - print_single_button('edit.php', $options, get_string('addnewcourse'), 'get'); + if (!empty($category->id)) { + $options['category'] = $category->id; + print_single_button('edit.php', $options, get_string('addnewcourse'), 'get'); + } } - if (has_capability('moodle/site:approvecourse', get_context_instance(CONTEXT_SYSTEM, SITEID)) and !empty($CFG->enablecourserequests)) { + if (has_capability('moodle/site:approvecourse', $sysctx) and !empty($CFG->enablecourserequests)) { print_single_button('pending.php',NULL, get_string('coursespending'), 'get'); } // admin page does not allow custom buttons in the navigation bar @@ -321,8 +331,11 @@ echo update_categories_button(); echo ''; - print_footer(); - + if (has_capability('moodle/site:config', $sysctx)) { + admin_externalpage_print_footer($adminroot); + } else { + print_footer(); + } function print_category_edit($category, $displaylist, $parentslist, $depth=-1, $up=false, $down=false) { /// Recursive function to print all the categories ready for editing @@ -342,7 +355,9 @@ function print_category_edit($category, $displaylist, $parentslist, $depth=-1, $ if ($category) { - $context = get_context_instance(CONTEXT_COURSECAT, $category->id); + if (!isset($category->context)) { + $category->context = get_context_instance(CONTEXT_COURSECAT, $category->id); + } echo ''; for ($i=0; $i<$depth;$i++) { @@ -358,12 +373,12 @@ function print_category_edit($category, $displaylist, $parentslist, $depth=-1, $ echo ''; /// Print little icons - if (has_capability('moodle/category:delete', $context)) { + if (has_capability('moodle/category:delete', $category->context)) { echo ' '; } - if (has_capability('moodle/category:visibility', $context)) { + if (has_capability('moodle/category:visibility', $category->context)) { if (!empty($category->visible)) { echo ' ';