Move entityRef filters into their respective BAOs
authorColeman Watts <coleman@civicrm.org>
Sun, 17 Feb 2019 19:20:09 +0000 (14:20 -0500)
committerColeman Watts <coleman@civicrm.org>
Sun, 17 Feb 2019 19:25:21 +0000 (14:25 -0500)
CRM/Activity/BAO/Activity.php
CRM/Campaign/BAO/Campaign.php
CRM/Case/BAO/Case.php
CRM/Contact/BAO/Contact.php
CRM/Core/DAO.php
CRM/Core/Resources.php
CRM/Event/BAO/Event.php

index e4bee42129fa3eefb4bed8f704c35595f223544a..090ef3b103f6d54bd5bad1201c50fdf713292dcc 100644 (file)
@@ -3228,4 +3228,14 @@ INNER JOIN  civicrm_option_group grp ON (grp.id = option_group_id AND grp.name =
     return FALSE;
   }
 
+  /**
+   * @return array
+   */
+  public static function getEntityRefFilters() {
+    return [
+      ['key' => 'activity_type_id', 'value' => ts('Activity Type')],
+      ['key' => 'status_id', 'value' => ts('Activity Status')],
+    ];
+  }
+
 }
index aad66fc160b51d7c407069dba6644ead704a693a..31135918847ab779ecd45308bd77c4ad2fb7a063 100644 (file)
@@ -665,6 +665,44 @@ INNER JOIN  civicrm_group grp ON ( grp.id = campgrp.entity_id )
     $form->assign('campaignInfo', $campaignInfo);
   }
 
+  /**
+   * @return array
+   */
+  public static function getEntityRefFilters() {
+    return [
+      ['key' => 'campaign_type_id', 'value' => ts('Campaign Type')],
+      ['key' => 'status_id', 'value' => ts('Status')],
+      [
+        'key' => 'start_date',
+        'value' => ts('Start Date'),
+        'options' => [
+          ['key' => '{">":"now"}', 'value' => ts('Upcoming')],
+          [
+            'key' => '{"BETWEEN":["now - 3 month","now"]}',
+            'value' => ts('Past 3 Months'),
+          ],
+          [
+            'key' => '{"BETWEEN":["now - 6 month","now"]}',
+            'value' => ts('Past 6 Months'),
+          ],
+          [
+            'key' => '{"BETWEEN":["now - 1 year","now"]}',
+            'value' => ts('Past Year'),
+          ],
+        ],
+      ],
+      [
+        'key' => 'end_date',
+        'value' => ts('End Date'),
+        'options' => [
+          ['key' => '{">":"now"}', 'value' => ts('In the future')],
+          ['key' => '{"<":"now"}', 'value' => ts('In the past')],
+          ['key' => '{"IS NULL":"1"}', 'value' => ts('Not set')],
+        ],
+      ],
+    ];
+  }
+
   /**
    * Links to create new campaigns from entityRef widget
    *
index 9237e00d3e464ee50d010db19843dc7beb3580e4..18549754e053dd61880b1e7aff302bbb75f924d1 100644 (file)
@@ -3261,4 +3261,28 @@ WHERE id IN (' . implode(',', $copiedActivityIds) . ')';
     return "$name <$address>";
   }
 
+  /**
+   * @return array
+   */
+  public static function getEntityRefFilters() {
+    $filters = [
+      [
+        'key' => 'case_id.case_type_id',
+        'value' => ts('Case Type'),
+        'entity' => 'Case',
+      ],
+      [
+        'key' => 'case_id.status_id',
+        'value' => ts('Case Status'),
+        'entity' => 'Case',
+      ],
+    ];
+    foreach (CRM_Contact_BAO_Contact::getEntityRefFilters() as $filter) {
+      $filter += ['entity' => 'contact'];
+      $filter['key'] = 'contact_id.' . $filter['key'];
+      $filters[] = $filter;
+    }
+    return $filters;
+  }
+
 }
index f0cea76bcce7a17f976ca42b2522d7783fd8ed03..b72f1b409a7790e67fd9dfa4cf7325fa5c5322d3 100644 (file)
@@ -3660,4 +3660,22 @@ LEFT JOIN civicrm_address ON ( civicrm_address.contact_id = civicrm_contact.id )
     return CRM_Core_Permission::check([['profile create', 'profile listings and forms']]);
   }
 
