| 1 | <?php |
| 2 | /* |
| 3 | +--------------------------------------------------------------------+ |
| 4 | | CiviCRM version 4.6 | |
| 5 | +--------------------------------------------------------------------+ |
| 6 | | Copyright CiviCRM LLC (c) 2004-2014 | |
| 7 | +--------------------------------------------------------------------+ |
| 8 | | This file is a part of CiviCRM. | |
| 9 | | | |
| 10 | | CiviCRM is free software; you can copy, modify, and distribute it | |
| 11 | | under the terms of the GNU Affero General Public License | |
| 12 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | |
| 13 | | | |
| 14 | | CiviCRM is distributed in the hope that it will be useful, but | |
| 15 | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| 17 | | See the GNU Affero General Public License for more details. | |
| 18 | | | |
| 19 | | You should have received a copy of the GNU Affero General Public | |
| 20 | | License and the CiviCRM Licensing Exception along | |
| 21 | | with this program; if not, contact CiviCRM LLC | |
| 22 | | at info[AT]civicrm[DOT]org. If you have questions about the | |
| 23 | | GNU Affero General Public License or the licensing of CiviCRM, | |
| 24 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | |
| 25 | +--------------------------------------------------------------------+ |
| 26 | */ |
| 27 | |
| 28 | /** |
| 29 | * |
| 30 | * @package CRM |
| 31 | * @copyright CiviCRM LLC (c) 2004-2014 |
| 32 | * $Id$ |
| 33 | * |
| 34 | */ |
| 35 | class CRM_Contact_Form_Search_Criteria { |
| 36 | /** |
| 37 | * @param CRM_Core_Form $form |
| 38 | */ |
| 39 | public static function basic(&$form) { |
| 40 | $form->addElement('hidden', 'hidden_basic', 1); |
| 41 | |
| 42 | if ($form->_searchOptions['contactType']) { |
| 43 | // add checkboxes for contact type |
| 44 | //@todo FIXME - using the CRM_Core_DAO::VALUE_SEPARATOR creates invalid html - if you can find the form |
| 45 | // this is loaded onto then replace with something like '__' & test |
| 46 | $separator = CRM_Core_DAO::VALUE_SEPARATOR; |
| 47 | $contactTypes = CRM_Contact_BAO_ContactType::getSelectElements(FALSE, TRUE, $separator); |
| 48 | |
| 49 | if ($contactTypes) { |
| 50 | $form->add('select', 'contact_type', ts('Contact Type(s)'), $contactTypes, FALSE, |
| 51 | array('id' => 'contact_type', 'multiple' => 'multiple', 'class' => 'crm-select2', 'style' => 'width: 100%;') |
| 52 | ); |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | if ($form->_searchOptions['groups']) { |
| 57 | // multiselect for groups |
| 58 | if ($form->_group) { |
| 59 | // Arrange groups into hierarchical listing (child groups follow their parents and have indentation spacing in title) |
| 60 | $groupHierarchy = CRM_Contact_BAO_Group::getGroupsHierarchy($form->_group, NULL, ' ', TRUE); |
| 61 | |
| 62 | $form->add('select', 'group', ts('Groups'), $groupHierarchy, FALSE, |
| 63 | array('id' => 'group', 'multiple' => 'multiple', 'class' => 'crm-select2') |
| 64 | ); |
| 65 | $groupOptions = CRM_Core_BAO_OptionValue::getOptionValuesAssocArrayFromName('group_type'); |
| 66 | $form->add('select', 'group_type', ts('Group Types'), $groupOptions, FALSE, |
| 67 | array('id' => 'group_type', 'multiple' => 'multiple', 'class' => 'crm-select2') |
| 68 | ); |
| 69 | $form->add('hidden', 'group_search_selected', 'group'); |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | if ($form->_searchOptions['tags']) { |
| 74 | // multiselect for categories |
| 75 | $contactTags = CRM_Core_BAO_Tag::getTags(); |
| 76 | |
| 77 | if ($contactTags) { |
| 78 | $form->add('select', 'contact_tags', ts('Tags'), $contactTags, FALSE, |
| 79 | array('id' => 'contact_tags', 'multiple' => 'multiple', 'class' => 'crm-select2', 'style' => 'width: 100%;') |
| 80 | ); |
| 81 | } |
| 82 | |
| 83 | $parentNames = CRM_Core_BAO_Tag::getTagSet('civicrm_contact'); |
| 84 | CRM_Core_Form_Tag::buildQuickForm($form, $parentNames, 'civicrm_contact', NULL, TRUE, FALSE); |
| 85 | |
| 86 | $used_for = CRM_Core_OptionGroup::values('tag_used_for'); |
| 87 | $tagsTypes = array(); |
| 88 | $showAllTagTypes = FALSE; |
| 89 | foreach ($used_for as $key => $value) { |
| 90 | //check tags for every type and find if there are any defined |
| 91 | $tags = CRM_Core_BAO_Tag::getTagsUsedFor($key, FALSE, TRUE, NULL); |
| 92 | // check if there are tags other than contact type, if no - keep checkbox hidden on adv search |
| 93 | // we will hide searching contact by attachments tags until it will be implemented in core |
| 94 | if (count($tags) && $key != 'civicrm_file' && $key != 'civicrm_contact') { |
| 95 | //if tags exists then add type to display in adv search form help text |
| 96 | $tagsTypes[] = ts($value); |
| 97 | $showAllTagTypes = TRUE; |
| 98 | } |
| 99 | } |
| 100 | $tagTypesText = implode(" or ", $tagsTypes); |
| 101 | if ($showAllTagTypes) { |
| 102 | $form->add('checkbox', 'all_tag_types', ts('Include tags used for %1', array(1 => $tagTypesText))); |
| 103 | $form->add('hidden', 'tag_types_text', $tagTypesText); |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | // add text box for last name, first name, street name, city |
| 108 | $form->addElement('text', 'sort_name', ts('Find...'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); |
| 109 | |
| 110 | // add text box for last name, first name, street name, city |
| 111 | $form->add('text', 'email', ts('Contact Email'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); |
| 112 | |
| 113 | //added contact source |
| 114 | $form->add('text', 'contact_source', ts('Contact Source'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'contact_source')); |
| 115 | |
| 116 | //added job title |
| 117 | $form->addElement('text', 'job_title', ts('Job Title'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'job_title')); |
| 118 | |
| 119 | //added internal ID |
| 120 | $form->addElement('text', 'contact_id', ts('Contact ID'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'id')); |
| 121 | $form->addRule('contact_id', ts('Please enter valid Contact ID'), 'positiveInteger'); |
| 122 | |
| 123 | //added external ID |
| 124 | $form->addElement('text', 'external_identifier', ts('External ID'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'external_identifier')); |
| 125 | |
| 126 | if (CRM_Core_Permission::check('access deleted contacts') and CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'contact_undelete', NULL)) { |
| 127 | $form->add('checkbox', 'deleted_contacts', ts('Search in Trash') . '<br />' . ts('(deleted contacts)')); |
| 128 | } |
| 129 | |
| 130 | // add checkbox for cms users only |
| 131 | $form->addYesNo('uf_user', ts('CMS User?'), TRUE); |
| 132 | |
| 133 | // tag all search |
| 134 | $form->add('text', 'tag_search', ts('All Tags')); |
| 135 | |
| 136 | // add search profiles |
| 137 | |
| 138 | // FIXME: This is probably a part of profiles - need to be |
| 139 | // FIXME: eradicated from here when profiles are reworked. |
| 140 | $types = array('Participant', 'Contribution', 'Membership'); |
| 141 | |
| 142 | // get component profiles |
| 143 | $componentProfiles = array(); |
| 144 | $componentProfiles = CRM_Core_BAO_UFGroup::getProfiles($types); |
| 145 | |
| 146 | $ufGroups = CRM_Core_BAO_UFGroup::getModuleUFGroup('Search Profile', 1); |
| 147 | $accessibleUfGroups = CRM_Core_Permission::ufGroup(CRM_Core_Permission::VIEW); |
| 148 | |
| 149 | $searchProfiles = array(); |
| 150 | foreach ($ufGroups as $key => $var) { |
| 151 | if (!array_key_exists($key, $componentProfiles) && in_array($key, $accessibleUfGroups)) { |
| 152 | $searchProfiles[$key] = $var['title']; |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | $form->addElement('select', |
| 157 | 'uf_group_id', |
| 158 | ts('Search Views'), |
| 159 | array( |
| 160 | '0' => ts('- default view -'), |
| 161 | ) + $searchProfiles |
| 162 | ); |
| 163 | |
| 164 | $componentModes = CRM_Contact_Form_Search::getModeSelect(); |
| 165 | |
| 166 | // unset contributions or participants if user does not have |
| 167 | // permission on them |
| 168 | if (!CRM_Core_Permission::access('CiviContribute')) { |
| 169 | unset($componentModes['2']); |
| 170 | } |
| 171 | |
| 172 | if (!CRM_Core_Permission::access('CiviEvent')) { |
| 173 | unset($componentModes['3']); |
| 174 | } |
| 175 | |
| 176 | if (!CRM_Core_Permission::access('CiviMember')) { |
| 177 | unset($componentModes['5']); |
| 178 | } |
| 179 | |
| 180 | if (!CRM_Core_Permission::check('view all activities')) { |
| 181 | unset($componentModes['4']); |
| 182 | } |
| 183 | |
| 184 | if (count($componentModes) > 1) { |
| 185 | $form->addElement('select', |
| 186 | 'component_mode', |
| 187 | ts('Display Results As'), |
| 188 | $componentModes |
| 189 | ); |
| 190 | } |
| 191 | |
| 192 | $form->addElement('select', |
| 193 | 'operator', |
| 194 | ts('Search Operator'), |
| 195 | array( |
| 196 | 'AND' => ts('AND'), |
| 197 | 'OR' => ts('OR'), |
| 198 | ) |
| 199 | ); |
| 200 | |
| 201 | // add the option to display relationships |
| 202 | $rTypes = CRM_Core_PseudoConstant::relationshipType(); |
| 203 | $rSelect = array('' => ts('- Select Relationship Type-')); |
| 204 | foreach ($rTypes as $rid => $rValue) { |
| 205 | if ($rValue['label_a_b'] == $rValue['label_b_a']) { |
| 206 | $rSelect[$rid] = $rValue['label_a_b']; |
| 207 | } |
| 208 | else { |
| 209 | $rSelect["{$rid}_a_b"] = $rValue['label_a_b']; |
| 210 | $rSelect["{$rid}_b_a"] = $rValue['label_b_a']; |
| 211 | } |
| 212 | } |
| 213 | |
| 214 | $form->addElement('select', |
| 215 | 'display_relationship_type', |
| 216 | ts('Display Results as Relationship'), |
| 217 | $rSelect |
| 218 | ); |
| 219 | |
| 220 | // checkboxes for DO NOT phone, email, mail |
| 221 | // we take labels from SelectValues |
| 222 | $t = CRM_Core_SelectValues::privacy(); |
| 223 | $form->add('select', |
| 224 | 'privacy_options', |
| 225 | ts('Privacy'), |
| 226 | $t, |
| 227 | FALSE, |
| 228 | array( |
| 229 | 'id' => 'privacy_options', |
| 230 | 'multiple' => 'multiple', |
| 231 | 'class' => 'crm-select2', |
| 232 | ) |
| 233 | ); |
| 234 | |
| 235 | $form->addElement('select', |
| 236 | 'privacy_operator', |
| 237 | ts('Operator'), |
| 238 | array( |
| 239 | 'OR' => ts('OR'), |
| 240 | 'AND' => ts('AND'), |
| 241 | ) |
| 242 | ); |
| 243 | |
| 244 | $options = array( |
| 245 | 1 => ts('Exclude'), |
| 246 | 2 => ts('Include by Privacy Option(s)'), |
| 247 | ); |
| 248 | $form->addRadio('privacy_toggle', ts('Privacy Options'), $options, array('allowClear' => FALSE)); |
| 249 | |
| 250 | // preferred communication method |
| 251 | $comm = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'preferred_communication_method'); |
| 252 | |
| 253 | $commPreff = array(); |
| 254 | foreach ($comm as $k => $v) { |
| 255 | $commPreff[] = $form->createElement('advcheckbox', $k, NULL, $v); |
| 256 | } |
| 257 | |
| 258 | $onHold[] = $form->createElement('advcheckbox', 'on_hold', NULL, ts('')); |
| 259 | $form->addGroup($onHold, 'email_on_hold', ts('Email On Hold')); |
| 260 | |
| 261 | $form->addGroup($commPreff, 'preferred_communication_method', ts('Preferred Communication Method')); |
| 262 | |
| 263 | //CRM-6138 Preferred Language |
| 264 | $form->addSelect('preferred_language', array('class' => 'twenty', 'context' => 'search')); |
| 265 | |
| 266 | // Phone search |
| 267 | $form->addElement('text', 'phone_numeric', ts('Phone Number'), CRM_Core_DAO::getAttribute('CRM_Core_DAO_Phone', 'phone')); |
| 268 | $locationType = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'); |
| 269 | $phoneType = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Phone', 'phone_type_id'); |
| 270 | $form->add('select', 'phone_location_type_id', ts('Phone Location'), array('' => ts('- any -')) + $locationType); |
| 271 | $form->add('select', 'phone_phone_type_id', ts('Phone Type'), array('' => ts('- any -')) + $phoneType); |
| 272 | } |
| 273 | |
| 274 | |
| 275 | /** |
| 276 | * @param CRM_Core_Form $form |
| 277 | */ |
| 278 | public static function location(&$form) { |
| 279 | $config = CRM_Core_Config::singleton(); |
| 280 | // Build location criteria based on _submitValues if |
| 281 | // available; otherwise, use $form->_formValues. |
| 282 | $formValues = $form->_submitValues; |
| 283 | |
| 284 | if (empty($formValues) && !empty($form->_formValues)) { |
| 285 | $formValues = $form->_formValues; |
| 286 | } |
| 287 | |
| 288 | $form->addElement('hidden', 'hidden_location', 1); |
| 289 | |
| 290 | $addressOptions = CRM_Core_BAO_Setting::valueOptions(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, |
| 291 | 'address_options', TRUE, NULL, TRUE |
| 292 | ); |
| 293 | |
| 294 | $attributes = CRM_Core_DAO::getAttribute('CRM_Core_DAO_Address'); |
| 295 | |
| 296 | $elements = array( |
| 297 | 'street_address' => array(ts('Street Address'), $attributes['street_address'], NULL, NULL), |
| 298 | 'city' => array(ts('City'), $attributes['city'], NULL, NULL), |
| 299 | 'postal_code' => array(ts('Zip / Postal Code'), $attributes['postal_code'], NULL, NULL), |
| 300 | 'country' => array(ts('Country'), $attributes['country_id'], 'country', FALSE), |
| 301 | 'state_province' => array(ts('State/Province'), $attributes['state_province_id'], 'stateProvince', TRUE), |
| 302 | 'county' => array(ts('County'), $attributes['county_id'], 'county', TRUE), |
| 303 | 'address_name' => array(ts('Address Name'), $attributes['address_name'], NULL, NULL), |
| 304 | 'street_number' => array(ts('Street Number'), $attributes['street_number'], NULL, NULL), |
| 305 | 'street_name' => array(ts('Street Name'), $attributes['street_name'], NULL, NULL), |
| 306 | 'street_unit' => array(ts('Apt/Unit/Suite'), $attributes['street_unit'], NULL, NULL), |
| 307 | ); |
| 308 | |
| 309 | $parseStreetAddress = CRM_Utils_Array::value('street_address_parsing', $addressOptions, 0); |
| 310 | $form->assign('parseStreetAddress', $parseStreetAddress); |
| 311 | foreach ($elements as $name => $v) { |
| 312 | list($title, $attributes, $select, $multiSelect) = $v; |
| 313 | |
| 314 | if (in_array($name, |
| 315 | array('street_number', 'street_name', 'street_unit') |
| 316 | )) { |
| 317 | if (!$parseStreetAddress) { |
| 318 | continue; |
| 319 | } |
| 320 | } |
| 321 | elseif (!$addressOptions[$name]) { |
| 322 | continue; |
| 323 | } |
| 324 | |
| 325 | if (!$attributes) { |
| 326 | $attributes = $attributes[$name]; |
| 327 | } |
| 328 | |
| 329 | if ($select) { |
| 330 | if ($select == 'stateProvince' || $select == 'county') { |
| 331 | $element = $form->addChainSelect($name); |
| 332 | } |
| 333 | else { |
| 334 | $selectElements = array('' => ts('- any -')) + CRM_Core_PseudoConstant::$select(); |
| 335 | $element = $form->add('select', $name, $title, $selectElements, FALSE, array('class' => 'crm-select2')); |
| 336 | } |
| 337 | if ($multiSelect) { |
| 338 | $element->setMultiple(TRUE); |
| 339 | } |
| 340 | } |
| 341 | else { |
| 342 | $form->addElement('text', $name, $title, $attributes); |
| 343 | } |
| 344 | |
| 345 | if ($addressOptions['postal_code']) { |
| 346 | $attr = array('class' => 'six') + (array) CRM_Utils_Array::value('postal_code', $attributes); |
| 347 | $form->addElement('text', 'postal_code_low', NULL, $attr + array('placeholder' => ts('From'))); |
| 348 | $form->addElement('text', 'postal_code_high', NULL, $attr + array('placeholder' => ts('To'))); |
| 349 | } |
| 350 | } |
| 351 | |
| 352 | // extend addresses with proximity search |
| 353 | if (!empty($config->geocodeMethod)) { |
| 354 | $form->addElement('text', 'prox_distance', ts('Find contacts within'), array('class' => 'six')); |
| 355 | $form->addElement('select', 'prox_distance_unit', NULL, array( |
| 356 | 'miles' => ts('Miles'), |
| 357 | 'kilos' => ts('Kilometers'), |
| 358 | )); |
| 359 | $form->addRule('prox_distance', ts('Please enter positive number as a distance'), 'numeric'); |
| 360 | } |
| 361 | |
| 362 | $form->addSelect('world_region', array('entity' => 'address', 'context' => 'search')); |
| 363 | |
| 364 | // select for location type |
| 365 | $locationType = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'); |
| 366 | $form->add('select', 'location_type', ts('Address Location'), $locationType, FALSE, array( |
| 367 | 'multiple' => TRUE, |
| 368 | 'class' => 'crm-select2', |
| 369 | 'placeholder' => ts('Primary'), |
| 370 | )); |
| 371 | |
| 372 | // custom data extending addresses - |
| 373 | $extends = array('Address'); |
| 374 | $groupDetails = CRM_Core_BAO_CustomGroup::getGroupDetail(NULL, TRUE, $extends); |
| 375 | if ($groupDetails) { |
| 376 | $form->assign('addressGroupTree', $groupDetails); |
| 377 | foreach ($groupDetails as $group) { |
| 378 | foreach ($group['fields'] as $field) { |
| 379 | $elementName = 'custom_' . $field['id']; |
| 380 | CRM_Core_BAO_CustomField::addQuickFormElement($form, |
| 381 | $elementName, |
| 382 | $field['id'], |
| 383 | FALSE, FALSE, TRUE |
| 384 | ); |
| 385 | } |
| 386 | } |
| 387 | } |
| 388 | } |
| 389 | |
| 390 | /** |
| 391 | * @param CRM_Core_Form $form |
| 392 | */ |
| 393 | public static function activity(&$form) { |
| 394 | $form->add('hidden', 'hidden_activity', 1); |
| 395 | CRM_Activity_BAO_Query::buildSearchForm($form); |
| 396 | } |
| 397 | |
| 398 | /** |
| 399 | * @param CRM_Core_Form $form |
| 400 | */ |
| 401 | public static function changeLog(&$form) { |
| 402 | $form->add('hidden', 'hidden_changeLog', 1); |
| 403 | |
| 404 | // block for change log |
| 405 | $form->addElement('text', 'changed_by', ts('Modified By'), NULL); |
| 406 | |
| 407 | $dates = array(1 => ts('Added'), 2 => ts('Modified')); |
| 408 | $form->addRadio('log_date', NULL, $dates, array('allowClear' => TRUE), '<br />'); |
| 409 | |
| 410 | CRM_Core_Form_Date::buildDateRange($form, 'log_date', 1, '_low', '_high', ts('From'), FALSE, FALSE); |
| 411 | } |
| 412 | |
| 413 | /** |
| 414 | * @param CRM_Core_Form $form |
| 415 | */ |
| 416 | public static function task(&$form) { |
| 417 | $form->add('hidden', 'hidden_task', 1); |
| 418 | } |
| 419 | |
| 420 | /** |
| 421 | * @param $form |
| 422 | */ |
| 423 | public static function relationship(&$form) { |
| 424 | $form->add('hidden', 'hidden_relationship', 1); |
| 425 | |
| 426 | $allRelationshipType = array(); |
| 427 | $allRelationshipType = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, NULL, NULL, NULL, TRUE); |
| 428 | $form->add('select', 'relation_type_id', ts('Relationship Type'), array('' => ts('- select -')) + $allRelationshipType, FALSE, array('class' => 'crm-select2')); |
| 429 | $form->addElement('text', 'relation_target_name', ts('Target Contact'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); |
| 430 | // relation status |
| 431 | $relStatusOption = array(ts('Active'), ts('Inactive'), ts('All')); |
| 432 | $form->addRadio('relation_status', ts('Relationship Status'), $relStatusOption); |
| 433 | $form->setDefaults(array('relation_status' => 0)); |
| 434 | // relation permission |
| 435 | $relPermissionOption = array(ts('Any'), ts('Yes'), ts('No')); |
| 436 | $form->addRadio('relation_permission', ts('Permissioned Relationship?'), $relPermissionOption); |
| 437 | $form->setDefaults(array('relation_permission' => 0)); |
| 438 | |
| 439 | //add the target group |
| 440 | if ($form->_group) { |
| 441 | $form->add('select', 'relation_target_group', ts('Target Contact(s) in Group'), $form->_group, FALSE, |
| 442 | array('id' => 'relation_target_group', 'multiple' => 'multiple', 'class' => 'crm-select2') |
| 443 | ); |
| 444 | } |
| 445 | CRM_Core_Form_Date::buildDateRange($form, 'relation_start_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE); |
| 446 | CRM_Core_Form_Date::buildDateRange($form, 'relation_end_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE); |
| 447 | |
| 448 | // Add reltionship dates |
| 449 | CRM_Core_Form_Date::buildDateRange($form, 'relation_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE); |
| 450 | |
| 451 | // add all the custom searchable fields |
| 452 | $relationship = array('Relationship'); |
| 453 | $groupDetails = CRM_Core_BAO_CustomGroup::getGroupDetail(NULL, TRUE, $relationship); |
| 454 | if ($groupDetails) { |
| 455 | $form->assign('relationshipGroupTree', $groupDetails); |
| 456 | foreach ($groupDetails as $group) { |
| 457 | foreach ($group['fields'] as $field) { |
| 458 | $fieldId = $field['id']; |
| 459 | $elementName = 'custom_' . $fieldId; |
| 460 | CRM_Core_BAO_CustomField::addQuickFormElement($form, |
| 461 | $elementName, |
| 462 | $fieldId, |
| 463 | FALSE, FALSE, TRUE |
| 464 | ); |
| 465 | } |
| 466 | } |
| 467 | } |
| 468 | } |
| 469 | |
| 470 | /** |
| 471 | * @param $form |
| 472 | */ |
| 473 | public static function demographics(&$form) { |
| 474 | $form->add('hidden', 'hidden_demographics', 1); |
| 475 | // radio button for gender |
| 476 | $genderOptions = array(); |
| 477 | $gender = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'gender_id'); |
| 478 | foreach ($gender as $key => $var) { |
| 479 | $genderOptions[$key] = $form->createElement('radio', NULL, |
| 480 | ts('Gender'), $var, $key, |
| 481 | array('id' => "civicrm_gender_{$var}_{$key}") |
| 482 | ); |
| 483 | } |
| 484 | $form->addGroup($genderOptions, 'gender_id', ts('Gender'))->setAttribute('allowClear', TRUE); |
| 485 | |
| 486 | CRM_Core_Form_Date::buildDateRange($form, 'birth_date', 1, '_low', '_high', ts('From'), FALSE, FALSE, 'birth'); |
| 487 | |
| 488 | CRM_Core_Form_Date::buildDateRange($form, 'deceased_date', 1, '_low', '_high', ts('From'), FALSE, FALSE, 'birth'); |
| 489 | |
| 490 | // radio button for is_deceased |
| 491 | $form->addYesNo('is_deceased', ts('Deceased'), TRUE); |
| 492 | } |
| 493 | |
| 494 | /** |
| 495 | * @param $form |
| 496 | */ |
| 497 | public static function notes(&$form) { |
| 498 | $form->add('hidden', 'hidden_notes', 1); |
| 499 | |
| 500 | $options = array( |
| 501 | 2 => ts('Body Only'), |
| 502 | 3 => ts('Subject Only'), |
| 503 | 6 => ts('Both'), |
| 504 | ); |
| 505 | $form->addRadio('note_option', '', $options); |
| 506 | |
| 507 | $form->addElement('text', 'note', ts('Note Text'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); |
| 508 | |
| 509 | $form->setDefaults(array('note_option' => 6)); |
| 510 | } |
| 511 | |
| 512 | /** |
| 513 | * Generate the custom Data Fields based |
| 514 | * on the is_searchable |
| 515 | * |
| 516 | * |
| 517 | * @param $form |
| 518 | * |
| 519 | * @return void |
| 520 | */ |
| 521 | public static function custom(&$form) { |
| 522 | $form->add('hidden', 'hidden_custom', 1); |
| 523 | $extends = array_merge(array('Contact', 'Individual', 'Household', 'Organization'), |
| 524 | CRM_Contact_BAO_ContactType::subTypes() |
| 525 | ); |
| 526 | $groupDetails = CRM_Core_BAO_CustomGroup::getGroupDetail(NULL, TRUE, |
| 527 | $extends |
| 528 | ); |
| 529 | |
| 530 | $form->assign('groupTree', $groupDetails); |
| 531 | |
| 532 | foreach ($groupDetails as $key => $group) { |
| 533 | $_groupTitle[$key] = $group['name']; |
| 534 | CRM_Core_ShowHideBlocks::links($form, $group['name'], '', ''); |
| 535 | |
| 536 | $groupId = $group['id']; |
| 537 | foreach ($group['fields'] as $field) { |
| 538 | $fieldId = $field['id']; |
| 539 | $elementName = 'custom_' . $fieldId; |
| 540 | |
| 541 | CRM_Core_BAO_CustomField::addQuickFormElement($form, |
| 542 | $elementName, |
| 543 | $fieldId, |
| 544 | FALSE, FALSE, TRUE |
| 545 | ); |
| 546 | } |
| 547 | } |
| 548 | |
| 549 | //TODO: validate for only one state if prox_distance isset |
| 550 | } |
| 551 | |
| 552 | /** |
| 553 | * @param $form |
| 554 | */ |
| 555 | public static function CiviCase(&$form) { |
| 556 | //Looks like obsolete code, since CiviCase is a component, but might be used by HRD |
| 557 | $form->add('hidden', 'hidden_CiviCase', 1); |
| 558 | CRM_Case_BAO_Query::buildSearchForm($form); |
| 559 | } |
| 560 | } |