ProviderPluginBase.php in Video 8.2
File
src/ProviderPluginBase.php
View source
<?php
namespace Drupal\video;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Component\Render\PlainTextOutput;
use GuzzleHttp\ClientInterface;
use Drupal\image\Entity\ImageStyle;
use Drupal\Core\File\FileSystemInterface;
abstract class ProviderPluginBase implements ProviderPluginInterface, ContainerFactoryPluginInterface {
protected $file;
protected $metadata = [];
protected $settings = [];
protected $httpClient;
public function __construct($configuration, ClientInterface $http_client) {
$this->file = $configuration['file'];
$this->metadata = $configuration['metadata'];
$this->settings = $configuration['settings'];
$this->httpClient = $http_client;
}
protected function getVideoFile() {
return $this->file;
}
protected function getVideoMetadata() {
return $this->metadata;
}
protected function getVideoSettings() {
return $this->settings;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $container
->get('http_client'));
}
public function renderThumbnail($image_style, $link_url) {
$this
->downloadThumbnail();
$output = [
'#theme' => 'image',
'#uri' => !empty($image_style) ? ImageStyle::load($image_style)
->buildUrl($this
->getLocalThumbnailUri()) : $this
->getLocalThumbnailUri(),
];
if ($link_url) {
$output = [
'#type' => 'link',
'#title' => $output,
'#url' => $link_url,
];
}
return $output;
}
protected function downloadThumbnail() {
$local_uri = $this
->getLocalThumbnailUri();
if (!file_exists($local_uri)) {
$thumb_dir = $this
->getUploadLocation();
\Drupal::service('file_system')
->prepareDirectory($thumb_dir, FileSystemInterface::CREATE_DIRECTORY);
$remote_url = $this
->getRemoteThumbnailUrl();
if ($remote_url) {
$thumbnail = $this->httpClient
->request('GET', $this
->getRemoteThumbnailUrl());
\Drupal::service('file_system')
->saveData((string) $thumbnail
->getBody(), $local_uri);
}
}
}
public function getLocalThumbnailUri() {
$data = $this
->getVideoMetadata();
return $this
->getUploadLocation() . '/' . $data['id'] . '.png';
}
protected function getUploadLocation($data = []) {
$settings = $this
->getVideoSettings();
$destination = trim($settings['file_directory'], '/');
$destination = PlainTextOutput::renderFromHtml(\Drupal::token()
->replace($destination, $data));
return $settings['uri_scheme'] . '://' . $destination;
}
}