From b7f9e3225b7b9aba691f98219b42db2c7983dcba Mon Sep 17 00:00:00 2001
From: Michael Stenta <mike@mstenta.net>
Date: Fri, 28 Feb 2025 09:28:50 -0500
Subject: [PATCH 1/6] Refactor EntityReferenceDependencyManagerTest into
 EntityReferenceIntegrityEntityHandlerTest.

---
 ...tyReferenceIntegrityEntityHandlerTest.php} | 29 ++++++++++---------
 1 file changed, 16 insertions(+), 13 deletions(-)
 rename tests/src/Kernel/{EntityReferenceDependencyManagerTest.php => EntityReferenceIntegrityEntityHandlerTest.php} (61%)

diff --git a/tests/src/Kernel/EntityReferenceDependencyManagerTest.php b/tests/src/Kernel/EntityReferenceIntegrityEntityHandlerTest.php
similarity index 61%
rename from tests/src/Kernel/EntityReferenceDependencyManagerTest.php
rename to tests/src/Kernel/EntityReferenceIntegrityEntityHandlerTest.php
index 4d01a55..37216fd 100644
--- a/tests/src/Kernel/EntityReferenceDependencyManagerTest.php
+++ b/tests/src/Kernel/EntityReferenceIntegrityEntityHandlerTest.php
@@ -7,13 +7,13 @@ use Drupal\node\Entity\Node;
 use Drupal\user\Entity\User;
 
 /**
- * Test the EntityReferenceDependencyManager.
+ * Test the EntityReferenceIntegrityEntityHandler.
  *
- * @coversDefaultClass \Drupal\entity_reference_integrity\EntityReferenceDependencyManager
+ * @coversDefaultClass \Drupal\entity_reference_integrity\EntityReferenceIntegrityEntityHandler
  *
  * @group entity_reference_integrity
  */
