Pārlūkot izejas kodu

Moving around stock handlers (Part II) -they should be in stock/views/handlers not in tripal_core

laceysanderson 14 gadi atpakaļ
vecāks
revīzija
8daceb44ae

+ 65 - 0
tripal_stock/views/handlers/views_handler_argument_stockprop_id.inc

@@ -0,0 +1,65 @@
+<?php
+
+class views_handler_argument_stockprop_id extends views_handler_argument_string {
+
+	function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);   
+    unset($form['glossary']);
+    unset($form['limit']);
+    unset($form['add_table']);
+    unset($form['require_value']);
+    
+    //get options & display as options
+	  $previous_db = tripal_db_set_active('chado');
+    $result = db_query("SELECT cvt.cvterm_id as type_id, cvt.name FROM cvterm cvt WHERE cvt.cvterm_id IN (SELECT type_id FROM stockprop)");
+    tripal_db_set_active($previous_db);
+    $types = array();
+    while ($r = db_fetch_object($result)) { $types[$r->type_id] = $r->name; }
+		$form['stockprop_type_id'] = array(
+			'#type' => 'radios',
+			'#title' => t('Property Types'),
+			'#options' => $types,
+			'#default_value' => $this->options['stockprop_type_id'],
+			'#required' => TRUE,
+			'#description' => t('Select the type of property represented by this argument.'),
+		);
+		
+		$operators = array(
+      '=' => t('Is equal to'),
+      '!=' => t('Is not equal to'),
+      '~' => t('Contains'),
+      '!~' => t('Does not contain'),
+      'IS NOT NULL' => t('Is Present (Not Empty)'),
+      'IS NULL' => t('Is Absent (Empty)'),		
+		);
+		$form['operator'] = array(
+			'#type' => 'radios',
+			'#title' => 'Operator',
+			'#description' => t('Specify how to compare the argument with the property values.'),
+			'#options' => $operators,
+			'#default_value' => $this->options['operator'],
+			'#required' => TRUE,
+		);
+  }
+  
+  /**
+   * Build the query based upon the formula
+   */
+	function query() {
+    $argument = $this->argument;
+    if (!empty($this->options['transform_dash'])) {
+      $argument = strtr($argument, '-', ' ');
+    }
+    
+		if (preg_match('/IS NOT NULL/', $this->options['operator'])) {
+			$new_where_sql = "stock.stock_id IN (SELECT stockprop.stock_id FROM stockprop WHERE stockprop.type_id=".$this->options['stockprop_type_id'].")";
+		} elseif (preg_match('/IS NULL/', $this->options['operator'])) {
+			$new_where_sql = "stock.stock_id NOT IN (SELECT stockprop.stock_id FROM stockprop WHERE stockprop.type_id=".$this->options['stockprop_type_id'].")";
+		} else {
+			$new_where_sql = "stock.stock_id IN (SELECT stockprop.stock_id FROM stockprop "
+							. "WHERE stockprop.type_id=".$this->options['stockprop_type_id']." AND stockprop.value".$this->options['operator']."'".$argument."')";
+		}
+		$this->query->add_where($this->options['group'], $new_where_sql);
+  }
+
+}

+ 17 - 0
tripal_stock/views/handlers/views_handler_field_computed_stock_nid.inc

@@ -0,0 +1,17 @@
+<?php
+
+class views_handler_field_computed_stock_nid extends views_handler_field_numeric {
+	function construct() {
+		parent::construct();
+		$this->additional_fields['stock_id'] = array('table' => 'stock', 'field' => 'stock_id');
+	}
+
+	function query() { 
+		$this->ensure_my_table();
+		$this->add_additional_fields(); 
+	}
+
+	function render($values) { 
+		return $values->stock_nid;
+	}
+} 

+ 81 - 0
tripal_stock/views/handlers/views_handler_field_stock_dbxref_all.inc

@@ -0,0 +1,81 @@
+<?php
+// $Id: views_handler_field_term_node_tid.inc,v 1.4 2009/07/01 23:07:14 merlinofchaos Exp $
+
+/**
+ * Field handler for terms.
+ */
+class views_handler_field_stock_dbxref_all extends views_handler_field_prerender_list {
+  function init(&$view, $options) {
+    parent::init($view, $options);
+  }
+
+  /**
+   * Add this term to the query
+   */
+  function query() {
+    $this->add_additional_fields();
+  }
+
+	function pre_render($values) {
+		$this->aliases['dbxref'] = 'dbxref';
+		$this->aliases['stock_id'] = 'stock_id';
+		$this->field_alias = $this->aliases['stock_id'];
+		
+		//for each stock in this view page
+		foreach ($values as $result) {
+			if (!empty($result->{$this->aliases['dbxref']})) {
+				
+				// all dbxrefs including the current stock
+				$dbxrefs = $result->{$this->aliases['dbxref']};
+				foreach ($dbxrefs as $dbxref) {			
+					// Add dbxref to the list of items to be rendered
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['stock_id'] = $dbxref->stock_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['stock_dbxref_id'] = $dbxref->stock_dbxref_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['dbxref_id'] = $dbxref->dbxref_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['is_current'] = $dbxref->is_current;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['db_id'] = $dbxref->db_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['db_name'] = $dbxref->db_name;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['urlprefix'] = $dbxref->urlprefix;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['accession'] = $dbxref->accession;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['version'] = $dbxref->version;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['description'] = $dbxref->description;
+				}
+			}
+		}
+	}
+
+  function render_item($count, $item) {
+		if (!empty($item['urlprefix'])) {
+			return l($item['accession'],$item['urlprefix'].$item['accession']).' ('.$item['db_name'].')';
+		} else {
+			return $item['accession'].' ('.$item['db_name'].')';
+		}
+  }
+
+  function document_self_tokens(&$tokens) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = t('The Stock ID.');
+		$tokens['[' . $this->options['id'] . '-stock_dbxref_id' . ']'] = t('Stock Database Reference ID');
+		$tokens['[' . $this->options['id'] . '-dbxref_id' . ']'] = t('Database Reference ID');
+		$tokens['[' . $this->options['id'] . '-is_current' . ']'] = t('Is Current');
+		$tokens['[' . $this->options['id'] . '-db_id' . ']'] = t('Database ID');
+		$tokens['[' . $this->options['id'] . '-db_name' . ']'] = t('Database Name');
+		$tokens['[' . $this->options['id'] . '-urlprefix' . ']'] = t('URL Prefix');
+		$tokens['[' . $this->options['id'] . '-accession' . ']'] = t('Accession');
+		$tokens['[' . $this->options['id'] . '-version' . ']'] = t('Version');
+		$tokens['[' . $this->options['id'] . '-description' . ']'] = t('Description');
+  }
+
+  function add_self_tokens(&$tokens, $item) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = $item['stock_id'];
+		$tokens['[' . $this->options['id'] . '-stock_dbxref_id' . ']'] = $item['stock_dbxref_id'];
+		$tokens['[' . $this->options['id'] . '-dbxref_id' . ']'] =  $item['dbxref_id'];
+		$tokens['[' . $this->options['id'] . '-is_current' . ']'] = $item['is_current'];
+		$tokens['[' . $this->options['id'] . '-db_id' . ']'] = $item['db_id'];
+		$tokens['[' . $this->options['id'] . '-db_name' . ']'] = $item['db_name'];
+		$tokens['[' . $this->options['id'] . '-urlprefix' . ']'] = $item['urlprefix'];
+		$tokens['[' . $this->options['id'] . '-accession' . ']'] = $item['accession'];
+		$tokens['[' . $this->options['id'] . '-version' . ']'] = $item['version'];
+		$tokens['[' . $this->options['id'] . '-description' . ']'] = $item['description'];
+  }
+}
+

