Expands a date element into year, month, and day select elements.
function form_process_date($element) {
// Default to current date
if (empty($element['#value'])) {
$element['#value'] = array(
'day' => format_date(REQUEST_TIME, 'custom', 'j'),
'month' => format_date(REQUEST_TIME, 'custom', 'n'),
'year' => format_date(REQUEST_TIME, 'custom', 'Y'),
);
}
$element['#tree'] = TRUE;
// Determine the order of day, month, year in the site's chosen date format.
$format = config('system.date')
->get('formats.short.pattern');
$format = $format['php'];
$sort = array();
$sort['day'] = max(strpos($format, 'd'), strpos($format, 'j'));
$sort['month'] = max(strpos($format, 'm'), strpos($format, 'M'));
$sort['year'] = strpos($format, 'Y');
asort($sort);
$order = array_keys($sort);
// Output multi-selector for date.
foreach ($order as $type) {
switch ($type) {
case 'day':
$options = drupal_map_assoc(range(1, 31));
$title = t('Day');
break;
case 'month':
$options = drupal_map_assoc(range(1, 12), 'map_month');
$title = t('Month');
break;
case 'year':
$options = drupal_map_assoc(range(1900, 2050));
$title = t('Year');
break;
}
$element[$type] = array(
'#type' => 'select',
'#title' => $title,
'#title_display' => 'invisible',
'#value' => $element['#value'][$type],
'#attributes' => $element['#attributes'],
'#options' => $options,
);
}
return $element;
}