* 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
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);
}
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);
}
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) {
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) {
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);
}
}
/**
* 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');
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)
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)
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)
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)
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
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
FROM {$CFG->prefix}user u
WHERE u.id = {$CFG->prefix}context.instanceid)
$emptyclause ";
- execute_sql($sql, $force);
+ execute_sql($sql, $feedback);
// Personal TODO
rs_close($rs);
}
}
-
- /// migrate grade letter table
- $result = $result && upgrade_18_letters();
}
if ($result && $oldversion < 2007072400) {
/// 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);
}
}
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');