Tripal v1.0 (6.x-1.0)
|
00001 <?php 00002 00010 class views_handler_field_node_optional extends views_handler_field_node { 00011 00012 function construct() { 00013 parent::construct(); 00014 $this->additional_fields['nid'] = array('table' => 'node', 'field' => 'nid'); 00015 if (module_exists('translation')) { 00016 $this->additional_fields['language'] = array('table' => 'node', 'field' => 'language'); 00017 } 00018 } 00019 00023 function query() { 00024 00025 // Check what we have (ie: current table? node table? ) 00026 $chado_table = 'chado_' . $this->table; 00027 foreach ($this->query->table_queue as $table_def) { 00028 //check is $this->table 00029 if ($table_def['table'] == $this->table) { 00030 $this_table_alias = $table_def['alias']; 00031 } 00032 00033 // check is node joined to #this->table 00034 if ($table_def['table'] == $chado_table) { 00035 $node_table_alias = $table_def['alias']; 00036 } 00037 } 00038 00039 // First: Add the main field----------------------------------------------- 00040 if (!$this_table_alias) { 00041 $this_table_alias = $this->ensure_my_table(); 00042 } 00043 $field_alias = $this->query->add_field($this_table_alias, $this->real_field); 00044 $this->aliases[ $this->real_field ] = $field_alias; 00045 $this->field_alias = $field_alias; 00046 00047 // Second: Add nid field and Joins if necessary---------------------------- 00048 // Add node join if needed 00049 if (!$node_table_alias) { 00050 $def['table'] = $chado_table; 00051 $def['field'] = $this->table . '_id'; 00052 $def['left_table'] = $this_table_alias; 00053 $def['left_field'] = $this->table . '_id'; 00054 00055 $join = new views_join(); 00056 $join->definition = $def; 00057 $join->construct(); 00058 $join->adjusted = TRUE; 00059 00060 $node_table_alias = $this->query->add_relationship($def['table'], $join, $def['table']); 00061 } 00062 00063 // Finally Add Field 00064 $field_alias = $this->query->add_field($node_table_alias, 'nid'); 00065 $this->aliases['nid'] = $field_alias; 00066 00067 } 00068 00074 function render_link($data, $values) { 00075 if (!empty($this->options['link_to_node']) && $data !== NULL && $data !== '') { 00076 if (!empty($values->{$this->aliases['nid']})) { 00077 $this->options['alter']['make_link'] = TRUE; 00078 $this->options['alter']['path'] = "node/" . $values->{$this->aliases['nid']}; 00079 if (isset($this->aliases['language'])) { 00080 $languages = language_list(); 00081 if (isset($languages[$values->{$this->aliases['language']}])) { 00082 $this->options['alter']['language'] = $languages[$values->{$this->aliases['language']}]; 00083 } 00084 else { 00085 unset($this->options['alter']['language']); 00086 } 00087 } 00088 } 00089 else { 00090 $this->options['alter']['make_link'] = FALSE; 00091 $this->options['alter']['path'] = ""; 00092 } 00093 } 00094 00095 return $data; 00096 } 00097 }