diff --git a/core/modules/block/block.install b/core/modules/block/block.install index 01c5779..1b9396b 100644 --- a/core/modules/block/block.install +++ b/core/modules/block/block.install @@ -246,23 +246,23 @@ function block_update_8008() { // First, create the body field. $body_field = array( - 'field_name' => 'block_body', + 'id' => 'block_body', 'type' => 'text_with_summary', 'entity_types' => array('custom_block'), 'module' => 'text', 'cardinality' => 1, ); - _update_7000_field_create_field($body_field); + _update_8000_field_create_field($body_field); $instance = array( - 'field_name' => 'block_body', + 'id' => 'custom_block.basic.block_body', 'entity_type' => 'custom_block', 'bundle' => 'basic', 'label' => 'Block body', 'widget' => array('type' => 'text_textarea_with_summary'), 'settings' => array('display_summary' => FALSE), ); - _update_7000_field_create_instance($body_field, $instance); + _update_8000_field_create_instance($body_field, $instance); // Initialize state for future calls. $sandbox['last'] = 0; @@ -302,7 +302,7 @@ function block_update_8008() { ); // This is a core update and no contrib modules are enabled yet, so // we can assume default field storage for a faster update. - _update_7000_field_sql_storage_write('custom_block', 'basic', $block->bid, $block->bid, 'block_body', $data); + _update_8000_field_sql_storage_write('custom_block', 'basic', $block->bid, $block->bid, 'block_body', $data); $sandbox['last'] = $block->bid; $sandbox['count'] += 1; diff --git a/core/modules/field/field.install b/core/modules/field/field.install index 2ea53a9..a90d311 100644 --- a/core/modules/field/field.install +++ b/core/modules/field/field.install @@ -11,14 +11,16 @@ /** * Creates a field by writing directly to configuration. * + * @param array $field_config + * An array of field properties. + * * @ingroup update_api */ -function _update_7000_field_create_field(&$field) { +function _update_8000_field_create_field(array &$field_config) { $uuid = new Uuid(); // Merge in default values. - $field += array( - 'id' => $field['field_name'], + $field_config += array( 'uuid' => $uuid->generate(), 'entity_types' => array(), 'cardinality' => 1, @@ -32,7 +34,7 @@ function _update_7000_field_create_field(&$field) { ); // Set the storage. - $field['storage'] = array( + $field_config['storage'] = array( 'type' => 'field_sql_storage', 'module' => 'field_sql_storage', 'active' => TRUE, @@ -40,31 +42,31 @@ function _update_7000_field_create_field(&$field) { ); // Save in config. - Drupal::config('field.field.' . $field['id']) - ->setData($field) + Drupal::config('field.field.' . $field_config['id']) + ->setData($field_config) ->save(); - update_config_manifest_add('field.field', array($field['id'])); + update_config_manifest_add('field.field', array($field_config['id'])); // Create storage for the field. This requires a field entity, but cannot use // the regular entity_create() function here. - $field_entity = new Field($field); + $field_entity = new Field($field_config); field_sql_storage_field_storage_create_field($field_entity); } /** - * Deletes a field stored in SQL storage directly from the database. + * Deletes a field directly from configuration. * * To protect user data, this function can only be used to delete fields once * all information it stored is gone. Delete all data from the * field_data_$field_name table before calling by either manually issuing - * delete queries against it or using _update_7000_field_delete_instance(). + * delete queries against it or using _update_8000_field_delete_instance(). * - * @param $field_name + * @param string $field_name * The field name to delete. * * @ingroup update_api */ -function _update_7000_field_delete_field($field_name) { +function _update_8000_field_delete_field($field_name) { $table_name = 'field_data_' . $field_name; if (db_select($table_name)->range(0, 1)->countQuery()->execute()->fetchField()) { $t = get_t(); @@ -73,8 +75,8 @@ function _update_7000_field_delete_field($field_name) { // Delete all instances. $config_names = config_get_storage_names_with_prefix('field.instance'); foreach ($config_names as $id) { - list($p1, $p2, $entity_type, $bundle, $field_name) = explode('.', $id); - if ($field_name == $field_name) { + list(, , $entity_type, $bundle, $config_field_name) = explode('.', $id); + if ($config_field_name == $field_name) { update_config_remove_config('field.instance', $entity_type . '.' . $bundle . '.' . $field_name); } } @@ -88,13 +90,20 @@ function _update_7000_field_delete_field($field_name) { } /** - * Deletes an instance and all its data of a field stored in SQL Storage. + * Deletes an instance and all its data of a field stored in configuration. * * BEWARE: This function deletes user data from the field storage tables. * + * @param string $field_name + * The name of the field. + * @param string $entity_type + * The name of the entity type. + * @param $bundle + * The name of the bundle. + * * @ingroup update_api */ -function _update_7000_field_delete_instance($field_name, $entity_type, $bundle) { +function _update_8000_field_delete_instance($field_name, $entity_type, $bundle) { // Delete field instance configuration data. update_config_remove_config('field.instance', $entity_type . '.' . $bundle . '.' . $field_name); @@ -110,7 +119,7 @@ function _update_7000_field_delete_instance($field_name, $entity_type, $bundle) } /** - * Fetches all of the field definitions from the database. + * Fetches all of the field definitions from configuration. * * Warning: Unlike the field_read_fields() API function, this function returns * all fields by default, including deleted and inactive fields, unless @@ -132,18 +141,17 @@ function _update_7000_field_read_fields(array $conditions = array(), $key = 'id' $matching_fields = array(); $config_names = config_get_storage_names_with_prefix('field.field'); - $deleted_fields = Drupal::state()->get('field.field.deleted') ?: array(); - // Ditch UUID keys, we will iterate through deleted fields using a numeric - // index. - $deleted_fields = array_values($deleted_fields); + $config_names += Drupal::state()->get('field.field.deleted') ?: array(); - if (empty($config_names) && empty($deleted_fields)) { - return $matching_fields; + if (empty($config_names)) { + return array(); } // Collect matching fields. - foreach ($config_names as $id) { - $field = config($id)->get(); + foreach ($config_names as $field) { + if (!is_array($field)) { + $field = config($field)->get(); + } if (!empty($conditions)) { foreach ($conditions as $key => $value) { @@ -162,19 +170,23 @@ function _update_7000_field_read_fields(array $conditions = array(), $key = 'id' /** * Writes a field instance directly to configuration. * + * @param array $field_config + * An array of field properties. + * @param array $instance + * An array of field instance properties. + * * @ingroup update_api */ -function _update_7000_field_create_instance($field, &$instance) { +function _update_8000_field_create_instance(array $field_config, array &$instance_config) { $uuid = new Uuid(); // Merge in defaults. - $instance += array( + $instance_config += array( 'description' => '', 'required' => FALSE, - 'id' => $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'], 'uuid' => $uuid->generate(), - 'field_uuid' => $field['uuid'], - 'field_type' => $field['type'], + 'field_uuid' => $field_config['uuid'], + 'field_type' => $field_config['type'], 'default_value' => array(), 'default_value_function' => '', 'settings' => array(), @@ -184,10 +196,10 @@ function _update_7000_field_create_instance($field, &$instance) { ); // Save in config. - Drupal::config('field.instance.' . $instance['id']) - ->setData($instance) + Drupal::config('field.instance.' . $instance_config['id']) + ->setData($instance_config) ->save(); - update_config_manifest_add('field.instance', array($instance['id'])); + update_config_manifest_add('field.instance', array($instance_config['id'])); } /** diff --git a/core/modules/user/user.install b/core/modules/user/user.install index 68f51a5..d0ca5ef 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -709,7 +709,7 @@ function user_update_8011() { // Create the field and instance. $field = array( - 'field_name' => 'user_picture', + 'id' => 'user_picture', 'module' => 'image', 'type' => 'image', 'cardinality' => 1, @@ -720,10 +720,10 @@ function user_update_8011() { 'default_image' => FALSE, ), ); - _update_7000_field_create_field($field); + _update_8000_field_create_field($field); $instance = array( - 'field_name' => 'user_picture', + 'id' => 'user.user.user_picture', 'entity_type' => 'user', 'label' => 'Picture', 'bundle' => 'user', @@ -749,7 +749,7 @@ function user_update_8011() { 'weight' => -1, ), ); - _update_7000_field_create_instance($field, $instance); + _update_8000_field_create_instance($field, $instance); // Assign display settings for the 'default' and 'compact' view modes. In D7, // user pictures did not require Image module to work. Image module only