1 date.admin.inc _date_field_widget_settings_form($field, $instance)

Helper function for date_field_widget_settings_form().

See also

date_field_widget_settings_form_validate()

File

core/modules/date/date.admin.inc, line 291
Admin page callbacks for the Date module.

Code

function _date_field_widget_settings_form($field, $instance) {
  $widget = $instance['widget'];
  $settings = $widget['settings'];

  $form = array(
    '#element_validate' => array('date_field_widget_settings_form_validate'),
  );

  $options = array();
  $formats = system_get_date_formats();
  $formats2 = array();
  foreach ($formats as $entry) {
    // Example input formats should show all possible date parts
    // so add seconds if not already included with minutes
    if (strpos($entry['pattern'], 'i:s')) {
      $formats2[$entry['name']] = $entry['pattern'];
    }
    else {
      $formats2[$entry['name']] = str_replace('i', 'i:s', $entry['pattern']);
    }
  }
  $now = date_now();
  foreach ($formats2 as $f) {
    $options[$f] = date_format_date($now, 'custom', $f) . '  (' . $f . ')';
  }
  $form['input_format'] = array(
    '#type' => 'select',
    '#title' => t('Date entry options'),
    '#default_value' => $settings['input_format'],
    '#options' => $options,
    '#description' => t('Select the preferred format for inputting dates.'),
    '#weight' => 3,
    '#fieldset' => 'date_format',
  );

  if ($widget['type'] === 'date_select') {
    $form['input_format']['#description'] = t('The selected format will determine the order of the date part fields.');
  }

  // Only a limited set of formats is available for the Date Popup module.
  if ($widget['type'] != 'date_popup') {
    $form['input_format']['#options']['custom'] = t('Custom format');
    $form['input_format_custom'] = array(
      '#type' => 'textfield',
      '#title' => t('Custom input format'),
      '#default_value' => $settings['input_format_custom'],
      '#description' => t('Override the input format selected above. Define a php date format string like "m-d-Y H:i" (see <a href="http://php.net/date">http://php.net/date</a> for more details).'),
      '#weight' => 5,
      '#fieldset' => 'date_format',
      '#attributes' => array('class' => array('indent')),
      '#states' => array(
        'visible' => array(
          ':input[name="instance[widget][settings][input_format]"]' => array('value' => 'custom'),
        ),
      ),
    );
  }
  else {
    $form['input_format_custom'] = array(
      '#type' => 'hidden',
      '#value' => '',
    );
  }

  if (in_array($widget['type'], array('date_select', 'date_popup'))) {
    $form['year_range'] = array(
      '#type' => 'date_year_range',
      '#default_value' => $settings['year_range'],
      '#fieldset' => 'date_format',
      '#weight' => 6,
    );
    $form['increment'] = array(
      '#type' => 'select', '#title' => t('Time increments'),
      '#default_value' => $settings['increment'],
      '#options' => array(
        1 => t('1 minute'),
        5 => t('5 minute'),
        10 => t('10 minute'),
        15 => t('15 minute'),
        30 => t('30 minute')),
      '#weight' => 7,
      '#fieldset' => 'date_format',
    );
  }
  else {
    $form['year_range'] = array(
      '#type' => 'hidden',
      '#value' => $settings['year_range'],
    );
    $form['increment'] = array(
      '#type' => 'hidden',
      '#value' => $settings['increment'],
    );
  }

  $form['label_position'] = array(
    '#type' => 'value',
    '#value' => $settings['label_position'],
  );
  $form['text_parts'] = array(
    '#type' => 'value',
    '#value' => $settings['text_parts'],
  );
  $form['advanced'] = array(
    '#fieldset' => 'date_format',
    '#weight' => 9,
  );

  $options = array(
    'above' => t('Above'),
    'within' => t('Within'),
    'none' => t('Hidden'),
  );
  if ($widget['type'] == 'date_select') {
    $form['advanced']['label_position'] = array(
      '#type' => 'radios',
      '#options' => $options,
      '#default_value' => $settings['label_position'],
      '#title' => t('Position of date part labels'),
    );
  }
  $form['advanced']['label_position']['above']['#description'] = t("Displays the label as individual titles above each date part (like 'Year', 'Month', or 'Day').");
  $form['advanced']['label_position']['within']['#description'] = t("Inserts the label as the first option in the select list and in blank textfields.");
  $form['advanced']['label_position']['none']['#description'] = t("Doesn't visually label any of the date parts.");
  if ($widget['type'] == 'date_select') {
    $form['advanced']['text_parts']['#theme'] = 'date_text_parts';
  }

  $text_parts = (array) $settings['text_parts'];
  foreach (date_granularity_names() as $key => $value) {
    if ($widget['type'] == 'date_select') {
      $form['advanced']['text_parts'][$key] = array(
        '#type' => 'radios',
        '#default_value' => in_array($key, $text_parts) ? 1 : 0,
        '#options' => array(0 => '', 1 => ''),
      );
    }
    else {
      $form['advanced']['text_parts'][$key] = array(
        '#type' => 'value',
        '#value' => (int) in_array($key, (array) $settings['text_parts']),
      );
    }
  }

  $form['advanced']['no_fieldset'] = array(
    '#type' => 'checkbox',
    '#title' => t('Exclude wrapping fieldset'),
    '#default_value' => !empty($settings['no_fieldset']),
    '#description' => t('Simplify styling when using simple inputs, such as a single text field or the date popup.'),
  );

  $context = array(
    'field' => $field,
    'instance' => $instance,
  );
  backdrop_alter('date_field_widget_settings_form', $form, $context);

  return $form;
}