12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?php
- /**
- * @file
- * Field handler to provide simple renderer that allows linking to a node.
- *
- * @ingroup views_field_handlers
- * @ingroup tripal_core
- */
- class views_handler_field_node_optional extends views_handler_field_node {
- function construct() {
- parent::construct();
- $this->additional_fields['nid'] = array('table' => 'node', 'field' => 'nid');
- if (module_exists('translation')) {
- $this->additional_fields['language'] = array('table' => 'node', 'field' => 'language');
- }
- }
- /**
- * Add chado_* and *_node alias'd left joins to the table
- */
- function query() {
- // Check what we have (ie: current table? node table? )
- $chado_table = 'chado_' . $this->table;
- foreach ($this->query->table_queue as $table_def) {
- //check is $this->table
- if ($table_def['table'] == $this->table) {
- $this_table_alias = $table_def['alias'];
- }
- // check is node joined to #this->table
- if ($table_def['table'] == $chado_table) {
- $node_table_alias = $table_def['alias'];
- }
- }
- // First: Add the main field-----------------------------------------------
- if (!$this_table_alias) {
- $this_table_alias = $this->ensure_my_table();
- }
- $field_alias = $this->query->add_field($this_table_alias, $this->real_field);
- $this->aliases[ $this->real_field ] = $field_alias;
- $this->field_alias = $field_alias;
- // Second: Add nid field and Joins if necessary----------------------------
- // Add node join if needed
- if (!$node_table_alias) {
- $def['table'] = $chado_table;
- $def['field'] = $this->table . '_id';
- $def['left_table'] = $this_table_alias;
- $def['left_field'] = $this->table . '_id';
- $join = new views_join();
- $join->definition = $def;
- $join->construct();
- $join->adjusted = TRUE;
- $node_table_alias = $this->query->add_relationship($def['table'], $join, $def['table']);
- }
- // Finally Add Field
- $field_alias = $this->query->add_field($node_table_alias, 'nid');
- $this->aliases['nid'] = $field_alias;
- }
- /**
- * Render whatever the data is as a link to the node.
- *
- * Data should be made XSS safe prior to calling this function.
- */
- function render_link($data, $values) {
- if (!empty($this->options['link_to_node']) && $data !== NULL && $data !== '') {
- if (!empty($values->{$this->aliases['nid']})) {
- $this->options['alter']['make_link'] = TRUE;
- $this->options['alter']['path'] = "node/" . $values->{$this->aliases['nid']};
- if (isset($this->aliases['language'])) {
- $languages = language_list();
- if (isset($languages[$values->{$this->aliases['language']}])) {
- $this->options['alter']['language'] = $languages[$values->{$this->aliases['language']}];
- }
- else {
- unset($this->options['alter']['language']);
- }
- }
- }
- else {
- $this->options['alter']['make_link'] = FALSE;
- $this->options['alter']['path'] = "";
- }
- }
- return $data;
- }
- }
|