PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.5
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.5
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 7.8.8 All 47 releases
← All changes | integrations/woocommerce/includes/admin/recount-activity.php +148 -0 7.9.2 → 8.0.5 View file →
@@ -1,0 +1,148 @@
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 );