_columns = array( ts('Contact Id') => 'contact_id', ts('Address') => 'address', ts('Contact Type') => 'contact_type', ts('Name') => 'sort_name', ts('State') => 'state_province', ); } function buildForm(&$form) { $groups = array('' => ts('- select group -')) + CRM_Core_PseudoConstant::allGroup(); $form->addElement('select', 'group_id', ts('Group'), $groups); /** * if you are using the standard template, this array tells the template what elements * are part of the search criteria */ $form->assign('elements', array('group_id')); } function all($offset = 0, $rowcount = 0, $sort = NULL, $includeContactIDs = FALSE, $justIDs = FALSE ) { if ($justIDs) { $selectClause = "contact_a.id as contact_id"; } else { $selectClause = " DISTINCT contact_a.id as contact_id , contact_a.contact_type as contact_type, contact_a.sort_name as sort_name, address.street_address as address, state_province.name as state_province "; } return $this->sql($selectClause, $offset, $rowcount, $sort, $includeContactIDs, NULL ); } function from() { return " FROM civicrm_group_contact as cgc, civicrm_contact as contact_a LEFT JOIN civicrm_address address ON (address.contact_id = contact_a.id AND address.is_primary = 1 ) LEFT JOIN civicrm_state_province state_province ON state_province.id = address.state_province_id "; } function where($includeContactIDs = FALSE) { $params = array(); $count = 1; $clause = array(); $groupID = CRM_Utils_Array::value('group_id', $this->_formValues ); if ($groupID) { $params[$count] = array($groupID, 'Integer'); $clause[] = "cgc.group_id = %{$count}"; } $clause[] = "cgc.status = 'Added'"; $clause[] = "contact_a.id = IF( EXISTS(select cr.id from civicrm_relationship cr where (cr.contact_id_a = cgc.contact_id AND (cr.relationship_type_id = 7 OR cr.relationship_type_id = 6))), (select cr.contact_id_b from civicrm_relationship cr where (cr.contact_id_a = cgc.contact_id AND (cr.relationship_type_id = 7 OR cr.relationship_type_id = 6))), cgc.contact_id )"; $clause[] = "contact_a.contact_type IN ('Individual','Household')"; if (!empty($clause)) { $where = implode(' AND ', $clause); } return $this->whereClause($where, $params); } function templateFile() { return 'CRM/Contact/Form/Search/Custom.tpl'; } }