You are here

public function MediaExpireService::unpublishExpiredMedia in Media Expire 8

Same name and namespace in other branches
  1. 8.2 src/MediaExpireService.php \Drupal\media_expire\MediaExpireService::unpublishExpiredMedia()

Unpublishes already expired media elements.

File

src/MediaExpireService.php, line 48

Class

MediaExpireService
Contains the media unpublish logic.

Namespace

Drupal\media_expire

Code

public function unpublishExpiredMedia() {

  /** @var \Drupal\media_entity\Entity\MediaBundle[] $bundles */
  $bundles = $this->entityTypeManager
    ->getStorage('media_bundle')
    ->loadMultiple();
  foreach ($bundles as $bundle) {
    if ($bundle
      ->getThirdPartySetting('media_expire', 'enable_expiring')) {
      $expireField = $bundle
        ->getThirdPartySetting('media_expire', 'expire_field');
      $query = $this->queryFactory
        ->get('media', 'AND');
      $query
        ->condition('status', 1);
      $query
        ->condition('bundle', $bundle
        ->id());
      $query
        ->condition($expireField, date("Y-m-d\\TH:i:s"), '<');
      $entityIds = $query
        ->execute();

      /** @var \Drupal\media_entity\Entity\Media[] $medias */
      $medias = $this->entityTypeManager
        ->getStorage('media')
        ->loadMultiple($entityIds);
      foreach ($medias as $media) {
        $media
          ->setPublished(Media::NOT_PUBLISHED);
        $media->{$expireField}
          ->removeItem(0);
        $media
          ->save();
      }
    }
  }
}