*
* @var string
*/
- protected $_context = NULL;
+ protected $_context;
/**
* The list of tasks or actions that a searcher can perform on a result set.
$this->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.
*
* @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);
}
*/
protected function setFormValues() {
$this->_formValues = $this->getFormValues();
+ $this->set('formValues', $this->_formValues);
$this->convertTextStringsToUseLikeOperator();
}
/**
* Common buildForm tasks required by all searches.
+ *
+ * @throws \CRM_Core_Exception
*/
public function buildQuickForm() {
CRM_Core_Resources::singleton()
*
* The goal is to describe all fields in metadata and handle from metadata rather
* than existing ad hoc handling.
+ *
+ * @throws \CiviCRM_API3_Exception
*/
public function addFormFieldsFromMetadata() {
$this->addFormRule(['CRM_Core_Form_Search', 'formRule'], $this);
*
* Note that for translation purposes the full string works better than using 'prefix' hence we use override-able functions
* to define the string.
+ *
+ * @throws \CiviCRM_API3_Exception
*/
protected function addSortNameField() {
$title = civicrm_api3('setting', 'getvalue', ['name' => 'includeEmailInName', 'group' => 'Search Preferences']) ? $this->getSortNameLabelWithEmail() : $this->getSortNameLabelWithOutEmail();
/**
* Add generic fields that specify the contact.
+ *
+ * @throws \CiviCRM_API3_Exception
*/
protected function addContactSearchFields() {
if (!$this->isFormInViewOrEditMode()) {
/**
* we allow the controller to set force/reset externally, useful when we are being
* driven by the wizard framework
+ *
+ * @throws \CRM_Core_Exception
*/
protected function loadStandardSearchOptionsFromUrl() {
$this->_reset = CRM_Utils_Request::retrieve('reset', 'Boolean');
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.
*
*/
protected function handleForcedSearch() {
$this->setSearchMetadata();
+ $this->addContactSearchFields();
$this->postProcess();
$this->set('force', 0);
}