]> git.mjollnir.org Git - moodle.git/commitdiff
course/index: minor context-related fixes
authormartinlanghoff <martinlanghoff>
Wed, 19 Sep 2007 07:27:31 +0000 (07:27 +0000)
committermartinlanghoff <martinlanghoff>
Wed, 19 Sep 2007 07:27:31 +0000 (07:27 +0000)
 - 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.

course/index.php

index 92a2965f7fe9558a2d16e855b93a7df94e60afae..7c37b647f3eb8974570cb704ab817f434fafc132 100644 (file)
@@ -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;
         }
             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();
 
 /// 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();
                              "index.php?delete=$delete&amp;sure=".md5($deletecat->timemodified)."&amp;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();
             }
         }
                     }
                     $swapcategory = $category;
                 }
+                unset($category);
             }
         }
         if (!empty($movedown)) {
                         $choosenext = true;
                     }
                 }
+                unset($category);
             }
         }
         if ($swapcategory and $movecategory) {        // Renumber everything for robustness
                     notify('Could not update that category!');
                 }
             }
+            unset($category);
         }
     }
 
     /// 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
     echo update_categories_button();
     echo '</div></div>';
 
-    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 '<tr><td align="left" class="name">';
         for ($i=0; $i<$depth;$i++) {
@@ -358,12 +373,12 @@ function print_category_edit($category, $displaylist, $parentslist, $depth=-1, $
 
         echo '<td class="icons">';    /// Print little icons
 
-        if (has_capability('moodle/category:delete', $context)) {
+        if (has_capability('moodle/category:delete', $category->context)) {
             echo '<a title="'.$str->delete.'" href="index.php?delete='.$category->id.'&amp;sesskey='.sesskey().'"><img'.
                  ' src="'.$CFG->pixpath.'/t/delete.gif" class="iconsmall" alt="'.$str->delete.'" /></a> ';
         }
 
-        if (has_capability('moodle/category:visibility', $context)) {
+        if (has_capability('moodle/category:visibility', $category->context)) {
             if (!empty($category->visible)) {
                 echo '<a title="'.$str->hide.'" href="index.php?hide='.$category->id.'&amp;sesskey='.sesskey().'"><img'.
                      ' src="'.$CFG->pixpath.'/t/hide.gif" class="iconsmall" alt="'.$str->hide.'" /></a> ';