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();
}