Tripal v1.0 (6.x-1.0)
views_handler_field_node_optional.inc
Go to the documentation of this file.
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 }
 All Classes Files Functions Variables