+  /**
+   * @return array
+   */
+  public static function getEntityRefFilters() {
+    return [
+      ['key' => 'contact_type', 'value' => ts('Contact Type')],
+      ['key' => 'group', 'value' => ts('Group'), 'entity' => 'group_contact'],
+      ['key' => 'tag', 'value' => ts('Tag'), 'entity' => 'entity_tag'],
+      ['key' => 'state_province', 'value' => ts('State/Province'), 'entity' => 'address'],
+      ['key' => 'country', 'value' => ts('Country'), 'entity' => 'address'],
+      ['key' => 'gender_id', 'value' => ts('Gender'), 'condition' => ['contact_type' => 'Individual']],
+      ['key' => 'is_deceased', 'value' => ts('Deceased'), 'condition' => ['contact_type' => 'Individual']],
+      ['key' => 'contact_id', 'value' => ts('Contact ID'), 'type' => 'text'],
+      ['key' => 'external_identifier', 'value' => ts('External ID'), 'type' => 'text'],
+      ['key' => 'source', 'value' => ts('Contact Source'), 'type' => 'text'],
+    ];
+  }
+
 }
index 3f0d19b886a3827577b45a486cb0442ff7576411..eb24e0ed285b7607348f0105f8b9d5fc81e3924b 100644 (file)
@@ -2810,6 +2810,13 @@ SELECT contact_id
     }
   }
 
+  /**
+   * @return array
+   */
+  public static function getEntityRefFilters() {
+    return [];
+  }
+
   /**
    * Get exportable fields with pseudoconstants rendered as an extra field.
    *
index 412731d34a8b9dfd21957fcfcf7b51527dcbf7ec..17786d3f0d59506d0dfc67874d85664cff4338fd 100644 (file)
@@ -804,7 +804,6 @@ class CRM_Core_Resources {
 
   /**
    * Provide a list of available entityRef filters.
-   * @todo: move component filters into their respective components (e.g. CiviEvent)
    *
    * @return array
    */
