function tripal_mviews_form

2.x tripal_core.mviews.inc tripal_mviews_form($form, &$form_state = NULL, $mview_id = NULL)
3.x tripal_chado.mviews.inc tripal_mviews_form($form, &$form_state = NULL, $mview_id = NULL)
1.x mviews.inc tripal_mviews_form(&$form_state = NULL, $mview_id = NULL)

A Form to Create/Edit a Materialized View

Parameters

$form_state: The current state of the form (Form API)

$mview_id: The unique ID of the Materialized View to Edit or NULL if creating a new materialized view

Return value

A form array (Form API)

Related topics

1 string reference to 'tripal_mviews_form'
tripal_core_menu in tripal_core/tripal_core.module
Implements hook_menu(). Defines all menu items needed by Tripal Core

File

tripal_core/includes/mviews.inc, line 142
Contains functions for viewing and editing of Materialized Views on a Tripal website.

Code

function tripal_mviews_form(&$form_state = NULL, $mview_id = NULL) {

  if (!$mview_id) {
    $action = 'Add';
  }
  else {
    $action = 'Edit';
  }

  // set defaults for collapsed fieldsets
  $schema_collapsed = 0;
  $traditional_collapsed = 1;


  // get this requested view
  if (strcmp($action, 'Edit') == 0) {
    $sql = "SELECT * FROM {tripal_mviews} WHERE mview_id = %d ";
    $mview = db_fetch_object(db_query($sql, $mview_id));

    // set the default values.  If there is a value set in the
    // form_state then let's use that, otherwise, we'll pull
    // the values from the database
    $default_name = $form_state['values']['name'];
    $default_mv_table = $form_state['values']['mv_table'];
    $default_mv_specs = $form_state['values']['mv_specs'];
    $default_indexed = $form_state['values']['indexed'];
    $default_mvquery = $form_state['values']['mvquery'];
    $default_special_index = $form_state['values']['special_index'];
    $default_comment = $form_state['values']['comment'];
    $default_modulename = $form_state['values']['modulename'];

    if (!$default_name) {
      $default_name = $mview->name;
    }
    if (!$default_mv_table) {
      $default_mv_table = $mview->mv_table;
    }
    if (!$default_mv_specs) {
      $default_mv_specs = $mview->mv_specs;
    }
    if (!$default_indexed) {
      $default_indexed = $mview->indexed;
    }
    if (!$default_mvquery) {
      $default_mvquery = $mview->query;
    }
    if (!$default_special_index) {
      $default_special_index = $mview->special_index;
    }
    if (!$default_comment) {
      $default_comment = $mview->comment;
    }
    if (!$default_schema) {
      $default_schema = $mview->mv_schema;
    }
    if (!$default_modulename) {
      $default_modulename = $mview->modulename ? $mview->modulename : 'tripal_core';
    }


    // the mv_table column of the tripal_mviews table always has the table
    // name even if it is a custom table. However, for the sake of the form,
    // we do not want this to show up as the mv_table is needed for the
    // traditional style input.  We'll blank it out if we have a custom
    // table and it will get reset in the submit function using the
    // 'table' value from the schema array
    if ($default_schema) {
      $default_mv_table = '';
    }
    // set which fieldset is collapsed
    if (!$default_schema) {
      $schema_collapsed = 1;
      $traditional_collapsed = 0;
    }
  }

  // Build the form
  $form['action'] = array(
    '#type' => 'value',
    '#value' => $action
  );

  $form['mview_id'] = array(
    '#type' => 'value',
    '#value' => $mview_id
  );

  $form['modulename'] = array(
    '#type' => 'value',
    '#value' => $default_modulename,
  );

  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('View Name'),
    '#description' => t('Please enter the name for this materialized view.'),
    '#required' => TRUE,
    '#default_value' => $default_name,
  );

  $form['comment'] = array(
    '#type' => 'textarea',
    '#title' => t('MView Description'),
    '#description' => t('Optional.  Please provide a description of the purpose for this materialized vieww.'),
    '#required' => FALSE,
    '#default_value' => $default_comment,
  );

  // add a fieldset for the Drupal Schema API
  $form['schema'] = array(
    '#type' => 'fieldset',
    '#title' => 'Drupal Schema API Setup',
    '#description' => t('Use the Drupal Schema API array to describe a table. The benefit is that it ' .
      'can be fully integrated with Tripal Views.  Tripal supports an extended ' .
      'array format to allow for descriptoin of foreign key relationships.'),
    '#collapsible' => 1,
    '#collapsed' => $schema_collapsed,
  );

  $form['schema']['schema'] = array(
    '#type' => 'textarea',
    '#title' => t('Schema Array'),
    '#description' => t('Please enter the Drupal Schema API compatible array that defines the table.'),
    '#required' => FALSE,
    '#default_value' => $default_schema,
    '#rows' => 25,
  );

  // add a fieldset for the Original Table Description fields
  $form['traditional'] = array(
    '#type' => 'fieldset',
    '#title' => 'Legacy MViews Setup',
    '#description' => t('Traditionally MViews were created by specifying PostgreSQL style ' .
      'column types.  This method can be used but is deprecated in favor of the ' .
      'newer Drupal schema API method provided above. In rare cases where the Drupal Schema API ' .
      'does not support a desired data type the Legacy Mviews should be used'),
    '#collapsible' => 1,
    '#collapsed' => $traditional_collapsed,
  );

  $form['traditional']['mv_table'] = array(
    '#type' => 'textfield',
    '#title' => t('Table Name'),
    '#description' => t('Please enter the table name that this view will generate in the database.  You can use the schema and table name for querying the view'),
    '#required' => FALSE,
    '#default_value' => $default_mv_table,
  );

  $form['traditional']['mv_specs'] = array(
    '#type' => 'textarea',
    '#title' => t('Table Definition'),
    '#description' => t('Please enter the field definitions for this view. Each field should be separated by a comma or enter each field definition on each line.'),
    '#required' => FALSE,
    '#default_value' => $default_mv_specs,
  );

  $form['traditional']['indexed'] = array(
    '#type' => 'textarea',
    '#title' => t('Indexed Fields'),
    '#description' => t('Please enter the field names (as provided in the table definition above) that will be indexed for this view.  Separate by a comma or enter each field on a new line.'),
    '#required' => FALSE,
    '#default_value' => $default_indexed,
  );

  /**
  $form['traditional']['special_index']= array(
    '#type'          => 'textarea',
    '#title'         => t('View Name'),
    '#description'   => t('Please enter the name for this materialized view.'),
    '#required'      => TRUE,
    '#default_value' => $default_special_index,
  );
  */

  $form['mvquery'] = array(
    '#type' => 'textarea',
    '#title' => t('Query'),
    '#description' => t('Please enter the SQL statement used to populate the table.'),
    '#required' => TRUE,
    '#default_value' => $default_mvquery,
    '#rows' => 25,
  );

  if ($action == 'Edit') {
    $value = 'Save';
  }
  if ($action == 'Add') {
    $value = 'Add';
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t($value),
    '#weight' => 9,
    '#executes_submit_callback' => TRUE,
  );
  $form['#redirect'] = 'admin/tripal/mviews';

  return $form;
}