123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- <?php
- require_once 'tripal_core.schema_v1.2.api.inc';
- require_once 'tripal_core.schema_v1.11.api.inc';
- function chado_set_active($dbname = 'default') {
- global $databases, $active_db;
- if ($dbname ) {
- if ($dbname == 'chado') {
- db_query('set search_path to chado,public');
- return 'default';
- }
- else {
- db_query('set search_path to public');
- return 'chado';
- }
- }
-
-
-
- elseif (array_key_exists($dbname, $databases)) {
- return db_set_active($dbname);
- }
- }
- function chado_get_table_max_rank($tablename, $where_options) {
- $where_clauses = array();
- $where_args = array();
-
-
- $i = 0;
- $sql = "
- SELECT max(rank) as max_rank, count(rank) as count
- FROM {".$tablename."}
- WHERE
- ";
- foreach ($where_options as $key => $value) {
- $where_clauses[] = "$key = :$key";
- $where_args[":$key"] = $value;
- }
- $sql .= implode($where_clauses, ' AND ');
- $result = chado_query($sql, $where_args)->fetchObject();
- if ($result->count > 0) {
- return $result->max_rank;
- }
- else {
- return -1;
- }
- }
- function chado_get_property($basetable, $record_id, $property, $cv_name, $property_id = FALSE) {
-
- $table_desc = chado_get_schema($basetable . 'prop');
- $fkcol = key($table_desc['foreign keys'][$basetable]['columns']);
-
- $values = array(
- $fkcol => $record_id,
- 'type_id' => array(
- 'cv_id' => array(
- 'name' => $cv_name,
- ),
- 'name' => $property,
- 'is_obsolete' => 0
- ),
- );
-
- if ($property_id) {
- $property_pkey = $table_desc['primary key'][0];
- $values[$property_pkey] = $property_id;
- }
- $results = chado_generate_var($basetable . 'prop', $values);
- if ($results) {
- $results = chado_expand_var($results, 'field', $basetable . 'prop.value');
- }
- return $results;
- }
- function chado_insert_property($basetable, $record_id, $property,
- $cv_name, $value, $update_if_present = 0) {
-
-
-
- $props = chado_get_property($basetable, $record_id, $property, $cv_name);
- if (!is_array($props) and $props) {
- $props = array($props);
- }
- $rank = 0;
- if (count($props) > 0) {
- if ($update_if_present) {
- return chado_update_property($basetable, $record_id, $property, $cv_name, $value);
- }
- else {
-
-
-
- foreach ($props as $p) {
- if ($p->rank > $rank) {
- $rank = $p->rank;
- }
- if (strcmp($p->value, $value) == 0) {
- return TRUE;
- }
- }
-
- $rank++;
- }
- }
-
-
- $values = array(
- 'cv_id' => array(
- 'name' => $cv_name,
- ),
- 'name' => $property,
- );
- $options = array();
- $term = chado_select_record('cvterm', array('cvterm_id'), $values, $options);
- if (!$term or count($term) == 0) {
- tripal_report_error('tripal_core', TRIPAL_ERROR, "Cannot find property '%prop_name' in vocabulary '%cvname'.",
- array('%prop_name' => $property, '%cvname' => $cv_name));
- return FALSE;
- }
-
- $table_desc = chado_get_schema($basetable . 'prop');
- $fkcol = key($table_desc['foreign keys'][$basetable]['columns']);
-
- $values = array(
- $fkcol => $record_id,
- 'type_id' => array(
- 'cv_id' => array(
- 'name' => $cv_name,
- ),
- 'name' => $property,
- ),
- 'value' => $value,
- 'rank' => $rank,
- );
- $options = array();
- $result = chado_insert_record($basetable . 'prop', $values, $options);
- return $result;
- }
- function chado_update_property($basetable, $record_id, $property,
- $cv_name, $value, $insert_if_missing = FALSE, $property_id = FALSE) {
-
- $prop = chado_get_property($basetable, $record_id, $property, $cv_name, $property_id);
- if (count($prop)==0) {
- if ($insert_if_missing) {
- return chado_insert_property($basetable, $record_id, $property, $cv_name, $value);
- }
- else {
- return FALSE;
- }
- }
-
- $table_desc = chado_get_schema($basetable . 'prop');
- $fkcol = key($table_desc['foreign keys'][$basetable]['columns']);
-
- $match = array(
- $fkcol => $record_id,
- 'type_id' => array(
- 'cv_id' => array(
- 'name' => $cv_name,
- ),
- 'name' => $property,
- ),
- );
-
-
- if ($property_id) {
- $property_pkey = $table_desc['primary key'][0];
- $match = array(
- $property_pkey => $property_id
- );
- }
-
- $values = array(
- 'value' => $value,
- );
-
-
- if ($property_id) {
- $values['type_id'] = array(
- 'cv_id' => array(
- 'name' => $cv_name,
- ),
- 'name' => $property,
- );
- }
- return chado_update_record($basetable . 'prop', $match, $values);
- }
- function chado_delete_property($basetable, $record_id, $property, $cv_name) {
-
- $table_desc = chado_get_schema($basetable . 'prop');
- $fkcol = key($table_desc['foreign keys'][$basetable]['columns']);
-
- $match = array(
- $fkcol => $record_id,
- 'type_id' => array(
- 'cv_id' => array(
- 'name' => $cv_name,
- ),
- 'name' => $property,
- ),
- );
- return chado_delete_record($basetable . 'prop', $match);
- }
|