Mercurial > hg > isophonics-drupal-site
diff core/modules/media/src/Plugin/EntityReferenceSelection/MediaSelection.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/media/src/Plugin/EntityReferenceSelection/MediaSelection.php Thu Feb 28 13:21:36 2019 +0000 @@ -0,0 +1,62 @@ +<?php + +namespace Drupal\media\Plugin\EntityReferenceSelection; + +use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection; + +/** + * Provides specific access control for the media entity type. + * + * @EntityReferenceSelection( + * id = "default:media", + * label = @Translation("Media selection"), + * entity_types = {"media"}, + * group = "default", + * weight = 1 + * ) + */ +class MediaSelection extends DefaultSelection { + + /** + * {@inheritdoc} + */ + protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') { + $query = parent::buildEntityQuery($match, $match_operator); + + // Ensure that users with insufficient permission cannot see unpublished + // entities. + if (!$this->currentUser->hasPermission('administer media')) { + $query->condition('status', 1); + } + return $query; + } + + /** + * {@inheritdoc} + */ + public function createNewEntity($entity_type_id, $bundle, $label, $uid) { + $media = parent::createNewEntity($entity_type_id, $bundle, $label, $uid); + + // In order to create a referenceable media, it needs to published. + /** @var \Drupal\media\MediaInterface $media */ + $media->setPublished(); + + return $media; + } + + /** + * {@inheritdoc} + */ + public function validateReferenceableNewEntities(array $entities) { + $entities = parent::validateReferenceableNewEntities($entities); + // Mirror the conditions checked in buildEntityQuery(). + if (!$this->currentUser->hasPermission('administer media')) { + $entities = array_filter($entities, function ($media) { + /** @var \Drupal\media\MediaInterface $media */ + return $media->isPublished(); + }); + } + return $entities; + } + +}