]> git.mjollnir.org Git - moodle.git/commitdiff
allow deleting of block when original code not present
authorskodak <skodak>
Sun, 3 Sep 2006 17:46:27 +0000 (17:46 +0000)
committerskodak <skodak>
Sun, 3 Sep 2006 17:46:27 +0000 (17:46 +0000)
admin/blocks.php
admin/settings.php
lib/adminlib.php
lib/blocklib.php

index 4ae730ed5768d86dc92b047a3c78ccdb8e8762c3..4ea075ac05779415441c6a13ac567daba8e17666 100644 (file)
         } 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()) {
index 07b4bc1c8b59670d4d2d241b13c6529d8fdc657f..974d5547781048ba347fe0c77cac8c7f5170e247 100644 (file)
@@ -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);
 
index f1f252d19d1304de9b7f15a59e5f0b9dbcb686ab..8de5aba5c80cad643e02a8b646affb70229deb10 100644 (file)
@@ -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!
 
index b7a0626411cdbcaad81fb7c6fb7f777859562dc2..fd094f99e30fe15206041a0ecee872283825c0d6 100644 (file)
@@ -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