AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Multiblock uninstallation.** @package block_multiblock* @copyright 2020 Peter Spicer <peter.spicer@catalyst-eu.net>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/use block_multiblock\helper;/*** Clean up multiblocks when uninstalling.** Finds every multiblock instance and decomposes any blocks in them back to parent context.*/function xmldb_block_multiblock_uninstall() : bool {global $DB;// Set up the queries we're going to be using.$sql = "SELECT c.id AS contextid, bi.*FROM {context} cJOIN {block_instances} bi ON bi.id = c.instanceid AND c.contextlevel = :contextlevelWHERE bi.blockname = :blockname";$params = ['blockname' => 'multiblock','contextlevel' => CONTEXT_BLOCK,];$childsql = "SELECT c.id AS contextid, bi.id AS blockidFROM {context} cJOIN {block_instances} bi ON bi.id = c.instanceid AND c.contextlevel = :contextlevelWHERE bi.parentcontextid = :parentcontext";$multiblocks = $DB->get_records_sql($sql, $params);foreach ($multiblocks as $multiblock) {// Now we have the blocks, find each block's children.$childparams = ['contextlevel' => CONTEXT_BLOCK,'parentcontext' => $multiblock->contextid,];$children = $DB->get_records_sql($childsql, $childparams);// And split each child out of the parent.foreach ($children as $childblock) {helper::split_block($multiblock, $childblock->blockid);}}return true;}