function chado_update_node_form_dbxrefs

2.x tripal_core.chado_nodes.dbxrefs.api.inc chado_update_node_form_dbxrefs($node, $details, $retrieved_dbxrefs = FALSE)
3.x tripal_core.chado_nodes.dbxrefs.api.inc chado_update_node_form_dbxrefs($node, $details, $retrieved_dbxrefs = FALSE)

This function is used in hook_insert or hook_update and handles inserting of any new dbxrefs and creation of links between those dbxrefs and node content

Parameters

$node: The node passed into hook_insert & hook_update

$details:

  • linking_table: the name of the _dbxref linking table (ie: feature_dbxref)
  • foreignkey_name: the name of the foreign key used to link to the node content (ie: feature_id)
  • foreignkey_value: the value of the foreign key (ie: 445, if there exists a feature where feature_id=445)

$retrieved_dbxrefs: An array of databa references from chado_retrieve_node_form_dbxrefs($node). This can be used if you need special handling for some of the database references

Related topics

13 calls to chado_update_node_form_dbxrefs()
chado_featuremap_insert in legacy/tripal_featuremap/includes/tripal_featuremap.chado_node.inc
Implements hook_insert().
chado_featuremap_update in legacy/tripal_featuremap/includes/tripal_featuremap.chado_node.inc
Implements hook_update(). Update nodes
chado_feature_insert in legacy/tripal_feature/includes/tripal_feature.chado_node.inc
Implements hook_insert().
chado_feature_update in legacy/tripal_feature/includes/tripal_feature.chado_node.inc
Implements hook_update().
chado_library_insert in legacy/tripal_library/includes/tripal_library.chado_node.inc
Implements hook_insert().

... See full list

1 string reference to 'chado_update_node_form_dbxrefs'

File

legacy/tripal_core/api/tripal_core.chado_nodes.dbxrefs.api.inc, line 661
API to manage the Chado dbxref table for various Tripal Node Types

Code

function chado_update_node_form_dbxrefs($node, $details, $retrieved_dbxrefs = FALSE) {

  $linking_table = $details['linking_table'];
  $foreignkey_name = $details['foreignkey_name'];
  $foreignkey_value = $details['foreignkey_value'];

  if (isset($node->dbxref_table) AND ($foreignkey_value > 0)) {
    // First remove existing dbxref links
    chado_delete_record($linking_table, array($foreignkey_name => $foreignkey_value));

    // Add back in dbxref links and insert dbxrefs as needed
    if ($retrieved_dbxrefs) {
      $dbxrefs = $retrieved_dbxrefs;
    }
    else {
      $dbxrefs = chado_retrieve_node_form_dbxrefs($node);
    }
    foreach ($dbxrefs as $db_id => $versions) {
      foreach ($versions as $version => $elements) {
        foreach ($elements as $dbxref_id => $accession) {
          // If there is no dbxref then we have to create that first
          if (preg_match('/^TEMP/', $dbxref_id)) {
            $version = ($version == 'NONE') ? '' : $version;
            $success = tripal_insert_dbxref(array(
              'db_id' => $db_id,
              'accession' => $accession,
              'version' => $version,
              'description' => NULL
            ));
            if ($success) {
              $dbxref_id = $success->dbxref_id;
            }
            else {
              $dbxref_id = FALSE;
            }
          }

          // add _dbxref linker
          if ($dbxref_id) {
            if (preg_match('/(\w+)_dbxref/', $linking_table, $matches)) {
              $base_table = $matches[1];

              $success_link = tripal_associate_dbxref(
              $base_table, 
              $foreignkey_value, 
              array('dbxref_id' => $dbxref_id)
              );
            }
          }
        }
      }
    }
  }
}