From e9a207595cc6b951ee71b18cc2d4dd3f3d1bd6b5 Mon Sep 17 00:00:00 2001 From: skodak Date: Sun, 3 Sep 2006 17:46:27 +0000 Subject: [PATCH] allow deleting of block when original code not present --- admin/blocks.php | 14 +++++++++----- admin/settings.php | 2 +- lib/adminlib.php | 2 +- lib/blocklib.php | 16 +++++++--------- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/admin/blocks.php b/admin/blocks.php index 4ae730ed57..4ea075ac05 100644 --- a/admin/blocks.php +++ b/admin/blocks.php @@ -82,20 +82,24 @@ } else { // Inform block it's about to be deleted $blockobject = block_instance($block->name); - $blockobject->before_delete(); - - // Delete block - if (!delete_records('block', 'id', $block->id)) { - notify("Error occurred while deleting the $strblockname record from blocks table"); + if ($blockobject) { + $blockobject->before_delete(); //only if we can create instance, block might have been already removed } + // First delete instances and then block $instances = get_records('block_instance', 'blockid', $block->id); if(!empty($instances)) { foreach($instances as $instance) { blocks_delete_instance($instance); + blocks_delete_instance($instance, true); } } + // Delete block + if (!delete_records('block', 'id', $block->id)) { + notify("Error occurred while deleting the $strblockname record from blocks table"); + } + // Then the tables themselves if ($tables = $db->Metatables()) { diff --git a/admin/settings.php b/admin/settings.php index 07b4bc1c8b..974d554778 100644 --- a/admin/settings.php +++ b/admin/settings.php @@ -14,7 +14,7 @@ define('BLOCK_L_MAX_WIDTH',210); page_map_class(PAGE_ADMIN, 'page_admin'); -$PAGE = page_create_object(PAGE_ADMIN, 0); // there must be some id number +$PAGE = page_create_object(PAGE_ADMIN, 0); // there must be any constant id number $section = optional_param('section', '', PARAM_ALPHAEXT); diff --git a/lib/adminlib.php b/lib/adminlib.php index f1f252d19d..8de5aba5c8 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -2188,7 +2188,7 @@ function admin_externalpage_setup($section, $adminroot) { page_map_class(PAGE_ADMIN, 'page_admin'); - $PAGE = page_create_object(PAGE_ADMIN, 0); // there must be some id number + $PAGE = page_create_object(PAGE_ADMIN, 0); // there must be any constant id number $PAGE->init_extra($section); // hack alert! diff --git a/lib/blocklib.php b/lib/blocklib.php index b7a0626411..fd094f99e3 100644 --- a/lib/blocklib.php +++ b/lib/blocklib.php @@ -22,7 +22,7 @@ require_once($CFG->libdir.'/pagelib.php'); function block_is_compatible($blockname) { global $CFG; - $file = file($CFG->dirroot.'/blocks/'.$blockname.'/block_'.$blockname.'.php'); + $file = @file($CFG->dirroot.'/blocks/'.$blockname.'/block_'.$blockname.'.php'); // ignore errors when file does not exist if(empty($file)) { return NULL; } @@ -119,7 +119,7 @@ function block_load_class($blockname) { } require_once($CFG->dirroot.'/blocks/moodleblock.class.php'); - include_once($CFG->dirroot.'/blocks/'.$blockname.'/block_'.$blockname.'.php'); + @include_once($CFG->dirroot.'/blocks/'.$blockname.'/block_'.$blockname.'.php'); // do not throw errors if block code not present return class_exists($classname); } @@ -189,16 +189,14 @@ function blocks_name_allowed_in_format($name, $pageformat) { function blocks_delete_instance($instance,$pinned=false) { global $CFG; - // Get the block object and call instance_delete() first + // Get the block object and call instance_delete() if possible if(!$record = blocks_get_record($instance->blockid)) { - return false; - } - if(!$obj = block_instance($record->name, $instance)) { - return false; + if(!$obj = block_instance($record->name, $instance)) { + // Return value ignored + $obj->instance_delete(); + } } - // Return value ignored - $obj->instance_delete(); if (!empty($pinned)) { delete_records('block_pinned', 'id', $instance->id); // And now, decrement the weight of all blocks after this one -- 2.39.5