_stateID = CRM_Utils_Request::retrieve('stateID', 'Integer', CRM_Core_DAO::$_nullObject ); if ($this->_stateID) { $formValues['state_province_id'] = $this->_stateID; } } $this->_columns = array( ts('Contact ID') => 'contact_id', ts('Contact Type') => 'contact_type', ts('Name') => 'sort_name', ts('State') => 'state_province', ); } /** * @param $form */ function buildForm(&$form) { $form->add('text', 'household_name', ts('Household Name'), TRUE ); $stateProvince = array('' => ts('- any state/province -')) + CRM_Core_PseudoConstant::stateProvince(); $form->addElement('select', 'state_province_id', ts('State/Province'), $stateProvince); /** * You can define a custom title for the search form */ $this->setTitle('My Search Title'); /** * if you are using the standard template, this array tells the template what elements * are part of the search criteria */ $form->assign('elements', array('household_name', 'state_province_id')); } /** * @return array */ function summary() { $summary = array( 'summary' => 'This is a summary', 'total' => 50.0, ); return $summary; } function contactIDs($offset = 0, $rowcount = 0, $sort = NULL, $returnSQL = FALSE) { return $this->all($offset, $rowcount, $sort, FALSE, TRUE); } /** * @param int $offset * @param int $rowcount * @param null $sort * @param bool $includeContactIDs * @param bool $justIDs * * @return string */ function all($offset = 0, $rowcount = 0, $sort = NULL, $includeContactIDs = FALSE, $justIDs = FALSE ) { if ($justIDs) { $selectClause = "contact_a.id as contact_id"; $sort = 'contact_a.id'; } else { $selectClause = " contact_a.id as contact_id , contact_a.contact_type as contact_type, contact_a.sort_name as sort_name, state_province.name as state_province "; } return $this->sql($selectClause, $offset, $rowcount, $sort, $includeContactIDs, NULL ); } /** * @return string */ function from() { return " FROM civicrm_contact contact_a LEFT JOIN civicrm_address address ON ( address.contact_id = contact_a.id AND address.is_primary = 1 ) LEFT JOIN civicrm_email ON ( civicrm_email.contact_id = contact_a.id AND civicrm_email.is_primary = 1 ) LEFT JOIN civicrm_state_province state_province ON state_province.id = address.state_province_id "; } /** * @param bool $includeContactIDs * * @return string */ function where($includeContactIDs = FALSE) { $params = array(); $where = "contact_a.contact_type = 'Household'"; $count = 1; $clause = array(); $name = CRM_Utils_Array::value('household_name', $this->_formValues ); if ($name != NULL) { if (strpos($name, '%') === FALSE) { $name = "%{$name}%"; } $params[$count] = array($name, 'String'); $clause[] = "contact_a.household_name LIKE %{$count}"; $count++; } $state = CRM_Utils_Array::value('state_province_id', $this->_formValues ); if (!$state && $this->_stateID ) { $state = $this->_stateID; } if ($state) { $params[$count] = array($state, 'Integer'); $clause[] = "state_province.id = %{$count}"; } if (!empty($clause)) { $where .= ' AND ' . implode(' AND ', $clause); } return $this->whereClause($where, $params); } /** * @return string */ function templateFile() { return 'CRM/Contact/Form/Search/Custom.tpl'; } /** * @return array */ function setDefaultValues() { return array( 'household_name' => '', ); } /** * @param $row */ function alterRow(&$row) { $row['sort_name'] .= ' ( altered )'; } /** * @param $title */ function setTitle($title) { if ($title) { CRM_Utils_System::setTitle($title); } else { CRM_Utils_System::setTitle(ts('Search')); } } }