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