Afform - hide disabled contact types & entities from disabled components/extensions
authorColeman Watts <coleman@civicrm.org>
Thu, 13 May 2021 04:07:01 +0000 (00:07 -0400)
committerColeman Watts <coleman@civicrm.org>
Thu, 13 May 2021 04:07:01 +0000 (00:07 -0400)
ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php
ext/afform/admin/afformEntities/Activity.php
ext/afform/admin/afformEntities/Household.php
ext/afform/admin/afformEntities/Individual.php
ext/afform/admin/afformEntities/Organization.php

index eace44476d787e514e79a6d1c2f3246b7348b749..9146d03667bfab9488cc5a57dbe752bcf7bcd3c2 100644 (file)
@@ -51,14 +51,16 @@ class AfformAdminMeta {
   }
 
   /**
-   * @param $entityName
-   * @return array
+   * Get info about an api entity, with special handling for contact types
+   * @param string $entityName
+   * @return array|null
    */
-  public static function getApiEntity($entityName) {
-    if (in_array($entityName, ['Individual', 'Household', 'Organization'])) {
-      $contactTypes = \CRM_Contact_BAO_ContactType::basicTypeInfo();
+  public static function getApiEntity(string $entityName) {
+    $contactTypes = \CRM_Contact_BAO_ContactType::basicTypeInfo();
+    if (isset($contactTypes[$entityName])) {
       return [
         'entity' => 'Contact',
+        'contact_type' => $entityName,
         'label' => $contactTypes[$entityName]['label'],
       ];
     }
@@ -66,6 +68,10 @@ class AfformAdminMeta {
       ->addWhere('name', '=', $entityName)
       ->addSelect('title', 'icon')
       ->execute()->first();
+    if (!$info) {
+      // Disabled contact type or nonexistent api entity
+      return NULL;
+    }
     return [
       'entity' => $entityName,
       'label' => $info['title'],
@@ -127,21 +133,15 @@ class AfformAdminMeta {
       if (is_dir($dir)) {
         // Scan for entities
         foreach (glob($dir . 'afformEntities/*.php') as $file) {
-          $entity = include $file;
-          $afformEntity = basename($file, '.php');
-          // Contact pseudo-entities (Individual, Organization, Household) get special treatment,
-          // notably their fields are pre-loaded since they are both commonly-used and nonstandard
-          if (!empty($entity['contact_type'])) {
-            // Skip disabled contact types
-            if (!isset($contactTypes[$entity['contact_type']])) {
-              continue;
-            }
-            $entity['label'] = $contactTypes[$entity['contact_type']]['label'];
-          }
-          elseif (empty($entity['label']) || empty($entity['icon'])) {
-            $entity += self::getApiEntity($entity['entity']);
+          $entityInfo = include $file;
+          $entityName = basename($file, '.php');
+          $apiInfo = self::getApiEntity($entityInfo['entity'] ?? $entityName);
+          // Skip disabled contact types & entities from disabled components/extensions
+          if (!$apiInfo) {
+            continue;
           }
-          $data['entities'][$afformEntity] = $entity;
+          $entityInfo += $apiInfo;
+          $data['entities'][$entityName] = $entityInfo;
         }
         // Scan for input types
         foreach (glob($dir . 'ang/afGuiEditor/inputType/*.html') as $file) {
index ae8a651eba6bcf1c5ccd864447f25ad48a86af14..a18f17f3b73fdf5575286674f54853f864327b71 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 return [
-  'entity' => 'Activity',
   'defaults' => "{'url-autofill': '1'}",
   'boilerplate' => [
     ['#tag' => 'af-field', 'name' => 'subject'],
index cf569b3432ce2f54dbbd554f125f47244299e9ef..159388b072910a1e2ea5dbcb08795490bb1105b4 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 return [
-  'entity' => 'Contact',
-  'contact_type' => 'Household',
   'defaults' => "{
     data: {
       contact_type: 'Household',
index cc580425e4ee434c1eff6d1b57efd33c4698134c..ef2d43b350bcc0a12897d16b3666608344fd9cdf 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 return [
-  'entity' => 'Contact',
-  'contact_type' => 'Individual',
   'defaults' => "{
     data: {
       contact_type: 'Individual',
index 5335b6ddc212e7bbeba6283c7c18c4d3c1753e7b..bd0f602b7e51e615b6311eed75c43ce6aac9a93e 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 return [
-  'entity' => 'Contact',
-  'contact_type' => 'Organization',
   'defaults' => "{
     data: {
       contact_type: 'Organization',