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 / woocommerce / 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/woocommerce/includes/admin/recount-activity.php

148 lines 4.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\WooCommerce\Admin\Recount_Activity
6 * @since 1.0.4
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.4
15 *
16 * @param array $recountable_activity_triggers
17 *
18 * @return array
19 */
20 function gamipress_wc_recountable_activity_triggers( $recountable_activity_triggers ) {
21
22 $recountable_activity_triggers[__( 'WooCommerce', 'gamipress' )] = array(
23 'wc_purchases' => __( 'Recount purchases', 'gamipress' ),
24 'wc_reviews' => __( 'Recount reviews', 'gamipress' ),
25 );
26
27 return $recountable_activity_triggers;
28
29 }
30 add_filter( 'gamipress_recountable_activity_triggers', 'gamipress_wc_recountable_activity_triggers' );
31
32 /**
33 * Recount purchases
34 *
35 * @since 1.0.4
36 *
37 * @param array $response
38 *
39 * @return array $response
40 */
41 function gamipress_wc_activity_recount_purchases( $response, $loop, $limit, $offset ) {
42
43 global $wpdb;
44
45 // Get all stored users count
46 $users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users}" ) ) );
47
48 // On first loop send an informational text
49 if( $loop === 0 && $users_count > $limit ) {
50 $response['run_again'] = true;
51 $response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
52
53 // Return early to inform
54 return $response;
55 }
56
57 // Get all stored users
58 $users = $wpdb->get_results( $wpdb->prepare( "SELECT {$wpdb->users}.ID FROM {$wpdb->users} LIMIT {$offset}, {$limit}" ) );
59
60 foreach( $users as $user ) {
61 // Get all completed orders
62 $orders = wc_get_orders( array(
63 'limit' => -1,
64 'status' => 'completed',
65 'customer' => $user->ID,
66 'return' => 'ids',
67 ) );
68
69 foreach( $orders as $order_id ) {
70 // Trigger new purchase action for each payment
71 gamipress_wc_new_purchase( $order_id );
72 }
73
74 }
75
76 $recounted_users = $limit * ( $loop + 1 );
77
78 // Check remaining users
79 if( $recounted_users < $users_count ) {
80 $response['run_again'] = true;
81 $response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
82 }
83
84 return $response;
85
86 }
87 add_filter( 'gamipress_activity_recount_wc_purchases', 'gamipress_wc_activity_recount_purchases', 10, 4 );
88
89 /**
90 * Recount reviews
91 *
92 * @since 1.0.4
93 *
94 * @param array $response
95 *
96 * @return array $response
97 */
98 function gamipress_wc_activity_recount_reviews( $response, $loop, $limit, $offset ) {
99
100 global $wpdb;
101
102 // Get all stored users count
103 $users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users}" ) ) );
104
105 // On first loop send an informational text
106 if( $loop === 0 && $users_count > $limit ) {
107 $response['run_again'] = true;
108 $response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
109
110 // Return early to inform
111 return $response;
112 }
113
114 // Get all stored users
115 $users = $wpdb->get_results( $wpdb->prepare( "SELECT {$wpdb->users}.ID FROM {$wpdb->users} LIMIT {$offset}, {$limit}" ) );
116
117 foreach( $users as $user ) {
118 // Get all user approved reviews
119 $comments = $wpdb->get_results( $wpdb->prepare(
120 "
121 SELECT *
122 FROM $wpdb->comments AS c
123 WHERE c.user_id = %s
124 AND c.comment_approved = '1'
125 AND c.comment_type = 'review'
126 ",
127 $user->ID
128 ) );
129
130 foreach( $comments as $comment ) {
131 // Trigger review actions
132 do_action( 'gamipress_wc_specific_new_review', (int) $comment->ID, (int) $comment->user_id, $comment->comment_post_ID, $comment );
133 do_action( 'gamipress_wc_new_review', (int) $comment->ID, (int) $comment->user_id, $comment->comment_post_ID, $comment );
134 }
135 }
136
137 $recounted_users = $limit * ( $loop + 1 );
138
139 // Check remaining users
140 if( $recounted_users < $users_count ) {
141 $response['run_again'] = true;
142 $response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
143 }
144
145 return $response;
146
147 }
148 add_filter( 'gamipress_activity_recount_wc_reviews', 'gamipress_wc_activity_recount_reviews', 10, 4 );