1 date.elements.inc | _date_default_field_widget_form($field, $instance, $langcode, $items, $delta, $base) |
Helper for the default widget form.
Parameters
array $field: The field structure.
array $instance: The field instance.
string $langcode: The language associated with $items.
array $items: Array of default values for this field.
int $delta: The order of this item in the array of subelements (0, 1, 2, etc).
array $base: A form element array containing basic properties for the widget.
Return value
array: The form elements for a single widget for this field.
File
- core/
modules/ date/ date.elements.inc, line 2221 - Date forms and form themes and validation.
Code
function _date_default_field_widget_form($field, $instance, $langcode, $items, $delta, $base) {
$element = $base;
// If this is a new entity, populate the field with the right default values.
// This happens early so even fields later hidden with #access get those values.
// We should only add default values to new entities, to avoid over-writing
// a value that has already been set. This means we can't just check to see
// if $items is empty, because it might have been set that way on purpose.
// @see date_field_widget_properties_alter() where we flagged if this is a new entity.
// We check !isset($items[$delta]['value']) because entity translation may create
// a new translation entity for an existing entity and we don't want to clobber
// values that were already set in that case.
// @see http://drupal.org/node/1478848.
$is_default = FALSE;
if (!empty($instance['widget']['is_new']) && !isset($items[$delta]['value'])) {
$items = date_default_value($field, $instance, $langcode);
$is_default = TRUE;
}
$timezone = date_get_timezone($field['settings']['tz_handling'], isset($items[$delta]['timezone']) ? $items[$delta]['timezone'] : date_default_timezone());
// TODO see if there's a way to keep the timezone element from ever being
// nested as array('timezone' => 'timezone' => value)). After struggling
// with this a while, I can find no way to get it displayed in the form
// correctly and get it to use the timezone element without ending up
// with nesting.
if (is_array($timezone)) {
$timezone = $timezone['timezone'];
}
$element += array(
'#type' => 'date_combo',
'#theme_wrappers' => array('date_combo'),
'#weight' => $delta,
'#default_value' => isset($items[$delta]) ? $items[$delta] : '',
'#date_timezone' => $timezone,
'#element_validate' => array('date_combo_validate'),
'#date_is_default' => $is_default,
// Store the original values, for use with disabled and hidden fields.
'#date_items' => isset($items[$delta]) ? $items[$delta] : '',
);
if ($field['settings']['tz_handling'] == 'date') {
$element['timezone'] = array(
'#type' => 'date_timezone',
'#theme_wrappers' => array('date_timezone'),
'#delta' => $delta,
'#default_value' => $timezone,
'#weight' => $instance['widget']['weight'] + 1,
'#date_label_position' => $instance['widget']['settings']['label_position'],
);
}
// Make changes if instance is set to be rendered as a regular field.
if ($instance['widget']['settings']['no_fieldset']) {
$element['#title'] = NULL;
$element['#theme_wrappers'] = array();
$element['#date_title_printed'] = FALSE;
}
else {
$element['#title'] = $instance['label'];
$element['#date_title_printed'] = TRUE;
}
return $element;
}