From 188125133540404046e8b6928e28bcc88b1c64d0 Mon Sep 17 00:00:00 2001 From: webchick <webchick@24967.no-reply.drupal.org> Date: Wed, 26 Sep 2012 23:47:21 -0400 Subject: [PATCH] Issue #1312200 by zuuperman, lemark, chx: Fixed field_create_instance() must fill in the id field but does not. --- core/modules/field/field.crud.inc | 10 +++++----- .../Drupal/field/Tests/FieldInstanceCrudTest.php | 5 ++++- .../field/lib/Drupal/field/Tests/FormTest.php | 5 +++-- .../lib/Drupal/field_ui/Tests/AlterTest.php | 15 +++++++++------ .../lib/Drupal/node/Tests/NodeAccessFieldTest.php | 5 +++-- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/core/modules/field/field.crud.inc b/core/modules/field/field.crud.inc index 6ac93fa7399b..48a97973bafa 100644 --- a/core/modules/field/field.crud.inc +++ b/core/modules/field/field.crud.inc @@ -455,7 +455,7 @@ function field_delete_field($field_name) { * * See: @link field Field API data structures @endlink. */ -function field_create_instance($instance) { +function field_create_instance(&$instance) { $field = field_read_field($instance['field_name']); if (empty($field)) { throw new FieldException(t("Attempt to create an instance of a field @field_name that doesn't exist or is currently inactive.", array('@field_name' => $instance['field_name']))); @@ -555,7 +555,7 @@ function field_update_instance($instance) { * @param $update * Whether this is a new or existing instance. */ -function _field_write_instance($instance, $update = FALSE) { +function _field_write_instance(&$instance, $update = FALSE) { $field = field_read_field($instance['field_name']); $field_type = field_info_field_types($field['type']); @@ -639,12 +639,12 @@ function _field_write_instance($instance, $update = FALSE) { // update. if ($update) { $record['id'] = $instance['id']; - $primary_key = array('id'); + drupal_write_record('field_config_instance', $record, array('id')); } else { - $primary_key = array(); + drupal_write_record('field_config_instance', $record); + $instance['id'] = $record['id']; } - drupal_write_record('field_config_instance', $record, $primary_key); } /** diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php index 1af2f38fe608..df3b5057a90c 100644 --- a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php @@ -64,6 +64,9 @@ function testCreateFieldInstance() { $widget_type = field_info_widget_types($field_type['default_widget']); $formatter_type = field_info_formatter_types($field_type['default_formatter']); + // Check that the ID key is filled in. + $this->assertIdentical($record['id'], $this->instance_definition['id'], 'The instance id is filled in'); + // Check that default values are set. $this->assertIdentical($record['data']['required'], FALSE, t('Required defaults to false.')); $this->assertIdentical($record['data']['label'], $this->instance_definition['field_name'], t('Label defaults to field name.')); @@ -140,7 +143,7 @@ function testReadFieldInstance() { // Read the instance back. $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']); - $this->assertTrue($this->instance_definition < $instance, t('The field was properly read.')); + $this->assertTrue($this->instance_definition == $instance, 'The field was properly read.'); } /** diff --git a/core/modules/field/lib/Drupal/field/Tests/FormTest.php b/core/modules/field/lib/Drupal/field/Tests/FormTest.php index 2e6121ed568d..0073ed7930ef 100644 --- a/core/modules/field/lib/Drupal/field/Tests/FormTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FormTest.php @@ -247,7 +247,7 @@ function testFieldFormMultivalueWithRequiredRadio() { 'allowed_values' => array('yes' => 'yes', 'no' => 'no'), ), )); - field_create_instance(array( + $instance = array( 'field_name' => 'required_radio_test', 'entity_type' => 'test_entity', 'bundle' => 'test_bundle', @@ -255,7 +255,8 @@ function testFieldFormMultivalueWithRequiredRadio() { 'widget' => array( 'type' => 'options_buttons', ), - )); + ); + field_create_instance($instance); // Display creation form. $this->drupalGet('test-entity/add/test_bundle'); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php index 7ee95011ea50..b410e1bbbaec 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php @@ -54,7 +54,7 @@ function testDefaultWidgetPropertiesAlter() { 'field_name' => 'alter_test_text', 'type' => 'text', )); - field_create_instance(array( + $instance = array( 'field_name' => 'alter_test_text', 'entity_type' => 'node', 'bundle' => 'article', @@ -62,7 +62,8 @@ function testDefaultWidgetPropertiesAlter() { 'type' => 'text_textfield', 'size' => 60, ), - )); + ); + field_create_instance($instance); // Test that field_test_field_widget_properties_alter() sets the size to // 42 and that field_test_field_widget_form_alter() reports the correct @@ -79,22 +80,24 @@ function testDefaultWidgetPropertiesAlter() { 'type' => 'list_text' )); // Create instances on users and page nodes. - field_create_instance(array( + $instance = array( 'field_name' => 'alter_test_options', 'entity_type' => 'user', 'bundle' => 'user', 'widget' => array( 'type' => 'options_select', ) - )); - field_create_instance(array( + ); + field_create_instance($instance); + $instance = array( 'field_name' => 'alter_test_options', 'entity_type' => 'node', 'bundle' => 'page', 'widget' => array( 'type' => 'options_select', ) - )); + ); + field_create_instance($instance); // Test that field_test_field_widget_properties_user_alter() replaces // the widget and that field_test_field_widget_form_alter() reports the diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php index 3d11e26fb163..8dd2ab697c40 100644 --- a/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php +++ b/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php @@ -39,11 +39,12 @@ public function setUp() { // Add a custom field to the page content type. $this->field_name = drupal_strtolower($this->randomName() . '_field_name'); $this->field = field_create_field(array('field_name' => $this->field_name, 'type' => 'text')); - $this->instance = field_create_instance(array( + $instance = array( 'field_name' => $this->field_name, 'entity_type' => 'node', 'bundle' => 'page', - )); + ); + $this->instance = field_create_instance($instance); } /** -- GitLab