|
@@ -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);
|
|
|
+ }
|
|
|
+}
|