]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Running egef_annotation_calculation() through elgg_get_annotations() instead of elgg_...
authorBrett Profitt <brett.profitt@gmail.com>
Sat, 9 Apr 2011 21:45:42 +0000 (17:45 -0400)
committerBrett Profitt <brett.profitt@gmail.com>
Sat, 9 Apr 2011 21:45:42 +0000 (17:45 -0400)
engine/lib/annotations.php
engine/lib/metastrings.php

index 1178a079f23e58489b921b88436944c8647619d0..7a4e62921297ab4207306ae279aae65d5ed9f3f2 100644 (file)
@@ -386,21 +386,27 @@ function elgg_list_entities_from_annotations($options = array()) {
 }
 
 /**
- * Get entities ordered by a mathematical calculation
+ * Get entities ordered by a mathematical calculation on annotation values
+ *
+ * @todo I think at some point this could run through elgg_get_annotations() and pass a the callback
+ * as entity_row_to_elggstar
  *
  * @param array $options An options array:
- *     'calculation' => The calculation to use. Must be a valid MySQL function.
- *                   Defaults to sum.  Result selected as 'calculated'.
- *     'order_by'    => The order for the sorting. Defaults to 'calculated desc'.
+ *     'annotation_calculation' => The calculation to use. Must be a valid MySQL function.
+ *                              Defaults to sum.  Result selected as 'annotation_calculation'.
+ *     'order_by'               => The order for the sorting. Defaults to 'calculation desc'.
+ *     'annotation_names'       => The names of annotations on the entity.
+ *     'annotation_values'          => The values of annotations on the entity.
+ *
+ *     'metadata_names'         => The name of metadata on the entity.
+ *     'metadata_values'        => The value of metadata on the entitiy.
  *
  * @return mixed
  */
 function elgg_get_entities_from_annotation_calculation($options) {
-       global $CONFIG;
-
        $defaults = array(
-               'calculation'   =>      'sum',
-               'order_by'              =>      'calculated desc',
+               'calculation' => 'sum',
+               'order_by' => 'calculation desc'
        );
 
        $options = array_merge($defaults, $options);
@@ -408,17 +414,20 @@ function elgg_get_entities_from_annotation_calculation($options) {
        $function = sanitize_string(elgg_extract('calculation', $options, 'sum', false));
 
        // you must cast this as an int or it sorts wrong.
-       $options['selects'][] = "$function(cast(msv.string as signed)) as calculated";
-       $options['selects'][] = "msn.string as value";
-       $options['order_by'] = 'calculated desc';
+       $options['selects'][] = 'e.*';
+       $options['selects'][] = "$function(cast(v.string as signed)) as calculation";
 
        // need our own join to get the values.
-       $db_prefix = get_config('dbprefix');
-       $options['joins'][] = "JOIN {$db_prefix}annotations calc_table on e.guid = calc_table.entity_guid";
-       $options['joins'][] = "JOIN {$db_prefix}metastrings msv on calc_table.value_id = msv.id";
-       $options['wheres'][] = "calc_table.name_id = n_table.name_id";
+//     $options['joins'][] = "JOIN {$db_prefix}metastrings msv ON a.value_id = msv.id";
+//     $options['joins'][] = "JOIN {$db_prefix}entities ae ON a.entity_guid = ae.guid";
+
+       $options['wheres'][] = get_access_sql_suffix('n_table');
+//     $options['wheres'][] = "e.guid = a.entity_guid";
+       $options['group_by'] = 'n_table.entity_guid';
+
+       $options['callback'] = 'entity_row_to_elggstar';
 
-       return elgg_get_entities_from_annotations($options);
+       return elgg_get_annotations($options);
 }
 
 /**
index 47712d3fa900eae6a304545e1519bf5bf1e00680..6db4e6d7c84ace9cb50f9a2877adcec467285c82 100644 (file)
@@ -406,8 +406,18 @@ function elgg_get_metastring_based_objects($options) {
        }
 
        if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) {
+               // evalutate selects
+               if ($options['selects']) {
+                       $selects = '';
+                       foreach ($options['selects'] as $select) {
+                               $selects .= ", $select";
+                       }
+               } else {
+                       $selects = '';
+               }
+
                $query = "SELECT DISTINCT n_table.*, n.string as name,
-                       v.string as value FROM {$db_prefix}$type n_table";
+                       v.string as value{$selects} FROM {$db_prefix}$type n_table";
        } else {
                $query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table";
        }