hook_civicrm_links.evch.php - Ignore miscreant `create.new.shortcuts`
authorTim Otten <totten@civicrm.org>
Tue, 19 Dec 2023 22:19:12 +0000 (14:19 -0800)
committerTim Otten <totten@civicrm.org>
Tue, 19 Dec 2023 23:10:55 +0000 (15:10 -0800)
This variant of hook_civicrm_links has multiple compliance issues.  It
raises so many red-flags that it makes the site unbrowseable and obscures
any useful signal about the other hooks. Skip it until someone
can take a full look.

tests/events/hook_civicrm_links.evch.php

index 0c62b8d6bf4da7041afba2617081cffaf7f5d83d..c47a4f37180ecb0138e9b09384cb6dcb55370eba 100644 (file)
@@ -5,7 +5,7 @@ use Civi\Test\HookInterface;
 
 return new class() extends EventCheck implements HookInterface {
 
-  // There are several properties named "$grandfatherdXyz". These mark itmes which
+  // There are several properties named "$grandfatherdXyz". These mark items which
   // pass through hook_civicrm_links but deviate from the plain interpretation of the docs.
   // Auditing or cleaning each would be its own separate project. Please feel free to
   // do that audit and figure how to normalize it. But for now, the goal of this file is
@@ -69,6 +69,16 @@ return new class() extends EventCheck implements HookInterface {
     'pcp.user.actions::Pcp',
   ];
 
+  /**
+   * List of events with multiple problems. These are completely ignored.
+   *
+   * @var string[]
+   */
+  protected $unrepentantMiscreants = [
+    'create.new.shortcuts', /* FIXME */
+    'create.new.shorcuts', /* Deprecated */
+  ];
+
   /**
    * Ensure that the hook data is always well-formed.
    *
@@ -78,6 +88,10 @@ return new class() extends EventCheck implements HookInterface {
     // fprintf(STDERR, "CHECK hook_civicrm_links($op)\n");
     $msg = sprintf('Non-conforming hook_civicrm_links(%s, %s)', json_encode($op), json_encode($objectName));
 
+    if (in_array($op, $this->unrepentantMiscreants)) {
+      return;
+    }
+
     $this->assertTrue((bool) preg_match(';^\w+(\.\w+)+$;', $op), "$msg: Operation ($op) should be dotted expression");
     $this->assertTrue((bool) preg_match(';^[A-Z][a-zA-Z0-9]+$;', $objectName) || in_array($objectName, $this->grandfatheredObjectNames),
       "$msg: Object name ($objectName) should be a CamelCase name or a grandfathered name");