diff options
Diffstat (limited to 'engine')
| -rw-r--r-- | engine/lib/annotations.php | 41 | ||||
| -rw-r--r-- | engine/lib/metastrings.php | 12 | 
2 files changed, 36 insertions, 17 deletions
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index 1178a079f..7a4e62921 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -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);  }  /** diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php index 47712d3fa..6db4e6d7c 100644 --- a/engine/lib/metastrings.php +++ b/engine/lib/metastrings.php @@ -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";  	}  | 
