[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BuddyPress Groups Caching. 4 * 5 * Caching functions handle the clearing of cached objects and pages on specific 6 * actions throughout BuddyPress. 7 * 8 * @package BuddyPress 9 * @subpackage Groups 10 * @since 1.5.0 11 */ 12 13 // Exit if accessed directly. 14 defined( 'ABSPATH' ) || exit; 15 16 /** 17 * Slurp up metadata for a set of groups. 18 * 19 * This function is called in two places in the BP_Groups_Group class: 20 * - in the populate() method, when single group objects are populated 21 * - in the get() method, when multiple groups are queried 22 * 23 * It grabs all groupmeta associated with all of the groups passed in 24 * $group_ids and adds it to WP cache. This improves efficiency when using 25 * groupmeta within a loop context. 26 * 27 * @since 1.6.0 28 * 29 * @param int|string|array|bool $group_ids Accepts a single group_id, or a 30 * comma-separated list or array of 31 * group ids. 32 */ 33 function bp_groups_update_meta_cache( $group_ids = false ) { 34 $bp = buddypress(); 35 36 $cache_args = array( 37 'object_ids' => $group_ids, 38 'object_type' => $bp->groups->id, 39 'cache_group' => 'group_meta', 40 'object_column' => 'group_id', 41 'meta_table' => $bp->groups->table_name_groupmeta, 42 'cache_key_prefix' => 'bp_groups_groupmeta' 43 ); 44 45 bp_update_meta_cache( $cache_args ); 46 } 47 48 /** 49 * Clear the cached group count. 50 * 51 * @since 1.0.0 52 * 53 * @param int $group_id Not used. 54 */ 55 function groups_clear_group_object_cache( $group_id ) { 56 wp_cache_delete( 'bp_total_group_count', 'bp' ); 57 } 58 add_action( 'groups_group_deleted', 'groups_clear_group_object_cache' ); 59 add_action( 'groups_settings_updated', 'groups_clear_group_object_cache' ); 60 add_action( 'groups_details_updated', 'groups_clear_group_object_cache' ); 61 add_action( 'groups_group_avatar_updated', 'groups_clear_group_object_cache' ); 62 add_action( 'groups_create_group_step_complete', 'groups_clear_group_object_cache' ); 63 64 /** 65 * Bust group caches when editing or deleting. 66 * 67 * @since 1.7.0 68 * 69 * @param int $group_id The group being edited. 70 */ 71 function bp_groups_delete_group_cache( $group_id = 0 ) { 72 wp_cache_delete( $group_id, 'bp_groups' ); 73 } 74 add_action( 'groups_delete_group', 'bp_groups_delete_group_cache' ); 75 add_action( 'groups_update_group', 'bp_groups_delete_group_cache' ); 76 add_action( 'groups_details_updated', 'bp_groups_delete_group_cache' ); 77 add_action( 'groups_settings_updated', 'bp_groups_delete_group_cache' ); 78 79 /** 80 * Bust group cache when modifying metadata. 81 * 82 * @since 2.0.0 83 * 84 * @param int $meta_id Meta ID. 85 * @param int $group_id Group ID. 86 */ 87 function bp_groups_delete_group_cache_on_metadata_change( $meta_id, $group_id ) { 88 wp_cache_delete( $group_id, 'bp_groups' ); 89 } 90 add_action( 'updated_group_meta', 'bp_groups_delete_group_cache_on_metadata_change', 10, 2 ); 91 add_action( 'added_group_meta', 'bp_groups_delete_group_cache_on_metadata_change', 10, 2 ); 92 93 /** 94 * Clear caches for the group creator when a group is created. 95 * 96 * @since 1.6.0 97 * 98 * @param int $group_id ID of the group. 99 * @param BP_Groups_Group $group_obj Group object. 100 */ 101 function bp_groups_clear_group_creator_cache( $group_id, $group_obj ) { 102 // Clears the 'total groups' for this user. 103 groups_clear_group_user_object_cache( $group_obj->id, $group_obj->creator_id ); 104 } 105 add_action( 'groups_created_group', 'bp_groups_clear_group_creator_cache', 10, 2 ); 106 107 /** 108 * Clears caches for all members in a group when a group is deleted. 109 * 110 * @since 1.6.0 111 * 112 * @param BP_Groups_Group $group_obj Group object. 113 * @param array $user_ids User IDs who were in this group. 114 */ 115 function bp_groups_clear_group_members_caches( $group_obj, $user_ids ) { 116 // Clears the 'total groups' cache for each member in a group. 117 foreach ( (array) $user_ids as $user_id ) 118 groups_clear_group_user_object_cache( $group_obj->id, $user_id ); 119 } 120 add_action( 'bp_groups_delete_group', 'bp_groups_clear_group_members_caches', 10, 2 ); 121 122 /** 123 * Clear a user's cached total group invite count. 124 * 125 * Count is cleared when an invite is accepted, rejected or deleted. 126 * 127 * @since 2.0.0 128 * 129 * @param int $user_id The user ID. 130 */ 131 function bp_groups_clear_invite_count_for_user( $user_id ) { 132 wp_cache_delete( $user_id, 'bp_group_invite_count' ); 133 } 134 add_action( 'groups_accept_invite', 'bp_groups_clear_invite_count_for_user' ); 135 add_action( 'groups_reject_invite', 'bp_groups_clear_invite_count_for_user' ); 136 add_action( 'groups_delete_invite', 'bp_groups_clear_invite_count_for_user' ); 137 138 /** 139 * Clear a user's cached total group invite count when a user is uninvited. 140 * 141 * Groan. Our API functions are not consistent. 142 * 143 * @since 2.0.0 144 * 145 * @param int $group_id The group ID. Not used in this function. 146 * @param int $user_id The user ID. 147 */ 148 function bp_groups_clear_invite_count_on_uninvite( $group_id, $user_id ) { 149 bp_groups_clear_invite_count_for_user( $user_id ); 150 } 151 add_action( 'groups_uninvite_user', 'bp_groups_clear_invite_count_on_uninvite', 10, 2 ); 152 153 /** 154 * Clear a user's cached total group invite count when a new invite is sent. 155 * 156 * @since 2.0.0 157 * 158 * @param int $group_id The group ID. Not used in this function. 159 * @param array $invited_users Array of invited user IDs. 160 */ 161 function bp_groups_clear_invite_count_on_send( $group_id, $invited_users ) { 162 foreach ( $invited_users as $user_id ) { 163 bp_groups_clear_invite_count_for_user( $user_id ); 164 } 165 } 166 add_action( 'groups_send_invites', 'bp_groups_clear_invite_count_on_send', 10, 2 ); 167 168 /** 169 * Clear a user's cached group count. 170 * 171 * @since 1.2.0 172 * 173 * @param int $group_id The group ID. Not used in this function. 174 * @param int $user_id The user ID. 175 */ 176 function groups_clear_group_user_object_cache( $group_id, $user_id ) { 177 wp_cache_delete( 'bp_total_groups_for_user_' . $user_id, 'bp' ); 178 } 179 add_action( 'groups_join_group', 'groups_clear_group_user_object_cache', 10, 2 ); 180 add_action( 'groups_leave_group', 'groups_clear_group_user_object_cache', 10, 2 ); 181 add_action( 'groups_ban_member', 'groups_clear_group_user_object_cache', 10, 2 ); 182 add_action( 'groups_unban_member', 'groups_clear_group_user_object_cache', 10, 2 ); 183 add_action( 'groups_uninvite_user', 'groups_clear_group_user_object_cache', 10, 2 ); 184 add_action( 'groups_remove_member', 'groups_clear_group_user_object_cache', 10, 2 ); 185 186 /** 187 * Clear group administrator and moderator cache. 188 * 189 * @since 2.1.0 190 * 191 * @param int $group_id The group ID. 192 */ 193 function groups_clear_group_administrator_cache( $group_id ) { 194 wp_cache_delete( $group_id, 'bp_group_admins' ); 195 wp_cache_delete( $group_id, 'bp_group_mods' ); 196 } 197 add_action( 'groups_promote_member', 'groups_clear_group_administrator_cache' ); 198 add_action( 'groups_demote_member', 'groups_clear_group_administrator_cache' ); 199 add_action( 'groups_delete_group', 'groups_clear_group_administrator_cache' ); 200 201 /** 202 * Clear group administrator and moderator cache when a group member is saved. 203 * 204 * This accounts for situations where group admins or mods are added manually 205 * using {@link BP_Groups_Member::save()}. Usually via a plugin. 206 * 207 * @since 2.1.0 208 * 209 * @param BP_Groups_Member $member Member object. 210 */ 211 function groups_clear_group_administrator_cache_on_member_save( BP_Groups_Member $member ) { 212 groups_clear_group_administrator_cache( $member->group_id ); 213 } 214 add_action( 'groups_member_after_save', 'groups_clear_group_administrator_cache_on_member_save' ); 215 216 /** 217 * Clear group administrator and moderator cache when a group member is deleted. 218 * 219 * @since 4.0.0 220 * 221 * @param int $user_id User ID. 222 * @param int $group_id Group ID. 223 */ 224 function bp_groups_clear_group_administrator_cache_on_member_delete( $user_id, $group_id ) { 225 groups_clear_group_administrator_cache( $group_id ); 226 } 227 add_action( 'bp_groups_member_after_delete', 'bp_groups_clear_group_administrator_cache_on_member_delete', 10, 2 ); 228 229 /** 230 * Clear the group type cache for a group. 231 * 232 * Called when group is deleted. 233 * 234 * @since 2.6.0 235 * 236 * @param int $group_id The group ID. 237 */ 238 function groups_clear_group_type_cache( $group_id = 0 ) { 239 wp_cache_delete( $group_id, 'bp_groups_group_type' ); 240 } 241 add_action( 'groups_delete_group', 'groups_clear_group_type_cache' ); 242 243 /** 244 * Clear caches on membership save. 245 * 246 * @since 2.6.0 247 * 248 * @param BP_Groups_Member $member BP Groups Member instance. 249 */ 250 function bp_groups_clear_user_group_cache_on_membership_save( BP_Groups_Member $member ) { 251 wp_cache_delete( $member->user_id, 'bp_groups_memberships_for_user' ); 252 wp_cache_delete( $member->id, 'bp_groups_memberships' ); 253 } 254 add_action( 'groups_member_before_save', 'bp_groups_clear_user_group_cache_on_membership_save' ); 255 add_action( 'groups_member_before_remove', 'bp_groups_clear_user_group_cache_on_membership_save' ); 256 257 /** 258 * Clear caches on saving a group invitation or request. 259 * The save action is called when inserting a new record or using the save() method 260 * to update an existing record. 261 * 262 * @since 5.0.0 263 * 264 * @param BP_Invitation object $invitation Characteristics of the invitation just saved. 265 */ 266 function bp_groups_clear_user_group_cache_on_invitation_save( BP_Invitation $invitation ) { 267 if ( sanitize_key( 'BP_Groups_Invitation_Manager' ) !== $invitation->class ) { 268 return; 269 } 270 271 wp_cache_delete( $invitation->id, 'bp_groups_invitations_as_memberships' ); 272 } 273 add_action( 'bp_invitation_after_save', 'bp_groups_clear_user_group_cache_on_invitation_save', 10, 2 ); 274 275 /** 276 * Clear caches on invitation deletion or update. 277 * This also catches changes like sending an invite or marking one as accepted. 278 * 279 * @since 5.0.0 280 * 281 * @param array $args Associative array of columns/values describing invitations about to be deleted. 282 */ 283 function bp_groups_clear_user_group_cache_on_invitation_change( $args ) { 284 $args['fields' ] = 'ids'; 285 $affected_invitation_ids = groups_get_invites( $args ); 286 foreach ( $affected_invitation_ids as $invitation_id ) { 287 wp_cache_delete( $invitation_id, 'bp_groups_invitations_as_memberships' ); 288 } 289 } 290 add_action( 'bp_invitation_before_delete', 'bp_groups_clear_user_group_cache_on_invitation_change' ); 291 add_action( 'bp_invitation_before_update', 'bp_groups_clear_user_group_cache_on_invitation_change' ); 292 293 /** 294 * Clear group memberships cache on miscellaneous actions not covered by the 'after_save' hook. 295 * 296 * @since 2.6.0 297 * 298 * @param int $user_id Current user ID. 299 * @param int $group_id Current group ID. 300 */ 301 function bp_groups_clear_user_group_cache_on_other_events( $user_id, $group_id ) { 302 wp_cache_delete( $user_id, 'bp_groups_memberships_for_user' ); 303 304 $membership = new BP_Groups_Member( $user_id, $group_id ); 305 wp_cache_delete( $membership->id, 'bp_groups_memberships' ); 306 } 307 add_action( 'bp_groups_member_before_delete', 'bp_groups_clear_user_group_cache_on_other_events', 10, 2 ); 308 309 /** 310 * Reset cache incrementor for the Groups component. 311 * 312 * This function invalidates all cached results of group queries, 313 * whenever one of the following events takes place: 314 * - A group is created or updated. 315 * - A group is deleted. 316 * - A group's metadata is modified. 317 * 318 * @since 2.7.0 319 * 320 * @return bool True on success, false on failure. 321 */ 322 function bp_groups_reset_cache_incrementor() { 323 return bp_core_reset_incrementor( 'bp_groups' ); 324 } 325 add_action( 'groups_group_after_save', 'bp_groups_reset_cache_incrementor' ); 326 add_action( 'bp_groups_delete_group', 'bp_groups_reset_cache_incrementor' ); 327 add_action( 'updated_group_meta', 'bp_groups_reset_cache_incrementor' ); 328 add_action( 'deleted_group_meta', 'bp_groups_reset_cache_incrementor' ); 329 add_action( 'added_group_meta', 'bp_groups_reset_cache_incrementor' ); 330 331 /** 332 * Reset cache incrementor for Groups component when a group's taxonomy terms change. 333 * 334 * We infer that a group is being affected by looking at the objects belonging 335 * to the taxonomy being affected. 336 * 337 * @since 2.7.0 338 * 339 * @param int $object_id ID of the item whose terms are being modified. 340 * @param array $terms Array of object terms. 341 * @param array $tt_ids Array of term taxonomy IDs. 342 * @param string $taxonomy Taxonomy slug. 343 * @return bool True on success, false on failure. 344 */ 345 function bp_groups_reset_cache_incrementor_on_group_term_change( $object_id, $terms, $tt_ids, $taxonomy ) { 346 $tax_object = get_taxonomy( $taxonomy ); 347 if ( $tax_object && in_array( 'bp_group', $tax_object->object_type, true ) ) { 348 return bp_groups_reset_cache_incrementor(); 349 } 350 351 return false; 352 } 353 add_action( 'bp_set_object_terms', 'bp_groups_reset_cache_incrementor_on_group_term_change', 10, 4 ); 354 355 /** 356 * Reset cache incrementor for Groups component when a group's taxonomy terms are removed. 357 * 358 * We infer that a group is being affected by looking at the objects belonging 359 * to the taxonomy being affected. 360 * 361 * @since 2.7.0 362 * 363 * @param int $object_id ID of the item whose terms are being modified. 364 * @param array $terms Array of object terms. 365 * @param string $taxonomy Taxonomy slug. 366 * @return bool True on success, false on failure. 367 */ 368 function bp_groups_reset_cache_incrementor_on_group_term_remove( $object_id, $terms, $taxonomy ) { 369 $tax_object = get_taxonomy( $taxonomy ); 370 if ( $tax_object && in_array( 'bp_group', $tax_object->object_type, true ) ) { 371 return bp_groups_reset_cache_incrementor(); 372 } 373 374 return false; 375 } 376 add_action( 'bp_remove_object_terms', 'bp_groups_reset_cache_incrementor_on_group_term_remove', 10, 3 ); 377 378 /* List actions to clear super cached pages on, if super cache is installed */ 379 add_action( 'groups_join_group', 'bp_core_clear_cache' ); 380 add_action( 'groups_leave_group', 'bp_core_clear_cache' ); 381 add_action( 'groups_accept_invite', 'bp_core_clear_cache' ); 382 add_action( 'groups_reject_invite', 'bp_core_clear_cache' ); 383 add_action( 'groups_invite_user', 'bp_core_clear_cache' ); 384 add_action( 'groups_uninvite_user', 'bp_core_clear_cache' ); 385 add_action( 'groups_details_updated', 'bp_core_clear_cache' ); 386 add_action( 'groups_settings_updated', 'bp_core_clear_cache' ); 387 add_action( 'groups_unban_member', 'bp_core_clear_cache' ); 388 add_action( 'groups_ban_member', 'bp_core_clear_cache' ); 389 add_action( 'groups_demote_member', 'bp_core_clear_cache' ); 390 add_action( 'groups_promote_member', 'bp_core_clear_cache' ); 391 add_action( 'groups_membership_rejected', 'bp_core_clear_cache' ); 392 add_action( 'groups_membership_accepted', 'bp_core_clear_cache' ); 393 add_action( 'groups_membership_requested', 'bp_core_clear_cache' ); 394 add_action( 'groups_create_group_step_complete', 'bp_core_clear_cache' ); 395 add_action( 'groups_created_group', 'bp_core_clear_cache' ); 396 add_action( 'groups_group_avatar_updated', 'bp_core_clear_cache' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:00:57 2024 | Cross-referenced by PHPXref 0.7.1 |