+ 151 - 0
tripal_stock/views/handlers/views_handler_field_stock_dbxref_by_type.inc

@@ -0,0 +1,151 @@
+<?php
+// $Id: views_handler_field_term_node_tid.inc,v 1.4 2009/07/01 23:07:14 merlinofchaos Exp $
+
+/**
+ * Field handler for terms.
+ */
+class views_handler_field_stock_dbxref_by_type extends views_handler_field_prerender_list {
+  function init(&$view, $options) {
+    parent::init($view, $options);
+
+    // Boolean to determine whether
+    //    TRUE =>  value (property type)      -more than one property type displayed
+    //    FALSE => or just value is rendered  -only 1 porperty type is displayed    
+    $this->display_type = TRUE;
+
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['stockprop_type_ids'] = array('default' => array());
+		$options['display_options'] = array('default' => array('accession','db_name','link'));
+    return $options;
+  }
+
+  /**
+   * Provide "link to term" option.
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+		$form['display_options'] = array(
+			'#type' => 'checkboxes',
+			'#title' => t('Display DB Reference Parts'),
+			'#description' => t('Check each part of the database reference you want displayed where the parts '
+				.'of a database relationship are: <Accession> (<Datbase Name>). You can also specify whether the accession '
+				.'should be linked to the record in the database by checking "Link to External Record".'),
+			'#options' => array(
+				'accession' => 'Accession',
+				'db_name' => 'Database Name',
+				'link' => 'Link to External Record',
+			),
+			'#default_value' => array($this->options['display_options']['accession'], $this->options['display_options']['db_name'], $this->options['display_options']['link']),
+		);
+		
+    $db_options = tripal_db_get_db_options();
+	  $db_options[0] = 'Select a Database';
+	  ksort($db_options);
+    $form['db_ids'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Database'),
+      '#options' => $db_options,
+      '#default_value' => $this->options['db_ids'],
+    );
+  }
+
+  /**
+   * Add this term to the query
+   */
+  function query() {
+    $this->add_additional_fields();
+  }
+
+	function pre_render($values) {
+		$this->aliases['dbxref'] = 'dbxref';
+		$this->aliases['stock_id'] = 'stock_id';
+		$this->field_alias = $this->aliases['stock_id'];
+		
+		//for each stock in this view page
+		foreach ($values as $result) {
+			if (!empty($result->{$this->aliases['dbxref']})) {
+				
+				// all dbxrefs including the current stock
+				$dbxrefs = $result->{$this->aliases['dbxref']};
+				foreach ($dbxrefs as $dbxref) {
+							
+					// perform filtering
+					if (!empty($this->options['db_ids'])) {
+						$dbs2keep = array_filter($this->options['db_ids']);
+						if (!in_array($dbxref->db_id, $dbs2keep)) {
+							continue;
+						}
+					}
+					
+					// Add dbxref to the list of items to be rendered
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['stock_id'] = $dbxref->stock_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['stock_dbxref_id'] = $dbxref->stock_dbxref_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['dbxref_id'] = $dbxref->dbxref_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['is_current'] = $dbxref->is_current;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['db_id'] = $dbxref->db_id;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['db_name'] = $dbxref->db_name;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['urlprefix'] = $dbxref->urlprefix;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['accession'] = $dbxref->accession;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['version'] = $dbxref->version;
+					$this->items[$dbxref->stock_id][$dbxref->stock_dbxref_id]['description'] = $dbxref->description;				}
+			}
+		}
+	}
+
+  function render_item($count, $item) {
+		$text = array();
+		if ($this->options['display_options']['link']) {
+			if ($this->options['display_options']['accession']) {
+				$text[] = l($item['accession'],$item['urlprefix'].$item['accession']);
+			} else {
+				$text[] = l('External Record',$item['urlprefix'].$item['accession']);
+			}	
+		} else {
+			if ($this->options['display_options']['accession']) {
+				$text[] = $item['accession'];
+			}
+		}
+		
+		
+		if ($this->options['display_options']['db_name']) {
+			$text[] = $item['db_name'];
+		}
+		
+		if (sizeof($text) > 1) {
+			return $text[0].' ('.$text[1].')';
+		} else {
+			return $text[0];
+		}
+  }
+
+  function document_self_tokens(&$tokens) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = t('The Stock ID.');
+		$tokens['[' . $this->options['id'] . '-stock_dbxref_id' . ']'] = t('Stock Database Reference ID');
+		$tokens['[' . $this->options['id'] . '-dbxref_id' . ']'] = t('Database Reference ID');
+		$tokens['[' . $this->options['id'] . '-is_current' . ']'] = t('Is Current');
+		$tokens['[' . $this->options['id'] . '-db_id' . ']'] = t('Database ID');
+		$tokens['[' . $this->options['id'] . '-db_name' . ']'] = t('Database Name');
+		$tokens['[' . $this->options['id'] . '-urlprefix' . ']'] = t('URL Prefix');
+		$tokens['[' . $this->options['id'] . '-accession' . ']'] = t('Accession');
+		$tokens['[' . $this->options['id'] . '-version' . ']'] = t('Version');
+		$tokens['[' . $this->options['id'] . '-description' . ']'] = t('Description');
+  }
+
+  function add_self_tokens(&$tokens, $item) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = $item['stock_id'];
+		$tokens['[' . $this->options['id'] . '-stock_dbxref_id' . ']'] = $item['stock_dbxref_id'];
+		$tokens['[' . $this->options['id'] . '-dbxref_id' . ']'] =  $item['dbxref_id'];
+		$tokens['[' . $this->options['id'] . '-is_current' . ']'] = $item['is_current'];
+		$tokens['[' . $this->options['id'] . '-db_id' . ']'] = $item['db_id'];
+		$tokens['[' . $this->options['id'] . '-db_name' . ']'] = $item['db_name'];
+		$tokens['[' . $this->options['id'] . '-urlprefix' . ']'] = $item['urlprefix'];
+		$tokens['[' . $this->options['id'] . '-accession' . ']'] = $item['accession'];
+		$tokens['[' . $this->options['id'] . '-version' . ']'] = $item['version'];
+		$tokens['[' . $this->options['id'] . '-description' . ']'] = $item['description'];
+  }
+}
+

