Skip to content

Commit

Permalink
MDL-48807 accesslib: table locking fix on all create_level_instance
Browse files Browse the repository at this point in the history
  • Loading branch information
lameze committed Feb 23, 2015
1 parent 3272728 commit 1cf194a
Showing 1 changed file with 30 additions and 15 deletions.
45 changes: 30 additions & 15 deletions lib/accesslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -6418,14 +6418,17 @@ public static function instance($instanceid, $strictness = MUST_EXIST) {
protected static function create_level_instances() {
global $DB;

$sql = "INSERT INTO {context} (contextlevel, instanceid)
SELECT ".CONTEXT_USER.", u.id
$sql = "SELECT ".CONTEXT_USER.", u.id
FROM {user} u
WHERE u.deleted = 0
AND NOT EXISTS (SELECT 'x'
FROM {context} cx
WHERE u.id = cx.instanceid AND cx.contextlevel=".CONTEXT_USER.")";
$DB->execute($sql);
if ($contextdata = $DB->get_records_sql($sql)) {
foreach ($contextdata as $context) {
context::insert_context_record(CONTEXT_USER, $context->id, null);
}
}
}

/**
Expand Down Expand Up @@ -6626,13 +6629,16 @@ public function get_child_contexts() {
protected static function create_level_instances() {
global $DB;

$sql = "INSERT INTO {context} (contextlevel, instanceid)
SELECT ".CONTEXT_COURSECAT.", cc.id
$sql = "SELECT ".CONTEXT_COURSECAT.", cc.id
FROM {course_categories} cc
WHERE NOT EXISTS (SELECT 'x'
FROM {context} cx
WHERE cc.id = cx.instanceid AND cx.contextlevel=".CONTEXT_COURSECAT.")";
$DB->execute($sql);
if ($contextdata = $DB->get_records_sql($sql)) {
foreach ($contextdata as $context) {
context::insert_context_record(CONTEXT_COURSECAT, $context->id, null);
}
}
}

/**
Expand Down Expand Up @@ -6849,13 +6855,16 @@ public static function instance($instanceid, $strictness = MUST_EXIST) {
protected static function create_level_instances() {
global $DB;

$sql = "INSERT INTO {context} (contextlevel, instanceid)
SELECT ".CONTEXT_COURSE.", c.id
$sql = "SELECT ".CONTEXT_COURSE.", c.id
FROM {course} c
WHERE NOT EXISTS (SELECT 'x'
FROM {context} cx
WHERE c.id = cx.instanceid AND cx.contextlevel=".CONTEXT_COURSE.")";
$DB->execute($sql);
if ($contextdata = $DB->get_records_sql($sql)) {
foreach ($contextdata as $context) {
context::insert_context_record(CONTEXT_COURSE, $context->id, null);
}
}
}

/**
Expand Down Expand Up @@ -7103,13 +7112,16 @@ public static function instance($instanceid, $strictness = MUST_EXIST) {
protected static function create_level_instances() {
global $DB;

$sql = "INSERT INTO {context} (contextlevel, instanceid)
SELECT ".CONTEXT_MODULE.", cm.id
$sql = "SELECT ".CONTEXT_MODULE.", cm.id
FROM {course_modules} cm
WHERE NOT EXISTS (SELECT 'x'
FROM {context} cx
WHERE cm.id = cx.instanceid AND cx.contextlevel=".CONTEXT_MODULE.")";
$DB->execute($sql);
if ($contextdata = $DB->get_records_sql($sql)) {
foreach ($contextdata as $context) {
context::insert_context_record(CONTEXT_MODULE, $context->id, null);
}
}
}

/**
Expand Down Expand Up @@ -7320,13 +7332,16 @@ public function get_child_contexts() {
protected static function create_level_instances() {
global $DB;

$sql = "INSERT INTO {context} (contextlevel, instanceid)
SELECT ".CONTEXT_BLOCK.", bi.id
$sql = "SELECT ".CONTEXT_BLOCK.", bi.id
FROM {block_instances} bi
WHERE NOT EXISTS (SELECT 'x'
FROM {context} cx
WHERE bi.id = cx.instanceid AND cx.contextlevel=".CONTEXT_BLOCK.")";
$DB->execute($sql);
if ($contextdata = $DB->get_records_sql($sql)) {
foreach ($contextdata as $context) {
context::insert_context_record(CONTEXT_BLOCK, $context->id, null);
}
}
}

/**
Expand Down

0 comments on commit 1cf194a

Please sign in to comment.