Move acl delete logic to an event listener
authorColeman Watts <coleman@civicrm.org>
Fri, 20 Aug 2021 19:54:06 +0000 (15:54 -0400)
committerColeman Watts <coleman@civicrm.org>
Sat, 21 Aug 2021 21:18:23 +0000 (17:18 -0400)
CRM/ACL/BAO/ACL.php
Civi/Core/Event/EventScanner.php

index e1053391929245cbfb34dfe98264d73134cca7b9..82aaf8dabcbf675307aeebb2e69358d0da4c3a13 100644 (file)
@@ -18,7 +18,7 @@
 /**
  *  Access Control List
  */
-class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
+class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL implements \Civi\Test\HookInterface {
 
   /**
    * Available operations for  pseudoconstant.
@@ -433,16 +433,21 @@ SELECT g.*
    * Delete ACL records.
    *
    * @param int $aclId
-   *   ID of the ACL record to be deleted.
-   *
+   * @deprecated
    */
   public static function del($aclId) {
-    // delete all entries from the acl cache
-    CRM_ACL_BAO_Cache::resetCache();
+    self::deleteRecord(['id' => $aclId]);
+  }
 
-    $acl = new CRM_ACL_DAO_ACL();
-    $acl->id = $aclId;
-    $acl->delete();
+  /**
+   * Event fired before an action is taken on an ACL record.
+   * @param \Civi\Core\Event\PreEvent $event
+   */
+  public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) {
+    // Reset cache when deleting an ACL record
+    if ($event->action === 'delete') {
+      CRM_ACL_BAO_Cache::resetCache();
+    }
   }
 
   /**
index 912e313168423b1bd1a10a29828f0acb2cc45ae5..9b6c93daa598df4af3c1aeb08442ff61f601304d 100644 (file)
@@ -53,7 +53,7 @@ class EventScanner {
    * @param string|null $self
    *   If the target $class is focused on a specific entity/form/etc, use the `$self` parameter to specify it.
    *   This will activate support for `self_{$event}` methods.
-   *   Ex: if '$self' is 'Contact', then 'function self_hook_civicrm_pre()' maps to 'hook_civicrm_pre::Contact'.
+   *   Ex: if '$self' is 'Contact', then 'function self_hook_civicrm_pre()' maps to 'on_hook_civicrm_pre::Contact'.
    * @return array
    *   List of events/listeners. Format is compatible with 'getSubscribedEvents()'.
    *   Ex: ['some.event' => [['firstFunc'], ['secondFunc']]