PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 7.9.8
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v7.9.8
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 7.8.8 7.8.7 All 46 releases
gamipress / integrations / buddypress / includes / admin / recount-activity.php

recount-activity.php in GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI 7.9.8, at integrations/buddypress/includes/admin/recount-activity.php

642 lines 20.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 );