Browse Source

Multiple fixes to the chado node api dbxref form

Lacey Sanderson 10 years ago
parent
commit
bb0de4fc51
1 changed files with 32 additions and 36 deletions
  1. 32 36
      tripal_core/api/tripal_core.chado_nodes.dbxrefs.api.inc

+ 32 - 36
tripal_core/api/tripal_core.chado_nodes.dbxrefs.api.inc

@@ -200,9 +200,12 @@ function chado_add_node_form_dbxrefs(&$form, &$form_state, $details) {
   else {
     $existing_dbxrefs = chado_query(
       "SELECT
-         db.name as db_name, db.db_id as db_id,
-         dbxref.dbxref_id, dbxref.accession as accession,
-         dbxref.description as description, dbxref.version
+         db.name as db_name, 
+         db.db_id as db_id,
+         dbxref.dbxref_id, 
+         dbxref.accession as accession,
+         dbxref.description as description, 
+         dbxref.version
        FROM {dbxref} dbxref
          LEFT JOIN {db} db ON db.db_id = dbxref.db_id
          LEFT JOIN {".$details['linking_table']."} linking_table ON linking_table.dbxref_id = dbxref.dbxref_id
@@ -218,7 +221,7 @@ function chado_add_node_form_dbxrefs(&$form, &$form_state, $details) {
    *   '[db_id]-[version]' => array(
    *     'db_id' => [the db.db_id value]
    *     'db_name' => [the db.name value]
-   *     'dbxref_id' => [the dbxref.dbxref_id value, or NULL if it doesn't yet exists],
+   *     'dbxref_id' => [the dbxref.dbxref_id value, or temporary value if it doesn't yet exists],
    *     'version' => [the dbxref.version value],
    *     'accession' => [the dbxref.accession value],
    *   ),
@@ -246,59 +249,53 @@ function chado_add_node_form_dbxrefs(&$form, &$form_state, $details) {
 
     if (array_key_exists($dbxref->db_id, $db_options)) {
 
-      /* Since the dbxref version is part of the unique constraint, when it is
-       * empty we need to use something in the key to indicate this case. Otherwise,
-       * you wouldn't be able to select those elements from the array
-       * (ie: $form['addtl_dbxrefs']['dbxref_table'][9999][''] doesn't work as
-       * expected whereas $form['addtl_dbxrefs']['dbxref_table'][9999][NONE]
-       * is much better)
-       */
-      $version = (!empty($dbxref->version)) ? $dbxref->version : 'NONE';
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id]['#type'] = 'markup';
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id]['#value'] = '';
 
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id] = array(
         '#type' => 'markup',
         '#value' => ''
       );
 
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version] = array(
-        '#type' => 'markup',
-        '#value' => ''
-      );
-
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version]['db_id'] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['db_id'] = array(
         '#type' => 'hidden',
         '#value' => $dbxref->db_id
       );
 
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version]['accession'] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['accession'] = array(
         '#type' => 'hidden',
         '#value' => $dbxref->accession
       );
 
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version]['dbxref_id'] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['version'] = array(
+        '#type' => 'hidden',
+        '#value' => $dbxref->version,
+      );
+
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['dbxref_id'] = array(
         '#type' => 'hidden',
         '#value' => $dbxref->dbxref_id
       );
 
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version]['db'] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['db'] = array(
         '#type' => 'markup',
         '#markup' => $dbxref->db_name
       );
 
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version]['dbxref_version'] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['dbxref_version'] = array(
         '#type' => 'markup',
         '#markup' => $dbxref->version,
       );
 
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version]['dbxref_accession'] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['dbxref_accession'] = array(
         '#type' => 'markup',
         '#markup' => $dbxref->accession
       );
       // remove button
