You are here

function calendar_view_plugin_style::options_form in Calendar 7.2

Same name and namespace in other branches
  1. 6.2 includes/calendar_view_plugin_style.inc \calendar_view_plugin_style::options_form()
  2. 7 includes/calendar_view_plugin_style.inc \calendar_view_plugin_style::options_form()

Style options.

Overrides views_plugin_style::options_form

File

includes/calendar_view_plugin_style.inc, line 80
Views calendar style plugin for the Calendar module.

Class

calendar_view_plugin_style
Style plugin to render the year, month, week, or day calendar view.

Code

function options_form(&$form, &$form_state) {
  $calendar_type = $this->display->handler
    ->get_option('calendar_type');
  $form['name_size'] = array(
    '#title' => t('Calendar day of week names'),
    '#default_value' => $this->options['name_size'],
    '#type' => in_array($calendar_type, array(
      'year',
      'month',
      'week',
    )) ? 'radios' : 'value',
    '#options' => array(
      1 => t('First letter of name'),
      2 => t('First two letters of name'),
      3 => t('Abbreviated name'),
      99 => t('Full name'),
    ),
    '#description' => t('The way day of week names should be displayed in a calendar.'),
  );
  $form['with_weekno'] = array(
    '#title' => t('Show week numbers'),
    '#default_value' => $this->options['with_weekno'],
    '#type' => in_array($calendar_type, array(
      'month',
    )) ? 'radios' : 'value',
    '#options' => array(
      0 => t('No'),
      1 => t('Yes'),
    ),
    '#description' => t('Whether or not to show week numbers in the left column of calendar weeks and months.'),
  );
  $form['max_items'] = array(
    '#title' => t('Maximum items'),
    '#type' => in_array($calendar_type, array(
      'month',
    )) ? 'select' : 'value',
    '#options' => array(
      0 => t('Unlimited'),
      3 => t('3 items'),
      5 => t('5 items'),
      10 => t('10 items'),
    ),
    '#default_value' => $calendar_type != 'day' ? $this->options['max_items'] : 0,
    '#description' => t('Maximum number of items to show in calendar cells, used to keep the calendar from expanding to a huge size when there are lots of items in one day.'),
  );
  $form['max_items_behavior'] = array(
    '#title' => t('Too many items'),
    '#type' => in_array($calendar_type, array(
      'month',
    )) ? 'select' : 'value',
    '#options' => array(
      'more' => t("Show maximum, add 'more' link"),
      'hide' => t('Hide all, add link to day'),
    ),
    '#default_value' => $calendar_type != 'day' ? $this->options['max_items_behavior'] : 'more',
    '#description' => t('Behavior when there are more than the above number of items in a single day. When there more items than this limit, a link to the day view will be displayed.'),
  );
  $form['groupby_times'] = array(
    '#title' => t('Time grouping'),
    '#type' => in_array($calendar_type, array(
      'day',
      'week',
    )) ? 'select' : 'value',
    '#default_value' => $this->options['groupby_times'],
    '#description' => t("Group items together into time periods based on their start time."),
    '#options' => array(
      '' => t('None'),
      'hour' => t('Hour'),
      'half' => t('Half hour'),
      'custom' => t('Custom'),
    ),
  );
  $form['groupby_times_custom'] = array(
    '#title' => t('Custom time grouping'),
    '#type' => in_array($calendar_type, array(
      'day',
      'week',
    )) ? 'textarea' : 'value',
    '#default_value' => $this->options['groupby_times_custom'],
    '#description' => t("When choosing the 'custom' Time grouping option above, create custom time period groupings as a comma-separated list of 24-hour times in the format HH:MM:SS, like '00:00:00,08:00:00,18:00:00'. Be sure to start with '00:00:00'. All items after the last time will go in the final group."),
  );

  // Create a list of fields that are available for grouping and truncation,
  // excluding the date fields in the view from the grouping options.
  $field_options = array();
  $date_field_options = array();
  $fields = $this->display->handler
    ->get_option('fields');
  $date_fields = array_keys($this
    ->date_fields());
  foreach ($fields as $field_name => $field) {
    if (!in_array($field['table'] . '.' . $field['field'], $date_fields)) {
      $field_options[$field['table'] . '_' . $field['field']] = $field['field'];
    }
    else {
      $date_field_options[$field['table'] . '_' . $field['field']] = $field['field'];
    }
  }
  $form['groupby_field'] = array(
    '#title' => t('Field grouping'),
    '#type' => in_array($calendar_type, array(
      'day',
    )) ? 'select' : 'value',
    '#default_value' => $this->options['groupby_field'],
    '#description' => t("Optionally group items into columns by a field value, for instance select the content type to show items for each content type in their own column, or use a location field to organize items into columns by location."),
    '#options' => array(
      '' => '',
    ) + $field_options,
  );
  if (module_exists('calendar_multiday')) {
    $form['multiday_theme'] = array(
      '#title' => t('Multi-day style'),
      '#default_value' => $this->options['multiday_theme'],
      '#type' => in_array($calendar_type, array(
        'month',
        'week',
      )) ? 'select' : 'value',
      '#options' => array(
        0 => t('Display multi-day item as a single column'),
        1 => t('Display multi-day item as a multiple column row'),
      ),
      '#description' => t('If selected, items which span multiple days will displayed as a multi-column row.  If not selected, items will be displayed as an individual column.'),
    );
    $form['theme_style'] = array(
      '#title' => t('Overlapping time style'),
      '#default_value' => $this->options['theme_style'],
      '#type' => in_array($calendar_type, array(
        'day',
        'week',
      )) ? 'select' : 'value',
      '#options' => array(
        0 => t('Do not display overlapping items'),
        1 => t('Display overlapping items'),
      ),
      '#description' => t('Select whether calendar items are displayed as overlapping items.'),
    );
  }
  $form['truncated_fields'] = array(
    '#title' => t('Truncated fields'),
    '#type' => in_array($calendar_type, array(
      'month',
      'week',
      'day',
    )) ? 'checkboxes' : 'value',
    '#options' => $field_options + $date_field_options,
    '#default_value' => $this->options['truncated_fields'],
    '#multiple' => TRUE,
    '#description' => t("Fields that should be truncated to fit in the calendar cell. For instance, change the title from 'Very Very Very Long Name' to something like 'Very Very...'."),
  );
  $form['truncate_length'] = array(
    '#title' => t('Truncate length'),
    '#type' => in_array($calendar_type, array(
      'month',
      'week',
      'day',
    )) ? 'textfield' : 'value',
    '#default_value' => $this->options['truncate_length'],
    '#description' => t("Maximum number of characters to leave in truncated fields."),
    '#maxlength' => 4,
    '#size' => 4,
  );
  foreach ($form as $key => $value) {
    if ($value['#type'] == 'value') {
      $form[$key]['#value'] = $value['#default_value'];
    }
  }
}