X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FBAO%2FUFField.php;h=6c1189caca553b07b67a23b0c2ccecc80bea3d86;hb=36f057c25d06a6372e9762c0931ff97a89144a4f;hp=22bcf67496e8eb391b6e511bbab9877a32afa023;hpb=0ec03e9fabc23b802ac80cb68c44b5abaf7f8585;p=civicrm-core.git diff --git a/CRM/Core/BAO/UFField.php b/CRM/Core/BAO/UFField.php index 22bcf67496..6c1189caca 100644 --- a/CRM/Core/BAO/UFField.php +++ b/CRM/Core/BAO/UFField.php @@ -803,13 +803,15 @@ SELECT id * @param array $profileAddressFields array of profile fields that relate to address fields * @param array $profileFilter filter to apply to profile fields - expected usage is to only fill based on * the bottom profile per CRM-13726 + * + * @return bool Can the address block be hidden safe in the knowledge all fields are elsewhere collected (see CRM-15118) */ static function assignAddressField($key, &$profileAddressFields, $profileFilter) { $billing_id = CRM_Core_BAO_LocationType::getBilling(); list($prefixName, $index) = CRM_Utils_System::explode('-', $key, 2); $profileFields = civicrm_api3('uf_field', 'get', array_merge($profileFilter, - array('is_active' => 1, 'return' => 'field_name', 'options' => array( + array('is_active' => 1, 'return' => 'field_name, is_required', 'options' => array( 'limit' => 0, )) )); @@ -825,12 +827,17 @@ SELECT id 'postal_code', 'country' ); + $requiredBillingFields = array_diff($validBillingFields, array('middle_name','supplemental_address_1')); $validProfileFields = array(); + $requiredProfileFields = array(); foreach ($profileFields['values'] as $field) { if(in_array($field['field_name'], $validBillingFields)) { $validProfileFields[] = $field['field_name']; } + if ($field['is_required']) { + $requiredProfileFields[] = $field['field_name']; + } } if (!in_array($prefixName, $validProfileFields) ) { @@ -852,6 +859,9 @@ SELECT id ) { $profileAddressFields[$prefixName] = $index; } + + $potentiallyMissingRequiredFields = array_diff($requiredBillingFields, $requiredProfileFields); + CRM_Core_Resources::singleton()->addSetting(array('billing' => array('billingProfileIsHideable' => empty($potentiallyMissingRequiredFields)))); } /**