PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.6
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.6
8.0.6 8.0.5 8.0.4 8.0.3 8.0.1 8.0.2 8.0.0 7.9.9.7 7.9.9.6 7.9.9.5 7.9.9.4 7.9.9.3 7.9.9.2 7.9.9.1 7.9.9 7.9.8 7.9.7 7.9.6 7.9.5 7.9.4 7.9.3 7.9.2 7.9.1 7.9.0 7.8.9 All 48 releases
← All changes | integrations/buddypress/includes/admin/recount-activity.php +642 -0 7.9.0 → 8.0.6 View file →
@@ -1,0 +1,642 @@
1 +<?php
2 +/**
3 + * Recount Activity
4 + *
5 + * @package GamiPress\BuddyPress\Admin\Recount_Activity
6 + * @since 1.0.6
7 + */
8 +// Exit if accessed directly
9 +if( !defined( 'ABSPATH' ) ) exit;
10 +
11 +/**
12 + * Add recountable options to the Recount Activity Tool
13 + *
14 + * @since 1.0.6
15 + *
16 + * @param array $recountable_activity_triggers
17 + *
18 + * @return array
19 + */
20 +function gamipress_bp_recountable_activity_triggers( $recountable_activity_triggers ) {
21 +
22 + // BuddyPress
23 + $recountable_activity_triggers[__( 'BuddyPress', 'gamipress' )] = array(
24 + 'bp_activated_users' => __( 'Recount activated accounts', 'gamipress' ),
25 + );
26 +
27 + // BuddyPress Friendships
28 + if ( gamipress_bp_is_active( 'friends' ) ) {
29 + $recountable_activity_triggers[__( 'BuddyPress Friendships', 'gamipress' )] = array(
30 + 'bp_friendships' => __( 'Recount friendships', 'gamipress' ),
31 + );
32 + }
33 +
34 + // BuddyPress Messages
35 + if ( gamipress_bp_is_active( 'messages' ) ) {
36 + $recountable_activity_triggers[__( 'BuddyPress Messages', 'gamipress' )] = array(
37 + 'bp_messages' => __( 'Recount messages sent/replied', 'gamipress' ),
38 + );
39 + }
40 +
41 + // BuddyPress Activity
42 + if ( gamipress_bp_is_active( 'activity' ) ) {
43 + $recountable_activity_triggers[__( 'BuddyPress Activity', 'gamipress' )] = array(
44 + 'bp_published_activities' => __( 'Recount activity stream messages', 'gamipress' ),
45 + 'bp_activity_comments' => __( 'Recount activity replies', 'gamipress' ),
46 + 'bp_activity_favorites' => __( 'Recount activity favorites', 'gamipress' ),
47 + );
48 + }
49 +
50 + // BuddyPress Groups
51 + if ( gamipress_bp_is_active( 'groups' ) ) {
52 + $recountable_activity_triggers[__( 'BuddyPress Groups', 'gamipress' )] = array(
53 + 'bp_group_published_activities' => __( 'Recount groups activity stream messages', 'gamipress' ),
54 + 'bp_group_joins' => __( 'Recount groups joins', 'gamipress' ),
55 + 'bp_group_promotions' => __( 'Recount groups promotions to moderator/administrator', 'gamipress' ),
56 + );
57 + }
58 +
59 + return $recountable_activity_triggers;
60 +
61 +}
62 +add_filter( 'gamipress_recountable_activity_triggers', 'gamipress_bp_recountable_activity_triggers' );
63 +
64 +/**
65 + * Recount favorites
66 + *
67 + * @since 1.0.6
68 + * @updated 1.1.7 Added $loop parameter
69 + *
70 + * @param array $response
71 + * @param int $loop
72 + *
73 + * @return array $response
74 + */
75 +function gamipress_bp_activity_recount_activated_users( $response, $loop ) {
76 +
77 + global $wpdb;
78 +
79 + // Set a limit of 100 users
80 + $limit = 100;
81 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
82 +
83 + // Get all stored users count
84 + $users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users}" ) ) );
85 +
86 + // On first loop send an informational text
87 + if( $loop === 0 && $users_count > $limit ) {
88 + $response['run_again'] = true;
89 + $response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
90 +
91 + // Return early to inform
92 + return $response;
93 + }
94 +
95 + // Get all stored users
96 + $users = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->users} LIMIT {$offset}, {$limit}" ) );
97 +
98 + foreach( $users as $user ) {
99 +
100 + if( bp_is_user_active( $user->ID ) ) {
101 +
102 + // Trigger activate user action for each user
103 + do_action( 'gamipress_bp_activate_user', $user, $user->ID );
104 +
105 + }
106 +
107 + }
108 +
109 + $recounted_users = $limit * ( $loop + 1 );
110 +
111 + // Check remaining users
112 + if( $recounted_users < $users_count ) {
113 + $response['run_again'] = true;
114 + $response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
115 + }
116 +
117 + return $response;
118 +
119 +}
120 +add_filter( 'gamipress_activity_recount_bp_activated_users', 'gamipress_bp_activity_recount_activated_users', 10, 2 );
121 +
122 +/**
123 + * Recount friendships
124 + *
125 + * @since 1.0.6
126 + * @updated 1.1.7 Added $loop parameter
127 + *
128 + * @param array $response
129 + * @param int $loop
130 + *
131 + * @return array $response
132 + */
133 +function gamipress_bp_activity_recount_friendships( $response, $loop ) {
134 +
135 + if ( ! gamipress_bp_is_active( 'friends' ) ) {
136 + $response['success'] = false;
137 + $response['response'] = __( 'BuddyPress Friends module is not active.', 'gamipress' );
138 +
139 + return $response;
140 + }
141 +
142 + global $wpdb;
143 +
144 + // Set a limit of 100 users
145 + $limit = 100;
146 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
147 +
148 + $bp = buddypress();
149 +
150 + // Get all accepted friendships count
151 + $friendships_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->friends->table_name} WHERE is_confirmed = 1" ) ) );
152 +
153 + // On first loop send an informational text
154 + if( $loop === 0 && $friendships_count > $limit ) {
155 + $response['run_again'] = true;
156 + $response['message'] = sprintf( __( '%d friendships found, recounting...', 'gamipress' ), $friendships_count );
157 +
158 + // Return early to inform
159 + return $response;
160 + }
161 +
162 + // Get all accepted friendships
163 + $friendships = $wpdb->get_results( $wpdb->prepare( "SELECT id, initiator_user_id, friend_user_id FROM {$bp->friends->table_name} WHERE is_confirmed = 1 LIMIT {$offset}, {$limit}" ) );
164 +
165 + foreach( $friendships as $friendship ) {
166 +
167 + // Trigger friendship accepted action for each friendship
168 + gamipress_bp_friendship_accepted( $friendship->id, $friendship->initiator_user_id, $friendship->friend_user_id );
169 +
170 + }
171 +
172 + $recounted_friendships = $limit * ( $loop + 1 );
173 +
174 + // Check remaining users
175 + if( $recounted_friendships < $friendships_count ) {
176 + $response['run_again'] = true;
177 + $response['message'] = sprintf( __( '%d remaining friendships to finish recount', 'gamipress' ), ( $friendships_count - $recounted_friendships ) );
178 + }
179 +
180 + return $response;
181 +
182 +}
183 +add_filter( 'gamipress_activity_recount_bp_friendships', 'gamipress_bp_activity_recount_friendships', 10, 2 );
184 +
185 +/**
186 + * Recount messages
187 + *
188 + * @since 1.0.6
189 + * @updated 1.1.7 Added $loop parameter
190 + *
191 + * @param array $response
192 + * @param int $loop
193 + *
194 + * @return array $response
195 + */
196 +function gamipress_bp_activity_recount_messages( $response, $loop ) {
197 +
198 + if ( ! gamipress_bp_is_active( 'messages' ) ) {
199 + $response['success'] = false;
200 + $response['response'] = __( 'BuddyPress Messages module is not active.', 'gamipress' );
201 +
202 + return $response;
203 + }
204 +
205 + global $wpdb;
206 +
207 + // Set a limit of 100 users
208 + $limit = 100;
209 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
210 +
211 + $bp = buddypress();
212 +
213 + // Get all messages count
214 + $messages_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->messages->table_name}" ) ) );
215 +
216 + // On first loop send an informational text
217 + if( $loop === 0 && $messages_count > $limit ) {
218 + $response['run_again'] = true;
219 + $response['message'] = sprintf( __( '%d messages found, recounting...', 'gamipress' ), $messages_count );
220 +
221 + // Return early to inform
222 + return $response;
223 + }
224 +
225 + // Get all messages
226 + $messages = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->messages->table_name} LIMIT {$offset}, {$limit}" ) );
227 +
228 + foreach( $messages as $message ) {
229 +
230 + // Trigger message sent action for each message
231 + gamipress_bp_send_message( $message );
232 +
233 + }
234 +
235 + $recounted_messages = $limit * ( $loop + 1 );
236 +
237 + // Check remaining messages
238 + if( $recounted_messages < $messages_count ) {
239 + $response['run_again'] = true;
240 + $response['message'] = sprintf( __( '%d remaining messages to finish recount', 'gamipress' ), ( $messages_count - $recounted_messages ) );
241 + }
242 +
243 + return $response;
244 +
245 +}
246 +add_filter( 'gamipress_activity_recount_bp_messages', 'gamipress_bp_activity_recount_messages', 10, 2 );
247 +
248 +/**
249 + * Recount activity
250 + *
251 + * @since 1.0.6
252 + * @updated 1.1.7 Added $loop parameter
253 + *
254 + * @param array $response
255 + * @param int $loop
256 + *
257 + * @return array $response
258 + */
259 +function gamipress_bp_activity_recount_activities( $response, $loop ) {
260 +
261 + if ( ! gamipress_bp_is_active( 'activity' ) ) {
262 + $response['success'] = false;
263 + $response['response'] = __( 'BuddyPress Activity module is not active.', 'gamipress' );
264 +
265 + return $response;
266 + }
267 +
268 + global $wpdb;
269 +
270 + // Set a limit of 100 users
271 + $limit = 100;
272 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
273 +
274 + $bp = buddypress();
275 +
276 + // Get all activities count
277 + $activities_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->activity->table_name} WHERE type = 'activity_update'" ) ) );
278 +
279 + // On first loop send an informational text
280 + if( $loop === 0 && $activities_count > $limit ) {
281 + $response['run_again'] = true;
282 + $response['message'] = sprintf( __( '%d activities found, recounting...', 'gamipress' ), $activities_count );
283 +
284 + // Return early to inform
285 + return $response;
286 + }
287 +
288 + // Get all activities
289 + $activities = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->activity->table_name} WHERE type = 'activity_update' LIMIT {$offset}, {$limit}" ) );
290 +
291 + foreach( $activities as $activity ) {
292 +
293 + // Trigger new activity stream action for each activity
294 + gamipress_bp_publish_activity( $activity->content, $activity->user_id, $activity->id );
295 +
296 + }
297 +
298 + $recounted_activities = $limit * ( $loop + 1 );
299 +
300 + // Check remaining activities
301 + if( $recounted_activities < $activities_count ) {
302 + $response['run_again'] = true;
303 + $response['message'] = sprintf( __( '%d remaining activities to finish recount', 'gamipress' ), ( $activities_count - $recounted_activities ) );
304 + }
305 +
306 + return $response;
307 +
308 +}
309 +add_filter( 'gamipress_activity_recount_bp_published_activities', 'gamipress_bp_activity_recount_activities', 10, 2 );
310 +
311 +/**
312 + * Recount activity comments
313 + *
314 + * @since 1.0.6
315 + * @updated 1.1.7 Added $loop parameter
316 + *
317 + * @param array $response
318 + * @param int $loop
319 + *
320 + * @return array $response
321 + */
322 +function gamipress_bp_activity_recount_activity_comments( $response, $loop ) {
323 +
324 + if ( ! gamipress_bp_is_active( 'activity' ) ) {
325 + $response['success'] = false;
326 + $response['response'] = __( 'BuddyPress Activity module is not active.', 'gamipress' );
327 +
328 + return $response;
329 + }
330 +
331 + global $wpdb;
332 +
333 + // Set a limit of 100 users
334 + $limit = 100;
335 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
336 +
337 + $bp = buddypress();
338 +
339 + // Get all activity comments count
340 + $activities_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->activity->table_name} WHERE type = 'activity_comment'" ) ) );
341 +
342 + // On first loop send an informational text
343 + if( $loop === 0 && $activities_count > $limit ) {
344 + $response['run_again'] = true;
345 + $response['message'] = sprintf( __( '%d activities found, recounting...', 'gamipress' ), $activities_count );
346 +
347 + // Return early to inform
348 + return $response;
349 + }
350 +
351 + // Get all activity comments
352 + $activities = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->activity->table_name} WHERE type = 'activity_comment' LIMIT {$offset}, {$limit}" ) );
353 +
354 + foreach( $activities as $activity ) {
355 +
356 + // Trigger new activity stream action for each activity
357 + gamipress_bp_new_activity_comment( $activity->id, $activity, $activity );
358 +
359 + }
360 +
361 + $recounted_activities = $limit * ( $loop + 1 );
362 +
363 + // Check remaining activities
364 + if( $recounted_activities < $activities_count ) {
365 + $response['run_again'] = true;
366 + $response['message'] = sprintf( __( '%d remaining activities to finish recount', 'gamipress' ), ( $activities_count - $recounted_activities ) );
367 + }
368 +
369 + return $response;
370 +
371 +}
372 +add_filter( 'gamipress_activity_recount_bp_activity_comments', 'gamipress_bp_activity_recount_activity_comments', 10, 2 );
373 +
374 +/**
375 + * Recount activity favorites
376 + *
377 + * @since 1.0.6
378 + * @updated 1.1.7 Added $loop parameter
379 + *
380 + * @param array $response
381 + * @param int $loop
382 + *
383 + * @return array $response
384 + */
385 +function gamipress_bp_activity_recount_activity_favorites( $response, $loop ) {
386 +
387 + if ( ! gamipress_bp_is_active( 'activity' ) ) {
388 + $response['success'] = false;
389 + $response['response'] = __( 'BuddyPress Activity module is not active.', 'gamipress' );
390 +
391 + return $response;
392 + }
393 +
394 + global $wpdb;
395 +
396 + // Set a limit of 100 users
397 + $limit = 100;
398 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
399 +
400 + // Get all stored users count
401 + $users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users}" ) ) );
402 +
403 + // On first loop send an informational text
404 + if( $loop === 0 && $users_count > $limit ) {
405 + $response['run_again'] = true;
406 + $response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
407 +
408 + // Return early to inform
409 + return $response;
410 + }
411 +
412 + // Get all stored users
413 + $users = $wpdb->get_results( $wpdb->prepare( "SELECT ID FROM {$wpdb->users} LIMIT {$offset}, {$limit}" ) );
414 +
415 + foreach( $users as $user ) {
416 +
417 + $user_favorites = bp_activity_get_user_favorites( $user->ID );
418 +
419 + foreach( $user_favorites as $activity_id ) {
420 +
421 + // Trigger new activity favorite action for each activity
422 + gamipress_bp_favorite_activity( $activity_id, $user->ID );
423 +
424 + }
425 + }
426 +
427 + $recounted_users = $limit * ( $loop + 1 );
428 +
429 + // Check remaining users
430 + if( $recounted_users < $users_count ) {
431 + $response['run_again'] = true;
432 + $response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
433 + }
434 +
435 + return $response;
436 +
437 +}
438 +add_filter( 'gamipress_activity_recount_bp_activity_favorites', 'gamipress_bp_activity_recount_activity_favorites', 10, 2 );
439 +
440 +/**
441 + * Recount group activity
442 + *
443 + * @since 1.0.6
444 + * @updated 1.1.7 Added $loop parameter
445 + *
446 + * @param array $response
447 + * @param int $loop
448 + *
449 + * @return array $response
450 + */
451 +function gamipress_bp_activity_recount_activity_group_published_activities( $response, $loop ) {
452 +
453 + if ( ! gamipress_bp_is_active( 'groups' ) ) {
454 + $response['success'] = false;
455 + $response['response'] = __( 'BuddyPress Groups module is not active.', 'gamipress' );
456 +
457 + return $response;
458 + }
459 +
460 + global $wpdb;
461 +
462 + // Set a limit of 10 groups
463 + $limit = 10;
464 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
465 +
466 + $bp = buddypress();
467 +
468 + // Get all groups count
469 + $groups_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->groups->table_name}" ) ) );
470 +
471 + // On first loop send an informational text
472 + if( $loop === 0 && $groups_count > $limit ) {
473 + $response['run_again'] = true;
474 + $response['message'] = sprintf( __( '%d groups found, recounting...', 'gamipress' ), $groups_count );
475 +
476 + // Return early to inform
477 + return $response;
478 + }
479 +
480 + // Get all groups
481 + $groups = $wpdb->get_results( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name} LIMIT {$offset}, {$limit}" ) );
482 +
483 + foreach( $groups as $group ) {
484 +
485 + // Get all activities
486 + $activities = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->activity->table_name} WHERE type = 'activity_update' AND item_id = {$group->id}" ) );
487 +
488 + foreach( $activities as $activity ) {
489 +
490 + // Trigger new group activity stream action for each activity
491 + gamipress_bp_group_publish_activity( $activity->content, $activity->user_id, $group->id, $activity->id );
492 +
493 + }
494 +
495 + }
496 +
497 + $recounted_groups = $limit * ( $loop + 1 );
498 +
499 + // Check remaining groups
500 + if( $recounted_groups < $groups_count ) {
501 + $response['run_again'] = true;
502 + $response['message'] = sprintf( __( '%d remaining groups to finish recount', 'gamipress' ), ( $groups_count - $recounted_groups ) );
503 + }
504 +
505 + return $response;
506 +
507 +}
508 +add_filter( 'gamipress_activity_recount_bp_group_published_activities', 'gamipress_bp_activity_recount_activity_group_published_activities', 10, 2 );
509 +
510 +/**
511 + * Recount group joins
512 + *
513 + * @since 1.0.6
514 + * @updated 1.1.7 Added $loop parameter
515 + *
516 + * @param array $response
517 + * @param int $loop
518 + *
519 + * @return array $response
520 + */
521 +function gamipress_bp_activity_recount_activity_group_joins( $response, $loop ) {
522 +
523 + if ( ! gamipress_bp_is_active( 'groups' ) ) {
524 + $response['success'] = false;
525 + $response['response'] = __( 'BuddyPress Groups module is not active.', 'gamipress' );
526 +
527 + return $response;
528 + }
529 +
530 + global $wpdb;
531 +
532 + // Set a limit of 10 groups
533 + $limit = 10;
534 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
535 +
536 + $bp = buddypress();
537 +
538 + // Get all groups count
539 + $groups_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->groups->table_name}" ) ) );
540 +
541 + // On first loop send an informational text
542 + if( $loop === 0 && $groups_count > $limit ) {
543 + $response['run_again'] = true;
544 + $response['message'] = sprintf( __( '%d groups found, recounting...', 'gamipress' ), $groups_count );
545 +
546 + // Return early to inform
547 + return $response;
548 + }
549 +
550 + // Get all groups
551 + $groups = $wpdb->get_results( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name} LIMIT {$offset}, {$limit}" ) );
552 +
553 + foreach( $groups as $group ) {
554 +
555 + // Get all activities
556 + $activities = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->activity->table_name} WHERE type = 'joined_group' AND item_id = {$group->id}" ) );
557 +
558 + foreach( $activities as $activity ) {
559 +
560 + // Trigger new group join action for each activity
561 + gamipress_bp_join_group( $group->id, $activity->user_id );
562 +
563 + }
564 +
565 + }
566 +
567 + $recounted_groups = $limit * ( $loop + 1 );
568 +
569 + // Check remaining groups
570 + if( $recounted_groups < $groups_count ) {
571 + $response['run_again'] = true;
572 + $response['message'] = sprintf( __( '%d remaining groups to finish recount', 'gamipress' ), ( $groups_count - $recounted_groups ) );
573 + }
574 +
575 + return $response;
576 +
577 +}
578 +add_filter( 'gamipress_activity_recount_bp_group_joins', 'gamipress_bp_activity_recount_activity_group_joins', 10, 2 );
579 +
580 +/**
581 + * Recount group promotions
582 + *
583 + * @since 1.0.6
584 + * @updated 1.1.7 Added $loop parameter
585 + *
586 + * @param array $response
587 + * @param int $loop
588 + *
589 + * @return array $response
590 + */
591 +function gamipress_bp_activity_recount_activity_group_promotions( $response, $loop ) {
592 +
593 + if ( ! gamipress_bp_is_active( 'groups' ) ) {
594 + $response['success'] = false;
595 + $response['response'] = __( 'BuddyPress Groups module is not active.', 'gamipress' );
596 +
597 + return $response;
598 + }
599 +
600 + global $wpdb;
601 +
602 + // Set a limit of 10 groups
603 + $limit = 10;
604 + $offset = ( $loop !== 0 ? $limit * ( $loop - 1 ) : 0 );
605 +
606 + $bp = buddypress();
607 +
608 + // Get all groups count
609 + $groups_members_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->groups->table_name_members}" ) ) );
610 +
611 + // On first loop send an informational text
612 + if( $loop === 0 && $groups_members_count > $limit ) {
613 + $response['run_again'] = true;
614 + $response['message'] = sprintf( __( '%d group members found, recounting...', 'gamipress' ), $groups_members_count );
615 +
616 + // Return early to inform
617 + return $response;
618 + }
619 +
620 + // Get all groups
621 + $groups_members = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name_members} LIMIT {$offset}, {$limit}" ) );
622 +
623 + foreach( $groups_members as $group_member ) {
624 +
625 + if( $group_member->is_admin || $group_member->is_mod ) {
626 + // Trigger new promoted user action for each group member mod/admin
627 + gamipress_bp_promoted_member( $group_member->group_id, $group_member->user_id );
628 + }
629 + }
630 +
631 + $recounted_group_members = $limit * ( $loop + 1 );
632 +
633 + // Check remaining group members
634 + if( $recounted_group_members < $groups_members_count ) {
635 + $response['run_again'] = true;
636 + $response['message'] = sprintf( __( '%d remaining group members to finish recount', 'gamipress' ), ( $groups_members_count - $recounted_group_members ) );
637 + }
638 +
639 + return $response;
640 +
641 +}
642 +add_filter( 'gamipress_activity_recount_bp_group_promotions', 'gamipress_bp_activity_recount_activity_group_promotions', 10, 2 );