Security update for permissions_by_term
[yaffs-website] / web / modules / contrib / permissions_by_term / modules / permissions_by_entity / src / EventSubscriber / RemoveEntityFromViewEventSubscriber.php
1 <?php
2
3 namespace Drupal\permissions_by_entity\EventSubscriber;
4
5 use Drupal\permissions_by_entity\Event\EntityFieldValueAccessDeniedEvent;
6 use Drupal\permissions_by_entity\Event\PermissionsByEntityEvents;
7 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
8
9 /**
10  * Class RemoveEntityFromViewEventSubscriber.
11  *
12  * @package Drupal\permissions_by_entity\EventSubscriber
13  */
14 class RemoveEntityFromViewEventSubscriber implements EventSubscriberInterface {
15
16   /**
17    * {@inheritdoc}
18    */
19   public static function getSubscribedEvents() {
20     return [
21       PermissionsByEntityEvents::ENTITY_FIELD_VALUE_ACCESS_DENIED_EVENT =>
22       [
23         'onEntityFieldAccessDenied',
24       ],
25     ];
26   }
27
28   /**
29    * Callback method.
30    *
31    * Callback method that will be called when the
32    * ENTITY_FIELD_VALUE_ACCESS_DENIED_EVENT has been triggered.
33    *
34    * @param \Drupal\permissions_by_entity\Event\EntityFieldValueAccessDeniedEvent $event
35    *   The event.
36    */
37   public function onEntityFieldAccessDenied(EntityFieldValueAccessDeniedEvent $event) {
38     // Get the field.
39     $field = $event->getField();
40
41     // Get the number of values this field contains.
42     $num_values = $field->count();
43
44     // Get the current value of the field.
45     $field_values = $field->getValue();
46
47     // Iterate over the values.
48     for ($i = 0; $i < $num_values; $i++) {
49       $field_entity = $field->get($i)->entity;
50
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]);
55
56         // We need to decrement the current index.
57         $event->setIndex($event->getIndex() - 1);
58       }
59     }
60
61     // Set the field values.
62     $field->setValue($field_values);
63   }
64
65 }