You are here

public function PhotosUpload::saveExistingMedia in Album Photos 8.5

Same name and namespace in other branches
  1. 6.0.x src/PhotosUpload.php \Drupal\photos\PhotosUpload::saveExistingMedia()

Attach media to PhotosImage entity.

Parameters

int $mediaId: The media entity_id.

int $albumId: The album entity_id.

Return value

bool TRUE if media saved successfully.

Overrides PhotosUploadInterface::saveExistingMedia

File

src/PhotosUpload.php, line 256

Class

PhotosUpload
Functions to help with uploading images to albums.

Namespace

Drupal\photos

Code

public function saveExistingMedia($mediaId, $albumId) {

  /* @var \Drupal\media\MediaInterface $mediaItem */
  $mediaItem = NULL;
  try {
    $mediaItem = $this->entityTypeManager
      ->getStorage('media')
      ->load($mediaId);
  } catch (InvalidPluginDefinitionException $e) {
  } catch (PluginNotFoundException $e) {
  }
  if ($mediaItem) {
    $newPhotosImageEntity = [
      'album_id' => $albumId,
      'title' => $mediaItem
        ->getName(),
    ];

    // Check default media field.
    $uploadField = \Drupal::config('photos.settings')
      ->get('multi_upload_default_field');
    $uploadFieldParts = explode(':', $uploadField);
    $field = isset($uploadFieldParts[0]) ? $uploadFieldParts[0] : 'field_image';
    $allBundleFields = \Drupal::service('entity_field.manager')
      ->getFieldDefinitions('photos_image', 'photos_image');
    if (isset($allBundleFields[$field])) {
      $fieldType = $allBundleFields[$field]
        ->getType();
      if ($fieldType == 'entity_reference') {
        $mediaField = isset($uploadFieldParts[1]) ? $uploadFieldParts[1] : '';
        $mediaBundle = isset($uploadFieldParts[2]) ? $uploadFieldParts[2] : '';
        if ($mediaField && $mediaBundle) {

          // Set photos_image media reference field.
          $newPhotosImageEntity[$field] = [
            'target_id' => $mediaId,
          ];
        }

        // Save PhotosImage entity.
        $photosImage = PhotosImage::create($newPhotosImageEntity);
        try {
          $photosImage
            ->save();
          if ($photosImage && $photosImage
            ->id()) {
            if (\Drupal::config('photos.settings')
              ->get('photos_user_count_cron')) {
              $user = \Drupal::currentUser();
              PhotosAlbum::setCount('user_image', $photosImage
                ->getOwnerId() ? $photosImage
                ->getOwnerId() : $user
                ->id());
              PhotosAlbum::setCount('node_album', $albumId);
            }
            return TRUE;
          }
        } catch (EntityStorageException $e) {
          watchdog_exception('photos', $e);
        }
      }
    }
  }
  return FALSE;
}