You are here

function views_ui_add_form in Views (for Drupal 7) 7.3

Same name and namespace in other branches
  1. 6.3 includes/admin.inc \views_ui_add_form()
  2. 6.2 includes/admin.inc \views_ui_add_form()

Form builder for the "add new view" page.

1 string reference to 'views_ui_add_form'
views_ui_add_page in includes/admin.inc
Page callback to add a new view.

File

includes/admin.inc, line 310
Provides the Views' administrative interface.

Code

function views_ui_add_form($form, &$form_state) {
  ctools_include('dependent');
  $form['#attached']['js'][] = drupal_get_path('module', 'views_ui') . '/js/views-admin.js';
  $form['#attributes']['class'] = array(
    'views-admin',
  );
  $form['human_name'] = array(
    '#type' => 'textfield',
    '#title' => t('View name'),
    '#required' => TRUE,
    '#size' => 32,
    '#default_value' => !empty($form_state['view']) ? $form_state['view']->human_name : '',
    '#maxlength' => 255,
  );
  $form['name'] = array(
    '#type' => 'machine_name',
    '#maxlength' => 128,
    '#machine_name' => array(
      'exists' => 'views_get_view',
      'source' => array(
        'human_name',
      ),
    ),
    '#description' => t('A unique machine-readable name for this View. It must only contain lowercase letters, numbers, and underscores.'),
  );
  $form['description_enable'] = array(
    '#type' => 'checkbox',
    '#title' => t('Description'),
  );
  $form['description'] = array(
    '#type' => 'textfield',
    '#title' => t('Provide description'),
    '#title_display' => 'invisible',
    '#size' => 64,
    '#default_value' => !empty($form_state['view']) ? $form_state['view']->description : '',
    '#dependency' => array(
      'edit-description-enable' => array(
        1,
      ),
    ),
  );

  // Create a wrapper for the entire dynamic portion of the form. Everything
  // that can be updated by AJAX goes somewhere inside here. For example, this
  // is needed by "Show" dropdown (below); it changes the base table of the
  // view and therefore potentially requires all options on the form to be
  // dynamically updated.
  $form['displays'] = array();

  // Create the part of the form that allows the user to select the basic
  // properties of what the view will display.
  $form['displays']['show'] = array(
    '#type' => 'fieldset',
    '#tree' => TRUE,
    '#attributes' => array(
      'class' => array(
        'container-inline',
      ),
    ),
  );

  // Create the "Show" dropdown, which allows the base table of the view to be
  // selected.
  $wizard_plugins = views_ui_get_wizards();
  $options = array();
  foreach ($wizard_plugins as $key => $wizard) {
    $options[$key] = $wizard['title'];
  }
  $form['displays']['show']['wizard_key'] = array(
    '#type' => 'select',
    '#title' => t('Show'),
    '#options' => $options,
  );
  $show_form =& $form['displays']['show'];
  $show_form['wizard_key']['#default_value'] = views_ui_get_selected($form_state, array(
    'show',
    'wizard_key',
  ), 'node', $show_form['wizard_key']);

  // Changing this dropdown updates the entire content of $form['displays'] via
  // AJAX.
  views_ui_add_ajax_trigger($show_form, 'wizard_key', array(
    'displays',
  ));

  // Build the rest of the form based on the currently selected wizard plugin.
  $wizard_key = $show_form['wizard_key']['#default_value'];
  $get_instance = $wizard_plugins[$wizard_key]['get_instance'];
  $wizard_instance = $get_instance($wizard_plugins[$wizard_key]);
  $form = $wizard_instance
    ->build_form($form, $form_state);
  $form['save'] = array(
    '#type' => 'submit',
    '#value' => t('Save & exit'),
    '#validate' => array(
      'views_ui_wizard_form_validate',
    ),
    '#submit' => array(
      'views_ui_add_form_save_submit',
    ),
  );
  $form['continue'] = array(
    '#type' => 'submit',
    '#value' => t('Continue & edit'),
    '#validate' => array(
      'views_ui_wizard_form_validate',
    ),
    '#submit' => array(
      'views_ui_add_form_store_edit_submit',
    ),
    '#process' => array_merge(array(
      'views_ui_default_button',
    ), element_info_property('submit', '#process', array())),
  );
  $form['cancel'] = array(
    '#type' => 'submit',
    '#value' => t('Cancel'),
    '#submit' => array(
      'views_ui_add_form_cancel_submit',
    ),
    '#limit_validation_errors' => array(),
  );
  return $form;
}