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/upsell-plugin/includes/triggers.php +286 -0 7.8.9 → 8.0.5 View file →
@@ -1,0 +1,286 @@
1 +<?php
2 +/**
3 + * Triggers
4 + *
5 + * @package GamiPress\Upsell_Plugin\Triggers
6 + * @since 1.0.0
7 + */
8 +
9 +// Exit if accessed directly
10 +if( !defined( 'ABSPATH' ) ) exit;
11 +
12 +/**
13 + * Register activity triggers
14 + *
15 + * @param array $triggers
16 + * @return mixed
17 + */
18 +function gamipress_upsell_plugin_activity_triggers( $triggers ) {
19 +
20 + $triggers[__( 'Upsell Plugin', 'gamipress' )] = array(
21 +
22 + 'gamipress_publish_upsell_product' => __( 'Publish a new product', 'gamipress' ), // Internal GamiPress listener
23 +
24 + // Purchase
25 + 'gamipress_upsell_plugin_purchase' => __( 'Make a new purchase', 'gamipress' ),
26 +
27 + 'gamipress_upsell_plugin_product_purchase' => __( 'Purchase a product', 'gamipress' ),
28 + 'gamipress_upsell_plugin_specific_product_purchase' => __( 'Purchase a specific product', 'gamipress' ),
29 +
30 + // Subscriptions
31 + 'gamipress_upsell_plugin_subscription_purchase' => __( 'Purchase a subscription product', 'gamipress' ),
32 + 'gamipress_upsell_plugin_specific_subscription_purchase' => __( 'Purchase a specific subscription product', 'gamipress' ),
33 + 'gamipress_upsell_plugin_subscription_renewal' => __( 'Renew a subscription product', 'gamipress' ),
34 + 'gamipress_upsell_plugin_specific_subscription_renewal' => __( 'Renew a specific subscription product', 'gamipress' ),
35 + 'gamipress_upsell_plugin_subscription_cancelled' => __( 'Cancel a subscription product', 'gamipress' ),
36 + 'gamipress_upsell_plugin_specific_subscription_cancelled' => __( 'Cancel a specific subscription product', 'gamipress' ),
37 + 'gamipress_upsell_plugin_subscription_refunded' => __( 'Refund a subscription product', 'gamipress' ),
38 + 'gamipress_upsell_plugin_specific_subscription_refunded' => __( 'Refund a specific subscription product', 'gamipress' ),
39 + 'gamipress_upsell_plugin_subscription_expired' => __( 'Subscription product expires', 'gamipress' ),
40 + 'gamipress_upsell_plugin_specific_subscription_expired' => __( 'Specific subscription product expires', 'gamipress' ),
41 + );
42 +
43 + return $triggers;
44 +
45 +}
46 +add_filter( 'gamipress_activity_triggers', 'gamipress_upsell_plugin_activity_triggers' );
47 +
48 +/**
49 + * Register specific activity triggers
50 + *
51 + * @since 1.0.0
52 + *
53 + * @param array $specific_activity_triggers
54 + * @return array
55 + */
56 +function gamipress_upsell_plugin_specific_activity_triggers( $specific_activity_triggers ) {
57 +
58 + // Purchase
59 + $specific_activity_triggers['gamipress_upsell_plugin_specific_product_purchase'] = array( 'upsell_product' );
60 + // Subscriptions
61 + $specific_activity_triggers['gamipress_upsell_plugin_specific_subscription_purchase'] = array( 'upsell_product' );
62 + $specific_activity_triggers['gamipress_upsell_plugin_specific_subscription_renewal'] = array( 'upsell_product' );
63 + $specific_activity_triggers['gamipress_upsell_plugin_specific_subscription_cancelled'] = array( 'upsell_product' );
64 + $specific_activity_triggers['gamipress_upsell_plugin_specific_subscription_refunded'] = array( 'upsell_product' );
65 + $specific_activity_triggers['gamipress_upsell_plugin_specific_subscription_expired'] = array( 'upsell_product' );
66 +
67 +
68 + return $specific_activity_triggers;
69 +}
70 +add_filter( 'gamipress_specific_activity_triggers', 'gamipress_upsell_plugin_specific_activity_triggers' );
71 +
72 +/**
73 + * Register specific activity triggers labels
74 + *
75 + * @since 1.0.0
76 + *
77 + * @param array $specific_activity_trigger_labels
78 + * @return array
79 + */
80 +function gamipress_upsell_plugin_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
81 +
82 + // Purchase
83 + $specific_activity_trigger_labels['gamipress_upsell_plugin_specific_product_purchase'] = __( 'Purchase %s', 'gamipress' );
84 + // Subscriptions
85 + $specific_activity_trigger_labels['gamipress_upsell_plugin_specific_subscription_purchase'] = __( 'Purchase %s subscription', 'gamipress' );
86 + $specific_activity_trigger_labels['gamipress_upsell_plugin_specific_subscription_renewal'] = __( 'Renew %s subscription', 'gamipress' );
87 + $specific_activity_trigger_labels['gamipress_upsell_plugin_specific_subscription_cancelled'] = __( 'Cancel %s subscription', 'gamipress' );
88 + $specific_activity_trigger_labels['gamipress_upsell_plugin_specific_subscription_refunded'] = __( 'Refund %s subscription', 'gamipress' );
89 + $specific_activity_trigger_labels['gamipress_upsell_plugin_specific_subscription_expired'] = __( '%s subscription expires', 'gamipress' );
90 +
91 + return $specific_activity_trigger_labels;
92 +}
93 +add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_upsell_plugin_specific_activity_trigger_label' );
94 +
95 +/**
96 + * Get user for a given trigger action.
97 + *
98 + * @since 1.0.0
99 + *
100 + * @param integer $user_id user ID to override.
101 + * @param string $trigger Trigger name.
102 + * @param array $args Passed trigger args.
103 + * @return integer User ID.
104 + */
105 +function gamipress_upsell_plugin_trigger_get_user_id( $user_id, $trigger, $args ) {
106 +
107 + switch ( $trigger ) {
108 + case 'gamipress_publish_upsell_product': // Internal GamiPress listener
109 + // Purchase
110 + case 'gamipress_upsell_plugin_purchase':
111 + case 'gamipress_upsell_plugin_product_purchase':
112 + case 'gamipress_upsell_plugin_specific_product_purchase':
113 + // Subscriptions
114 + case 'gamipress_upsell_plugin_subscription_purchase':
115 + case 'gamipress_upsell_plugin_specific_subscription_purchase':
116 + case 'gamipress_upsell_plugin_subscription_renewal':
117 + case 'gamipress_upsell_plugin_specific_subscription_renewal':
118 + case 'gamipress_upsell_plugin_subscription_cancelled':
119 + case 'gamipress_upsell_plugin_specific_subscription_cancelled':
120 + case 'gamipress_upsell_plugin_subscription_refunded':
121 + case 'gamipress_upsell_plugin_specific_subscription_refunded':
122 + case 'gamipress_upsell_plugin_subscription_expired':
123 + case 'gamipress_upsell_plugin_specific_subscription_expired':
124 + $user_id = $args[1];
125 + break;
126 + }
127 +
128 + return $user_id;
129 +
130 +}
131 +add_filter( 'gamipress_trigger_get_user_id', 'gamipress_upsell_plugin_trigger_get_user_id', 10, 3 );
132 +
133 +/**
134 + * Get the id for a given specific trigger action.
135 + *
136 + * @since 1.0.1
137 + *
138 + * @param integer $specific_id Specific ID to override.
139 + * @param string $trigger Trigger name.
140 + * @param array $args Passed trigger args.
141 + *
142 + * @return integer Specific ID.
143 + */
144 +function gamipress_upsell_plugin_specific_trigger_get_id( $specific_id, $trigger, $args ) {
145 +
146 + switch ( $trigger ) {
147 + // Purchase
148 + case 'gamipress_upsell_plugin_specific_product_purchase':
149 + // Subscriptions
150 + case 'gamipress_upsell_plugin_specific_subscription_purchase':
151 + case 'gamipress_upsell_plugin_specific_subscription_renewal':
152 + case 'gamipress_upsell_plugin_specific_subscription_cancelled':
153 + case 'gamipress_upsell_plugin_specific_subscription_refunded':
154 + case 'gamipress_upsell_plugin_specific_subscription_expired':
155 + $specific_id = $args[0];
156 + break;
157 + }
158 +
159 + return $specific_id;
160 +
161 +}
162 +
163 +add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_upsell_plugin_specific_trigger_get_id', 10, 3 );
164 +
165 +/**
166 + * Extended meta data for event trigger logging
167 + *
168 + * @since 1.0.2
169 + *
170 + * @param array $log_meta
171 + * @param integer $user_id
172 + * @param string $trigger
173 + * @param integer $site_id
174 + * @param array $args
175 + *
176 + * @return array
177 + */
178 +function gamipress_upsell_plugin_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
179 +
180 + switch ( $trigger ) {
181 + case 'gamipress_publish_upsell_product': // Internal GamiPress listener
182 + // Add the product ID
183 + $log_meta['product_id'] = $args[0];
184 + $log_meta['post_id'] = $args[0]; // Post ID added to make column visible on logs list
185 + break;
186 + // Purchase
187 + case 'gamipress_upsell_plugin_product_purchase':
188 + case 'gamipress_upsell_plugin_specific_product_purchase':
189 + // Subscriptions
190 + case 'gamipress_upsell_plugin_subscription_purchase':
191 + case 'gamipress_upsell_plugin_specific_subscription_purchase':
192 + case 'gamipress_upsell_plugin_subscription_renewal':
193 + case 'gamipress_upsell_plugin_specific_subscription_renewal':
194 + case 'gamipress_upsell_plugin_subscription_cancelled':
195 + case 'gamipress_upsell_plugin_specific_subscription_cancelled':
196 + case 'gamipress_upsell_plugin_subscription_refunded':
197 + case 'gamipress_upsell_plugin_specific_subscription_refunded':
198 + case 'gamipress_upsell_plugin_subscription_expired':
199 + case 'gamipress_upsell_plugin_specific_subscription_expired':
200 + // Add the product and order IDs
201 + $log_meta['product_id'] = $args[0];
202 + $log_meta['post_id'] = $args[0]; // Post ID added to make column visible on logs list
203 + $log_meta['order_id'] = $args[2];
204 + break;
205 + case 'gamipress_upsell_plugin_purchase':
206 + // Add the order ID
207 + $log_meta['order_id'] = $args[0];
208 + break;
209 + }
210 +
211 + return $log_meta;
212 +}
213 +add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_upsell_plugin_log_event_trigger_meta_data', 10, 5 );
214 +
215 +/**
216 + * Extra filter to check duplicated activity
217 + *
218 + * @since 1.0.2
219 + *
220 + * @param bool $return
221 + * @param integer $user_id
222 + * @param string $trigger
223 + * @param integer $site_id
224 + * @param array $args
225 + *
226 + * @return bool True if user deserves trigger, else false
227 + */
228 +function gamipress_upsell_plugin_trigger_duplicity_check( $return, $user_id, $trigger, $site_id, $args ) {
229 +
230 + // If user doesn't deserves trigger, then bail to prevent grant access
231 + if( ! $return )
232 + return $return;
233 +
234 + $log_meta = array(
235 + 'type' => 'event_trigger',
236 + 'trigger_type' => $trigger,
237 + );
238 +
239 + switch ( $trigger ) {
240 + case 'gamipress_publish_upsell_product': // Internal GamiPress listener
241 + // User can not create same product more times, so check it
242 + $log_meta['product_id'] = $args[0];
243 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
244 + break;
245 + // Purchase
246 + case 'gamipress_upsell_plugin_product_purchase':
247 + case 'gamipress_upsell_plugin_specific_product_purchase':
248 + // Subscriptions
249 + case 'gamipress_upsell_plugin_subscription_purchase':
250 + case 'gamipress_upsell_plugin_specific_subscription_purchase':
251 + case 'gamipress_upsell_plugin_subscription_renewal':
252 + case 'gamipress_upsell_plugin_specific_subscription_renewal':
253 + case 'gamipress_upsell_plugin_subscription_cancelled':
254 + case 'gamipress_upsell_plugin_specific_subscription_cancelled':
255 + case 'gamipress_upsell_plugin_subscription_refunded':
256 + case 'gamipress_upsell_plugin_specific_subscription_refunded':
257 + case 'gamipress_upsell_plugin_subscription_expired':
258 + case 'gamipress_upsell_plugin_specific_subscription_expired':
259 + // Refund
260 + case 'gamipress_upsell_plugin_product_refund':
261 + case 'gamipress_upsell_plugin_specific_product_refund':
262 + case 'gamipress_upsell_plugin_user_product_refund':
263 +
264 + $quantity = isset( $args[3] ) ? $args[3] : 1;
265 +
266 + // Don't perform duplicity check if quantity is higher than 1
267 + if( $quantity > 1 ) {
268 + break;
269 + }
270 +
271 + // User can not place same product and order IDs more times, so check it
272 + $log_meta['product_id'] = $args[0];
273 + $log_meta['order_id'] = $args[2];
274 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
275 + break;
276 + case 'gamipress_upsell_plugin_purchase':
277 + // User can not place or refund same order ID more times, so check it
278 + $log_meta['order_id'] = $args[0];
279 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
280 + break;
281 + }
282 +
283 + return $return;
284 +
285 +}
286 +add_filter( 'gamipress_user_deserves_trigger', 'gamipress_upsell_plugin_trigger_duplicity_check', 10, 5 );