mirror of
https://gh.wpcy.net/https://github.com/buddypress/buddypress.git
synced 2026-05-31 05:04:29 +08:00
The absence of this group parameter meant that the cache deletion was never actually working, causing problems with persistent caching as well as plugins that cause group details to be saved multiple times on a pageload (such as bbPress) Fixes #4919 git-svn-id: https://buddypress.svn.wordpress.org/trunk@6896 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
120 lines
5.1 KiB
PHP
120 lines
5.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* BuddyPress Groups Caching
|
|
*
|
|
* Caching functions handle the clearing of cached objects and pages on specific
|
|
* actions throughout BuddyPress.
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if ( !defined( 'ABSPATH' ) ) exit;
|
|
|
|
/**
|
|
* Slurps up groupmeta
|
|
*
|
|
* This function is called in two places in the BP_Groups_Group class:
|
|
* - in the populate() method, when single group objects are populated
|
|
* - in the get() method, when multiple groups are queried
|
|
*
|
|
* It grabs all groupmeta associated with all of the groups passed in $group_ids and adds it to
|
|
* the WP cache. This improves efficiency when using groupmeta inline
|
|
*
|
|
* @param int|str|array $group_ids Accepts a single group_id, or a comma-separated list or array of
|
|
* group ids
|
|
*/
|
|
function bp_groups_update_meta_cache( $group_ids = false ) {
|
|
global $bp;
|
|
|
|
$cache_args = array(
|
|
'object_ids' => $group_ids,
|
|
'object_type' => $bp->groups->id,
|
|
'object_column' => 'group_id',
|
|
'meta_table' => $bp->groups->table_name_groupmeta,
|
|
'cache_key_prefix' => 'bp_groups_groupmeta'
|
|
);
|
|
|
|
bp_update_meta_cache( $cache_args );
|
|
}
|
|
|
|
function groups_clear_group_object_cache( $group_id ) {
|
|
wp_cache_delete( 'bp_total_group_count', 'bp' );
|
|
}
|
|
add_action( 'groups_group_deleted', 'groups_clear_group_object_cache' );
|
|
add_action( 'groups_settings_updated', 'groups_clear_group_object_cache' );
|
|
add_action( 'groups_details_updated', 'groups_clear_group_object_cache' );
|
|
add_action( 'groups_group_avatar_updated', 'groups_clear_group_object_cache' );
|
|
add_action( 'groups_create_group_step_complete', 'groups_clear_group_object_cache' );
|
|
|
|
/**
|
|
* Bust group caches when editing or deleting
|
|
*
|
|
* @since BuddyPress (1.7)
|
|
* @param int $group_id The group being edited
|
|
*/
|
|
function bp_groups_delete_group_cache( $group_id = 0 ) {
|
|
wp_cache_delete( 'bp_groups_group_' . $group_id . '_load_users', 'bp' );
|
|
wp_cache_delete( 'bp_groups_group_' . $group_id . '_noload_users', 'bp' );
|
|
}
|
|
add_action( 'groups_delete_group', 'bp_groups_delete_group_cache' );
|
|
add_action( 'groups_update_group', 'bp_groups_delete_group_cache' );
|
|
add_action( 'groups_details_updated', 'bp_groups_delete_group_cache' );
|
|
add_action( 'groups_settings_updated', 'bp_groups_delete_group_cache' );
|
|
|
|
/**
|
|
* Clears caches for the group creator when a group is created
|
|
*
|
|
* @param int $group_id
|
|
* @param BP_Groups_Group $group_obj
|
|
* @since BuddyPress (1.6)
|
|
*/
|
|
function bp_groups_clear_group_creator_cache( $group_id, $group_obj ) {
|
|
// Clears the 'total groups' for this user
|
|
groups_clear_group_user_object_cache( $group_obj->id, $group_obj->creator_id );
|
|
}
|
|
add_action( 'groups_created_group', 'bp_groups_clear_group_creator_cache', 10, 2 );
|
|
|
|
/**
|
|
* Clears caches for all members in a group when a group is deleted
|
|
*
|
|
* @param BP_Groups_Group $group_obj
|
|
* @param array User IDs who were in this group
|
|
* @since BuddyPress (1.6)
|
|
*/
|
|
function bp_groups_clear_group_members_caches( $group_obj, $user_ids ) {
|
|
// Clears the 'total groups' cache for each member in a group
|
|
foreach ( (array) $user_ids as $user_id )
|
|
groups_clear_group_user_object_cache( $group_obj->id, $user_id );
|
|
}
|
|
add_action( 'bp_groups_delete_group', 'bp_groups_clear_group_members_caches', 10, 2 );
|
|
|
|
function groups_clear_group_user_object_cache( $group_id, $user_id ) {
|
|
wp_cache_delete( 'bp_total_groups_for_user_' . $user_id, 'bp' );
|
|
}
|
|
add_action( 'groups_join_group', 'groups_clear_group_user_object_cache', 10, 2 );
|
|
add_action( 'groups_leave_group', 'groups_clear_group_user_object_cache', 10, 2 );
|
|
add_action( 'groups_ban_member', 'groups_clear_group_user_object_cache', 10, 2 );
|
|
add_action( 'groups_unban_member', 'groups_clear_group_user_object_cache', 10, 2 );
|
|
|
|
/* List actions to clear super cached pages on, if super cache is installed */
|
|
add_action( 'groups_join_group', 'bp_core_clear_cache' );
|
|
add_action( 'groups_leave_group', 'bp_core_clear_cache' );
|
|
add_action( 'groups_accept_invite', 'bp_core_clear_cache' );
|
|
add_action( 'groups_reject_invite', 'bp_core_clear_cache' );
|
|
add_action( 'groups_invite_user', 'bp_core_clear_cache' );
|
|
add_action( 'groups_uninvite_user', 'bp_core_clear_cache' );
|
|
add_action( 'groups_details_updated', 'bp_core_clear_cache' );
|
|
add_action( 'groups_settings_updated', 'bp_core_clear_cache' );
|
|
add_action( 'groups_unban_member', 'bp_core_clear_cache' );
|
|
add_action( 'groups_ban_member', 'bp_core_clear_cache' );
|
|
add_action( 'groups_demote_member', 'bp_core_clear_cache' );
|
|
add_action( 'groups_promote_member', 'bp_core_clear_cache' );
|
|
add_action( 'groups_membership_rejected', 'bp_core_clear_cache' );
|
|
add_action( 'groups_membership_accepted', 'bp_core_clear_cache' );
|
|
add_action( 'groups_membership_requested', 'bp_core_clear_cache' );
|
|
add_action( 'groups_create_group_step_complete', 'bp_core_clear_cache' );
|
|
add_action( 'groups_created_group', 'bp_core_clear_cache' );
|
|
add_action( 'groups_group_avatar_updated', 'bp_core_clear_cache' );
|