Skip to:
Content

BuddyPress.org

Ticket #4393: 4393.01.patch

File 4393.01.patch, 4.0 KB (added by boonebgorges, 14 years ago)
  • bp-activity/bp-activity-functions.php

    diff --git a/bp-activity/bp-activity-functions.php b/bp-activity/bp-activity-functions.php
    index 59ce01e..da96d81 100644
    a b function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) { 
    291291                $user_id = bp_loggedin_user_id();
    292292
    293293        // Update the user's personal favorites
    294         $my_favs   = bp_get_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', true );
    295         $my_favs[] = $activity_id;
    296 
    297         // Update the total number of users who have favorited this activity
    298         $fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' );
    299         $fav_count = !empty( $fav_count ) ? (int) $fav_count + 1 : 1;
     294        $my_favs = bp_get_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', true );
     295        if ( !$my_favs ) {
     296                $my_favs = array();
     297        }
    300298
    301         // Update user meta
     299        if ( !in_array( $activity_id, $my_favs ) ) {
     300                $my_favs[] = $activity_id;
     301        }
    302302        bp_update_user_meta( bp_loggedin_user_id(), 'bp_favorite_activities', $my_favs );
    303303
     304        // Update the users that favorited this activity
     305        $fav_users = bp_activity_get_meta( $activity_id, 'favorited_users');
     306        if ( !$fav_users ) {
     307                $fav_users = array();
     308        }
     309
     310        if ( !in_array( $user_id, $fav_users ) ) {
     311                $fav_users[] = $user_id;
     312        }
     313        bp_activity_update_meta( $activity_id, 'favorited_users', $fav_users );
     314
     315        // Update the total number of users who have favorited this activity
     316        $fav_count = count( $fav_users );
     317
    304318        // Update activity meta counts
    305319        if ( true === bp_activity_update_meta( $activity_id, 'favorite_count', $fav_count ) ) {
    306320
    function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) { 
    351365        $my_favs = array_flip( (array) $my_favs );
    352366        unset( $my_favs[$activity_id] );
    353367        $my_favs = array_unique( array_flip( $my_favs ) );
     368        bp_update_user_meta( $user_id, 'bp_favorite_activities', $my_favs );
    354369
    355         // Update the total number of users who have favorited this activity
    356         if ( $fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' ) ) {
    357 
    358                 // Deduct from total favorites
    359                 if ( bp_activity_update_meta( $activity_id, 'favorite_count', (int) $fav_count - 1 ) ) {
     370        // Remove the user from the list of those who have favorited this activity
     371        $fav_users = bp_activity_get_meta( $activity_id, 'favorited_users' );
     372        $fav_users = array_flip( (array) $fav_users );
     373        unset( $my_favs[$activity_id] );
     374        $fav_users = array_unique( array_flip( $fav_users ) );
     375        bp_activity_update_meta( $activity_id, 'favorited_users', $fav_users );
    360376
    361                         // Update users favorites
    362                         if ( bp_update_user_meta( $user_id, 'bp_favorite_activities', $my_favs ) ) {
     377        // Update the total number of users who have favorited this activity
     378        $fav_count = count( $fav_users );
     379        bp_activity_update_meta( $activity_id, 'favorite_count', $fav_count );
    363380
    364                                 // Execute additional code
    365                                 do_action( 'bp_activity_remove_user_favorite', $activity_id, $user_id );
     381        // Execute additional code
     382        do_action( 'bp_activity_remove_user_favorite', $activity_id, $user_id );
    366383
    367                                 // Success
    368                                 return true;
     384        return true;
     385}
    369386
    370                         // Error updating
    371                         } else {
    372                                 return false;
    373                         }
     387/**
     388 * When an activity item is deleted, delete it from all lists of user favorites
     389 *
     390 * @since BuddyPress (1.7)
     391 */
     392function bp_activity_favorite_deleted( $args ) {
     393        if ( isset( $args['id'] ) ) {
     394                $activity_id = $args['id'];
     395        }
    374396
    375                 // Error updating favorite count
    376                 } else {
    377                         return false;
     397        if ( !empty( $activity_id ) ) {
     398                $fav_users = bp_activity_get_meta( $activity_id, 'favorited_users' );
     399                foreach( (array) $fav_users as $user_id ) {
     400                        $user_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
     401                        $user_favs = array_flip( $user_favs );
     402                        unset( $user_favs[$activity_id] );
     403                        $user_favs = array_flip( $user_favs );
     404                        bp_update_user_meta( $user_id, 'bp_favorite_activities', $user_favs );
    378405                }
    379 
    380         // Error getting favorite count
    381         } else {
    382                 return false;
    383406        }
    384407}
     408add_action( 'bp_activity_delete', 'bp_activity_favorite_deleted' );
    385409
    386410/**
    387411 * Check if activity exists by scanning content