You are here

function views_fieldsets_fieldset_field_handler::options_form in Views fieldsets 7

Same name and namespace in other branches
  1. 7.2 views/views_fieldsets_fieldset_field_handler.inc \views_fieldsets_fieldset_field_handler::options_form()

Default options form provides the label widget that all fields should have.

Overrides views_handler_field::options_form

File

views/views_fieldsets_fieldset_field_handler.inc, line 33
A handler to provide a Views Fieldsets field.

Class

views_fieldsets_fieldset_field_handler
@file A handler to provide a Views Fieldsets field.

Code

function options_form(&$form, &$form_state) {

  // These options are required by Views.
  $keep_form_elements = element_children($form);

  // These options are useful for a fieldset.
  $keep_form_elements[] = 'custom_label';
  $keep_form_elements[] = 'label';
  $keep_form_elements[] = 'alter';

  // These options are useful 'alter' options. Most aren't.
  $keep_rewrite_elements = array(
    'alter_text',
    'text',
    'help',
    'trim_whitespace',
    'nl2br',
  );

  // Get the plentiful usual suspects.
  parent::options_form($form, $form_state);

  // Remove options that aren't relevant.
  foreach (element_children($form) as $name) {
    if (!in_array($name, $keep_form_elements)) {
      $form[$name]['#access'] = FALSE;
    }
  }

  // Alter custom_label (always ON).
  $element =& $form['custom_label'];
  $element['#default_value'] = $element['#value'] = TRUE;
  $element['#type'] = 'hidden';

  // Alter label to make it fit our needs.
  $element =& $form['label'];
  unset($element['#dependency']);
  $element['#title'] = t('Fieldset title');
  $element['#required'] = TRUE;
  $element['#description'] = t('The back-end admin label and default front-end fieldset legend. You can override the fieldset legend by rewriting below. Will be translated either way.');

  // Open 'alter' fieldset.
  $form['alter']['#collapsed'] = $form['alter']['#collapsible'] = FALSE;
  $form['alter']['#description'] = t('This will alter the fieldset <code>&lt;legend&gt;</code>. Default would be the above <em>Fieldset title</em>.');

  // Hide most 'alter' stuff.
  foreach (element_children($form['alter']) as $name) {
    if (!in_array($name, $keep_rewrite_elements)) {
      $form['alter'][$name]['#access'] = FALSE;
    }
  }

  // Don't hide 'hide_empty', because it's useful for empty fieldsets (due to empty fields).
  unset($form['hide_empty']['#access'], $form['hide_empty']['#fieldset']);
  $form['hide_empty']['#weight'] = 200;

  // Add 'fieldset' tree with the usual fieldset stuff.
  $form['fieldset'] = array(
    '#tree' => TRUE,
  );
  $fieldset_types = array(
    'fieldset' => '<fieldset>',
    'div' => '<div>',
  );
  $form['fieldset']['type'] = array(
    '#type' => 'select',
    '#title' => t('Display type'),
    '#options' => $fieldset_types,
    '#default_value' => $this->options['fieldset']['type'],
    '#description' => t('A <code>&lt;fieldset&gt;</code> will always show its title as <code>&lt;legend&gt;</code>. A <code>&lt;div&gt;</code> will never show the title.'),
  );
  $form['fieldset']['classes'] = array(
    '#type' => 'textfield',
    '#title' => t('HTML classes'),
    '#default_value' => $this->options['fieldset']['classes'],
    '#description' => t('The usual Views row tokens are available. If you leave this empty, the untranslated <em>Fieldset title</em> will be added.'),
  );
  $form['fieldset']['id'] = array(
    '#type' => 'textfield',
    '#title' => t('HTML ID'),
    '#default_value' => $this->options['fieldset']['id'],
    '#description' => t('The usual Views row tokens are available.') . ' ' . t('You want to make sure this ID is very unique by using tokens.'),
  );
  $form['fieldset']['collapsible'] = array(
    '#type' => 'checkbox',
    '#title' => t('Collapsible'),
    '#default_value' => $this->options['fieldset']['collapsible'],
  );
  $form['fieldset']['collapsed'] = array(
    '#type' => 'checkbox',
    '#title' => t('Collapsed'),
    '#default_value' => $this->options['fieldset']['collapsed'],
  );
}