class JwplayerFormatter in JW Player 8
Plugin implementation of the 'foo_formatter' formatter.
Plugin annotation
@FieldFormatter(
id = "jwplayer_formatter",
label = @Translation("Jw player"),
field_types = {
"file",
"video",
"link",
},
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\jw_player\Plugin\Field\FieldFormatter\JwplayerFormatter
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of JwplayerFormatter
File
- src/
Plugin/ Field/ FieldFormatter/ JwplayerFormatter.php, line 26
Namespace
Drupal\jw_player\Plugin\Field\FieldFormatterView source
class JwplayerFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return array(
'jwplayer_preset' => NULL,
'preview_image_field' => NULL,
'preview_image_style' => NULL,
) + parent::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$presets = Jw_player::loadMultiple();
$options = [];
if (!empty($presets)) {
foreach ($presets as $type => $type_info) {
$options[$type] = $type_info
->label();
}
$element['jwplayer_preset'] = [
'#title' => $this
->t('Select preset'),
'#type' => 'select',
'#empty_option' => $this
->t('- No preset selected -'),
'#default_value' => $this
->getSetting('jwplayer_preset') ?: 'none',
'#options' => $options,
];
$element['links'] = [
'#theme' => 'links',
'#links' => [
[
'url' => Url::fromRoute('jw_player.preset_add'),
'title' => $this
->t('Create new preset'),
],
[
'url' => Url::fromRoute('entity.jw_player.collection'),
'title' => $this
->t('Manage presets'),
],
],
];
if ($this
->getSetting('jwplayer_preset') && $this
->getSetting('jwplayer_preset') != 'none') {
$element['links']['#links'][] = [
'url' => Url::fromRoute('entity.jw_player.edit_form', [
'jw_player' => $this
->getSetting('jwplayer_preset'),
]),
'title' => $this
->t('Manage selected preset'),
];
}
// Add support for configurable preview images.
if (\Drupal::moduleHandler()
->moduleExists('image') && $this->fieldDefinition
->getTargetEntityTypeId() && $this->fieldDefinition
->getTargetBundle()) {
$options = [];
$field_definitions = \Drupal::service('entity_field.manager')
->getFieldDefinitions($this->fieldDefinition
->getTargetEntityTypeId(), $this->fieldDefinition
->getTargetBundle());
// @todo add support for fields on file references.
foreach ($field_definitions as $field_name => $field_definition) {
if ($field_definition
->getType() == 'image') {
// Structure of the key can be used later on in the formatter's view
// callback in order to fetch the image uri from the configure field.
$options[$this->fieldDefinition
->getTargetEntityTypeId() . ':' . $this->fieldDefinition
->getTargetBundle() . '|' . $field_name] = $field_definition
->getLabel() . ' (' . $this->fieldDefinition
->getTargetEntityTypeId() . ':' . $this->fieldDefinition
->getTargetBundle() . ')';
}
}
if ($options) {
$element['preview_image_field'] = [
'#title' => $this
->t('Preview image source'),
'#description' => $this
->t('You can choose an image field directly on this node type, or on any entity of an entity/file/term reference field on this content type.'),
'#type' => 'select',
'#options' => $options,
'#default_value' => $this
->getSetting('preview_image_field') ? $this
->getSetting('preview_image_field') : '',
'#empty_option' => $this
->t('None'),
];
$options = image_style_options();
$element['preview_image_style'] = [
'#title' => $this
->t('Preview image style'),
'#description' => $this
->t('Choose an image style that will be used for the preview image.'),
'#type' => 'select',
'#options' => $options,
'#default_value' => $this
->getSetting('preview_image_style') ? $this
->getSetting('preview_image_style') : '',
'#states' => [
'invisible' => [
array(
':input[name="fields[' . $this->fieldDefinition
->getName() . '][settings_edit_form][settings][preview_image_field]"]' => [
'value' => '',
],
),
],
],
];
}
}
}
else {
$element['no_preset_message'] = [
'#markup' => '<div class="messages warning">' . $this
->t('No presets are available. Please <a href="@create">create a preset</a> in order to proceed.', [
'@create' => Url::fromRoute('jw_player.preset_add')
->toString(),
]) . '</div>',
];
}
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$settings = $this
->getSettings();
$summary = [];
if (isset($settings['jwplayer_preset'])) {
$preset = $this
->loadPreset();
if (!$preset) {
return $summary;
}
$preset_settings = $preset
->settingsDisplay('array');
// Formatted preset name and player type.
$summary[] = $preset_settings['name'];
if (stripos($preset_settings['source'], 'drupal') !== FALSE) {
// Skin, dimensions, enabled options, and sharing sites.
if (isset($preset_settings['skin'])) {
$summary[] = $preset_settings['skin'];
}
$summary[] = $preset_settings['dimensions'];
if (isset($preset_settings['enabled'])) {
$summary[] = $preset_settings['enabled'];
}
if (isset($preset_settings['sharing'])) {
$summary[] = $preset_settings['sharing'];
}
}
else {
$summary[] = $preset_settings['source'];
}
// Preview image settings.
if (isset($settings['preview_image_field']) && !empty($settings['preview_image_field'])) {
// Get image field label.
$split = explode('|', $settings['preview_image_field']);
$field_definitions = \Drupal::service('entity_field.manager')
->getFieldDefinitions($this->fieldDefinition
->getTargetEntityTypeId(), $this->fieldDefinition
->getTargetBundle());
$info = $field_definitions[$split[1]];
// Get image style label.
if (!empty($settings['preview_image_style'])) {
$style = ImageStyle::load($settings['preview_image_style']);
$preview_image_style = $style
->label();
}
else {
$preview_image_style = 'Original';
}
$summary[] = $this
->t('Preview: @field (@style)', array(
'@field' => $info
->label(),
'@style' => $preview_image_style,
));
}
}
else {
$summary[] = $this
->t('No preset selected');
}
return $summary;
}
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) {
$element = array();
$settings = $this
->getSettings();
// Prepare preview image.
$image_style = NULL;
$image_url = NULL;
$cache_tags = [];
if ($settings['preview_image_field']) {
$split = explode('|', $settings['preview_image_field']);
$preview_image_field = $split[1];
if ($preview_items = $items
->getEntity()
->get($preview_image_field)) {
if ($image_style = ImageStyle::load($settings['preview_image_style'])) {
if ($image = $items
->getEntity()->{$preview_image_field}->entity) {
$image_url = $image_style
->buildUrl($image
->getFileUri());
$cache_tags = $image_style
->getCacheTags();
}
}
}
}
// Process files for the theme function.
foreach ($items as $delta => $item) {
if ($item->entity) {
$file_uri = $item->entity
->getFileUri();
$file_mime = $item->entity
->getMimeType();
$uri = file_create_url($file_uri);
// Add cache tags for the referenced file and the preset if it can be
// loaded, to prevent fatal errors.
$tags = Cache::mergeTags($cache_tags, $item->entity
->getCacheTags());
}
elseif ($this->fieldDefinition
->getType() === 'link') {
$uri = $item->uri;
$file_mime = FALSE;
$tags = [];
}
else {
continue;
}
if ($preset = $this
->loadPreset()) {
$tags = Cache::mergeTags($tags, $preset
->getCacheTags());
}
$element[$delta] = [
'player' => [
'#type' => 'jw_player',
'#file' => $item->entity,
'#file_url' => $uri,
'#file_mime' => $file_mime,
'#item' => $item,
'#preset' => $this
->getSetting('jwplayer_preset'),
// Give each instance of the player a unique id. A random hash is
// used in place of drupal_html_id() due to potentially conflicting
// ids in cases where the entire output of the theme function is
// cached. Prefix with jwplayer, as ID's that start with a number
// are not valid.
'#html_id' => 'jwplayer-' . md5(rand()),
],
'#attached' => [
'library' => [
'jw_player/jwplayer',
],
],
'#cache' => [
'tags' => $tags,
],
];
// Add preview image.
if ($image_url) {
$element[$delta]['player']['#settings']['image'] = $image_url;
}
}
return $element;
}
/**
* {@inheritdoc}
*/
public function calculateDependencies() {
$dependencies = parent::calculateDependencies();
if ($preset = $this
->loadPreset()) {
$dependencies['config'][] = $preset
->getConfigDependencyName();
}
return $dependencies;
}
/**
* Loads the configured preset.
*
* @returns \Drupal\jw_player\Entity\Jw_player
* The preset specified in the formatter settings.
*/
protected function loadPreset() {
if ($id = $this
->getSetting('jwplayer_preset')) {
return Jw_player::load($id);
}
return NULL;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
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 | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FormatterBase:: |
protected | property | The field definition. | |
FormatterBase:: |
protected | property | The label display setting. | |
FormatterBase:: |
protected | property |
The formatter settings. Overrides PluginSettingsBase:: |
|
FormatterBase:: |
protected | property | The view mode. | |
FormatterBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
11 |
FormatterBase:: |
protected | function | Returns the value of a field setting. | |
FormatterBase:: |
protected | function | Returns the array of field settings. | |
FormatterBase:: |
public static | function |
Returns if the formatter can be used for the provided field. Overrides FormatterInterface:: |
14 |
FormatterBase:: |
public | function |
Allows formatters to load information for field values being displayed. Overrides FormatterInterface:: |
2 |
FormatterBase:: |
public | function |
Builds a renderable array for a fully themed field. Overrides FormatterInterface:: |
1 |
FormatterBase:: |
public | function |
Constructs a FormatterBase object. Overrides PluginBase:: |
11 |
JwplayerFormatter:: |
public | function |
Calculates dependencies for the configured plugin. Overrides PluginSettingsBase:: |
|
JwplayerFormatter:: |
public static | function |
Defines the default settings for this plugin. Overrides PluginSettingsBase:: |
|
JwplayerFormatter:: |
protected | function | Loads the configured preset. | |
JwplayerFormatter:: |
public | function |
Returns a form to configure settings for the formatter. Overrides FormatterBase:: |
|
JwplayerFormatter:: |
public | function |
Returns a short summary for the current formatter settings. Overrides FormatterBase:: |
|
JwplayerFormatter:: |
public | function |
Builds a renderable array for a field value. Overrides FormatterInterface:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |