PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.3
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.3
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 / upsell-plugin / includes / triggers.php

triggers.php in GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI 8.0.3, at integrations/upsell-plugin/includes/triggers.php

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