diff options
-rw-r--r-- | engine/lib/annotations.php | 13 | ||||
-rw-r--r-- | engine/lib/metastrings.php | 35 |
2 files changed, 17 insertions, 31 deletions
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index ca8f6b2e1..7a4e62921 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -404,7 +404,6 @@ function elgg_list_entities_from_annotations($options = array()) { * @return mixed */ function elgg_get_entities_from_annotation_calculation($options) { - $db_prefix = elgg_get_config('dbprefix'); $defaults = array( 'calculation' => 'sum', 'order_by' => 'calculation desc' @@ -416,14 +415,14 @@ function elgg_get_entities_from_annotation_calculation($options) { // you must cast this as an int or it sorts wrong. $options['selects'][] = 'e.*'; -// $options['selects'][] = 'a_msv as value'; - $options['selects'][] = "$function(cast(a_msv.string as signed)) as calculation"; + $options['selects'][] = "$function(cast(v.string as signed)) as calculation"; - // need our own join to get the values because the lower level functions don't - // add all the joins if it's a different callback. - $options['joins'][] = "JOIN {$db_prefix}metastrings a_msv ON n_table.value_id = a_msv.id"; + // need our own join to get the values. +// $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"; - // don't need access control because it's taken care of by elgg_get_annotations. + $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'; diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php index 4dda05e6b..655617ac6 100644 --- a/engine/lib/metastrings.php +++ b/engine/lib/metastrings.php @@ -373,24 +373,11 @@ function elgg_get_metastring_based_objects($options) { } $joins = $options['joins']; - $joins[] = "JOIN {$db_prefix}entities e ON n_table.entity_guid = e.guid"; - - if (!is_array($options['selects'])) { - $options['selects'] = array($options['selects']); - } - - $selects = $options['selects']; - // For performance reasons we don't want the joins required for metadata / annotations - // unless we're going through one of their callbacks. - // this means we expect the functions passing different callbacks to pass their required joins. - if ($options['callback'] == 'row_to_elggmetadata' || $options['callback'] == 'row_to_elggannotation') { - $joins[] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id"; - $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id"; + $joins[] = "JOIN {$db_prefix}entities e ON n_table.entity_guid = e.guid"; + $joins[] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id"; + $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id"; - $selects[] = 'n.string as name'; - $selects[] = 'v.string as value'; - } // remove identical join clauses $joins = array_unique($joins); @@ -419,19 +406,19 @@ function elgg_get_metastring_based_objects($options) { } if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) { - $selects = array_unique($selects); // evalutate selects - $select_str = ''; - if ($selects) { - foreach ($selects as $select) { - $select_str .= ", $select"; + if ($options['selects']) { + $selects = ''; + foreach ($options['selects'] as $select) { + $selects .= ", $select"; } + } else { + $selects = ''; } - $query = "SELECT DISTINCT n_table.*{$select_str} FROM {$db_prefix}$type n_table"; + $query = "SELECT DISTINCT n_table.*, n.string as name, + v.string as value{$selects} FROM {$db_prefix}$type n_table"; } else { - // @todo this will break if you're counting on an annotation calculation because of the joins - // that's a dumb thing to do anyway, but it shouldn't make bad queries $query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table"; } |