123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- <?php
- $arguments = getopt("f:");
- if(isset($arguments['f'])){
- $drupal_base_url = parse_url('http://www.example.com');
- $_SERVER['HTTP_HOST'] = $drupal_base_url['host'];
- $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF'];
- $_SERVER['REMOTE_ADDR'] = NULL;
- $_SERVER['REQUEST_METHOD'] = NULL;
-
- require_once 'includes/bootstrap.inc';
- drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
- $feature_id = $arguments['f'];
- if($feature_id > 0 ){
- print "syncing feature $feature_id\n";
- tripal_feature_sync_feature($feature_id);
- }
- else{
- print "syncing all features...\n";
- tripal_feature_sync_features();
- }
- }
-
- function tripal_feature_sync_features ($max_sync = 0, $job_id = NULL){
-
- $i = 0;
-
-
-
- $allowed_types = variable_get('chado_feature_types','EST contig');
- $allowed_types = preg_replace("/[\s\n\r]+/"," ",$allowed_types);
- $so_terms = split(' ',$allowed_types);
- $where_cvt = "";
- foreach ($so_terms as $term){
- $where_cvt .= "CVT.name = '$term' OR ";
- }
- $where_cvt = substr($where_cvt,0,strlen($where_cvt)-3);
-
-
- $orgs = organism_get_synced();
- $where_org = "";
- foreach($orgs as $org){
- $where_org .= "F.organism_id = $org->organism_id OR ";
- }
- $where_org = substr($where_org,0,strlen($where_org)-3);
-
- $sql = "SELECT feature_id ".
- "FROM {FEATURE} F ".
- " INNER JOIN Cvterm CVT ON F.type_id = CVT.cvterm_id ".
- "WHERE ($where_cvt) AND ($where_org) ".
- "ORDER BY feature_id";
-
- $previous_db = db_set_active('chado');
- $results = db_query($sql);
- db_set_active($previous_db);
-
- $count = 0;
- $ids = array();
- while($id = db_fetch_object($results)){
- $ids[$count] = $id->feature_id;
- $count++;
- }
-
- tripal_feature_set_vocabulary();
-
-
-
- $sql = "SELECT * FROM {chado_feature} WHERE feature_id = %d";
-
- $interval = intval($count * 0.01);
- foreach($ids as $feature_id){
-
- if($job_id and $i % $interval == 0){
- tripal_job_set_progress($job_id,intval(($i/$count)*100));
- }
-
-
- if($max_sync and $i == $max_sync){
- return '';
- }
- if(!db_fetch_object(db_query($sql,$feature_id))){
-
-
-
-
-
- $cmd = "php " . drupal_get_path('module', 'tripal_feature') . "/syncFeatures.php -f $feature_id ";
- system($cmd);
- }
- $i++;
- }
- return '';
- }
- function tripal_feature_sync_feature ($feature_id){
- print "\tfeature $feature_id\n";
- $mem = memory_get_usage(TRUE);
- $mb = $mem/1048576;
- print "$mb mb\n";
- global $user;
- $create_node = 1;
-
- $aprefix = variable_get('chado_feature_accession_prefix','ID');
-
- if(!$feature_id){
- drupal_set_message(t("Please provide a feature_id to sync"));
- return '';
- }
-
- $fsql = "SELECT F.feature_id, F.name, F.uniquename,O.genus, ".
- " O.species,CVT.name as cvname,F.residues,F.organism_id ".
- "FROM {FEATURE} F ".
- " INNER JOIN Cvterm CVT ON F.type_id = CVT.cvterm_id ".
- " INNER JOIN Organism O ON F.organism_id = O.organism_ID ".
- "WHERE F.feature_id = %d";
- $previous_db = db_set_active('chado');
- $feature = db_fetch_object(db_query($fsql,$feature_id));
- db_set_active($previous_db);
-
-
-
-
- $tsql = "SELECT * FROM {node} N ".
- "WHERE title = '%s'";
- $cnsql = "SELECT * FROM {chado_feature} ".
- "WHERE nid = %d";
- $nodes = db_query($tsql,$feature->name);
-
- while($node = db_fetch_object($nodes)){
- $feature_nid = db_fetch_object(db_query($cnsql,$node->nid));
- if(!$feature_nid){
- drupal_set_message(t("$feature_id: A node is present but the chado_feature entry is missing... correcting"));
- node_delete($node->nid);
- }
- }
-
-
- $cfsql = "SELECT * FROM {chado_feature} ".
- "WHERE feature_id = %d";
- $nsql = "SELECT * FROM {node} ".
- "WHERE nid = %d";
- $chado_feature = db_fetch_object(db_query($cfsql,$feature->feature_id));
- if($chado_feature){
- drupal_set_message(t("$feature_id: A chado_feature entry exists"));
- $node = db_fetch_object(db_query($nsql,$chado_feature->nid));
- if(!$node){
-
-
- drupal_set_message(t("$feature_id: The node is missing, but has a chado_feature entry... correcting"));
- $df_sql = "DELETE FROM {chado_feature} WHERE feature_id = %d";
- db_query($df_sql,$feature_id);
- } else {
- drupal_set_message(t("$feature_id: A corresponding node exists"));
- $create_node = 0;
- }
- }
-
- if($error_msg = db_error()){
-
- return '';
- }
-
-
-
- if($create_node){
- drupal_set_message(t("$feature_id: Creating node $feature->name"));
- $new_node = new stdClass();
- $new_node->type = 'chado_feature';
- $new_node->uid = $user->uid;
- $new_node->title = "$feature->name";
- $new_node->feature_id = $feature->feature_id;
- $new_node->residues = $feature->residues;
- $new_node->organism_id = $feature->organism_id;
- $new_node->feature_type = $feature->cvname;
-
- node_validate($new_node);
- if ($errors = form_get_errors()) {
- foreach($errors as $key => $msg){
- drupal_set_message($msg);
- }
- return $errors;
- } else {
- $node = node_submit($new_node);
- node_save($node);
- }
- }
- else {
- $node = $chado_feature;
- }
-
- drupal_set_message(t("$feature_id ($node->nid): setting taxonomy"));
- tripal_feature_set_taxonomy($node,$feature_id);
-
-
-
-
- drupal_set_message(t("$feature_id ($node->nid): setting URL alias"));
- db_query("DELETE FROM {url_alias} WHERE dst = '%s'", "$aprefix$feature_id");
- path_set_alias("node/$node->nid","$aprefix$feature_id");
- return '';
- }
- function organism_get_synced() {
-
- $dsql = "SELECT * FROM {chado_organism}";
- $orgs = db_query($dsql);
-
- $csql = "SELECT * FROM {Organism} ".
- "WHERE organism_id = %d";
- $org_list = array();
-
- while($org = db_fetch_object($orgs)){
- $previous_db = db_set_active('chado');
- $info = db_fetch_object(db_query($csql,$org->organism_id));
- db_set_active($previous_db);
- $org_list[] = $info;
- }
- return $org_list;
- }
- ?>
|