function image_field_storage_config_update

Same name in other branches
  1. 8.9.x core/modules/image/image.module \image_field_storage_config_update()
  2. 10 core/modules/image/image.module \image_field_storage_config_update()

Implements hook_ENTITY_TYPE_update() for 'field_storage_config'.

File

core/modules/image/image.module, line 385

Code

function image_field_storage_config_update(FieldStorageConfigInterface $field_storage) {
    if ($field_storage->getType() != 'image') {
        // Only act on image fields.
        return;
    }
    $prior_field_storage = $field_storage->original;
    // The value of a managed_file element can be an array if #extended == TRUE.
    $uuid_new = $field_storage->getSetting('default_image')['uuid'];
    $uuid_old = $prior_field_storage->getSetting('default_image')['uuid'];
    $file_new = $uuid_new ? \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid_new) : FALSE;
    if ($uuid_new != $uuid_old) {
        // Is there a new file?
        if ($file_new) {
            $file_new->setPermanent();
            $file_new->save();
            \Drupal::service('file.usage')->add($file_new, 'image', 'default_image', $field_storage->uuid());
        }
        // Is there an old file?
        if ($uuid_old && ($file_old = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid_old))) {
            \Drupal::service('file.usage')->delete($file_old, 'image', 'default_image', $field_storage->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());
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.