diff --git modules/image/image.field.inc modules/image/image.field.inc index 249195d..6b23108 100644 --- modules/image/image.field.inc +++ modules/image/image.field.inc @@ -50,7 +50,8 @@ function image_field_settings_form($field, $instance) { '#options' => $scheme_options, '#default_value' => $settings['uri_scheme'], '#description' => t('Select where the final files should be stored. Private file storage has significantly more overhead than public files, but allows restricted access to files within this field.'), - ); + ) + element_info('radios'); + array_unshift($form['uri_scheme']['#process'], 'image_field_settings_uri_scheme_process'); $form['default_image'] = array( '#title' => t('Default image'), @@ -556,3 +557,15 @@ function theme_image_formatter($variables) { return $output; } + +function image_field_settings_uri_scheme_process($element, $form_state, &$complete_form) { + $array_parents = $element['#array_parents']; + // Remove the uri_scheme key and add default_image instead. + $array_parents[count($array_parents) - 1] = 'default_image'; + $default_image_element = &$complete_form; + foreach ($array_parents as $key) { + $default_image_element = &$default_image_element[$key]; + } + $default_image_element['#upload_location'] = $element['#value'] . '://default_image'; + return $element; +} diff --git modules/image/image.module modules/image/image.module index 23f2e9b..8751507 100644 --- modules/image/image.module +++ modules/image/image.module @@ -414,6 +414,47 @@ function image_image_style_delete($style) { } /** + * Implements hook_field_delete_field(). + */ +function image_field_delete_field($field) { + if ($field['type'] != 'image') { + return; + } + + // The value of a managed_file element can be an array if #extended == TRUE. + $fid = (is_array($field['settings']['default_image']) ? $field['settings']['default_image']['fid'] : $field['settings']['default_image']); + if ($fid && ($file = file_load($fid))) { + file_usage_delete($file, 'image', 'default_image', $field['id'], 1); + } +} + +/** + * Implements hook_field_update_field(). + */ +function image_field_update_field($field, $prior_field, $has_data) { + if ($field['type'] != 'image') { + return; + } + + // The value of a managed_file element can be an array if #extended == TRUE. + $fid_new = (is_array($field['settings']['default_image']) ? $field['settings']['default_image']['fid'] : $field['settings']['default_image']); + $fid_old = (is_array($prior_field['settings']['default_image']) ? $prior_field['settings']['default_image']['fid'] : $prior_field['settings']['default_image']); + if ($fid_new != $fid_old) { + if ($fid_new && ($file_new = file_load($fid_new))) { + if ($file_new->status != FILE_STATUS_PERMANENT) { + $file_new->status = FILE_STATUS_PERMANENT; + file_save($file_new); + } + file_usage_add($file_new, 'image', 'default_image', $field['id'], 1); + } + + if ($fid_old && ($file_old = file_load($fid_old))) { + file_usage_delete($file_old, 'image', 'default_image', $field['id'], 1); + } + } +} + +/** * Clear cached versions of a specific file in all styles. * * @param $path diff --git modules/image/image.test modules/image/image.test index 7529add..e8d61a6 100644 --- modules/image/image.test +++ modules/image/image.test @@ -779,7 +779,7 @@ class ImageFieldDisplayTestCase extends ImageFieldTestCase { // that would be used on the image field. $this->assertNoPattern('