Exemplo n.º 1
0
 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);
     }
 }