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 }
|