public function build_context_path($base, $emptyclause, $feedback = false) { // FIXME: support sub-clusters global $CFG; $a = 'ctx'; eval('$ctxemptyclause = "' . $emptyclause . '";'); $a = $CFG->prefix . 'context'; eval('$emptyclause = "' . $emptyclause . '";'); // Cluster $contextlevel = context_level_base::get_custom_context_level('cluster', 'block_curr_admin'); $sql = "UPDATE {$CFG->prefix}context\n SET depth=2, path=" . sql_concat("'{$base}/'", 'id') . "\n WHERE contextlevel={$contextlevel}\n AND EXISTS (SELECT 'x'\n FROM {$CFG->prefix}crlm_cluster u\n WHERE u.id = {$CFG->prefix}context.instanceid\n AND u.depth=1)\n {$emptyclause} "; execute_sql($sql, $feedback); // Deeper clusters - one query per depthlevel $maxdepth = get_field_sql("SELECT MAX(depth)\n FROM {$CFG->prefix}crlm_cluster"); for ($n = 2; $n <= $maxdepth; $n++) { $sql = "INSERT INTO {$CFG->prefix}context_temp (id, path, depth)\n SELECT ctx.id, " . sql_concat('pctx.path', "'/'", 'ctx.id') . ", pctx.depth+1\n FROM {$CFG->prefix}context ctx\n JOIN {$CFG->prefix}crlm_cluster c ON ctx.instanceid=c.id\n JOIN {$CFG->prefix}context pctx ON c.parent=pctx.instanceid\n WHERE ctx.contextlevel={$contextlevel}\n AND pctx.contextlevel={$contextlevel}\n AND c.depth={$n}\n AND NOT EXISTS (SELECT 'x'\n FROM {$CFG->prefix}context_temp temp\n WHERE temp.id = ctx.id)\n {$ctxemptyclause}"; execute_sql($sql, $feedback); // this is needed after every loop // MDL-11532 context_level_base::flush_context_temp($feedback); } }