X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FBAO%2FCustomField.php;h=5fac6b6f60ceb9ced2a228ee3033c6be9b40fdb8;hb=8783107356ceb57f51b6fab507861e8a22d34f20;hp=63a65d7866d34da7acc5d19134a54c68273eac99;hpb=8cc574cffccb401cfae8fae926007016e03b92b2;p=civicrm-core.git diff --git a/CRM/Core/BAO/CustomField.php b/CRM/Core/BAO/CustomField.php index 63a65d7866..5fac6b6f60 100644 --- a/CRM/Core/BAO/CustomField.php +++ b/CRM/Core/BAO/CustomField.php @@ -753,6 +753,25 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { $field->html_type = 'Text'; } + // FIXME: Why are select state/country separate widget types? + if (in_array($field->html_type, array('Select', 'Multi-Select', 'Select State/Province', 'Multi-Select State/Province', 'Select Country', 'Multi-Select Country'))) { + $selectAttributes = array( + 'data-crm-custom' => $dataCrmCustomVal, + 'class' => 'crm-select2', + ); + if (strpos($field->html_type, 'Multi') === 0) { + $selectAttributes['multiple'] = 'multiple'; + } + } + // Add data so popup link. Normally this is handled by CRM_Core_Form->addSelect + if (in_array($field->html_type, array('Select', 'Multi-Select')) && !$search && CRM_Core_Permission::check('administer CiviCRM')) { + $selectAttributes += array( + 'data-api-entity' => 'contact', // FIXME: This works because the getoptions api isn't picky about custom fields, but it's WRONG + 'data-api-field' => 'custom_' . $field->id, + 'data-option-edit-path' => 'civicrm/admin/options/' . CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', $field->option_group_id), + ); + } + if (!isset($label)) { $label = $field->label; } @@ -844,16 +863,19 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { foreach ($customOption as $v => $l) { $choice[] = $qf->createElement('radio', NULL, '', $l, (string)$v, $field->attributes); } - $qf->addGroup($choice, $elementName, $label); + $group = $qf->addGroup($choice, $elementName, $label); } else { $choice[] = $qf->createElement('radio', NULL, '', ts('Yes'), '1', $field->attributes); $choice[] = $qf->createElement('radio', NULL, '', ts('No'), '0', $field->attributes); - $qf->addGroup($choice, $elementName, $label); + $group = $qf->addGroup($choice, $elementName, $label); } if ($useRequired && !$search) { $qf->addRule($elementName, ts('%1 is a required field.', array(1 => $label)), 'required'); } + else { + $group->setAttribute('unselectable', TRUE); + } break; case 'Select': @@ -864,7 +886,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { array( '' => ts('- select -')) + $selectOption, $useRequired && !$search, - $dataCrmCustomAttr + $selectAttributes ); break; @@ -909,7 +931,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { ) { $selectOption['CiviCRM_OP_OR'] = ts('Select to match ANY; unselect to match ALL'); } - $qf->addElement('select', $elementName, $label, $selectOption, array('size' => '5', 'multiple', 'data-crm-custom' => $dataCrmCustomVal)); + $qf->addElement('select', $elementName, $label, $selectOption, $selectAttributes); if ($useRequired && !$search) { $qf->addRule($elementName, ts('%1 is a required field.', array(1 => $label)), 'required'); @@ -955,7 +977,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { $stateOption = array('' => ts('- select -')) + CRM_Core_PseudoConstant::stateProvince(); $qf->add('select', $elementName, $label, $stateOption, $useRequired && !$search, - $dataCrmCustomAttr + $selectAttributes ); $qf->_stateCountryMap['state_province'][] = $elementName; break; @@ -964,7 +986,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { //Add Multi-select State/Province $stateOption = CRM_Core_PseudoConstant::stateProvince(); - $qf->addElement('select', $elementName, $label, $stateOption, array('size' => '5', 'multiple', 'data-crm-custom' => $dataCrmCustomVal)); + $qf->addElement('select', $elementName, $label, $stateOption, $selectAttributes); if ($useRequired && !$search) { $qf->addRule($elementName, ts('%1 is a required field.', array(1 => $label)), 'required'); } @@ -975,7 +997,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { $countryOption = array('' => ts('- select -')) + CRM_Core_PseudoConstant::country(); $qf->add('select', $elementName, $label, $countryOption, $useRequired && !$search, - $dataCrmCustomAttr + $selectAttributes ); $qf->_stateCountryMap['country'][] = $elementName; break; @@ -983,7 +1005,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { case 'Multi-Select Country': //Add Country $countryOption = CRM_Core_PseudoConstant::country(); - $qf->addElement('select', $elementName, $label, $countryOption, array('size' => '5', 'multiple', 'data-crm-custom' => $dataCrmCustomVal)); + $qf->addElement('select', $elementName, $label, $countryOption, $selectAttributes); if ($useRequired && !$search) { $qf->addRule($elementName, ts('%1 is a required field.', array(1 => $label)), 'required'); }