Index: modules/field/field.api.php =================================================================== RCS file: /cvs/drupal/drupal/modules/field/field.api.php,v retrieving revision 1.91 diff -u -p -r1.91 field.api.php --- modules/field/field.api.php 3 Oct 2010 01:15:33 -0000 1.91 +++ modules/field/field.api.php 18 Oct 2010 15:55:11 -0000 @@ -197,7 +197,7 @@ function hook_field_info() { function hook_field_info_alter(&$info) { // Add a setting to all field types. foreach ($info as $field_type => $field_type_info) { - $info[$field_type]['settings'] += array( + $info[$field_type]['data']['settings'] += array( 'mymodule_additional_setting' => 'default value', ); } @@ -247,7 +247,7 @@ function hook_field_schema($field) { $columns = array( 'value' => array( 'type' => 'varchar', - 'length' => $field['settings']['max_length'], + 'length' => $field['data']['settings']['max_length'], 'not null' => FALSE, ), ); @@ -309,7 +309,7 @@ function hook_field_load($entity_type, $ foreach ($items[$id] as $delta => $item) { // Only process items with a cacheable format, the rest will be handled // by formatters if needed. - if (empty($instances[$id]['settings']['text_processing']) || filter_format_allowcache($item['format'])) { + if (empty($instances[$id]['data']['settings']['text_processing']) || filter_format_allowcache($item['format'])) { $items[$id][$delta]['safe_value'] = isset($item['value']) ? _text_sanitize($instances[$id], $langcode, $item, 'value') : ''; if ($field['type'] == 'text_with_summary') { $items[$id][$delta]['safe_summary'] = isset($item['summary']) ? _text_sanitize($instances[$id], $langcode, $item, 'summary') : ''; @@ -352,8 +352,8 @@ function hook_field_prepare_view($entity // Sample code from image.module: if there are no images specified at all, // use the default image. foreach ($entities as $id => $entity) { - if (empty($items[$id]) && $field['settings']['default_image']) { - if ($file = file_load($field['settings']['default_image'])) { + if (empty($items[$id]) && $field['data']['settings']['default_image']) { + if ($file = file_load($field['data']['settings']['default_image'])) { $items[$id][0] = (array) $file + array( 'is_default' => TRUE, 'alt' => '', @@ -394,10 +394,10 @@ function hook_field_prepare_view($entity function hook_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) { foreach ($items as $delta => $item) { if (!empty($item['value'])) { - if (!empty($field['settings']['max_length']) && drupal_strlen($item['value']) > $field['settings']['max_length']) { + if (!empty($field['data']['settings']['max_length']) && drupal_strlen($item['value']) > $field['data']['settings']['max_length']) { $errors[$field['field_name']][$delta][] = array( 'error' => 'text_max_length', - 'message' => t('%name: the value may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['settings']['max_length'])), + 'message' => t('%name: the value may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['data']['settings']['max_length'])), ); } } @@ -429,7 +429,7 @@ function hook_field_presave($entity_type // backends. foreach ($items as $delta => $item) { if (isset($item['value'])) { - $items[$delta]['value'] = round($item['value'], $field['settings']['scale']); + $items[$delta]['value'] = round($item['value'], $field['data']['settings']['scale']); } } } @@ -2241,9 +2241,9 @@ function hook_field_update_forbid($field // the new field will have fewer values, and any data exists for the // abandoned keys, the field will have no way to display them. So, // forbid such an update. - if ($has_data && count($field['settings']['allowed_values']) < count($prior_field['settings']['allowed_values'])) { + if ($has_data && count($field['data']['settings']['allowed_values']) < count($prior_field['data']['settings']['allowed_values'])) { // Identify the keys that will be lost. - $lost_keys = array_diff(array_keys($field['settings']['allowed_values']), array_keys($prior_field['settings']['allowed_values'])); + $lost_keys = array_diff(array_keys($field['data']['settings']['allowed_values']), array_keys($prior_field['data']['settings']['allowed_values'])); // If any data exist for those keys, forbid the update. $query = new EntityFieldQuery(); $found = $query Index: modules/field/field.crud.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/field/field.crud.inc,v retrieving revision 1.71 diff -u -p -r1.71 field.crud.inc --- modules/field/field.crud.inc 29 Sep 2010 01:37:02 -0000 1.71 +++ modules/field/field.crud.inc 18 Oct 2010 15:55:46 -0000 @@ -303,7 +303,7 @@ function field_create_field($field) { } // Create all per-field-type properties (needed here as long as we have // settings that impact column definitions). - $field['settings'] += field_info_field_settings($field['type']); + $field['data']['settings'] += field_info_field_settings($field['type']); $field['module'] = $field_type['module']; $field['active'] = 1; @@ -419,7 +419,7 @@ function field_update_field($field) { // Use the prior field values for anything not specifically set by the new // field to be sure that all values are set. $field += $prior_field; - $field['settings'] += $prior_field['settings']; + $field['data']['settings'] += $prior_field['data']['settings']; // Some updates are always disallowed. if ($field['type'] != $prior_field['type']) { @@ -459,23 +459,23 @@ function field_update_field($field) { $storage_type = field_info_storage_types($field['storage']['type']); module_invoke($storage_type['module'], 'field_storage_update_field', $field, $prior_field, $has_data); - // Save the new field definition. @todo: refactor with - // field_create_field. - - // The serialized 'data' column contains everything from $field that does not - // have its own column and is not automatically populated when the field is - // read. - $data = $field; - unset($data['columns'], $data['field_name'], $data['type'], $data['locked'], $data['module'], $data['cardinality'], $data['active'], $data['deleted']); - // Additionally, do not save the 'bundles' property populated by - // field_info_field(). - unset($data['bundles']); - - $field['data'] = $data; - - // Store the field and create the id. - $primary_key = array('id'); - drupal_write_record('field_config', $field, $primary_key); + // Save the new field definition. + db_update('field_config') + ->fields(array( + 'field_name' => $field['field_name'], + 'type' => $field['type'], + 'module' => $field['module'], + 'active' => $field['active'], + 'storage_type' => $field['storage']['type'], + 'storage_module' => $field['storage']['module'], + 'storage_active' => $field['storage']['active'], + 'locked' => $field['locked'], + 'cardinality' => $field['cardinality'], + 'translatable' => $field['translatable'], + 'data' => serialize($field['data']), + )) + ->condition('id', $field['id']) + ->execute(); // Clear caches field_cache_clear(TRUE); @@ -544,19 +544,13 @@ function field_read_fields($params = arr $fields = array(); $results = $query->execute(); foreach ($results as $record) { - $field = unserialize($record['data']); - $field['id'] = $record['id']; - $field['field_name'] = $record['field_name']; - $field['type'] = $record['type']; - $field['module'] = $record['module']; - $field['active'] = $record['active']; + $field = $record; + $field['data'] = unserialize($record['data']); + $field['storage']['type'] = $record['storage_type']; $field['storage']['module'] = $record['storage_module']; $field['storage']['active'] = $record['storage_active']; - $field['locked'] = $record['locked']; - $field['cardinality'] = $record['cardinality']; - $field['translatable'] = $record['translatable']; - $field['deleted'] = $record['deleted']; + unset($field['storage_type'], $field['storage_module'], $field['storage_active']); module_invoke_all('field_read_field', $field); Index: modules/field/field.info.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/field/field.info.inc,v retrieving revision 1.53 diff -u -p -r1.53 field.info.inc --- modules/field/field.info.inc 11 Sep 2010 00:03:42 -0000 1.53 +++ modules/field/field.info.inc 18 Oct 2010 15:58:18 -0000 @@ -255,7 +255,9 @@ function _field_info_collate_fields($res */ function _field_info_prepare_field($field) { // Make sure all expected field settings are present. - $field['settings'] += field_info_field_settings($field['type']); + $field['data'] += array('settings' => array()); + $field['data']['settings'] += field_info_field_settings($field['type']); + $field['storage'] += array('settings' => array()); $field['storage']['settings'] += field_info_storage_settings($field['storage']['type']); // Add storage details. Index: modules/field/modules/field_sql_storage/field_sql_storage.test =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/field_sql_storage/field_sql_storage.test,v retrieving revision 1.22 diff -u -p -r1.22 field_sql_storage.test --- modules/field/modules/field_sql_storage/field_sql_storage.test 29 Sep 2010 01:37:02 -0000 1.22 +++ modules/field/modules/field_sql_storage/field_sql_storage.test 18 Oct 2010 15:58:31 -0000 @@ -310,7 +310,7 @@ class FieldSqlStorageTestCase extends Dr field_attach_insert('test_entity', $entity); // Attempt to update the field in a way that would work without data. - $field['settings']['scale'] = 3; + $field['data']['settings']['scale'] = 3; try { field_update_field($field); $this->fail(t('Cannot update field schema with data.')); Index: modules/field/modules/list/list.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/list/list.module,v retrieving revision 1.35 diff -u -p -r1.35 list.module --- modules/field/modules/list/list.module 11 Oct 2010 19:57:00 -0000 1.35 +++ modules/field/modules/list/list.module 18 Oct 2010 15:58:45 -0000 @@ -65,7 +65,7 @@ function list_field_info() { * list.module does not depend on form submission. */ function list_field_settings_form($field, $instance, $has_data) { - $settings = $field['settings']; + $settings = $field['data']['settings']; $form['allowed_values'] = array( '#type' => 'textarea', @@ -197,13 +197,13 @@ function list_allowed_values($field) { if (!isset($allowed_values[$field['id']])) { $values = array(); - $function = $field['settings']['allowed_values_function']; + $function = $field['data']['settings']['allowed_values_function']; if (!empty($function) && function_exists($function)) { $values = $function($field); } - elseif (!empty($field['settings']['allowed_values'])) { + elseif (!empty($field['data']['settings']['allowed_values'])) { $position_keys = $field['type'] == 'list'; - $values = list_extract_allowed_values($field['settings']['allowed_values'], $position_keys); + $values = list_extract_allowed_values($field['data']['settings']['allowed_values'], $position_keys); } $allowed_values[$field['id']] = $values; Index: modules/field/modules/list/tests/list.test =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/list/tests/list.test,v retrieving revision 1.8 diff -u -p -r1.8 list.test --- modules/field/modules/list/tests/list.test 11 Oct 2010 19:57:00 -0000 1.8 +++ modules/field/modules/list/tests/list.test 18 Oct 2010 15:58:59 -0000 @@ -57,7 +57,7 @@ class ListFieldTestCase extends FieldTes $this->assertTrue(!empty($form[$this->field_name][$langcode][3]), t('Option 3 exists')); // Removed options do not appear. - $this->field['settings']['allowed_values'] = "2|Two"; + $this->field['data']['settings']['allowed_values'] = "2|Two"; field_update_field($this->field); $entity = field_test_create_stub_entity(); $form = drupal_get_form('field_test_entity_form', $entity); @@ -66,7 +66,7 @@ class ListFieldTestCase extends FieldTes $this->assertTrue(empty($form[$this->field_name][$langcode][3]), t('Option 3 does not exist')); // Completely new options appear. - $this->field['settings']['allowed_values'] = "10|Update\n20|Twenty"; + $this->field['data']['settings']['allowed_values'] = "10|Update\n20|Twenty"; field_update_field($this->field); $form = drupal_get_form('field_test_entity_form', $entity); $this->assertTrue(empty($form[$this->field_name][$langcode][1]), t('Option 1 does not exist')); @@ -78,7 +78,7 @@ class ListFieldTestCase extends FieldTes // Options are reset when a new field with the same name is created. field_delete_field($this->field_name); unset($this->field['id']); - $this->field['settings']['allowed_values'] = "1|One\n2|Two\n3|Three\n"; + $this->field['data']['settings']['allowed_values'] = "1|One\n2|Two\n3|Three\n"; $this->field = field_create_field($this->field); $this->instance = array( 'field_name' => $this->field_name, @@ -171,9 +171,9 @@ class ListFieldUITestCase extends FieldT $this->assertFieldByName('on', $on, t("The 'On' value is stored correctly.")); $this->assertFieldByName('off', $off, t("The 'Off' value is stored correctly.")); $field = field_info_field($this->field['field_name']); - $this->assertEqual($field['settings']['allowed_values'], "0|$off\n1|$on", t('The allowed value is correct')); - $this->assertFalse(isset($field['settings']['on']), t('The on value is not saved into settings')); - $this->assertFalse(isset($field['settings']['off']), t('The off value is not saved into settings')); + $this->assertEqual($field['data']['settings']['allowed_values'], "0|$off\n1|$on", t('The allowed value is correct')); + $this->assertFalse(isset($field['data']['settings']['on']), t('The on value is not saved into settings')); + $this->assertFalse(isset($field['data']['settings']['off']), t('The off value is not saved into settings')); } /** Index: modules/field/modules/number/number.install =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/number/number.install,v retrieving revision 1.1 diff -u -p -r1.1 number.install --- modules/field/modules/number/number.install 4 Sep 2010 15:40:51 -0000 1.1 +++ modules/field/modules/number/number.install 18 Oct 2010 15:59:05 -0000 @@ -33,8 +33,8 @@ function number_field_schema($field) { $columns = array( 'value' => array( 'type' => 'numeric', - 'precision' => $field['settings']['precision'], - 'scale' => $field['settings']['scale'], + 'precision' => $field['data']['settings']['precision'], + 'scale' => $field['data']['settings']['scale'], 'not null' => FALSE ), ); Index: modules/field/modules/number/number.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/number/number.module,v retrieving revision 1.43 diff -u -p -r1.43 number.module --- modules/field/modules/number/number.module 7 Sep 2010 17:56:41 -0000 1.43 +++ modules/field/modules/number/number.module 18 Oct 2010 15:59:40 -0000 @@ -54,7 +54,7 @@ function number_field_info() { * Implements hook_field_settings_form(). */ function number_field_settings_form($field, $instance, $has_data) { - $settings = $field['settings']; + $settings = $field['data']['settings']; $form = array(); if ($field['type'] == 'number_decimal') { @@ -161,7 +161,7 @@ function number_field_presave($entity_ty // backends. foreach ($items as $delta => $item) { if (isset($item['value'])) { - $items[$delta]['value'] = round($item['value'], $field['settings']['scale']); + $items[$delta]['value'] = round($item['value'], $field['data']['settings']['scale']); } } } @@ -322,7 +322,7 @@ function number_field_widget_form(&$form $value = isset($items[$delta]['value']) ? $items[$delta]['value'] : ''; // Substitute the decimal separator. if ($field['type'] == 'number_decimal' || $field['type'] == 'number_float') { - $value = strtr($value, '.', $field['settings']['decimal_separator']); + $value = strtr($value, '.', $field['data']['settings']['decimal_separator']); } $element += array( @@ -330,8 +330,8 @@ function number_field_widget_form(&$form '#default_value' => $value, // Allow a slightly larger size that the field length to allow for some // configurations where all characters won't fit in input field. - '#size' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 2 : 12, - '#maxlength' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] : 10, + '#size' => $field['type'] == 'number_decimal' ? $field['data']['settings']['precision'] + 2 : 12, + '#maxlength' => $field['type'] == 'number_decimal' ? $field['data']['settings']['precision'] : 10, // Extract the number type from the field type name for easier validation. '#number_type' => str_replace('number_', '', $field['type']), ); @@ -366,8 +366,8 @@ function number_field_widget_validate($e switch ($type) { case 'float': case 'decimal': - $regexp = '@[^-0-9\\' . $field['settings']['decimal_separator'] . ']@'; - $message = t('Only numbers and the decimal separator (@separator) allowed in %field.', array('%field' => t($instance['label']), '@separator' => $field['settings']['decimal_separator'])); + $regexp = '@[^-0-9\\' . $field['data']['settings']['decimal_separator'] . ']@'; + $message = t('Only numbers and the decimal separator (@separator) allowed in %field.', array('%field' => t($instance['label']), '@separator' => $field['data']['settings']['decimal_separator'])); break; case 'integer': @@ -381,7 +381,7 @@ function number_field_widget_validate($e else { // Substitute the decimal separator, if ($type == 'decimal' || $type == 'float') { - $value = strtr($value, $field['settings']['decimal_separator'], '.'); + $value = strtr($value, $field['data']['settings']['decimal_separator'], '.'); } form_set_value($element, $value, $form_state); } Index: modules/field/modules/options/options.api.php =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/options/options.api.php,v retrieving revision 1.1 diff -u -p -r1.1 options.api.php --- modules/field/modules/options/options.api.php 14 Dec 2009 20:18:55 -0000 1.1 +++ modules/field/modules/options/options.api.php 18 Oct 2010 15:59:50 -0000 @@ -52,7 +52,7 @@ function hook_options_list($field) { // In actual implementations, the array of options will most probably depend // on properties of the field. Example from taxonomy.module: $options = array(); - foreach ($field['settings']['allowed_values'] as $tree) { + foreach ($field['data']['settings']['allowed_values'] as $tree) { $terms = taxonomy_get_tree($tree['vid'], $tree['parent']); if ($terms) { foreach ($terms as $term) { Index: modules/field/modules/options/options.test =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/options/options.test,v retrieving revision 1.17 diff -u -p -r1.17 options.test --- modules/field/modules/options/options.test 24 Sep 2010 00:37:42 -0000 1.17 +++ modules/field/modules/options/options.test 18 Oct 2010 16:00:10 -0000 @@ -100,7 +100,7 @@ class OptionsWidgetsTestCase extends Fie $this->assertFieldValues($entity_init, 'card_1', $langcode, array()); // Check that required radios with one option is auto-selected. - $this->card_1['settings']['allowed_values'] = '99|Only allowed value'; + $this->card_1['data']['settings']['allowed_values'] = '99|Only allowed value'; field_update_field($this->card_1); $instance['required'] = TRUE; field_update_instance($instance); @@ -190,7 +190,7 @@ class OptionsWidgetsTestCase extends Fie $this->assertFieldValues($entity_init, 'card_2', $langcode, array()); // Required checkbox with one option is auto-selected. - $this->card_2['settings']['allowed_values'] = '99|Only allowed value'; + $this->card_2['data']['settings']['allowed_values'] = '99|Only allowed value'; field_update_field($this->card_2); $instance['required'] = TRUE; field_update_instance($instance); @@ -266,8 +266,8 @@ class OptionsWidgetsTestCase extends Fie // Test optgroups. - $this->card_1['settings']['allowed_values'] = NULL; - $this->card_1['settings']['allowed_values_function'] = 'list_test_allowed_values_callback'; + $this->card_1['data']['settings']['allowed_values'] = NULL; + $this->card_1['data']['settings']['allowed_values_function'] = 'list_test_allowed_values_callback'; field_update_field($this->card_1); // Display form: with no field data, nothing is selected @@ -381,8 +381,8 @@ class OptionsWidgetsTestCase extends Fie // Test optgroups. // Use a callback function defining optgroups. - $this->card_2['settings']['allowed_values'] = NULL; - $this->card_2['settings']['allowed_values_function'] = 'list_test_allowed_values_callback'; + $this->card_2['data']['settings']['allowed_values'] = NULL; + $this->card_2['data']['settings']['allowed_values_function'] = 'list_test_allowed_values_callback'; field_update_field($this->card_2); $instance['required'] = FALSE; field_update_instance($instance); Index: modules/field/modules/text/text.install =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.install,v retrieving revision 1.2 diff -u -p -r1.2 text.install --- modules/field/modules/text/text.install 29 Sep 2010 01:37:02 -0000 1.2 +++ modules/field/modules/text/text.install 18 Oct 2010 16:00:16 -0000 @@ -15,7 +15,7 @@ function text_field_schema($field) { $columns = array( 'value' => array( 'type' => 'varchar', - 'length' => $field['settings']['max_length'], + 'length' => $field['data']['settings']['max_length'], 'not null' => FALSE, ), ); Index: modules/field/modules/text/text.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.module,v retrieving revision 1.65 diff -u -p -r1.65 text.module --- modules/field/modules/text/text.module 18 Sep 2010 02:18:35 -0000 1.65 +++ modules/field/modules/text/text.module 18 Oct 2010 16:00:53 -0000 @@ -61,7 +61,7 @@ function text_field_info() { * Implements hook_field_settings_form(). */ function text_field_settings_form($field, $instance, $has_data) { - $settings = $field['settings']; + $settings = $field['data']['settings']; $form = array(); @@ -122,14 +122,14 @@ function text_field_validate($entity_typ // length can be exceeded very easily. foreach (array('value', 'summary') as $column) { if (!empty($item[$column])) { - if (!empty($field['settings']['max_length']) && drupal_strlen($item[$column]) > $field['settings']['max_length']) { + if (!empty($field['data']['settings']['max_length']) && drupal_strlen($item[$column]) > $field['data']['settings']['max_length']) { switch ($column) { case 'value': - $message = t('%name: the text may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['settings']['max_length'])); + $message = t('%name: the text may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['data']['settings']['max_length'])); break; case 'summary': - $message = t('%name: the summary may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['settings']['max_length'])); + $message = t('%name: the summary may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['data']['settings']['max_length'])); break; } $errors[$field['field_name']][$langcode][$delta][] = array( @@ -510,7 +510,7 @@ function text_field_widget_form(&$form, '#type' => 'textfield', '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL, '#size' => $instance['widget']['settings']['size'], - '#maxlength' => $field['settings']['max_length'], + '#maxlength' => $field['data']['settings']['max_length'], '#attributes' => array('class' => array('text-full')), ); break; Index: modules/field/tests/field.test =================================================================== RCS file: /cvs/drupal/drupal/modules/field/tests/field.test,v retrieving revision 1.42 diff -u -p -r1.42 field.test --- modules/field/tests/field.test 28 Sep 2010 02:30:31 -0000 1.42 +++ modules/field/tests/field.test 18 Oct 2010 16:03:43 -0000 @@ -1043,7 +1043,7 @@ class FieldInfoTestCase extends FieldTes $this->assertEqual($fields[$field['field_name']]['module'], 'field_test', t('info fields contains field module')); $settings = array('test_field_setting' => 'dummy test string'); foreach ($settings as $key => $val) { - $this->assertEqual($fields[$field['field_name']]['settings'][$key], $val, t("Field setting $key has correct default value $val")); + $this->assertEqual($fields[$field['field_name']]['data']['settings'][$key], $val, t("Field setting $key has correct default value $val")); } $this->assertEqual($fields[$field['field_name']]['cardinality'], 1, t('info fields contains cardinality 1')); $this->assertEqual($fields[$field['field_name']]['active'], 1, t('info fields contains active 1')); @@ -1096,7 +1096,7 @@ class FieldInfoTestCase extends FieldTes // Check that all expected settings are in place. $field_type = field_info_field_types($field_definition['type']); - $this->assertIdentical($field['settings'], $field_type['settings'], t('All expected default field settings are present.')); + $this->assertIdentical($field['data']['settings'], $field_type['settings'], t('All expected default field settings are present.')); } /** @@ -2123,7 +2123,7 @@ class FieldCrudTestCase extends FieldTes function testUpdateFieldForbid() { $field = array('field_name' => 'forbidden', 'type' => 'test_field', 'settings' => array('changeable' => 0, 'unchangeable' => 0)); $field = field_create_field($field); - $field['settings']['changeable']++; + $field['data']['settings']['changeable']++; try { field_update_field($field); $this->pass(t("A changeable setting can be updated.")); @@ -2131,7 +2131,7 @@ class FieldCrudTestCase extends FieldTes catch (FieldException $e) { $this->fail(t("An unchangeable setting cannot be updated.")); } - $field['settings']['unchangeable']++; + $field['data']['settings']['unchangeable']++; try { field_update_field($field); $this->fail(t("An unchangeable setting can be updated.")); Index: modules/field/tests/field_test.field.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/field/tests/field_test.field.inc,v retrieving revision 1.13 diff -u -p -r1.13 field_test.field.inc --- modules/field/tests/field_test.field.inc 28 Sep 2010 02:30:31 -0000 1.13 +++ modules/field/tests/field_test.field.inc 18 Oct 2010 16:04:05 -0000 @@ -50,7 +50,7 @@ function field_test_field_info() { * Implements hook_field_update_forbid(). */ function field_test_field_update_forbid($field, $prior_field, $has_data) { - if ($field['type'] == 'test_field' && $field['settings']['unchangeable'] != $prior_field['settings']['unchangeable']) { + if ($field['type'] == 'test_field' && $field['data']['settings']['unchangeable'] != $prior_field['data']['settings']['unchangeable']) { throw new FieldException("field_test 'unchangeable' setting cannot be changed'"); } } @@ -101,7 +101,7 @@ function field_test_field_is_empty($item * Implements hook_field_settings_form(). */ function field_test_field_settings_form($field, $instance, $has_data) { - $settings = $field['settings']; + $settings = $field['data']['settings']; $form['test_field_setting'] = array( '#type' => 'textfield',