[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Functions related to notifications caching. 4 * 5 * @package BuddyPress 6 * @subpackage NotificationsCache 7 * @since 2.0.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Slurp up metadata for a set of notifications. 15 * 16 * It grabs all notification meta associated with all of the notifications 17 * passed in $notification_ids and adds it to WP cache. This improves efficiency 18 * when using notification meta within a loop context. 19 * 20 * @since 2.3.0 21 * 22 * @param int|string|array|bool $notification_ids Accepts a single notification_id, or a 23 * comma-separated list or array of 24 * notification ids. 25 */ 26 function bp_notifications_update_meta_cache( $notification_ids = false ) { 27 bp_update_meta_cache( array( 28 'object_ids' => $notification_ids, 29 'object_type' => buddypress()->notifications->id, 30 'cache_group' => 'notification_meta', 31 'object_column' => 'notification_id', 32 'meta_table' => buddypress()->notifications->table_name_meta, 33 'cache_key_prefix' => 'bp_notifications_meta', 34 ) ); 35 } 36 37 /** 38 * Clear all notifications cache for a given user ID. 39 * 40 * @since 2.3.0 41 * 42 * @param int $user_id The user ID's cache to clear. 43 */ 44 function bp_notifications_clear_all_for_user_cache( $user_id = 0 ) { 45 wp_cache_delete( 'all_for_user_' . $user_id, 'bp_notifications' ); 46 wp_cache_delete( $user_id, 'bp_notifications_unread_count' ); 47 wp_cache_delete( $user_id, 'bp_notifications_grouped_notifications' ); 48 } 49 50 /** 51 * Invalidate 'all_for_user_' cache when saving. 52 * 53 * @since 2.0.0 54 * 55 * @param BP_Notifications_Notification $notification Notification object. 56 */ 57 function bp_notifications_clear_all_for_user_cache_after_save( $notification ) { 58 bp_notifications_clear_all_for_user_cache( $notification->user_id ); 59 } 60 add_action( 'bp_notification_after_save', 'bp_notifications_clear_all_for_user_cache_after_save' ); 61 62 /** 63 * Invalidate the 'all_for_user_' cache when deleting. 64 * 65 * @since 2.0.0 66 * 67 * @param int $args Notification deletion arguments. 68 */ 69 function bp_notifications_clear_all_for_user_cache_before_delete( $args ) { 70 71 // Pull up a list of items matching the args (those about te be deleted). 72 $ns = BP_Notifications_Notification::get( $args ); 73 74 $user_ids = array(); 75 foreach ( $ns as $n ) { 76 $user_ids[] = $n->user_id; 77 } 78 79 $user_ids = array_unique( $user_ids ); 80 foreach ( $user_ids as $user_id ) { 81 bp_notifications_clear_all_for_user_cache( $user_id ); 82 } 83 } 84 add_action( 'bp_notification_before_delete', 'bp_notifications_clear_all_for_user_cache_before_delete' ); 85 86 /** 87 * Invalidates 'all_for_user_' cache when updating. 88 * 89 * @since 2.3.0 90 * 91 * @param array $update_args See BP_Notifications_Notification::update() for description. 92 * @param array $where_args See BP_Notifications_Notification::update() for description. 93 */ 94 function bp_notifications_clear_all_for_user_cache_before_update( $update_args, $where_args ) { 95 96 // User ID is passed in where arguments. 97 if ( ! empty( $where_args['user_id'] ) ) { 98 bp_notifications_clear_all_for_user_cache( $where_args['user_id'] ); 99 100 // Get user ID from Notification ID. 101 } elseif ( ! empty( $where_args['id'] ) ) { 102 $n = bp_notifications_get_notification( $where_args['id'] ); 103 bp_notifications_clear_all_for_user_cache( $n->user_id ); 104 105 // Get the list of user IDs from notification IDs. 106 } elseif ( isset( $where_args['ids'] ) && $where_args['ids'] ) { 107 $ids = (array) $where_args['ids']; 108 $is_new = 1; 109 110 if ( isset( $update_args['data']['is_new'] ) && 1 === $update_args['data']['is_new'] ) { 111 $is_new = 0; 112 } 113 114 $ns = BP_Notifications_Notification::get( 115 array( 116 'id' => $ids, 117 'is_new' => $is_new, 118 ) 119 ); 120 121 $user_ids = wp_list_pluck( $ns, 'user_id' ); 122 $user_ids = array_unique( $user_ids ); 123 124 foreach ( $user_ids as $user_id ) { 125 bp_notifications_clear_all_for_user_cache( $user_id ); 126 } 127 } 128 } 129 add_action( 'bp_notification_before_update', 'bp_notifications_clear_all_for_user_cache_before_update', 10, 2 );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Nov 5 01:00:58 2024 | Cross-referenced by PHPXref 0.7.1 |