3 namespace Drupal\permissions_by_entity\EventSubscriber;
5 use Drupal\permissions_by_entity\Event\EntityFieldValueAccessDeniedEvent;
6 use Drupal\permissions_by_entity\Event\PermissionsByEntityEvents;
7 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10 * Class RemoveEntityFromViewEventSubscriber.
12 * @package Drupal\permissions_by_entity\EventSubscriber
14 class RemoveEntityFromViewEventSubscriber implements EventSubscriberInterface {
19 public static function getSubscribedEvents() {
21 PermissionsByEntityEvents::ENTITY_FIELD_VALUE_ACCESS_DENIED_EVENT =>
23 'onEntityFieldAccessDenied',
31 * Callback method that will be called when the
32 * ENTITY_FIELD_VALUE_ACCESS_DENIED_EVENT has been triggered.
34 * @param \Drupal\permissions_by_entity\Event\EntityFieldValueAccessDeniedEvent $event
37 public function onEntityFieldAccessDenied(EntityFieldValueAccessDeniedEvent $event) {
39 $field = $event->getField();
41 // Get the number of values this field contains.
42 $num_values = $field->count();
44 // Get the current value of the field.
45 $field_values = $field->getValue();
47 // Iterate over the values.
48 for ($i = 0; $i < $num_values; $i++) {
49 $field_entity = $field->get($i)->entity;
51 // If the entity matches the entity of the event.
52 if ($field_entity === $event->getEntity()) {
53 // Remove the this value from the values array.
54 unset($field_values[$i]);
56 // We need to decrement the current index.
57 $event->setIndex($event->getIndex() - 1);
61 // Set the field values.
62 $field->setValue($field_values);