|
@@ -13,20 +13,13 @@
|
|
|
* @}
|
|
|
*/
|
|
|
|
|
|
+require_once "api/tripal_feature.api.inc";
|
|
|
require_once "includes/tripal_feature.admin.inc";
|
|
|
require_once "includes/tripal_feature.sync_features.inc";
|
|
|
require_once "includes/fasta_loader.inc";
|
|
|
require_once "includes/gff_loader.inc";
|
|
|
require_once "includes/seq_extract.inc";
|
|
|
-
|
|
|
-require_once "api/tripal_feature.api.inc";
|
|
|
-
|
|
|
require_once "includes/tripal_feature-delete.inc";
|
|
|
-//require_once "includes/tripal_feature-secondary_tables.inc";
|
|
|
-//require_once "includes/tripal_feature-properties.inc";
|
|
|
-//require_once "includes/tripal_feature-relationships.inc";
|
|
|
-//require_once "includes/tripal_feature-db_references.inc";
|
|
|
-
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -524,14 +517,19 @@ function chado_feature_insert($node) {
|
|
|
|
|
|
// make sure the entry for this feature doesn't already exist in the chado_feature table
|
|
|
// if it doesn't exist then we want to add it.
|
|
|
- $node_check_sql = "SELECT * FROM {chado_feature} " .
|
|
|
- "WHERE feature_id = '%s'";
|
|
|
- $node_check = db_fetch_object(db_query($node_check_sql, $feature[0]->feature_id));
|
|
|
+ $node_check_sql = "
|
|
|
+ SELECT * FROM {chado_feature}
|
|
|
+ WHERE feature_id = :feature_id
|
|
|
+ ";
|
|
|
+ $node_check = db_query($node_check_sql, array(':feature_id' => $feature[0]->feature_id))->fetchObject();
|
|
|
if (!$node_check) {
|
|
|
// next add the item to the drupal table
|
|
|
- $sql = "INSERT INTO {chado_feature} (nid, vid, feature_id, sync_date) " .
|
|
|
- "VALUES (%d, %d, %d, " . REQUEST_TIME . ")";
|
|
|
- db_query($sql, $node->nid, $node->vid, $feature[0]->feature_id);
|
|
|
+ $sql = "
|
|
|
+ INSERT INTO {chado_feature} (nid, vid, feature_id, sync_date)
|
|
|
+ VALUES (:nid, :vid, :feature_id, :time)
|
|
|
+ ";
|
|
|
+ db_query($sql, array(':nid' => $node->nid, ':vid' => $node->vid,
|
|
|
+ ':feature_id' => $feature[0]->feature_id, ':time' => REQUEST_TIME));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -610,24 +608,18 @@ function chado_feature_delete($node) {
|
|
|
}
|
|
|
|
|
|
// remove the drupal content
|
|
|
- $sql_del = "DELETE FROM {chado_feature} " .
|
|
|
- "WHERE nid = %d " .
|
|
|
- "AND vid = %d";
|
|
|
- db_query($sql_del, $node->nid, $node->vid);
|
|
|
- $sql_del = "DELETE FROM {node} " .
|
|
|
- "WHERE nid = %d " .
|
|
|
- "AND vid = %d";
|
|
|
- db_query($sql_del, $node->nid, $node->vid);
|
|
|
- $sql_del = "DELETE FROM {node_revision} " .
|
|
|
- "WHERE nid = %d " .
|
|
|
- "AND vid = %d";
|
|
|
- db_query($sql_del, $node->nid, $node->vid);
|
|
|
+ $sql_del = "DELETE FROM {chado_feature} WHERE nid = :nid AND vid = :vid";
|
|
|
+ db_query($sql_del, array(':nid' => $node->nid, ':vid' => $node->vid));
|
|
|
+ $sql_del = "DELETE FROM {node} WHERE nid = :nid AND vid = :vid";
|
|
|
+ db_query($sql_del, array(':nid' => $node->nid, ':vid' => $node->vid));
|
|
|
+ $sql_del = "DELETE FROM {node_revision} WHERE nid = :nid AND vid = :vid";
|
|
|
+ db_query($sql_del, array(':nid' => $node->nid, ':vid' => $node->vid));
|
|
|
|
|
|
|
|
|
// Remove data from feature tables of chado database. This will
|
|
|
// cause a cascade delete and remove all data in referencing tables
|
|
|
// for this feature
|
|
|
- chado_query("DELETE FROM {feature} WHERE feature_id = %d", $feature_id);
|
|
|
+ chado_query("DELETE FROM {feature} WHERE feature_id = :feature_id", array(':feature_id' => $feature_id));
|
|
|
|
|
|
drupal_set_message(t("The feature and all associated data were removed from") .
|
|
|
"chado");
|
|
@@ -648,8 +640,8 @@ function chado_feature_add_synonyms($synonyms, $feature_id) {
|
|
|
|
|
|
|
|
|
// remove any old synonyms
|
|
|
- $feature_syn_dsql = "DELETE FROM {feature_synonym} WHERE feature_id = %d";
|
|
|
- if (!chado_query($feature_syn_dsql, $feature_id)) {
|
|
|
+ $feature_syn_dsql = "DELETE FROM {feature_synonym} WHERE feature_id = :feature_id";
|
|
|
+ if (!chado_query($feature_syn_dsql, array(':feature_id' => $feature_id))) {
|
|
|
$error .= "Could not remove synonyms from feature. ";
|
|
|
}
|
|
|
|
|
@@ -666,29 +658,32 @@ function chado_feature_add_synonyms($synonyms, $feature_id) {
|
|
|
// check to see if we have this accession number already in the database
|
|
|
// if so then don't add it again. it messes up drupal if the insert fails.
|
|
|
// It is possible for the accession number to be present and not the feature
|
|
|
- $synonym_sql = "SELECT synonym_id FROM {synonym} " .
|
|
|
- "WHERE name = '%s'";
|
|
|
- $synonym = db_fetch_object(chado_query($synonym_sql, $syn));
|
|
|
+ $synonym_sql = "SELECT synonym_id FROM {synonym} WHERE name = :name";
|
|
|
+ $synonym = chado_query($synonym_sql, array(':name' => $syn))->fetchObject();
|
|
|
if (!$synonym) {
|
|
|
- $synonym_isql = "INSERT INTO {synonym} (name,synonym_sgml,type_id) " .
|
|
|
- "VALUES ('%s','%s', " .
|
|
|
- " (SELECT cvterm_id " .
|
|
|
- " FROM {CVTerm} CVT " .
|
|
|
- " INNER JOIN CV ON CVT.cv_id = CV.cv_id " .
|
|
|
- " WHERE CV.name = 'feature_property' and CVT.name = 'synonym'))";
|
|
|
- if (!chado_query($synonym_isql, $syn, $syn)) {
|
|
|
+ $synonym_isql = "
|
|
|
+ INSERT INTO {synonym} (name, synonym_sgml, type_id)
|
|
|
+ VALUES (:name, :synonym_sgml,
|
|
|
+ (SELECT cvterm_id
|
|
|
+ FROM {CVTerm} CVT
|
|
|
+ INNER JOIN CV ON CVT.cv_id = CV.cv_id
|
|
|
+ WHERE CV.name = 'feature_property' and CVT.name = 'synonym')
|
|
|
+ )
|
|
|
+ ";
|
|
|
+ if (!chado_query($synonym_isql, array(':name' => $syn, ':synonym_sgml' => $syn))) {
|
|
|
$error .= "Could not add synonym. ";
|
|
|
}
|
|
|
// now get the synonym we just added
|
|
|
- $synonym_sql = "SELECT synonym_id FROM {synonym} " .
|
|
|
- "WHERE name = '%s'";
|
|
|
- $synonym = db_fetch_object(chado_query($synonym_sql, $syn));
|
|
|
+ $synonym_sql = "SELECT synonym_id FROM {synonym} WHERE name = :name";
|
|
|
+ $synonym = chado_query($synonym_sql, array(':name' => $syn))->fetchObject();
|
|
|
}
|
|
|
|
|
|
// now add in our new sysnonym
|
|
|
- $feature_syn_isql = "INSERT INTO {feature_synonym} (synonym_id,feature_id,pub_id) " .
|
|
|
- "VALUES (%d,%d,1)";
|
|
|
- if (!chado_query($feature_syn_isql, $synonym->synonym_id, $feature_id)) {
|
|
|
+ $feature_syn_isql = "
|
|
|
+ INSERT INTO {feature_synonym} (synonym_id,feature_id,pub_id)
|
|
|
+ VALUES (:synonym_id, :feature_id, :pub_id)";
|
|
|
+ $args = array(':synonym_id' => $synonym->synonym_id, ':feature_id' => $feature_id, ':pub_id'=> 1);
|
|
|
+ if (!chado_query($feature_syn_isql, $args)) {
|
|
|
$error .= "Could not add synonyms to feature. ";
|
|
|
}
|
|
|
}
|
|
@@ -707,13 +702,17 @@ function chado_feature_add_gbaccession($accession, $feature_id) {
|
|
|
// use chado database
|
|
|
|
|
|
// remove any old accession from genbank dbEST
|
|
|
- $fdbxref_dsql = "DELETE FROM {feature_dbxref} " .
|
|
|
- "WHERE feature_id = %d and dbxref_id IN " .
|
|
|
- " (SELECT DBX.dbxref_id FROM {dbxref} DBX " .
|
|
|
- " INNER JOIN DB ON DB.db_id = DBX.db_id " .
|
|
|
- " INNER JOIN feature_dbxref FDBX ON DBX.dbxref_id = FDBX.dbxref_id " .
|
|
|
- " WHERE DB.name = 'DB:Genbank' and FDBX.feature_id = %d)";
|
|
|
- if (!chado_query($fdbxref_dsql, $feature_id, $feature_id)) {
|
|
|
+ $fdbxref_dsql = "
|
|
|
+ DELETE FROM {feature_dbxref}
|
|
|
+ WHERE feature_id = :feature_id and dbxref_id IN
|
|
|
+ (SELECT DBX.dbxref_id
|
|
|
+ FROM {dbxref} DBX
|
|
|
+ INNER JOIN DB ON DB.db_id = DBX.db_id
|
|
|
+ INNER JOIN feature_dbxref FDBX ON DBX.dbxref_id = FDBX.dbxref_id
|
|
|
+ WHERE DB.name = 'DB:Genbank' and FDBX.feature_id = :feature_id
|
|
|
+ )
|
|
|
+ ";
|
|
|
+ if (!chado_query($fdbxref_dsql, array(':feature_id' => $feature_id))) {
|
|
|
$error .= "Could not remove accession from feature. ";
|
|
|
}
|
|
|
|
|
@@ -722,34 +721,29 @@ function chado_feature_add_gbaccession($accession, $feature_id) {
|
|
|
return;
|
|
|
}
|
|
|
// get the db_id
|
|
|
- $db_sql = "SELECT db_id FROM {DB} " .
|
|
|
- "WHERE name = 'DB:Genbank_est'";
|
|
|
- $db = db_fetch_object(chado_query($db_sql));
|
|
|
+ $db_sql = "SELECT db_id FROM {DB} WHERE name = 'DB:Genbank_est'";
|
|
|
+ $db = chado_query($db_sql)->fetchObject();
|
|
|
|
|
|
// check to see if we have this accession number already in the database
|
|
|
// if so then don't add it again. it messes up drupal if the insert fails.
|
|
|
// It is possible for the accession number to be present and not the feature
|
|
|
- $dbxref_sql = "SELECT dbxref_id FROM {dbxref} " .
|
|
|
- "WHERE db_id = %d and accession = '%s'";
|
|
|
- $dbxref = db_fetch_object(chado_query($dbxref_sql, $db->db_id, $accession));
|
|
|
+ $dbxref_sql = "SELECT dbxref_id FROM {dbxref} WHERE db_id = :db_id and accession = :accession";
|
|
|
+ $dbxref = chado_query($dbxref_sql, array(':db_id' => $db->db_id, ':accession' => $accession))->fetchObject();
|
|
|
if (!$dbxref) {
|
|
|
// add the accession number
|
|
|
- $dbxref_isql = "INSERT INTO {dbxref} (db_id,accession) " .
|
|
|
- " VALUES (%d, '%s') ";
|
|
|
- if (!chado_query($dbxref_isql, $db->db_id, $accession)) {
|
|
|
+ $dbxref_isql = "INSERT INTO {dbxref} (db_id, accession) VALUES (:db_id, :accession) ";
|
|
|
+ if (!chado_query($dbxref_isql, array(':db_id' => $db->db_id, ':accession' => $accession))) {
|
|
|
$error .= 'Could not add accession as a database reference ';
|
|
|
}
|
|
|
// get the dbxref_id for the just added accession number
|
|
|
- $dbxref_sql = "SELECT dbxref_id FROM {dbxref} " .
|
|
|
- "WHERE db_id = %d and accession = '%s'";
|
|
|
- $dbxref = db_fetch_object(chado_query($dbxref_sql, $db->db_id, $accession));
|
|
|
+ $dbxref_sql = "SELECT dbxref_id FROM {dbxref} WHERE db_id = :db_id and accession = :accession";
|
|
|
+ $dbxref = chado_query($dbxref_sql, array(':db_id' => $db->db_id, ':accession' => $accession))->fetchObject();
|
|
|
}
|
|
|
|
|
|
|
|
|
// associate the accession number with the feature
|
|
|
- $feature_dbxref_isql = "INSERT INTO {feature_dbxref} (feature_id,dbxref_id) " .
|
|
|
- " VALUES (%d, %d) ";
|
|
|
- if (!chado_query($feature_dbxref_isql, $feature_id, $dbxref->dbxref_id)) {
|
|
|
+ $feature_dbxref_isql = "INSERT INTO {feature_dbxref} (feature_id, dbxref_id) VALUES (:feature_id, :dbxref_id) ";
|
|
|
+ if (!chado_query($feature_dbxref_isql, array(':feature_id' => $feature_id, ':dbxref_id' => $dbxref->dbxref_id))) {
|
|
|
$error .= 'Could not add feature database reference. ';
|
|
|
}
|
|
|
|
|
@@ -864,7 +858,7 @@ function chado_feature_form($node, $param) {
|
|
|
$org_rset = chado_query($sql);
|
|
|
$organisms = array();
|
|
|
$organisms[''] = '';
|
|
|
- while ($organism = db_fetch_object($org_rset)) {
|
|
|
+ while ($organism = $org_rset->fetchObject()) {
|
|
|
$organisms[$organism->organism_id] = "$organism->genus $organism->species ($organism->common_name)";
|
|
|
}
|
|
|
$form['organism_id'] = array(
|
|
@@ -934,12 +928,19 @@ function chado_feature_validate($node) {
|
|
|
// the organism doesn't already have this uniquename. We don't want to give
|
|
|
// two sequences the same uniquename
|
|
|
if ($node->feature_id) {
|
|
|
- $sql = "SELECT *
|
|
|
- FROM {Feature} F
|
|
|
- INNER JOIN {cvterm} CVT ON F.type_id = CVT.cvterm_id
|
|
|
- WHERE uniquename = '%s'
|
|
|
- AND organism_id = %d AND CVT.name = '%s' AND NOT feature_id = %d";
|
|
|
- $result = db_fetch_object(chado_query($sql, $node->uniquename, $node->organism_id, $node->feature_type, $node->feature_id));
|
|
|
+ $sql = "
|
|
|
+ SELECT *
|
|
|
+ FROM {feature} F
|
|
|
+ INNER JOIN {cvterm} CVT ON F.type_id = CVT.cvterm_id
|
|
|
+ WHERE
|
|
|
+ F.uniquename = :uname AND
|
|
|
+ F.organism_id = :orgnism_id AND
|
|
|
+ CVT.name = :cvtname AND
|
|
|
+ NOT f.feature_id = :feature_id
|
|
|
+ ";
|
|
|
+ $args = array(':uname' => $node->uniquename, ':organism_id' => $node->organism_id,
|
|
|
+ ':cvtname' => $node->feature_type, ':feature_id' => $node->feature_id);
|
|
|
+ $result = chado_query($sql, $args)->fetchObject();
|
|
|
if ($result) {
|
|
|
form_set_error('uniquename', t("Feature update cannot proceed. The feature name '$node->uniquename' is not unique for this organism. Please provide a unique name for this feature."));
|
|
|
}
|
|
@@ -948,12 +949,17 @@ function chado_feature_validate($node) {
|
|
|
// if this is an insert then we just need to make sure this name doesn't
|
|
|
// already exist for this organism if it does then we need to throw an error
|
|
|
else {
|
|
|
- $sql = "SELECT *
|
|
|
- FROM {Feature} F
|
|
|
- INNER JOIN {cvterm} CVT ON F.type_id = CVT.cvterm_id
|
|
|
- WHERE uniquename = '%s'
|
|
|
- AND organism_id = %d AND CVT.name = '%s'";
|
|
|
- $result = db_fetch_object(chado_query($sql, $node->uniquename, $node->organism_id, $node->feature_type));
|
|
|
+ $sql = "
|
|
|
+ SELECT *
|
|
|
+ FROM {feature} F
|
|
|
+ INNER JOIN {cvterm} CVT ON F.type_id = CVT.cvterm_id
|
|
|
+ WHERE
|
|
|
+ F.uniquename = :name AND
|
|
|
+ F.organism_id = :organism_id AND
|
|
|
+ CVT.name = :cvtname
|
|
|
+ ";
|
|
|
+ $args = array(':name' => $node->uniquename, ':organism_id' => $node->organism_id, ':cvtname' => $node->feature_type);
|
|
|
+ $result = chado_query($sql, $args)->fetchObject();
|
|
|
if ($result) {
|
|
|
form_set_error('uniquename', t("Feature insert cannot proceed. The feature name '$node->uniquename' already exists for this organism. Please provide a unique name for this feature."));
|
|
|
}
|
|
@@ -1011,8 +1017,8 @@ function chado_feature_load($node) {
|
|
|
*/
|
|
|
function tripal_feature_load_organism($organism_id) {
|
|
|
// add organism details
|
|
|
- $sql = "SELECT * FROM {organism} WHERE organism_id = %d";
|
|
|
- $organism = db_fetch_object(chado_query($sql, $organism_id));
|
|
|
+ $sql = "SELECT * FROM {organism} WHERE organism_id = :organism_id";
|
|
|
+ $organism = chado_query($sql, array(':organism_id' => $organism_id))->fetchObject();
|
|
|
return $organism;
|
|
|
}
|
|
|
/**
|
|
@@ -1022,16 +1028,17 @@ function tripal_feature_load_organism($organism_id) {
|
|
|
*/
|
|
|
function tripal_feature_load_synonyms($feature_id) {
|
|
|
|
|
|
- $sql = "SELECT S.name " .
|
|
|
- "FROM {Feature_Synonym} FS " .
|
|
|
- " INNER JOIN {Synonym} S " .
|
|
|
- " ON FS.synonym_id = S.Synonym_id " .
|
|
|
- "WHERE FS.feature_id = %d " .
|
|
|
- "ORDER BY S.name ";
|
|
|
- $results = chado_query($sql, $feature_id);
|
|
|
+ $sql = "
|
|
|
+ SELECT S.name
|
|
|
+ FROM {feature_synonym} FS
|
|
|
+ INNER JOIN {synonym} S ON FS.synonym_id = S.Synonym_id
|
|
|
+ WHERE FS.feature_id = :feature_id
|
|
|
+ ORDER BY S.name
|
|
|
+ ";
|
|
|
+ $results = chado_query($sql, array(':feature_id' => $feature_id));
|
|
|
$synonyms = array();
|
|
|
$i=0;
|
|
|
- while ($synonym = db_fetch_object($results)) {
|
|
|
+ while ($synonym = $results->fetchObject()) {
|
|
|
$synonyms[$i++] = $synonym;
|
|
|
}
|
|
|
return $synonyms;
|
|
@@ -1043,20 +1050,24 @@ function tripal_feature_load_synonyms($feature_id) {
|
|
|
*/
|
|
|
function tripal_feature_load_properties($feature_id) {
|
|
|
|
|
|
- $sql = "SELECT CVT.name as cvname, FS.type_id, FS.value, FS.rank,
|
|
|
- CVT.definition, CVT.is_obsolete,
|
|
|
- DBX.dbxref_id,DBX.accession,DB.name as dbname,
|
|
|
- DB.urlprefix, DB.description as db_description, DB.url
|
|
|
- FROM {featureprop} FS
|
|
|
- INNER JOIN {cvterm} CVT ON FS.type_id = CVT.cvterm_id
|
|
|
- INNER JOIN {dbxref} DBX ON CVT.dbxref_id = DBX.dbxref_id
|
|
|
- INNER JOIN {db} DB ON DB.db_id = DBX.db_id
|
|
|
- WHERE FS.feature_id = %d
|
|
|
- ORDER BY FS.rank ASC";
|
|
|
- $results = chado_query($sql, $feature_id);
|
|
|
+ $sql = "
|
|
|
+ SELECT
|
|
|
+ CVT.name as cvname, CVT.definition, CVT.is_obsolete,
|
|
|
+ FS.type_id, FS.value, FS.rank,
|
|
|
+ DBX.dbxref_id,DBX.accession,DB.name as dbname,
|
|
|
+ DB.urlprefix, DB.description as db_description, DB.url
|
|
|
+ FROM {featureprop} FS
|
|
|
+ INNER JOIN {cvterm} CVT ON FS.type_id = CVT.cvterm_id
|
|
|
+ INNER JOIN {dbxref} DBX ON CVT.dbxref_id = DBX.dbxref_id
|
|
|
+ INNER JOIN {db} DB ON DB.db_id = DBX.db_id
|
|
|
+ WHERE
|
|
|
+ FS.feature_id = :feature_id
|
|
|
+ ORDER BY FS.rank ASC
|
|
|
+ ";
|
|
|
+ $results = chado_query($sql, array(':feature_id' => $feature_id));
|
|
|
$i=0;
|
|
|
$properties = array();
|
|
|
- while ($property = db_fetch_object($results)) {
|
|
|
+ while ($property = $results->fetchObject()) {
|
|
|
$properties[$i++] = $property;
|
|
|
}
|
|
|
return $properties;
|
|
@@ -1068,18 +1079,23 @@ function tripal_feature_load_properties($feature_id) {
|
|
|
*/
|
|
|
function tripal_feature_load_references($feature_id) {
|
|
|
|
|
|
- $sql = "SELECT F.uniquename,F.Feature_id,DBX.accession,DB.description as dbdesc, " .
|
|
|
- " DB.db_id, DB.name as db_name, DB.urlprefix,DBX.dbxref_id " .
|
|
|
- "FROM {feature} F " .
|
|
|
- " INNER JOIN {feature_dbxref} FDBX on F.feature_id = FDBX.feature_id " .
|
|
|
- " INNER JOIN {dbxref} DBX on DBX.dbxref_id = FDBX.dbxref_id " .
|
|
|
- " INNER JOIN {db} on DB.db_id = DBX.db_id " .
|
|
|
- "WHERE F.feature_id = %d " .
|
|
|
- "ORDER BY DB.name ";
|
|
|
- $results = chado_query($sql, $feature_id);
|
|
|
+ $sql = "
|
|
|
+ SELECT
|
|
|
+ F.uniquename, F.Feature_id,
|
|
|
+ DB.description as dbdesc, DB.db_id, DB.name as db_name, DB.urlprefix,
|
|
|
+ DBX.accession, DBX.dbxref_id
|
|
|
+ FROM {feature} F
|
|
|
+ INNER JOIN {feature_dbxref} FDBX ON F.feature_id = FDBX.feature_id
|
|
|
+ INNER JOIN {dbxref} DBX ON DBX.dbxref_id = FDBX.dbxref_id
|
|
|
+ INNER JOIN {db} ON DB.db_id = DBX.db_id
|
|
|
+ WHERE
|
|
|
+ F.feature_id = :feature_id
|
|
|
+ ORDER BY DB.name
|
|
|
+ ";
|
|
|
+ $results = chado_query($sql, array(':feature_id' => $feature_id));
|
|
|
$references = array();
|
|
|
$i=0;
|
|
|
- while ($accession = db_fetch_object($results)) {
|
|
|
+ while ($accession = $results->fetchObject()) {
|
|
|
$references[$i++] = $accession;
|
|
|
}
|
|
|
return $references;
|
|
@@ -1091,40 +1107,38 @@ function tripal_feature_load_references($feature_id) {
|
|
|
*/
|
|
|
function tripal_feature_load_featurelocs($feature_id, $side = 'as_parent', $aggregate = 1) {
|
|
|
|
|
|
- $sql = "SELECT
|
|
|
- F.name, F.feature_id, F.uniquename,
|
|
|
- FS.name as src_name,
|
|
|
- FS.feature_id as src_feature_id,
|
|
|
- FS.uniquename as src_uniquename,
|
|
|
- CVT.name as cvname, CVT.cvterm_id,
|
|
|
- CVTS.name as src_cvname, CVTS.cvterm_id as src_cvterm_id,
|
|
|
- FL.fmin, FL.fmax, FL.is_fmin_partial, FL.is_fmax_partial,FL.strand,
|
|
|
- FL.phase
|
|
|
- FROM {featureloc} FL
|
|
|
- INNER JOIN {feature} F on FL.feature_id = F.feature_id
|
|
|
- INNER JOIN {feature} FS on FS.feature_id = FL.srcfeature_id
|
|
|
- INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id
|
|
|
- INNER JOIN {cvterm} CVTS on FS.type_id = CVTS.cvterm_id
|
|
|
- ";
|
|
|
+ $sql = "
|
|
|
+ SELECT
|
|
|
+ F.name, F.feature_id, F.uniquename,
|
|
|
+ FS.name as src_name, FS.feature_id as src_feature_id, FS.uniquename as src_uniquename,
|
|
|
+ CVT.name as cvname, CVT.cvterm_id,
|
|
|
+ CVTS.name as src_cvname, CVTS.cvterm_id as src_cvterm_id,
|
|
|
+ FL.fmin, FL.fmax, FL.is_fmin_partial, FL.is_fmax_partial,FL.strand, FL.phase
|
|
|
+ FROM {featureloc} FL
|
|
|
+ INNER JOIN {feature} F ON FL.feature_id = F.feature_id
|
|
|
+ INNER JOIN {feature} FS ON FS.feature_id = FL.srcfeature_id
|
|
|
+ INNER JOIN {cvterm} CVT ON F.type_id = CVT.cvterm_id
|
|
|
+ INNER JOIN {cvterm} CVTS ON FS.type_id = CVTS.cvterm_id
|
|
|
+ ";
|
|
|
if (strcmp($side, 'as_parent')==0) {
|
|
|
- $sql .= "WHERE FL.srcfeature_id = %d ";
|
|
|
+ $sql .= "WHERE FL.srcfeature_id = :feature_id ";
|
|
|
}
|
|
|
if (strcmp($side, 'as_child')==0) {
|
|
|
- $sql .= "WHERE FL.feature_id = %d ";
|
|
|
+ $sql .= "WHERE FL.feature_id = :feature_id ";
|
|
|
}
|
|
|
-
|
|
|
- $flresults = chado_query($sql, $feature_id);
|
|
|
+
|
|
|
+ $flresults = chado_query($sql, array(':feature_id' => $feature_id));
|
|
|
|
|
|
// copy the results into an array
|
|
|
$i=0;
|
|
|
$featurelocs = array();
|
|
|
- while ($loc = db_fetch_object($flresults)) {
|
|
|
+ while ($loc = $flresults->fetchObject()) {
|
|
|
// if a drupal node exists for this feature then add the nid to the
|
|
|
// results object
|
|
|
- $sql = 'SELECT nid FROM {chado_feature} WHERE feature_id = %d';
|
|
|
+ $sql = 'SELECT nid FROM {chado_feature} WHERE feature_id = :feature_id';
|
|
|
|
|
|
- $ffeature = db_fetch_object(db_query($sql, $loc->feature_id));
|
|
|
- $sfeature = db_fetch_object(db_query($sql, $loc->src_feature_id));
|
|
|
+ $ffeature = db_query($sql, array(':feature_id' => $loc->feature_id))->fetchObject();
|
|
|
+ $sfeature = db_query($sql, array(':feature_id' => $loc->src_feature_id))->fetchObject();
|
|
|
$loc->fnid = $ffeature->nid;
|
|
|
$loc->snid = $sfeature->nid;
|
|
|
// add the result to the array
|
|
@@ -1164,50 +1178,44 @@ function tripal_feature_sort_locations($a, $b) {
|
|
|
function tripal_feature_load_relationships($feature_id, $side = 'as_subject') {
|
|
|
// get the relationships for this feature. The query below is used for both
|
|
|
// querying the object and subject relationships
|
|
|
- $sql = "SELECT
|
|
|
- FS.name as subject_name,
|
|
|
- FS.uniquename as subject_uniquename,
|
|
|
- CVTS.name as subject_type,
|
|
|
- CVTS.cvterm_id as subject_type_id,
|
|
|
- FR.subject_id,
|
|
|
- FR.type_id as relationship_type_id,
|
|
|
- CVT.name as rel_type,
|
|
|
- FO.name as object_name,
|
|
|
- FO.uniquename as object_uniquename,
|
|
|
- CVTO.name as object_type,
|
|
|
- CVTO.cvterm_id as object_type_id,
|
|
|
- FR.object_id,
|
|
|
- FR.rank
|
|
|
- FROM {feature_relationship} FR
|
|
|
- INNER JOIN {cvterm} CVT ON FR.type_id = CVT.cvterm_id
|
|
|
- INNER JOIN {feature} FS ON FS.feature_id = FR.subject_id
|
|
|
- INNER JOIN {feature} FO ON FO.feature_id = FR.object_id
|
|
|
- INNER JOIN {cvterm} CVTO ON FO.type_id = CVTO.cvterm_id
|
|
|
- INNER JOIN {cvterm} CVTS ON FS.type_id = CVTS.cvterm_id
|
|
|
+ $sql = "
|
|
|
+ SELECT
|
|
|
+ FS.name as subject_name, FS.uniquename as subject_uniquename,
|
|
|
+ CVTS.name as subject_type, CVTS.cvterm_id as subject_type_id,
|
|
|
+ FR.subject_id, FR.type_id as relationship_type_id, FR.object_id, FR.rank,
|
|
|
+ CVT.name as rel_type,
|
|
|
+ FO.name as object_name, FO.uniquename as object_uniquename,
|
|
|
+ CVTO.name as object_type, CVTO.cvterm_id as object_type_id
|
|
|
+ FROM {feature_relationship} FR
|
|
|
+ INNER JOIN {cvterm} CVT ON FR.type_id = CVT.cvterm_id
|
|
|
+ INNER JOIN {feature} FS ON FS.feature_id = FR.subject_id
|
|
|
+ INNER JOIN {feature} FO ON FO.feature_id = FR.object_id
|
|
|
+ INNER JOIN {cvterm} CVTO ON FO.type_id = CVTO.cvterm_id
|
|
|
+ INNER JOIN {cvterm} CVTS ON FS.type_id = CVTS.cvterm_id
|
|
|
";
|
|
|
if (strcmp($side, 'as_object')==0) {
|
|
|
- $sql .= " WHERE FR.object_id = %d";
|
|
|
+ $sql .= " WHERE FR.object_id = :feature_id";
|
|
|
}
|
|
|
if (strcmp($side, 'as_subject')==0) {
|
|
|
- $sql .= " WHERE FR.subject_id = %d";
|
|
|
+ $sql .= " WHERE FR.subject_id = :feature_id";
|
|
|
}
|
|
|
$sql .= " ORDER BY FR.rank";
|
|
|
|
|
|
// get the relationships
|
|
|
- $results = chado_query($sql, $feature_id);
|
|
|
+ $results = chado_query($sql, array(':feature_id' => $feature_id));
|
|
|
|
|
|
|
|
|
// iterate through the relationships, put these in an array and add
|
|
|
// in the Drupal node id if one exists
|
|
|
$i=0;
|
|
|
- $nodesql = "SELECT nid FROM {chado_feature} WHERE feature_id = %d";
|
|
|
+ $nodesql = "SELECT nid FROM {chado_feature} WHERE feature_id = :feature_id";
|
|
|
$relationships = array();
|
|
|
- while ($rel = db_fetch_object($results)) {
|
|
|
- $node = db_fetch_object(db_query($nodesql, $rel->subject_id));
|
|
|
+ while ($rel = $results->fetchObject()) {
|
|
|
+ $node = db_query($nodesql, array(':feature_id' => $rel->subject_id))->fetchObject();
|
|
|
if ($node) {
|
|
|
$rel->subject_nid = $node->nid;
|
|
|
}
|
|
|
- $node = db_fetch_object(db_query($nodesql, $rel->object_id));
|
|
|
+ $node = db_query($nodesql, array(':feature_id' => $rel->object_id))->fetchObject();
|
|
|
if ($node) {
|
|
|
$rel->object_nid = $node->nid;
|
|
|
}
|
|
@@ -1289,9 +1297,11 @@ function tripal_feature_load_featureloc_sequences($feature_id, $featurelocs) {
|
|
|
// where this feature is found. We want to get the sequence for each
|
|
|
// location and then annotate it with the parts found from the relationships
|
|
|
// locations determiend above.
|
|
|
- $sql = "SELECT substring(residues from %d for %d) as residues " .
|
|
|
- "FROM {feature} " .
|
|
|
- "WHERE feature_id = %d";
|
|
|
+ $sql = "
|
|
|
+ SELECT substring(residues from :start for :size) as residues
|
|
|
+ FROM {feature}
|
|
|
+ WHERE feature_id = :feature_id
|
|
|
+ ";
|
|
|
$floc_sequences = array();
|
|
|
foreach ($featurelocs as $featureloc) {
|
|
|
|
|
@@ -1340,7 +1350,8 @@ function tripal_feature_load_featureloc_sequences($feature_id, $featurelocs) {
|
|
|
|
|
|
$floc_sequences[$src]['src'] = $src;
|
|
|
$floc_sequences[$src]['type'] = $featureloc->feature_id->type_id->name;
|
|
|
- $sequence = db_fetch_object(chado_query($sql, $featureloc->fmin + 1, ($featureloc->fmax - $featureloc->fmin), $featureloc->srcfeature_id->feature_id));
|
|
|
+ $args = array(':start' => $featureloc->fmin + 1, ':size' => ($featureloc->fmax - $featureloc->fmin), ':feature_id' => $featureloc->srcfeature_id->feature_id);
|
|
|
+ $sequence = chado_query($sql, $args)->fetchObject();
|
|
|
$residues = $sequence->residues;
|
|
|
if ($featureloc->strand < 0) {
|
|
|
$residues = tripal_feature_reverse_complement($residues);
|
|
@@ -1383,43 +1394,46 @@ function tripal_feature_get_matched_alignments($feature) {
|
|
|
// not want to include these, so we have to filter on the SO terms:
|
|
|
// match, or %_match
|
|
|
//
|
|
|
- $sql = "SELECT " .
|
|
|
- " FL1.featureloc_id as left_featureloc_id, " .
|
|
|
- " FL1.srcfeature_id as left_srcfeature_id, " .
|
|
|
- " FL1.feature_id as left_feature_id, " .
|
|
|
- " FL1.fmin as left_fmin, " .
|
|
|
- " FL1.is_fmin_partial as left_is_fmin_partial, " .
|
|
|
- " FL1.fmax as left_fmax, " .
|
|
|
- " FL1.is_fmax_partial as left_is_fmax_partial, " .
|
|
|
- " FL1.strand as left_strand, " .
|
|
|
- " FL1.phase as left_phase, " .
|
|
|
- " FL1.locgroup as left_locgroup, " .
|
|
|
- " FL1.rank as left_rank, " .
|
|
|
- " FL2.featureloc_id as right_featureloc_id, " .
|
|
|
- " FL2.srcfeature_id as right_srcfeature_id, " .
|
|
|
- " FL2.feature_id as right_feature_id, " .
|
|
|
- " FL2.fmin as right_fmin, " .
|
|
|
- " FL2.is_fmin_partial as right_is_fmin_partial, " .
|
|
|
- " FL2.fmax as right_fmax, " .
|
|
|
- " FL2.is_fmax_partial as right_is_fmax_partial, " .
|
|
|
- " FL2.strand as right_strand, " .
|
|
|
- " FL2.phase as right_phase, " .
|
|
|
- " FL2.locgroup as right_locgroup, " .
|
|
|
- " FL2.rank as right_rank " .
|
|
|
- "FROM {feature} F1 " .
|
|
|
- " INNER JOIN {featureloc} FL1 on FL1.srcfeature_id = F1.feature_id " .
|
|
|
- " INNER JOIN {feature} F2 on FL1.feature_id = F2.feature_id " .
|
|
|
- " INNER JOIN {featureloc} FL2 on FL2.feature_id = F2.feature_id " .
|
|
|
- " INNER JOIN {cvterm} CVT2 on F2.type_id = CVT2.cvterm_id " .
|
|
|
- "WHERE F1.feature_id = %d " .
|
|
|
- " AND (CVT2.name = 'match' or CVT2.name like '%_match') " .
|
|
|
- "ORDER BY FL1.fmin";
|
|
|
-
|
|
|
- $results = chado_query($sql, $feature->feature_id);
|
|
|
+ $sql = "
|
|
|
+ SELECT
|
|
|
+ FL1.featureloc_id as left_featureloc_id,
|
|
|
+ FL1.srcfeature_id as left_srcfeature_id,
|
|
|
+ FL1.feature_id as left_feature_id,
|
|
|
+ FL1.fmin as left_fmin,
|
|
|
+ FL1.is_fmin_partial as left_is_fmin_partial,
|
|
|
+ FL1.fmax as left_fmax,
|
|
|
+ FL1.is_fmax_partial as left_is_fmax_partial,
|
|
|
+ FL1.strand as left_strand,
|
|
|
+ FL1.phase as left_phase,
|
|
|
+ FL1.locgroup as left_locgroup,
|
|
|
+ FL1.rank as left_rank,
|
|
|
+ FL2.featureloc_id as right_featureloc_id,
|
|
|
+ FL2.srcfeature_id as right_srcfeature_id,
|
|
|
+ FL2.feature_id as right_feature_id,
|
|
|
+ FL2.fmin as right_fmin,
|
|
|
+ FL2.is_fmin_partial as right_is_fmin_partial,
|
|
|
+ FL2.fmax as right_fmax,
|
|
|
+ FL2.is_fmax_partial as right_is_fmax_partial,
|
|
|
+ FL2.strand as right_strand,
|
|
|
+ FL2.phase as right_phase,
|
|
|
+ FL2.locgroup as right_locgroup,
|
|
|
+ FL2.rank as right_rank
|
|
|
+ FROM {feature} F1
|
|
|
+ INNER JOIN {featureloc} FL1 on FL1.srcfeature_id = F1.feature_id
|
|
|
+ INNER JOIN {feature} F2 on FL1.feature_id = F2.feature_id
|
|
|
+ INNER JOIN {featureloc} FL2 on FL2.feature_id = F2.feature_id
|
|
|
+ INNER JOIN {cvterm} CVT2 on F2.type_id = CVT2.cvterm_id
|
|
|
+ WHERE
|
|
|
+ F1.feature_id = :feature_id AND
|
|
|
+ (CVT2.name = 'match' or CVT2.name like '%_match')
|
|
|
+ ORDER BY FL1.fmin
|
|
|
+ ";
|
|
|
+
|
|
|
+ $results = chado_query($sql, array(':feature_id' => $feature->feature_id));
|
|
|
|
|
|
// iterate through the results and add them to our featurelocs array
|
|
|
$featurelocs = array();
|
|
|
- while ($fl = db_fetch_object($results)) {
|
|
|
+ while ($fl = $results->fetchObject()) {
|
|
|
// ignore featurelocs where the left and right srcfeature is the same
|
|
|
if (strcmp($fl->left_srcfeature_id, $fl->right_srcfeature_id) == 0) {
|
|
|
continue;
|
|
@@ -1441,8 +1455,6 @@ function tripal_feature_load_organism_feature_counts($organism) {
|
|
|
if (strcmp($show_counts, 'show_feature_summary')!=0) {
|
|
|
return array('enabled' => FALSE );
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
$args = array();
|
|
|
$names = array();
|
|
|
$order = array();
|
|
@@ -1456,6 +1468,7 @@ function tripal_feature_load_organism_feature_counts($organism) {
|
|
|
if ($temp) {
|
|
|
$is_custom = 1;
|
|
|
$temp = explode("\n", $temp);
|
|
|
+ $i = 0;
|
|
|
foreach ($temp as $key => $value) {
|
|
|
// separate the key value pairs
|
|
|
$temp2 = explode("=", $value);
|
|
@@ -1465,12 +1478,13 @@ function tripal_feature_load_organism_feature_counts($organism) {
|
|
|
// if a new name is provided then use that otherwise just
|
|
|
// use the feature type
|
|
|
if (count($temp2) == 2) {
|
|
|
- $names[] = rtrim($temp2[1]);
|
|
|
+ $names[":name$i"] = rtrim($temp2[1]);
|
|
|
}
|
|
|
else {
|
|
|
- $names[] = $feature_type;
|
|
|
+ $names[":name$i"] = $feature_type;
|
|
|
}
|
|
|
- $where .= "OFC.feature_type = '%s' OR \n";
|
|
|
+ $where .= " OFC.feature_type = :name$i OR ";
|
|
|
+ $i++;
|
|
|
}
|
|
|
if ($where) {
|
|
|
$where = drupal_substr($where, 0, -5); # remove OR from the end
|
|
@@ -1484,15 +1498,15 @@ function tripal_feature_load_organism_feature_counts($organism) {
|
|
|
SELECT OFC.num_features,OFC.feature_type,CVT.definition
|
|
|
FROM {organism_feature_count} OFC
|
|
|
INNER JOIN {cvterm} CVT on OFC.cvterm_id = CVT.cvterm_id
|
|
|
- WHERE $where organism_id = %d
|
|
|
+ WHERE $where organism_id = :organism_id
|
|
|
ORDER BY num_features desc
|
|
|
";
|
|
|
- $args[] = $organism->organism_id;
|
|
|
+ $args[':organism_id'] = $organism->organism_id;
|
|
|
$org_features = chado_query($sql, $args);
|
|
|
|
|
|
// iterate through the types
|
|
|
$types = array();
|
|
|
- while ($type = db_fetch_object($org_features)) {
|
|
|
+ while ($type = $org_features->fetchObject()) {
|
|
|
$types[$type->feature_type] = $type;
|
|
|
// if we don't have an order this means we didn't go through the loop
|
|
|
// above to set the names, so do that now
|
|
@@ -1550,11 +1564,11 @@ function tripal_feature_load_organism_feature_browser($organism) {
|
|
|
$pager = theme('pager');
|
|
|
|
|
|
// add the node ids and types
|
|
|
- $nsql = "SELECT nid FROM {chado_feature} WHERE feature_id = %d";
|
|
|
- $tsql = "SELECT name FROM {cvterm} WHERE cvterm_id = %d";
|
|
|
+ $nsql = "SELECT nid FROM {chado_feature} WHERE feature_id = :feature_id";
|
|
|
+ $tsql = "SELECT name FROM {cvterm} WHERE cvterm_id = :cvterm_id";
|
|
|
foreach ($features as $feature) {
|
|
|
- $node = db_fetch_object(db_query($nsql, $feature->feature_id));
|
|
|
- $type = db_fetch_object(chado_query($tsql, $feature->type_id));
|
|
|
+ $node = db_query($nsql, array(':feature_id' => $feature->feature_id))->fetchObject();
|
|
|
+ $type = chado_query($tsql, array(':cvterm_id' => $feature->type_id))->fetchObject();
|
|
|
$feature->nid = $node->nid;
|
|
|
$feature->type_name = $type->name;
|
|
|
}
|
|
@@ -1583,39 +1597,46 @@ function tripal_feature_load_library_feature_browser($library) {
|
|
|
$allowed_types = preg_replace("/[\s\n\r]+/", " ", $allowed_types);
|
|
|
$so_terms = split(' ', $allowed_types);
|
|
|
$where_cvt = "";
|
|
|
+ $args = array();
|
|
|
+ $i = 0;
|
|
|
foreach ($so_terms as $term) {
|
|
|
- $where_cvt .= "CVT.name = '$term' OR ";
|
|
|
+ $where_cvt .= "CVT.name = :cvtname$i OR ";
|
|
|
+ $args[':cvtname$i'] = $term;
|
|
|
+ $i++;
|
|
|
}
|
|
|
$where_cvt = drupal_substr($where_cvt, 0, drupal_strlen($where_cvt)-3); # strip trailing 'OR'
|
|
|
|
|
|
// get the features for this library
|
|
|
- $sql = "SELECT F.name,F.feature_id,F.uniquename,CVT.name as cvname " .
|
|
|
- "FROM {feature} F " .
|
|
|
- " INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id " .
|
|
|
- " INNER JOIN {library_feature} LF on F.feature_id = LF.feature_id " .
|
|
|
- " INNER JOIN {library} L on LF.library_id = L.library_id " .
|
|
|
- "WHERE LF.library_id = %d and ($where_cvt) " .
|
|
|
- "ORDER BY feature_id ASC";
|
|
|
-
|
|
|
+ $sql = "
|
|
|
+ SELECT F.name, F.feature_id, F.uniquename, CVT.name as cvname
|
|
|
+ FROM {feature} F
|
|
|
+ INNER JOIN {cvterm} CVT ON F.type_id = CVT.cvterm_id
|
|
|
+ INNER JOIN {library_feature} LF ON F.feature_id = LF.feature_id
|
|
|
+ INNER JOIN {library} L ON LF.library_id = L.library_id
|
|
|
+ WHERE LF.library_id = :library_id and ($where_cvt)
|
|
|
+ ORDER BY feature_id ASC
|
|
|
+ ";
|
|
|
+ $args[':library_id'] = $library->libary_id;
|
|
|
+
|
|
|
// the counting SQL
|
|
|
- $csql = "SELECT count(*) " .
|
|
|
- "FROM {feature} F" .
|
|
|
- " INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id " .
|
|
|
- " INNER JOIN {library_feature} LF on F.feature_id = LF.feature_id " .
|
|
|
- " INNER JOIN {library} L on LF.library_id = L.library_id " .
|
|
|
- "WHERE LF.library_id = %d and ($where_cvt) " .
|
|
|
- "GROUP BY L.library_id ";
|
|
|
-
|
|
|
- $org_features = chado_pager_query($sql, 10, 0, $csql, $library->library_id);
|
|
|
+ $csql = "
|
|
|
+ SELECT count(*)
|
|
|
+ FROM {feature} F
|
|
|
+ INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id
|
|
|
+ INNER JOIN {library_feature} LF on F.feature_id = LF.feature_id
|
|
|
+ INNER JOIN {library} L on LF.library_id = L.library_id
|
|
|
+ WHERE LF.library_id = :library_id and ($where_cvt)
|
|
|
+ GROUP BY L.library_id ";
|
|
|
+
|
|
|
+ $org_features = chado_pager_query($sql, 10, 0, $csql, $args);
|
|
|
$pager = theme('pager');
|
|
|
|
|
|
// prepare the query that will lookup node ids
|
|
|
- $sql = "SELECT nid FROM {chado_feature} " .
|
|
|
- "WHERE feature_id = %d";
|
|
|
+ $sql = "SELECT nid FROM {chado_feature} WHERE feature_id = :feature_id";
|
|
|
$i=0;
|
|
|
$features = array();
|
|
|
- while ($feature = db_fetch_object($org_features)) {
|
|
|
- $node = db_fetch_object(db_query($sql, $feature->feature_id));
|
|
|
+ while ($feature = $org_features->fetchObject()) {
|
|
|
+ $node = db_query($sql, array(':feature_id' => $feature->feature_id))->fetchObject();
|
|
|
$feature->nid = $node->nid;
|
|
|
$features[$i++] = $feature;
|
|
|
}
|
|
@@ -1643,39 +1664,47 @@ function tripal_feature_load_analysis_feature_browser($analysis) {
|
|
|
$allowed_types = preg_replace("/[\s\n\r]+/", " ", $allowed_types);
|
|
|
$so_terms = split(' ', $allowed_types);
|
|
|
$where_cvt = "";
|
|
|
+ $i = 0;
|
|
|
+ $args = array();
|
|
|
foreach ($so_terms as $term) {
|
|
|
- $where_cvt .= "CVT.name = '$term' OR ";
|
|
|
+ $where_cvt .= "CVT.name = :aname$i OR ";
|
|
|
+ $args[":aname$i"] = $term;
|
|
|
+ $i++;
|
|
|
}
|
|
|
$where_cvt = drupal_substr($where_cvt, 0, drupal_strlen($where_cvt)-3); # strip trailing 'OR'
|
|
|
|
|
|
// get the features for this library
|
|
|
- $sql = "SELECT F.name,F.feature_id,F.uniquename,CVT.name as cvname " .
|
|
|
- "FROM {feature} F " .
|
|
|
- " INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id " .
|
|
|
- " INNER JOIN {analysisfeature} AF on F.feature_id = AF.feature_id " .
|
|
|
- " INNER JOIN {analysis} A on AF.analysis_id = A.analysis_id " .
|
|
|
- "WHERE A.analysis_id = %d and ($where_cvt) " .
|
|
|
- "ORDER BY feature_id ASC";
|
|
|
+ $sql = "
|
|
|
+ SELECT F.name,F.feature_id,F.uniquename,CVT.name as cvname
|
|
|
+ FROM {feature} F
|
|
|
+ INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id
|
|
|
+ INNER JOIN {analysisfeature} AF on F.feature_id = AF.feature_id
|
|
|
+ INNER JOIN {analysis} A on AF.analysis_id = A.analysis_id
|
|
|
+ WHERE A.analysis_id = :analysis_id and ($where_cvt)
|
|
|
+ ORDER BY feature_id ASC
|
|
|
+ ";
|
|
|
+ $args[':analysis_id'] = $analysis->analysis_id;
|
|
|
|
|
|
// the counting SQL
|
|
|
- $csql = "SELECT count(*) " .
|
|
|
- "FROM {feature} F" .
|
|
|
- " INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id " .
|
|
|
- " INNER JOIN {analysisfeature} AF on F.feature_id = AF.feature_id " .
|
|
|
- " INNER JOIN {analysis} A on AF.analysis_id = A.analysis_id " .
|
|
|
- "WHERE A.analysis_id = %d and ($where_cvt) " .
|
|
|
- "GROUP BY A.analysis_id ";
|
|
|
-
|
|
|
- $org_features = chado_pager_query($sql, 10, 0, $csql, $analysis->analysis_id);
|
|
|
+ $csql = "
|
|
|
+ SELECT count(*)
|
|
|
+ FROM {feature} F
|
|
|
+ INNER JOIN {cvterm} CVT on F.type_id = CVT.cvterm_id
|
|
|
+ INNER JOIN {analysisfeature} AF on F.feature_id = AF.feature_id
|
|
|
+ INNER JOIN {analysis} A on AF.analysis_id = A.analysis_id
|
|
|
+ WHERE A.analysis_id = %d and ($where_cvt)
|
|
|
+ GROUP BY A.analysis_id
|
|
|
+ ";
|
|
|
+
|
|
|
+ $org_features = chado_pager_query($sql, 10, 0, $csql, $args);
|
|
|
$pager = theme('pager');
|
|
|
|
|
|
// prepare the query that will lookup node ids
|
|
|
- $sql = "SELECT nid FROM {chado_feature} " .
|
|
|
- "WHERE feature_id = %d";
|
|
|
+ $sql = "SELECT nid FROM {chado_feature} WHERE feature_id = :feature_id";
|
|
|
$i=0;
|
|
|
$features = array();
|
|
|
- while ($feature = db_fetch_object($org_features)) {
|
|
|
- $node = db_fetch_object(db_query($sql, $feature->feature_id));
|
|
|
+ while ($feature = $org_features->fetchObject()) {
|
|
|
+ $node = db_query($sql, array(':feature_id' => $feature->feature_id))->fetchObject();
|
|
|
$feature->nid = $node->nid;
|
|
|
$features[$i++] = $feature;
|
|
|
}
|
|
@@ -1837,13 +1866,13 @@ function tripal_feature_node_insert($node) {
|
|
|
switch ($node->type) {
|
|
|
case 'chado_feature':
|
|
|
if (!$node->feature_id) {
|
|
|
- $sql = "SELECT * FROM {chado_feature} WHERE nid = %d";
|
|
|
- $chado_feature = db_fetch_object(db_query($sql, $node->nid));
|
|
|
+ $sql = "SELECT * FROM {chado_feature} WHERE nid = :nid";
|
|
|
+ $chado_feature = db_query($sql, array(':nid' => $node->nid))->fetchObject();
|
|
|
$node->feature_id = $chado_feature->feature_id;
|
|
|
}
|
|
|
|
|
|
// remove any previous alias
|
|
|
- db_query("DELETE FROM {url_alias} WHERE src = '%s'", "node/$node->nid");
|
|
|
+ db_query("DELETE FROM {url_alias} WHERE src = :src", array(':src' => "node/$node->nid"));
|
|
|
|
|
|
// set the URL for this feature page
|
|
|
$url_alias = tripal_feature_get_feature_url($node);
|
|
@@ -1855,19 +1884,25 @@ function tripal_feature_node_insert($node) {
|
|
|
*
|
|
|
* @ingroup tripal_feature
|
|
|
*/
|
|
|
-function tripal_feature_node_update($node) {
|
|
|
-
|
|
|
- // set the URL path after inserting. We do it here because we do not
|
|
|
- // know the feature_id in the presave
|
|
|
+function tripal_feature_node_view($node, $view_mode, $langcode) {
|
|
|
switch ($node->type) {
|
|
|
- case 'chado_feature':
|
|
|
-
|
|
|
- // remove any previous alias
|
|
|
- db_query("DELETE FROM {url_alias} WHERE src = '%s'", "node/$node->nid");
|
|
|
-
|
|
|
- // set the URL for this feature page
|
|
|
- $url_alias = tripal_feature_get_feature_url($node);
|
|
|
- path_set_alias("node/$node->nid", $url_alias);
|
|
|
+ case 'chado_organism':
|
|
|
+ // Show feature browser and counts
|
|
|
+ if ($view_mode == 'full') {
|
|
|
+ $node->content['tripal_organism_feature_counts'] = array(
|
|
|
+ '#value' => theme('tripal_organism_feature_counts', $node),
|
|
|
+ );
|
|
|
+ $node->content['tripal_organism_feature_browser'] = array(
|
|
|
+ '#value' => theme('tripal_organism_feature_browser', $node),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ // TODO: handle these node types. Should we also have a feature browser?
|
|
|
+ case 'chado_library':
|
|
|
+ break;
|
|
|
+ case 'chado_stock':
|
|
|
+ break;
|
|
|
+ case 'chado_analysis':
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -1879,18 +1914,14 @@ function tripal_feature_node_update($node) {
|
|
|
|
|
|
// add items to other nodes, build index and search results
|
|
|
switch ($node->type) {
|
|
|
- case 'chado_organism':
|
|
|
- // Show feature browser
|
|
|
- $types_to_show = array('chado_organism', 'chado_library');
|
|
|
- if (in_array($node->type, $types_to_show, TRUE)) {
|
|
|
- $node->content['tripal_organism_feature_counts'] = array(
|
|
|
- '#value' => theme('tripal_organism_feature_counts', $node),
|
|
|
- );
|
|
|
- $node->content['tripal_organism_feature_browser'] = array(
|
|
|
- '#value' => theme('tripal_organism_feature_browser', $node),
|
|
|
- );
|
|
|
- }
|
|
|
- break;
|
|
|
+ case 'chado_feature':
|
|
|
+ // remove any previous alias
|
|
|
+ db_query("DELETE FROM {url_alias} WHERE src = :src", array(':src' => "node/$node->nid"));
|
|
|
+
|
|
|
+ // set the URL for this feature page
|
|
|
+ $url_alias = tripal_feature_get_feature_url($node);
|
|
|
+ path_set_alias("node/$node->nid", $url_alias);
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2311,13 +2342,13 @@ function tripal_feature_match_features_page($id) {
|
|
|
LEFT JOIN {synonym} S on S.synonym_id = FS.synonym_id
|
|
|
INNER JOIN public.chado_feature CF on CF.feature_id = F.feature_id
|
|
|
WHERE
|
|
|
- F.uniquename = '%s' or
|
|
|
- F.name = '%s' or
|
|
|
- S.name = '%s'
|
|
|
+ F.uniquename = :uname or
|
|
|
+ F.name = :fname' or
|
|
|
+ S.name = :sname
|
|
|
GROUP BY F.name, F.uniquename, F.feature_id, O.genus, O.species,
|
|
|
O.organism_id, CVT.cvterm_id, CVT.name, CF.nid
|
|
|
";
|
|
|
- $results = chado_query($sql, $id, $id, $id);
|
|
|
+ $results = chado_query($sql, array(':uname' => $id, ':fname' => $id, ':sname' => $id));
|
|
|
|
|
|
$num_matches = 0;
|
|
|
|
|
@@ -2325,7 +2356,7 @@ function tripal_feature_match_features_page($id) {
|
|
|
$header = array('Uniquename', 'Name', 'Type', 'Species', 'Synonyms');
|
|
|
$rows = array();
|
|
|
$curr_match;
|
|
|
- while ($match = db_fetch_object($results)) {
|
|
|
+ while ($match = $results->fetchObject()) {
|
|
|
$curr_match = $match;
|
|
|
$synonyms = $match->synonyms;
|
|
|
$synonyms = preg_replace('/[\"\{\}]/', '', $synonyms);
|