MediaSelection.php

Same filename in other branches
  1. 8.9.x core/modules/media/src/Plugin/EntityReferenceSelection/MediaSelection.php
  2. 10 core/modules/media/src/Plugin/EntityReferenceSelection/MediaSelection.php
  3. 11.x core/modules/media/src/Plugin/EntityReferenceSelection/MediaSelection.php

Namespace

Drupal\media\Plugin\EntityReferenceSelection

File

core/modules/media/src/Plugin/EntityReferenceSelection/MediaSelection.php

View source
<?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;
    }

}

Classes

Title Deprecated Summary
MediaSelection Provides specific access control for the media entity type.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.