class BrightcovePlaylist in Brightcove Video Connect 8
Same name and namespace in other branches
- 8.2 src/Entity/BrightcovePlaylist.php \Drupal\brightcove\Entity\BrightcovePlaylist
- 3.x src/Entity/BrightcovePlaylist.php \Drupal\brightcove\Entity\BrightcovePlaylist
Defines the Brightcove Playlist.
Plugin annotation
@ContentEntityType(
id = "brightcove_playlist",
label = @Translation("Brightcove Playlist"),
handlers = {
"view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
"list_builder" = "Drupal\brightcove\BrightcovePlaylistListBuilder",
"views_data" = "Drupal\brightcove\Entity\BrightcovePlaylistViewsData",
"form" = {
"default" = "Drupal\brightcove\Form\BrightcovePlaylistForm",
"add" = "Drupal\brightcove\Form\BrightcovePlaylistForm",
"edit" = "Drupal\brightcove\Form\BrightcovePlaylistForm",
"delete" = "Drupal\brightcove\Form\BrightcoveEntityDeleteForm",
},
"access" = "Drupal\brightcove\Access\BrightcovePlaylistAccessControlHandler",
"route_provider" = {
"html" = "Drupal\brightcove\BrightcovePlaylistHtmlRouteProvider",
},
"inline_form" = "Drupal\brightcove\Form\BrightcoveInlineForm",
},
base_table = "brightcove_playlist",
admin_permission = "administer brightcove playlists",
entity_keys = {
"id" = "bcplid",
"label" = "name",
"uuid" = "uuid",
"uid" = "uid",
"langcode" = "langcode",
"status" = "status",
},
links = {
"canonical" = "/brightcove_playlist/{brightcove_playlist}",
"add-form" = "/brightcove_playlist/add",
"edit-form" = "/brightcove_playlist/{brightcove_playlist}/edit",
"delete-form" = "/brightcove_playlist/{brightcove_playlist}/delete",
"collection" = "/admin/content/brightcove_playlist",
},
field_ui_base_route = "brightcove_playlist.settings",
constraints = {
"brightcove_video_by_api_client_constraint" = {}
}
)
Hierarchy
- class \Drupal\Core\Entity\EntityBase implements EntityInterface uses RefinableCacheableDependencyTrait, DependencySerializationTrait
- class \Drupal\Core\Entity\ContentEntityBase implements \Drupal\Core\Entity\IteratorAggregate, ContentEntityInterface, TranslationStatusInterface uses EntityChangesDetectionTrait, SynchronizableEntityTrait
- class \Drupal\brightcove\Entity\BrightcoveCmsEntity implements BrightcoveCMSEntityInterface uses EntityChangedFieldsTrait, EntityChangedTrait
- class \Drupal\brightcove\Entity\BrightcoveVideoPlaylistCmsEntity implements BrightcoveVideoPlaylistCMSEntityInterface
- class \Drupal\brightcove\Entity\BrightcovePlaylist implements BrightcovePlaylistInterface
- class \Drupal\brightcove\Entity\BrightcoveVideoPlaylistCmsEntity implements BrightcoveVideoPlaylistCMSEntityInterface
- class \Drupal\brightcove\Entity\BrightcoveCmsEntity implements BrightcoveCMSEntityInterface uses EntityChangedFieldsTrait, EntityChangedTrait
- class \Drupal\Core\Entity\ContentEntityBase implements \Drupal\Core\Entity\IteratorAggregate, ContentEntityInterface, TranslationStatusInterface uses EntityChangesDetectionTrait, SynchronizableEntityTrait
Expanded class hierarchy of BrightcovePlaylist
4 files declare their use of BrightcovePlaylist
- BrightcovePlaylistController.php in src/
Controller/ BrightcovePlaylistController.php - BrightcovePlaylistForm.php in src/
Form/ BrightcovePlaylistForm.php - BrightcovePlaylistQueueWorker.php in src/
Plugin/ QueueWorker/ BrightcovePlaylistQueueWorker.php - BrightcoveUtil.php in src/
BrightcoveUtil.php
File
- src/
Entity/ BrightcovePlaylist.php, line 63
Namespace
Drupal\brightcove\EntityView source
class BrightcovePlaylist extends BrightcoveVideoPlaylistCmsEntity implements BrightcovePlaylistInterface {
/**
* Manual playlist type.
*/
const TYPE_MANUAL = 0;
/**
* Smart playlist type.
*/
const TYPE_SMART = 1;
/**
* Tag search condition "one_or_more".
*/
const TAG_SEARCH_CONTAINS_ONE_OR_MORE = 'contains_one_or_more';
/**
* Tag search condition "all".
*/
const TAG_SEARCH_CONTAINS_ALL = 'contains_all';
/**
* Get Playlist types.
*
* @param int|null $type
* Get specific type of playlist types.
* Possible values are TYPE_MANUAL, TYPE_SMART.
*
* @return array
* Manual and smart playlist types.
*
* @throws \Exception
* If an invalid type was given.
*
* @see http://docs.brightcove.com/en/video-cloud/cms-api/references/playlist-fields-reference.html
*/
public static function getTypes($type = NULL) {
$manual = [
'EXPLICIT' => t('Manual: Add videos manually'),
];
$smart_label = t('Smart: Add videos automatically based on tags')
->render();
$smart = [
$smart_label => [
'ACTIVATED_OLDEST_TO_NEWEST' => t('Smart: Activated Date (Oldest First)'),
'ACTIVATED_NEWEST_TO_OLDEST' => t('Smart: Activated Date (Newest First)'),
'ALPHABETICAL' => t('Smart: Video Name (A-Z)'),
'PLAYS_TOTAL' => t('Smart: Total Plays'),
'PLAYS_TRAILING_WEEK' => t('Smart: Trailing Week Plays'),
'START_DATE_OLDEST_TO_NEWEST' => t('Smart: Start Date (Oldest First)'),
'START_DATE_NEWEST_TO_OLDEST' => t('Smart: Start Date (Newest First)'),
],
];
// Get specific type of playlist if set.
if (!is_null($type)) {
switch ($type) {
case self::TYPE_MANUAL:
return $manual;
case self::TYPE_SMART:
return reset($smart);
default:
throw new \Exception('The type must be either TYPE_MANUAL or TYPE_SMART');
}
}
return $manual + $smart;
}
/**
* Implements callback_allowed_values_function().
*
* @param \Drupal\Core\Field\FieldStorageDefinitionInterface $definition
* The field storage definition.
* @param \Drupal\Core\Entity\FieldableEntityInterface|null $entity
* (optional) The entity context if known, or NULL if the allowed values
* are being collected without the context of a specific entity.
* @param bool &$cacheable
* (optional) If an $entity is provided, the $cacheable parameter should be
* modified by reference and set to FALSE if the set of allowed values
* returned was specifically adjusted for that entity and cannot not be
* reused for other entities. Defaults to TRUE.
*
* @return array
* The array of allowed values. Keys of the array are the raw stored values
* (number or text), values of the array are the display labels. If $entity
* is NULL, you should return the list of all the possible allowed values
* in any context so that other code (e.g. Views filters) can support the
* allowed values for all possible entities and bundles.
*
* @throws \Exception
* If an invalid type was given.
*/
public static function typeAllowedValues(FieldStorageDefinitionInterface $definition, FieldableEntityInterface $entity = NULL, &$cacheable = TRUE) {
return self::getTypes();
}
/**
* {@inheritdoc}
*/
public function getType() {
return $this
->get('type')->value;
}
/**
* {@inheritdoc}
*/
public function setType($type) {
return $this
->set('type', $type);
}
/**
* {@inheritdoc}
*/
public function isFavorite() {
return (bool) $this
->get('favorite')->value;
}
/**
* {@inheritdoc}
*/
public function getPlaylistId() {
return $this
->get('playlist_id')->value;
}
/**
* {@inheritdoc}
*/
public function setPlaylistId($playlist_id) {
$this
->set('playlist_id', $playlist_id);
return $this;
}
/**
* {@inheritdoc}
*/
public function getTagsSearchCondition() {
return $this
->get('tags_search_condition')->value;
}
/**
* {@inheritdoc}
*/
public function setTagsSearchCondition($condition) {
return $this
->set('tags_search_condition', $condition);
}
/**
* {@inheritdoc}
*/
public function getVideos() {
return $this
->get('videos')
->getValue();
}
/**
* {@inheritdoc}
*/
public function setVideos(array $videos) {
$this
->set('videos', $videos);
return $this;
}
/**
* {@inheritdoc}
*
* @param bool $upload
* Whether to upload the video to Brightcove or not.
*/
public function save($upload = FALSE) {
// Check if it will be a new entity or an existing one being updated.
$status = $this
->id() ? SAVED_UPDATED : SAVED_NEW;
// Make sure that preSave runs before any modification is made for the
// entity.
$saved = parent::save();
if ($upload) {
$cms = BrightcoveUtil::getCmsApi($this
->getApiClient());
// Setup playlist object and set minimum required values.
$playlist = new Playlist();
$playlist
->setName($this
->getName());
// Save or update type if needed.
if ($this
->isFieldChanged('type')) {
$playlist
->setType($this
->getType());
// Unset search if the playlist is manual.
if ($playlist
->getType() == 'EXPLICIT') {
$playlist
->setSearch('');
$this
->setTags([]);
}
else {
$playlist
->setVideoIds([]);
$this
->setVideos([]);
}
}
// Save or update description if needed.
if ($this
->isFieldChanged('description')) {
$playlist
->setDescription($this
->getDescription());
}
// Save or update reference ID if needed.
if ($this
->isFieldChanged('reference_id')) {
$playlist
->setReferenceId($this
->getReferenceId());
}
// Save or update search if needed.
if ($this
->isFieldChanged('tags') || $this
->isFieldChanged('tags_search_condition')) {
$condition = '';
if ($this
->getTagsSearchCondition() == self::TAG_SEARCH_CONTAINS_ALL) {
$condition = '+';
}
$tags = '';
if (!empty($tag_items = $this
->getTags())) {
if (count($tag_items) == 1) {
$this
->setTagsSearchCondition(self::TAG_SEARCH_CONTAINS_ALL);
}
$tags .= $condition . 'tags:"';
$first = TRUE;
foreach ($tag_items as $tag) {
$tag_term = Term::load($tag['target_id']);
$tags .= ($first ? '' : '","') . $tag_term
->getName();
if ($first) {
$first = FALSE;
}
}
$tags .= '"';
}
$playlist
->setSearch($tags);
}
// Save or update videos list if needed.
if ($this
->isFieldChanged('videos')) {
$video_entities = $this
->getVideos();
$videos = [];
foreach ($video_entities as $video) {
$videos[] = BrightcoveVideo::load($video['target_id'])
->getVideoId();
}
$playlist
->setVideoIds($videos);
}
// Create or update a playlist.
switch ($status) {
case SAVED_NEW:
// Create new playlist on Brightcove.
$saved_playlist = $cms
->createPlaylist($playlist);
// Set the rest of the fields on BrightcoveVideo entity.
$this
->setPlaylistId($saved_playlist
->getId());
$this
->setCreatedTime(strtotime($saved_playlist
->getCreatedAt()));
break;
case SAVED_UPDATED:
// Set playlist ID.
$playlist
->setId($this
->getPlaylistId());
// Update playlist.
$saved_playlist = $cms
->updatePlaylist($playlist);
break;
}
// Update changed time and playlist entity with the video ID.
if (isset($saved_playlist)) {
$this
->setChangedTime(strtotime($saved_playlist
->getUpdatedAt()));
// Save the entity again to save some new values which are only
// available after creating/updating the playlist on Brightcove.
// Also don't change the save state to show the correct message when
// the entity is created or updated.
parent::save();
}
}
return $saved;
}
/**
* {@inheritdoc}
*
* @param bool $local_only
* Whether to delete the local version only or both local and Brightcove
* versions.
*/
public function delete($local_only = FALSE) {
// Delete playlist from Brightcove.
if (!$this
->isNew() && !$local_only) {
$cms = BrightcoveUtil::getCmsApi($this
->getApiClient());
$cms
->deletePlaylist($this
->getPlaylistId());
}
parent::delete();
}
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
// Set weights based on the real order of the fields.
$weight = -30;
/*
* Drupal-specific fields first.
*
* bcplid - Brightcove Playlist ID (Drupal-internal).
* uuid - UUID.
* - "Playlist type" comes here, but that's a Brightcove-specific field.
* - Title comes here, but that's the "Name" field from Brightcove.
* langcode - Language.
* api_client - Entityreference to BrightcoveAPIClient.
* - Brightcove fields come here.
* uid - Author.
* created - Posted.
* changed - Last modified.
*/
$fields['bcplid'] = BaseFieldDefinition::create('integer')
->setLabel(t('ID'))
->setDescription(t('The Drupal entity ID of the Brightcove Playlist.'))
->setReadOnly(TRUE);
$fields['uuid'] = BaseFieldDefinition::create('uuid')
->setLabel(t('UUID'))
->setDescription(t('The Brightcove Playlist UUID.'))
->setReadOnly(TRUE);
$fields['api_client'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('API Client'))
->setDescription(t('Brightcove API credentials (account) to use.'))
->setRequired(TRUE)
->setSetting('target_type', 'brightcove_api_client')
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => ++$weight,
])
->setDisplayOptions('view', [
'type' => 'hidden',
'label' => 'inline',
'weight' => $weight,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['player'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Player'))
->setDescription(t('Brightcove Player to be used for playback.'))
->setSetting('target_type', 'brightcove_player')
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => ++$weight,
])
->setDisplayOptions('view', [
'type' => 'hidden',
'label' => 'inline',
'weight' => $weight,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['type'] = BaseFieldDefinition::create('list_string')
->setLabel(t('Playlist Type'))
->setRequired(TRUE)
->setDefaultValue('EXPLICIT')
->setSetting('allowed_values_function', [
self::class,
'typeAllowedValues',
])
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => ++$weight,
])
->setDisplayOptions('view', [
'type' => 'list_default',
'label' => 'inline',
'weight' => $weight,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['name'] = BaseFieldDefinition::create('string')
->setLabel(t('Playlist name'))
->setDescription(t('Title of the playlist.'))
->setRequired(TRUE)
->setSettings([
'max_length' => 250,
'text_processing' => 0,
])
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => ++$weight,
])
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'hidden',
'weight' => $weight,
])
->setDisplayConfigurable('form', TRUE);
$fields['langcode'] = BaseFieldDefinition::create('language')
->setLabel(t('Language code'))
->setDescription(t('The language code for the Brightcove Video.'))
->setDisplayOptions('form', [
'type' => 'language_select',
'weight' => ++$weight,
])
->setDisplayConfigurable('form', TRUE);
/*
* Additional Brightcove fields, based on
* @see http://docs.brightcove.com/en/video-cloud/cms-api/references/cms-api/versions/v1/index.html#api-playlistGroup-Get_Playlists
*
* description - string - Playlist description
* favorite - boolean - Whether playlist is in favorites list
* playlist_id - string - The playlist id
* name - string - The playlist name
* reference_id - string - The playlist reference id
* type - string - The playlist type: EXPLICIT or smart playlist type
* videos - entityref/string array of video ids (EXPLICIT playlists only)
* search - string - Search string to retrieve the videos (smart playlists
* only)
*/
$fields['favorite'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Show Playlist in Sidebar'))
->setDescription(t('Whether playlist is in favorites list'))
->setDefaultValue(FALSE)
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'inline',
'weight' => ++$weight,
])
->setDisplayConfigurable('view', TRUE);
$fields['playlist_id'] = BaseFieldDefinition::create('string')
->setLabel(t('Playlist ID'))
->setDescription(t('Unique Playlist ID assigned by Brightcove.'))
->setReadOnly(TRUE)
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'inline',
'weight' => ++$weight,
])
->setDisplayConfigurable('view', TRUE);
$fields['reference_id'] = BaseFieldDefinition::create('string')
->setLabel(t('Reference ID'))
->addConstraint('UniqueField')
->setDescription(t('Value specified must be unique'))
->setSettings([
'max_length' => 150,
'text_processing' => 0,
])
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => ++$weight,
])
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'inline',
'weight' => $weight,
])
->setDefaultValueCallback(static::class . '::getDefaultReferenceId')
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['description'] = BaseFieldDefinition::create('string_long')
->setLabel(t('Short description'))
->setDisplayOptions('form', [
'type' => 'string_textarea',
'weight' => ++$weight,
])
->setDisplayOptions('view', [
'type' => 'basic_string',
'label' => 'above',
'weight' => $weight,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE)
->addPropertyConstraints('value', [
'Length' => [
'max' => 250,
],
]);
$fields['tags_search_condition'] = BaseFieldDefinition::create('list_string')
->setLabel(t('Tags search condition'))
->setRequired(TRUE)
->setDefaultValue(self::TAG_SEARCH_CONTAINS_ONE_OR_MORE)
->setSetting('allowed_values', [
self::TAG_SEARCH_CONTAINS_ONE_OR_MORE => t('contains one or more'),
self::TAG_SEARCH_CONTAINS_ALL => t('contains all'),
])
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => ++$weight,
])
->setDisplayConfigurable('form', TRUE);
$fields['tags'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Tags'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setSettings([
'target_type' => 'taxonomy_term',
'handler_settings' => [
'target_bundles' => [
BrightcoveVideo::TAGS_VID => BrightcoveVideo::TAGS_VID,
],
'auto_create' => TRUE,
],
])
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'weight' => ++$weight,
'settings' => [
'autocomplete_type' => 'tags',
],
])
->setDisplayOptions('view', [
'type' => 'entity_reference_label',
'label' => 'above',
'weight' => $weight,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['videos'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Videos'))
->setDescription(t('Videos in the playlist.'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setSettings([
'target_type' => 'brightcove_video',
'handler' => 'views',
'handler_settings' => [
'view' => [
'view_name' => 'brightcove_videos_by_api_client',
'display_name' => 'videos_entity_reference',
'arguments' => [],
],
],
])
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'weight' => ++$weight,
])
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'above',
'weight' => $weight,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['uid'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Authored by'))
->setDescription(t('The username of the Brightcove Playlist author.'))
->setSetting('target_type', 'user')
->setDefaultValueCallback('Drupal\\brightcove\\Entity\\BrightcovePlaylist::getCurrentUserId')
->setTranslatable(TRUE)
->setDisplayOptions('view', [
'label' => 'hidden',
'type' => 'author',
'weight' => ++$weight,
])
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'weight' => $weight,
'settings' => [
'match_operator' => 'CONTAINS',
'size' => '60',
'autocomplete_type' => 'tags',
'placeholder' => '',
],
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['status'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Publishing status'))
->setDescription(t('A boolean indicating whether the Brightcove Playlist is published.'))
->setDefaultValue(TRUE);
$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Created'))
->setDescription(t('The time that the Brightcove Playlist was created.'))
->setTranslatable(TRUE)
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'timestamp',
'weight' => ++$weight,
])
->setDisplayConfigurable('view', TRUE);
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the Brightcove Playlist was last edited.'))
->setTranslatable(TRUE);
return $fields;
}
/**
* Converts videos from \Brightcove\Object\Playlist to Drupal Field API array.
*
* @param \Brightcove\Object\Playlist $playlist
* The playlist whose videos should be extracted.
* @param \Drupal\Core\Entity\EntityStorageInterface $video_storage
* Video entity storage.
*
* @return array|null
* The Drupal Field API array that can be saved into a multivalue
* entity_reference field (like brightcove_playlist.videos), or NULL if the
* playlist does not have any videos.
*
* @throws \Exception
* Thrown when any of the videos is unavailable on the Drupal side.
*/
protected static function extractVideosArray(Playlist $playlist, EntityStorageInterface $video_storage) {
$videos = $playlist
->getVideoIds();
if (!$videos) {
return NULL;
}
$return = [];
foreach ($playlist
->getVideoIds() as $video_id) {
// Try to retrieve the video from Drupal's brightcove_video storage.
$bcvid = $video_storage
->getQuery()
->condition('video_id', $video_id)
->execute();
if ($bcvid) {
$bcvid = reset($bcvid);
$return[] = [
'target_id' => $bcvid,
];
}
else {
// If the video is not found, then throw this exception, which will
// effectively stop the queue worker, so the playlist with any "unknown"
// video will remain in the queue, so it could be picked up the next
// time hoping the video will be available by then.
throw new \Exception(t('Playlist contains a video that is not (yet) available on the Drupal site'));
}
}
return $return;
}
/**
* Create or update an existing playlist from a Brightcove Playlist object.
*
* @param \Brightcove\Object\Playlist $playlist
* Brightcove Playlist object.
* @param \Drupal\Core\Entity\EntityStorageInterface $playlist_storage
* Playlist EntityStorage.
* @param \Drupal\Core\Entity\EntityStorageInterface $video_storage
* Video EntityStorage.
* @param 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.
*/
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();
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BrightcoveCmsEntity:: |
public | function |
Returns the Brightcove Client API target ID. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Gets the Brightcove CMS entity creation timestamp. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public static | function | Default value callback for 'uid' base field definition. | |
BrightcoveCmsEntity:: |
public | function |
Returns the description. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Gets the Brightcove CMS entity name. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Returns the entity owner's user entity. Overrides EntityOwnerInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Returns the entity owner's user ID. Overrides EntityOwnerInterface:: |
|
BrightcoveCmsEntity:: |
public static | function | Load multiple CMS Entity for the given api client. | |
BrightcoveCmsEntity:: |
public static | function |
Changes the values of an entity before it is created. Overrides EntityBase:: |
|
BrightcoveCmsEntity:: |
public | function |
Acts on an entity before the presave hook is invoked. Overrides ContentEntityBase:: |
|
BrightcoveCmsEntity:: |
public | function |
Sets the Brightcove Client API target ID. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Sets the Brightcove CMS entity creation timestamp. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Sets the CMS entity's description. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Sets the Brightcove CMS entity name. Overrides BrightcoveCMSEntityInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Sets the entity owner's user entity. Overrides EntityOwnerInterface:: |
|
BrightcoveCmsEntity:: |
public | function |
Sets the entity owner's user ID. Overrides EntityOwnerInterface:: |
|
BrightcovePlaylist:: |
public static | function |
Provides base field definitions for an entity type. Overrides ContentEntityBase:: |
|
BrightcovePlaylist:: |
public static | function | Create or update an existing playlist from a Brightcove Playlist object. | |
BrightcovePlaylist:: |
public | function |
Overrides EntityBase:: |
|
BrightcovePlaylist:: |
protected static | function | Converts videos from \Brightcove\Object\Playlist to Drupal Field API array. | |
BrightcovePlaylist:: |
public | function |
Returns the Brightcove Playlist ID. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public | function |
Returns the tags search condition for smart playlist. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public | function |
Returns the playlist type. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public static | function | Get Playlist types. | |
BrightcovePlaylist:: |
public | function |
Returns the list of videos on the playlist. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public | function |
Returns the Brightcove Playlist favorite indicator. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public | function |
Overrides EntityBase:: |
|
BrightcovePlaylist:: |
public | function |
Sets The Brightcove Playlist ID. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public | function |
Sets the tags search condition for smart playlist. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public | function |
Sets the playlist's type. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
public | function |
Sets the playlist's videos. Overrides BrightcovePlaylistInterface:: |
|
BrightcovePlaylist:: |
constant | Tag search condition "all". | ||
BrightcovePlaylist:: |
constant | Tag search condition "one_or_more". | ||
BrightcovePlaylist:: |
public static | function | Implements callback_allowed_values_function(). | |
BrightcovePlaylist:: |
constant | Manual playlist type. | ||
BrightcovePlaylist:: |
constant | Smart playlist type. | ||
BrightcoveVideoPlaylistCmsEntity:: |
public static | function | Default value callback for 'reference_id' base field definition. | |
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Returns the player. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Returns the reference ID. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Returns the tags. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Returns the entity published status indicator. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Sets the player. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Sets the published status of the entity. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Sets the reference ID. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
BrightcoveVideoPlaylistCmsEntity:: |
public | function |
Sets the tags. Overrides BrightcoveVideoPlaylistCMSEntityInterface:: |
|
CacheableDependencyTrait:: |
protected | property | Cache contexts. | |
CacheableDependencyTrait:: |
protected | property | Cache max-age. | |
CacheableDependencyTrait:: |
protected | property | Cache tags. | |
CacheableDependencyTrait:: |
protected | function | Sets cacheability; useful for value object constructors. | |
ContentEntityBase:: |
protected | property | Language code identifying the entity active language. | |
ContentEntityBase:: |
protected | property | Local cache for the default language code. | |
ContentEntityBase:: |
protected | property | The default langcode entity key. | |
ContentEntityBase:: |
protected | property | Whether the revision translation affected flag has been enforced. | |
ContentEntityBase:: |
protected | property | Holds untranslatable entity keys such as the ID, bundle, and revision ID. | |
ContentEntityBase:: |
protected | property | Local cache for field definitions. | |
ContentEntityBase:: |
protected | property | The array of fields, each being an instance of FieldItemListInterface. | |
ContentEntityBase:: |
protected static | property | Local cache for fields to skip from the checking for translation changes. | |
ContentEntityBase:: |
protected | property | Indicates whether this is the default revision. | |
ContentEntityBase:: |
protected | property | The language entity key. | |
ContentEntityBase:: |
protected | property | Local cache for the available language objects. | |
ContentEntityBase:: |
protected | property | The loaded revision ID before the new revision was set. | |
ContentEntityBase:: |
protected | property | Boolean indicating whether a new revision should be created on save. | |
ContentEntityBase:: |
protected | property | The revision translation affected entity key. | |
ContentEntityBase:: |
protected | property | Holds translatable entity keys such as the label. | |
ContentEntityBase:: |
protected | property | A flag indicating whether a translation object is being initialized. | |
ContentEntityBase:: |
protected | property | An array of entity translation metadata. | |
ContentEntityBase:: |
protected | property | Whether entity validation was performed. | |
ContentEntityBase:: |
protected | property | Whether entity validation is required before saving the entity. | |
ContentEntityBase:: |
protected | property | The plain data values of the contained fields. | |
ContentEntityBase:: |
public | function |
Checks data value access. Overrides EntityBase:: |
1 |
ContentEntityBase:: |
public | function |
Adds a new translation to the translatable object. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the bundle of the entity. Overrides EntityBase:: |
|
ContentEntityBase:: |
public static | function |
Provides field definitions for a specific bundle. Overrides FieldableEntityInterface:: |
4 |
ContentEntityBase:: |
protected | function | Clear entity translation object cache to remove stale references. | |
ContentEntityBase:: |
public | function |
Creates a duplicate of the entity. Overrides EntityBase:: |
1 |
ContentEntityBase:: |
public | function |
Gets a field item list. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Gets the value of the given entity key, if defined. | 1 |
ContentEntityBase:: |
public | function |
Gets the definition of a contained field. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Gets an array of field definitions of all contained fields. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Gets an array of all field item lists. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Returns an array of field names to skip in ::hasTranslationChanges. | 1 |
ContentEntityBase:: |
public | function | ||
ContentEntityBase:: |
protected | function | ||
ContentEntityBase:: |
public | function |
Gets the loaded Revision ID of the entity. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the revision identifier of the entity. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets an array of field item lists for translatable fields. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Gets a translated field. | |
ContentEntityBase:: |
public | function |
Gets a translation of the data. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the languages the data is translated to. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the translation status. Overrides TranslationStatusInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the translatable object referring to the original language. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Determines whether the entity has a field with the given name. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Checks there is a translation for the given language code. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Determines if the current translation of the entity has unsaved changes. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the identifier. Overrides EntityBase:: |
|
ContentEntityBase:: |
protected | function | Instantiates a translation object for an existing translation. | |
ContentEntityBase:: |
public | function |
Checks if this entity is the default revision. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the translation is the default one. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks if untranslatable fields should affect only the default translation. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks if this entity is the latest revision. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether this is the latest revision affecting this translation. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Determines whether a new revision should be created on save. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the translation is new. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the current translation is affected by the current revision. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks if the revision translation affected flag value has been enforced. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Returns the translation support status. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether entity validation is required before saving the entity. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Gets the label of the entity. Overrides EntityBase:: |
2 |
ContentEntityBase:: |
public | function |
Gets the language of the entity. Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function |
Reacts to changes to a field. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Acts on a created entity before hooks are invoked. Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function |
Acts on a saved entity before the insert or update hook is invoked. Overrides EntityBase:: |
5 |
ContentEntityBase:: |
public | function |
Acts on a revision before it gets saved. Overrides RevisionableInterface:: |
2 |
ContentEntityBase:: |
public | function |
Gets a list of entities referenced by this entity. Overrides EntityBase:: |
1 |
ContentEntityBase:: |
public | function |
Removes the translation identified by the given language code. Overrides TranslatableInterface:: |
|
ContentEntityBase:: |
public | function |
Sets a field value. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
protected | function | Populates the local cache for the default language code. | |
ContentEntityBase:: |
public | function |
Enforces an entity to be saved as a new revision. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Marks the current revision translation as affected. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Enforces the revision translation affected flag value. Overrides TranslatableRevisionableInterface:: |
|
ContentEntityBase:: |
public | function |
Sets whether entity validation is required before saving the entity. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Gets an array of all property values. Overrides EntityBase:: |
|
ContentEntityBase:: |
protected | function | Updates language for already instantiated fields. | |
ContentEntityBase:: |
public | function |
Updates the loaded Revision ID with the revision ID. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function | Updates the original values with the interim changes. | |
ContentEntityBase:: |
public | function |
Gets the entity UUID (Universally Unique Identifier). Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function |
Validates the currently set values. Overrides FieldableEntityInterface:: |
|
ContentEntityBase:: |
public | function |
Checks whether the entity object was a default revision when it was saved. Overrides RevisionableInterface:: |
|
ContentEntityBase:: |
public | function | Magic method: Implements a deep clone. | |
ContentEntityBase:: |
public | function |
Constructs an Entity object. Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function | Implements the magic method for getting object properties. | |
ContentEntityBase:: |
public | function | Implements the magic method for isset(). | |
ContentEntityBase:: |
public | function | Implements the magic method for setting object properties. | |
ContentEntityBase:: |
public | function |
Overrides EntityBase:: |
|
ContentEntityBase:: |
public | function | Implements the magic method for unset(). | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | Aliased as: traitSleep | 1 |
DependencySerializationTrait:: |
public | function | 2 | |
EntityBase:: |
protected | property | Boolean indicating whether the entity should be forced to be new. | |
EntityBase:: |
protected | property | The entity type. | |
EntityBase:: |
protected | property | A typed data object wrapping this entity. | |
EntityBase:: |
public static | function |
Constructs a new entity object, without permanently saving it. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Enforces an entity to be new. Overrides EntityInterface:: |
|
EntityBase:: |
protected | function | Gets the entity manager. | |
EntityBase:: |
protected | function | Gets the entity type bundle info service. | |
EntityBase:: |
protected | function | Gets the entity type manager. | |
EntityBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
Returns the cache tags that should be used to invalidate caches. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Gets the key that is used to store configuration dependencies. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the configuration dependency name. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Gets the configuration target identifier for the entity. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Gets the entity type definition. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the ID of the type of the entity. Overrides EntityInterface:: |
|
EntityBase:: |
protected | function | The list cache tags to invalidate for this entity. | |
EntityBase:: |
public | function |
Gets the original ID. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Gets a typed data object for this entity object. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Indicates if a link template exists for a given key. Overrides EntityInterface:: |
|
EntityBase:: |
protected static | function | Invalidates an entity's cache tags upon delete. | 1 |
EntityBase:: |
protected | function | Invalidates an entity's cache tags upon save. | 1 |
EntityBase:: |
public | function |
Determines whether the entity is new. Overrides EntityInterface:: |
2 |
EntityBase:: |
protected | function | Gets the language manager. | |
EntityBase:: |
public | function |
Deprecated way of generating a link to the entity. See toLink(). Overrides EntityInterface:: |
1 |
EntityBase:: |
protected | function | Gets an array link templates. | 1 |
EntityBase:: |
public static | function |
Loads an entity. Overrides EntityInterface:: |
|
EntityBase:: |
public static | function |
Loads one or more entities. Overrides EntityInterface:: |
|
EntityBase:: |
public static | function |
Acts on deleted entities before the delete hook is invoked. Overrides EntityInterface:: |
16 |
EntityBase:: |
public static | function |
Acts on loaded entities. Overrides EntityInterface:: |
2 |
EntityBase:: |
public static | function |
Acts on entities before they are deleted and before hooks are invoked. Overrides EntityInterface:: |
4 |
EntityBase:: |
public | function |
Sets the original ID. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Generates the HTML for a link to this entity. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the URL object for the entity. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Gets a list of URI relationships supported by this entity. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the public URL for this entity. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Gets the URL object for the entity. Overrides EntityInterface:: |
1 |
EntityBase:: |
protected | function | Gets an array of placeholders for this entity. | 2 |
EntityBase:: |
protected | function | Gets the UUID generator. | |
EntityChangedFieldsTrait:: |
protected | property | Changed fields. | |
EntityChangedFieldsTrait:: |
protected | property | Has changed field or not. | |
EntityChangedFieldsTrait:: |
public | function | Check for updated fields. | |
EntityChangedFieldsTrait:: |
public | function | Get getter method from the name of the field. | |
EntityChangedFieldsTrait:: |
public | function | Checked if the Entity has a changed field or not. | |
EntityChangedFieldsTrait:: |
public | function | Returns whether the field is changed or not. | |
EntityChangedTrait:: |
public | function | Gets the timestamp of the last entity change for the current translation. | |
EntityChangedTrait:: |
public | function | Returns the timestamp of the last entity change across all translations. | |
EntityChangedTrait:: |
public | function | Sets the timestamp of the last entity change for the current translation. | |
EntityChangesDetectionTrait:: |
protected | function | Returns an array of field names to skip when checking for changes. Aliased as: traitGetFieldsToSkipFromTranslationChangesCheck | |
RefinableCacheableDependencyTrait:: |
public | function | 1 | |
RefinableCacheableDependencyTrait:: |
public | function | ||
RefinableCacheableDependencyTrait:: |
public | function | ||
RefinableCacheableDependencyTrait:: |
public | function | ||
SynchronizableEntityTrait:: |
protected | property | Whether this entity is being created, updated or deleted through a synchronization process. | |
SynchronizableEntityTrait:: |
public | function | ||
SynchronizableEntityTrait:: |
public | function | ||
TranslationStatusInterface:: |
constant | Status code identifying a newly created translation. | ||
TranslationStatusInterface:: |
constant | Status code identifying an existing translation. | ||
TranslationStatusInterface:: |
constant | Status code identifying a removed translation. |