+ 65 - 0
tripal_stock/views/handlers/views_handler_field_stockprop_all.inc

@@ -0,0 +1,65 @@
+<?php
+// $Id: views_handler_field_term_node_tid.inc,v 1.4 2009/07/01 23:07:14 merlinofchaos Exp $
+
+/**
+ * Field handler for terms.
+ */
+class views_handler_field_stockprop_all extends views_handler_field_prerender_list {
+  function init(&$view, $options) {
+    parent::init($view, $options);
+  }
+
+  /**
+   * Add this term to the query
+   */
+  function query() {
+    $this->add_additional_fields();
+  }
+
+	function pre_render($values) {
+		$this->aliases['properties'] = 'properties';
+		$this->aliases['stock_id'] = 'stock_id';
+		$this->field_alias = $this->aliases['stock_id'];
+		
+		//for each stock in this view page
+		foreach ($values as $result) {
+			if (!empty($result->{$this->aliases['properties']})) {
+				
+				// all properties for the current stock
+				$properties = $result->{$this->aliases['properties']};
+				foreach ($properties as $property) {					
+					// Add property to the list of items to be rendered
+					$this->items[$property->stock_id][$property->stockprop_id]['stock_id'] = $property->stock_id;
+					$this->items[$property->stock_id][$property->stockprop_id]['stockprop_id'] = $property->stockprop_id;
+					$this->items[$property->stock_id][$property->stockprop_id]['type_id'] = $property->type_id;
+					$this->items[$property->stock_id][$property->stockprop_id]['type_name'] = check_plain($property->type_name);
+					$this->items[$property->stock_id][$property->stockprop_id]['value'] = check_plain($property->value);
+					$this->items[$property->stock_id][$property->stockprop_id]['rank'] = $property->rank;
+				}
+			}
+		}
+	}
+
+  function render_item($count, $item) {
+		return $item['value'].' ('.$item['type_name'].')';
+  }
+
+  function document_self_tokens(&$tokens) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = t('The Stock ID.');
+    $tokens['[' . $this->options['id'] . '-stockprop_id' . ']'] = t('The Property ID.');
+    $tokens['[' . $this->options['id'] . '-type_id' . ']'] = t('The Property Type ID.');
+    $tokens['[' . $this->options['id'] . '-type_name' . ']'] = t('The Property Type.');
+    $tokens['[' . $this->options['id'] . '-value' . ']'] = t('The Value of the Property.');
+    $tokens['[' . $this->options['id'] . '-rank' . ']'] = t('The Rank of the Property.');
+  }
+
+  function add_self_tokens(&$tokens, $item) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = $item['stock_id'];
+    $tokens['[' . $this->options['id'] . '-stockprop_id' . ']'] = $item['stockprop_id'];
+    $tokens['[' . $this->options['id'] . '-type_id' . ']'] = $item['type_id'];
+    $tokens['[' . $this->options['id'] . '-type_name' . ']'] = $item['type_name'];
+    $tokens['[' . $this->options['id'] . '-value' . ']'] = $item['value'];
+    $tokens['[' . $this->options['id'] . '-rank' . ']'] = $item['rank'];
+  }
+}
+

+ 132 - 0
tripal_stock/views/handlers/views_handler_field_stockprop_by_type.inc

