Mercurial > hg > isophonics-drupal-site
diff core/modules/media/src/MediaListBuilder.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/media/src/MediaListBuilder.php Mon Apr 23 09:46:53 2018 +0100 @@ -0,0 +1,160 @@ +<?php + +namespace Drupal\media; + +use Drupal\Core\Datetime\DateFormatterInterface; +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityListBuilder; +use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Language\LanguageManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Provides a listing of media items. + */ +class MediaListBuilder extends EntityListBuilder { + + /** + * The date formatter service. + * + * @var \Drupal\Core\Datetime\DateFormatterInterface + */ + protected $dateFormatter; + + /** + * The language manager service. + * + * @var \Drupal\Core\Language\LanguageManagerInterface + */ + protected $languageManager; + + /** + * Indicates whether the 'thumbnail' image style exists. + * + * @var bool + */ + protected $thumbnailStyleExists = FALSE; + + /** + * Constructs a new MediaListBuilder object. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type definition. + * @param \Drupal\Core\Entity\EntityStorageInterface $storage + * The entity storage class. + * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter + * The date formatter service. + * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + * The language manager service. + * @param \Drupal\Core\Entity\EntityStorageInterface $image_style_storage + * The entity storage class for image styles. + */ + public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager, EntityStorageInterface $image_style_storage) { + parent::__construct($entity_type, $storage); + + $this->dateFormatter = $date_formatter; + $this->languageManager = $language_manager; + $this->thumbnailStyleExists = !empty($image_style_storage->load('thumbnail')); + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { + return new static( + $entity_type, + $container->get('entity.manager')->getStorage($entity_type->id()), + $container->get('date.formatter'), + $container->get('language_manager'), + $container->get('entity_type.manager')->getStorage('image_style') + ); + } + + /** + * {@inheritdoc} + */ + public function buildHeader() { + $header = []; + if ($this->thumbnailStyleExists) { + $header['thumbnail'] = [ + 'data' => $this->t('Thumbnail'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ]; + } + $header += [ + 'name' => $this->t('Media Name'), + 'type' => [ + 'data' => $this->t('Type'), + 'class' => [RESPONSIVE_PRIORITY_MEDIUM], + ], + 'author' => [ + 'data' => $this->t('Author'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ], + 'status' => $this->t('Status'), + 'changed' => [ + 'data' => $this->t('Updated'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ], + ]; + // Enable language column if multiple languages are added. + if ($this->languageManager->isMultilingual()) { + $header['language'] = [ + 'data' => $this->t('Language'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ]; + } + return $header + parent::buildHeader(); + } + + /** + * {@inheritdoc} + */ + public function buildRow(EntityInterface $entity) { + /** @var \Drupal\media\MediaInterface $entity */ + if ($this->thumbnailStyleExists) { + $row['thumbnail'] = []; + if ($thumbnail_url = $entity->getSource()->getMetadata($entity, 'thumbnail_uri')) { + $row['thumbnail']['data'] = [ + '#theme' => 'image_style', + '#style_name' => 'thumbnail', + '#uri' => $thumbnail_url, + '#height' => 50, + ]; + } + } + $row['name']['data'] = [ + '#type' => 'link', + '#title' => $entity->label(), + '#url' => $entity->toUrl(), + ]; + $row['type'] = $entity->bundle->entity->label(); + $row['author']['data'] = [ + '#theme' => 'username', + '#account' => $entity->getOwner(), + ]; + $row['status'] = $entity->isPublished() ? $this->t('Published') : $this->t('Unpublished'); + $row['changed'] = $this->dateFormatter->format($entity->getChangedTime(), 'short'); + + if ($this->languageManager->isMultilingual()) { + $row['language'] = $this->languageManager->getLanguageName($entity->language()->getId()); + } + return $row + parent::buildRow($entity); + } + + /** + * {@inheritdoc} + */ + protected function getEntityIds() { + $query = $this->getStorage()->getQuery() + ->sort('changed', 'DESC'); + + // Only add the pager if a limit is specified. + if ($this->limit) { + $query->pager($this->limit); + } + return $query->execute(); + } + +}