summaryrefslogtreecommitdiff
path: root/modules/field
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-03-07 23:14:20 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-03-07 23:14:20 +0000
commit47371be0a5353aef7b34d5bdc70d31c6fd249dfc (patch)
tree9373f976babd62d6cfe6de905e3bc8ea8bb6b6b0 /modules/field
parentc5bfbe7fa6bf237cf956a9367be2aa723bf9bdaf (diff)
downloadbrdo-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.module43
-rw-r--r--modules/field/modules/text/text.test6
-rw-r--r--modules/field/tests/field.test4
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);