@@ -0,0 +1,132 @@
+<?php
+// $Id: views_handler_field_term_node_tid.inc,v 1.4 2009/07/01 23:07:14 merlinofchaos Exp $
+
+/**
+ * Field handler for terms.
+ */
+class views_handler_field_stockprop_by_type extends views_handler_field_prerender_list {
+  function init(&$view, $options) {
+    parent::init($view, $options);    
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['stockprop_type_ids'] = array('default' => array());
+    $options['stockprop_display_options'] = array('default' => array('type', 'value'));
+    return $options;
+  }
+
+  /**
+   * Provide "link to term" option.
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['stockprop_display_options'] = array(
+      '#prefix' => '<div><div id="edit-options-display_options">',
+      '#suffix' => '</div></div>',
+      '#type' => 'checkboxes',
+      '#title' => t('Display Relationship Parts'),
+      '#description' => t('Check each part of the property you want displayed where the parts '
+        .'of a property are: <type> and <value>. '
+        .'For example, with the property temperature 54 degrees Celcius the type=temperature and the value=54 degrees Celcius. '
+        .'Thus, if you checked only value then "54 degrees Celcius" would be displayed.'),
+      '#options' => array(
+        'type' => 'Type',
+        'value' => 'Value',
+      ),
+      '#default_value' => array($this->options['stockprop_display_options']['type'], $this->options['stockprop_display_options']['value']),
+    );
+    
+    $options = tripal_cv_get_cvterm_options( variable_get('chado_stock_prop_types_cv', 'null') );
+    $form['stockprop_type_ids'] = array(
+      '#prefix' => '<div><div id="edit-options-stockprop_type_ids">',
+      '#suffix' => '</div></div>',
+      '#type' => 'checkboxes',
+      '#title' => t('Property Types'),
+      '#options' => $options,
+      '#default_value' => $this->options['stockprop_type_ids'],
+    );
+  }
+  
+  /**
+   * Add this term to the query
+   */
+  function query() {
+    $this->add_additional_fields();
+  }
+
+  function pre_render($values) {
+    $this->aliases['properties'] = 'properties';
+    $this->aliases['stock_id'] = 'stock_id';
+    $this->field_alias = $this->aliases['stock_id'];
+    
+    //for each stock in this view page
+    foreach ($values as $result) {
+      if (!empty($result->{$this->aliases['properties']})) {
+        
+        // all properties for the current stock
+        $properties = $result->{$this->aliases['properties']};
+        foreach ($properties as $property) {
+          // perform filtering
+          if (!empty($this->options['stockprop_type_ids'])) {
+            $types2keep = array_filter($this->options['stockprop_type_ids']);
+            if (!in_array($property->type_id, $types2keep)) {
+              continue;
+            }
+          }
+          
+          // Add property to the list of items to be rendered
+          $this->items[$property->stock_id][$property->stockprop_id]['stock_id'] = $property->stock_id;
+          $this->items[$property->stock_id][$property->stockprop_id]['stockprop_id'] = $property->stockprop_id;
+          $this->items[$property->stock_id][$property->stockprop_id]['type_id'] = $property->type_id;
+          $this->items[$property->stock_id][$property->stockprop_id]['type_name'] = check_plain($property->type_name);
+          $this->items[$property->stock_id][$property->stockprop_id]['value'] = check_plain($property->value);
+          $this->items[$property->stock_id][$property->stockprop_id]['rank'] = $property->rank;
+        }
+      }
+    }
+  }
+
+  function render_item($count, $item) {
+    $text = array();
+    
+    if ($this->options['stockprop_display_options']['value']) {
+      if ($item['value']) {
+        $text[] =  $item['value'];
+      } else {
+        //display checkmark image
+        $image_path = drupal_get_path('module','tripal_core').'/images/checkmark.gif';
+        $text[] = '<img border="0" src="'.url($image_path).'" alt="checkmark" />';
+      }
+    } 
+    if ($this->options['stockprop_display_options']['type']) {
+      $text[] = $item['type_name'];
+    }
+  
+    if (sizeof($text) > 1) {
+      return $text[0].' ('.$text[1].')';
+    } else {
+      return $text[0];
+    }
+  }
+
+  function document_self_tokens(&$tokens) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = t('The Stock ID.');
+    $tokens['[' . $this->options['id'] . '-stockprop_id' . ']'] = t('The Property ID.');
+    $tokens['[' . $this->options['id'] . '-type_id' . ']'] = t('The Property Type ID.');
+    $tokens['[' . $this->options['id'] . '-type_name' . ']'] = t('The Property Type.');
+    $tokens['[' . $this->options['id'] . '-value' . ']'] = t('The Value of the Property.');
+    $tokens['[' . $this->options['id'] . '-rank' . ']'] = t('The Rank of the Property.');
+  }
+
+  function add_self_tokens(&$tokens, $item) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = $item['stock_id'];
+    $tokens['[' . $this->options['id'] . '-stockprop_id' . ']'] = $item['stockprop_id'];
+    $tokens['[' . $this->options['id'] . '-type_id' . ']'] = $item['type_id'];
+    $tokens['[' . $this->options['id'] . '-type_name' . ']'] = $item['type_name'];
+    $tokens['[' . $this->options['id'] . '-value' . ']'] = $item['value'];
+    $tokens['[' . $this->options['id'] . '-rank' . ']'] = $item['rank'];
+  }
+}
+

+ 72 - 0
tripal_stock/views/handlers/views_handler_field_stockrel_all.inc

@@ -0,0 +1,72 @@
+<?php
+// $Id: views_handler_field_term_node_tid.inc,v 1.4 2009/07/01 23:07:14 merlinofchaos Exp $
+
+/**
+ * Field handler for terms.
+ */
+class views_handler_field_stockrel_all extends views_handler_field_prerender_list {
+  function init(&$view, $options) {
+    parent::init($view, $options);
+  }
+
+  /**
+   * Add this term to the query
+   */
+  function query() {
+    $this->add_additional_fields();
+  }
+
+	function pre_render($values) {
+		$this->aliases['relationships'] = 'relationships';
+		$this->aliases['stock_id'] = 'stock_id';
+		$this->field_alias = $this->aliases['stock_id'];
+		
+		//for each stock in this view page
+		foreach ($values as $result) {
+			if (!empty($result->{$this->aliases['relationships']})) {
+				
+				// all relationships including the current stock
+				$relationships = $result->{$this->aliases['relationships']};
+				foreach ($relationships as $relationship) {			
+					// Add relationship to the list of items to be rendered
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['stock_id'] = $relationship->stock_id;
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['stock_relationship_id'] = $relationship->stock_relationship_id;
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['subject_id'] = $relationship->subject_id;
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['subject_name'] = $relationship->subject_name;
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['object_id'] = $relationship->object_id;
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['object_name'] = $relationship->object_name;
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['type_id'] = $relationship->type_id;
+					$this->items[$relationship->stock_id][$relationship->stock_relationship_id]['type_name'] = $relationship->type_name;
+				}
+			}
+		}
+	}
+
+  function render_item($count, $item) {
+		return $item['subject_name'].' '.$item['type_name'].' '.$item['object_name'];
+  }
+
+  function document_self_tokens(&$tokens) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = t('The Stock ID.');
+		$tokens['[' . $this->options['id'] . '-stock_relationship_id' . ']'] = t('Relationship ID');
+		$tokens['[' . $this->options['id'] . '-subject_id' . ']'] = t('Subject ID');
+		$tokens['[' . $this->options['id'] . '-subject_name' . ']'] = t('Subject Name');
+		$tokens['[' . $this->options['id'] . '-object_id' . ']'] = t('Object ID');
+		$tokens['[' . $this->options['id'] . '-object_name' . ']'] = t('Object Name');
+		$tokens['[' . $this->options['id'] . '-type_id' . ']'] = t('Type ID');
+		$tokens['[' . $this->options['id'] . '-type_name' . ']'] = t('Type Name');
+  }
+
+  function add_self_tokens(&$tokens, $item) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = $item['stock_id'];
+		$tokens['[' . $this->options['id'] . '-stock_relationship_id' . ']'] = $item['stock_relationship_id'];
+		$tokens['[' . $this->options['id'] . '-subject_id' . ']'] = $item['subject_id'];
+		$tokens['[' . $this->options['id'] . '-subject_name' . ']'] = $item['subject_name'];
+		$tokens['[' . $this->options['id'] . '-object_id' . ']'] = $item['object_id'];
+		$tokens['[' . $this->options['id'] . '-object_name' . ']'] = $item['object_name'];
+		$tokens['[' . $this->options['id'] . '-type_id' . ']'] = $item['type_id'];
+		$tokens['[' . $this->options['id'] . '-type_name' . ']'] = $item['type_name'];
+
+  }
+}
+

