Browse Source

Fixed some more issues with querying/sorting of the contact linker field. Fixes a bug with filters by properties

Stephen Ficklin 7 years ago
parent
commit
4feb7521f5

+ 6 - 0
tripal/tripal.views_default.inc

@@ -145,6 +145,12 @@ function tripal_bundle_default_views(&$views) {
         $handler->display->display_options['fields']['schema__description']['alter']['trim'] = TRUE;
       }
 
+      // Add a filter to show published content only.
+      $handler->display->display_options['filters']['status']['id'] = 'status';
+      $handler->display->display_options['filters']['status']['table'] = $base_table;
+      $handler->display->display_options['filters']['status']['field'] = 'status';
+      $handler->display->display_options['filters']['status']['value'] = '1';
+
       // Filter criterion.
       if (in_array($field_name, array('data__identifier', 'schema__name',
           'data__accession', 'rdfs__label', 'taxrank__genus',

+ 1 - 0
tripal/tripal_views_query.inc

@@ -124,6 +124,7 @@ class tripal_views_query extends views_plugin_query {
     );
 
     if ($value) {
+
       // Handle the bundle properties separate from real fields.
       if ($field_name == 'entity_id' or $field_name == 'status') {
         $this->query->propertyCondition($field_name, $value, $operator);

+ 9 - 10
tripal_chado/includes/TripalFields/chado_linker__contact/chado_linker__contact.inc

@@ -238,30 +238,29 @@ class chado_linker__contact extends ChadoField {
 
     // Get the FK that links to the base record.
     $schema = chado_get_schema($contact_linker);
-    $base_table = $entity->chado_table;
     $pkey = $schema['primary key'][0];
     $fkey_lcolumn = key($schema['foreign keys'][$base_table]['columns']);
     $fkey_rcolumn = $schema['foreign keys'][$base_table]['columns'][$fkey_lcolumn];
 
     // Join the contact linker table and then join the contact table.
     $calias = $contact_linker . '_contact';
-    $this->queryJoinOnce($query, $contact_linker, $alias, "base.$fkey_rcolumn = $alias.$fkey_lcolumn");
-    $this->queryJoinOnce($query, 'contact', $calias, "$calias_contact.contact_id = $alias.contact_id");
+    $this->queryJoinOnce($query, $contact_linker, $alias, "base.$fkey_rcolumn = $alias.$fkey_lcolumn", "LEFT OUTER");
+    $this->queryJoinOnce($query, 'contact', $calias, "$calias.contact_id = $alias.contact_id", "LEFT OUTER");
 
     // Search by the contact name
-    if ($condition['column'] == $field_term_id or
-        $condition['column'] == $field_term_id . ',' . $name_term) {
+    if ($order['column'] == $field_term_id or
+        $order['column'] == $field_term_id . ',' . $name_term) {
       $query->orderBy("$calias.name", $order['direction']);
     }
     // Search on the contact description.
-    if ($condition['column'] == $field_term_id . ',' . $description_term) {
-      $query->condition("$calias.description", $condition['value'], $operator);
+    if ($order['column'] == $field_term_id . ',' . $description_term) {
+      $query->orderBy("$calias.description", $order['direction']);
     }
     // Search on the contact type.
-    if ($condition['column'] == $field_term_id . ',' . $type_term) {
+    if ($order['column'] == $field_term_id . ',' . $type_term) {
       $talias = $contact_linker . '_contact_type';
-      $this->queryJoinOnce($query, 'cvterm', $talias, "$calias_contact.type_id = $talias.cvterm_id");
-      $query->condition("$talias.name", $condition['value'], $operator);
+      $this->queryJoinOnce($query, 'cvterm', $talias, "$calias.type_id = $talias.cvterm_id", "LEFT OUTER");
+      $query->orderBy("$talias.name", $order['direction']);
     }
   }
 }

+ 8 - 2
tripal_chado/includes/tripal_chado.field_storage.inc

@@ -555,6 +555,12 @@ function tripal_chado_field_storage_query($query) {
   // Make sure we only get records of the correct entity type
   $cquery->condition('TE.bundle', $query->entityConditions['bundle']['value']);
 
+  // Iterate through all the property conditions. These will be filters
+  // on the tripal_entity table.
+  foreach ($query->propertyConditions as $index => $condition) {
+    $cquery->condition('TE.' . $condition['column'], $condition['value']);
+  }
+
   // Now set any ordering.
   foreach ($query->order as $index => $sort) {
     // Add in property ordering.
@@ -622,8 +628,8 @@ function tripal_chado_field_storage_query($query) {
     } // end if ($sort['type'] == 'field') {
   } // end foreach ($query->order as $index => $sort) {
 
-  //dpm($cquery->__toString());
-  //dpm($cquery->getArguments());
+  dpm($cquery->__toString());
+  dpm($cquery->getArguments());
 
   $records = $cquery->execute();