From e943adef21b83c09717afa74247e6f22af8db90e Mon Sep 17 00:00:00 2001
From: Jason Yergeau <jason@storybynumbers.com>
Date: Sun, 30 Oct 2011 19:49:43 -0300
Subject: [PATCH] Adds "edit skins" to operations column in admin/structure/block, re issue #1314572.

---
 .../fusion-block-admin-display-form.tpl.php        |   68 ++++++++++++++++++++
 fusion_apply/fusion_apply.module                   |    2 +-
 fusion_apply/fusion_apply_ui.module                |   33 ++++++++--
 fusion_apply/modules/block.fusion.inc              |    2 +-
 fusion_apply/modules/node.fusion.inc               |    2 +-
 fusion_apply/modules/views.fusion.inc              |    8 ++
 6 files changed, 107 insertions(+), 8 deletions(-)
 create mode 100644 fusion_apply/fusion-block-admin-display-form.tpl.php

diff --git a/fusion_apply/fusion-block-admin-display-form.tpl.php b/fusion_apply/fusion-block-admin-display-form.tpl.php
new file mode 100644
index 0000000..e23386c
--- /dev/null
+++ b/fusion_apply/fusion-block-admin-display-form.tpl.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * @file
+ * Default theme implementation to configure blocks.
+ *
+ * Available variables:
+ * - $block_regions: An array of regions. Keyed by name with the title as value.
+ * - $block_listing: An array of blocks keyed by region and then delta.
+ * - $form_submit: Form submit button.
+ *
+ * Each $block_listing[$region] contains an array of blocks for that region.
+ *
+ * Each $data in $block_listing[$region] contains:
+ * - $data->region_title: Region title for the listed block.
+ * - $data->block_title: Block title.
+ * - $data->region_select: Drop-down menu for assigning a region.
+ * - $data->weight_select: Drop-down menu for setting weights.
+ * - $data->configure_link: Block configuration link.
+ * - $data->delete_link: For deleting user added blocks.
+ *
+ * @see template_preprocess_block_admin_display_form()
+ * @see theme_block_admin_display()
+ */
+?>
+<?php
+  // Add table javascript.
+  drupal_add_js('misc/tableheader.js');
+  drupal_add_js(drupal_get_path('module', 'block') . '/block.js');
+  foreach ($block_regions as $region => $title) {
+    drupal_add_tabledrag('blocks', 'match', 'sibling', 'block-region-select', 'block-region-' . $region, NULL, FALSE);
+    drupal_add_tabledrag('blocks', 'order', 'sibling', 'block-weight', 'block-weight-' . $region);
+  }
+?>
+<table id="blocks" class="sticky-enabled">
+  <thead>
+    <tr>
+      <th><?php print t('Block'); ?></th>
+      <th><?php print t('Region'); ?></th>
+      <th><?php print t('Weight'); ?></th>
+      <th colspan="3"><?php print t('Operations'); ?></th>
+    </tr>
+  </thead>
+  <tbody>
+    <?php $row = 0; ?>
+    <?php foreach ($block_regions as $region => $title): ?>
+      <tr class="region-title region-title-<?php print $region?>">
+        <td colspan="5"><?php print $title; ?></td>
+      </tr>
+      <tr class="region-message region-<?php print $region?>-message <?php print empty($block_listing[$region]) ? 'region-empty' : 'region-populated'; ?>">
+        <td colspan="5"><em><?php print t('No blocks in this region'); ?></em></td>
+      </tr>
+      <?php foreach ($block_listing[$region] as $delta => $data): ?>
+      <tr class="draggable <?php print $row % 2 == 0 ? 'odd' : 'even'; ?><?php print $data->row_class ? ' ' . $data->row_class : ''; ?>">
+        <td class="block"><?php print $data->block_title; ?></td>
+        <td><?php print $data->region_select; ?></td>
+        <td><?php print $data->weight_select; ?></td>
+        <td><?php print $data->configure_link; ?></td>
+        <td><?php print $data->accelerator_link; ?></td>
+        <td><?php print $data->delete_link; ?></td>
+      </tr>
+      <?php $row++; ?>
+      <?php endforeach; ?>
+    <?php endforeach; ?>
+  </tbody>
+</table>
+
+<?php print $form_submit; ?>
diff --git a/fusion_apply/fusion_apply.module b/fusion_apply/fusion_apply.module
index f646970..a9056eb 100644
--- a/fusion_apply/fusion_apply.module
+++ b/fusion_apply/fusion_apply.module
@@ -1007,7 +1007,7 @@ function fusion_apply_config_info_default() {
     'data_handler' => 'fusion_apply_data_handler',
     'submit_handler' => 'fusion_apply_submit_handler',
     'submit_handler_attach_to' => array('#submit'),
-    'fusion_apply_title' => t('Fusion Apply'),
+    'fusion_apply_title' => t('Apply skins'),
     'fusion_apply_weight' => 1,
     'title' => '',
     'description' => t('Manage which skins you want to apply to hooks'),
diff --git a/fusion_apply/fusion_apply_ui.module b/fusion_apply/fusion_apply_ui.module
index 5a6dbb7..68e740c 100644
--- a/fusion_apply/fusion_apply_ui.module
+++ b/fusion_apply/fusion_apply_ui.module
@@ -220,6 +220,9 @@ function fusion_apply_js_load($js = 'nojs') {
  */
 function fusion_apply_ui_theme() {
   return array(
+    'fusion_apply_ui_block_admin_display_form' => array(
+      'template' => 'fusion-block-admin-display-form'
+    ),
     'fusion_apply_ui_admin_skin_infos_fieldset' => array(
       'render element' => 'form',
       'file' => 'fusion_apply_ui.admin.inc',
@@ -337,7 +340,7 @@ function fusion_apply_ui_edit($js = FALSE, $module, $element, $elements = NULL)
  * @ingroup forms
  */
 function fusion_apply_ui_form($form, &$form_state, $arguments) {
-  
+
   $form = array(
     '#attributes' => array('class' => 'fusion_apply-form'),
   );
@@ -370,9 +373,10 @@ function fusion_apply_ui_form($form, &$form_state, $arguments) {
  * Implements hook_form_alter().
  */
 function fusion_apply_ui_form_alter(&$form, $form_state, $form_id) {
-  // Fix for update script.
-  if ($form_id == 'update_script_selection_form') {
-    return;
+  switch ($form_id) { 
+    // Fix for update script.
+    case 'update_script_selection_form':
+      return;
   }
 
   $config = fusion_apply_get_config_info();
@@ -594,6 +598,7 @@ function fusion_apply_ui_form_alter(&$form, $form_state, $form_id) {
 
       // Keep looping, there might be other modules that implement the same form_id.
     }
+
   }
 }
 
@@ -661,7 +666,25 @@ function fusion_apply_ui_form_submit($form, &$form_state) {
 }
 
 /**
- * Implements hook_preprocess().
+ * Adds additional "edit skin" link to blocks page.
+ */
+function fusion_apply_ui_preprocess_block_admin_display_form(&$variables) {
+  $variables['theme_hook_suggestions'][] = 'fusion_apply_ui_block_admin_display_form';
+  // Add each block in the form to the appropriate place in the block listing.
+  foreach (element_children($variables['form']['blocks']) as $i) {
+    $block = &$variables['form']['blocks'][$i];
+
+    // Fetch the region for the current block.
+    $region = (isset($block['region']['#default_value']) ? $block['region']['#default_value'] : BLOCK_REGION_NONE);
+
+    $variables['block_listing'][$region][$i]->accelerator_link = l(t('edit skins'), 'admin/appearance/fusion/edit/nojs/block/' . 
+      $variables['form']['blocks'][$i]['module']['#value'] . '__' . $variables['form']['blocks'][$i]['delta']['#value'] . '/configure');
+  }
+
+}
+
+/**
+ * Implements hook_preprocess().  Used to add contextual links.
  */
 function fusion_apply_ui_preprocess(&$variables, $hook) {
 
diff --git a/fusion_apply/modules/block.fusion.inc b/fusion_apply/modules/block.fusion.inc
index 1825d6e..7a4de35 100644
--- a/fusion_apply/modules/block.fusion.inc
+++ b/fusion_apply/modules/block.fusion.inc
@@ -69,7 +69,7 @@ function block_fusion_apply_preprocess_hook_callback(&$form, $form_state) {
  * Fusion Apply preprocess index handler.
  *
  * @param &$variables
- *   Passes in the $variables parameter from module_preprocess().
+ *   Passes in the $variables parameter from fusion_apply_preprocess().
  *
  * @return
  *   The index where we can find our values in Fusion Apply's data structure. If an
diff --git a/fusion_apply/modules/node.fusion.inc b/fusion_apply/modules/node.fusion.inc
index 89efe17..a3b22a3 100644
--- a/fusion_apply/modules/node.fusion.inc
+++ b/fusion_apply/modules/node.fusion.inc
@@ -97,7 +97,7 @@ function node_fusion_apply_preprocess_hook_callback(&$form, $form_state) {
  * Fusion Apply preprocess index handler.
  *
  * @param &$variables
- *   Passes in the $variables parameter from module_preprocess().
+ *   Passes in the $variables parameter from fusion_apply_preprocess().
  *
  * @return
  *   The index where we can find our values in Fusion Apply's data structure. If an
diff --git a/fusion_apply/modules/views.fusion.inc b/fusion_apply/modules/views.fusion.inc
index 72d8738..87412e1 100644
--- a/fusion_apply/modules/views.fusion.inc
+++ b/fusion_apply/modules/views.fusion.inc
@@ -70,6 +70,14 @@ function views_fusion_apply_preprocess_hook_callback(&$form, $form_state) {
 
 /**
  * Fusion Apply preprocess index handler.
+ *
+ * @param &$variables
+ *   Passes in the $variables parameter from fusion_apply_preprocess().
+ *
+ * @return
+ *   The index where we can find our values in Fusion Apply's data structure. If an
+ *   array is returned, it will loop through each index in Fusion Apply's data
+ *   structure and merge the returned classes. 
  */
 function views_fusion_apply_preprocess_index_handler(&$variables) {
   return array($variables['view']->name .'__'. $variables['view']->current_display);
-- 
1.7.3.4

