CRM-12925 - Search Builder - Allow query-classes to influence the options displayed...
authorTim Otten <totten@civicrm.org>
Fri, 23 Aug 2013 01:17:05 +0000 (18:17 -0700)
committerTim Otten <totten@civicrm.org>
Fri, 23 Aug 2013 01:19:29 +0000 (18:19 -0700)
----------------------------------------
* CRM-12925: Implement "Job" search (for "Search Builder")
  http://issues.civicrm.org/jira/browse/CRM-12925

CRM/Contact/BAO/Query/Hook.php
CRM/Contact/BAO/Query/Interface.php
CRM/Contact/Form/Search/Builder.php

index f66b4c101f8cbfe061caba5577418c9551fdd9e5..fa3e47372a5377a37a50e440a82815d849a16109 100644 (file)
@@ -80,6 +80,12 @@ class CRM_Contact_BAO_Query_Hook {
     return $extFields;
   }
 
+  public function alterSearchBuilderOptions(&$apiEntities, &$fieldOptions) {
+    foreach (self::getSearchQueryObjects() as $obj) {
+      $obj->alterSearchBuilderOptions($apiEntities, $fieldOptions);
+    }
+  }
+
   public function alterSearchQuery(&$query, $fnName) {
     foreach (self::getSearchQueryObjects() as $obj) {
       $obj->$fnName($query);
index c713317dedf3188e50d2bb8580f422f57505de70..ea6f6c3a3624379153acee9d38176ce7129c75b1 100644 (file)
@@ -64,4 +64,14 @@ abstract class CRM_Contact_BAO_Query_Interface {
   public function setAdvancedSearchPaneTemplatePath(&$paneTemplatePathArray, $type) {
     return NULL;
   }
-}
+
+  /**
+   * Describe options for available for use in the search-builder.
+   *
+   * @param array $apiEntities list of entities whose options should be automatically scanned using API metadata
+   * @param array $fieldOptions keys are field unique-names; values describe how to lookup the options
+   * @void
+   */
+  public function alterSearchBuilderOptions(&$apiEntities, &$fieldOptions) {
+  }
+}
\ No newline at end of file
index 1967c357b93aeb0fa7750ec513f0a4aac302c051..0699dfb1d821020fb5cd111e96c1c8d0cc33471f 100644 (file)
@@ -433,10 +433,11 @@ class CRM_Contact_Form_Search_Builder extends CRM_Contact_Form_Search {
       'membership_type' => 'membership',
     );
     $entities = array('contact', 'activity', 'participant', 'pledge', 'member', 'contribution');
+    CRM_Contact_BAO_Query_Hook::singleton()->alterSearchBuilderOptions($entities, $options);
     foreach ($entities as $entity) {
       $fields = civicrm_api($entity, 'getfields', array('version' => 3));
       foreach ($fields['values'] as $field => $info) {
-        if (!empty($info['options']) || !empty($info['pseudoconstant']) || !empty($info['option_group_id'])) {
+        if (!empty($info['options']) || !empty($info['pseudoconstant']) || !empty($info['option_group_id']) || !empty($info['enumValues'])) {
           $options[$field] = $entity;
           if (substr($field, -3) == '_id') {
             $options[substr($field, 0, -3)] = $entity;