+ 165 - 0
tripal_stock/views/handlers/views_handler_field_stockrel_by_type.inc

@@ -0,0 +1,165 @@
+<?php
+// $Id: views_handler_field_term_node_tid.inc,v 1.4 2009/07/01 23:07:14 merlinofchaos Exp $
+
+/**
+ * Field handler for terms.
+ */
+class views_handler_field_stockrel_by_type extends views_handler_field_prerender_list {
+  function init(&$view, $options) {
+    parent::init($view, $options);
+
+    // Boolean to determine whether
+    //    TRUE =>  value (property type)      -more than one property type displayed
+    //    FALSE => or just value is rendered  -only 1 porperty type is displayed    
+    $this->display_type = TRUE;
+
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['stockrel_type_ids'] = array('default' => array());
+    $options['stockrel_display_options'] = array('default' => array('subject','type','object'));
+    return $options;
+  }
+
+  /**
+   * Provide "link to term" option.
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['stockrel_display_parts'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Display Relationship Parts'),
+      '#description' => t('Check each part of the relationship you want displayed where the part '
+        .'of a relationship are: \<Subject\> \<Relationship Type\> \<Object\>. '
+        .'For example, with the relationship Sarah is the maternal parent of Fred '
+        .'if you checked only Object then "Fred" would be displayed.'),
+      '#options' => array(
+        'subject' => 'Subject',
+        'type' => 'Relationship Type',
+        'object' => 'Object',
+      ),
+      '#default_value' => array($this->options['stockrel_display_parts']['subject'], $this->options['stockrel_display_parts']['type'], $this->options['stockrel_display_parts']['object']),
+    );
+    
+    $form['stockrel_display_rels'] = array(
+      '#type' => 'radios',
+      '#title' => t('Display Relationships Where'),
+      '#description' => t('Only relationships where the selected criteria is met will be shown. '
+        .'The parts of a relationship are: \<Subject\> \<Relationship Type\> \<Object\>. '
+        .'For example, with the relationships Sarah is the maternal parent of Fred and '
+        .'Fred is the paternal_parent of Max where Fred is the current stock, '
+        .'if you selected "Current Stock is the Object" only Sarah is the maternal parent of Fred'
+        .' would be displayed.'),
+      '#options' => array(
+        'subject' => 'Current Stock is the Subject',
+        'object' => 'Current Stock is the Object',
+        'all' => 'Current Stock is the Subject and/or Object',
+      ),
+      '#default_value' => $this->options['stockrel_display_rels'],
+    );
+    
+    $options = tripal_cv_get_cvterm_options( variable_get('chado_stock_relationship_cv', 'null') );
+    $form['stockrel_type_ids'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Relationship Types'),
+      '#options' => $options,
+      '#default_value' => $this->options['stockrel_type_ids'],
+    );
+  }
+
+  /**
+   * Add this term to the query
+   */
+  function query() {
+    $this->add_additional_fields();
+  }
+
+  function pre_render($values) {
+    $this->aliases['relationships'] = 'relationships';
+    $this->aliases['stock_id'] = 'stock_id';
+    $this->field_alias = $this->aliases['stock_id'];
+    
+    //for each stock in this view page
+    foreach ($values as $result) {
+      if (!empty($result->{$this->aliases['relationships']})) {
+          
+        // all relationships including the current stock
+        $relationships = $result->{$this->aliases['relationships']};
+        foreach ($relationships as $relationship) {      
+          // perform filtering------
+          //type
+          if (!empty($this->options['stockrel_type_ids'])) {
+            $relationships2keep = array_filter($this->options['stockrel_type_ids']);
+            if (!in_array($relationship->type_id, $relationships2keep)) {
+              continue;
+            }
+          }
+          
+          //"Display Relationships Where" criteria
+          if (preg_match('/subject/', $this->options['stockrel_display_rels'])) {
+            if ($relationship->stock_id != $relationship->subject_id) {
+              continue;
+            }      
+          } elseif (preg_match('/object/', $this->options['stockrel_display_rels'])) {
+            if ($relationship->stock_id != $relationship->object_id) {
+              continue;
+            }
+          }
+          
+          // Add relationship to the list of items to be rendered
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['stock_id'] = $relationship->stock_id;
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['stock_relationship_id'] = $relationship->stock_relationship_id;
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['subject_id'] = $relationship->subject_id;
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['subject_name'] = $relationship->subject_name;
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['object_id'] = $relationship->object_id;
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['object_name'] = $relationship->object_name;
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['type_id'] = $relationship->type_id;
+          $this->items[$relationship->stock_id][$relationship->stock_relationship_id]['type_name'] = $relationship->type_name;
+        }
+      }
+    }
+  }
+
+  function render_item($count, $item) {
+    $text = array();
+    
+    // Render Parts
+    if ($this->options['stockrel_display_parts']['subject']) {
+      $text[] = $item['subject_name'];
+    }
+    if ($this->options['stockrel_display_parts']['type']) {
+      $text[] = $item['type_name'];
+    }
+    if ($this->options['stockrel_display_parts']['object']) {
+      $text[] = $item['object_name'];
+    }
+    
+    return implode(' ', $text);
+  }
+
+  function document_self_tokens(&$tokens) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = t('The Stock ID.');
+    $tokens['[' . $this->options['id'] . '-stock_relationship_id' . ']'] = t('Relationship ID');
+    $tokens['[' . $this->options['id'] . '-subject_id' . ']'] = t('Subject ID');
+    $tokens['[' . $this->options['id'] . '-subject_name' . ']'] = t('Subject Name');
+    $tokens['[' . $this->options['id'] . '-object_id' . ']'] = t('Object ID');
+    $tokens['[' . $this->options['id'] . '-object_name' . ']'] = t('Object Name');
+    $tokens['[' . $this->options['id'] . '-type_id' . ']'] = t('Type ID');
+    $tokens['[' . $this->options['id'] . '-type_name' . ']'] = t('Type Name');
+  }
+
+  function add_self_tokens(&$tokens, $item) {
+    $tokens['[' . $this->options['id'] . '-stock_id' . ']'] = $item['stock_id'];
+    $tokens['[' . $this->options['id'] . '-stock_relationship_id' . ']'] = $item['stock_relationship_id'];
+    $tokens['[' . $this->options['id'] . '-subject_id' . ']'] = $item['subject_id'];
+    $tokens['[' . $this->options['id'] . '-subject_name' . ']'] = $item['subject_name'];
+    $tokens['[' . $this->options['id'] . '-object_id' . ']'] = $item['object_id'];
+    $tokens['[' . $this->options['id'] . '-object_name' . ']'] = $item['object_name'];
+    $tokens['[' . $this->options['id'] . '-type_id' . ']'] = $item['type_id'];
+    $tokens['[' . $this->options['id'] . '-type_name' . ']'] = $item['type_name'];
+
+  }
+}
+

