diff options
| author | cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2011-06-11 19:10:57 +0000 | 
|---|---|---|
| committer | cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2011-06-11 19:10:57 +0000 | 
| commit | bebc9a864caf99983e28e6d6885a15a9d3b14cd4 (patch) | |
| tree | c8cb312d92eb5b4cb310a9d611f2ca3445b7047e /engine/lib | |
| parent | e92e934d81ebf561b29d440a720f76345e550b4b (diff) | |
| download | elgg-bebc9a864caf99983e28e6d6885a15a9d3b14cd4.tar.gz elgg-bebc9a864caf99983e28e6d6885a15a9d3b14cd4.tar.bz2 | |
Fixes #3039 added elgg_delete_river()
git-svn-id: http://code.elgg.org/elgg/trunk@9180 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'engine/lib')
| -rw-r--r-- | engine/lib/deprecated-1.8.php | 58 | ||||
| -rw-r--r-- | engine/lib/river.php | 173 | 
2 files changed, 175 insertions, 56 deletions
| diff --git a/engine/lib/deprecated-1.8.php b/engine/lib/deprecated-1.8.php index a04907a6d..d92257a09 100644 --- a/engine/lib/deprecated-1.8.php +++ b/engine/lib/deprecated-1.8.php @@ -4673,3 +4673,61 @@ function elgg_count_comments($entity) {  	return 0;  } + +/** + * Removes all items relating to a particular acting entity from the river + * + * @param int $subject_guid The GUID of the entity + * + * @return bool Depending on success + * @deprecated 1.8 Use elgg_delete_river() + */ +function remove_from_river_by_subject($subject_guid) { +	elgg_deprecated_notice("remove_from_river_by_subject() deprecated by elgg_delete_river()", 1.8); + +	return elgg_delete_river(array('subject_guid' => $subject_guid)); +} + +/** + * Removes all items relating to a particular entity being acted upon from the river + * + * @param int $object_guid The GUID of the entity + * + * @return bool Depending on success + * @deprecated 1.8 Use elgg_delete_river() + */ +function remove_from_river_by_object($object_guid) { +	elgg_deprecated_notice("remove_from_river_by_object() deprecated by elgg_delete_river()", 1.8); + +	return elgg_delete_river(array('object_guid' => $object_guid)); +} + +/** + * Removes all items relating to a particular annotation being acted upon from the river + * + * @param int $annotation_id The ID of the annotation + * + * @return bool Depending on success + * @since 1.7.0 + * @deprecated 1.8 Use elgg_delete_river() + */ +function remove_from_river_by_annotation($annotation_id) { +	elgg_deprecated_notice("remove_from_river_by_annotation() deprecated by elgg_delete_river()", 1.8); + +	return elgg_delete_river(array('annotation_id' => $annotation_id)); +} + +/** + * Removes a single river entry + * + * @param int $id The ID of the river entry + * + * @return bool Depending on success + * @since 1.7.2 + * @deprecated 1.8 Use elgg_delete_river() + */ +function remove_from_river_by_id($id) { +	elgg_deprecated_notice("remove_from_river_by_id() deprecated by elgg_delete_river()", 1.8); + +	return elgg_delete_river(array('id' => $id)); +} diff --git a/engine/lib/river.php b/engine/lib/river.php index c467a351c..36dde7f05 100644 --- a/engine/lib/river.php +++ b/engine/lib/river.php @@ -98,75 +98,107 @@ $posted = 0, $annotation_id = 0) {  }  /** - * Removes all items relating to a particular acting entity from the river + * Delete river items   * - * @param int $subject_guid The GUID of the entity + * @warning not checking access (should we?)   * - * @return bool Depending on success + * @param array $options + *   ids                  => INT|ARR River item id(s) + *   subject_guids        => INT|ARR Subject guid(s) + *   object_guids         => INT|ARR Object guid(s) + *   annotation_ids       => INT|ARR The identifier of the annotation(s) + *   action_types         => STR|ARR The river action type(s) identifier + *   views                => STR|ARR River view(s) + * + *   types                => STR|ARR Entity type string(s) + *   subtypes             => STR|ARR Entity subtype string(s) + *   type_subtype_pairs   => ARR     Array of type => subtype pairs where subtype + *                                   can be an array of subtype strings + *  + *   posted_time_lower    => INT     The lower bound on the time posted + *   posted_time_upper    => INT     The upper bound on the time posted + * + * @return bool + * @since 1.8.0   */ -function remove_from_river_by_subject($subject_guid) { -	// Sanitise -	$subject_guid = (int) $subject_guid; - -	// Load config +function elgg_delete_river(array $options = array()) {  	global $CONFIG; -	// Remove -	return delete_data("delete from {$CONFIG->dbprefix}river where subject_guid = {$subject_guid}"); -} +	$defaults = array( +		'ids'                  => ELGG_ENTITIES_ANY_VALUE, -/** - * Removes all items relating to a particular entity being acted upon from the river - * - * @param int $object_guid The GUID of the entity - * - * @return bool Depending on success - */ -function remove_from_river_by_object($object_guid) { -	// Sanitise -	$object_guid = (int) $object_guid; +		'subject_guids'	       => ELGG_ENTITIES_ANY_VALUE, +		'object_guids'         => ELGG_ENTITIES_ANY_VALUE, +		'annotation_ids'       => ELGG_ENTITIES_ANY_VALUE, -	// Load config -	global $CONFIG; +		'views'                => ELGG_ENTITIES_ANY_VALUE, +		'action_types'         => ELGG_ENTITIES_ANY_VALUE, -	// Remove -	return delete_data("delete from {$CONFIG->dbprefix}river where object_guid = {$object_guid}"); -} +		'types'	               => ELGG_ENTITIES_ANY_VALUE, +		'subtypes'             => ELGG_ENTITIES_ANY_VALUE, +		'type_subtype_pairs'   => ELGG_ENTITIES_ANY_VALUE, -/** - * Removes all items relating to a particular annotation being acted upon from the river - * - * @param int $annotation_id The ID of the annotation - * - * @return bool Depending on success - * @since 1.7.0 - */ -function remove_from_river_by_annotation($annotation_id) { -	// Sanitise -	$annotation_id = (int) $annotation_id; +		'posted_time_lower'	   => ELGG_ENTITIES_ANY_VALUE, +		'posted_time_upper'	   => ELGG_ENTITIES_ANY_VALUE, -	// Load config -	global $CONFIG; +		'wheres'               => array(), +		'joins'                => array(), -	// Remove -	return delete_data("delete from {$CONFIG->dbprefix}river where annotation_id = {$annotation_id}"); -} +	); -/** - * Removes a single river entry - * - * @param int $id The ID of the river entry - * - * @return bool Depending on success - * @since 1.7.2 - */ -function remove_from_river_by_id($id) { -	global $CONFIG; +	$options = array_merge($defaults, $options); -	// Sanitise -	$id = (int) $id; +	$singulars = array('id', 'subject_guid', 'object_guid', 'annotation_id', 'action_type', 'view', 'type', 'subtype'); +	$options = elgg_normalise_plural_options_array($options, $singulars); + +	$wheres = $options['wheres']; + +	$wheres[] = elgg_get_guid_based_where_sql('rv.id', $options['ids']); +	$wheres[] = elgg_get_guid_based_where_sql('rv.subject_guid', $options['subject_guids']); +	$wheres[] = elgg_get_guid_based_where_sql('rv.object_guid', $options['object_guids']); +	$wheres[] = elgg_get_guid_based_where_sql('rv.annotation_id', $options['annotation_ids']); +	$wheres[] = elgg_river_get_action_where_sql($options['action_types']); +	$wheres[] = elgg_river_get_view_where_sql($options['views']); +	$wheres[] = elgg_get_river_type_subtype_where_sql('rv', $options['types'], +		$options['subtypes'], $options['type_subtype_pairs']); + +	if ($options['posted_time_lower'] && is_int($options['posted_time_lower'])) { +		$wheres[] = "rv.posted >= {$options['posted_time_lower']}"; +	} + +	if ($options['posted_time_upper'] && is_int($options['posted_time_upper'])) { +		$wheres[] = "rv.posted <= {$options['posted_time_upper']}"; +	} + +	// remove identical where clauses +	$wheres = array_unique($wheres); -	return delete_data("delete from {$CONFIG->dbprefix}river where id = {$id}"); +	// see if any functions failed +	// remove empty strings on successful functions +	foreach ($wheres as $i => $where) { +		if ($where === FALSE) { +			return FALSE; +		} elseif (empty($where)) { +			unset($wheres[$i]); +		} +	} + +	$query = "DELETE rv.* FROM {$CONFIG->dbprefix}river rv "; + +	// add joins +	foreach ($joins as $j) { +		$query .= " $j "; +	} + +	// add wheres +	$query .= ' WHERE '; + +	foreach ($wheres as $w) { +		$query .= " $w AND "; +	} +	$query .= "1=1"; + +	return delete_data($query);  }  /** @@ -482,7 +514,7 @@ function elgg_river_get_action_where_sql($types) {  	if (!is_array($types)) {  		$types = sanitise_string($types); -		return "'(rv.action_type = '$types')"; +		return "(rv.action_type = '$types')";  	}  	// sanitize types array @@ -496,6 +528,35 @@ function elgg_river_get_action_where_sql($types) {  }  /** + * Get the where clause based on river view strings + * + * @param array $types Array of view strings + * + * @return string + * @since 1.8.0 + * @access private + */ +function elgg_river_get_view_where_sql($views) { +	if (!$views) { +		return ''; +	} + +	if (!is_array($views)) { +		$views = sanitise_string($views); +		return "(rv.view = '$views')"; +	} + +	// sanitize views array +	$views_sanitized = array(); +	foreach ($views as $view) { +		$views_sanitized[] = sanitise_string($view); +	} + +	$view_str = implode("','", $views_sanitized); +	return "(rv.view IN ('$view_str'))"; +} + +/**   * Sets the access ID on river items for a particular object   *   * @param int $object_guid The GUID of the entity | 
