Security update for permissions_by_term
[yaffs-website] / web / modules / contrib / permissions_by_term / modules / permissions_by_entity / src / EventSubscriber / RemoveEntityFromViewEventSubscriber.php
diff --git a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/src/EventSubscriber/RemoveEntityFromViewEventSubscriber.php b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/src/EventSubscriber/RemoveEntityFromViewEventSubscriber.php
new file mode 100644 (file)
index 0000000..c17a2e4
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\permissions_by_entity\EventSubscriber;
+
+use Drupal\permissions_by_entity\Event\EntityFieldValueAccessDeniedEvent;
+use Drupal\permissions_by_entity\Event\PermissionsByEntityEvents;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Class RemoveEntityFromViewEventSubscriber.
+ *
+ * @package Drupal\permissions_by_entity\EventSubscriber
+ */
+class RemoveEntityFromViewEventSubscriber implements EventSubscriberInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    return [
+      PermissionsByEntityEvents::ENTITY_FIELD_VALUE_ACCESS_DENIED_EVENT =>
+      [
+        'onEntityFieldAccessDenied',
+      ],
+    ];
+  }
+
+  /**
+   * Callback method.
+   *
+   * Callback method that will be called when the
+   * ENTITY_FIELD_VALUE_ACCESS_DENIED_EVENT has been triggered.
+   *
+   * @param \Drupal\permissions_by_entity\Event\EntityFieldValueAccessDeniedEvent $event
+   *   The event.
+   */
+  public function onEntityFieldAccessDenied(EntityFieldValueAccessDeniedEvent $event) {
+    // Get the field.
+    $field = $event->getField();
+
+    // Get the number of values this field contains.
+    $num_values = $field->count();
+
+    // Get the current value of the field.
+    $field_values = $field->getValue();
+
+    // Iterate over the values.
+    for ($i = 0; $i < $num_values; $i++) {
+      $field_entity = $field->get($i)->entity;
+
+      // If the entity matches the entity of the event.
+      if ($field_entity === $event->getEntity()) {
+        // Remove the this value from the values array.
+        unset($field_values[$i]);
+
+        // We need to decrement the current index.
+        $event->setIndex($event->getIndex() - 1);
+      }
+    }
+
+    // Set the field values.
+    $field->setValue($field_values);
+  }
+
+}