3 namespace Drupal\media\Plugin\EntityReferenceSelection;
5 use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection;
8 * Provides specific access control for the media entity type.
10 * @EntityReferenceSelection(
11 * id = "default:media",
12 * label = @Translation("Media selection"),
13 * entity_types = {"media"},
18 class MediaSelection extends DefaultSelection {
23 protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') {
24 $query = parent::buildEntityQuery($match, $match_operator);
26 // Ensure that users with insufficient permission cannot see unpublished
28 if (!$this->currentUser->hasPermission('administer media')) {
29 $query->condition('status', 1);
37 public function createNewEntity($entity_type_id, $bundle, $label, $uid) {
38 $media = parent::createNewEntity($entity_type_id, $bundle, $label, $uid);
40 // In order to create a referenceable media, it needs to published.
41 /** @var \Drupal\media\MediaInterface $media */
42 $media->setPublished();
50 public function validateReferenceableNewEntities(array $entities) {
51 $entities = parent::validateReferenceableNewEntities($entities);
52 // Mirror the conditions checked in buildEntityQuery().
53 if (!$this->currentUser->hasPermission('administer media')) {
54 $entities = array_filter($entities, function ($media) {
55 /** @var \Drupal\media\MediaInterface $media */
56 return $media->isPublished();