+ 238 - 0
tripal_stock/views/handlers/views_handler_filter_stock_dbxref_id.inc

@@ -0,0 +1,238 @@
+<?php
+// $Id$
+
+
+class views_handler_filter_stock_dbxref_id extends views_handler_filter {
+
+  function init(&$view, $options) {
+    parent::init($view, $options);
+    $this->db = $this->options['db'];
+  }
+  
+  function options_form(&$form, &$form_state) {
+    if ($this->can_expose()) {
+      $this->show_expose_button($form, $form_state);
+    }
+
+    $form['op_val_start'] = array('#value' => '<div class="clear-block">');
+
+    $this->types_form($form, $form_state);
+
+    $this->show_operator_form($form, $form_state);
+    $form['operator']['#prefix'] = '<div class="views-right-70">';
+    $this->show_value_form($form, $form_state);
+    $form['op_val_end'] = array('#value' => '</div>');
+
+    if ($this->can_expose()) {
+      $this->show_expose_form($form, $form_state);
+    }
+
+  }
+
+	function query () {
+		$this-> db = array_filter($this->db);
+		
+		if (preg_match('/IS NOT NULL/', $this->options['operator'])) {
+			$new_where_sql = "stock.stock_id IN "
+			."(SELECT stock_dbxref.stock_id FROM stock_dbxref, dbxref WHERE stock_dbxref.dbxref_id=dbxref.dbxref_id AND dbxref.db_id IN (".implode(', ',$this->db)."))";
+			$this->query->add_where($this->options['group'], $new_where_sql);
+		} elseif (preg_match('/IS NULL/', $this->options['operator'])) {
+			$new_where_sql = "stock.stock_id NOT IN "
+			."(SELECT stock_dbxref.stock_id FROM stock_dbxref, dbxref WHERE stock_dbxref.dbxref_id=dbxref.dbxref_id AND dbxref.db_id IN (".implode(', ',$this->db)."))";
+			$this->query->add_where($this->options['group'], $new_where_sql);
+		} else {
+			if (!empty($this->value)) {
+				$new_where_sql = "stock.stock_id IN "
+					."(SELECT stock_dbxref.stock_id FROM stock_dbxref, dbxref WHERE stock_dbxref.dbxref_id=dbxref.dbxref_id "
+					."AND dbxref.db_id IN (".implode(', ',$this->db).") AND dbxref.accession".$this->operator."'".$this->value."')";
+				$this->query->add_where($this->options['group'], $new_where_sql);
+			}
+		}
+	}
+  
+  /////////// Form Parts/////////////////////////
+  function types_form(&$form, &$form_state) {
+  
+    $db_options = tripal_db_get_db_options();
+	  ksort($db_options);
+    $form['db'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Databases'),
+      '#options' => $db_options,
+      '#default_value' => $this->db,
+      '#prefix' => '<div class="views-left-30">',
+      '#suffix' => '</div>',
+    );
+
+  }
+
+  function value_form(&$form, &$form_state) {
+    parent::value_form(&$form, &$form_state);
+    
+		$form['value'] = array(
+  	  '#type' => 'textfield',
+    	'#title' => t('Accession'),
+      '#default_value' => $this->value,
+    );
+  }
+
+  function operator_options() {
+    return array(
+      '=' => t('Is equal to'),
+      '!=' => t('Is not equal to'),
+      '~' => t('Contains'),
+      '!~' => t('Does not contain'),
+      'IS NOT NULL' => t('Is Present (Not Empty)'),
+      'IS NULL' => t('Is Absent (Empty)'),
+    );
+  }
+
+ /**
+  * Render our chunk of the exposed filter form when selecting
+  */
+  function exposed_form(&$form, &$form_state) {
+    if (empty($this->options['exposed'])) {
+      return;
+    }
+
+    if (!empty($this->options['expose']['use_type']) && !empty($this->options['expose']['type'])) {
+      $type = $this->options['expose']['type'];
+      $form[$type] = array(
+        '#type' => 'select',
+        '#title' => t('Database References'),
+        '#options' => $this->type_options(),
+        '#default_value' => $this->type,  
+      );
+
+      if (isset($form[$type]['#title'])) {
+        unset($form[$type]['#title']);
+      }
+    }
+
+    if (!empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator'])) {
+      $operator = $this->options['expose']['operator'];
+      $this->operator_form($form, $form_state);
+      $form[$operator] = $form['operator'];
+
+      if (isset($form[$operator]['#title'])) {
+        unset($form[$operator]['#title']);
+      }
+
+      $this->exposed_translate($form[$operator], 'operator');
+
+      unset($form['operator']);
+    }
+
+    if (!empty($this->options['expose']['identifier'])) {
+      $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']);
+      }
+    }
+  }
+
+  function expose_form_left(&$form, &$form_state) {
+    $form['expose']['label'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $this->options['expose']['label'],
+      '#title' => t('Label'),
+      '#size' => 40,
+    );
+
+    $form['expose']['identifier'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $this->options['expose']['identifier'],
+      '#title' => t('Filter identifier'),
+      '#size' => 40,
+      '#description' => t('This will appear in the URL after the ? to identify this filter. Cannot be blank.'),
+    );
+
+  }
+
+  function expose_form_right(&$form, &$form_state) {
+    if (!empty($form['type']['#type'])) {
+      $form['expose']['use_type'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Unlock Database Reference'),
+        '#description' => t('When checked, the Database Reference will be exposed to the user'),
+        '#default_value' => !empty($this->options['expose']['use_type']),
+      );
+      $form['expose']['type'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $this->options['expose']['type'],
+        '#title' => t('Database Reference identifier'),
+        '#size' => 40,
+        '#description' => t('This will appear in the URL after the ? to identify this Database Reference.'),
+        '#process' => array('views_process_dependency'),
+        '#dependency' => array(
+          'edit-options-expose-use-type' => array(1)
+        ),
+      );
+    }
+    else {
+      $form['expose']['type'] = array(
+        '#type' => 'value',
+        '#value' => '',
+      );
+    }
+
+    $form['expose']['identifier'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $this->options['expose']['identifier'],
+      '#title' => t('Filter identifier'),
+      '#size' => 40,
+      '#description' => t('This will appear in the URL after the ? to identify this filter. Cannot be blank.'),
+    );
+
+    if (!empty($form['operator']['#type'])) {
+      $form['expose']['use_operator'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Unlock operator'),
+        '#description' => t('When checked, the operator will be exposed to the user'),
+        '#default_value' => !empty($this->options['expose']['use_operator']),
+      );
+      $form['expose']['operator'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $this->options['expose']['operator'],
+        '#title' => t('Operator identifier'),
+        '#size' => 40,
+        '#description' => t('This will appear in the URL after the ? to identify this operator.'),
+        '#process' => array('views_process_dependency'),
+        '#dependency' => array(
+          'edit-options-expose-use-operator' => array(1)
+        ),
+      );
+    }
+    else {
+      $form['expose']['operator'] = array(
+        '#type' => 'value',
+        '#value' => '',
+      );
+    }
+    
+    $form['expose']['optional'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Optional'),
+      '#description' => t('This exposed filter is optional and will have added options to allow it not to be set.'),
+      '#default_value' => $this->options['expose']['optional'],
+    );
+  }
+}
+

