Просмотр исходного кода

fix to cvterm select handler so that it works for non-type_id fields

Lacey Sanderson 12 лет назад
Родитель
Сommit
8f8a2c5050

+ 6 - 6
tripal_views/views/handlers/tripal_views_handler_filter_select_cvterm.inc

@@ -62,9 +62,9 @@ class tripal_views_handler_filter_select_cvterm extends views_handler_filter_str
     }
     else {
       // @coder-ignore: non-drupal schema therefore table prefixing does not apply
-      $sql = "SELECT cvterm_id, name FROM cvterm WHERE cvterm_id IN (SELECT distinct(type_id) FROM %s)";
+      $sql = "SELECT cvterm_id, name FROM cvterm WHERE cvterm_id IN (SELECT distinct(%s) FROM %s)";
       $previous_db = tripal_db_set_active('chado');
-      $resource = db_query($sql, $this->table);
+      $resource = db_query($sql, $this->field, $this->table);
       tripal_db_set_active($previous_db);
       $cvterms = array();
       while ( $r = db_fetch_object($resource) ) {
@@ -154,6 +154,7 @@ class tripal_views_handler_filter_select_cvterm extends views_handler_filter_str
     }
 
     $this->ensure_my_table();
+    $field = "$this->table_alias.$this->real_field";
 
     $table = $this->query->get_table_info($this->table);
     if (preg_match('/aggregator/', $table['join']->definition['handler'])) {
@@ -179,15 +180,15 @@ class tripal_views_handler_filter_select_cvterm extends views_handler_filter_str
               $holders[] = "'%s'";
             }
           }
-          $where = "cvterm.cvterm_id IN (" . implode(", ", $holders) . ")";
+          $where = $field . " IN (" . implode(", ", $holders) . ")";
         }
       }
       elseif ($this->value != 'All') {
         if (preg_match('/^\d+$/', $this->value)) {
-          $where = 'cvterm.cvterm_id=%d';
+          $where = $field . ' = %d';
         }
         else {
-          $where = "cvterm.name" . $this->operator . "'%s'";
+          $where = $field . " " . $this->operator . " '%s'";
         }
       }
 
@@ -200,7 +201,6 @@ class tripal_views_handler_filter_select_cvterm extends views_handler_filter_str
       // Only base records with value in the aggregated field
       // This doesn't restrict the items in the aggregate field
       $this->ensure_my_table();
-      $field = "$this->table_alias.$this->real_field";
       if ($this->options['agg']['records_with']) {
         $where = "'%s' = ANY($field)";
         $this->query->add_where($this->options['group'], $where, $this->value);