diff --git a/CRM/Core/Form.php b/CRM/Core/Form.php index a3c4023c0edb89e82936b4486cf82de9151d5042..59a26e86e219ccc5e9a36c10697ab1395503362b 100644 --- a/CRM/Core/Form.php +++ b/CRM/Core/Form.php @@ -359,6 +359,8 @@ class CRM_Core_Form extends HTML_QuickForm_Page { * * @return HTML_QuickForm_Element * Could be an error object + * + * @throws \CRM_Core_Exception */ public function &add( $type, $name, $label = '', @@ -385,16 +387,34 @@ class CRM_Core_Form extends HTML_QuickForm_Page { unset($attributes['multiple']); $extra = NULL; } - // @see http://wiki.civicrm.org/confluence/display/CRMDOC/crmDatepicker - if ($type == 'datepicker') { - $attributes = ($attributes ? $attributes : []); + + // @see https://docs.civicrm.org/dev/en/latest/framework/ui/#date-picker + if ($type === 'datepicker') { + $attributes = $attributes ?: []; + if (!empty($attributes['format'])) { + $dateAttributes = CRM_Core_SelectValues::date($attributes['format'], NULL, NULL, NULL, 'Input'); + if (empty($extra['minDate']) && !empty($dateAttributes['minYear'])) { + $extra['minDate'] = $dateAttributes['minYear'] . '-01-01'; + } + if (empty($extra['maxDate']) && !empty($dateAttributes['minYear'])) { + $extra['maxDate'] = $dateAttributes['maxYear'] . '-12-31'; + } + } + // Support minDate/maxDate properties + if (isset($extra['minDate'])) { + $extra['minDate'] = date('Y-m-d', strtotime($extra['minDate'])); + } + if (isset($extra['maxDate'])) { + $extra['maxDate'] = date('Y-m-d', strtotime($extra['maxDate'])); + } + $attributes['data-crm-datepicker'] = json_encode((array) $extra); if (!empty($attributes['aria-label']) || $label) { $attributes['aria-label'] = CRM_Utils_Array::value('aria-label', $attributes, $label); } $type = "text"; } - if ($type == 'select' && is_array($extra)) { + if ($type === 'select' && is_array($extra)) { // Normalize this property if (!empty($extra['multiple'])) { $extra['multiple'] = 'multiple';