tripal_stock-db_references.inc 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <?php
  2. /*************************************************************************************************************
  3. * @section
  4. * Deals with Adding DB references
  5. */
  6. function tripal_stock_add_ALL_dbreferences_page($node) {
  7. $output = '';
  8. $output .= tripal_stock_add_chado_properties_progress('db_references').'<br>';
  9. $output .= '<b>All Database References should strictly pertain to THE CURRENT Individual</b><br>';
  10. $output .= '<br><b>Current Database References</b><br>';
  11. $output .= tripal_stock_list_dbreferences_for_node($node->db_references);
  12. $output .= '<br><br>';
  13. $output .= drupal_get_form('tripal_stock_add_ONE_dbreference_form', $node);
  14. $output .= '<br>';
  15. $output .= drupal_get_form('tripal_stock_add_chado_properties_navigate', 'db_references', $node->nid);
  16. return $output;
  17. }
  18. /**
  19. * Implements Hook_form()
  20. * Handles adding of Database References to Stocks
  21. */
  22. function tripal_stock_add_ONE_dbreference_form($form_state, $node) {
  23. $stock_id = $node->stock_id;
  24. $form['db_nid'] = array(
  25. '#type' => 'hidden',
  26. '#value' => $node->nid
  27. );
  28. $form['add_dbreference'] = array(
  29. '#type' => 'fieldset',
  30. '#title' => t('Add Database References') . '<span class="form-optional" title="This field is optional">(optional)</span>',
  31. );
  32. $form['add_properties']['db_stock_id'] = array(
  33. '#type' => 'value',
  34. '#value' => $stock_id,
  35. '#required' => TRUE
  36. );
  37. $form['add_dbreference']['accession'] = array(
  38. '#type' => 'textfield',
  39. '#title' => t('Accession Number'),
  40. );
  41. $form['add_dbreference']['db_description'] = array(
  42. '#type' => 'textarea',
  43. '#title' => t('Description of Database Reference') . '<span class="form-optional" title="This field is optional">+</span>',
  44. '#description' => t('Optionally enter a description about the database accession.')
  45. );
  46. $db_options = tripal_db_get_db_options();
  47. $db_options[0] = 'Select a Database';
  48. ksort($db_options);
  49. $form['add_dbreference']['database'] = array(
  50. '#type' => 'select',
  51. '#title' => t('Database'),
  52. '#options' => $db_options,
  53. );
  54. $form['add_dbreference']['submit'] = array(
  55. '#type' => 'submit',
  56. '#value' => t('Add Database Reference')
  57. );
  58. return $form;
  59. }
  60. function tripal_stock_add_ONE_dbreference_form_validate($form, &$form_state) {
  61. // Only ensure db reference valid if adding
  62. if ($form_state['clicked_button']['#value'] == t('Add Database Reference') ) {
  63. //Do work of required validators
  64. if ($form_state['values']['accession'] == '') {
  65. form_set_error('accession', 'Accession field is Required.');
  66. }
  67. // Check database is valid db_id in chado
  68. if ( $form_state['values']['database'] > 0) {
  69. $previous_db = tripal_db_set_active('chado');
  70. $tmp_obj = db_fetch_object(db_query("SELECT count(*) as count FROM db WHERE db_id=%d",$form_state['values']['database']));
  71. tripal_db_set_active($previous_db);
  72. if ($tmp_obj->count != 1) {
  73. form_set_error('database', 'The database you selected is not valid. Please choose another one.');
  74. }
  75. } else {
  76. form_set_error('database', 'Please select a database');
  77. }
  78. // Check Accession is unique for database
  79. $previous_db = tripal_db_set_active('chado');
  80. $tmp_obj = db_fetch_object(db_query("SELECT count(*) as count FROM dbxref WHERE accession='%s'",$form_state['values']['accession']));
  81. tripal_db_set_active($previous_db);
  82. if ($tmp_obj->count > 0) {
  83. form_set_error('accession', 'This accession has already been assigned to another stock.');
  84. }
  85. } //end of if adding
  86. }
  87. function tripal_stock_add_ONE_dbreference_form_submit($form, &$form_state) {
  88. // FIX: Sometimes on programatic submission of form (drupal_execute) values in the form state get lost
  89. // however, the post values always seem to be correct
  90. if (empty($form_state['values']['db_stock_id'])) { $form_state['values']['db_stock_id'] = $form_state['clicked_button']['#post']['db_stock_id']; }
  91. // Only Create if valid
  92. if ($form_state['values']['database'] > 0) {
  93. // create dbxref
  94. $previous_db = tripal_db_set_active('chado');
  95. db_query(
  96. "INSERT INTO dbxref (db_id, accession, description) VALUES (%d, '%s', '%s')",
  97. $form_state['values']['database'],
  98. $form_state['values']['accession'],
  99. $form_state['values']['db_description']
  100. );
  101. tripal_db_set_active($previous_db);
  102. //create stock_dbxref
  103. $dbxref = tripal_db_get_dbxref_by_accession($form_state['values']['accession'], $form_state['values']['database']);
  104. if (!empty($dbxref->dbxref_id)) {
  105. $previous_db = tripal_db_set_active('chado');
  106. db_query(
  107. "INSERT INTO stock_dbxref (stock_id, dbxref_id) VALUES (%d, %d)",
  108. $form_state['values']['db_stock_id'],
  109. $dbxref->dbxref_id
  110. );
  111. tripal_db_set_active($previous_db);
  112. drupal_set_message('Successfully Added Database Reference');
  113. } else {
  114. drupal_set_message('Database reference NOT successfully created...','error');
  115. } //end of if dbxref was created successfully
  116. } //end of if valid db reference
  117. }
  118. /*************************************************************************************************************
  119. * @section
  120. * Deals with Editing and Deleting Properties
  121. */
  122. function tripal_stock_edit_ALL_dbreferences_page($node) {
  123. $output = '';
  124. $output .= drupal_get_form('tripal_stock_edit_ALL_db_references_form', $node);
  125. $output .= '<br>';
  126. $output .= drupal_get_form('tripal_stock_add_ONE_dbreference_form', $node);
  127. $output .= '<br>';
  128. $output .= drupal_get_form('tripal_stock_back_to_stock_button', $node->nid);
  129. return $output;
  130. }
  131. /**
  132. * Implements Hook_form()
  133. * Handles adding of Properties & Synonyms to Stocks
  134. */
  135. function tripal_stock_edit_ALL_db_references_form($form_state, $node) {
  136. $form = array();
  137. $form['nid'] = array(
  138. '#type' => 'hidden',
  139. '#value' => $node->nid
  140. );
  141. $i=0;
  142. if (sizeof($node->db_references) != 0) {
  143. foreach ($node->db_references as $ref) {
  144. $i++;
  145. $form["num-$i"] = array(
  146. '#type' => 'item',
  147. '#value' => $i.'.'
  148. );
  149. $form["accession-$i"] = array(
  150. '#type' => 'textfield',
  151. //'#title' => t('Accession'),
  152. '#size' => 30,
  153. '#required' => TRUE,
  154. '#default_value' => $ref->accession
  155. );
  156. $db_options = tripal_db_get_db_options();
  157. $db_options[0] = 'Select a Database';
  158. ksort($db_options);
  159. $form["database-$i"] = array(
  160. '#type' => 'select',
  161. //'#title' => t('Database'),
  162. '#options' => $db_options,
  163. '#default_value' => $ref->db_id
  164. );
  165. $form["id-$i"] = array(
  166. '#type' => 'hidden',
  167. '#value' => $ref->dbxref_id
  168. );
  169. $form["submit-$i"] = array(
  170. '#type' => 'submit',
  171. '#value' => t("Delete #$i")
  172. );
  173. }} //end of foreach db ref
  174. $form['num_db_references'] = array(
  175. '#type' => 'hidden',
  176. '#value' => $i
  177. );
  178. $form["submit-edits"] = array(
  179. '#type' => 'submit',
  180. '#value' => t('Update DB References')
  181. );
  182. return $form;
  183. }
  184. function tripal_stock_edit_ALL_db_references_form_submit($form, &$form_state) {
  185. if ($form_state['clicked_button']['#value'] == t('Update DB References') ) {
  186. //Update all
  187. for ($i=1; $i<=$form_state['values']['num_db_references']; $i++) {
  188. tripal_stock_update_db_reference(
  189. $form_state['values']["id-$i"],
  190. $form_state['values']["database-$i"],
  191. $form_state['values']["accession-$i"]
  192. );
  193. }
  194. drupal_set_message("Updated all Database References");
  195. drupal_goto('node/'.$form_state['values']['nid']);
  196. } elseif ( preg_match('/Delete #(\d+)/', $form_state['clicked_button']['#value'], $matches) ) {
  197. $i = $matches[1];
  198. tripal_stock_delete_db_reference($form_state['values']["id-$i"]);
  199. drupal_set_message("Deleted Database Reference");
  200. } else {
  201. drupal_set_message("Unrecognized Button Pressed",'error');
  202. }
  203. }
  204. function tripal_stock_update_db_reference($dbxref_id, $database_id, $accession) {
  205. $previous_db = tripal_db_set_active('chado');
  206. db_query(
  207. "UPDATE dbxref SET db_id=%d, accession='%s' WHERE dbxref_id=%d",
  208. $database_id,
  209. $accession,
  210. $dbxref_id
  211. );
  212. tripal_db_set_active($previous_db);
  213. }
  214. function tripal_stock_delete_db_reference($dbxref_id) {
  215. $previous_db = tripal_db_set_active('chado');
  216. db_query(
  217. "DELETE FROM dbxref WHERE dbxref_id=%d",
  218. $dbxref_id
  219. );
  220. db_query(
  221. "DELETE FROM stock_dbxref WHERE dbxref_id=%d",
  222. $dbxref_id
  223. );
  224. tripal_db_set_active($previous_db);
  225. }
  226. function theme_tripal_stock_edit_ALL_db_references_form ($form) {
  227. $output = '';
  228. $output .= '<br><fieldset>';
  229. $output .= '<legend>Edit Existing Database References<span class="form-optional" title="This field is optional">(optional)</span></legend>';
  230. $output .= '<p>Below is a list of already existing database references, one per line. When entering a database reference, the accession '
  231. .'is a unique identifier for this stock in the specified database.</p>';
  232. $output .= '<table>';
  233. $output .= '<tr><th>#</th><th>Database</th><th>Accession</th><th></th></tr>';
  234. for ($i=1; $i<=$form['num_db_references']['#value']; $i++) {
  235. $output .= '<tr><td>'.drupal_render($form["num-$i"]).'</td><td>'
  236. .drupal_render($form["database-$i"]).'</td><td>'
  237. .drupal_render($form["accession-$i"]).'</td><td>'
  238. .drupal_render($form["submit-$i"]).'</td></tr>';
  239. }
  240. $output .= '</table><br>';
  241. $output .= drupal_render($form);
  242. $output .= '</fieldset>';
  243. return $output;
  244. }
  245. /*************************************************************************************************************
  246. * @section
  247. * Supplimentary functions
  248. */
  249. /**
  250. *
  251. */
  252. function tripal_stock_list_dbreferences_for_node($db_references) {
  253. if (!empty($db_references) ) {
  254. $output = '<table>';
  255. $output .= '<tr><th>Database</th><th>Accession</th></tr>';
  256. foreach ($db_references as $db) {
  257. $output .= '<tr><td>'.$db->db_name.'</td><td>'.$db->accession.'</td></tr>';
  258. } // end of foreach db reference
  259. $output .= '</table>';
  260. } else {
  261. $output = 'No Database References Added to the Current Stock';
  262. }
  263. return $output;
  264. }