diff --git a/core/modules/block/block.install b/core/modules/block/block.install index 0d7e8b8..6c925ca 100644 --- a/core/modules/block/block.install +++ b/core/modules/block/block.install @@ -253,7 +253,7 @@ function block_update_8008() { 'module' => 'text', 'cardinality' => 1, ); - _update_8000_field_create_field($body_field); + _update_8003_field_create_field($body_field); $instance = array( 'id' => 'custom_block.basic.block_body', @@ -262,7 +262,7 @@ function block_update_8008() { 'label' => 'Block body', 'settings' => array('display_summary' => FALSE), ); - _update_8000_field_create_instance($body_field, $instance); + _update_8003_field_create_instance($body_field, $instance); module_load_install('entity'); // Assign form settings for the 'default' form mode. diff --git a/core/modules/field/field.install b/core/modules/field/field.install index 1b5ba96..3163c81 100644 --- a/core/modules/field/field.install +++ b/core/modules/field/field.install @@ -11,12 +11,15 @@ /** * Creates a field by writing directly to configuration. * + * Upgrades using this function need to use hook_update_dependencies() to ensure + * they get executed after field_update_8003(). + * * @param array $field_config * An array of field properties. * * @ingroup update_api */ -function _update_8000_field_create_field(array &$field_config) { +function _update_8003_field_create_field(array &$field_config) { $uuid = new Uuid(); // Merge in default values. @@ -56,14 +59,17 @@ function _update_8000_field_create_field(array &$field_config) { /** * Writes a field instance directly to configuration. * + * Upgrades using this function need to use hook_update_dependencies() to ensure + * they get executed after field_update_8003(). + * * @param array $field_config * An array of field properties. - * @param array $instance + * @param array $instance_config * An array of field instance properties. * * @ingroup update_api */ -function _update_8000_field_create_instance(array $field_config, array &$instance_config) { +function _update_8003_field_create_instance(array $field_config, array &$instance_config) { $uuid = new Uuid(); // Merge in defaults. @@ -89,18 +95,6 @@ function _update_8000_field_create_instance(array $field_config, array &$instanc } /** - * Implements hook_update_dependencies(). - */ -function field_update_dependencies() { - // Convert Field API to ConfigEntities after the {file.usage}.id column - // has moved to varchar. - $dependencies['field'][8003] = array( - 'file' => 8001, - ); - return $dependencies; -} - -/** * @addtogroup updates-7.x-to-8.x * @{ */ diff --git a/core/modules/file/file.install b/core/modules/file/file.install index 3ca855e..58bd7a8 100644 --- a/core/modules/file/file.install +++ b/core/modules/file/file.install @@ -234,6 +234,18 @@ function file_requirements($phase) { } /** + * Implements hook_update_dependencies(). + */ +function file_update_dependencies() { + // Convert image field's default image configuration to the new format after + // the fields and instances are converted ConfigEntities. + $dependencies['file'][8002] = array( + 'field' => 8003, + ); + return $dependencies; +} + +/** * Converts default_file_main variable to config. * * @ingroup config_upgrade @@ -264,26 +276,44 @@ function file_update_8001() { * Convert image field's default image configuration to the new format. */ function file_update_8002() { - if (module_exists('field_sql_storage')) { - $fields = field_read_fields(array('type' => 'image'), array('include_deleted' => TRUE, 'include_inactive' => TRUE)); - foreach ($fields as $field) { - if (!empty($field['settings']['default_image'])) { - $field['settings']['default_image'] = array($field['settings']['default_image']); + $updated_fields = array(); + foreach (config_get_storage_names_with_prefix('field.field.') as $config_name) { + $field_config = config($config_name); + // Only update image fields. + if ($field_config->get('type') == 'image') { + $settings = $field_config->get('settings'); + + if (!empty($settings['default_image'])) { + $settings['default_image'] = array($settings['default_image']); } else { - $field['settings']['default_image'] = array(); + $settings['default_image'] = array(); } - field_update_field($field); + $field_config->set('settings', $settings); + $field_config->save(); + + // Keep a list of updated fields so we know what instances needs updating + // as well. + $updated_fields[] = $field_config->get('uuid'); + } + } + + // Update the instances, if needed. + if (!empty($updated_fields)) { + foreach (config_get_storage_names_with_prefix('field.instance.') as $config_name) { + $instance_config = config($config_name); + // Only update image fields that use the default SQL storage. + if (in_array($instance_config->get('field_uuid'), $updated_fields)) { + $settings = $instance_config->get('settings'); - $instances = field_read_instances(array('field_name' => $field['field_name'])); - foreach ($instances as $instance) { - if (!empty($instance['settings']['default_image'])) { - $instance['settings']['default_image'] = array($instance['settings']['default_image']); + if (!empty($settings['default_image'])) { + $settings['default_image'] = array($settings['default_image']); } else { - $instance['settings']['default_image'] = array(); + $settings['default_image'] = array(); } - field_update_instance($instance); + $instance_config->set('settings', $settings); + $instance_config->save(); } } } diff --git a/core/modules/user/user.install b/core/modules/user/user.install index 078e7e6..b3e3c15 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -724,7 +724,7 @@ function user_update_8011() { 'default_image' => FALSE, ), ); - _update_8000_field_create_field($field); + _update_8003_field_create_field($field); $instance = array( 'id' => 'user.user.user_picture', @@ -744,7 +744,7 @@ function user_update_8011() { 'default_image' => !empty($default_image_fid) ? $default_image_fid : 0, ), ); - _update_8000_field_create_instance($field, $instance); + _update_8003_field_create_instance($field, $instance); module_load_install('entity'); if (update_variable_get('user_pictures', 0)) {