diff options
Diffstat (limited to 'engine/lib')
| -rw-r--r-- | engine/lib/annotations.php | 22 | ||||
| -rw-r--r-- | engine/lib/metadata.php | 5 | ||||
| -rw-r--r-- | engine/lib/metastrings.php | 67 | 
3 files changed, 31 insertions, 63 deletions
| diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index cd733c629..7a4e62921 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -392,14 +392,14 @@ function elgg_list_entities_from_annotations($options = array()) {   * 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 '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. + * 	'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. + *	'metadata_names'         => The name of metadata on the entity. + *	'metadata_values'        => The value of metadata on the entitiy.   *   * @return mixed   */ @@ -410,18 +410,22 @@ function elgg_get_entities_from_annotation_calculation($options) {  	);  	$options = array_merge($defaults, $options); +  	$function = sanitize_string(elgg_extract('calculation', $options, 'sum', false)); -	$db_prefix = elgg_get_config('dbprefix');  	// you must cast this as an int or it sorts wrong.  	$options['selects'][] = 'e.*';  	$options['selects'][] = "$function(cast(v.string as signed)) as calculation"; +	// 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"; +  	$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'; -	$options['denormalize'] = 'name';  	return elgg_get_annotations($options);  } diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 26741af90..a6b1bb43a 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -290,11 +290,6 @@ $access_id = ACCESS_PRIVATE, $allow_multiple = false) {   */  function elgg_get_metadata(array $options = array()) {  	$options['metastring_type'] = 'metadata'; -	if (isset($options['joins'])) { -		if (!is_array($options['joins'])) { -			$options['joins'] = array($options['joins']); -		} -	}  	return elgg_get_metastring_based_objects($options);  } diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php index 983716925..655617ac6 100644 --- a/engine/lib/metastrings.php +++ b/engine/lib/metastrings.php @@ -229,8 +229,6 @@ function delete_orphaned_metastrings() {   *   *  metastring_type => STR metadata or annotation(s)   * - *	denormalize => Mixed Denormalize nothing (false, default), all, name, or value. - *   * @return mixed   * @access private   */ @@ -295,8 +293,7 @@ function elgg_get_metastring_based_objects($options) {  		'wheres'	=>	array(),  		'joins'		=>	array(), -		'callback'		=>	$callback, -		'denormalize'	=>	false +		'callback'	=> $callback  	);  	// @todo Ignore site_guid right now because of #2910 @@ -381,6 +378,7 @@ function elgg_get_metastring_based_objects($options) {  	$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"; +  	// remove identical join clauses  	$joins = array_unique($joins); @@ -395,7 +393,7 @@ function elgg_get_metastring_based_objects($options) {  	// metastrings  	$metastring_clauses = elgg_get_metastring_sql('n_table', $options['metastring_names'],  		$options['metastring_values'], null, $options['metastring_ids'], -		$options['metastring_case_sensitive'], $options['denormalize']); +		$options['metastring_case_sensitive']);  	if ($metastring_clauses) {  		$wheres = array_merge($wheres, $metastring_clauses['wheres']); @@ -407,12 +405,7 @@ function elgg_get_metastring_based_objects($options) {  		$options['metastring_calculation'] = 'count';  	} -	if ($options['metastring_calculation']) { -//		$joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id"; - -		$function = sanitise_string($options['metastring_calculation']); -		$query = "SELECT {$function}(v.string) as calculation FROM {$db_prefix}$type n_table"; -	} else { +	if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) {  		// evalutate selects  		if ($options['selects']) {  			$selects = ''; @@ -425,8 +418,8 @@ function elgg_get_metastring_based_objects($options) {  		$query = "SELECT DISTINCT n_table.*, n.string as name,  			v.string as value{$selects} FROM {$db_prefix}$type n_table"; -		 -//		$query = "SELECT DISTINCT n_table.*{$selects} FROM {$db_prefix}$type n_table"; +	} else { +		$query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table";  	}  	// add joins @@ -486,13 +479,11 @@ function elgg_get_metastring_based_objects($options) {   * @param array  $pairs          Name / value pairs. Not currently used.   * @param array  $ids            Metastring IDs   * @param bool   $case_sensitive Should name and values be case sensitive? - * @param mixed  $denormalize    Denormalize none (false, default), all, name, value. If operators - *                               are anything but = or IN you cannot denormalize value.   *   * @return array   */  function elgg_get_metastring_sql($table, $names = null, $values = null, -	$pairs = null, $ids = null, $case_sensitive = false, $denormalize = false) { +	$pairs = null, $ids = null, $case_sensitive = false) {  	if ((!$names && $names !== 0)  		&& (!$values && $values !== 0) @@ -515,7 +506,7 @@ function elgg_get_metastring_sql($table, $names = null, $values = null,  	$access = get_access_sql_suffix($table);  	$return = array ( -		'joins' => array(), +		'joins' => array (),  		'wheres' => array()  	); @@ -524,50 +515,28 @@ function elgg_get_metastring_sql($table, $names = null, $values = null,  	// get names wheres and joins  	$names_where = '';  	if ($names !== NULL) { -		// @todo only really needed for metadata (vs annotations) -//		$return['joins'][] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id"; -  		if (!is_array($names)) {  			$names = array($names);  		} -		 -		if ($denormalize == 'all' || $denormalize == 'name') { -			$name_ids = array(); -			foreach ($names as $name) { -				if (!$name) { -					$name = '0'; -				} - -				$name_ids[] = get_metastring_id($name, $case_sensitive); -			} -			$names_str = implode(',', $name_ids); -			if ($names_str) { -				$names_where = "(n_table.name_id IN ($names_str))"; -			} -		} else { -			$sanitised_names = array(); -			foreach ($names as $name) { -				// normalise to 0. -				if (!$name) { -					$name = '0'; -				} -				$sanitised_names[] = '\'' . sanitise_string($name) . '\''; +		$sanitised_names = array(); +		foreach ($names as $name) { +			// normalise to 0. +			if (!$name) { +				$name = '0';  			} +			$sanitised_names[] = '\'' . sanitise_string($name) . '\''; +		} -			$names_str = implode(',', $sanitised_names); -			if ($names_str) { -				$return['joins'][] = "JOIN {$db_prefix}metastrings msn on $table.name_id = msn.id"; -				$names_where = "(msn.string IN ($names_str))"; -			} +		if ($names_str = implode(',', $sanitised_names)) { +			$return['joins'][] = "JOIN {$db_prefix}metastrings msn on $table.name_id = msn.id"; +			$names_where = "(msn.string IN ($names_str))";  		}  	}  	// get values wheres and joins  	$values_where = '';  	if ($values !== NULL) { -//		$return['joins'][] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id"; -		  		if (!is_array($values)) {  			$values = array($values);  		} | 
