You are here

public function availability_calendar_handler_filter_availability::value_form in Availability Calendars 7.3

Same name and namespace in other branches
  1. 7.5 views/availability_calendar_handler_filter_availability.inc \availability_calendar_handler_filter_availability::value_form()
  2. 7.4 views/availability_calendar_handler_filter_availability.inc \availability_calendar_handler_filter_availability::value_form()

Add validation and date popup(s) to the value form.

Overrides views_handler_filter::value_form

File

./availability_calendar_handler_filter_availability.inc, line 99

Class

availability_calendar_handler_filter_availability
@class availability_calendar_handler_filter_availability Views handler to filter on availability.

Code

public function value_form(&$form, &$form_state) {
  $form['value']['#tree'] = TRUE;
  if (empty($form_state['exposed'])) {

    // We're in Views edit mode self. Add validator here. When we're in an
    // exposed form, validation will go via exposed_validate().
    $form['value']['#element_validate'][] = 'availability_calendar_handler_filter_availability_validate_value';
  }

  // Determine values to add and their dependencies.
  $dependency_source = null;
  if (!empty($form_state['exposed']) && (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id']))) {

    // Exposed form with operator not exposed: only add values for the
    // set operator.
    $operators = $this
      ->operators();
    $values = $operators[$this->operator]['values'];
  }
  else {

    // Views UI
    $values = array(
      'from',
      'to',
      'to1',
      'duration',
    );
    if (!empty($form['operator'])) {
      $dependency_source = $form['operator']['#type'] === 'radios' ? 'radio:options[operator]' : 'edit-options-operator';
    }
  }

  // Add value fields.
  if (in_array('from', $values)) {
    $form['value']['from'] = array(
      '#type' => 'textfield',
      '#title' => $this->operator === 'at' ? t('At') : ($this->operator === 'from_to1' ? t('Arrival date') : t('Start date')),
      '#size' => 12,
      '#default_value' => $this->value['from'],
    );
    if (module_exists('date_popup')) {
      $this
        ->change_element_into_date_popup($form['value']['from']);
    }
    else {
      $date_example = availability_calendar_format_entry_date(new DateTime());
      $form['value']['from']['#description'] = t('E.g., @date', array(
        '@date' => $date_example,
      ));
    }
    if ($dependency_source !== null) {
      $form['value']['from']['#dependency'] = array(
        $dependency_source => $this
          ->operators_by_value('from'),
      );
    }
  }
  if (in_array('to', $values)) {
    $form['value']['to'] = array(
      '#type' => 'textfield',
      '#title' => t('End date'),
      '#size' => 12,
      '#default_value' => $this->value['to'],
    );
    if (module_exists('date_popup')) {
      $this
        ->change_element_into_date_popup($form['value']['to']);
    }
    else {
      $date = new DateTime();
      $date
        ->modify('+6 days');
      $date_example = availability_calendar_format_entry_date($date);
      $form['value']['to']['#description'] = t('E.g., @date', array(
        '@date' => $date_example,
      ));
    }
    if ($dependency_source !== null) {
      $form['value']['to']['#dependency'] = array(
        $dependency_source => $this
          ->operators_by_value('to'),
      );
    }
  }
  if (in_array('to1', $values)) {
    $form['value']['to1'] = array(
      '#type' => 'textfield',
      '#title' => t('Departure date'),
      '#size' => 12,
      '#default_value' => $this->value['to1'],
    );
    if (module_exists('date_popup')) {
      $this
        ->change_element_into_date_popup($form['value']['to1']);
    }
    else {
      $date = new DateTime();
      $date
        ->modify('+7 days');
      $date_example = availability_calendar_format_entry_date($date);
      $form['value']['to1']['#description'] = t('E.g., @date', array(
        '@date' => $date_example,
      ));
    }
    if ($dependency_source !== null) {
      $form['value']['to1']['#dependency'] = array(
        $dependency_source => $this
          ->operators_by_value('to1'),
      );
    }
  }
  if (in_array('duration', $values)) {

    // Keep localize.drupal.org satisfied.
    if (false) {
      t('1 day');
      t('@count days');
      t('1 night');
      t('@count nights');
    }
    if ($this->definition['allocation_type'] === ALLOCATION_TYPE_FULLDAY) {
      $singular = '1 day';
      $plural = '@count days';
    }
    else {
      $singular = '1 night';
      $plural = '@count nights';
    }
    $options = array(
      0 => t('- Select duration -'),
    );
    for ($i = 1; $i <= 28; $i++) {
      if ($i % 7 === 0) {
        $options[$i] = format_plural($i / 7, '1 week', '@count weeks');
      }
      else {
        if ($i <= 20) {
          $options[$i] = format_plural($i, $singular, $plural);
        }
      }
    }
    $form['value']['duration'] = array(
      '#type' => 'select',
      '#title' => t('Duration'),
      '#options' => $options,
      '#default_value' => $this->value['duration'],
    );
    if ($dependency_source !== null) {
      $form['value']['duration']['#dependency'] = array(
        $dependency_source => $this
          ->operators_by_value('duration'),
      );
    }
  }
}