]> git.mjollnir.org Git - moodle.git/commitdiff
Eloy is probably right, the preferred width calculation should be cached.
authordefacer <defacer>
Tue, 20 Apr 2004 07:32:57 +0000 (07:32 +0000)
committerdefacer <defacer>
Tue, 20 Apr 2004 07:32:57 +0000 (07:32 +0000)
course/view.php

index 07c2f78172c3b50ce64434def1ff4b0f12a78cdf..bf2bb97b14361a031f99b44aec570e52043f44f7 100644 (file)
             $courseformat = 0;
     }
 
-    //We *always* need to get active blocks (perhaps this should be cached
-    //in a session object and updated in when editing = true ????
-    $recblocks = get_records('blocks','visible','1');
-
     // Doing this now so we can pass the results to block_action()
     // and dodge the overhead of doing the same work twice.
 
@@ -75,7 +71,7 @@
         $leftblocks = explode(',', $leftpart);
         $rightblocks = explode(',', $rightpart);
     }
-    
+
     if (!isset($USER->editing)) {
         $USER->editing = false;
     }
         $editing = $USER->editing;
 
         if (isset($hide)) {
-            set_section_visible($course->id, $hide, "0");
+            set_section_visible($course->id, $hide, '0');
         }
 
         if (isset($show)) {
-            set_section_visible($course->id, $show, "1");
+            set_section_visible($course->id, $show, '1');
         }
 
         if (isset($_GET['blockaction'])) {
         $allblocks = array_merge($leftblocks, $rightblocks);
 
         $missingblocks = array();
+        $recblocks = get_records('blocks','visible','1');
+
         if($editing && $recblocks) {
             foreach($recblocks as $recblock) {
                 // If it's not hidden or displayed right now...
             }
         }
 
-
         if (!empty($section)) {
             if (!empty($move)) {
                 if (!move_section($course, $section, $move)) {
         }
     }
 
-    //Calculate left and right width. This has to be calculated *always*. Perhaps
-    //we could cache it in a session variable and update it only when editing=true ????
-    //This caused some display problems (100 width) in student mode.
-    $preferred_width_left = blocks_preferred_width($leftblocks, $recblocks);
-    $preferred_width_right = blocks_preferred_width($rightblocks, $recblocks);
+    // If the block width cache is not set, set it
+    if(!isset($SESSION->blockcache->width->{$course->id}) || $editing) {
+
+        // This query might be optimized away if we 're in editing mode
+        if(!isset($recblocks)) {
+            $recblocks = get_records('blocks','visible','1');
+        }
+        $preferred_width_left = blocks_preferred_width($leftblocks, $recblocks);
+        $preferred_width_right = blocks_preferred_width($rightblocks, $recblocks);
+
+        // This may be kind of organizational overkill, granted...
+        // But is there any real need to simplify the structure?
+        $SESSION->blockcache->width->{$course->id}->left = $preferred_width_left;
+        $SESSION->blockcache->width->{$course->id}->right = $preferred_width_right;
+    }
+    else {
+        $preferred_width_left = $SESSION->blockcache->width->{$course->id}->left;
+        $preferred_width_right = $SESSION->blockcache->width->{$course->id}->right;
+    }
 
     require("$CFG->dirroot/course/format/$course->format/format.php");  // Include the actual course format