annotate core/modules/media/src/Plugin/EntityReferenceSelection/MediaSelection.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@17 1 <?php
Chris@17 2
Chris@17 3 namespace Drupal\media\Plugin\EntityReferenceSelection;
Chris@17 4
Chris@17 5 use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection;
Chris@17 6
Chris@17 7 /**
Chris@17 8 * Provides specific access control for the media entity type.
Chris@17 9 *
Chris@17 10 * @EntityReferenceSelection(
Chris@17 11 * id = "default:media",
Chris@17 12 * label = @Translation("Media selection"),
Chris@17 13 * entity_types = {"media"},
Chris@17 14 * group = "default",
Chris@17 15 * weight = 1
Chris@17 16 * )
Chris@17 17 */
Chris@17 18 class MediaSelection extends DefaultSelection {
Chris@17 19
Chris@17 20 /**
Chris@17 21 * {@inheritdoc}
Chris@17 22 */
Chris@17 23 protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') {
Chris@17 24 $query = parent::buildEntityQuery($match, $match_operator);
Chris@17 25
Chris@17 26 // Ensure that users with insufficient permission cannot see unpublished
Chris@17 27 // entities.
Chris@17 28 if (!$this->currentUser->hasPermission('administer media')) {
Chris@17 29 $query->condition('status', 1);
Chris@17 30 }
Chris@17 31 return $query;
Chris@17 32 }
Chris@17 33
Chris@17 34 /**
Chris@17 35 * {@inheritdoc}
Chris@17 36 */
Chris@17 37 public function createNewEntity($entity_type_id, $bundle, $label, $uid) {
Chris@17 38 $media = parent::createNewEntity($entity_type_id, $bundle, $label, $uid);
Chris@17 39
Chris@17 40 // In order to create a referenceable media, it needs to published.
Chris@17 41 /** @var \Drupal\media\MediaInterface $media */
Chris@17 42 $media->setPublished();
Chris@17 43
Chris@17 44 return $media;
Chris@17 45 }
Chris@17 46
Chris@17 47 /**
Chris@17 48 * {@inheritdoc}
Chris@17 49 */
Chris@17 50 public function validateReferenceableNewEntities(array $entities) {
Chris@17 51 $entities = parent::validateReferenceableNewEntities($entities);
Chris@17 52 // Mirror the conditions checked in buildEntityQuery().
Chris@17 53 if (!$this->currentUser->hasPermission('administer media')) {
Chris@17 54 $entities = array_filter($entities, function ($media) {
Chris@17 55 /** @var \Drupal\media\MediaInterface $media */
Chris@17 56 return $media->isPublished();
Chris@17 57 });
Chris@17 58 }
Chris@17 59 return $entities;
Chris@17 60 }
Chris@17 61
Chris@17 62 }