]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Refs #3195. Changed the way annotation calculations are performed. Seems to be workin...
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Thu, 14 Apr 2011 23:06:51 +0000 (23:06 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Thu, 14 Apr 2011 23:06:51 +0000 (23:06 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@9000 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/annotations.php
engine/lib/deprecated-1.8.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 165546d31aa3468f4fdda6b0af4d1ba47cbde1b9..27a973601a907e5e0ecd561bb5a673b7ad259f43 100644 (file)
@@ -115,7 +115,7 @@ function get_entities_from_annotations_calculate_x($sum = "sum", $entity_type =
        $options['limit'] = $limit;
        $options['offset'] = $offset;
 
-       $options['order_by'] = "calculated $orderdir";
+       $options['order_by'] = "calculation $orderdir";
 
        $options['count'] = $count;
 
@@ -179,7 +179,7 @@ function get_entities_from_annotation_count($entity_type = "", $entity_subtype =
        $options['limit'] = $limit;
        $options['offset'] = $offset;
 
-       $options['order_by'] = "calculated $orderdir";
+       $options['order_by'] = "calculation $orderdir";
 
        $options['count'] = $count;
 
@@ -241,7 +241,7 @@ function list_entities_from_annotation_count($entity_type = "", $entity_subtype
 
        $options['limit'] = $limit;
 
-       $options['order_by'] = "calculated $orderdir";
+       $options['order_by'] = "calculation $orderdir";
 
        return elgg_get_entities_from_annotation_calculation($options);
 }
@@ -3492,7 +3492,7 @@ $asc = false, $fullview = true, $listtypetoggle = false, $pagination = true, $or
 
        $options['limit'] = $limit;
 
-       $options['order_by'] = "calculated $orderdir";
+       $options['order_by'] = "calculation $orderdir";
 
        return elgg_get_entities_from_annotation_calculation($options);
 }
index 913d33a7d422fa476db6d032f690547a721f7db8..604c7f765bcf3e93e150d5b82268f81a93461e01 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";
        }