analysis.views.inc 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. <?php
  2. /**
  3. * @file
  4. * Purpose: this function returns the portion of the data array
  5. * which describes the analysis table, it's fields and any joins between it and other tables
  6. * @see tripal_analysis_views_data() --in tripal_analysis.views.inc
  7. *
  8. * @todo Add support for analysisprop table
  9. * @todo Add support for multiple analysis' listed per feature
  10. * @todo Add join to node table within if <chado/drupal same db>; also addd if not around nid field
  11. *
  12. * BASE TABLE: analysis
  13. * @code
  14. * create table analysis (
  15. * analysis_id serial not null,
  16. * primary key (analysis_id),
  17. * name varchar(255),
  18. * description text,
  19. * program varchar(255) not null,
  20. * programversion varchar(255) not null,
  21. * algorithm varchar(255),
  22. * sourcename varchar(255),
  23. * sourceversion varchar(255),
  24. * sourceuri text,
  25. * timeexecuted timestamp not null default current_timestamp,
  26. * constraint analysis_c1 unique (program,programversion,sourcename)
  27. * );
  28. * @endcode
  29. *
  30. * @ingroup tripal_analysis_views
  31. */
  32. function retrieve_analysis_views_data() {
  33. global $db_url;
  34. $data = array();
  35. // if the chado database is not local to the drupal database
  36. // then we need to set the database name. This should always
  37. // be 'chado'.
  38. if (is_array($db_url) and array_key_exists('chado', $db_url)) {
  39. $database = 'chado';
  40. }
  41. // Basic table definition
  42. $data['analysis']['table']['group'] = 'Chado Analysis';
  43. $data['analysis']['table']['base'] = array(
  44. 'field' => 'analysis_id',
  45. 'title' => t('Chado Analysis'),
  46. 'help' => t("An analysis is a particular type of a computational analysis; it may be a blast of one sequence against another, or an all by all blast, or a different kind of analysis altogether. It is a single unit of computation."),
  47. );
  48. if ($database) {
  49. $data['analysis']['table']['base']['database'] = $database;
  50. }
  51. // Define relationships between this table and others
  52. $data['analysis']['table']['join']['feature'] = array(
  53. 'linking' => array(
  54. 'table' => 'analysisfeature',
  55. 'left_field' => 'feature_id',
  56. 'field' => 'analysis_id',
  57. ),
  58. 'left_field' => 'feature_id',
  59. 'field' => 'analysis_id',
  60. 'handler' => 'views_handler_join_chado_through_linking'
  61. );
  62. // Analysis properties?
  63. $data['analysisprop']['table'] = array(
  64. 'group' => 'Chado analysis Properties',
  65. 'field' => 'analysisprop_id',
  66. 'title' => t('Chado analysis Properties'),
  67. 'help' => ' ',
  68. );
  69. $data['analysisprop']['table']['join']['analysis'] = array(
  70. 'left_field' => 'analysis_id',
  71. 'field' => 'analysis_id',
  72. 'handler' => 'views_handler_join_chado_aggregator'
  73. );
  74. $data['analysisprop']['value'] = array(
  75. 'title' => t('Value'),
  76. 'help' => t(' '),
  77. 'field' => array(
  78. 'handler' => 'chado_views_handler_field',
  79. 'click sortable' => TRUE,
  80. ),
  81. 'sort' => array(
  82. 'handler' => 'chado_views_handler_sort',
  83. ),
  84. 'filter' => array(
  85. 'handler' => 'chado_views_handler_filter_string',
  86. ),
  87. 'argument' => array(
  88. 'handler' => 'views_handler_argument_string',
  89. ),
  90. );
  91. $data['analysisprop']['all'] = array(
  92. 'title' => t('All'),
  93. 'help' => t('An aggregate field that contains all fields for a row.'),
  94. 'field' => array(
  95. 'handler' => 'chado_views_handler_field_aggregate',
  96. 'click sortable' => TRUE,
  97. ),
  98. 'sort' => array(
  99. 'handler' => 'chado_views_handler_sort',
  100. ),
  101. 'filter' => array(
  102. 'handler' => 'chado_views_handler_filter_string',
  103. ),
  104. 'argument' => array(
  105. 'handler' => 'views_handler_argument_string',
  106. ),
  107. );
  108. // Table Field Definitions----------------------
  109. // Field: analysis_id (primary key)
  110. $data['analysis']['analysis_id'] = array(
  111. 'title' => 'analysis ID',
  112. 'help' => 'The primary key of the analysis table.',
  113. 'field' => array(
  114. 'handler' => 'views_handler_field_numeric',
  115. 'click sortable' => TRUE,
  116. ),
  117. 'filter' => array(
  118. 'handler' => 'views_handler_filter_numeric',
  119. ),
  120. 'sort' => array(
  121. 'handler' => 'chado_views_handler_sort',
  122. ),
  123. );
  124. // Calculated Field: Node ID
  125. // use custom field handler to query drupal for the node ID
  126. // this is only needed if chado is in a separate database from drupal
  127. if ($database) {
  128. $data['analysis']['analysis_nid'] = array(
  129. 'title' => 'Node ID',
  130. 'help' => 'The node ID for the current analysis',
  131. 'field' => array(
  132. 'handler' => 'views_handler_field_computed_analysis_nid',
  133. ),
  134. );
  135. }
  136. else {
  137. // Add relationship between chado_analysis and analysis
  138. $data['analysis']['analysis_nid'] = array(
  139. 'group' => 'Analysis',
  140. 'title' => 'Analysis Node',
  141. 'help' => 'Links Chado Analysis Fields/Data to the Nodes in the current View.',
  142. 'real field' => 'analysis_id',
  143. 'relationship' => array(
  144. 'handler' => 'views_handler_relationship',
  145. 'title' => t('Analysis => Chado'),
  146. 'label' => t('Analysis => Chado'),
  147. 'real field' => 'analysis_id',
  148. 'base' => 'chado_analysis',
  149. 'base field' => 'analysis_id'
  150. ),
  151. );
  152. }
  153. // Field: name (varchar 255)
  154. $data['analysis']['name'] = array(
  155. 'title' => t('Name'),
  156. 'help' => t(''),
  157. 'field' => array(
  158. 'handler' => 'views_handler_field',
  159. 'click sortable' => TRUE,
  160. ),
  161. 'sort' => array(
  162. 'handler' => 'chado_views_handler_sort',
  163. ),
  164. 'filter' => array(
  165. 'handler' => 'views_handler_filter_chado_select_string',
  166. ),
  167. 'argument' => array(
  168. 'handler' => 'views_handler_argument_string',
  169. ),
  170. );
  171. // if joined to the node table add a "Link to Node" option for the field
  172. if (!$database) {
  173. $data['analysis']['name']['field']['handler'] = 'views_handler_field_node_optional';
  174. }
  175. // Field: description (text)
  176. $data['analysis']['description'] = array(
  177. 'title' => t('Description'),
  178. 'help' => t(''),
  179. 'field' => array(
  180. 'handler' => 'views_handler_field',
  181. 'click sortable' => TRUE,
  182. ),
  183. 'sort' => array(
  184. 'handler' => 'chado_views_handler_sort',
  185. ),
  186. 'filter' => array(
  187. 'handler' => 'chado_views_handler_filter_string',
  188. ),
  189. 'argument' => array(
  190. 'handler' => 'views_handler_argument_string',
  191. ),
  192. );
  193. // Field: program (varchar 255)
  194. $data['analysis']['program'] = array(
  195. 'title' => t('Program'),
  196. 'help' => t('Program name, e.g. blastx, blastp, sim4, genscan.'),
  197. 'field' => array(
  198. 'handler' => 'views_handler_field',
  199. 'click sortable' => TRUE,
  200. ),
  201. 'sort' => array(
  202. 'handler' => 'chado_views_handler_sort',
  203. ),
  204. 'filter' => array(
  205. 'handler' => 'views_handler_filter_chado_select_string',
  206. ),
  207. 'argument' => array(
  208. 'handler' => 'views_handler_argument_string',
  209. ),
  210. );
  211. // Field: program version (varchar 255)
  212. $data['analysis']['programversion'] = array(
  213. 'title' => t('Program Version'),
  214. 'help' => t('Version description, e.g. TBLASTX 2.0MP-WashU [09-Nov-2000].'),
  215. 'field' => array(
  216. 'handler' => 'views_handler_field',
  217. 'click sortable' => TRUE,
  218. ),
  219. 'sort' => array(
  220. 'handler' => 'chado_views_handler_sort',
  221. ),
  222. 'filter' => array(
  223. 'handler' => 'views_handler_filter_chado_select_string',
  224. ),
  225. 'argument' => array(
  226. 'handler' => 'views_handler_argument_string',
  227. ),
  228. );
  229. // Field: algorithm (varchar 255)
  230. $data['analysis']['algorithm'] = array(
  231. 'title' => t('Algorithm'),
  232. 'help' => t('Algorithm name, e.g. blast.'),
  233. 'field' => array(
  234. 'handler' => 'views_handler_field',
  235. 'click sortable' => TRUE,
  236. ),
  237. 'sort' => array(
  238. 'handler' => 'chado_views_handler_sort',
  239. ),
  240. 'filter' => array(
  241. 'handler' => 'views_handler_filter_chado_select_string',
  242. ),
  243. 'argument' => array(
  244. 'handler' => 'views_handler_argument_string',
  245. ),
  246. );
  247. $data['analysis']['sourcename'] = array(
  248. 'title' => t('Source Name'),
  249. 'help' => t('Source name, e.g. cDNA, SwissProt.'),
  250. 'field' => array(
  251. 'handler' => 'views_handler_field',
  252. 'click sortable' => TRUE,
  253. ),
  254. 'sort' => array(
  255. 'handler' => 'chado_views_handler_sort',
  256. ),
  257. 'filter' => array(
  258. 'handler' => 'chado_views_handler_filter_string',
  259. ),
  260. 'argument' => array(
  261. 'handler' => 'views_handler_argument_string',
  262. ),
  263. );
  264. // Field: source version (varchar 255)
  265. $data['analysis']['sourceversion'] = array(
  266. 'title' => t('Source Version'),
  267. 'help' => t('The version of the source.'),
  268. 'field' => array(
  269. 'handler' => 'views_handler_field',
  270. 'click sortable' => TRUE,
  271. ),
  272. 'sort' => array(
  273. 'handler' => 'chado_views_handler_sort',
  274. ),
  275. 'filter' => array(
  276. 'handler' => 'chado_views_handler_filter_string',
  277. ),
  278. 'argument' => array(
  279. 'handler' => 'views_handler_argument_string',
  280. ),
  281. );
  282. // Field: source URI/URL (text)
  283. $data['analysis']['sourceuri'] = array(
  284. 'title' => t('Source URL'),
  285. 'help' => t('This is an optional, permanent URL or URI for the source of the analysis.'),
  286. 'field' => array(
  287. 'handler' => 'views_handler_field',
  288. 'click sortable' => TRUE,
  289. ),
  290. 'sort' => array(
  291. 'handler' => 'chado_views_handler_sort',
  292. ),
  293. 'filter' => array(
  294. 'handler' => 'chado_views_handler_filter_string',
  295. ),
  296. 'argument' => array(
  297. 'handler' => 'views_handler_argument_string',
  298. ),
  299. );
  300. // Field: time executed (datetime)
  301. $data['analysis']['timeexecuted'] = array(
  302. 'title' => 'Time Executed',
  303. 'help' => 'The date & time when this analysis was executed.',
  304. 'field' => array(
  305. 'handler' => 'views_handler_field_readable_date',
  306. 'click sortable' => TRUE,
  307. ),
  308. 'sort' => array(
  309. 'handler' => 'chado_views_handler_sort_date',
  310. ),
  311. );
  312. return $data;
  313. }