From 6698c80f77876c3dee2195d35a74c43c157ae943 Mon Sep 17 00:00:00 2001
From: Jonathan Jordan <jojonaloha@1579186.no-reply.drupal.org>
Date: Fri, 19 May 2017 15:42:17 -0700
Subject: [PATCH] Issue #2145631: settingsForm() in EntityQueueHandlerInterface
 is not used anywhere

---
 plugins/ctools/export_ui/entityqueue_export_ui.inc | 56 ++++++++++++++++++++++
 plugins/entityqueue/handler/base.inc               |  6 +--
 2 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/plugins/ctools/export_ui/entityqueue_export_ui.inc b/plugins/ctools/export_ui/entityqueue_export_ui.inc
index 3ab6994..79b0994 100644
--- a/plugins/ctools/export_ui/entityqueue_export_ui.inc
+++ b/plugins/ctools/export_ui/entityqueue_export_ui.inc
@@ -150,6 +150,29 @@ function entityqueue_export_ui_form(&$form, &$form_state) {
     ),
   );
 
+  // Existing queues, only load the settings form for the chosen handler.
+  if (!$queue->is_new) {
+    $handlers_form = _entityqueue_export_ui_handler_form($queue, $form_state);
+  }
+  else {
+    $handlers_form = array();
+    // Otherwise load the form for every possible handler.
+    foreach ($handlers as $name => $label) {
+      // Spoof the handler and queue name temporarily
+      $queue->handler = $name;
+      $queue->name = 'new_' . $queue->handler;
+      $handlers_form += _entityqueue_export_ui_handler_form($queue, $form_state);
+    }
+    unset($queue->handler, $queue->name);
+  }
+
+  if (!empty($handlers_form)) {
+    $form['handler_settings'] = array(
+      '#type' => 'container',
+      '#tree' => TRUE,
+    ) + $handlers_form;
+  }
+
   $form['settings'] = array(
     '#type' => 'vertical_tabs',
     '#tree' => TRUE,
@@ -234,8 +257,41 @@ function entityqueue_export_ui_form_validate(&$form, &$form_state) {
   }
   unset($form_state['values']['settings']['settings__active_tab']);
 
+  // Only save the selected handlers settings
+  $handler = $form_state['values']['handler'];
+  if (isset($form_state['values']['handler_settings'][$handler])) {
+    $form_state['values']['settings']['handler_settings'] = $form_state['values']['handler_settings'][$handler];
+  }
+  unset($form_state['values']['handler_settings']);
+
   // Clean-up target_bundles values a bit.
   if (isset($form_state['values']['settings'])) {
     $form_state['values']['settings']['target_bundles'] = array_filter($form_state['values']['settings']['target_bundles']);
   }
 }
+
+/**
+ * Helper function to build the handler settings forms.
+ */
+function _entityqueue_export_ui_handler_form($queue, &$form_state) {
+  $handler = entityqueue_get_handler($queue);
+  $form = array();
+
+  $subform = $handler->settingsForm($form_state);
+  if (!empty($subform)) {
+    $form[$queue->handler] = array(
+      '#type' => 'fieldset',
+      '#tree' => TRUE,
+      '#title' => t('@handler settings', array(
+        '@handler' => $handler->getHandlerLabel(),
+      )),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="handler"]' => array('value' => $queue->handler),
+        ),
+      ),
+    ) + $subform;
+  }
+
+  return $form;
+}
\ No newline at end of file
diff --git a/plugins/entityqueue/handler/base.inc b/plugins/entityqueue/handler/base.inc
index 7b3bc95..b486a92 100644
--- a/plugins/entityqueue/handler/base.inc
+++ b/plugins/entityqueue/handler/base.inc
@@ -23,7 +23,7 @@ interface EntityQueueHandlerInterface {
   /**
    * Generates a settings form for this handler.
    */
-  public function settingsForm();
+  public function settingsForm(&$form_state);
 
   /**
    * Generates an add/edit subqueue form for this handler.
@@ -137,7 +137,7 @@ abstract class EntityQueueHandlerBase implements EntityQueueHandlerInterface {
     $this->plugin = $plugin;
   }
 
-  public function settingsForm() {
+  public function settingsForm(&$form_state) {
     return array();
   }
 
@@ -196,7 +196,7 @@ class BrokenEntityQueueHandler extends EntityQueueHandlerBase {
   /**
    * {@inheritdoc}
    */
-  public function settingsForm() {
+  public function settingsForm(&$form_state) {
     $form['handler'] = array(
       '#markup' => t('The selected handler is broken.'),
     );
-- 
2.11.0 (Apple Git-81)

