diff --git a/core/modules/field/field.install b/core/modules/field/field.install index dc20e25..24b2950 100644 --- a/core/modules/field/field.install +++ b/core/modules/field/field.install @@ -537,4 +537,3 @@ function field_update_8004() { * @} End of "addtogroup updates-7.x-to-8.x". * The next series of updates should start at 9000. */ - diff --git a/core/modules/file/file.install b/core/modules/file/file.install index 3ca855e..2327bb3 100644 --- a/core/modules/file/file.install +++ b/core/modules/file/file.install @@ -259,32 +259,3 @@ function file_update_8001() { ); db_change_field('file_usage', 'id', 'id', $spec); } - -/** -* 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']); - } - else { - $field['settings']['default_image'] = array(); - } - field_update_field($field); - - $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']); - } - else { - $instance['settings']['default_image'] = array(); - } - field_update_instance($instance); - } - } - } -} diff --git a/core/modules/file/file.module b/core/modules/file/file.module index 18dae26..dfccd33 100644 --- a/core/modules/file/file.module +++ b/core/modules/file/file.module @@ -1135,7 +1135,11 @@ function file_managed_file_submit($form, &$form_state) { $fids = array_diff($fids, $remove_fids); } else { + // If we deal with single upload element remove the file and set + // element's value to empty array (file could not be removed from + // element if we don't do that). $remove_fids = $fids; + $fids = array(); } foreach ($remove_fids as $fid) { diff --git a/core/modules/image/image.field.inc b/core/modules/image/image.field.inc index a287620..eed43df 100644 --- a/core/modules/image/image.field.inc +++ b/core/modules/image/image.field.inc @@ -18,7 +18,7 @@ function image_field_info() { 'description' => t('This field stores the ID of an image file as an integer value.'), 'settings' => array( 'uri_scheme' => file_default_scheme(), - 'default_image' => array(), + 'default_image' => 0, 'column_groups' => array( 'file' => array( 'label' => t('File'), @@ -44,7 +44,7 @@ function image_field_info() { 'title_field_required' => 0, 'max_resolution' => '', 'min_resolution' => '', - 'default_image' => array(), + 'default_image' => 0, ), 'default_widget' => 'image_image', 'default_formatter' => 'image', @@ -79,7 +79,7 @@ function image_field_settings_form($field, $instance) { '#title' => t('Default image'), '#type' => 'managed_file', '#description' => t('If no image is uploaded, this image will be shown on display.'), - '#default_value' => $field['settings']['default_image'], + '#default_value' => empty($field['settings']['default_image']) ? array() : array($field['settings']['default_image']), '#upload_location' => $settings['uri_scheme'] . '://default_images/', ); @@ -197,7 +197,7 @@ function image_field_instance_settings_form($field, $instance) { '#title' => t('Default image'), '#type' => 'managed_file', '#description' => t("If no image is uploaded, this image will be shown on display and will override the field's default image."), - '#default_value' => $settings['default_image'], + '#default_value' => empty($settings['default_image']) ? array() : array($settings['default_image']), '#upload_location' => $field['settings']['uri_scheme'] . '://default_images/', ); @@ -234,11 +234,11 @@ function image_field_prepare_view($entity_type, $entities, $field, $instances, $ $fid = array(); // Use the default for the instance if one is available. if (!empty($instances[$id]['settings']['default_image'])) { - $fid = $instances[$id]['settings']['default_image']; + $fid = array($instances[$id]['settings']['default_image']); } // Otherwise, use the default for the field. elseif (!empty($field['settings']['default_image'])) { - $fid = $field['settings']['default_image']; + $fid = array($field['settings']['default_image']); } // Add the default image if one is found. diff --git a/core/modules/image/image.module b/core/modules/image/image.module index a7696a6..a13bbc6 100644 --- a/core/modules/image/image.module +++ b/core/modules/image/image.module @@ -1030,3 +1030,23 @@ function image_filter_keyword($value, $current_pixels, $new_pixels) { function _image_effect_definitions_sort($a, $b) { return strcasecmp($a['name'], $b['name']); } + +/** + * Implements hook_entity_presave(). + * + * Transforms default image of image field from array into single value at save. + */ +function image_entity_presave(Drupal\Core\Entity\EntityInterface $entity, $type) { + $instance = $type == 'field_instance'; + $instance &= !empty($entity->field_name) && config('field.field.' . $entity->field_name)->get('type') == 'image'; + $field = $type == 'field_entity' && $entity->type == 'image'; + + if ($instance || $field) { + if (is_array($entity->settings['default_image']) && !empty($entity->settings['default_image'][0])) { + $entity->settings['default_image'] = $entity->settings['default_image'][0]; + } + else { + $entity->settings['default_image'] = 0; + } + } +} diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php index 40e380d..78a957f 100644 --- a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php +++ b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php @@ -43,10 +43,10 @@ function testDefaultImages() { // Create an image field and add an instance to the article content type. $field_name = strtolower($this->randomName()); $field_settings = array( - 'default_image' => array($default_images['field']->fid), + 'default_image' => $default_images['field']->fid, ); $instance_settings = array( - 'default_image' => array($default_images['instance']->fid), + 'default_image' => $default_images['instance']->fid, ); $widget_settings = array( 'preview_image_style' => 'medium', @@ -63,7 +63,7 @@ function testDefaultImages() { 'label' => $instance['label'], 'required' => $instance['required'], 'settings' => array( - 'default_image' => array($default_images['instance2']->fid), + 'default_image' => $default_images['instance2']->fid, ), ); field_create_instance($instance2); @@ -179,7 +179,7 @@ function testDefaultImages() { ); // Upload a new default for the article's field instance. - $instance['settings']['default_image'] = array($default_images['instance_new']->fid); + $instance['settings']['default_image'] = $default_images['instance_new']->fid; field_update_instance($instance); // Confirm the new field instance default is used on the article field @@ -218,7 +218,7 @@ function testDefaultImages() { ); // Remove the instance default from articles. - $instance['settings']['default_image'] = NULL; + $instance['settings']['default_image'] = 0; field_update_instance($instance); // Confirm the article field instance default has been removed. diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDisplayTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDisplayTest.php index c30c686..f941953 100644 --- a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDisplayTest.php +++ b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDisplayTest.php @@ -230,7 +230,7 @@ function testImageFieldDefaultImage() { // Clear field info cache so the new default image is detected. field_info_cache_clear(); $field = field_info_field($field_name); - $image = file_load($field['settings']['default_image'][0]); + $image = file_load($field['settings']['default_image']); $this->assertTrue($image->status == FILE_STATUS_PERMANENT, 'The default image status is permanent.'); $default_output = theme('image', array('uri' => $image->uri)); $this->drupalGet('node/' . $node->nid); @@ -272,7 +272,7 @@ function testImageFieldDefaultImage() { field_info_cache_clear(); $private_field = field_info_field($private_field_name); - $image = file_load($private_field['settings']['default_image'][0]); + $image = file_load($private_field['settings']['default_image']); $this->assertEqual('private', file_uri_scheme($image->uri), 'Default image uses private:// scheme.'); $this->assertTrue($image->status == FILE_STATUS_PERMANENT, 'The default image status is permanent.'); // Create a new node with no image attached and ensure that default private diff --git a/core/modules/user/user.install b/core/modules/user/user.install index 4f22958..bb01a8f 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -732,7 +732,7 @@ function user_update_8011() { 'title_field' => 0, 'max_resolution' => update_variable_get('user_picture_dimensions', '85x85'), 'min_resolution' => '', - 'default_image' => !empty($default_image_fid) ? $default_image_fid : 0, + 'default_image' => !empty($default_image_fid) ? array($default_image_fid) : array(), ), ); _update_7000_field_create_instance($field, $instance);