You are here

function date_api_filter_handler::date_parts_form in Date 6

Same name and namespace in other branches
  1. 6.2 includes/date_api_filter_handler.inc \date_api_filter_handler::date_parts_form()

A form element to select date part values.

Parameters

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

string $source: 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.

array $limit: An array of date parts to limit this element to.

Return value

The form date part element for this instance.

1 call to date_api_filter_handler::date_parts_form()
date_api_filter_handler::value_form in ./date_api.views.inc
Add the selectors to the value form using the date handler.

File

./date_api.views.inc, line 640
Defines date-related Views data and plugins:

Class

date_api_filter_handler
A flexible, configurable date filter.

Code

function date_parts_form($prefix, $source, $which, $operator_values) {
  $prefixname = $prefix == 'value' ? '' : ($prefix == 'min' ? t('From') : t('To'));
  $handler = $this->date_handler;
  $min = $handler
    ->part_info('min');
  $max = $handler
    ->part_info('max');
  $limit = $handler->granularity;
  switch ($this->options['adjustment_field']) {
    case 1:
      $parts = $handler
        ->date_parts($limit) + array(
        'adjustment' => t('Adjustment'),
      );
      $first_item = 'year';
      $last_item = 'adjustment';
      break;
    case 2:
      $parts = array(
        'adjustment' => t('Adjustment'),
      );
      $first_item = 'adjustment';
      $last_item = 'adjustment';
      break;
    default:
      $parts = $handler
        ->date_parts($limit);
      $first_item = 'year';
      $last_item = $this->options['granularity'];
      break;
  }
  foreach ($parts as $key => $name) {
    $options = array(
      '' => '',
      'now' => 'now',
    );
    $type = 'select';
    if ($key == 'year' || $key == 'adjustment') {
      $type = 'textfield';
    }
    $form[$prefix . $key] = array(
      '#title' => t('@type @value', array(
        '@type' => $prefixname,
        '@value' => $name,
      )),
      '#type' => $type,
      '#size' => $key == 'adjustment' ? 20 : ($key == 'year' ? 6 : 1),
      '#default_value' => !empty($this->value[$prefix . $key]) ? $this->value[$prefix . $key] : '',
      '#prefix' => '<div class="views-exposed-date-filter">',
      '#suffix' => '</div>',
    );
    switch ($key) {
      case 'year':
      case 'adjustment':
        break;
      case 'month':
        $form[$prefix . $key]['#options'] = $options + drupal_map_assoc(range(1, 12), 'map_month');
        break;
      default:
        $form[$prefix . $key]['#options'] = $options + drupal_map_assoc(range($min[$key], $max[$key]));
        break;
    }
    if ($type == 'textfield') {
      unset($form[$prefix . $key]['#options']);
    }
    if ($which == 'all') {
      $dependency = array(
        '#process' => array(
          'views_process_dependency',
        ),
        '#dependency' => array(
          $source => $operator_values,
        ),
      );
      $form[$prefix . $key] += $dependency;
    }

    // Add wrappers to force each date grouping to a separate line.
    if ($key == $first_item) {
      $form[$prefix . $key]['#prefix'] = '<div class="clear-block"><div class="views-left-75">' . $form[$prefix . $key]['#prefix'];
    }
    if ($key == $last_item) {
      $form[$prefix . $key]['#suffix'] .= '</div></div>';
    }
  }
  return $form;
}