|
@@ -379,55 +379,70 @@ function tripal_insert_cv($name, $definition) {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Add's a controlled vocabulary term to the cvterm table.
|
|
|
+ * Add's a controlled vocabulary term to Chado.
|
|
|
*
|
|
|
- * If the parent CV does not exist then
|
|
|
- * that too is added to the CV table. If the cvterm is a relationship term
|
|
|
- * then the $is_relationship argument should be set. The function will try
|
|
|
- * to first find the relationship in the relationship ontology for updating and
|
|
|
- * if it can't be found will add the relationship to the __global CV. All terms
|
|
|
- * must also have a corresponding database. This is specified in the term's
|
|
|
- * ID just before the colon (e.g. GO:003824). If the database does not exist
|
|
|
- * in the DB table then it will be added automatically. The accession (the
|
|
|
- * value just after the colon in the term's ID) will be added to the dbxref
|
|
|
- * table. If the CVterm already exists and $update is set (default) then the
|
|
|
- * cvterm is updated. If the CVTerm already exists and $update is not set, then
|
|
|
- * no changes are made and the CVTerm object is returned.
|
|
|
+ * This function will add a cvterm record (and a dbxref record if appropriate
|
|
|
+ * values are provided). If the parent vocabulary does not exist then
|
|
|
+ * that also is added to the cv table. If the cvterm is a relationship term
|
|
|
+ * then the 'is_relationship' value should be set. All
|
|
|
+ * terms must also have a corresponding database. This is specified in the
|
|
|
+ * term's ID just before the colon (e.g. GO:003824). If the database does not
|
|
|
+ * exist in the DB table then it will be added automatically. The accession
|
|
|
+ * (the value just after the colon in the term's ID) will be added to the
|
|
|
+ * dbxref table. If the CVterm already exists and $update is set (default)
|
|
|
+ * then the cvterm is updated. If the CVTerm already exists and $update is
|
|
|
+ * not set, then no changes are made and the CVTerm object is returned.
|
|
|
*
|
|
|
* @param $term
|
|
|
* An associative array with the following keys:
|
|
|
- * - id: the term accession. must be of the form <DB>:<ACCESSION>, where <DB> is the
|
|
|
- * name of the database to which the cvterm belongs and the <ACCESSION> is the
|
|
|
- * term's accession number in the database.
|
|
|
+ * - id: the term accession. must be of the form <DB>:<ACCESSION>, where
|
|
|
+ * <DB> is the name of the database to which the cvterm belongs and the
|
|
|
+ * <ACCESSION> is the term's accession number in the database.
|
|
|
* - name: the name of the term. usually meant to be human-readable.
|
|
|
- * - namespace: the CV name for the term. DEPRECATED. Please use cv_name instead.
|
|
|
* - is_obsolete: is present and set to 1 if the term is defunct
|
|
|
* - definition: the definition of the term
|
|
|
- * - cv_name: The CV name to which the term belongs. If this arugment is null or not
|
|
|
- * provided then the function tries to find a record in the CV table with the same
|
|
|
- * name provided in the $term[namespace]. If this field is provided then it
|
|
|
- * overrides what the value in $term[namespace]
|
|
|
- * - is_relationship: If this term is a relationship term then this value should be 1.
|
|
|
- * - db_name: In some cases the database name will not be part of the $term['id'] and it
|
|
|
- * needs to be explicitly set. Use this argument only if the database name
|
|
|
- * cannot be specififed in the term ID (e.g. <DB>:<ACCESSION>).
|
|
|
+ * - cv_name: The CV name to which the term belongs. If this arugment is
|
|
|
+ * null or not provided then the function tries to find a record in the
|
|
|
+ * CV table with the same name provided in the $term[namespace]. If
|
|
|
+ * this field is provided then it overrides what the value in
|
|
|
+ * $term[namespace]
|
|
|
+ * - is_relationship: If this term is a relationship term then this value
|
|
|
+ * should be 1.
|
|
|
+ * - db_name: In some cases the database name will not be part of the
|
|
|
+ * $term['id'] and it needs to be explicitly set. Use this argument
|
|
|
+ * only if the database name cannot be specififed in the term ID
|
|
|
+ * (e.g. <DB>:<ACCESSION>).
|
|
|
* @param $options
|
|
|
* An associative array with the following keys:
|
|
|
- * - update_existing: By default this is TRUE. If the term exists it is automatically updated.
|
|
|
+ * - update_existing: By default this is TRUE. If the term exists it is
|
|
|
+ * automatically updated.
|
|
|
*
|
|
|
* @return
|
|
|
- * A CVTerm object
|
|
|
+ * A cvterm object
|
|
|
*
|
|
|
- * @ingroup tripal_cv_api
|
|
|
+ * @ingroup tripal_chado_api
|
|
|
*/
|
|
|
function tripal_insert_cvterm($term, $options = array()) {
|
|
|
|
|
|
- // Set Defaults.
|
|
|
+ // get the term properties
|
|
|
+ $id = (isset($term['id'])) ? $term['id'] : '';
|
|
|
+ $name = '';
|
|
|
+ $cvname = '';
|
|
|
+ $definition = '';
|
|
|
+ $is_obsolete = 0;
|
|
|
+ $accession = '';
|
|
|
+
|
|
|
+ // Set Defaults
|
|
|
if (isset($term['cv_name'])) {
|
|
|
- $defaultcv = $term['cv_name'];
|
|
|
+ $cvname = $term['cv_name'];
|
|
|
}
|
|
|
else {
|
|
|
- $defaultcv = '_global';
|
|
|
+ $cvname = 'local';
|
|
|
+ }
|
|
|
+ // Namespace is deprecated but must be supported for backwards
|
|
|
+ // compatability
|
|
|
+ if (array_key_exists('namespace', $term)) {
|
|
|
+ $cvname = $term['namespace'];
|
|
|
}
|
|
|
|
|
|
if (isset($term['is_relationship'])) {
|
|
@@ -451,14 +466,6 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
$update = 1;
|
|
|
}
|
|
|
|
|
|
- // Get the term properties.
|
|
|
- $id = (isset($term['id'])) ? $term['id'] : '';
|
|
|
- $name = '';
|
|
|
- $cvname = '';
|
|
|
- $definition = '';
|
|
|
- $is_obsolete = 0;
|
|
|
- $accession = '';
|
|
|
-
|
|
|
if (array_key_exists('name', $term)) {
|
|
|
$name = $term['name'];
|
|
|
}
|
|
@@ -466,12 +473,7 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
$name = $id;
|
|
|
}
|
|
|
|
|
|
- if (array_key_exists('namespace', $term)) {
|
|
|
- $cvname = $term['namespace'];
|
|
|
- }
|
|
|
- else {
|
|
|
- $cvname = $defaultcv;
|
|
|
- }
|
|
|
+
|
|
|
if (array_key_exists('definition', $term)) {
|
|
|
$definition = preg_replace('/^\"(.*)\"/', '\1', $term['definition']);
|
|
|
}
|
|
@@ -524,9 +526,9 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
}
|
|
|
|
|
|
// This SQL statement will be used a lot to find a cvterm so just set it
|
|
|
- // here for easy reference below. The following SQL tries to cover both the following:
|
|
|
- // 1) The cvterm name may have changed but the accession remains constant
|
|
|
- // 2) The cvterm name remains constant but the daccession/db may have changed (rare).
|
|
|
+ // here for easy reference below. Because CV terms can change their names
|
|
|
+ // but accessions don't change, the following SQL finds cvterms based on
|
|
|
+ // their accession rather than the name.
|
|
|
$cvtermsql = "
|
|
|
SELECT CVT.name, CVT.cvterm_id, CV.cv_id, CV.name as cvname,
|
|
|
DB.name as dbname, DB.db_id, DBX.accession
|
|
@@ -534,7 +536,7 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
INNER JOIN {dbxref} DBX on CVT.dbxref_id = DBX.dbxref_id
|
|
|
INNER JOIN {db} DB on DBX.db_id = DB.db_id
|
|
|
INNER JOIN {cv} CV on CV.cv_id = CVT.cv_id
|
|
|
- WHERE (DBX.accession = :accession and DB.name = :dbname) OR (CVT.name = :term and CV.name = :cvname)
|
|
|
+ WHERE DBX.accession = :accession and DB.name = :name
|
|
|
";
|
|
|
|
|
|
// Add the database. The function will just return the DB object if the
|
|
@@ -544,13 +546,12 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
$db = tripal_insert_db(array('name' => $dbname));
|
|
|
}
|
|
|
if (!$db) {
|
|
|
- tripal_report_error('tripal_cv', TRIPAL_WARNING,
|
|
|
- "Cannot find database '$dbname' in Chado.", NULL);
|
|
|
+ tripal_report_error('tripal_cv', TRIPAL_WARNING, "Cannot find database '$dbname' in Chado.", NULL);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
// The cvterm table has two unique dependencies. We need to check both.
|
|
|
- // first check the (name, cv_id, is_obsolete) constraint
|
|
|
+ // first check the (name, cv_id, is_obsolete) constraint.
|
|
|
$values = array(
|
|
|
'name' => $name,
|
|
|
'is_obsolete' => $is_obsolete,
|
|
@@ -567,11 +568,9 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
$result = chado_select_record('dbxref', array('*'), $values);
|
|
|
$dbxref = $result[0];
|
|
|
if (!$dbxref) {
|
|
|
- tripal_report_error(
|
|
|
- 'tripal_cv',
|
|
|
- TRIPAL_ERROR,
|
|
|
- 'Unable to access the dbxref record for the :term cvterm. Term Record: !record',
|
|
|
- array(':term' => $name, '!record' => print_r($cvterm, TRUE))
|
|
|
+ tripal_report_error('tripal_cv', TRIPAL_ERROR,
|
|
|
+ 'Unable to access the dbxref record for the :term cvterm. Term Record: !record',
|
|
|
+ array(':term' => $name, '!record' => print_r($cvterm, TRUE))
|
|
|
);
|
|
|
return FALSE;
|
|
|
}
|
|
@@ -581,41 +580,40 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
$result = chado_select_record('db', array('*'), $values);
|
|
|
$db_check = $result[0];
|
|
|
|
|
|
-// // The database name for this existing term does not match that of the
|
|
|
-// // one provided to this function. The CV name matches otherwise we
|
|
|
-// // wouldn't have made it this far. So, let's swap the database for
|
|
|
-// // this term
|
|
|
-// if ($db_check->name != $db->name) {
|
|
|
-
|
|
|
-// // Look to see if the correct dbxref record already exists for this
|
|
|
-// // database.
|
|
|
-// $values = array(
|
|
|
-// 'db_id' => $db->db_id,
|
|
|
-// 'accession' => $accession,
|
|
|
-// );
|
|
|
-// $result = chado_select_record('dbxref', array('*'), $values);
|
|
|
-
|
|
|
-// // If we already have a good dbxref then we want to update our cvterm
|
|
|
-// // to use this dbxref.
|
|
|
-// if (count($result) > 0) {
|
|
|
-// $dbxref = $result[0];
|
|
|
-// $match = array('cvterm_id' => $cvterm->cvterm_id);
|
|
|
-// $values = array('dbxref_id' => $dbxref->dbxref_id);
|
|
|
-// $success = chado_update_record('cvterm', $match, $values);
|
|
|
-// if (!$success) {
|
|
|
-// tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to correct the dbxref id for the cvterm " .
|
|
|
-// "'$name' (id: $accession), for database $dbname", NULL);
|
|
|
-// return 0;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// // If we don't have the record then we want to delete our cvterm and let
|
|
|
-// // the code below recreate it with the correct info.
|
|
|
-// else {
|
|
|
-// $match = array('cvterm_id' => $cvterm->cvterm_id);
|
|
|
-// $options = array('statement_name' => 'del_cvterm_cv');
|
|
|
-// chado_delete_record('cvterm', $match, $options);
|
|
|
-// }
|
|
|
-// }
|
|
|
+ // // The database name for this existing term does not match that of the
|
|
|
+ // // one provided to this function. The CV name matches otherwise we
|
|
|
+ // // wouldn't have made it this far. So, let's swap the database for
|
|
|
+ // // this term.
|
|
|
+ // if ($db_check->name != $db->name) {
|
|
|
+
|
|
|
+ // // Look to see if the correct dbxref record already exists for this
|
|
|
+ // // database.
|
|
|
+ // $values = array(
|
|
|
+ // 'db_id' => $db->db_id,
|
|
|
+ // 'accession' => $accession,
|
|
|
+ // );
|
|
|
+ // $result = chado_select_record('dbxref', array('*'), $values);
|
|
|
+
|
|
|
+ // // If we already have a good dbxref then we want to update our cvterm
|
|
|
+ // // to use this dbxref.
|
|
|
+ // if (count($result) > 0) {
|
|
|
+ // $dbxref = $result[0];
|
|
|
+ // $match = array('cvterm_id' => $cvterm->cvterm_id);
|
|
|
+ // $values = array('dbxref_id' => $dbxref->dbxref_id);
|
|
|
+ // $success = chado_update_record('cvterm', $match, $values);
|
|
|
+ // if (!$success) {
|
|
|
+ // tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to correct the dbxref id for the cvterm " .
|
|
|
+ // "'$name' (id: $accession), for database $dbname", NULL);
|
|
|
+ // return 0;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // // If we don't have the dbxref then we want to delete our cvterm and let
|
|
|
+ // // the code below recreate it with the correct info.
|
|
|
+ // else {
|
|
|
+ // $match = array('cvterm_id' => $cvterm->cvterm_id);
|
|
|
+ // chado_delete_record('cvterm', $match);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
|
|
|
// Check that the accession matches. Sometimes an OBO can define a term
|
|
|
// multiple times but with different accessions. If this is the case we
|
|
@@ -630,7 +628,7 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
));
|
|
|
if (!$dbxref_new) {
|
|
|
tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to find or insert the dbxref record for cvterm, " .
|
|
|
- "$name (id: $accession), for database $dbname", NULL);
|
|
|
+ "$name (id: $accession), for database $dbname", NULL);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -640,142 +638,141 @@ function tripal_insert_cvterm($term, $options = array()) {
|
|
|
'dbxref_id' => $dbxref_new->dbxref_id,
|
|
|
'is_for_definition' => 1,
|
|
|
);
|
|
|
- $options = array('statement_name' => 'sel_cvtermdbxref_cvdbis');
|
|
|
- $result = chado_select_record('cvterm_dbxref', array('*'), $values, $options);
|
|
|
+ $result = chado_select_record('cvterm_dbxref', array('*'), $values);
|
|
|
|
|
|
// if the cvterm_dbxref record does not exists then add it
|
|
|
if (count($result)==0) {
|
|
|
$options = array(
|
|
|
- 'statement_name' => 'ins_cvtermdbxref_cvdbis',
|
|
|
'return_record' => FALSE,
|
|
|
);
|
|
|
$success = chado_insert_record('cvterm_dbxref', $values, $options);
|
|
|
if (!$success) {
|
|
|
tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to find or insert the cvterm_dbxref record for a " .
|
|
|
- "duplicated cvterm: $name (id: $accession), for database $dbname", NULL);
|
|
|
+ "duplicated cvterm: $name (id: $accession), for database $dbname", NULL);
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
// get the original cvterm with the same name and return that.
|
|
|
- $result = chado_query($cvtermsql, array(':accession' => $dbxref->accession, ':dbname' => $dbname, ':term' => $name, ':cvname' => $cvname));
|
|
|
+ $result = chado_query($cvtermsql, array(':accession' => $dbxref->accession, ':name' => $dbname));
|
|
|
$cvterm = $result->fetchObject();
|
|
|
return $cvterm;
|
|
|
}
|
|
|
|
|
|
// Continue on, we've fixed the record if the db_id did not match.
|
|
|
// We can now perform and updated if we need to.
|
|
|
- }
|
|
|
-
|
|
|
- if (!$result) {
|
|
|
-
|
|
|
- // check to see if the dbxref exists if not, add it.
|
|
|
- $dbxref = tripal_insert_dbxref(array(
|
|
|
- 'db_id' => $db->db_id,
|
|
|
- 'accession' => $accession
|
|
|
- ));
|
|
|
- if (!$dbxref) {
|
|
|
- tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to find or insert the dbxref record for cvterm, " .
|
|
|
- "$name (id: $accession), for database $dbname", NULL);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
- // Check to see if the dbxref already has an entry in the cvterm table.
|
|
|
- $values = array('dbxref_id' => $dbxref->dbxref_id);
|
|
|
- $options = array('statement_name' => 'sel_cvterm_db');
|
|
|
- $check = chado_select_record('cvterm', array('cvterm_id'), $values, $options);
|
|
|
- if (count($check) == 0) {
|
|
|
- // now add the cvterm
|
|
|
- $ins_values = array(
|
|
|
- 'cv_id' => $cv->cv_id,
|
|
|
- 'name' => $name,
|
|
|
- 'definition' => $definition,
|
|
|
- 'dbxref_id' => $dbxref->dbxref_id,
|
|
|
- 'is_obsolete' => $is_obsolete,
|
|
|
- 'is_relationshiptype' => $is_relationship,
|
|
|
- );
|
|
|
- $ins_options = array('statement_name' => 'ins_cvterm_all');
|
|
|
- $success = chado_insert_record('cvterm', $ins_values, $ins_options);
|
|
|
- if (!$success) {
|
|
|
- if (!$is_relationship) {
|
|
|
- tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to insert the term: $name ($dbname)", NULL);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- else {
|
|
|
- tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to insert the relationship term: $name (cv: " . $cvname . " db: $dbname)", NULL);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // This dbxref already exists in the cvterm table.
|
|
|
- else {
|
|
|
- tripal_report_error('tripal_cv', TRIPAL_WARNING, "The dbxref already exists for another cvterm record: $name (cv: " . $cvname . " db: $dbname)", NULL);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- $result = chado_query($cvtermsql, array(':accession' => $dbxref->accession, ':dbname' => $dbname, ':term' => $name, ':cvname' => $cvname));
|
|
|
+ // get the CVterm record
|
|
|
+ $result = chado_query($cvtermsql, array(':accession' => $accession, ':name' => $dbname));
|
|
|
$cvterm = $result->fetchObject();
|
|
|
- }
|
|
|
- // Update the cvterm.
|
|
|
- elseif ($update) {
|
|
|
-
|
|
|
- // First, basic update of the term.
|
|
|
- $match = array('cvterm_id' => $cvterm->cvterm_id);
|
|
|
- $upd_values = array(
|
|
|
- 'name' => $name,
|
|
|
- 'definition' => $definition,
|
|
|
- 'is_obsolete' => $is_obsolete,
|
|
|
- 'is_relationshiptype' => $is_relationship,
|
|
|
- );
|
|
|
- $upd_options = array('statement_name' => 'upd_cvterm_nadeisis');
|
|
|
- $success = chado_update_record('cvterm', $match, $upd_values, $upd_options);
|
|
|
- if (!$success) {
|
|
|
- tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to update the term: $name", NULL);
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ if (!$cvterm) {
|
|
|
|
|
|
- // Second, check that the dbxref has not changed and if it has then update it.
|
|
|
- $checksql = "
|
|
|
- SELECT cvterm_id
|
|
|
- FROM {cvterm} CVT
|
|
|
- INNER JOIN {dbxref} DBX on CVT.dbxref_id = DBX.dbxref_id
|
|
|
- INNER JOIN {db} DB on DBX.db_id = DB.db_id
|
|
|
- INNER JOIN {cv} CV on CV.cv_id = CVT.cv_id
|
|
|
- WHERE DBX.accession = :accession and DB.name = :dbname and CVT.name = :term and CV.name = :cvname
|
|
|
- ";
|
|
|
- $check = chado_query($checksql, array(':accession' => $dbxref->accession, ':dbname' => $dbname, ':term' => $name, ':cvname' => $cvname))->fetchObject();
|
|
|
- if (!$check) {
|
|
|
-
|
|
|
- // check to see if the dbxref exists if not, add it.
|
|
|
+ // Check to see if the dbxref exists if not, add it.
|
|
|
$dbxref = tripal_insert_dbxref(array(
|
|
|
'db_id' => $db->db_id,
|
|
|
'accession' => $accession
|
|
|
));
|
|
|
if (!$dbxref) {
|
|
|
tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to find or insert the dbxref record for cvterm, " .
|
|
|
- "$name (id: $accession), for database $dbname", NULL);
|
|
|
+ "$name (id: $accession), for database $dbname", NULL);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ // Check to see if the dbxref already has an entry in the cvterm table.
|
|
|
+ $values = array('dbxref_id' => $dbxref->dbxref_id);
|
|
|
+ $check = chado_select_record('cvterm', array('cvterm_id'), $values);
|
|
|
+ if (count($check) == 0) {
|
|
|
+ // now add the cvterm
|
|
|
+ $ins_values = array(
|
|
|
+ 'cv_id' => $cv->cv_id,
|
|
|
+ 'name' => $name,
|
|
|
+ 'definition' => $definition,
|
|
|
+ 'dbxref_id' => $dbxref->dbxref_id,
|
|
|
+ 'is_obsolete' => $is_obsolete,
|
|
|
+ 'is_relationshiptype' => $is_relationship,
|
|
|
+ );
|
|
|
+ $success = chado_insert_record('cvterm', $ins_values);
|
|
|
+ if (!$success) {
|
|
|
+ if (!$is_relationship) {
|
|
|
+ tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to insert the term: $name ($dbname)", NULL);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to insert the relationship term: $name (cv: " . $cvname . " db: $dbname)", NULL);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // This dbxref already exists in the cvterm table.
|
|
|
+ else {
|
|
|
+ tripal_report_error('tripal_cv', TRIPAL_WARNING, "The dbxref already exists for another cvterm record: $name (cv: " . $cvname . " db: $dbname)", NULL);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ $result = chado_query($cvtermsql, array(':accession' => $accession, ':name' => $dbname));
|
|
|
+ $cvterm = $result->fetchObject();
|
|
|
+ }
|
|
|
+ // Update the cvterm.
|
|
|
+ elseif ($update) {
|
|
|
+
|
|
|
+ // First, basic update of the term.
|
|
|
$match = array('cvterm_id' => $cvterm->cvterm_id);
|
|
|
$upd_values = array(
|
|
|
- 'dbxref_id' => $dbxref->dbxref_id,
|
|
|
+ 'name' => $name,
|
|
|
+ 'definition' => $definition,
|
|
|
+ 'is_obsolete' => $is_obsolete,
|
|
|
+ 'is_relationshiptype' => $is_relationship,
|
|
|
);
|
|
|
$success = chado_update_record('cvterm', $match, $upd_values);
|
|
|
if (!$success) {
|
|
|
- tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to update the term $name with new accession $db:$accession", NULL);
|
|
|
+ tripal_report_error('tripal_cv', TRIPAL_WARNING, "Failed to update the term: $name", NULL);
|
|
|
return 0;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // Finally grab the updated details.
|
|
|
- $result = chado_query($cvtermsql, array(':accession' => $dbxref->accession, ':dbname' => $dbname, ':term' => $name, ':cvname' => $cvname));
|
|
|
- $cvterm = $result->fetchObject();
|
|
|
- }
|
|
|
- else {
|
|
|
- // do nothing, we have the cvterm but we don't want to update
|
|
|
+ // Second, check that the dbxref has not changed and if it has then update it.
|
|
|
+ $checksql = "
|
|
|
+ SELECT cvterm_id
|
|
|
+ FROM {cvterm} CVT
|
|
|
+ INNER JOIN {dbxref} DBX on CVT.dbxref_id = DBX.dbxref_id
|
|
|
+ INNER JOIN {db} DB on DBX.db_id = DB.db_id
|
|
|
+ INNER JOIN {cv} CV on CV.cv_id = CVT.cv_id
|
|
|
+ WHERE DBX.accession = :accession and DB.name = :dbname and CVT.name = :term and CV.name = :cvname
|
|
|
+ ";
|
|
|
+ $check = chado_query($checksql, array(':accession' => $dbxref->accession, ':dbname' => $dbname, ':term' => $name, ':cvname' => $cvname))->fetchObject();
|
|
|
+ if (!$check) {
|
|
|
+
|
|
|
+ // check to see if the dbxref exists if not, add it.
|
|
|
+ $dbxref = tripal_insert_dbxref(array(
|
|
|
+ 'db_id' => $db->db_id,
|
|
|
+ 'accession' => $accession
|
|
|
+ ));
|
|
|
+ if (!$dbxref) {
|
|
|
+ tripal_report_error('tripal_chado', TRIPAL_WARNING, "Failed to find or insert the dbxref record for cvterm, " .
|
|
|
+ "$name (id: $accession), for database $dbname", NULL);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ $match = array('cvterm_id' => $cvterm->cvterm_id);
|
|
|
+ $upd_values = array(
|
|
|
+ 'dbxref_id' => $dbxref->dbxref_id,
|
|
|
+ );
|
|
|
+ $success = chado_update_record('cvterm', $match, $upd_values);
|
|
|
+ if (!$success) {
|
|
|
+ tripal_report_error('tripal_chado', TRIPAL_WARNING, "Failed to update the term $name with new accession $db:$accession", NULL);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Finally grab the updated details.
|
|
|
+ $result = chado_query($cvtermsql, array(':accession' => $accession, ':name' => $dbname));
|
|
|
+ $cvterm = $result->fetchObject();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // do nothing, we have the cvterm but we don't want to update
|
|
|
+ }
|
|
|
+ // return the cvterm
|
|
|
+ return $cvterm;
|
|
|
}
|
|
|
- // return the cvterm
|
|
|
- return $cvterm;
|
|
|
-}
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* This function allows other modules to programatically
|