1 date_views_filter_handler_simple.inc date_views_filter_handler_simple::date_parts_form(&$form_state, $prefix, $source, $which, $operator_values, $identifier, $relative_id)

A form element to select date part values.

Parameters

string $prefix: A prefix for the date values, 'value', 'min', or 'max' .

string $source: An HTML selector for the operator for this element.

string $which: Which element to provide, 'all', 'value', or 'minmax' .

array $operator_values: An array of the allowed operators for this element.

string $identifier: Identifier of the exposed element.

string $relative_id: Form element ID to use for the relative date field.

Return value

The form date part element for this instance.:

File

core/modules/date/views/date_views_filter_handler_simple.inc, line 345
A standard Views filter for a single date field, using Date API form selectors and sql handling.

Class

date_views_filter_handler_simple
@file A standard Views filter for a single date field, using Date API form selectors and sql handling.

Code

function date_parts_form(&$form_state, $prefix, $source, $which, $operator_values, $identifier, $relative_id) {
  module_load_include('inc', 'date', 'date.elements');
  switch ($prefix) {
    case 'min':
      $label = t('Start date');
      $relative_label = t('Relative start date');
      break;
    case 'max':
      $label = t('End date');
      $relative_label = t('Relative end date');
      break;
    default:
      $label = '';
      $relative_label = t('Relative date');
      break;
  }

  $type = $this->options['form_type'];
  $format = $this->date_handler->views_formats($this->options['granularity'], 'display');
  $granularity = array_keys($this->date_handler->date_parts($this->options['granularity']));
  $relative_value = ($prefix == 'max' ? $this->options['default_to_date'] : $this->options['default_date']);

  if (!empty($form_state['exposed'])) {
    // UI when the date selector is exposed.
    $default_date = $this->date_default_value($prefix);
    $form[$prefix] = array(
      '#title' => check_plain($label),
      '#type' => $type,
      '#size' => 20,
      '#default_value' => !empty($this->value[$prefix]) ? $this->value[$prefix] : $default_date,
      '#date_format' => date_limit_format($format, $granularity),
      '#date_label_position' => 'within',
      '#date_year_range' => $this->options['year_range'],
      '#process' => array($type . '_element_process'),
    );
    if ($which == 'all') {
      $form[$prefix]['#states']['visible'] = array();
      foreach ($operator_values as $operator) {
        $form[$prefix]['#states']['visible'][] = array(
          $source => array('value' => $operator),
        );
      }
    }
    if (!isset($form_state['input'][$identifier][$prefix])) {
      // Handle bogus input from the query string to prevent fatal errors.
      if (isset($form_state['input'][$identifier]) && !is_array($form_state['input'][$identifier])) {
        $form_state['input'][$identifier] = array();
      }
      // Ensure these exist.
      foreach ($granularity as $key) {
        $form_state['input'][$identifier][$prefix][$key] = NULL;
      }
    }
  }
  else {
    // UI when the date selector is on the views configuration screen.
    $default_date = '';
    $form[$prefix . '_group'] = array(
      '#type' => 'fieldset',
      '#attributes' => array('class' => array('date-views-filter-fieldset')),
    );
    $form[$prefix . '_group'][$prefix . '_choose_input_type'] = array(
      '#title' => check_plain($label),
      '#type' => 'select',
      '#options' => array('date' => t('Select a date'), 'relative' => ('Enter a relative date')),
      '#attributes' => array('class' => array($prefix . '-choose-input-type')),
      '#default_value' => !empty($relative_value) ? 'relative' : 'date',
    );
    $form[$prefix . '_group'][$prefix] = array(
      '#title' => t('Select a date'),
      '#type' => $type,
      '#size' => 20,
      '#default_value' => !empty($this->value[$prefix]) ? $this->value[$prefix] : $default_date,
      '#date_format' => date_limit_format($format, $granularity),
      '#date_label_position' => 'within',
      '#date_year_range' => $this->options['year_range'],
      '#process' => array($type . '_element_process'),
      '#states' => array(
        'visible' => array(
          ":input.{$prefix}-choose-input-type" => array('value' => 'date'),
        ),
      ),
    );
    $form[$prefix . '_group'][$relative_id] = array(
      '#type' => 'textfield',
      '#title' => check_plain($relative_label),
      '#default_value' => $relative_value,
      '#description' => t('Relative dates are computed when the view is displayed. Examples: now, now +1 day, 12AM today, Monday next week. <a href="http://php.net/manual/en/datetime.formats.relative.php">More examples of relative date formats in the PHP documentation</a>.'),
      '#states' => array(
        'visible' => array(
          ":input.{$prefix}-choose-input-type" => array('value' => 'relative'),
        ),
      ),
    );
    if ($which == 'all') {
      $form[$prefix . '_group']['#states']['visible'] = array();
      foreach ($operator_values as $operator) {
        $form[$prefix . '_group']['#states']['visible'][] = array(
          $source => array('value' => $operator),
        );
      }
    }
  }
  return $form;
}