+ 282 - 0
tripal_stock/views/handlers/views_handler_filter_stockprop_id.inc

@@ -0,0 +1,282 @@
+<?php
+
+/**
+ * Filter by stockprop type id
+ */
+class views_handler_filter_stockprop_id extends views_handler_filter {
+
+  function init(&$view, $options) {
+    parent::init($view, $options);
+    $this->type = $this->options['type'];
+  }
+
+  function options_form(&$form, &$form_state) {
+    if ($this->can_expose()) {
+      $this->show_expose_button($form, $form_state);
+    }
+
+    $form['op_val_start'] = array('#value' => '<div class="clear-block">');
+
+    $this->types_form($form, $form_state);
+
+    $this->show_operator_form($form, $form_state);
+    $form['operator']['#prefix'] = '<div class="views-right-70">';
+    $this->show_value_form($form, $form_state);
+    $form['op_val_end'] = array('#value' => '</div>');
+
+    if ($this->can_expose()) {
+      $this->show_expose_form($form, $form_state);
+    }
+
+  }
+
+  function options_validate(&$form, &$form_state) {
+    parent::options_validate(&$form, &$form_state);
+
+    if (preg_match('/NULL/',$form_state['values']['options']['operator'])) {
+      $value = $form_state['values']['options']['value'];
+      if (!empty($value)) {
+        drupal_set_message('The Value ('.$value.') will be IGNORED when the Operator is set to "Is Present" or Is Absent".', 'warning');
+      }
+    } else {
+      $value = $form_state['values']['options']['value'];
+      if (empty($value)) {
+        form_error($form['value'], t('Value required. The value will be used in conjunction with the operator. For example, if the '
+				   .'operator="Is equal to" and the value="2010" then only properties with a value of 2010 and the type specified will be displayed.'));
+      }
+    }
+
+    if (empty($form_state['values']['options']['type'])) {
+      drupal_set_message('No Property Type was choosen. As such, any property type whose value '
+      			     .$form_state['values']['options']['operator'].' '.$form_state['values']['options']['value'].' will be displayed', 'warning');
+    }
+  }
+
+	function query () {
+		if (preg_match('/IS NOT NULL/', $this->options['operator'])) {
+			$new_where_sql = "stock.stock_id IN (SELECT stockprop.stock_id FROM stockprop WHERE stockprop.type_id=".$this->type.")";
+		} elseif (preg_match('/IS NULL/', $this->options['operator'])) {
+			$new_where_sql = "stock.stock_id NOT IN (SELECT stockprop.stock_id FROM stockprop WHERE stockprop.type_id=".$this->type.")";
+		} else {
+			$new_where_sql = "stock.stock_id IN (SELECT stockprop.stock_id FROM stockprop WHERE stockprop.type_id=".$this->type." AND stockprop.value".$this->operator."'".$this->value."')";
+		}
+		$this->query->add_where($this->options['group'], $new_where_sql);
+	}
+	
+  function types_form(&$form, &$form_state) {
+    $previous_db = tripal_db_set_active('chado');
+    $result = db_query("SELECT cvt.cvterm_id as type_id, cvt.name FROM cvterm cvt WHERE cvt.cvterm_id IN (SELECT type_id FROM stockprop)");
+    tripal_db_set_active($previous_db);
+
+    $types = array();
+    while ($r = db_fetch_object($result)) { $types[$r->type_id] = $r->name; }
+
+    $form['type'] = array(
+      '#type' => count($options) < 10 ? 'radios' : 'select',
+      '#title' => t('Property Types'),
+      '#options' => $types,
+      '#default_value' => $this->type,
+      '#prefix' => '<div class="views-left-30">',
+      '#suffix' => '</div>',
+    );
+
+  }
+
+  function value_form(&$form, &$form_state) {
+    parent::value_form(&$form, &$form_state);
+	
+		if ($this->options['expose']['display_type'] == 'select') {
+		
+			// Get options
+			$previous_db = tripal_db_set_active('chado');
+			$resource = db_query("SELECT value FROM stockprop WHERE type_id=".$this->type." ORDER BY value");
+		 tripal_db_set_active($previous_db);
+			while ($r = db_fetch_object($resource)) {
+				$options[$r->value] = $r->value;
+			}
+			$form['value'] = array(
+        '#type' => 'select',
+        '#title' => $this->options['label'],
+        '#options' => $options,
+        '#default_value' => $this->value,
+      );
+		} else {
+			$form['value'] = array(
+  	    '#type' => 'textfield',
+    	  '#title' => t('Value'),
+      	'#default_value' => $this->value,
+    	);
+    }
+  }
+
+  function operator_options() {
+    return array(
+      '=' => t('Is equal to'),
+      '!=' => t('Is not equal to'),
+      '~' => t('Contains'),
+      '!~' => t('Does not contain'),
+      'IS NOT NULL' => t('Is Present (Not Empty)'),
+      'IS NULL' => t('Is Absent (Empty)'),
+    );
+  }
+
+ /**
+  * Render our chunk of the exposed filter form when selecting
+  */
+  function exposed_form(&$form, &$form_state) {
+    if (empty($this->options['exposed'])) {
+      return;
+    }
+
+    if (!empty($this->options['expose']['use_type']) && !empty($this->options['expose']['type'])) {
+      $type = $this->options['expose']['type'];
+      $form[$type] = array(
+        '#type' => 'select',
+        '#title' => t('Property Types'),
+        '#options' => $this->type_options(),
+        '#default_value' => $this->type,  
+      );
+
+      if (isset($form[$type]['#title'])) {
+        unset($form[$type]['#title']);
+      }
+    }
+
+    if (!empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator'])) {
+      $operator = $this->options['expose']['operator'];
+      $this->operator_form($form, $form_state);
+      $form[$operator] = $form['operator'];
+
+      if (isset($form[$operator]['#title'])) {
+        unset($form[$operator]['#title']);
+      }
+
+      $this->exposed_translate($form[$operator], 'operator');
+
+      unset($form['operator']);
+    }
+
+    if (!empty($this->options['expose']['identifier'])) {
+      $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']);
+      }
+    }
+  }
+
+  function expose_form_left(&$form, &$form_state) {
+    $form['expose']['label'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $this->options['expose']['label'],
+      '#title' => t('Label'),
+      '#size' => 40,
+    );
+
+    $form['expose']['identifier'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $this->options['expose']['identifier'],
+      '#title' => t('Filter identifier'),
+      '#size' => 40,
+      '#description' => t('This will appear in the URL after the ? to identify this filter. Cannot be blank.'),
+    );
+    
+    $form['expose']['display_type'] = array(
+    	'#type' => 'radios',
+    	'#default_value' => $this->options['expose']['display_type'],
+    	'#title' => t('Display Type'),
+    	'#description' => t('This will change the form item type of the exposed value form. ie: it can be used to let the user select the property value from a select box rather than a textfield.'),
+			'#options' => array(
+				'textfield' => 'Text Field',
+				'select' => 'Drop Down',
+			),
+    );
+  }
+
+  function expose_form_right(&$form, &$form_state) {
+    if (!empty($form['type']['#type'])) {
+      $form['expose']['use_type'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Unlock Property Type'),
+        '#description' => t('When checked, the property type will be exposed to the user'),
+        '#default_value' => !empty($this->options['expose']['use_type']),
+      );
+      $form['expose']['type'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $this->options['expose']['type'],
+        '#title' => t('Property Type identifier'),
+        '#size' => 40,
+        '#description' => t('This will appear in the URL after the ? to identify this property type.'),
+        '#process' => array('views_process_dependency'),
+        '#dependency' => array(
+          'edit-options-expose-use-type' => array(1)
+        ),
+      );
+    }
+    else {
+      $form['expose']['type'] = array(
+        '#type' => 'value',
+        '#value' => '',
+      );
+    }
+
+    $form['expose']['identifier'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $this->options['expose']['identifier'],
+      '#title' => t('Filter identifier'),
+      '#size' => 40,
+      '#description' => t('This will appear in the URL after the ? to identify this filter. Cannot be blank.'),
+    );
+
+    if (!empty($form['operator']['#type'])) {
+      $form['expose']['use_operator'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Unlock operator'),
+        '#description' => t('When checked, the operator will be exposed to the user'),
+        '#default_value' => !empty($this->options['expose']['use_operator']),
+      );
+      $form['expose']['operator'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $this->options['expose']['operator'],
+        '#title' => t('Operator identifier'),
+        '#size' => 40,
+        '#description' => t('This will appear in the URL after the ? to identify this operator.'),
+        '#process' => array('views_process_dependency'),
+        '#dependency' => array(
+          'edit-options-expose-use-operator' => array(1)
+        ),
+      );
+    }
+    else {
+      $form['expose']['operator'] = array(
+        '#type' => 'value',
+        '#value' => '',
+      );
+    }
+    
+    $form['expose']['optional'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Optional'),
+      '#description' => t('This exposed filter is optional and will have added options to allow it not to be set.'),
+      '#default_value' => $this->options['expose']['optional'],
+    );
+  }
+  
+  
+}