]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-11621 new create_contexts() function that makes sure all contexts exist, optional...
authorskodak <skodak>
Fri, 5 Oct 2007 20:16:51 +0000 (20:16 +0000)
committerskodak <skodak>
Fri, 5 Oct 2007 20:16:51 +0000 (20:16 +0000)
lib/accesslib.php

index 7854a00758695f225444f434cec65af99fe047e1..267da25aeeee9cccb88c24b725f50baf3cf75dab 100755 (executable)
@@ -2299,6 +2299,80 @@ function delete_context($contextlevel, $instanceid) {
     return true;
 }
 
+/**
+ * Precreates all contexts including all parents
+ * @param int $contextlevel, empty means all
+ * @param bool $buildpaths update paths and depths
+ * @return void
+ */
+function create_contexts($contextlevel=null, $buildpaths=true) {
+    global $CFG;
+
+    //make sure system context exists
+    $syscontext = get_system_context(false);
+
+    if (empty($contextlevel) or $contextlevel == CONTEXT_COURSECAT) {
+        $sql = "INSERT INTO {$CFG->prefix}context (contextlevel, instanceid)
+                SELECT ".CONTEXT_COURSECAT.", cc.id
+                  FROM  {$CFG->prefix}course_categories cc
+                 WHERE NOT EXISTS (SELECT 'x'
+                                     FROM {$CFG->prefix}context cx
+                                    WHERE cc.id = cx.instanceid AND cx.contextlevel=".CONTEXT_COURSECAT.")";
+        execute_sql($sql, false);
+
+    }
+
+    if (empty($contextlevel) or $contextlevel == CONTEXT_COURSE) {
+        create_contexts(CONTEXT_COURSECAT, false);
+        $sql = "INSERT INTO {$CFG->prefix}context (contextlevel, instanceid)
+                SELECT ".CONTEXT_COURSE.", c.id
+                  FROM  {$CFG->prefix}course c
+                 WHERE NOT EXISTS (SELECT 'x'
+                                     FROM {$CFG->prefix}context cx
+                                    WHERE c.id = cx.instanceid AND cx.contextlevel=".CONTEXT_COURSE.")";
+        execute_sql($sql, false);
+
+    }
+
+    if (empty($contextlevel) or $contextlevel == CONTEXT_MODULE) {
+        create_contexts(CONTEXT_COURSE, false);
+        $sql = "INSERT INTO {$CFG->prefix}context (contextlevel, instanceid)
+                SELECT ".CONTEXT_MODULE.", cm.id
+                  FROM  {$CFG->prefix}course_modules cm
+                 WHERE NOT EXISTS (SELECT 'x'
+                                     FROM {$CFG->prefix}context cx
+                                    WHERE cm.id = cx.instanceid AND cx.contextlevel=".CONTEXT_MODULE.")";
+        execute_sql($sql, false);
+    }
+
+    if (empty($contextlevel) or $contextlevel == CONTEXT_BLOCK) {
+        create_contexts(CONTEXT_COURSE, false);
+        $sql = "INSERT INTO {$CFG->prefix}context (contextlevel, instanceid)
+                SELECT ".CONTEXT_BLOCK.", bi.id
+                  FROM  {$CFG->prefix}block_instance bi
+                 WHERE NOT EXISTS (SELECT 'x'
+                                     FROM {$CFG->prefix}context cx
+                                    WHERE bi.id = cx.instanceid AND cx.contextlevel=".CONTEXT_BLOCK.")";
+        execute_sql($sql, false);
+    }
+
+    if (empty($contextlevel) or $contextlevel == CONTEXT_USER) {
+        $sql = "INSERT INTO {$CFG->prefix}context (contextlevel, instanceid)
+                SELECT ".CONTEXT_USER.", u.id
+                  FROM  {$CFG->prefix}user u
+                 WHERE u.deleted=0
+                   AND NOT EXISTS (SELECT 'x'
+                                     FROM {$CFG->prefix}context cx
+                                    WHERE u.id = cx.instanceid AND cx.contextlevel=".CONTEXT_USER.")";
+        execute_sql($sql, false);
+
+    }
+
+    if ($buildpaths) {
+        build_context_path(false);
+    }
+}
+
 /**
  * Remove stale context records
  *