dev/core#1059 Fix contribution search to work with url parameters in force mode
authoreileen <emcnaughton@wikimedia.org>
Sun, 23 Jun 2019 23:59:18 +0000 (11:59 +1200)
committereileen <emcnaughton@wikimedia.org>
Mon, 24 Jun 2019 22:17:10 +0000 (10:17 +1200)
Note this is part of the general 'convert receive_date to datepicker' work

CRM/Contribute/Form/Search.php

index 24262e41d59c9eb9555cd83f6001f887e7c26f51..d021b8157ba5956150c790749f29277d225335f8 100644 (file)
@@ -72,6 +72,9 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
 
   /**
    * Processing needed for buildForm and later.
+   *
+   * @throws \CiviCRM_API3_Exception
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     $this->set('searchFormName', 'Search');
@@ -103,6 +106,9 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
     }
 
     if ($this->_force) {
+      // Search field metadata is normally added in buildForm but we are bypassing that in this flow
+      // (I've always found the flow kinda confusing & perhaps that is the problem but this mitigates)
+      $this->addSearchFieldMetadata(['Contribution' => CRM_Contribute_BAO_Query::getSearchFieldMetadata()]);
       $this->postProcess();
       $this->set('force', 0);
     }
@@ -163,7 +169,8 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
       CRM_Core_Error::deprecatedFunctionWarning('pass receive_date_high not end');
     }
     $this->_defaults = parent::setDefaultValues();
-    if (empty($this->_defaults['contribution_status_id'])) {
+    if (empty($this->_defaults['contribution_status_id']) && !$this->_force) {
+      // In force mode only parameters from the url will be used. When visible/ explicit this is a useful default.
       $this->_defaults['contribution_status_id'][1] = CRM_Core_PseudoConstant::getKey(
         'CRM_Contribute_BAO_Contribution',
         'contribution_status_id',
@@ -406,6 +413,8 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
     if (!$this->_force) {
       return;
     }
+    // Start by loading url defaults.
+    $this->_formValues = $this->setDefaultValues();
 
     $status = CRM_Utils_Request::retrieve('status', 'String');
     if ($status) {