|  | @@ -8,7 +8,63 @@
 | 
	
		
			
				|  |  |   * @ingroup views_filter_handlers
 | 
	
		
			
				|  |  |   * @ingroup tripal_core
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -class tripal_views_handler_filter_select_string extends chado_views_handler_filter_string {
 | 
	
		
			
				|  |  | +class tripal_views_handler_filter_select_string extends views_handler_filter_string {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * Provide the options used in the select list.
 | 
	
		
			
				|  |  | +   * Override this function in extended handlers to easily change option list.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @return
 | 
	
		
			
				|  |  | +   *   An array of options where the key is the value of this field in the database
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  function get_select_options() {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // build a where clause that will filter the list in the drop box
 | 
	
		
			
				|  |  | +    // using fields that are not exposed and that are for the table
 | 
	
		
			
				|  |  | +    // from whcih the values in the drop box will be slected and
 | 
	
		
			
				|  |  | +    // we only want to use non-exposed fields because these are not
 | 
	
		
			
				|  |  | +    // available to the user to edit--they're fixed.
 | 
	
		
			
				|  |  | +    $where = '';
 | 
	
		
			
				|  |  | +    $filters = (is_array($this->view->filter)) ? $this->view->filter : array();
 | 
	
		
			
				|  |  | +    foreach ($filters as $filter_name => $details) {
 | 
	
		
			
				|  |  | +       // we only want to inclue non-exposed filters
 | 
	
		
			
				|  |  | +       if ($details->options['exposed'] == FALSE) {
 | 
	
		
			
				|  |  | +          // we only want to filter on the table we're getting the list from
 | 
	
		
			
				|  |  | +          if (strcmp($details->table, $this->table)==0) {
 | 
	
		
			
				|  |  | +            $where .= "$details->field $details->operator " . $details->value['value'];
 | 
	
		
			
				|  |  | +            $where .= ' AND ';
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +       }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if ($where) {
 | 
	
		
			
				|  |  | +       $where = "WHERE $where";
 | 
	
		
			
				|  |  | +       $where = substr($where, 0, -5); # remove the final ' AND '
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // get the values from the table
 | 
	
		
			
				|  |  | +    $sql = 'SELECT ' . $this->real_field . ' FROM {' . $this->table . '}' . $where . ' ORDER BY ' . $this->field . ' ASC';
 | 
	
		
			
				|  |  | +    $results = chado_query($sql);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Build the select box options
 | 
	
		
			
				|  |  | +    $max_length = $this->options['max_length'];
 | 
	
		
			
				|  |  | +    if (!$max_length) {
 | 
	
		
			
				|  |  | +      $max_length = 40;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $options = array();
 | 
	
		
			
				|  |  | +    if ($this->options['optional']) {
 | 
	
		
			
				|  |  | +      $options['All'] = '--Any--';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    foreach ($results as $r) {
 | 
	
		
			
				|  |  | +      if (drupal_strlen($r->{$this->field}) > $max_length) {
 | 
	
		
			
				|  |  | +        $options[$r->{$this->field}] = drupal_substr($r->{$this->field}, 0, $max_length) . '...';
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      else {
 | 
	
		
			
				|  |  | +        $options[$r->{$this->field}] = $r->{$this->field};
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return $options;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    function options_form(&$form, &$form_state) {
 | 
	
		
			
				|  |  |      parent::options_form($form, $form_state);
 | 
	
	
		
			
				|  | @@ -23,18 +79,18 @@ class tripal_views_handler_filter_select_string extends chado_views_handler_filt
 | 
	
		
			
				|  |  |        '#default_value' => ($this->options['values_form_type']) ? $this->options['values_form_type'] : 'select',
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    $form['multiple'] = array(
 | 
	
		
			
				|  |  | +    $form['select_multiple'] = array(
 | 
	
		
			
				|  |  |        '#type' => 'checkbox',
 | 
	
		
			
				|  |  |        '#title' => t('Select Multiple'),
 | 
	
		
			
				|  |  |        '#description' => t('Allows more then one option to be selected.'),
 | 
	
		
			
				|  |  | -      '#default_value' => (isset($this->options['multiple'])) ? $this->options['multiple'] : FALSE,
 | 
	
		
			
				|  |  | +      '#default_value' => (isset($this->options['select_multiple'])) ? $this->options['select_multiple'] : FALSE,
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    $form['optional'] = array(
 | 
	
		
			
				|  |  | +    $form['select_optional'] = array(
 | 
	
		
			
				|  |  |        '#type' => 'checkbox',
 | 
	
		
			
				|  |  |        '#title' => t('Optional'),
 | 
	
		
			
				|  |  |        '#description' => t('Adds --Any-- to the available options.'),
 | 
	
		
			
				|  |  | -      '#default_value' => (isset($this->options['optional'])) ? $this->options['optional'] : TRUE,
 | 
	
		
			
				|  |  | +      '#default_value' => (isset($this->options['select_optional'])) ? $this->options['select_optional'] : TRUE,
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      $form['max_length'] = array(
 | 
	
	
		
			
				|  | @@ -53,6 +109,15 @@ class tripal_views_handler_filter_select_string extends chado_views_handler_filt
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * Assign our new form elements values to the options array
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  function options_submit(&$form, &$form_state) {
 | 
	
		
			
				|  |  | +    $this->options['values_form_type'] = $form_state['input']['options']['values_form_type'];
 | 
	
		
			
				|  |  | +    $this->options['select_multiple'] = $form_state['input']['options']['select_multiple'];
 | 
	
		
			
				|  |  | +    $this->options['select_optional'] = $form_state['input']['options']['select_optional'];
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |   /**
 | 
	
		
			
				|  |  |    * Defines the value field in both the views filter options form
 | 
	
		
			
				|  |  |    *   and the exposed form
 | 
	
	
		
			
				|  | @@ -60,106 +125,40 @@ class tripal_views_handler_filter_select_string extends chado_views_handler_filt
 | 
	
		
			
				|  |  |    function value_form(&$form, &$form_state) {
 | 
	
		
			
				|  |  |      parent::value_form($form, $form_state);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (preg_match('/textfield/', $this->options['values_form_type'])) {
 | 
	
		
			
				|  |  | -      $form['value'] = array(
 | 
	
		
			
				|  |  | -        '#type' => 'textfield',
 | 
	
		
			
				|  |  | -        '#title' => t('%label', array('%label' => $this->options['label'])),
 | 
	
		
			
				|  |  | -        '#default_value' => $this->value,
 | 
	
		
			
				|  |  | -      );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      // build a where clause that will filter the list in the drop box
 | 
	
		
			
				|  |  | -      // using fields that are not exposed and that are for the table
 | 
	
		
			
				|  |  | -      // from whcih the values in the drop box will be slected and
 | 
	
		
			
				|  |  | -      // we only want to use non-exposed fields because these are not
 | 
	
		
			
				|  |  | -      // available to the user to edit--they're fixed.
 | 
	
		
			
				|  |  | -      $where = '';
 | 
	
		
			
				|  |  | -      $filters = (is_array($this->view->filter)) ? $this->view->filter : array();
 | 
	
		
			
				|  |  | -      foreach ($filters as $filter_name => $details) {
 | 
	
		
			
				|  |  | -         // we only want to inclue non-exposed filters
 | 
	
		
			
				|  |  | -         if ($details->options['exposed'] == FALSE) {
 | 
	
		
			
				|  |  | -            // we only want to filter on the table we're getting the list from
 | 
	
		
			
				|  |  | -            if (strcmp($details->table, $this->table)==0) {
 | 
	
		
			
				|  |  | -              $where .= "$details->field $details->operator " . $details->value['value'];
 | 
	
		
			
				|  |  | -              $where .= ' AND ';
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -         }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      if ($where) {
 | 
	
		
			
				|  |  | -         $where = "WHERE $where";
 | 
	
		
			
				|  |  | -         $where = substr($where, 0, -5); # remove the final ' AND '
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      // get the values from the table
 | 
	
		
			
				|  |  | -      $sql = "SELECT $this->real_field FROM {$this->table} $where ORDER BY $this->field ASC";
 | 
	
		
			
				|  |  | -      $results = chado_query($sql);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      // Build the select box options
 | 
	
		
			
				|  |  | -      $max_length = $this->options['max_length'];
 | 
	
		
			
				|  |  | -      if (!$max_length) {
 | 
	
		
			
				|  |  | -        $max_length = 40;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      $options = array();
 | 
	
		
			
				|  |  | -      if ($this->options['optional']) {
 | 
	
		
			
				|  |  | -        //$options['<select '.$this->table.'>'] = '--None--';
 | 
	
		
			
				|  |  | -        $options['All'] = '--Any--';
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      // D7 TODO: Check DBTNG changes work
 | 
	
		
			
				|  |  | -      foreach ($results as $r) {
 | 
	
		
			
				|  |  | -        if (drupal_strlen($r->{$this->field}) > $max_length) {
 | 
	
		
			
				|  |  | -          $options[$r->{$this->field}] = drupal_substr($r->{$this->field}, 0, $max_length) . '...';
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else {
 | 
	
		
			
				|  |  | -          $options[$r->{$this->field}] = $r->{$this->field};
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | +    if (preg_match('/select/', $this->options['values_form_type'])) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        //Select List
 | 
	
		
			
				|  |  |        $form['value'] = array(
 | 
	
		
			
				|  |  |            '#type' => 'select',
 | 
	
		
			
				|  |  |            '#title' => t('%label', array('%label' => $this->options['label'])),
 | 
	
		
			
				|  |  | -          '#options' => $options,
 | 
	
		
			
				|  |  | +          '#options' => $this->get_select_options(),
 | 
	
		
			
				|  |  |            '#default_value' => $this->value,
 | 
	
		
			
				|  |  |        );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      if ($this->options['multiple']) {
 | 
	
		
			
				|  |  | +      if ($this->options['select_multiple']) {
 | 
	
		
			
				|  |  |          $form['value']['#multiple'] = TRUE;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | - /**
 | 
	
		
			
				|  |  | -  * 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']);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    else {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    $this->exposed_translate($form[$value], 'value');
 | 
	
		
			
				|  |  | +      $form['value'] = array(
 | 
	
		
			
				|  |  | +        '#type' => 'textfield',
 | 
	
		
			
				|  |  | +        '#title' => t('%label', array('%label' => $this->options['label'])),
 | 
	
		
			
				|  |  | +        '#default_value' => $this->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';
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * Ensure the value form gets exposed correctly
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  function exposed_form(&$form, &$form_state) {
 | 
	
		
			
				|  |  | +    parent::exposed_form($form, $form_state);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if ($value != 'value') {
 | 
	
		
			
				|  |  | -      unset($form['value']);
 | 
	
		
			
				|  |  | +    if ($this->options['select_multiple']) {
 | 
	
		
			
				|  |  | +      $form[$this->options['id']]['#multiple'] = TRUE;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   /**
 | 
	
	
		
			
				|  | @@ -173,192 +172,26 @@ class tripal_views_handler_filter_select_string extends chado_views_handler_filt
 | 
	
		
			
				|  |  |        return;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    $this->ensure_my_table();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    $table = $this->query->get_table_info($this->table);
 | 
	
		
			
				|  |  | -    if (preg_match('/aggregator/', $table['join']->definition['handler'])) {
 | 
	
		
			
				|  |  | -      $this->aggregated = TRUE;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else {
 | 
	
		
			
				|  |  | -      $this->aggregated = FALSE;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // filter the aggregates
 | 
	
		
			
				|  |  | -    if ($this->options['agg']['aggregates_with']) {
 | 
	
		
			
				|  |  | -      $this->query_restrict_curr_table_records();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // filter the base table
 | 
	
		
			
				|  |  | -    if ($this->options['agg']['records_with']) {
 | 
	
		
			
				|  |  | -      $this->query_restrict_base_records();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /**
 | 
	
		
			
				|  |  | -   * This function alters the query by adding the appropriate WHERE
 | 
	
		
			
				|  |  | -   * to filter the base table to only those with the value in the aggregate array.
 | 
	
		
			
				|  |  | -   *
 | 
	
		
			
				|  |  | -   * Note: this function is called only from query()
 | 
	
		
			
				|  |  | -   */
 | 
	
		
			
				|  |  | -  function query_restrict_base_records() {
 | 
	
		
			
				|  |  | -    if (!$this->aggregated) {
 | 
	
		
			
				|  |  | -      // Not Aggregated ---------------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      $this->ensure_my_table();
 | 
	
		
			
				|  |  | -      $field = "$this->table_alias.$this->real_field";
 | 
	
		
			
				|  |  | -      $upper = $this->case_transform();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      if ($this->options['multiple'] AND is_array($this->value)) {
 | 
	
		
			
				|  |  | -        // Remove any if it's there
 | 
	
		
			
				|  |  | +    if (is_array($this->value)) {
 | 
	
		
			
				|  |  | +      if (isset($this->value['All'])) {
 | 
	
		
			
				|  |  |          unset($this->value['All']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if (sizeof($this->value)) {
 | 
	
		
			
				|  |  | -          $holders = array();
 | 
	
		
			
				|  |  | -          foreach ($this->value as $v) {
 | 
	
		
			
				|  |  | -            if (preg_match('/^[\d\.]+$/', $v)) {
 | 
	
		
			
				|  |  | -              $holders[] = '%f';
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            else {
 | 
	
		
			
				|  |  | -              $holders[] = "'%s'";
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          $where = "$field IN (" . implode(", ", $holders) . ")";
 | 
	
		
			
				|  |  | -          $this->query->add_where($this->options['group'], $where, $this->value);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      else {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // Deal with All/Any as value
 | 
	
		
			
				|  |  | -        if (preg_match('/All/', $this->value)) {
 | 
	
		
			
				|  |  | -          // Don't do anything
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else {
 | 
	
		
			
				|  |  | -          $info = $this->operators();
 | 
	
		
			
				|  |  | -          if (!empty($info[$this->operator]['method'])) {
 | 
	
		
			
				|  |  | -            $this->{$info[$this->operator]['method']}($field, $upper);
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else {
 | 
	
		
			
				|  |  | -      // Is Aggregated ----------------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      $this->ensure_my_table();
 | 
	
		
			
				|  |  | -      $field = "$this->table_alias.$this->real_field";
 | 
	
		
			
				|  |  | -      $upper = $this->case_transform();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      if ($this->options['multiple'] AND is_array($this->value)) {
 | 
	
		
			
				|  |  | -        // Remove any if it's there
 | 
	
		
			
				|  |  | -        unset($this->value['All']);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (sizeof($this->value) > 1) {
 | 
	
		
			
				|  |  | -          $holders = array();
 | 
	
		
			
				|  |  | -          foreach ($this->value as $v) {
 | 
	
		
			
				|  |  | -            $holders[] = "'%s'";
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          $where = $field .' && ARRAY[' . implode(", ", $holders) . ']';
 | 
	
		
			
				|  |  | -          $this->query->add_where($this->options['group'], $where, $this->value);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        elseif (sizeof($this->value) == 1) {
 | 
	
		
			
				|  |  | -          $where = "'%s' = ANY($field)";
 | 
	
		
			
				|  |  | -          $this->query->add_where($this->options['group'], $where, array_pop($this->value));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +      if ($this->operator == '!=') {
 | 
	
		
			
				|  |  | +        $this->operator = 'NOT IN';
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        else {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // Deal with All/Any as value
 | 
	
		
			
				|  |  | -        if (preg_match('/All/', $this->value)) {
 | 
	
		
			
				|  |  | -          // Don't do anything
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else {
 | 
	
		
			
				|  |  | -          $where = "'%s' = ANY($field)";
 | 
	
		
			
				|  |  | -          $this->query->add_where($this->options['group'], $where, $this->value);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        $this->operator = 'IN';
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  /**
 | 
	
		
			
				|  |  | -   * This function alters the query by adding the appropriate WHERE
 | 
	
		
			
				|  |  | -   * to filter the aggregates shown based on the value. Doesn't affect
 | 
	
		
			
				|  |  | -   * the number of base table records.
 | 
	
		
			
				|  |  | -   *
 | 
	
		
			
				|  |  | -   * Note: this function is called only from query()
 | 
	
		
			
				|  |  | -   */
 | 
	
		
			
				|  |  | -  function query_restrict_curr_table_records() {
 | 
	
		
			
				|  |  | +    $this->ensure_my_table();
 | 
	
		
			
				|  |  | +    $field = $this->table_alias . "." . $this->real_field;
 | 
	
		
			
				|  |  | +    $table = $this->query->get_table_info($this->table);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (!$this->aggregated) {
 | 
	
		
			
				|  |  | -      // Not Aggregated ---------------
 | 
	
		
			
				|  |  | -      // Warn the admin/user that they have selected that the aggregates should be filtered
 | 
	
		
			
				|  |  | -      // on a field that isn't aggregated...
 | 
	
		
			
				|  |  | -      watchdog(
 | 
	
		
			
				|  |  | -        'tripal_views',
 | 
	
		
			
				|  |  | -        'You have chosen to filter the aggregates shown for %table %field
 | 
	
		
			
				|  |  | -          in %view; however, that field is not aggregated (ie: it is part of the base table
 | 
	
		
			
				|  |  | -          or is a 1:1 relationship to the base table)',
 | 
	
		
			
				|  |  | -        array(
 | 
	
		
			
				|  |  | -          '%field' => $this->field,
 | 
	
		
			
				|  |  | -          '%table' => $this->table,
 | 
	
		
			
				|  |  | -          '%view' => $this->view->name
 | 
	
		
			
				|  |  | -        ),
 | 
	
		
			
				|  |  | -        WATCHDOG_WARNING
 | 
	
		
			
				|  |  | -      );
 | 
	
		
			
				|  |  | -      // Do nothing!
 | 
	
		
			
				|  |  | +    if ($this->value) {
 | 
	
		
			
				|  |  | +      $this->query->add_where($this->options['group'], $field, $this->value, $this->operator);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    else {
 | 
	
		
			
				|  |  | -      // Is Aggregated ----------------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      $this->ensure_my_table();
 | 
	
		
			
				|  |  | -      $field = "$this->table_alias.$this->real_field";
 | 
	
		
			
				|  |  | -      $upper = $this->case_transform();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      if ($this->options['multiple'] AND is_array($this->value)) {
 | 
	
		
			
				|  |  | -        // Remove any if it's there
 | 
	
		
			
				|  |  | -        unset($this->value['All']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if (sizeof($this->value) > 1) {
 | 
	
		
			
				|  |  | -          $holders = array();
 | 
	
		
			
				|  |  | -          foreach ($this->value as $v) {
 | 
	
		
			
				|  |  | -            $holders[] = "'%s'";
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -          $where = $field .' IN (' . implode(", ", $holders) . ')';
 | 
	
		
			
				|  |  | -          $where = vsprintf($where, $this->value);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          // Add the where to the chado aggregated join object for this table
 | 
	
		
			
				|  |  | -          // then the views_handler_join_chado_aggregator will add this to the WHERE
 | 
	
		
			
				|  |  | -          // clause of the sub-query generating the aggregated listing
 | 
	
		
			
				|  |  | -          $this->query->table_queue[ $this->table ]['join']->filter[] = $where;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        elseif (sizeof($this->value) == 1) {
 | 
	
		
			
				|  |  | -          $where = "$field = '%s'";
 | 
	
		
			
				|  |  | -          $where = vsprintf($where, $this->value);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          // Add the where to the chado aggregated join object for this table
 | 
	
		
			
				|  |  | -          // then the views_handler_join_chado_aggregator will add this to the WHERE
 | 
	
		
			
				|  |  | -          // clause of the sub-query generating the aggregated listing
 | 
	
		
			
				|  |  | -          $this->query->table_queue[ $this->table ]['join']->filter[] = $where;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      else {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // Deal with All/Any as value
 | 
	
		
			
				|  |  | -        if (preg_match('/All/', $this->value)) {
 | 
	
		
			
				|  |  | -          // Don't do anything
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else {
 | 
	
		
			
				|  |  | -          $where = "'%s' = ANY($field)";
 | 
	
		
			
				|  |  | -          $this->query->add_where($this->options['group'], $where, $this->value);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 |