tripal_analysis_blast_htmlreport.inc 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. function tripal_get_blast_report ($analysis_id, $currentpage, $sort, $descending, $per_page) {
  3. if (!tripal_analysis_check_permission($analysis_id)) {
  4. $html_out = "Access denied. You are not authorized to access this report.";
  5. return $html_out;
  6. }
  7. $report_object = new stdClass;
  8. $symbol = "&and;";
  9. $sort_key = "ASC";
  10. if ($descending == 1) {
  11. $symbol = "&or;";
  12. $sort_key = "DESC";
  13. }
  14. $header = 'analysis_blast_besthit_query';
  15. $convert = 0;
  16. if ($sort == 1) {
  17. $header = 'analysis_blast_besthit_match';
  18. } else if ($sort == 2) {
  19. $header = 'analysis_blast_besthit_description';
  20. } else if ($sort == 3) {
  21. $header = 'analysis_blast_besthit_evalue';
  22. $convert = 1;
  23. } else if ($sort == 4) {
  24. $header = 'analysis_blast_besthit_identity';
  25. $convert = 1;
  26. } else if ($sort == 5) {
  27. $header = 'analysis_blast_besthit_length';
  28. $convert = 1;
  29. }
  30. $previous_db = tripal_db_set_active('chado');
  31. // Get analysis information including 'Time', 'Name', and 'DB Settings'
  32. $sql = "SELECT value, name, to_char(timeexecuted, 'MM-DD-YYYY') AS time
  33. FROM {analysis} A
  34. INNER JOIN {analysisprop} AP ON A.analysis_id = AP.analysis_id
  35. WHERE A.analysis_id = %d
  36. AND type_id= (SELECT cvterm_id
  37. FROM {cvterm}
  38. WHERE name = 'analysis_blast_blastdb')";
  39. $analysis = db_fetch_object(db_query($sql, $analysis_id));
  40. $db_id = $analysis->value;
  41. // Get db 'urlprefix'
  42. $sql = "SELECT urlprefix FROM {db} WHERE db_id=%d";
  43. $urlprefix = db_result(db_query($sql, $db_id));
  44. // Get all analysisfeature_id's sorted by the selected header for this blast analysis
  45. $sql = "SELECT AFP.analysisfeature_id
  46. FROM {analysisfeature} AF
  47. INNER JOIN {analysisfeatureprop} AFP ON AF.analysisfeature_id = AFP.analysisfeature_id
  48. WHERE analysis_id = %d
  49. AND AFP.type_id = (SELECT cvterm_id FROM {cvterm} WHERE name = '%s' AND cv_id = (SELECT cv_id FROM {cv} WHERE name = 'tripal'))
  50. ORDER BY value ";
  51. // Convert string to number for evalue, %identity, and length before SQL sorting
  52. if ($convert == 1) {
  53. $sql .= "::numeric ";
  54. }
  55. $sql .= "$sort_key";
  56. $result = db_query($sql, $analysis_id, $header);
  57. tripal_db_set_active($previous_db);
  58. $analysisfeatureSet = array();
  59. // Count how many analysisfeature_id we have and store them in order in $analysisfeatureSet
  60. $counter = 0;
  61. while ($feature = db_fetch_object($result)) {
  62. $analysisfeatureSet [$counter] = $feature->analysisfeature_id;
  63. $counter ++;
  64. }
  65. // Get analysis node id
  66. $ana_nid = db_result(db_query("SELECT nid FROM {chado_analysis} WHERE analysis_id = %d", $analysis_id));
  67. $ana_url = url("node/".$ana_nid);
  68. // Get pager info
  69. $no_page = (int) ($counter / $per_page);
  70. if ($counter % $per_page != 0) {
  71. $no_page ++;
  72. }
  73. $first_item = ($currentpage - 1)* $per_page;
  74. $report_object->time = $analysis->time;
  75. $report_object->name = $analysis->name;
  76. $report_object->url = $ana_url;
  77. $report_object->counter = $counter;
  78. $report_object->currentpage = $currentpage;
  79. $report_object->no_page = $no_page;
  80. $report_object->symbol = $symbol;
  81. $report_object->sort = $sort;
  82. // Construct URL path for different sorting column
  83. $path = "tripal_blast_report/$analysis_id/1/0/";
  84. if ($descending == 0 && $sort == 0) {
  85. $path .= "1";
  86. } else {
  87. $path .= "0";
  88. }
  89. $path .= "/$per_page";
  90. $url_path = url ($path);
  91. $report_object->byQuery = $url_path;
  92. $path = "tripal_blast_report/$analysis_id/1/1/";
  93. if ($descending == 0 && $sort == 1) {
  94. $path .= "1";
  95. } else {
  96. $path .= "0";
  97. }
  98. $path .= "/$per_page";
  99. $url_path = url ($path);
  100. $report_object->byMatchName =$url_path;
  101. $path = "tripal_blast_report/$analysis_id/1/2/";
  102. if ($descending == 0 && $sort == 2) {
  103. $path .= "1";
  104. } else {
  105. $path .= "0";
  106. }
  107. $path .= "/$per_page";
  108. $url_path = url ($path);
  109. $report_object->byDescription = $url_path;
  110. $path = "tripal_blast_report/$analysis_id/1/3/";
  111. if ($descending == 0 && $sort == 3) {
  112. $path .= "1";
  113. } else {
  114. $path .= "0";
  115. }
  116. $path .= "/$per_page";
  117. $url_path = url ($path);
  118. $report_object->byEvalue = $url_path;
  119. $path = "tripal_blast_report/$analysis_id/1/4/";
  120. if ($descending == 0 && $sort == 4) {
  121. $path .= "1";
  122. } else {
  123. $path .= "0";
  124. }
  125. $path .= "/$per_page";
  126. $url_path = url ($path);
  127. $report_object->byIdentity = $url_path;
  128. $path = "tripal_blast_report/$analysis_id/1/5/";
  129. if ($descending == 0 && $sort == 5) {
  130. $path .= "1";
  131. } else {
  132. $path .= "0";
  133. }
  134. $path .= "/$per_page";
  135. $url_path = url ($path);
  136. $report_object->byLength = $url_path;
  137. // Get table content
  138. $sql = "SELECT value
  139. FROM {analysisfeatureprop}
  140. WHERE analysisfeature_id = %d
  141. AND type_id = (SELECT cvterm_id FROM {cvterm} WHERE name = '%s' AND cv_id = (SELECT cv_id FROM {cv} WHERE name = 'tripal'))";
  142. $j = 0;
  143. $hits = array ();
  144. for ($i = $first_item; $i < $first_item +$per_page; $i ++) {
  145. $previous_db = tripal_db_set_active('chado');
  146. $query = db_result(db_query($sql, $analysisfeatureSet[$i], 'analysis_blast_besthit_query'));
  147. $match = db_result(db_query($sql, $analysisfeatureSet[$i], 'analysis_blast_besthit_match'));
  148. $desc = db_result(db_query($sql, $analysisfeatureSet[$i], 'analysis_blast_besthit_description'));
  149. $evalue = db_result(db_query($sql, $analysisfeatureSet[$i], 'analysis_blast_besthit_evalue'));
  150. $identity = db_result(db_query($sql, $analysisfeatureSet[$i], 'analysis_blast_besthit_identity'));
  151. $length = db_result(db_query($sql, $analysisfeatureSet[$i], 'analysis_blast_besthit_length'));
  152. $sql_fid = "SELECT feature_id FROM analysisfeature WHERE analysisfeature_id = %d";
  153. $fid = db_result(db_query($sql_fid, $analysisfeatureSet[$i]));
  154. tripal_db_set_active($previous_db);
  155. $q_url = url("ID$fid");
  156. $class = 'tripal_analysis_blast-table-odd-row tripal-table-odd-row';
  157. if($j % 2 == 0 ){
  158. $class = 'tripal_analysis_blast-table-even-row tripal-table-even-row';
  159. }
  160. $hit = new stdClass();
  161. if ($query) {
  162. $hit->class = $class;
  163. $hit->q_url = $q_url;
  164. $hit->query = $query;
  165. $hit->urlprefix = $urlprefix;
  166. $hit->match = $match;
  167. $hit->desc = $desc;
  168. $hit->evalue = $evalue;
  169. $hit->identity = $identity;
  170. $hit->length = $length;
  171. $hits [$j] = $hit;
  172. }
  173. $j ++;
  174. }
  175. $report_object->hits = $hits;
  176. // The number of items to show on the page
  177. $path = "tripal_blast_report/$analysis_id/1/$sort/$descending/";
  178. $report_object->path = $path;
  179. $report_object->per_page = $per_page;
  180. // Make AJAX call to update the page which user selected
  181. $report_object->analysis_id = $analysis_id;
  182. $report_object->sort = $sort;
  183. $report_object->descending = $descending;
  184. $report_object->per_page = $per_page;
  185. $report_object->no_page = $no_page;
  186. return theme('tripal_analysis_blast_report',$report_object);
  187. }