DynamicFKAccessTrait - Emit explicit error-message for invalid table references
authorTim Otten <totten@civicrm.org>
Fri, 11 Jun 2021 23:44:06 +0000 (16:44 -0700)
committerTim Otten <totten@civicrm.org>
Fri, 11 Jun 2021 23:56:00 +0000 (16:56 -0700)
Use-Case: You create a dynamic FK with a reference to an invalid table.

Before: Returns an API error/exception about type-matching (string vs null)

After: Returns an API error/exception about the invalid reference

CRM/Core/DynamicFKAccessTrait.php

index 041d53717d56b27422328ba427a58de5da3e0423..041ec3741e2ac40ff6bdc79ba2f0f4def35cf44e 100644 (file)
@@ -39,6 +39,10 @@ trait CRM_Core_DynamicFKAccessTrait {
     }
     if ($eid && $table) {
       $targetEntity = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($table));
+      if ($targetEntity === NULL) {
+        throw new \API_Exception(sprintf('Cannot resolve permissions for dynamic foreign key in "%s". Invalid table reference "%s".',
+          static::getTableName(), $table));
+      }
       return \Civi\Api4\Utils\CoreUtil::checkAccessDelegated($targetEntity, 'update', ['id' => $eid], $userID);
     }
     return TRUE;