function image_entity_presave

Same name and namespace in other branches
  1. 8.9.x core/modules/image/image.module \image_entity_presave()
  2. 10 core/modules/image/image.module \image_entity_presave()
  3. 11.x core/modules/image/image.module \image_entity_presave()

Implements hook_entity_presave().

Transforms default image of image field from array into single value at save.

File

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

Code

function image_entity_presave(EntityInterface $entity) {
    // Get the default image settings, return if not saving an image field storage
    // or image field entity.
    $default_image = [];
    if (($entity instanceof FieldStorageConfigInterface || $entity instanceof FieldConfigInterface) && $entity->getType() == 'image') {
        $default_image = $entity->getSetting('default_image');
    }
    else {
        return;
    }
    if ($entity->isSyncing()) {
        return;
    }
    $uuid = $default_image['uuid'];
    if ($uuid) {
        $original_uuid = isset($entity->original) ? $entity->original
            ->getSetting('default_image')['uuid'] : NULL;
        if ($uuid != $original_uuid) {
            $file = \Drupal::service('entity.repository')->loadEntityByUuid('file', $uuid);
            if ($file) {
                $image = \Drupal::service('image.factory')->get($file->getFileUri());
                $default_image['width'] = $image->getWidth();
                $default_image['height'] = $image->getHeight();
            }
            else {
                $default_image['uuid'] = NULL;
            }
        }
    }
    // Both FieldStorageConfigInterface and FieldConfigInterface have a
    // setSetting() method.
    $entity->setSetting('default_image', $default_image);
}

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