You are here

function image_field_config_update in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/image/image.module \image_field_config_update()
  2. 9 core/modules/image/image.module \image_field_config_update()

Implements hook_ENTITY_TYPE_update() for 'field_config'.

File

core/modules/image/image.module, line 414
Exposes global functionality for creating image styles.

Code

function image_field_config_update(FieldConfigInterface $field) {
  $field_storage = $field
    ->getFieldStorageDefinition();
  if ($field_storage
    ->getType() != 'image') {

    // Only act on image fields.
    return;
  }
  $prior_instance = $field->original;
  $uuid_new = $field
    ->getSetting('default_image')['uuid'];
  $uuid_old = $prior_instance
    ->getSetting('default_image')['uuid'];

  // If the old and new files do not match, update the default accordingly.
  $file_new = $uuid_new ? \Drupal::service('entity.repository')
    ->loadEntityByUuid('file', $uuid_new) : FALSE;
  if ($uuid_new != $uuid_old) {

    // Save the new file, if present.
    if ($file_new) {
      $file_new
        ->setPermanent();
      $file_new
        ->save();
      \Drupal::service('file.usage')
        ->add($file_new, 'image', 'default_image', $field
        ->uuid());
    }

    // Delete the old file, if present.
    if ($uuid_old && ($file_old = \Drupal::service('entity.repository')
      ->loadEntityByUuid('file', $uuid_old))) {
      \Drupal::service('file.usage')
        ->delete($file_old, 'image', 'default_image', $field
        ->uuid());
    }
  }

  // If the upload destination changed, then move the file.
  if ($file_new && StreamWrapperManager::getScheme($file_new
    ->getFileUri()) != $field_storage
    ->getSetting('uri_scheme')) {
    $directory = $field_storage
      ->getSetting('uri_scheme') . '://default_images/';
    \Drupal::service('file_system')
      ->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY);
    \Drupal::service('file.repository')
      ->move($file_new, $directory . $file_new
      ->getFilename());
  }
}