Bläddra i källkod

Moved wrapper function out of chado_handler_field and into chado_wrapper_functions.inc

Lacey Sanderson 13 år sedan
förälder
incheckning
acd1ab1437

+ 8 - 44
base/tripal_core/views/handlers/chado_views_handler_field.inc

@@ -51,13 +51,7 @@ class chado_views_handler_field extends views_handler_field {
    */
   function query () {
     parent::query();
-    
-    $table = $this->query->get_table_info($this->table);
-    if (preg_match('/aggregator/',$table['join']->definition['handler'])) {
-      $this->aggregated = TRUE;
-    } else {
-      $this->aggregated = FALSE;
-    }
+    $this->aggregated = chado_wrapper_is_aggregated_by_join($this);
   }
   
   /**
@@ -66,18 +60,10 @@ class chado_views_handler_field extends views_handler_field {
   function pre_render (&$values) {
     
     // further check the results to see if this field is a postgresql array
-    if (!$this->aggregated) {
-      if (preg_match('/^{.*}$/',$values[0]->{$this->field_alias})) {
-        $this->aggregated = TRUE;
-      }
-    }
+    $this->aggregated = chado_wrapper_is_aggregated_by_result($this, $values);
     
     // Split Aggregated Results
-    if ($this->aggregated) {
-      foreach($values as $k => $v) {
-        $values[$k]->{$this->field_alias} = chado_wrapper_split_array_agg_results($this, $v->{$this->field_alias});
-      }
-    }
+    chado_wrapper_split_array_agg_results($this, $values);
     
   }
   
@@ -91,33 +77,11 @@ class chado_views_handler_field extends views_handler_field {
    *   The values retrieved from the database.
    */
   function render($values) {
-
-    // If it's aggregated (an array), then render each part 
-    // using the parent render functionality
-    if ($this->aggregated) {
-      $items = array();
-      
-      $parts = $values->{$this->field_alias};
-      foreach ($parts as $p) {
-        $v[ $this->field_alias ] = $p;
-        $val = (object) $v;
-        $items[] = parent::render($val);
-        unset($v, $val);
-      }
-      
-      if ($this->options['type'] == 'separator') {
-        return implode(check_plain($this->options['separator']), $items);
-      }
-      else {
-        return theme('item_list', $items, NULL, $this->options['type']);
-      }
-    
-    // Otherwise it is not aggragated
-    // Just render like the default handler would
-    } else {
-      return parent::render($values);
-    }
-    
+    return chado_wrapper_render_items($this, $values);
+  }
+  
+  function parent_render($val) {
+    return parent::render($val);
   }
   
 }

+ 83 - 5
base/tripal_core/views/handlers/chado_wrapper_functions.inc

@@ -9,11 +9,89 @@
  * @return
  *   A PHP version of the SQL array (ie: array('','^(.*)$','646','tripal_analysis_blast') )
  */
-function chado_wrapper_split_array_agg_results($handler, $field) {
+function chado_wrapper_split_array_agg_results($handler, &$values) {
+
+  if ($handler->aggregated) {
+    foreach($values as $k => $v) {
+      
+      if(preg_match('/^{(.*)}$/',$v->{$handler->field_alias}, $matches)) {
+        $values[$k]->{$handler->field_alias} = str_getcsv($matches[1]);
+      } else {
+        $values[$k]->{$handler->field_alias} = array();
+      }
+    }
+  }
   
-  if(preg_match('/^{(.*)}$/',$field, $matches)) {
-    return str_getcsv($matches[1]);
-  } else {
-    return array();
+  return $values;
+}
+
+/**
+ * Determines if the current field is generated via the aggregated join handler
+ *
+ * @param $handler
+ *   pass in $this from handler::query()
+ *
+ * @return
+ *   TRUE/FALSE if or if not the field has the aggregated join handler
+ */
+function chado_wrapper_is_aggregated_by_join ($handler) {
+  $aggregated = FALSE;
+  
+  $table = $handler->query->get_table_info($handler->table);
+  if (preg_match('/aggregator/',$table['join']->definition['handler'])) {
+    $aggregated = TRUE;
   }
+  
+  return $aggregated;
 }
+
+/**
+ * Determines if the current field is generated via the result returned
+ *
+ * @param $handler
+ *   pass in $this from handler::pre_render()
+ * @param $values
+ *   pass in $values from handler::pre_render()
+ *
+ * @return
+ *   TRUE/FALSE if or if not the field is aggregated
+ */
+function chado_wrapper_is_aggregated_by_result ($handler, $values) {
+  $aggregated = FALSE;
+  
+  if (preg_match('/^{.*}$/',$values[0]->{$handler->field_alias})) {
+    $aggregated = TRUE;
+  }
+  
+  return $aggregated;
+}
+
+function chado_wrapper_render_items($handler, $values) {
+
+  // If it's aggregated (an array), then render each part 
+  // using the parent render functionality
+  if ($handler->aggregated) {
+    
+    $items = array();
+    
+    $parts = $values->{$handler->field_alias};
+    foreach ($parts as $p) {
+      $v[ $handler->field_alias ] = $p;
+      $val = (object) $v;
+      $items[] = $handler->parent_render($val);
+      unset($v, $val);
+    }
+    
+    if ($handler->options['type'] == 'separator') {
+      return implode(check_plain($handler->options['separator']), $items);
+    }
+    else {
+      return theme('item_list', $items, NULL, $handler->options['type']);
+    }
+    
+  // Otherwise it is not aggragated
+  // Just render like the default handler would
+  } else {
+    return $handler->parent_render($values);
+  }      
+}