-      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$version]['dbxref_action'] = array(
+      $form['addtl_dbxrefs']['dbxref_table'][$dbxref->db_id][$dbxref->dbxref_id]['dbxref_action'] = array(
         '#type' => 'submit',
         '#value' => t('Remove'),
-        '#name' => "dbxrefs_remove-".$dbxref->db_id.'-'.$version,
+        '#name' => "dbxrefs_remove-".$dbxref->db_id.'-'.$dbxref->dbxref_id,
         '#ajax' => array(
           'callback' => "chado_add_node_form_subtable_ajax_update",
           'wrapper' => 'tripal-generic-edit-addtl_dbxrefs-table',
@@ -313,7 +310,7 @@ function chado_add_node_form_dbxrefs(&$form, &$form_state, $details) {
         // from the chado_additional_dbxrefs array. In order to keep validate errors
         // from the node form validate and Drupal required errors for non-dbxref fields
         // preventing the user from removing dbxrefs we set the #limit_validation_errors below
-        '#validate' => array('chado_add_node_form_subtables_add_button_validate'),
+        '#validate' => array('chado_add_node_form_subtables_remove_button_validate'),
         '#submit' => array('chado_add_node_form_subtables_remove_button_submit'),
         // Limit the validation of the form upon clicking this button to the dbxref_table tree
         // No other fields will be validated (ie: no fields from the main form or any other api
@@ -404,6 +401,7 @@ function chado_add_node_form_dbxrefs_add_button_validate($form, &$form_state) {
   if (empty($form_state['values']['dbxref_table']['new']['dbxref_accession'])) {
     form_set_error('dbxref_table][new][dbxref_accession','You must enter the accession before attempting to add a new database reference.');
   }
+
 }
 
 /**
@@ -426,12 +424,11 @@ function chado_add_node_form_dbxrefs_add_button_submit($form, &$form_state) {
   $dbxref = array(
     'db_id' => $form_state['values']['dbxref_table']['new']['db'],
     'db_name' => $form_state['values']['dbxref_table']['new']['db_name'],
-    'dbxref_id' => NULL,
+    'dbxref_id' => 'TEMP' . uniqid(),
     'version' => $form_state['values']['dbxref_table']['new']['dbxref_version'],
     'accession' => $form_state['values']['dbxref_table']['new']['dbxref_accession'],
   );
-  $version = (!empty($dbxref['version'])) ? $dbxref['version'] : 'NONE';
-  $key = $dbxref['db_id'] . '-' . $version;
+  $key = $dbxref['db_id'] . '-' . $dbxref['dbxref_id'];
   $form_state['chado_additional_dbxrefs'][$key] = (object) $dbxref;
 
 
@@ -484,7 +481,7 @@ function chado_add_node_form_dbxrefs_remove_button_submit(&$form, &$form_state)
  *   '[db_id]-[version]' => array(
  *     'db_id' => [the db.db_id value]
  *     'db_name' => [the db.name value]
- *     'dbxref_id' => [the dbxref.dbxref_id value, or NULL if it doesn't yet exists],
+ *     'dbxref_id' => [the dbxref.dbxref_id value, or temporary value if it doesn't yet exists],
  *     'version' => [the dbxref.version value],
  *     'accession' => [the dbxref.accession value],
  *   ),
@@ -507,8 +504,7 @@ function chado_add_node_form_dbxrefs_create_dbxref_formstate_array($form, &$form
             'version' => $element['dbxref_version']['#markup'],
             'accession' => $element['dbxref_accession']['#markup'],
           );
-          $version = (!empty($dbxref['version'])) ? $dbxref['version'] : 'NONE';
-          $key = $dbxref['db_id'] . '-' . $version;
+          $key = $dbxref['db_id'] . '-' . $dbxref['dbxref_id'];
           $form_state['chado_additional_dbxrefs'][$key] = (object) $dbxref;
       }
     }
@@ -583,8 +579,8 @@ function chado_retrieve_node_form_dbxrefs($node) {
   if (isset($node->dbxref_table)) {
     foreach ($node->dbxref_table as $db_id => $elements) {
       if ($db_id != 'new') {
-        foreach ($elements as $version => $dbxref) {
-          $dbxref_id = (!empty($dbxref['dbxref_id'])) ? $dbxref['dbxref_id'] : 'NONE';
+        foreach ($elements as $dbxref_id => $dbxref) {
+          $version = (!empty($dbxref['version'])) ? $dbxref['version'] : 'NONE';
           $dbxrefs[$db_id][$version][$dbxref_id] = $dbxref['accession'];
         }
       }
@@ -631,7 +627,7 @@ function chado_update_node_form_dbxrefs($node, $details, $retrieved_dbxrefs = FA
       foreach ($versions as $version => $elements) {
         foreach ($elements as $dbxref_id => $accession) {
           // If there is no dbxref then we have to create that first
-          if ($dbxref_id == 'NONE') {
+          if (preg_match('/^TEMP/',$dbxref_id)) {
             $version = ($version == 'NONE') ? '' : $version;
             $success = tripal_insert_dbxref(array(
               'db_id' => $db_id,