X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FForm%2FSearch.php;h=0553ae91690d5e1d0ada50d218cca4e5dc1ab198;hb=cc58f6c5756ba74b4a914e21bb011332d5d79c80;hp=1a46af8da2be0c484a6143c8d15f5a3ba2656f36;hpb=51299070ff4c25eb43a8c5c33af73d2a80e4d299;p=civicrm-core.git diff --git a/CRM/Core/Form/Search.php b/CRM/Core/Form/Search.php index 1a46af8da2..0553ae9169 100644 --- a/CRM/Core/Form/Search.php +++ b/CRM/Core/Form/Search.php @@ -1,27 +1,11 @@ searchFieldMetadata = array_merge($this->searchFieldMetadata, $searchFieldMetadata); } + /** + * Prepare for search by loading options from the url, handling force searches, retrieving form values. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public function preProcess() { + $this->loadStandardSearchOptionsFromUrl(); + if ($this->_force) { + $this->handleForcedSearch(); + } + $this->_formValues = $this->getFormValues(); + } + /** * This virtual function is used to set the default values of various form elements. * @@ -132,7 +130,10 @@ class CRM_Core_Form_Search extends CRM_Core_Form { * @throws \CRM_Core_Exception */ public function setDefaultValues() { - $defaults = (array) $this->_formValues; + // Use the form values stored to the form. Ideally 'formValues' + // would remain 'pure' & another array would be wrangled. + // We don't do that - so we want the version of formValues stored early on. + $defaults = (array) $this->get('formValues'); foreach (array_keys($this->getSearchFieldMetadata()) as $entity) { $defaults = array_merge($this->getEntityDefaults($entity), $defaults); } @@ -146,6 +147,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form { */ protected function setFormValues() { $this->_formValues = $this->getFormValues(); + $this->set('formValues', $this->_formValues); $this->convertTextStringsToUseLikeOperator(); } @@ -286,7 +288,12 @@ class CRM_Core_Form_Search extends CRM_Core_Form { if (empty($_POST[$fieldName])) { $value = CRM_Utils_Request::retrieveValue($fieldName, $this->getValidationTypeForField($entity, $fieldName), NULL, NULL, 'GET'); if ($value !== NULL) { - $defaults[$fieldName] = $value; + if ($fieldSpec['html']['type'] === 'Select') { + $defaults[$fieldName] = explode(',', $value); + } + else { + $defaults[$fieldName] = $value; + } } if ($fieldSpec['type'] === CRM_Utils_Type::T_DATE || ($fieldSpec['type'] === CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME)) { $low = CRM_Utils_Request::retrieveValue($fieldName . '_low', 'Timestamp', NULL, NULL, 'GET'); @@ -375,7 +382,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form { $title, CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name') ); - $this->searchFieldMetadata['Contact']['sort_name'] = ['name' => 'sort_name', 'title' => $title, 'type' => CRM_Utils_Type::T_STRING]; + $this->searchFieldMetadata['Contact']['sort_name'] = array_merge(CRM_Contact_DAO_Contact::fields()['sort_name'], ['name' => 'sort_name', 'title' => $title, 'type' => CRM_Utils_Type::T_STRING]); } /** @@ -447,6 +454,27 @@ class CRM_Core_Form_Search extends CRM_Core_Form { } + /** + * Get the label for the group field. + * + * @return string + */ + protected function getGroupLabel() { + return ts('Group(s)'); + } + + /** + * Get the label for the tag field. + * + * We do this in a function so the 'ts' wraps the whole string to allow + * better translation. + * + * @return string + */ + protected function getTagLabel() { + return ts('Tag(s)'); + } + /** * we allow the controller to set force/reset externally, useful when we are being * driven by the wizard framework @@ -501,6 +529,22 @@ class CRM_Core_Form_Search extends CRM_Core_Form { return (array) $this->get('formValues'); } + /** + * Get the string processed to determine sort order. + * + * This looks like 'sort_name_u' for Sort name ascending. + * + * @return string|null + */ + protected function getSortID() { + if ($this->get(CRM_Utils_Sort::SORT_ID)) { + return CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID), + $this->get(CRM_Utils_Sort::SORT_DIRECTION) + ); + } + return NULL; + } + /** * Set the metadata for the form. * @@ -518,6 +562,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form { */ protected function handleForcedSearch() { $this->setSearchMetadata(); + $this->addContactSearchFields(); $this->postProcess(); $this->set('force', 0); }