Convert event search to use metadata
authoreileen <emcnaughton@wikimedia.org>
Sat, 25 May 2019 07:41:54 +0000 (19:41 +1200)
committereileen <emcnaughton@wikimedia.org>
Tue, 28 May 2019 22:59:29 +0000 (10:59 +1200)
This only converts one field (participant status) but lays the ground-work for converting more &
removing the jcalendar

CRM/Core/Form/Search.php
CRM/Event/BAO/Query.php
CRM/Event/Form/Search.php

index b6fb1cb4d46c537dbcb80e0b2ae4ae52257f9101..5071980e4bcccd2f828a6df2ff7d28c467cc4d1b 100644 (file)
@@ -125,7 +125,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
   /**
    * Common buildForm tasks required by all searches.
    */
-  public function buildQuickform() {
+  public function buildQuickForm() {
     CRM_Core_Resources::singleton()
       ->addScriptFile('civicrm', 'js/crm.searchForm.js', 1, 'html-header')
       ->addStyleFile('civicrm', 'css/searchForm.css', 1, 'html-header');
index 5f8e8bf00023d7db07332b00f047e3c71381f5e1..4d21ac4ea580e0a772881002d80187c1efb17962 100644 (file)
@@ -575,9 +575,29 @@ class CRM_Event_BAO_Query extends CRM_Core_BAO_Query {
   }
 
   /**
-   * @param CRM_Core_Form $form
+   * Get the metadata for fields to be included on the grant search form.
+   *
+   * @throws \CiviCRM_API3_Exception
+   */
+  public static function getSearchFieldMetadata() {
+    $fields = [
+      'participant_status_id',
+    ];
+    $metadata = civicrm_api3('Participant', 'getfields', [])['values'];
+    return array_intersect_key($metadata, array_flip($fields));
+  }
+
+  /**
+   * Build the event search form.
+   *
+   * @param \CRM_Event_Form_Search $form
+   *
+   * @throws \CiviCRM_API3_Exception
+   * @throws \CRM_Core_Exception
    */
   public static function buildSearchForm(&$form) {
+    $form->addSearchFieldMetadata(['Participant' => self::getSearchFieldMetadata()]);
+    $form->addFormFieldsFromMetadata();
     $dataURLEventFee = CRM_Utils_System::url('civicrm/ajax/eventFee',
       "reset=1",
       FALSE, NULL, FALSE
@@ -616,16 +636,6 @@ class CRM_Event_BAO_Query extends CRM_Core_BAO_Query {
 
     $form->addElement('checkbox', "event_include_repeating_events", NULL, ts('Include participants from all events in the %1 series', [1 => '<em>%1</em>']));
 
-    $form->addSelect('participant_status_id',
-      [
-        'entity' => 'participant',
-        'label' => ts('Participant Status'),
-        'multiple' => 'multiple',
-        'option_url' => NULL,
-        'placeholder' => ts('- any -'),
-      ]
-    );
-
     $form->addSelect('participant_role_id',
       [
         'entity' => 'participant',
index 3f7af061181c85fe778bce53d5a03f3d32b20337..4282764ef9b5ac851e35e93d18c204d01386b31a 100644 (file)
  * @copyright CiviCRM LLC (c) 2004-2019
  */
 
-/**
- * Files required
- */
-
 /**
  * This file is for civievent search
  */
@@ -74,6 +70,21 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search {
    */
   protected $_ssID;
 
+  /**
+   * Metadata of all fields to include on the form.
+   *
+   * @var array
+   */
+  protected $searchFieldMetadata = [];
+
+
+  /**
+   * @return string
+   */
+  public function getDefaultEntity() {
+    return 'Participant';
+  }
+
   /**
    * Processing needed for buildForm and later.
    *
@@ -138,8 +149,9 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search {
   /**
    * Build the form object.
    *
-   *
    * @return void
+   *
+   * @throws \CRM_Core_Exception
    */
   public function buildQuickForm() {
     parent::buildQuickForm();