Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
11/30/2013 06:14:08 AM (13 years ago)
Author:
johnjamesjacoby
Message:

Refactor Groups component's approach to Notifications and Activity integration:

  • Introduce helper functions for handling the adding/marking/deleting of notifications and adding/deleting activity stream entries. Hook these new functions into their respective actions rather than have them hardcoded and interspersed amongst the first-class code.
  • Inadvertently fixes a bug where banning or removing a member from a group within 5 minutes of their having joined would not delete the recent activity stream update.
  • See #5266.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-groups/bp-groups-functions.php

    r7588 r7624  
    201201 */
    202202function groups_delete_group( $group_id ) {
    203         global $bp;
    204203
    205204        do_action( 'groups_before_delete_group', $group_id );
    … …  
    207206        // Get the group object
    208207        $group = groups_get_group( array( 'group_id' => $group_id ) );
    209         if ( !$group->delete() )
    210                 return false;
    211 
    212         // Delete all group activity from activity streams
    213         if ( bp_is_active( 'activity' ) )
    214                 bp_activity_delete_by_item_id( array( 'item_id' => $group_id, 'component' => $bp->groups->id ) );
     208
     209        // Bail if group cannot be deleted
     210        if ( ! $group->delete() ) {
     211                return false;
     212        }
    215213
    216214        // Remove all outstanding invites for this group
    217215        groups_delete_all_group_invites( $group_id );
    218216
    219         // Remove all notifications for any user belonging to this group
    220         bp_core_delete_all_notifications_by_type( $group_id, $bp->groups->id );
    221 
    222         do_action( 'groups_delete_group', $group_id);
     217        do_action( 'groups_delete_group', $group_id );
    223218
    224219        return true;
    … …  
    289284        }
    290285
    291         $membership = new BP_Groups_Member( $user_id, $group_id );
    292 
    293286        // This is exactly the same as deleting an invite, just is_confirmed = 1 NOT 0.
    294         if ( !groups_uninvite_user( $user_id, $group_id ) )
    295                 return false;
    296 
    297         /**
    298          * If the user joined this group less than five minutes ago, remove the
    299          * joined_group activity so users cannot flood the activity stream by
    300          * joining/leaving the group in quick succession.
    301          */
    302         if ( bp_is_active( 'activity' ) && time() <= strtotime( '+5 minutes', (int)strtotime( $membership->date_modified ) ) )
    303                 bp_activity_delete( array( 'component' => $bp->groups->id, 'type' => 'joined_group', 'user_id' => $user_id, 'item_id' => $group_id ) );
     287        if ( !groups_uninvite_user( $user_id, $group_id ) ) {
     288                return false;
     289        }
    304290
    305291        bp_core_add_message( __( 'You successfully left the group.', 'buddypress' ) );
    … …  
    697683        // slip through), delete all existing invitations/requests and return true
    698684        if ( groups_is_user_member( $user_id, $group_id ) ) {
    699                 if ( groups_check_user_has_invite( $user_id, $group_id ) )
     685                if ( groups_check_user_has_invite( $user_id, $group_id ) ) {
    700686                        groups_delete_invite( $user_id, $group_id );
    701 
    702                 if ( groups_check_for_membership_request( $user_id, $group_id ) )
     687                }
     688
     689                if ( groups_check_for_membership_request( $user_id, $group_id ) ) {
    703690                        groups_delete_membership_request( $user_id, $group_id );
     691                }
    704692
    705693                return true;
    … …  
    709697        $member->accept_invite();
    710698
    711         if ( !$member->save() )
    712                 return false;
     699        if ( !$member->save() ) {
     700                return false;
     701        }
    713702
    714703        // Remove request to join
    715         if ( $member->check_for_membership_request( $user_id, $group_id ) )
     704        if ( $member->check_for_membership_request( $user_id, $group_id ) ) {
    716705                $member->delete_request( $user_id, $group_id );
     706        }
    717707
    718708        // Modify group meta
    719709        groups_update_groupmeta( $group_id, 'last_activity', bp_core_current_time() );
    720710
    721         bp_core_mark_notifications_by_item_id( $user_id, $group_id, buddypress()->groups->id, 'group_invite' );
    722 
    723711        do_action( 'groups_accept_invite', $user_id, $group_id );
     712
    724713        return true;
    725714}
    726715
    727716function groups_reject_invite( $user_id, $group_id ) {
    728         if ( !BP_Groups_Member::delete( $user_id, $group_id ) )
     717        if ( ! BP_Groups_Member::delete( $user_id, $group_id ) )
    729718                return false;
    730719
    … …  
    735724
    736725function groups_delete_invite( $user_id, $group_id ) {
    737 
    738         $delete = BP_Groups_Member::delete_invite( $user_id, $group_id );
    739 
    740         if ( !empty( $delete ) ) {
    741                 bp_core_mark_notifications_by_item_id( $user_id, $group_id, buddypress()->groups->id, 'group_invite' );
    742         }
    743 
    744         return $delete;
     726        if ( ! BP_Groups_Member::delete_invite( $user_id, $group_id ) )
     727                return false;
     728
     729        do_action( 'groups_delete_invite', $user_id, $group_id );
     730
     731        return true;
    745732}
    746733
    … …  
    906893function groups_accept_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
    907894
    908         if ( !empty( $user_id ) && !empty( $group_id ) )
     895        if ( !empty( $user_id ) && !empty( $group_id ) ) {
    909896                $membership = new BP_Groups_Member( $user_id, $group_id );
    910         else
     897        } else {
    911898                $membership = new BP_Groups_Member( false, false, $membership_id );
     899        }
    912900
    913901        $membership->accept_request();
    914902
    915         if ( !$membership->save() )
    916                 return false;
     903        if ( !$membership->save() ) {
     904                return false;
     905        }
    917906
    918907        // Check if the user has an outstanding invite, if so delete it.
    919         if ( groups_check_user_has_invite( $membership->user_id, $membership->group_id ) )
     908        if ( groups_check_user_has_invite( $membership->user_id, $membership->group_id ) ) {
    920909                groups_delete_invite( $membership->user_id, $membership->group_id );
    921 
    922         // Record this in activity streams
    923         $group = groups_get_group( array( 'group_id' => $membership->group_id ) );
    924 
    925         groups_record_activity( array(
    926                 'action'  => apply_filters_ref_array( 'groups_activity_membership_accepted_action', array( sprintf( __( '%1$s joined the group %2$s', 'buddypress'), bp_core_get_userlink( $membership->user_id ), '<a href="' . bp_get_group_permalink( $group ) . '">' . esc_attr( $group->name ) . '</a>' ), $membership->user_id, &$group ) ),
    927                 'type'    => 'joined_group',
    928                 'item_id' => $membership->group_id,
    929                 'user_id' => $membership->user_id
    930         ) );
    931 
    932         // Send a notification to the user.
    933         groups_notification_membership_request_completed( $membership->user_id, $membership->group_id, true );
    934 
    935         do_action( 'groups_membership_accepted', $membership->user_id, $membership->group_id );
     910        }
     911
     912        do_action( 'groups_membership_accepted', $membership->user_id, $membership->group_id, true );
    936913
    937914        return true;
    … …  
    939916
    940917function groups_reject_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
    941         if ( !$membership = groups_delete_membership_request( $membership_id, $user_id, $group_id ) )
    942                 return false;
    943 
    944         // Send a notification to the user.
    945         groups_notification_membership_request_completed( $membership->user_id, $membership->group_id, false );
    946 
    947         do_action( 'groups_membership_rejected', $membership->user_id, $membership->group_id );
     918        if ( !$membership = groups_delete_membership_request( $membership_id, $user_id, $group_id ) ) {
     919                return false;
     920        }
     921
     922        do_action( 'groups_membership_rejected', $membership->user_id, $membership->group_id, false );
    948923
    949924        return true;
    … …  
    10751050
    10761051function groups_remove_data_for_user( $user_id ) {
    1077         global $bp;
    1078 
    10791052        BP_Groups_Member::delete_all_for_user( $user_id );
    1080 
    1081         bp_core_delete_notifications_from_user( $user_id, $bp->groups->id, 'new_membership_request' );
    10821053
    10831054        do_action( 'groups_remove_data_for_user', $user_id );
Note: See TracChangeset for help on using the changeset viewer.