public static function BrightcovePlaylist::createOrUpdate in Brightcove Video Connect 3.x
Same name and namespace in other branches
- 8.2 src/Entity/BrightcovePlaylist.php \Drupal\brightcove\Entity\BrightcovePlaylist::createOrUpdate()
- 8 src/Entity/BrightcovePlaylist.php \Drupal\brightcove\Entity\BrightcovePlaylist::createOrUpdate()
Create or update an existing playlist from a Brightcove Playlist object.
Parameters
\Brightcove\Item\Playlist $playlist: Brightcove Playlist object.
\Drupal\Core\Entity\EntityStorageInterface $playlist_storage: Playlist EntityStorage.
\Drupal\Core\Entity\EntityStorageInterface $video_storage: Video EntityStorage.
int|null $api_client_id: The ID of the BrightcoveAPIClient entity.
Throws
\Exception If BrightcoveAPIClient ID is missing when a new entity is being created.
2 calls to BrightcovePlaylist::createOrUpdate()
- BrightcovePlaylistController::update in src/Controller/ BrightcovePlaylistController.php 
- Menu callback to update the existing Playlist with the latest version.
- BrightcovePlaylistQueueWorker::processItem in src/Plugin/ QueueWorker/ BrightcovePlaylistQueueWorker.php 
- Works on a single queue item.
File
- src/Entity/ BrightcovePlaylist.php, line 721 
Class
- BrightcovePlaylist
- Defines the Brightcove Playlist.
Namespace
Drupal\brightcove\EntityCode
public static function createOrUpdate(Playlist $playlist, EntityStorageInterface $playlist_storage, EntityStorageInterface $video_storage, $api_client_id = NULL) {
  // May throw an \Exception if any of the videos is not found.
  $videos = self::extractVideosArray($playlist, $video_storage);
  // Only save the brightcove_playlist entity if it's really updated or
  // created now.
  $needs_save = FALSE;
  // Try to get an existing playlist.
  $existing_playlist = $playlist_storage
    ->getQuery()
    ->condition('playlist_id', $playlist
    ->getId())
    ->execute();
  // Update existing playlist if needed.
  if (!empty($existing_playlist)) {
    // Load Brightcove Playlist.
    $playlist_entity_id = reset($existing_playlist);
    /** @var BrightcovePlaylist $playlist_entity */
    $playlist_entity = BrightcovePlaylist::load($playlist_entity_id);
    // Update playlist if it is changed on Brightcove.
    if ($playlist_entity
      ->getChangedTime() < ($updated_at = strtotime($playlist
      ->getUpdatedAt()))) {
      $needs_save = TRUE;
      // Update changed time.
      $playlist_entity
        ->setChangedTime($updated_at);
    }
  }
  else {
    $needs_save = TRUE;
    // Create new Brightcove Playlist entity.
    /** @var BrightcovePlaylist $playlist_entity */
    $playlist_entity = BrightcovePlaylist::create([
      'api_client' => [
        'target_id' => $api_client_id,
      ],
      'playlist_id' => $playlist
        ->getId(),
      'created' => strtotime($playlist
        ->getCreatedAt()),
      'changed' => strtotime($playlist
        ->getUpdatedAt()),
    ]);
  }
  if ($needs_save) {
    // Update type field if needed.
    if ($playlist_entity
      ->getType() != ($type = $playlist
      ->getType())) {
      $playlist_entity
        ->setType($type);
    }
    // Update name field if needed.
    if ($playlist_entity
      ->getName() != ($name = $playlist
      ->getName())) {
      $playlist_entity
        ->setName($name);
    }
    // Update favorite field if needed.
    if ($playlist_entity
      ->isFavorite() != ($favorite = $playlist
      ->isFavorite())) {
      // This is a non-modifiable field so it does not have a specific
      // setter.
      $playlist_entity
        ->set('favorite', $favorite);
    }
    // Update reference ID field if needed.
    if ($playlist_entity
      ->getReferenceId() != ($reference_id = $playlist
      ->getReferenceId())) {
      $playlist_entity
        ->setReferenceId($reference_id);
    }
    // Update description field if needed.
    if ($playlist_entity
      ->getDescription() != ($description = $playlist
      ->getDescription())) {
      $playlist_entity
        ->setDescription($description);
    }
    // Update tags field if needed.
    $playlist_search = $playlist
      ->getSearch();
    preg_match('/^(\\+?)([^\\+].*):(?:,?"(.*?[^"])")$/i', $playlist_search, $matches);
    if (count($matches) == 4 && $matches[2] == 'tags') {
      $playlist_tags = explode('","', $matches[3]);
      // Save or update tag search condition if needed.
      $playlist_search_condition = $matches[1] == '+' ? self::TAG_SEARCH_CONTAINS_ALL : self::TAG_SEARCH_CONTAINS_ONE_OR_MORE;
      if ($playlist_entity
        ->getTagsSearchCondition() != $playlist_search_condition) {
        $playlist_entity
          ->setTagsSearchCondition($playlist_search_condition);
      }
      BrightcoveUtil::saveOrUpdateTags($playlist_entity, $api_client_id, $playlist_tags);
    }
    // Update videos field if needed.
    if ($playlist_entity
      ->getVideos() != $videos) {
      $playlist_entity
        ->setVideos($videos);
    }
    // @TODO: State/published.
    $playlist_entity
      ->save();
  }
}