Browse Source

Updated Create Content Form

Stephen Ficklin 6 years ago
parent
commit
b172bbf133

+ 25 - 16
tripal/api/tripal.terms.api.inc

@@ -579,28 +579,33 @@ function tripal_get_vocabularies() {
  *
  * @ingroup tripal_terms_api
  */
-function tripal_get_term_lookup_form(&$form, &$form_state, $default_name = '',
+function tripal_get_term_lookup_form(&$form, $form_state, $default_name = '',
     $title = 'Vocabulary Term', $description = '', $is_required,
-    $field_name = '', $delta = 0, $callback = '') {
-  
-  $ajax_wrapper_id = 'tripal-vocab-select-form-' . $delta;
-  if ($field_name) {
-    $ajax_wrapper_id = $field_name . '-' . $delta;
-  }
+    $field_name = '', $delta = 0, $callback = '', $wrapper = '', $validate = [], $weight = 0) {
   
   if (!$callback) {
     $callback = 'tripal_get_term_lookup_form_ajax_callback';
   }
-
+  
+  if (!$wrapper) {
+    $ajax_wrapper_id = 'tripal-vocab-select-form-' . $delta;
+    if ($field_name) {
+      $ajax_wrapper_id = $field_name . '-' . $delta;
+    }
+  }
+  else {
+    $ajax_wrapper_id = $wrapper;
+  }
+  
   $term_name = $default_name;
-  if (array_key_exists('values', $form_state) and array_key_exists('term_name', $form_state['values'])) {
-    $term_name = $form_state['values']['term_name'];
+  if (array_key_exists('values', $form_state) and array_key_exists('term_name' . $delta, $form_state['values'])) {
+    $term_name = $form_state['values']['term_name' . $delta];
   }
-  if (array_key_exists('input', $form_state) and array_key_exists('term_name', $form_state['input'])) {
-    $term_name = $form_state['input']['term_name'];
+  if (array_key_exists('input', $form_state) and array_key_exists('term_name' . $delta, $form_state['input'])) {
+    $term_name = $form_state['input']['term_name' . $delta];
   }
   if ($field_name and array_key_exists('input', $form_state) and array_key_exists($field_name, $form_state['input'])) {
-    $term_name = $form_state['input'][$field_name]['und'][$delta]['term_match']['term_name'];
+    $term_name = $form_state['input'][$field_name]['und'][$delta]['term_match' . $delta]['term_name' . $delta];
   }
 
   if (!$description) {
@@ -619,6 +624,7 @@ function tripal_get_term_lookup_form(&$form, &$form_state, $default_name = '',
     '#title' => t($title),
     '#prefix' => '<div id = "' . $ajax_wrapper_id . '">',
     '#suffix' => '</div>',
+    '#weight' => $weight,
   );
   $form['term_match' . $delta]['term_name' . $delta] = array(
     '#title'  => t('Type'),
@@ -632,8 +638,7 @@ function tripal_get_term_lookup_form(&$form, &$form_state, $default_name = '',
     '#type' => 'button',
     '#value' => t('Lookup Term'),
     '#name' => 'select_cvterm_' . $ajax_wrapper_id,
-    '#validate' => array(),
-    '#limit_validation_errors' => array(),
+    '#validate' => $validate,
     '#ajax' => array(
       'callback' => $callback,
       'wrapper' => $ajax_wrapper_id,
@@ -641,6 +646,10 @@ function tripal_get_term_lookup_form(&$form, &$form_state, $default_name = '',
       'method' => 'replace'
     ),
   );
+  if (empty($validate)) {
+    $form['term_match' . $delta]['select_button' . $delta]['#limit_validation_errors'] = [];
+  }
+  
 
   // If the term has been provided by the user then we want to search for
   // matching terms in the database and let them select among any matches.
@@ -782,7 +791,7 @@ function tripal_get_term_lookup_form_result($form, $form_state, $field_name = ''
     }
   }
   else {
-    $values = $form_state['values'];
+    $values = array_key_exists('values', $form_state) ? $form_state['values'] : [];
   }
 
   if (is_array($values)) {

+ 38 - 51
tripal/includes/TripalBundleUIController.inc

@@ -559,7 +559,9 @@ function tripal_admin_add_type_form($form, &$form_state) {
   }
   else {
     $selected = tripal_get_term_lookup_form_result($form, $form_state);
-    $selected_term = $selected[0];
+    if ($selected) {
+      $selected_term = $selected[0];
+    }
   }
     
   // Get the selected storage element.
@@ -644,9 +646,9 @@ function tripal_admin_add_type_form_step1_summary(&$form, &$form_state, $selecte
   $form['term_summary']['details'] = [
     '#type' => 'item',
     '#title' => t('Term'),
-    '#markup' => '<b>Vocabulary:</b> ' . $selected_term->cv_id->name . ' (' . $selected_term->dbxref_id->db_id->name . ') ' . $selected_term->cv_id->definition .
-    '<br><b>Term: </b> ' . $selected_term->dbxref_id->db_id->name . ':' . $selected_term->dbxref_id->accession . '.  ' .
-    '<br><b>Definition:</b>  ' . $definition
+    '#markup' => 'Vocabulary: ' . $selected_term->cv_id->name . ' (' . $selected_term->dbxref_id->db_id->name . ') ' . $selected_term->cv_id->definition .
+    '<br>Term: ' . $selected_term->dbxref_id->db_id->name . ':' . $selected_term->dbxref_id->accession . '.  ' .
+    '<br>Definition:  ' . $definition
   ];
   $form['term_summary']['step1-return'] = array(
     '#type' => 'submit',
@@ -658,7 +660,7 @@ function tripal_admin_add_type_form_step1_summary(&$form, &$form_state, $selecte
 /**
  * Builds step1 of the tripal_admin_add_type_form()
  */
-function tripal_admin_add_type_form_step2(&$form, &$form_state, $stores) {
+function tripal_admin_add_type_form_step2(&$form, &$form_state, $stores, $selected_term, $default_store) {
   
   // Now let the user select where the data type will be stored.
   $form['storage'] = array(
@@ -700,7 +702,7 @@ function tripal_admin_add_type_form_step2(&$form, &$form_state, $stores) {
 /**
  * Provides a summary of values selected in Step 1.
  */
-function tripal_admin_add_type_form_step2_summary(&$form, &$form_state, $stores) {
+function tripal_admin_add_type_form_step2_summary(&$form, &$form_state, $stores, $selected_term, $default_store) {
   $default_store = $form_state['values']['store_select'];
   $selected_store_module = $stores[$default_store]['module'];
   
@@ -731,22 +733,28 @@ function tripal_admin_add_type_form_step2_summary(&$form, &$form_state, $stores)
 /**
  * Builds step1 of the tripal_admin_add_type_form()
  */
-function tripal_admin_add_type_form_step3(&$form, &$form_state, $stores) {
+function tripal_admin_add_type_form_step3(&$form, &$form_state, $stores, $selected_term, $default_store) {
   $default_store = $form_state['values']['store_select'];
   
   $selected_store_module = $stores[$default_store]['module'];
   
+  $form['store_settings'] = [
+    '#type' => 'fieldset',
+    '#title' => t('Step 3: Storage Settings'),
+    '#description' => '',
+  ];
+
   $function = $selected_store_module . '_field_storage_bundle_mapping_form';
   if (function_exists($function)) {
     $store_form = $function($form, $form_state, $selected_term, $submit_disabled);
-    $form['storage'][$store_type] = $store_form;
+    $form['store_settings'][$default_store] = $store_form;
   }
   
   // Add in the button for the cases of no terms or too many.
   $form['submit_button'] = array(
     '#type' => 'submit',
     '#value' => t('Create content type'),
-    '#name' => 'use_cvterm',
+    '#name' => 'create-content',
     '#disabled' => $submit_disabled,
   );
 }
@@ -754,6 +762,7 @@ function tripal_admin_add_type_form_step3(&$form, &$form_state, $stores) {
  * Implements an AJAX callback for the tripal_chado_vocab_select_term_form.
  */
 function tripal_admin_add_type_form_ajax_callback($form, $form_state) {
+
   return $form;
 }
 /**
@@ -764,6 +773,11 @@ function tripal_admin_add_type_form_validate($form, &$form_state) {
   $stores = module_invoke_all('vocab_storage_info');
   $store_select = (isset($form_state['values']['store_select'])) ? $form_state['values']['store_select'] : NULL;
   $clicked_button = $form_state['clicked_button']['#name'];
+  
+  // Don't do validation on an ajax callback.
+  if (array_key_exists('#ajax', $form_state['triggering_element'])) {
+    return;
+  }
 
   if ($clicked_button =='step1-continue') {
     $form_state['rebuild'] = TRUE;
@@ -787,43 +801,16 @@ function tripal_admin_add_type_form_validate($form, &$form_state) {
     $form_state['stage'] = 'step3';
   }
   
-  if ($clicked_button =='use_cvterm') {       
-    $cvterm_id = NULL;
-
-    // Make sure we have a cvterm selected
-    $num_selected = 0;
-    foreach ($form_state['values'] as $key => $value) {
-      $matches = array();
-      if (preg_match("/^term-(\d+)$/", $key, $matches) and
-          $form_state['values']['term-' . $matches[1]]) {
-        $cvterm_id = $matches[1];
-        $term = chado_generate_var('cvterm', array('cvterm_id' => $cvterm_id));
-        $num_selected++;
-      }
-    }
-
-    if ($num_selected == 0) {
-      form_set_error('', 'Please select at least one term.');
-    }
-    else if ($num_selected > 1) {
-      form_set_error('term-' . $cvterm_id, 'Please select only one term from the list below.');
-    }
-    else {
-      // Add the term to the form state so we can access it later.
-      $form_state['term']['vocabulary'] = $term->dbxref_id->db_id->name;
-      $form_state['term']['accession'] = $term->dbxref_id->accession;
-      $form_state['term']['term_name'] = $term->name;
-
-      // Call the submit hook for this form for the storage method that
-      // will be responsible for this cotent type.
-      $stores = module_invoke_all('vocab_storage_info');
-      $selected_store_module = $stores[$store_select]['module'];
-      $selected_term = $form_state['term'];
+  if ($clicked_button == 'create-content') {           
+    // Call the submit hook for this form for the storage method that
+    // will be responsible for this cotent type.
+    $stores = module_invoke_all('vocab_storage_info');
+    $selected_store_module = $stores[$store_select]['module'];
+    $selected_term = $form_state['values']['term'];
 
-      $function = $selected_store_module . '_field_storage_bundle_mapping_form_validate';
-      if (function_exists($function)) {
-        $function($form, $form_state, $selected_term);
-      }
+    $function = $selected_store_module . '_field_storage_bundle_mapping_form_validate';
+    if (function_exists($function)) {
+      $function($form, $form_state, $selected_term);
     }
   }
   else {
@@ -836,16 +823,16 @@ function tripal_admin_add_type_form_validate($form, &$form_state) {
 function tripal_admin_add_type_form_submit($form, &$form_state) {
   $vocabulary = '';
   $accession = '';
-  if (array_key_exists('term', $form_state)) {
-    $selected_term = $form_state['term'];
+  if (array_key_exists('term', $form_state['values'])) {
+    $selected_term = $form_state['values']['term'];
     $store_select = $form_state['values']['store_select'];
-    $vocabulary = array_key_exists('vocabulary', $selected_term) ? $selected_term['vocabulary'] : '';
-    $accession = array_key_exists('accession', $selected_term) ? $selected_term['accession'] : '';
-    $term_name = array_key_exists('term_name', $selected_term) ? $selected_term['term_name'] : '';
+    $vocabulary = $selected_term->dbxref_id->db_id->name;
+    $accession = $selected_term->dbxref_id->accession;
+    $term_name = $selected_term->name;
 
     // Before we try to add this type, check to see if it already exists
     // as a bundle.
-    $term = tripal_load_term_entity(array('vocabulary' => $vocabulary, 'accession' => $accession));
+    $term = tripal_load_term_entity(['vocabulary' => $vocabulary, 'accession' => $accession]);
     if (!$term) {
 
       // Call the submit hook for this form for the storage method that

File diff suppressed because it is too large
+ 692 - 252
tripal_chado/includes/tripal_chado.field_storage.inc


+ 3 - 0
tripal_chado/includes/tripal_chado.fields.inc

@@ -2817,6 +2817,9 @@ function tripal_chado_bundle_get_properties($table_name, $prop_table, $type_tabl
   // Iterate through all of the properties and do some final checks to see
   // which ones should be added.
   $prop_arr = [];
+  if (!$props) {
+    return $prop_arr;
+  }
   while ($prop = $props->fetchObject()) {
     $term = chado_generate_var('cvterm', array('cvterm_id' => $prop->type_id));
     $term = chado_expand_var($term, 'field', 'cvterm.definition');

+ 25 - 0
tripal_chado/tripal_chado.install

@@ -630,6 +630,13 @@ function tripal_chado_chado_bundle_schema() {
         'type' => 'text',
         'not null' => FALSE,
         'default' => '',
+      ),
+      'base_type_id' => array(
+        'description' => 'If a property table is used for a linker, and if the base table requires a type_id then this is the type that should be used on insert of new records in the base table.',
+        'size' => 'big',        
+        'type' => 'int',
+        'not null' => FALSE,
+        'default' => '',
       )
     ),
     'indexes' => array(
@@ -1588,3 +1595,21 @@ function tripal_chado_update_7328() {
   }
 }
 
+/**
+ * Adds a base_type_id to the chado_bundle table.
+ */
+function tripal_chado_update_7331() {
+  try {
+    db_add_field('chado_bundle', 'base_type_id', [
+      'description' => 'If a property table is used for a linker, and if the base table requires a type_id then this is the type that should be used on insert of new records in the base table.',
+      'size' => 'big',
+      'type' => 'int',
+      'not null' => FALSE,
+      'default' => '',
+    ]);
+  }
+  catch (\PDOException $e) {
+    $error = $e->getMessage();
+    throw new DrupalUpdateException('Could not perform update: '. $error);
+  }
+}

Some files were not shown because too many files changed in this diff