MDL-53425 blocklib: Perform deletion of block instances by chunk
This commit is contained in:
+21
-11
@@ -2061,21 +2061,31 @@ function blocks_delete_instance($instance, $nolongerused = false, $skipblockstab
|
||||
function blocks_delete_instances($instanceids) {
|
||||
global $DB;
|
||||
|
||||
$instances = $DB->get_recordset_list('block_instances', 'id', $instanceids);
|
||||
foreach ($instances as $instance) {
|
||||
blocks_delete_instance($instance, false, true);
|
||||
$limit = 1000;
|
||||
$count = count($instanceids);
|
||||
$chunks = [$instanceids];
|
||||
if ($count > $limit) {
|
||||
$chunks = array_chunk($instanceids, $limit);
|
||||
}
|
||||
$instances->close();
|
||||
|
||||
$DB->delete_records_list('block_positions', 'blockinstanceid', $instanceids);
|
||||
$DB->delete_records_list('block_instances', 'id', $instanceids);
|
||||
// Perform deletion for each chunk.
|
||||
foreach ($chunks as $chunk) {
|
||||
$instances = $DB->get_recordset_list('block_instances', 'id', $chunk);
|
||||
foreach ($instances as $instance) {
|
||||
blocks_delete_instance($instance, false, true);
|
||||
}
|
||||
$instances->close();
|
||||
|
||||
$preferences = array();
|
||||
foreach ($instanceids as $instanceid) {
|
||||
$preferences[] = 'block' . $instanceid . 'hidden';
|
||||
$preferences[] = 'docked_block_instance_' . $instanceid;
|
||||
$DB->delete_records_list('block_positions', 'blockinstanceid', $chunk);
|
||||
$DB->delete_records_list('block_instances', 'id', $chunk);
|
||||
|
||||
$preferences = array();
|
||||
foreach ($chunk as $instanceid) {
|
||||
$preferences[] = 'block' . $instanceid . 'hidden';
|
||||
$preferences[] = 'docked_block_instance_' . $instanceid;
|
||||
}
|
||||
$DB->delete_records_list('user_preferences', 'name', $preferences);
|
||||
}
|
||||
$DB->delete_records_list('user_preferences', 'name', $preferences);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user