From ec6788772a4869103862cb96d9507fb7950ab6e2 Mon Sep 17 00:00:00 2001
From: Bob Vincent <bobvin@pillars.net>
Date: Fri, 12 Aug 2011 18:34:15 -0400
Subject: [PATCH] Issue #601952: Don't show widget select box if there's only one selection.

---
 modules/field_ui/field_ui.admin.inc |   12 +++++++++++-
 modules/field_ui/field_ui.css       |    7 +++++++
 modules/field_ui/field_ui.js        |   13 +++++++++++--
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/modules/field_ui/field_ui.admin.inc b/modules/field_ui/field_ui.admin.inc
index 9cd5ee15da7de54f2589c6698ce0ccce30a634aa..17b6f8dfe039f4a7b1f3bfa9e089906e0c9e9f54 100644
--- a/modules/field_ui/field_ui.admin.inc
+++ b/modules/field_ui/field_ui.admin.inc
@@ -672,7 +672,17 @@ function _field_ui_field_overview_form_validate_add_new($form, &$form_state) {
 
     // Missing widget type.
     if (!$field['widget_type']) {
-      form_set_error('fields][_add_new_field][widget_type', t('Add new field: you need to select a widget.'));
+      // If there's only one valid widget type then use that,
+      // so the select list can be disabled in client-side using JavaScript.
+      if (count($widget_types) == 1) {
+        $existing_field = field_info_field($field['field_name']);
+        $widget_types = field_ui_widget_type_options($existing_field['type']);
+        $widget_type = key($widget_types);
+        form_set_value($form['table']['_add_new_field']['widget_type'], $widget_type, $form_state);
+      }
+      else {
+        form_set_error('_add_new_field][widget_type', t('Add new field: you need to select a widget.'));
+      }
     }
     // Wrong widget type.
     elseif ($field['type']) {
diff --git a/modules/field_ui/field_ui.css b/modules/field_ui/field_ui.css
index c25d2a436c8dedf4d54469edb524b72d5fd1cc76..eb5af86b4ce217ab7fc055d8a4aa93e2eb83df34 100644
--- a/modules/field_ui/field_ui.css
+++ b/modules/field_ui/field_ui.css
@@ -26,7 +26,14 @@ table.field-ui-overview tr.region-add-new-title {
   display: none;
 }
 
+#field-overview select[disabled] {
+  color: #808080;
+}
+
 /* 'Manage display' overview */
+#field-display-overview select[disabled] {
+  color: #808080;
+}
 #field-display-overview .field-formatter-summary-cell {
   line-height: 1em;
 }
diff --git a/modules/field_ui/field_ui.js b/modules/field_ui/field_ui.js
index b63399f3d28dab70a58958f9bc87a1cdbfdc1c87..383c34e85088a38967d9c28a4193751fd9aa20ad 100644
--- a/modules/field_ui/field_ui.js
+++ b/modules/field_ui/field_ui.js
@@ -68,9 +68,18 @@ Drupal.fieldUIFieldOverview = {
 jQuery.fn.fieldUIPopulateOptions = function (options, selected) {
   return this.each(function () {
     var disabled = false;
-    if (options.length == 0) {
-      options = [this.initialValue];
+    var counter = 0;
+
+    for (i in options) {
+      counter++;
+    }
+
+    // Disable widget select box if there's no more than one selection.
+    if (counter <= 1) {
       disabled = true;
+      if (counter == 0) {
+        options = [this.initialValue];
+      }
     }
 
     // If possible, keep the same widget selected when changing field type.
-- 
1.7.4.1

