|
@@ -955,6 +955,109 @@ function tripal_views_integration_form($form, $form_state, $arg) {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ // Form to add a new join
|
|
|
+ $form['view_setup_join']['new_join'] = array(
|
|
|
+ '#type' => 'fieldset',
|
|
|
+ '#title' => 'New Join',
|
|
|
+ '#description' => "Add a new join to the $table_name table",
|
|
|
+ '#prefix' => '<div id="new-join">',
|
|
|
+ '#suffix' => '</div>',
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-1'] = array(
|
|
|
+ '#type' => 'markup',
|
|
|
+ '#prefix' => "<div class=\"join-column-one\">",
|
|
|
+ '#suffix' => "</div>",
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-1']['join_base_table'] = array(
|
|
|
+ '#type' => 'item',
|
|
|
+ '#markup' => '<span class="column-name">' . $table_name . '</span>'
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-1']['new_join_base_table'] = array(
|
|
|
+ '#type' => 'hidden',
|
|
|
+ '#value' => $table_name
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-1']['new_join_base_field'] = array(
|
|
|
+ '#type' => 'select',
|
|
|
+ '#options' => $base_field_options,
|
|
|
+ '#required' => FALSE,
|
|
|
+ );
|
|
|
+
|
|
|
+ // COLUMN II
|
|
|
+ $form['view_setup_join']['new_join']['column-2'] = array(
|
|
|
+ '#type' => 'markup',
|
|
|
+ '#prefix' => "<div class=\"join-column-two\">",
|
|
|
+ '#suffix' => "</div>",
|
|
|
+ '#value' => filter_xss('')
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-2']['new_join_join_handler'] = array(
|
|
|
+ '#type' => 'select',
|
|
|
+ '#prefix' => "<div class=\"fields-join-handler\">",
|
|
|
+ '#suffix' => "</div>",
|
|
|
+ '#options' => $handlers_join,
|
|
|
+ '#required' => FALSE,
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-2']['new_join_relationship_handler'] = array(
|
|
|
+ '#type' => 'select',
|
|
|
+ '#prefix' => "<div class=\"fields-relationship-handler\">",
|
|
|
+ '#suffix' => "</div>",
|
|
|
+ '#options' => $handlers_rel,
|
|
|
+ '#required' => FALSE,
|
|
|
+ '#default_value' => 'views_handler_relationship'
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-2']['new_join_relationship_only'] = array(
|
|
|
+ '#type' => 'checkbox',
|
|
|
+ '#title' => 'Relationship Only?',
|
|
|
+ '#default_value' => TRUE
|
|
|
+ );
|
|
|
+
|
|
|
+ // COLUMN III
|
|
|
+ $form['view_setup_join']['new_join']['column-3'] = array(
|
|
|
+ '#type' => 'markup',
|
|
|
+ '#prefix' => "<div class=\"join-column-three\">",
|
|
|
+ '#suffix' => "</div>",
|
|
|
+ '#value' => filter_xss('')
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['column-3']['new_join_left_table'] = array(
|
|
|
+ '#type' => 'select',
|
|
|
+ '#options' => $chado_join_tables,
|
|
|
+ '#ajax' => array(
|
|
|
+ 'callback' => 'tripal_views_integration_ajax_new_join_left_field_callback',
|
|
|
+ 'wrapper' => 'new-join',
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ $new_join_table = (isset($form_state['values']['new_join_left_table']))? $form_state['values']['new_join_left_table'] : FALSE;
|
|
|
+ if ($new_join_table) {
|
|
|
+ // get the table description
|
|
|
+ $table_desc = chado_get_schema($new_join_table);
|
|
|
+ foreach ($table_desc['fields'] as $column => $def) {
|
|
|
+ $columns[$column] = $column;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $columns = array('Select Left Column');
|
|
|
+ }
|
|
|
+ $form['view_setup_join']['new_join']['column-3']['new_join_left_field'] = array(
|
|
|
+ '#type' => 'select',
|
|
|
+ '#prefix' => " <div id=\"fields-column-join-column-$table_id-$i\" class=\"fields-column-join-column\">",
|
|
|
+ '#suffix' => "</div>",
|
|
|
+ '#options' => $columns,
|
|
|
+ '#required' => FALSE,
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['view_setup_join']['new_join']['save'] = array(
|
|
|
+ '#type' => 'submit',
|
|
|
+ '#value' => t('Save & Add Join'),
|
|
|
+ );
|
|
|
+
|
|
|
$form['num_joins'] = array(
|
|
|
'#type' => 'hidden',
|
|
|
'#value' => $i
|
|
@@ -1025,6 +1128,17 @@ function tripal_views_integration_form_validate($form, &$form_state) {
|
|
|
.'views integrations created by core modules. Please set the priority between '
|
|
|
.'0 and -10 to ensure your changes are used rather over the defaults.');
|
|
|
}
|
|
|
+
|
|
|
+ // Check that if some fields for a new join are entered, all of them are
|
|
|
+ if (!empty($form_state['values']['new_join_base_field'])
|
|
|
+ OR !empty($form_state['values']['new_join_left_table'])
|
|
|
+ OR !empty($form_state['values']['new_join_left_field'])) {
|
|
|
+ if (!(!empty($form_state['values']['new_join_base_field'])
|
|
|
+ AND !empty($form_state['values']['new_join_left_table'])
|
|
|
+ AND !empty($form_state['values']['new_join_left_field']))) {
|
|
|
+ form_set_error('new_join_base_field','You need to select the Base Column, Left Table and Left Column to create a new join');
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1173,6 +1287,21 @@ function tripal_views_integration_form_submit($form, &$form_state) {
|
|
|
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'));
|
|
|
}
|
|
@@ -1180,12 +1309,20 @@ function tripal_views_integration_form_submit($form, &$form_state) {
|
|
|
drupal_set_message(t('Record Added'));
|
|
|
}
|
|
|
|
|
|
- $form_state['redirect'] = 'admin/tripal/views-integration/list';
|
|
|
+ $form_state['redirect'] = 'admin/tripal/views-integration/integrations';
|
|
|
|
|
|
// now clear all the caches so that Drupal views picks up our chages
|
|
|
views_invalidate_cache();
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * AJAX callback to replace the left field select list in the new join fieldset of the
|
|
|
+ * tripal_views_integration_form form
|
|
|
+ */
|
|
|
+function tripal_views_integration_ajax_new_join_left_field_callback($form, $form_state) {
|
|
|
+ return $form['view_setup_join']['new_join'];
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Purpose: this function queries all modules currently enabled on the site
|
|
|
* looking for custom handlers and returns a list of all available handerls.
|