@@ -812,102 +811,28 @@ class CRM_Core_Resources {
     $filters = array();
     $config = CRM_Core_Config::singleton();
 
-    if (in_array('CiviEvent', $config->enableComponents)) {
-      $filters['event'] = array(
-        array('key' => 'event_type_id', 'value' => ts('Event Type')),
-        array(
-          'key' => 'start_date',
-          'value' => ts('Start Date'),
-          'options' => array(
-            array('key' => '{">":"now"}', 'value' => ts('Upcoming')),
-            array(
-              'key' => '{"BETWEEN":["now - 3 month","now"]}',
-              'value' => ts('Past 3 Months'),
-            ),
-            array(
-              'key' => '{"BETWEEN":["now - 6 month","now"]}',
-              'value' => ts('Past 6 Months'),
-            ),
-            array(
-              'key' => '{"BETWEEN":["now - 1 year","now"]}',
-              'value' => ts('Past Year'),
-            ),
-          ),
-        ),
-      );
-    }
-
-    $filters['activity'] = array(
-      array('key' => 'activity_type_id', 'value' => ts('Activity Type')),
-      array('key' => 'status_id', 'value' => ts('Activity Status')),
-    );
-
-    $filters['contact'] = [
-      ['key' => 'contact_type', 'value' => ts('Contact Type')],
-      ['key' => 'group', 'value' => ts('Group'), 'entity' => 'group_contact'],
-      ['key' => 'tag', 'value' => ts('Tag'), 'entity' => 'entity_tag'],
-      ['key' => 'state_province', 'value' => ts('State/Province'), 'entity' => 'address'],
-      ['key' => 'country', 'value' => ts('Country'), 'entity' => 'address'],
-      ['key' => 'gender_id', 'value' => ts('Gender'), 'condition' => ['contact_type' => 'Individual']],
-      ['key' => 'is_deceased', 'value' => ts('Deceased'), 'condition' => ['contact_type' => 'Individual']],
-      ['key' => 'contact_id', 'value' => ts('Contact ID'), 'type' => 'text'],
-      ['key' => 'external_identifier', 'value' => ts('External ID'), 'type' => 'text'],
-      ['key' => 'source', 'value' => ts('Contact Source'), 'type' => 'text'],
-    ];
-
-    if (in_array('CiviCase', $config->enableComponents)) {
-      $filters['case'] = array(
-        array(
-          'key' => 'case_id.case_type_id',
-          'value' => ts('Case Type'),
-          'entity' => 'Case',
-        ),
-        array(
-          'key' => 'case_id.status_id',
-          'value' => ts('Case Status'),
-          'entity' => 'Case',
-        ),
-      );
-      foreach ($filters['contact'] as $filter) {
-        $filter += array('entity' => 'contact');
-        $filter['key'] = 'contact_id.' . $filter['key'];
-        $filters['case'][] = $filter;
+    $disabledComponents = [];
+    $dao = CRM_Core_DAO::executeQuery("SELECT name, namespace FROM civicrm_component");
+    while ($dao->fetch()) {
+      if (!in_array($dao->name, $config->enableComponents)) {
+        $disabledComponents[$dao->name] = $dao->namespace;
       }
     }
 
-    if (in_array('CiviCampaign', $config->enableComponents)) {
-      $filters['campaign'] = [
-        ['key' => 'campaign_type_id', 'value' => ts('Campaign Type')],
-        ['key' => 'status_id', 'value' => ts('Status')],
-        [
-          'key' => 'start_date',
-          'value' => ts('Start Date'),
-          'options' => [
-            ['key' => '{">":"now"}', 'value' => ts('Upcoming')],
-            [
-              'key' => '{"BETWEEN":["now - 3 month","now"]}',
-              'value' => ts('Past 3 Months'),
-            ],
-            [
-              'key' => '{"BETWEEN":["now - 6 month","now"]}',
-              'value' => ts('Past 6 Months'),
-            ],
-            [
-              'key' => '{"BETWEEN":["now - 1 year","now"]}',
-              'value' => ts('Past Year'),
-            ],
-          ],
-        ],
-        [
-          'key' => 'end_date',
-          'value' => ts('End Date'),
-          'options' => [
-            ['key' => '{">":"now"}', 'value' => ts('In the future')],
-            ['key' => '{"<":"now"}', 'value' => ts('In the past')],
-            ['key' => '{"IS NULL":"1"}', 'value' => ts('Not set')],
-          ],
-        ],
-      ];
+    foreach (CRM_Core_DAO_AllCoreTables::daoToClass() as $entity => $daoName) {
+      // Skip DAOs of disabled components
+      foreach ($disabledComponents as $nameSpace) {
+        if (strpos($daoName, $nameSpace) === 0) {
+          continue 2;
+        }
+      }
+      $baoName = str_replace('_DAO_', '_BAO_', $daoName);
+      if (class_exists($baoName)) {
+        $entityFilters = $baoName::getEntityRefFilters();
+        if ($entityFilters) {
+          $filters[_civicrm_api_get_entity_name_from_camel($entity)] = $entityFilters;
+        }
+      }
     }
 
     CRM_Utils_Hook::entityRefFilters($filters);
index 68216a7e5f59c6b52ed3bdf95cbab9cd94d50ecc..755847c056adf10f5635ff540c336dd2b4884d40 100644 (file)
@@ -2370,4 +2370,32 @@ LEFT  JOIN  civicrm_price_field_value value ON ( value.id = lineItem.price_field
     return CRM_Core_PseudoConstant::get(__CLASS__, $fieldName, $params, $context);
   }
 
+  /**
+   * @return array
+   */
+  public static function getEntityRefFilters() {
+    return [
+      ['key' => 'event_type_id', 'value' => ts('Event Type')],
+      [
+        'key' => 'start_date',
+        'value' => ts('Start Date'),
+        'options' => [
+          ['key' => '{">":"now"}', 'value' => ts('Upcoming')],
+          [
+            'key' => '{"BETWEEN":["now - 3 month","now"]}',
+            'value' => ts('Past 3 Months'),
+          ],
+          [
+            'key' => '{"BETWEEN":["now - 6 month","now"]}',
+            'value' => ts('Past 6 Months'),
+          ],
+          [
+            'key' => '{"BETWEEN":["now - 1 year","now"]}',
+            'value' => ts('Past Year'),
+          ],
+        ],
+      ],
+    ];
+  }
+
 }