function tripal_views_integration_form_submit

2.x tripal_views_integration_UI.inc tripal_views_integration_form_submit($form, &$form_state)
1.x tripal_views_integration.inc tripal_views_integration_form_submit($form, &$form_state)

Purpose: inserts or updates the record in the tripal views integration tables. This function is only called if validation is passed.

Parameters

$form: The form object which is passed automatically by drupal

$form_state: The form state pbject which is passed automatically by drupal

Related topics

File

tripal_views/includes/tripal_views_integration_UI.inc, line 1166
Functions related to the UI for integrating tables with views

Code

function tripal_views_integration_form_submit($form, &$form_state) {
  $name = trim($form_state['values']['row_name']);
  $mview_id = $form_state['values']['mview_id'];
  $table_name = $form_state['values']['table_name'];
  $setup_id = array_key_exists('setup_id', $form_state['values']) ? $form_state['values']['setup_id'] : "";
  $priority = $form_state['values']['row_priority'];
  $comment = $form_state['values']['row_description'];

  // get details about this mview
  if ($mview_id) {
    // D7 TODO: Check DBTNG changes work
    $sql = "SELECT * FROM {tripal_mviews} WHERE mview_id = :id";
    $mview = db_query($sql, array(':id' => $mview_id));
    $mview = $mview->fetchObject();
    $table_name = $mview->mv_table;
    $table_id = $mview_id;
    $type = 'mview';
  }
  else {
    $type = 'chado';
    $table_id = $table_name;
  }

  // If this is for a materialized view then we want to add/update that record
  $tripal_views_record = array();
  if ($mview_id) {
    // get details about this mview
    // D7 TODO: Check DBTNG changes work
    $sql = "SELECT * FROM {tripal_mviews} WHERE mview_id = :id";
    $mview = db_query($sql, array(':id' => $mview_id));
    $mview = $mview->fetchObject();

    // build the record for insert/update
    $tripal_views_record = array(
      'mview_id' => $mview_id,
      'table_name' => $mview->mv_table,
      'name' => $name,
      'priority' => $priority,
      'comment' => $comment,
      'base_table' => $form_state['values']['base_table']
    );
  }
  // if a chado table then...
  else {
    // build the record for insert/update
    $tripal_views_record = array(
      'table_name' => $table_name,
      'name' => $name,
      'priority' => $priority,
      'comment' => $comment,
      'base_table' => $form_state['values']['base_table']
    );
  }

  // perform the insert or update
  if (!$setup_id) { // this is an insert
    if (!drupal_write_record('tripal_views', $tripal_views_record)) {
      drupal_set_message(t("Failed to add record."), 'error');
      return;
    }
  }
  else { // this is an update
    // check to see if it was specified to create a new integration
    if ($form_state['values']['new_integration']) {
      $setup_id = NULL;
      if (!drupal_write_record('tripal_views', $tripal_views_record)) {
        drupal_set_message(t("Failed to add record."), 'error');
        return;
      }
    }
    else {
      $tripal_views_record['setup_id'] = $setup_id;
      if (!drupal_write_record('tripal_views', $tripal_views_record, array('setup_id'))) {
        drupal_set_message(t("Failed to update record."), 'error');
        return;
      }
    }
  }

  // if this is an update then clean out the existing joins and handlers so we can add new ones
  if ($setup_id) {
    db_query("DELETE FROM {tripal_views_field} WHERE setup_id = :setup", array(':setup' => $setup_id));
    db_query("DELETE FROM {tripal_views_join} WHERE setup_id = :setup", array(':setup' => $setup_id));
    db_query("DELETE FROM {tripal_views_handlers} WHERE setup_id = :setup", array(':setup' => $setup_id));
  }

  // iterate through the columns of the form and add
  // the joins if provided, and the handlers
  $i = 1;
  foreach (unserialize($form_state['values']['field_types']) as $key => $value) {

    // add the field definition
    $view_field_record = array(
      'setup_id' => $tripal_views_record['setup_id'],
      'column_name' => $key,
      'name' => $form_state['values']["fields_readable_name_$table_id-$i"],
      'description' => $form_state['values']["fields_description_$table_id-$i"],
      'type' => $value,
    );
    drupal_write_record('tripal_views_field', $view_field_record);

    // add the hanlders
    $handlers = array('filter', 'field', 'sort', 'argument');

    foreach ($handlers as $handler) {
      $handler_name = $form_state['values']["fields_" . $handler . "_handler_$table_id-$i"];
      if ($handler_name) {
        $handler_record = array(
          'setup_id' => $tripal_views_record['setup_id'],
          'column_name' => $key,
          'handler_type' => $handler,
          'handler_name' => $handler_name,
        );
        drupal_write_record('tripal_views_handlers', $handler_record);
      }
    }
    $i++;
  }

  // Now add all the joins
  for ($i = 0; $i <= $form_state['values']['num_joins']; $i++) {
    if (isset($form_state['values']["join_base_table-$i"])) {
      $join_record = array(
        'setup_id' => $tripal_views_record['setup_id'],
        'base_table' => $form_state['values']["join_base_table-$i"],
        'base_field' => $form_state['values']["join_base_field-$i"],
        'left_table' => $form_state['values']["join_left_table-$i"],
        'left_field' => $form_state['values']["join_left_field-$i"],
        'handler' => $form_state['values']["join_join_handler-$i"],
        'relationship_handler' => $form_state['values']["join_relationship_handler-$i"],
        'relationship_only' => $form_state['values']["join_relationship_only-$i"]
      );
      drupal_write_record('tripal_views_join', $join_record);
    }
  }

  // Now add the new join if there is one
  if ($form_state['values']['new_join_base_field']) {
    $join_record = array(
      'setup_id' => $tripal_views_record['setup_id'],
      'base_table' => $form_state['values']["new_join_base_table"],
      'base_field' => $form_state['values']["new_join_base_field"],
      'left_table' => $form_state['values']["new_join_left_table"],
      'left_field' => $form_state['values']["new_join_left_field"],
      'handler' => $form_state['values']["new_join_join_handler"],
      'relationship_handler' => $form_state['values']["new_join_relationship_handler"],
      'relationship_only' => $form_state['values']["new_join_relationship_only"]
    );
    drupal_write_record('tripal_views_join', $join_record);
  }

  if ($setup_id) {
    drupal_set_message(t('Record Updated'));
  }
  else {
    drupal_set_message(t('Record Added'));
  }

  $form_state['redirect'] = 'admin/tripal/views-integration/integrations';

  // now clear all the caches so that Drupal views picks up our chages
  views_invalidate_cache();
}