]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #3039 added elgg_delete_river()
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 11 Jun 2011 19:10:57 +0000 (19:10 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 11 Jun 2011 19:10:57 +0000 (19:10 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@9180 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/deprecated-1.8.php
engine/lib/river.php

index a04907a6d3a6a09394b647519e815eb7657d95a0..d92257a092feb90dde5e594ec3bbc41f45469970 100644 (file)
@@ -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));
+}
index c467a351c3959bfd63cf2530917db76c04e4c713..36dde7f05728413f7d4af43b8da44d7bed1363d2 100644 (file)
@@ -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
@@ -495,6 +527,35 @@ function elgg_river_get_action_where_sql($types) {
        return "(rv.action_type IN ('$type_str'))";
 }
 
+/**
+ * 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
  *