=== modified file 'modules/block/block.module' --- modules/block/block.module 2007-09-27 16:52:00 +0000 +++ modules/block/block.module 2007-10-02 13:35:24 +0000 @@ -220,7 +220,7 @@ function _block_rehash() { $old_blocks[$old_block->module][$old_block->delta] = $old_block; } - $blocks = array(); + $bids = array(); foreach (module_list() as $module) { $module_blocks = module_invoke($module, 'block', 'list'); @@ -232,43 +232,20 @@ function _block_rehash() { $block['cache'] = isset($block['cache']) ? $block['cache'] : BLOCK_CACHE_PER_ROLE; // If previously written to database, load values. if (!empty($old_blocks[$module][$delta])) { - $block['status'] = $old_blocks[$module][$delta]->status; - $block['weight'] = $old_blocks[$module][$delta]->weight; - $block['region'] = $old_blocks[$module][$delta]->region; - $block['visibility'] = $old_blocks[$module][$delta]->visibility; - $block['pages'] = $old_blocks[$module][$delta]->pages; - $block['custom'] = $old_blocks[$module][$delta]->custom; - $block['throttle'] = $old_blocks[$module][$delta]->throttle; - $block['title'] = $old_blocks[$module][$delta]->title; + $bids[] = $old_blocks[$module][$delta]->bid; } // Otherwise, use any set values, or else substitute defaults. else { - $properties = array('status' => 0, 'weight' => 0, 'region' => 'left', 'pages' => '', 'custom' => 0, 'title' => ''); - foreach ($properties as $property => $default) { - if (!isset($block[$property])) { - $block[$property] = $default; - } - } + $block += array('status' => 0, 'weight' => 0, 'region' => 'left', 'pages' => '', 'custom' => 0, 'title' => '', 'visibility' => 0, 'throttle' => 0); + db_query("INSERT INTO {blocks} (module, delta, theme, status, weight, region, visibility, pages, custom, throttle, title, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', %d, '%s', %d, %d, '%s', %d)", $block['module'], $block['delta'], $theme_key, $block['status'], $block['weight'], $block['region'], $block['visibility'], $block['pages'], $block['custom'], $block['throttle'], $block['title'], $block['cache']); + $bids[] = db_last_insert_id('blocks', 'bid'); } - - $blocks[] = $block; } } } - - db_lock_table('blocks'); - // Remove all blocks from table. - db_query("DELETE FROM {blocks} WHERE theme = '%s'", $theme_key); - - // Reinsert new set of blocks into table. - foreach ($blocks as $block) { - $block += array( - 'visibility' => NULL, - 'throttle' => NULL, - ); - db_query("INSERT INTO {blocks} (module, delta, theme, status, weight, region, visibility, pages, custom, throttle, title, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', %d, '%s', %d, %d, '%s', %d)", $block['module'], $block['delta'], $theme_key, $block['status'], $block['weight'], $block['region'], $block['visibility'], $block['pages'], $block['custom'], $block['throttle'], $block['title'], $block['cache']); - } - db_unlock_tables(); + $args = $bids; + array_unshift($args, $theme_key); + db_query("DELETE FROM {blocks} WHERE theme = '%s' AND bid NOT IN (". db_placeholders($bids) .')', $args); return $blocks; }