? .DS_Store
? .htaccess
? form_elements_expandable_1_503816.patch
? region_block_creation_0_503782.patch
? includes/.DS_Store
? misc/.DS_Store
? modules/system/.DS_Store
? sites/.DS_Store
? sites/all/.DS_Store
? sites/all/modules/devel
? sites/default/files
? sites/default/settings.php
Index: modules/block/block.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.admin.inc,v
retrieving revision 1.42
diff -u -p -r1.42 block.admin.inc
--- modules/block/block.admin.inc	7 Jun 2009 02:29:07 -0000	1.42
+++ modules/block/block.admin.inc	27 Jun 2009 19:22:52 -0000
@@ -184,6 +184,35 @@ function block_admin_configure(&$form_st
     '#weight' => -18,
   );
 
+  // Allow the user to define this block's region directly
+  $form['regions'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Theme specific settings'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#tree' => TRUE,
+  );
+
+  // Create the region options
+  $theme_default = variable_get('theme_default', 'garland');
+  $block_regions = system_region_list($theme_default) + array(BLOCK_REGION_NONE => '<' . t('none') . '>');
+
+  foreach (system_get_theme_data() as $theme_key => $theme) {
+    $region = db_query("SELECT region FROM {block} WHERE module = :module AND delta = :delta AND theme = :theme", array(
+      ':module' => $module,
+      ':delta' => $delta,
+      ':theme' => $theme_key,
+    ))->fetchField();
+
+    $form['regions'][$theme_key] = array(
+      '#type' => 'select',
+      '#title' => "$theme->name ". t('region'),
+      '#default_value' => (!empty($region) ? $region : -1),
+      '#options' => $block_regions,
+      '#expandable' => TRUE,
+    );
+  }
+
   // Module-specific block configurations.
   if ($settings = module_invoke($module, 'block_configure', $delta)) {
     foreach ($settings as $k => $v) {
@@ -316,6 +345,18 @@ function block_admin_configure_submit($f
       ));
     }
     $query->execute();
+
+    // Store regions per theme for this block
+    foreach ($form_state['values']['regions'] as $theme => $region) {
+      db_update('block')
+        ->fields(array(
+          'region' => $region,
+        ))
+        ->condition('delta', $form_state['values']['delta'])
+        ->condition('theme', $theme)
+        ->execute();
+    }
+
     module_invoke($form_state['values']['module'], 'block_save', $form_state['values']['delta'], $form_state['values']);
     drupal_set_message(t('The block configuration has been saved.'));
     cache_clear_all();
