| 
					
				 | 
			
			
				@@ -0,0 +1,109 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<?php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// $Id: views_handler_field_node.inc,v 1.7.2.2 2010/03/16 23:09:05 merlinofchaos Exp $ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Contains the basic 'node' field handler. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Field handler to provide simple renderer that allows linking to a node. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    parent::query(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!preg_match('/'.$this->options[table].'/', $this->view->base_table)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // chado_* ====================================================== 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_name = 'chado_'.$this->options[table]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // add to table_queue-------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['table'] = $drupal_chado_table_name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['num'] = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['alias'] = $drupal_chado_table_name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['relationship'] = $this->options[table]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['join'] = clone($this->query->table_queue[$this->options[table]]['join']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['join']->table = $drupal_chado_table_name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['join']->left_table = $this->options[table]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['join']->definition['table'] = $drupal_chado_table_name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_chado_table_join['join']->definition['left_table'] = $this->options[table]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->query->table_queue[$drupal_chado_table_name] = $drupal_chado_table_join; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // add to table-------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->query->tables[$this->view->base_table][$drupal_chado_table_name] = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'count' => 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'alias' => $drupal_chado_table_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // node ============================================================ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_alias = $this->options[table].'_node'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // add to table_queue-------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_join['table'] = 'node'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_join['num'] = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_join['alias'] = $drupal_node_table_alias; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_join['relationship'] = $this->options[table]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_join['join'] = clone($this->query->table_queue['node']['join']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_join['join']->left_table = $drupal_chado_table_name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $drupal_node_table_join['join']->definition['left_table'] = $drupal_chado_table_name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->query->table_queue[$drupal_node_table_alias] = $drupal_node_table_join; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // add to table-------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->query->tables[$this->view->base_table][$drupal_node_table_alias] = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'count' => 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'alias' => $drupal_node_table_alias, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // add field and set alias =========================== 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $field_alias = $this->options[table].'_node_nid'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->query->add_field($drupal_node_table_alias, 'nid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->add_additional_fields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->aliases['nid'] = $field_alias;      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->aliases['nid'] = 'node_nid'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |