From: skodak Date: Fri, 5 Oct 2007 20:16:51 +0000 (+0000) Subject: MDL-11621 new create_contexts() function that makes sure all contexts exist, optional... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=9a81a6060aab7a9953d491379cab88e6d34ceb64;p=moodle.git MDL-11621 new create_contexts() function that makes sure all contexts exist, optionally initialises the paths and depths too --- diff --git a/lib/accesslib.php b/lib/accesslib.php index 7854a00758..267da25aee 100755 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -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 *