views_handler_field_node_optional.inc 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /**
  3. * Field handler to provide simple renderer that allows linking to a node.
  4. *
  5. * @ingroup views_field_handlers
  6. * @ingroup tripal_core
  7. */
  8. class views_handler_field_node_optional extends views_handler_field_node {
  9. function construct() {
  10. parent::construct();
  11. $this->additional_fields['nid'] = array('table' => 'node', 'field' => 'nid');
  12. if (module_exists('translation')) {
  13. $this->additional_fields['language'] = array('table' => 'node', 'field' => 'language');
  14. }
  15. }
  16. /**
  17. * Add chado_* and *_node alias'd left joins to the table
  18. */
  19. function query() {
  20. // Check what we have (ie: current table? node table? )
  21. $chado_table = 'chado_' . $this->table;
  22. foreach ($this->query->table_queue as $table_def) {
  23. //check is $this->table
  24. if ($table_def['table'] == $this->table) {
  25. $this_table_alias = $table_def['alias'];
  26. }
  27. // check is node joined to #this->table
  28. if ($table_def['table'] == $chado_table) {
  29. $node_table_alias = $table_def['alias'];
  30. }
  31. }
  32. // First: Add the main field-----------------------------------------------
  33. if (!$this_table_alias) {
  34. $this_table_alias = $this->ensure_my_table();
  35. }
  36. $field_alias = $this->query->add_field($this_table_alias, $this->real_field);
  37. $this->aliases[ $this->real_field ] = $field_alias;
  38. $this->field_alias = $field_alias;
  39. // Second: Add nid field and Joins if necessary----------------------------
  40. // Add node join if needed
  41. if (!$node_table_alias) {
  42. $def['table'] = $chado_table;
  43. $def['field'] = $this->table . '_id';
  44. $def['left_table'] = $this_table_alias;
  45. $def['left_field'] = $this->table . '_id';
  46. $join = new views_join();
  47. $join->definition = $def;
  48. $join->construct();
  49. $join->adjusted = TRUE;
  50. $node_table_alias = $this->query->add_relationship($def['table'], $join, $def['table']);
  51. }
  52. // Finally Add Field
  53. $field_alias = $this->query->add_field($node_table_alias, 'nid');
  54. $this->aliases['nid'] = $field_alias;
  55. }
  56. /**
  57. * Render whatever the data is as a link to the node.
  58. *
  59. * Data should be made XSS safe prior to calling this function.
  60. */
  61. function render_link($data, $values) {
  62. if (!empty($this->options['link_to_node']) && $data !== NULL && $data !== '') {
  63. if (!empty($values->{$this->aliases['nid']})) {
  64. $this->options['alter']['make_link'] = TRUE;
  65. $this->options['alter']['path'] = "node/" . $values->{$this->aliases['nid']};
  66. if (isset($this->aliases['language'])) {
  67. $languages = language_list();
  68. if (isset($languages[$values->{$this->aliases['language']}])) {
  69. $this->options['alter']['language'] = $languages[$values->{$this->aliases['language']}];
  70. }
  71. else {
  72. unset($this->options['alter']['language']);
  73. }
  74. }
  75. } else {
  76. $this->options['alter']['make_link'] = FALSE;
  77. $this->options['alter']['path'] = "";
  78. }
  79. }
  80. return $data;
  81. }
  82. }