diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-03-07 23:14:20 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-03-07 23:14:20 +0000 |
commit | 47371be0a5353aef7b34d5bdc70d31c6fd249dfc (patch) | |
tree | 9373f976babd62d6cfe6de905e3bc8ea8bb6b6b0 /modules/field | |
parent | c5bfbe7fa6bf237cf956a9367be2aa723bf9bdaf (diff) | |
download | brdo-47371be0a5353aef7b34d5bdc70d31c6fd249dfc.tar.gz brdo-47371be0a5353aef7b34d5bdc70d31c6fd249dfc.tar.bz2 |
#414424 by sun, chx, Arancaytar, yched, et al: Introduce Form API #type 'text_format' for additional DX/security around rich text fields.
Diffstat (limited to 'modules/field')
-rw-r--r-- | modules/field/modules/text/text.module | 43 | ||||
-rw-r--r-- | modules/field/modules/text/text.test | 6 | ||||
-rw-r--r-- | modules/field/tests/field.test | 4 |
3 files changed, 24 insertions, 29 deletions
diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module index 9f8a5c6d0..14262e201 100644 --- a/modules/field/modules/text/text.module +++ b/modules/field/modules/text/text.module @@ -512,10 +512,12 @@ function text_field_widget_settings_form($field, $instance) { */ function text_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $base) { $element = $base; + $summary_widget = array(); + $main_widget = array(); switch ($instance['widget']['type']) { case 'text_textfield': - $element['value'] = $base + array( + $main_widget = $base + array( '#type' => 'textfield', '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL, '#size' => $instance['widget']['settings']['size'], @@ -526,7 +528,7 @@ function text_field_widget_form(&$form, &$form_state, $field, $instance, $langco case 'text_textarea_with_summary': $display = !empty($items[$delta]['summary']) || !empty($instance['settings']['display_summary']); - $element['summary'] = array( + $summary_widget = array( '#type' => $display ? 'textarea' : 'value', '#default_value' => isset($items[$delta]['summary']) ? $items[$delta]['summary'] : NULL, '#title' => t('Summary'), @@ -543,7 +545,7 @@ function text_field_widget_form(&$form, &$form_state, $field, $instance, $langco // Fall through to the next case. case 'text_textarea': - $element['value'] = $base + array( + $main_widget = $base + array( '#type' => 'textarea', '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL, '#rows' => $instance['widget']['settings']['rows'], @@ -553,11 +555,20 @@ function text_field_widget_form(&$form, &$form_state, $field, $instance, $langco break; } - if ($instance['settings']['text_processing']) { - $element['value']['#text_format'] = isset($items[$delta]['format']) ? $items[$delta]['format'] : filter_default_format(); - $element['#type'] = 'markup'; - $element['#input'] = TRUE; - $element['#value_callback'] = 'text_field_widget_formatted_text_value'; + if ($main_widget) { + // Conditionally alter the form element's type if text processing is enabled. + if ($instance['settings']['text_processing']) { + $element = $main_widget; + $element['#type'] = 'text_format'; + $element['#format'] = isset($items[$delta]['format']) ? $items[$delta]['format'] : NULL; + $element['#base_type'] = $main_widget['#type']; + } + else { + $element['value'] = $main_widget; + } + } + if ($summary_widget) { + $element['summary'] = $summary_widget; } return $element; @@ -580,19 +591,3 @@ function text_field_widget_error($element, $error, $form, &$form_state) { form_error($error_element, $error['message']); } -/** - * Form element #value_callback to re-assign text format value for a formatted text widget. - * - * #text_format puts the format into 'value_format', while we need it in - * 'format'. - */ -function text_field_widget_formatted_text_value($element, $edit = FALSE, &$form_state) { - if ($edit !== FALSE) { - // The format selector uses #access = FALSE if only one format is - // available. In this case, we don't receive its value, and need to - // manually set it. - $edit['format'] = !empty($edit['value_format']) ? $edit['value_format'] : filter_default_format(); - unset($edit['value_format']); - return $edit; - } -} diff --git a/modules/field/modules/text/text.test b/modules/field/modules/text/text.test index 87b09c45a..2a239e3be 100644 --- a/modules/field/modules/text/text.test +++ b/modules/field/modules/text/text.test @@ -166,7 +166,7 @@ class TextFieldTestCase extends DrupalWebTestCase { // no format selector will be displayed. $this->drupalGet('test-entity/add/test-bundle'); $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', t('Widget is displayed')); - $this->assertNoFieldByName("{$this->field_name}[$langcode][0][value_format]", '', t('Format selector is not displayed')); + $this->assertNoFieldByName("{$this->field_name}[$langcode][0][format]", '', t('Format selector is not displayed')); // Submit with data that should be filtered. $value = '<em>' . $this->randomName() . '</em>'; @@ -202,11 +202,11 @@ class TextFieldTestCase extends DrupalWebTestCase { // We should now have a 'text format' selector. $this->drupalGet('test-entity/' . $id . '/edit'); $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', t('Widget is displayed')); - $this->assertFieldByName("{$this->field_name}[$langcode][0][value_format]", '', t('Format selector is displayed')); + $this->assertFieldByName("{$this->field_name}[$langcode][0][format]", '', t('Format selector is displayed')); // Edit and change the text format to the new one that was created. $edit = array( - "{$this->field_name}[$langcode][0][value_format]" => $format_id, + "{$this->field_name}[$langcode][0][format]" => $format_id, ); $this->drupalPost(NULL, $edit, t('Save')); $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), t('Entity was updated')); diff --git a/modules/field/tests/field.test b/modules/field/tests/field.test index d25f120fc..f1bc28c71 100644 --- a/modules/field/tests/field.test +++ b/modules/field/tests/field.test @@ -1150,8 +1150,8 @@ class FieldAttachOtherTestCase extends FieldAttachTestCase { $langcode = LANGUAGE_NONE; // Pretend the form has been built. drupal_prepare_form('field_test_entity_form', $form, $form_state); - $form = form_builder('field_test_entity_form', $form, $form_state); - $form_state['values'] = array($this->field_name => array($langcode => $values)); + drupal_process_form('field_test_entity_form', $form, $form_state); + $form_state['values'][$this->field_name][$langcode] = $values; field_attach_submit($entity_type, $entity, $form, $form_state); asort($weights); |