MDL-11688 makes sure all course and user contexts exist during upgrade (all contexts when going from in 1.6) - this is needed for grade_letter upgrade; other minor tweaks - the USER->access is now loaded automatically, feedback parameters added

This commit is contained in:
skodak
2007-10-10 08:33:06 +00:00
parent 9031e46f94
commit 8a4d32d8a3
4 changed files with 38 additions and 36 deletions
+1 -1
View File
@@ -517,7 +517,7 @@
/// Set up the admin user
if (empty($CFG->rolesactive)) {
build_context_path();
build_context_path(); // just in case - should not be needed
create_admin_user();
}
-6
View File
@@ -8,12 +8,6 @@ require_once($CFG->libdir.'/adminlib.php');
$return = optional_param('return', '', PARAM_ALPHA);
// Technically, we shouldn't need it, but during the
// v1.9 accesslib upgrade _sometimes_ USER->access
// isn't set.
if (!isset($USER->access)) {
load_all_capabilities();
}
admin_externalpage_setup('upgradesettings'); // now hidden page
// a caveat: we're depending on only having one admin access this page at once. why? the following line
+26 -24
View File
@@ -2319,9 +2319,10 @@ function delete_context($contextlevel, $instanceid) {
* Precreates all contexts including all parents
* @param int $contextlevel, empty means all
* @param bool $buildpaths update paths and depths
* @param bool $feedback show sql feedback
* @return void
*/
function create_contexts($contextlevel=null, $buildpaths=true) {
function create_contexts($contextlevel=null, $buildpaths=true, $feedback=false) {
global $CFG;
//make sure system context exists
@@ -2337,7 +2338,7 @@ function create_contexts($contextlevel=null, $buildpaths=true) {
WHERE NOT EXISTS (SELECT 'x'
FROM {$CFG->prefix}context cx
WHERE cc.id = cx.instanceid AND cx.contextlevel=".CONTEXT_COURSECAT.")";
execute_sql($sql, false);
execute_sql($sql, $feedback);
}
@@ -2350,7 +2351,7 @@ function create_contexts($contextlevel=null, $buildpaths=true) {
WHERE NOT EXISTS (SELECT 'x'
FROM {$CFG->prefix}context cx
WHERE c.id = cx.instanceid AND cx.contextlevel=".CONTEXT_COURSE.")";
execute_sql($sql, false);
execute_sql($sql, $feedback);
}
@@ -2361,7 +2362,7 @@ function create_contexts($contextlevel=null, $buildpaths=true) {
WHERE NOT EXISTS (SELECT 'x'
FROM {$CFG->prefix}context cx
WHERE cm.id = cx.instanceid AND cx.contextlevel=".CONTEXT_MODULE.")";
execute_sql($sql, false);
execute_sql($sql, $feedback);
}
if (empty($contextlevel) or $contextlevel == CONTEXT_BLOCK) {
@@ -2371,7 +2372,7 @@ function create_contexts($contextlevel=null, $buildpaths=true) {
WHERE NOT EXISTS (SELECT 'x'
FROM {$CFG->prefix}context cx
WHERE bi.id = cx.instanceid AND cx.contextlevel=".CONTEXT_BLOCK.")";
execute_sql($sql, false);
execute_sql($sql, $feedback);
}
if (empty($contextlevel) or $contextlevel == CONTEXT_USER) {
@@ -2382,12 +2383,12 @@ function create_contexts($contextlevel=null, $buildpaths=true) {
AND NOT EXISTS (SELECT 'x'
FROM {$CFG->prefix}context cx
WHERE u.id = cx.instanceid AND cx.contextlevel=".CONTEXT_USER.")";
execute_sql($sql, false);
execute_sql($sql, $feedback);
}
if ($buildpaths) {
build_context_path(false);
build_context_path(false, $feedback);
}
}
@@ -4644,9 +4645,10 @@ function component_level_changed($cap, $comp, $contextlevel) {
/**
* Populate context.path and context.depth where missing.
* @param bool $force force a complete rebuild of the path and depth fields.
* @param bool $feedback display feedback (during upgrade usually)
* @return void
*/
function build_context_path($force=false) {
function build_context_path($force=false, $feedback=false) {
global $CFG;
require_once($CFG->libdir.'/ddllib.php');
@@ -4722,9 +4724,9 @@ function build_context_path($force=false) {
AND cc.depth=1)
$emptyclause";
execute_sql($sql, $force);
execute_sql($sql, $feedback);
execute_sql($udelsql, $force);
execute_sql($udelsql, $feedback);
// Deeper categories - one query per depthlevel
$maxdepth = get_field_sql("SELECT MAX(depth)
@@ -4742,11 +4744,11 @@ function build_context_path($force=false) {
FROM {$CFG->prefix}context_temp temp
WHERE temp.id = ctx.id)
$ctxemptyclause";
execute_sql($sql, $force);
execute_sql($sql, $feedback);
}
execute_sql($updatesql, $force);
execute_sql($udelsql, $force);
execute_sql($updatesql, $feedback);
execute_sql($udelsql, $feedback);
// Courses -- except sitecourse
$sql = "INSERT INTO {$CFG->prefix}context_temp (id, path, depth)
@@ -4761,10 +4763,10 @@ function build_context_path($force=false) {
FROM {$CFG->prefix}context_temp temp
WHERE temp.id = ctx.id)
$ctxemptyclause";
execute_sql($sql, $force);
execute_sql($sql, $feedback);
execute_sql($updatesql, $force);
execute_sql($udelsql, $force);
execute_sql($updatesql, $feedback);
execute_sql($udelsql, $feedback);
// Module instances
$sql = "INSERT INTO {$CFG->prefix}context_temp (id, path, depth)
@@ -4778,10 +4780,10 @@ function build_context_path($force=false) {
FROM {$CFG->prefix}context_temp temp
WHERE temp.id = ctx.id)
$ctxemptyclause";
execute_sql($sql, $force);
execute_sql($sql, $feedback);
execute_sql($updatesql, $force);
execute_sql($udelsql, $force);
execute_sql($updatesql, $feedback);
execute_sql($udelsql, $feedback);
// Blocks - non-pinned course-view only
$sql = "INSERT INTO {$CFG->prefix}context_temp (id, path, depth)
@@ -4796,10 +4798,10 @@ function build_context_path($force=false) {
FROM {$CFG->prefix}context_temp temp
WHERE temp.id = ctx.id)
$ctxemptyclause";
execute_sql($sql, $force);
execute_sql($sql, $feedback);
execute_sql($updatesql, $force);
execute_sql($udelsql, $force);
execute_sql($updatesql, $feedback);
execute_sql($udelsql, $feedback);
// Blocks - others
$sql = "UPDATE {$CFG->prefix}context
@@ -4810,7 +4812,7 @@ function build_context_path($force=false) {
WHERE bi.id = {$CFG->prefix}context.instanceid
AND bi.pagetype!='course-view')
$emptyclause ";
execute_sql($sql, $force);
execute_sql($sql, $feedback);
// User
$sql = "UPDATE {$CFG->prefix}context
@@ -4820,7 +4822,7 @@ function build_context_path($force=false) {
FROM {$CFG->prefix}user u
WHERE u.id = {$CFG->prefix}context.instanceid)
$emptyclause ";
execute_sql($sql, $force);
execute_sql($sql, $feedback);
// Personal TODO
+11 -5
View File
@@ -1301,9 +1301,6 @@ function xmldb_main_upgrade($oldversion=0) {
rs_close($rs);
}
}
/// migrate grade letter table
$result = $result && upgrade_18_letters();
}
if ($result && $oldversion < 2007072400) {
@@ -1973,8 +1970,16 @@ function xmldb_main_upgrade($oldversion=0) {
/// Recalculate depths, paths and so on
if (!empty($CFG->rolesactive)) {
cleanup_contexts();
build_context_path(true);
// make sure all course, category and user contexts exist - we need it for grade letter upgrade, etc.
create_contexts(CONTEXT_COURSE, false, true);
create_contexts(CONTEXT_USER, false, true);
// we need all contexts path/depths filled properly
build_context_path(true, true);
load_all_capabilities();
} else {
// upgrade from 1.6 - build all contexts
create_contexts(null, true, true);
}
}
@@ -2175,10 +2180,11 @@ function xmldb_main_upgrade($oldversion=0) {
execute_sql("UPDATE {$CFG->prefix}grade_items SET display=0 WHERE display=-1");
}
/// migrade grade letters - we can not do this in normal grades upgrade becuase we need all course contexts
if ($result && $oldversion < 2007092806) {
require_once($CFG->libdir.'/db/upgradelib.php');
$result = upgrade_18_letters(); // executes on dev sites only
$result = upgrade_18_letters();
/// Define index contextidlowerboundary (not unique) to be added to grade_letters
$table = new XMLDBTable('grade_letters');