audiofield-8.x-1.x-dev/src/Plugin/AudioPlayer/ProjekktorAudioPlayer.php
src/Plugin/AudioPlayer/ProjekktorAudioPlayer.php
<?php
namespace Drupal\audiofield\Plugin\AudioPlayer;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\audiofield\AudioFieldPluginBase;
use Drupal\Component\Serialization\Json;
/**
* Implements the Projekktor Audio Player plugin.
*
* @AudioPlayer (
* id = "projekktor_audio_player",
* title = @Translation("Projekktor audio player"),
* description = @Translation("Free Web Video Player (converted for audio)"),
* fileTypes = {
* "mp3", "mp4", "ogg", "oga", "wav",
* },
* libraryName = "projekktor",
* website = "http://www.projekktor.com/",
* )
*/
class ProjekktorAudioPlayer extends AudioFieldPluginBase {
/**
* {@inheritdoc}
*/
public function renderPlayer(FieldItemListInterface $items, $langcode, array $settings) {
// Check to make sure we're installed.
if (!$this->checkInstalled()) {
// Show the error.
$this->showInstallError();
// Simply return the default rendering so the files are still displayed.
return $this->renderDefaultPlayer($items, $settings);
}
// Start building settings to pass to the javascript projekktor builder.
$player_settings = [
// Projekktor expects this as a 0 - 1 range.
'volume' => ($settings['audio_player_initial_volume'] / 10),
'swfpath' => $this->getPluginLibraryPath() . '/swf/Jarisplayer/jarisplayer.swf',
'files' => [],
'autoplay' => $settings['audio_player_autoplay'],
];
// Format files for output.
$template_files = $this->getItemRenderList($items);
foreach ($template_files as $renderInfo) {
// Add this file to the render settings.
$player_settings['files'][] = $renderInfo->id;
}
return [
'audioplayer' => [
'#theme' => 'audioplayer',
'#plugin_id' => 'projekktor',
'#settings' => $settings,
'#files' => $template_files,
],
'downloads' => $this->createDownloadList($items, $settings),
'#attached' => [
'library' => [
// Attach the projekktor library.
'audiofield/audiofield.' . $this->getPluginLibraryName(),
],
'drupalSettings' => [
'audiofieldprojekktor' => [
$this->getUniqueRenderId() => $player_settings,
],
],
],
];
}
/**
* {@inheritdoc}
*/
public function getPluginLibraryVersion() {
// Parse the JSON file for version info.
$library_path = $this->fileSystem->realpath(DRUPAL_ROOT . $this->getPluginLibraryPath() . '/package.json');
$library_data = Json::decode(file_get_contents($library_path));
return $library_data['version'];
}
}
