123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582 |
- <?php
- function tripal_analysis_go_init(){
-
- drupal_add_css(drupal_get_path('theme', 'tripal').
- '/css/tripal_analysis_go.css');
- drupal_add_js(drupal_get_path('theme', 'tripal').
- '/js/tripal_analysis_go.js');
- }
- function tripal_analysis_go_menu() {
- $items = array();
- $items['node/%/goterms'] = array(
- 'title' => t('GO Analysis'),
- 'page callback' => 'tripal_analysis_go_organism_goterms',
- 'page arguments' => array(1),
- 'access callback' => 'tripal_analysis_go_node_has_menu',
- 'access arguments' => array('access chado_analysis_go content',1),
- 'type' => MENU_LOCAL_TASK | MENU_NORMAL_ITEM
- );
- $items['download_goterm_features'] = array(
- 'path' => 'download_goterm_features',
- 'title' => t('Get GO Term Features'),
- 'page callback' => 'tripal_analysis_go_get_goterm_features',
- 'page arguments' => array(1,2),
- 'access arguments' => array('access chado_analysis_go content'),
- 'type' => MENU_CALLBACK
- );
- $items['tripal_analysis_go_org_charts'] = array(
- 'path' => 'tripal_analysis_go_org_charts',
- 'title' => t('Analysis GO Charts'),
- 'page callback' => 'tripal_analysis_go_org_charts',
- 'page arguments' => array(1),
- 'access arguments' => array('access chado_analysis_go content'),
- 'type' => MENU_CALLBACK
- );
- return $items;
- }
- function tripal_analysis_go_perm(){
- return array(
- 'access chado_analysis_go content',
- 'create chado_analysis_go content',
- 'delete chado_analysis_go content',
- 'edit chado_analysis_go content',
- );
- }
- function chado_analysis_go_access($op, $node, $account){
- if ($op == 'create') {
- return user_access('create chado_analysis_go content', $account);
- }
- if ($op == 'update') {
- if (user_access('edit chado_analysis_go content', $account)) {
- return TRUE;
- }
- }
- if ($op == 'delete') {
- if (user_access('delete chado_analysis_go content', $account)) {
- return TRUE;
- }
- }
- if ($op == 'view') {
- if (user_access('access chado_analysis_go content', $account)) {
- return TRUE;
- }
- }
- return FALSE;
- }
- function tripal_analysis_go_node_has_menu($type,$vid){
-
- $sql = 'SELECT organism_id FROM {chado_organism} WHERE vid = %d';
- $result = db_query($sql, $vid);
-
- $box_status =variable_get("tripal_analysis_go-box-goterms","menu_off");
-
-
- if($org_id = db_fetch_object($result)){
- if(strcmp($box_status,"menu_on")==0){
- return user_access($type);
- }
- } else {
- return FALSE;
- }
- }
- function tripal_analysis_go_nodeapi(&$node, $op, $teaser, $page) {
- switch ($op) {
-
-
- case 'view':
-
-
- $types_to_show = variable_get('tripal_analysis_go_setting',
- array('chado_feature','chado_organism'));
-
- if (!in_array($node->type, $types_to_show, TRUE)) {
-
- $box_status = variable_get("tripal_analysis_go-box-goterms","menu_off");
- if (strcmp($box_status,"menu_on")==0 && $node->type =='chado_organism'){
- variable_set("tripal_analysis_go-box-goterms","menu_off");
- }
- break;
- }
-
- if (!$teaser) {
-
- if($node->build_mode == NODE_BUILD_SEARCH_INDEX){
- $node->content['tripal_analysis_go_search_index'] = array(
- '#value' => theme('tripal_analysis_go_search_index',$node),
- '#weight' => 5,
- );
- } else if ($node->build_mode == NODE_BUILD_SEARCH_RESULT) {
- $node->content['tripal_analysis_go_search_result'] = array(
- '#value' => theme('tripal_analysis_go_search_result',$node),
- '#weight' => 5,
- );
- } else {
-
- $node->content['tripal_analysis_go_node_add'] = array(
- '#value' => theme('tripal_analysis_go_node_add', $node),
- '#weight' => 5
- );
- }
- }
- }
- }
- function tripal_analysis_go_theme () {
- return array(
-
- 'tripal_analysis_go_search_index' => array (
- 'arguments' => array('node'),
- ),
- 'tripal_analysis_go_search_result' => array (
- 'arguments' => array('node'),
- ),
- 'tripal_analysis_go_node_add' => array (
- 'arguments' => array('node'),
- )
- );
- }
- function theme_tripal_analysis_go_search_index($node){
- }
- function theme_tripal_analysis_go_search_result($node){
- }
- function theme_tripal_analysis_go_node_add($node){
- $content = '';
- if(strcmp($node->type,'chado_feature')==0){
- $content = tripal_analysis_go_feature_add($node);
- }
- if(strcmp($node->type,'chado_organism')==0){
- $box_status = variable_get("tripal_analysis_go-box-goterms","menu_off");
- if (strcmp($box_status,"menu_off")==0){
- $content = tripal_analysis_go_organism_add($node);
- }
- }
- return $content;
- }
- function tripal_analysis_go_organism_goterms($node) {
- $node = node_load($node);
- return tripal_analysis_go_organism_add($node);
- }
- function tripal_analysis_go_select_form(&$form_state = NULL,$node){
- $form = array();
-
- $sql = "
- SELECT DISTINCT A.analysis_id, A.name, GCA.organism_id
- FROM {go_count_analysis} GCA
- INNER JOIN Analysis A on GCA.analysis_id = A.analysis_id
- WHERE organism_id = %d
- ORDER BY analysis_id DESC
- ";
- $previous_db = tripal_db_set_active('chado');
- $results = db_query($sql,$node->organism_id);
- tripal_db_set_active($previous_db);
- $analyses = array();
- $analyses[''] = '';
- while($analysis = db_fetch_object($results)){
- $analyses[$analysis->analysis_id."-".$analysis->organism_id] = "$analysis->name";
- }
-
-
- $form['analysis_select'] = array(
- '#title' => t('Select a GO report to view'),
- '#description' => t('Any analysis with GO results related to this organism are available for viewing. For further information, see the analysis information page.'),
- '#type' => 'select',
- '#options' => $analyses,
- '#attributes' => array (
- 'onchange' => 'tripal_analysis_go_org_charts(this.options[this.selectedIndex].value)'
- ),
- );
- return $form;
- }
- function tripal_analysis_go_org_charts ($element) {
- $analysis_id = preg_replace("/^(\d+)-(\d+)$/","$1",$element);
- $organism_id = preg_replace("/^(\d+)-(\d+)$/","$2",$element);
- $content = '';
- if($analysis_id and $organism_id){
- $content = "
- <b>Biological Process</b>
- <br><i>Expand the tree to browse term counts. Click a term to view term details.</i>
- <div class=\"tripal_cv_tree\" id=\"tripal_analysis_go_cv_tree_".$organism_id."-".$analysis_id."_bp\"></div>
- <br><br><img class=\"tripal_cv_chart\" id=\"tripal_analysis_go_cv_chart_".$organism_id."-".$analysis_id."_bp\" src=\"\" border=\"0\">
- <br><br><br><br>
- <b>Cellular Component</b>
- <br><i>Expand the tree to browse term counts. Click a term to view term details.</i>
- <div class=\"tripal_cv_tree\" id=\"tripal_analysis_go_cv_tree_".$organism_id."-".$analysis_id."_cc\"></div>
- <br><br><img class=\"tripal_cv_chart\" id=\"tripal_analysis_go_cv_chart_".$organism_id."-".$analysis_id."_cc\" src=\"\" border=\"0\">
- <br><br><br><br>
- <b>Molecular Function</b>
- <br><i>Expand the tree to browse term counts. Click a term to view term details.</i>
- <div class=\"tripal_cv_tree\" id=\"tripal_analysis_go_cv_tree_".$organism_id."-".$analysis_id."_mf\"></div>
- <br><br><img class=\"tripal_cv_chart\" id=\"tripal_analysis_go_cv_chart_".$organism_id."-".$analysis_id."_mf\" src=\"\" border=\"0\">
- ";
- }
- $opt = array($content);
- return drupal_json($opt);
- }
- function tripal_analysis_go_organism_add($node) {
-
-
-
-
- $box_status = variable_get("tripal_analysis_go-box-goterms","menu_off");
-
- if(strcmp($box_status,"menu_off")==0){
- $content .= "
- <div class=\"tripal_go_summary-info-box\">
- <div class=\"tripal_expandableBox\">
- <h3>Gene Ontology Summary</h3>
- </div>
- <div class=\"tripal_expandableBoxContent\">
- ";
- }
-
- $sql = "
- SELECT DISTINCT A.analysis_id, A.name, GCA.organism_id
- FROM {go_count_analysis} GCA
- INNER JOIN Analysis A on GCA.analysis_id = A.analysis_id
- WHERE organism_id = %d
- ORDER BY analysis_id DESC
- ";
- $previous_db = tripal_db_set_active('chado');
- $results = db_fetch_object(db_query($sql,$node->organism_id));
- tripal_db_set_active($previous_db);
- if($results){
- $select_analysis = drupal_get_form('tripal_analysis_go_select_form',$node);
- $url = url("sites/all/themes/theme_tripal/images/ajax-loader.gif");
- $content .= "
- $select_analysis
- <div id=\"tripal_cv_cvterm_info_box\">
- <a href=\"#\" onclick=\"$('#tripal_cv_cvterm_info_box').hide()\" style=\"float: right\">Close [X]</a>
- <h3>Term Information</h3>
- <div id=\"tripal_cv_cvterm_info\"></div>
- </div>
- <div id=\"tripal_ajaxLoading\" style=\"display:none\">
- <div id=\"loadingText\">Loading...</div>
- <img src=\"$url\"></div><div id=\"tripal_analysis_go_org_charts\"></div>
- ";
- } else {
- $content .= "There are currently no Gene Ontology (GO) reports for this organism\n";
- }
- if(user_access('access administrative pages')){
- $link = url("tripal_toggle_box_menu/tripal_analysis_go/goterms/$node->nid");
- if(strcmp($box_status,"menu_off")==0){
- $content .= "<br><a href=\"$link\">Show on menu</a>";
- } else {
- $content .= "<br><a href=\"$link\">Remove from menu</a>";
- }
- }
- if(strcmp($box_status,"menu_off")==0){
- $content .= "</div></div>";
- }
- return $content;
- }
- function tripal_analysis_go_cv_chart($chart_id){
-
-
-
-
-
- $organism_id = preg_replace("/^tripal_analysis_go_cv_chart_(\d+)-(\d+)_(bp|cc|mf)$/","$1",$chart_id);
- $analysis_id = preg_replace("/^tripal_analysis_go_cv_chart_(\d+)-(\d+)_(bp|cc|mf)$/","$2",$chart_id);
- $type = preg_replace("/^tripal_analysis_go_cv_chart_(\d+)-(\d+)_(bp|cc|mf)$/","$3",$chart_id);
- $sql = "SELECT * FROM {Analysis} WHERE analysis_id = %d";
- $previous_db = tripal_db_set_active('chado');
- $analysis = db_fetch_object(db_query($sql,$analysis_id));
- tripal_db_set_active($previous_db);
-
- if(strcmp($type,'mf')==0){
- $class = 'molecular_function';
- $title = "Number of Molecular Function Terms From $analysis->name Analysis";
- }
- if(strcmp($type,'cc')==0){
- $class = 'cellular_component';
- $title = "Number of Cellular Component Terms From $analysis->name Analysis";
- }
- if(strcmp($type,'bp')==0){
- $class = 'biological_process';
- $title = "Number of Biological Process Terms From $analysis->name Analysis";
- }
- $options = array(
- count_mview => 'go_count_analysis',
- cvterm_id_column => 'cvterm_id',
- count_column => 'feature_count',
- filter => "
- CNT.organism_id = $organism_id AND
- CNT.analysis_id = $analysis_id AND
- CNT.cvterm_id IN (
- SELECT CVTR.subject_id
- FROM {CVTerm_relationship} CVTR
- INNER JOIN CVTerm CVT on CVTR.object_id = CVT.cvterm_id
- INNER JOIN CV on CVT.cv_id = CV.cv_id
- WHERE CVT.name = '$class' AND
- CV.name = '$class'
- )
- ",
- type => 'p',
- size => '680x230',
- title => $title,
- );
- return $options;
- }
- function tripal_analysis_go_cv_tree($tree_id){
- $organism_id = preg_replace("/^tripal_analysis_go_cv_tree_(\d+)-(\d+)_(bp|cc|mf)$/","$1",$tree_id);
- $analysis_id = preg_replace("/^tripal_analysis_go_cv_tree_(\d+)-(\d+)_(bp|cc|mf)$/","$2",$tree_id);
- $type = preg_replace("/^tripal_analysis_go_cv_tree_(\d+)-(\d+)_(bp|cc|mf)$/","$3",$tree_id);
- if(strcmp($type,'mf')==0){
- $class = 'molecular_function';
- }
- if(strcmp($type,'cc')==0){
- $class = 'cellular_component';
- }
- if(strcmp($type,'bp')==0){
- $class = 'biological_process';
- }
- $options = array(
- cv_id => tripal_cv_get_cv_id($class),
- count_mview => 'go_count_analysis',
- cvterm_id_column => 'cvterm_id',
- count_column => 'feature_count',
- filter => "CNT.organism_id = $organism_id AND CNT.analysis_id = $analysis_id",
- label => 'Features',
- );
- return $options;
- }
- function tripal_analysis_go_cvterm_add($cvterm_id,$tree_id){
- $organism_id = preg_replace("/^tripal_analysis_go_cv_tree_(\d+)-(\d+)_(bp|cc|mf)$/","$1",$tree_id);
- $analysis_id = preg_replace("/^tripal_analysis_go_cv_tree_(\d+)-(\d+)_(bp|cc|mf)$/","$2",$tree_id);
- $sql = "
- SELECT DBX.accession
- FROM {cvterm} CVT
- INNER JOIN dbxref DBX on DBX.dbxref_id = CVT.dbxref_id
- WHERE cvterm_id = %d
- ";
- $previous_db = tripal_db_set_active('chado');
- $xref = db_fetch_object(db_query($sql,$cvterm_id));
- tripal_db_set_active($previous_db);
- $link = url("download_goterm_features/$cvterm_id/$tree_id");
- $options = array(
- 'Download sequences' => "<a href=\"$link\">GO_".$xref->accession.".fasta</a>",
- );
- return $options;
- }
- function tripal_analysis_go_get_goterm_features($cvterm_id,$tree_id){
-
- $sql = "
- SELECT DBX.accession
- FROM {cvterm} CVT
- INNER JOIN dbxref DBX on DBX.dbxref_id = CVT.dbxref_id
- WHERE cvterm_id = %d
- ";
- $previous_db = tripal_db_set_active('chado');
- $xref = db_fetch_object(db_query($sql,$cvterm_id));
- tripal_db_set_active($previous_db);
- drupal_set_header('Content-Type: text');
- drupal_set_header('Content-Disposition: attachment; filename="GO_'.$xref->accession.'.fasta"');
- $organism_id = preg_replace("/^tripal_analysis_go_cv_tree_(\d+)-(\d+)_(bp|cc|mf)$/","$1",$tree_id);
- $analysis_id = preg_replace("/^tripal_analysis_go_cv_tree_(\d+)-(\d+)_(bp|cc|mf)$/","$2",$tree_id);
- $sql = "
- SELECT DISTINCT F.name,F.residues,F.feature_id
- FROM {cvtermpath} CVTP
- INNER JOIN CVTerm CVT1 on CVTP.subject_id = CVT1.cvterm_id
- INNER JOIN CVTerm CVT2 on CVTP.object_id = CVT2.cvterm_id
- INNER JOIN AnalysisFeatureProp AFP on AFP.type_id = CVTP.subject_id
- INNER JOIN AnalysisFeature AF on AF.analysisfeature_id = AFP.analysisfeature_id
- INNER JOIN Feature F on AF.feature_id = F.feature_id
- WHERE CVTP.object_id = %d and F.organism_id = %d and AF.analysis_id = %d
- ORDER BY F.name
- ";
- $previous_db = tripal_db_set_active('chado');
- $results = db_query($sql,$cvterm_id,$organism_id,$analysis_id);
- tripal_db_set_active($previous_db);
- while($feature = db_fetch_object($results)){
-
- $sql = "
- SELECT CVT.name,DBX.accession
- FROM {Feature_CVTerm} FCVT
- INNER JOIN CVTerm CVT on FCVT.cvterm_id = CVT.cvterm_id
- INNER JOIN DBXref DBX on CVT.dbxref_id = DBX.dbxref_id
- WHERE FCVT.feature_id = %d
- ";
- $previous_db = tripal_db_set_active('chado');
- $terms = db_query($sql,$feature->feature_id);
- tripal_db_set_active($previous_db);
- $desc = '[';
- while($term = db_fetch_object($terms)){
- $desc .= "GO:$term->accession $term->name; ";
- }
- $desc = chop($desc);
- $desc = chop($desc,';');
- $desc .= ']';
- print tripal_feature_return_fasta($feature, $desc);
- }
- return;
- }
- function tripal_analysis_go_feature_add($node) {
- $content = "";
- $sql = "
- SELECT DISTINCT FCVT.feature_id,DBX.accession,CVT.name as goterm,
- CVT.cvterm_id as go_id, CV.name as cvname
- FROM {Feature_Cvterm} FCVT
- INNER JOIN Cvterm CVT ON CVT.cvterm_ID = FCVT.cvterm_ID
- INNER JOIN CV ON CV.cv_id = CVT.cv_id
- INNER JOIN dbxref DBX ON DBX.dbxref_id = CVT.dbxref_id
- WHERE
- (CV.name = 'biological_process' OR
- CV.name = 'cellular_component' OR
- CV.name = 'molecular_function') AND
- FCVT.feature_id = %d
- ORDER BY CV.name, CVT.name
- ";
- $previous_db = tripal_db_set_active('chado');
- $results = db_query($sql,$node->feature->feature_id);
- tripal_db_set_active($previous_db);
- $term = db_fetch_object($results);
- if ($term) {
- $content .= "<div id=\"tripal_go_box\" class=\"tripal_go-info-box\">";
- $content .= "<div class=\"tripal_expandableBox\">".
- "<h3>GO terms assigned to this feature</h3>".
- "</div>";
- $content .= "<div class=\"tripal_expandableBoxContent\">";
- $content .= "<table class=\"feature-go-terms\">";
- $content .= " <tr>";
- $content .= " <th class=\"dbfieldname\">Accession</th>";
- $content .= " <th class=\"dbfieldname\">Category</th>";
- $content .= " <th class=\"dbfieldname\">Term</th>";
- $content .= " </tr>";
- do {
- $content .= "<tr>";
- $content .= " <td>GO:$term->accession</td>";
- $content .= " <td>$term->cvname</td>";
- $content .= " <td>$term->goterm</td>";
- $content .= "</tr>";
- } while($term = db_fetch_object($results));
- $content .= "</table>";
- $content .= "</div></div>";
- }
- return $content;
- }
- function tripal_analysis_go_get_settings() {
-
- $options = node_get_types('names');
-
- $allowedoptions ['chado_feature'] = "Show GO terms on feature pages";
- $allowedoptions ['chado_organism'] = "Show GO analysis on organism pages";
- $form['description'] = array(
- '#type' => 'item',
- '#value' => t("This option allows user to display the Gene Ontology (GO) ".
- "information. For features, this would include all GO terms assigned to a feature ".
- "and for organisms this would be statistical pie charts of GO terms for a organism. Check the box to ".
- "enable the display of GO information. Uncheck to disable."),
- '#weight' => 0,
- );
- $form['tripal_analysis_go_setting'] = array(
- '#type' => 'checkboxes',
- '#options' => $allowedoptions,
- '#default_value'=>variable_get('tripal_analysis_go_setting',array('chado_feature', 'chado_organism')),
- );
- $settings->form = $form;
- $settings->title = "Tripal GO";
- return $settings;
- }
|