| 
					
				 | 
			
			
				@@ -0,0 +1,120 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<?php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* @file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Purpose: This Handler provides a select list for the type field 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  NOTE: This handler only works when applied to the type_id field in the base_table of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  this view. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class views_handler_filter_chado_select_cvterm_name extends views_handler_filter_string { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	* Executed when the field is added 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	* Determine which cv to limit the cvterms to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function init(&$view, $options) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    parent::init($view, $options); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  	$cv_id = variable_get('chado_'.$this->view->base_table.'_cv', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ($cv_id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$results = tripal_core_chado_select('cvterm',array('cvterm_id','name'), array('cv_id'=>$cv_id));				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			foreach ($results as $c) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$cvterms[$c->cvterm_id] = $c->name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}    	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	//get a list of cvs currently used 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	$sql = 'select distinct(cv.cv_id) FROM '.$this->view->base_table 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    		.' LEFT JOIN cvterm cvterm ON cvterm.cvterm_id='.$this->view->base_table.'.type_id ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    		.'LEFT JOIN cv cv ON cv.cv_id=cvterm.cv_id'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	$previous_db = tripal_db_set_active('chado'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	$resource = db_query($sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	tripal_db_set_active($previous_db); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	$cvterms = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			while ( $r = db_fetch_object($resource) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$results = tripal_core_chado_select('cvterm',array('cvterm_id','name'), array('cv_id'=>$r->cv_id));				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				foreach ($results as $c) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$cvterms[$c->cvterm_id] = $c->name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }// end of if variable not defined 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //sort cvterms by name (case insensitive) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    natcasesort($cvterms); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //add to this handler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $this->cvterm_options = $cvterms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * Alters the query so that WHERE cvterm.cvterm_id=212 is used 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function query() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $this->ensure_table; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $where = 'cvterm.cvterm_id=%d'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $this->query->add_where($this->options['group'], $where, $this->value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * Defines the value field in both the views filter options form 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  *   and the exposed form 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function value_form(&$form, &$form_state) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    parent::value_form(&$form, &$form_state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Get Options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ($this->options['exposed']) {     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $options['All'] = '<Any>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $options['<select '.$this->table.'>'] = '<None>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $max_length = 40; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach ($this->cvterm_options as $cvterm_id => $cvterm_name) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (strlen($cvterm_name) > $max_length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $options[$cvterm_id] = substr($cvterm_name,0,$max_length) . '...'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $options[$cvterm_id] = $cvterm_name;     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //Select List 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $form['value'] = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '#type' => 'select', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '#title' => $this->options['label'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '#options' => $options, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        '#default_value' => $this->value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * Ensures the select list gets rendered when the filter is exposed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function exposed_form(&$form, &$form_state) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (empty($this->options['exposed'])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $value = $this->options['expose']['identifier']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $this->value_form($form, $form_state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $form[$value] = $form['value']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (isset($form[$value]['#title']) && !empty($form[$value]['#type']) && $form[$value]['#type'] != 'checkbox') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      unset($form[$value]['#title']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $this->exposed_translate($form[$value], 'value'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!empty($form['#type']) && ($form['#type'] == 'checkboxes' || ($form['#type'] == 'select' && !empty($form['#multiple'])))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      unset($form[$value]['#default_value']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!empty($form['#type']) && $form['#type'] == 'select' && empty($form['#multiple'])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $form[$value]['#default_value'] = 'All'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ($value != 'value') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      unset($form['value']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |