summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Pott2015-05-25 11:40:12 (GMT)
committerAlex Pott2015-05-25 11:40:12 (GMT)
commit2a4ea49e9c4eb88bfbc30a18588d4f146f3322e3 (patch)
tree9176913725bd2c93893c9612798c36bb572d7748
parente2851240a84eceeaf4b94c2b3500e2f180bb6290 (diff)
Issue #980144 by DuaelFr, yched, ACF, poedan, tim.plunkett, mgifford, swentel, asgorobets, SamH, sun, Everett Zufelt: Issues with "required, multiple" fields in forms
-rw-r--r--core/lib/Drupal/Core/Field/WidgetBase.php21
-rw-r--r--core/modules/field/src/Tests/FormTest.php26
2 files changed, 42 insertions, 5 deletions
diff --git a/core/lib/Drupal/Core/Field/WidgetBase.php b/core/lib/Drupal/Core/Field/WidgetBase.php
index 15ecaef..cc13ae4 100644
--- a/core/lib/Drupal/Core/Field/WidgetBase.php
+++ b/core/lib/Drupal/Core/Field/WidgetBase.php
@@ -176,10 +176,21 @@ abstract class WidgetBase extends PluginSettingsBase implements WidgetInterface
// For multiple fields, title and description are handled by the wrapping
// table.
- $element = array(
- '#title' => $is_multiple ? '' : $title,
- '#description' => $is_multiple ? '' : $description,
- );
+ if ($is_multiple) {
+ $element = [
+ '#title' => $title . ' ' . $this->t('(value @number)', ['@number' => $delta + 1]),
+ '#title_display' => 'invisible',
+ '#description' => '',
+ ];
+ }
+ else {
+ $element = [
+ '#title' => $title,
+ '#title_display' => 'before',
+ '#description' => $description,
+ ];
+ }
+
$element = $this->formSingleElement($items, $delta, $element, $form, $form_state);
if ($element) {
@@ -189,7 +200,7 @@ abstract class WidgetBase extends PluginSettingsBase implements WidgetInterface
// defined by widget.
$element['_weight'] = array(
'#type' => 'weight',
- '#title' => t('Weight for row @number', array('@number' => $delta + 1)),
+ '#title' => $this->t('Weight for row @number', array('@number' => $delta + 1)),
'#title_display' => 'invisible',
// Note: this 'delta' is the FAPI #type 'weight' element's property.
'#delta' => $max,
diff --git a/core/modules/field/src/Tests/FormTest.php b/core/modules/field/src/Tests/FormTest.php
index dc2d7a9..748d2ac 100644
--- a/core/modules/field/src/Tests/FormTest.php
+++ b/core/modules/field/src/Tests/FormTest.php
@@ -10,6 +10,8 @@ namespace Drupal\field\Tests;
use Drupal\Component\Utility\SafeMarkup;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormState;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
/**
* Tests field form handling.
@@ -317,6 +319,30 @@ class FormTest extends FieldTestBase {
}
/**
+ * Tests the position of the required label.
+ */
+ public function testFieldFormUnlimitedRequired() {
+ $field_name = $this->fieldStorageUnlimited['field_name'];
+ $this->field['field_name'] = $field_name;
+ $this->field['required'] = TRUE;
+ FieldStorageConfig::create($this->fieldStorageUnlimited)->save();
+ FieldConfig::create($this->field)->save();
+ entity_get_form_display($this->field['entity_type'], $this->field['bundle'], 'default')
+ ->setComponent($field_name)
+ ->save();
+
+ // Display creation form -> 1 widget.
+ $this->drupalGet('entity_test/add');
+ // Check that the Required symbol is present for the multifield label.
+ $this->assertRaw(SafeMarkup::format('<h4 class="label form-required">@label</h4>', array('@label' => $this->field['label'])),
+ 'Required symbol added field label.');
+ // Check that the label of the field input is visually hidden and contains
+ // the field title and an indication of the delta for a11y.
+ $this->assertRaw(SafeMarkup::format('<label for="edit-field-unlimited-0-value" class="visually-hidden form-required">@label (value 1)</label>', array('@label' => $this->field['label'])),
+ 'Required symbol not added for field input.');
+ }
+
+ /**
* Tests widget handling of multiple required radios.
*/
function testFieldFormMultivalueWithRequiredRadio() {