-class EntityReferenceDependencyManagerTest extends KernelTestBase {
+class EntityReferenceIntegrityEntityHandlerTest extends KernelTestBase {
 
   /**
    * Modules to enable.
@@ -28,11 +28,11 @@ class EntityReferenceDependencyManagerTest extends KernelTestBase {
   ];
 
   /**
-   * The entity dependency manager.
+   * The entity type manager.
    *
-   * @var \Drupal\entity_reference_integrity\EntityReferenceDependencyManagerInterface
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
    */
-  protected $dependencyManager;
+  protected $entityTypeManager;
 
   /**
    * A test user.
@@ -58,7 +58,7 @@ class EntityReferenceDependencyManagerTest extends KernelTestBase {
     $this->installSchema('system', 'sequences');
     $this->installSchema('node', 'node_access');
 
-    $this->dependencyManager = $this->container->get('entity_reference_integrity.dependency_manager');
+    $this->entityTypeManager = $this->container->get('entity_type.manager');
 
     $this->testUser = User::create([
       'name' => 'Gerald',
@@ -86,9 +86,10 @@ class EntityReferenceDependencyManagerTest extends KernelTestBase {
    * @covers ::hasDependents
    */
   public function testHasDependents() {
-    $this->assertFalse($this->dependencyManager->hasDependents($this->testUser));
+    $handler = $this->entityTypeManager->getHandler('user', 'entity_reference_integrity');
+    $this->assertFalse($handler->hasDependents($this->testUser));
     $this->setUserAsNodeAuthor();
-    $this->assertTrue($this->dependencyManager->hasDependents($this->testUser));
+    $this->assertTrue($handler->hasDependents($this->testUser));
   }
 
   /**
@@ -97,9 +98,10 @@ class EntityReferenceDependencyManagerTest extends KernelTestBase {
    * @covers ::getDependentEntityIds
    */
   public function testGetDependentEntityIds() {
-    $this->assertEquals([], $this->dependencyManager->getDependentEntityIds($this->testUser));
+    $handler = $this->entityTypeManager->getHandler('user', 'entity_reference_integrity');
+    $this->assertEquals([], $handler->getDependentEntityIds($this->testUser));
     $this->setUserAsNodeAuthor();
-    $this->assertEquals($this->testNode->id(), $this->dependencyManager->getDependentEntityIds($this->testUser)['node'][0]);
+    $this->assertEquals($this->testNode->id(), $handler->getDependentEntityIds($this->testUser)['node'][0]);
   }
 
   /**
@@ -108,9 +110,10 @@ class EntityReferenceDependencyManagerTest extends KernelTestBase {
    * @covers ::getDependentEntities
    */
   public function testGetDependentEntities() {
-    $this->assertEquals([], $this->dependencyManager->getDependentEntities($this->testUser));
+    $handler = $this->entityTypeManager->getHandler($this->testUser->getEntityTypeId(), 'entity_reference_integrity');
+    $this->assertEquals([], $handler->getDependentEntities($this->testUser));
     $this->setUserAsNodeAuthor();
-    $this->assertEquals($this->testNode->id(), $this->dependencyManager->getDependentEntities($this->testUser)['node'][0]->id());
+    $this->assertEquals($this->testNode->id(), $handler->getDependentEntities($this->testUser)['node'][0]->id());
   }
 
 }
-- 
GitLab


From 330354e03a4989a030deda0b1ba912219d99af3a Mon Sep 17 00:00:00 2001
From: Michael Stenta <mike@mstenta.net>
Date: Fri, 28 Feb 2025 09:30:54 -0500
Subject: [PATCH 2/6] Fix EntityReferenceIntegrityEntityHandler::__construct()
 docblock comment.

---
 src/EntityReferenceIntegrityEntityHandler.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/EntityReferenceIntegrityEntityHandler.php b/src/EntityReferenceIntegrityEntityHandler.php
index 9185e9c..856160d 100644
--- a/src/EntityReferenceIntegrityEntityHandler.php
+++ b/src/EntityReferenceIntegrityEntityHandler.php
@@ -29,7 +29,7 @@ class EntityReferenceIntegrityEntityHandler implements EntityHandlerInterface, E
   protected $entityTypeManager;
 
   /**
-   * Create an EntityReferenceDependencyManager.
+   * Create an EntityReferenceIntegrityEntityHandler.
    */
   public function __construct(DependencyFieldMapGeneratorInterface $fieldMap, EntityTypeManagerInterface $entityTypeManager) {
     $this->fieldMap = $fieldMap;
-- 
GitLab


From aa3c0f7aa81cf8b357ad2c1200d609c93e7ae938 Mon Sep 17 00:00:00 2001
From: Michael Stenta <mike@mstenta.net>
Date: Fri, 28 Feb 2025 09:36:06 -0500
Subject: [PATCH 3/6] Refactor DeleteActionTest to use entity_type_integrity
 entity handler.

---
 .../tests/src/Kernel/DeleteActionTest.php       | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/modules/entity_reference_integrity_enforce/tests/src/Kernel/DeleteActionTest.php b/modules/entity_reference_integrity_enforce/tests/src/Kernel/DeleteActionTest.php
index 3b23a59..ca90beb 100644
--- a/modules/entity_reference_integrity_enforce/tests/src/Kernel/DeleteActionTest.php
+++ b/modules/entity_reference_integrity_enforce/tests/src/Kernel/DeleteActionTest.php
@@ -41,11 +41,11 @@ class DeleteActionTest extends KernelTestBase {
   protected $actionManager;
 
   /**
-   * The entity dependency manager.
+   * The entity type manager.
    *
-   * @var \Drupal\entity_reference_integrity\EntityReferenceDependencyManagerInterface
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
    */
-  protected $dependencyManager;
+  protected $entityTypeManager;
 
   /**
    * A test user.
@@ -79,7 +79,8 @@ class DeleteActionTest extends KernelTestBase {
     $this->installSchema('node', ['node_access']);
 
     $this->actionManager = $this->container->get('plugin.manager.action');
-    $this->dependencyManager = $this->container->get('entity_reference_integrity.dependency_manager');
+
+    $this->entityTypeManager = $this->container->get('entity_type.manager');
 
     // Create a new node-type.
     NodeType::create([
@@ -123,6 +124,10 @@ class DeleteActionTest extends KernelTestBase {
    * Test that delete action denies access to protected entities.
    */
   public function testDeleteAction() {
+
+    // Get the entity_reference_integrity entity handler.
+    $handler = $this->entityTypeManager->getHandler('node', 'entity_reference_integrity');
+
     // Ensure the DeleteAction exists and is using the extended class.
     $actions = $this->actionManager->getDefinitions();
     $this->assertArrayHasKey('entity:delete_action:node', $actions);
@@ -130,7 +135,7 @@ class DeleteActionTest extends KernelTestBase {
     $action = $this->actionManager->createInstance('entity:delete_action:node');
 
     // The referencedNode has dependents, the action should deny access.
-    $this->assertTrue($this->dependencyManager->hasDependents($this->referencedNode));
+    $this->assertTrue($handler->hasDependents($this->referencedNode));
     $this->assertFalse($action->access($this->referencedNode, $this->testUser));
 
     // Unset the node reference.
@@ -138,7 +143,7 @@ class DeleteActionTest extends KernelTestBase {
     $this->testNode->save();
 
     // The referencedNode has no dependents, the action should allow access.
-    $this->assertFalse($this->dependencyManager->hasDependents($this->referencedNode));
+    $this->assertFalse($handler->hasDependents($this->referencedNode));
     $this->assertTrue($action->access($this->referencedNode, $this->testUser));
   }
 
-- 
GitLab


From aedfc4c68f52962ef08b9aceee729a5fd5b8105f Mon Sep 17 00:00:00 2001
From: Michael Stenta <mike@mstenta.net>
Date: Fri, 28 Feb 2025 09:50:38 -0500
Subject: [PATCH 4/6] Refactor EntityPredelete and FormAlter classes to use
 entity_reference_integrity entity handler.

---
 .../src/EntityPredelete.php                   | 27 ++++++++++++-------
 .../src/FormAlter.php                         | 27 ++++++++++++-------
 2 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/modules/entity_reference_integrity_enforce/src/EntityPredelete.php b/modules/entity_reference_integrity_enforce/src/EntityPredelete.php
index 756efe0..0143926 100644
--- a/modules/entity_reference_integrity_enforce/src/EntityPredelete.php
+++ b/modules/entity_reference_integrity_enforce/src/EntityPredelete.php
@@ -4,7 +4,7 @@ namespace Drupal\entity_reference_integrity_enforce;
 
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\entity_reference_integrity\EntityReferenceDependencyManagerInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\entity_reference_integrity_enforce\Exception\ProtectedEntityException;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -14,11 +14,11 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 class EntityPredelete implements ContainerInjectionInterface {
 
   /**
-   * The dependency manager.
+   * The entity type manager.
    *
-   * @var \Drupal\entity_reference_integrity\EntityReferenceDependencyManagerInterface
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
    */
-  protected $dependencyManager;
+  protected $entityTypeManager;
 
   /**
    * The entity type IDs protection is enabled for.
@@ -28,10 +28,15 @@ class EntityPredelete implements ContainerInjectionInterface {
   protected $enabledEntityTypeIds;
 
   /**
-   * Create a DeleteFormAlter object.
+   * Create a EntityPredelete object.
+   *
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
+   * @param array $enabled_entity_type_ids
+   *   The entity type IDs protection is enabled for.
    */
-  public function __construct(EntityReferenceDependencyManagerInterface $calculator, array $enabled_entity_type_ids) {
-    $this->dependencyManager = $calculator;
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, array $enabled_entity_type_ids) {
+    $this->entityTypeManager = $entity_type_manager;
     $this->enabledEntityTypeIds = $enabled_entity_type_ids;
   }
 
@@ -40,7 +45,7 @@ class EntityPredelete implements ContainerInjectionInterface {
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('entity_reference_integrity.dependency_manager'),
+      $container->get('entity_type.manager'),
       $container->get('config.factory')->get('entity_reference_integrity_enforce.settings')->get('enabled_entity_type_ids')
     );
   }
@@ -49,7 +54,11 @@ class EntityPredelete implements ContainerInjectionInterface {
    * Implements hook_entity_delete().
    */
   public function entityDelete(EntityInterface $entity) {
-    if (in_array($entity->getEntityTypeId(), $this->enabledEntityTypeIds, TRUE) && $this->dependencyManager->hasDependents($entity)) {
+    if (!in_array($entity->getEntityTypeId(), $this->enabledEntityTypeIds, TRUE)) {
+      return;
+    }
+    $handler = $this->entityTypeManager->getHandler($entity->getEntityTypeId(), 'entity_reference_integrity');
+    if ($handler->hasDependents($entity)) {
       throw new ProtectedEntityException(sprintf('Cannot delete "%s" of type "%s" with label "%s" and ID "%s" because other content is referencing it and the integrity of this entity type is enforced.', $entity->getEntityTypeId(), $entity->bundle(), $entity->label(), $entity->id()));
     }
   }
diff --git a/modules/entity_reference_integrity_enforce/src/FormAlter.php b/modules/entity_reference_integrity_enforce/src/FormAlter.php
index 430944e..93c6228 100644
--- a/modules/entity_reference_integrity_enforce/src/FormAlter.php
+++ b/modules/entity_reference_integrity_enforce/src/FormAlter.php
@@ -4,9 +4,9 @@ namespace Drupal\entity_reference_integrity_enforce;
 
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Entity\EntityFormInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\entity_reference_integrity\EntityReferenceDependencyManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -17,11 +17,11 @@ class FormAlter implements ContainerInjectionInterface {
   use StringTranslationTrait;
 
   /**
-   * The dependency manager.
+   * The entity type manager.
    *
-   * @var \Drupal\entity_reference_integrity\EntityReferenceDependencyManagerInterface
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
    */
-  protected $dependencyManager;
+  protected $entityTypeManager;
 
   /**
    * The entity type IDs protection is enabled for.
@@ -31,10 +31,15 @@ class FormAlter implements ContainerInjectionInterface {
   protected $enabledEntityTypeIds;
 
   /**
-   * Create a DeleteFormAlter object.
+   * Create a FormAlter object.
+   *
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
+   * @param array $enabled_entity_type_ids
+   *   The entity type IDs protection is enabled for.
    */
-  public function __construct(EntityReferenceDependencyManagerInterface $calculator, $enabled_entity_type_ids) {
-    $this->dependencyManager = $calculator;
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, array $enabled_entity_type_ids) {
+    $this->entityTypeManager = $entity_type_manager;
     $this->enabledEntityTypeIds = $enabled_entity_type_ids;
   }
 
@@ -43,7 +48,7 @@ class FormAlter implements ContainerInjectionInterface {
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('entity_reference_integrity.dependency_manager'),
+      $container->get('entity_type.manager'),
       $container->get('config.factory')->get('entity_reference_integrity_enforce.settings')->get('enabled_entity_type_ids')
     );
   }
@@ -60,8 +65,10 @@ class FormAlter implements ContainerInjectionInterface {
 
     $entity = $form_object->getEntity();
 
-    if (in_array($entity->getEntityTypeId(), $this->enabledEntityTypeIds, TRUE) && $this->dependencyManager->hasDependents($entity)) {
-      $referencing_entities = $this->dependencyManager->getDependentEntities($entity);
+    $handler = $this->entityTypeManager->getHandler($entity->getEntityTypeId(), 'entity_reference_integrity');
+
+    if (in_array($entity->getEntityTypeId(), $this->enabledEntityTypeIds, TRUE) && $handler->hasDependents($entity)) {
+      $referencing_entities = $handler->getDependentEntities($entity);
 
       unset($form['actions']['submit']);
       unset($form['description']);
-- 
GitLab


From 72a5c4b8ccf3ef752c6e0019839a94ab1ef1dada Mon Sep 17 00:00:00 2001
From: Michael Stenta <mike@mstenta.net>
Date: Fri, 28 Feb 2025 09:21:05 -0500
Subject: [PATCH 5/6] Remove EntityReferenceDependencyManager.

---
 entity_reference_integrity.services.yml  |  3 --
 src/EntityReferenceDependencyManager.php | 67 ------------------------
 2 files changed, 70 deletions(-)
 delete mode 100644 src/EntityReferenceDependencyManager.php

diff --git a/entity_reference_integrity.services.yml b/entity_reference_integrity.services.yml
index 8dc1fa8..34f1af0 100644
--- a/entity_reference_integrity.services.yml
+++ b/entity_reference_integrity.services.yml
@@ -1,7 +1,4 @@
 services:
-  entity_reference_integrity.dependency_manager:
-    class: \Drupal\entity_reference_integrity\EntityReferenceDependencyManager
-    arguments: ['@entity_type.manager']
   entity_reference_integrity.field_map:
     class: \Drupal\entity_reference_integrity\DependencyFieldMapGenerator
     arguments: ['@entity_field.manager', '@entity_type.manager', 'entity_reference', 'target_type']
diff --git a/src/EntityReferenceDependencyManager.php b/src/EntityReferenceDependencyManager.php
deleted file mode 100644
index 2acb67a..0000000
--- a/src/EntityReferenceDependencyManager.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-namespace Drupal\entity_reference_integrity;
-
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-
-/**
- * Calculate entity dependencies based on entity reference fields.
- *
- * @deprecated in entity_reference_integrity:8.x-1.2 and is removed from
- *   entity_reference_integrity:2.0.0. Use the entity_reference_integrity entity
- *   handler instead.
- * @see https://www.drupal.org/node/3509671
- * @see https://www.drupal.org/project/entity_reference_integrity/issues/3509653
- */
-class EntityReferenceDependencyManager implements EntityReferenceDependencyManagerInterface {
-
-  /**
-   * The entity type manager.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
-   */
-  protected $entityTypeManager;
-
-  /**
-   * Create an EntityReferenceDependencyManager.
-   */
-  public function __construct(EntityTypeManagerInterface $entityTypeManager) {
-    $this->entityTypeManager = $entityTypeManager;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function hasDependents(EntityInterface $entity) {
-    return $this->entityTypeManager
-      ->getHandler($entity->getEntityTypeId(), 'entity_reference_integrity')
-      ->hasDependents($entity);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDependentEntityIds(EntityInterface $entity) {
-    return $this->entityTypeManager
-      ->getHandler($entity->getEntityTypeId(), 'entity_reference_integrity')
-      ->getDependentEntityIds($entity);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDependentEntities(EntityInterface $entity) {
-    return $this->entityTypeManager
-      ->getHandler($entity->getEntityTypeId(), 'entity_reference_integrity')
-      ->getDependentEntities($entity);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getAccessDeniedReason(EntityInterface $entity, bool $translate = TRUE) {
-    return EntityReferenceIntegrityEntityHandler::getAccessDeniedReason($entity, $translate);
-  }
-
-}
-- 
GitLab


From eb0c0824fc7f2a2e87335612f6875ccad21219f6 Mon Sep 17 00:00:00 2001
From: Michael Stenta <mike@mstenta.net>
Date: Fri, 28 Feb 2025 09:53:27 -0500
Subject: [PATCH 6/6] Rename EntityReferenceIntegrityDependencyManagerInterface
 to EntityReferenceIntegrityEntityHandlerInterface.

---
 src/EntityReferenceIntegrityEntityHandler.php                   | 2 +-
 ...e.php => EntityReferenceIntegrityEntityHandlerInterface.php} | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename src/{EntityReferenceDependencyManagerInterface.php => EntityReferenceIntegrityEntityHandlerInterface.php} (96%)

diff --git a/src/EntityReferenceIntegrityEntityHandler.php b/src/EntityReferenceIntegrityEntityHandler.php
index 856160d..c829866 100644
--- a/src/EntityReferenceIntegrityEntityHandler.php
+++ b/src/EntityReferenceIntegrityEntityHandler.php
@@ -12,7 +12,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 /**
  * Entity reference integrity entity handler.
  */
-class EntityReferenceIntegrityEntityHandler implements EntityHandlerInterface, EntityReferenceDependencyManagerInterface {
+class EntityReferenceIntegrityEntityHandler implements EntityHandlerInterface, EntityReferenceIntegrityEntityHandlerInterface {
 
   /**
    * A referential field map.
diff --git a/src/EntityReferenceDependencyManagerInterface.php b/src/EntityReferenceIntegrityEntityHandlerInterface.php
similarity index 96%
rename from src/EntityReferenceDependencyManagerInterface.php
rename to src/EntityReferenceIntegrityEntityHandlerInterface.php
index 988a5cc..9285a53 100644
--- a/src/EntityReferenceDependencyManagerInterface.php
+++ b/src/EntityReferenceIntegrityEntityHandlerInterface.php
@@ -7,7 +7,7 @@ use Drupal\Core\Entity\EntityInterface;
 /**
  * An interface for calculating entity dependency.
  */
-interface EntityReferenceDependencyManagerInterface {
+interface EntityReferenceIntegrityEntityHandlerInterface {
 
   /**
    * Check if an entity has dependent entities.
-- 
GitLab