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 / easy-digital-downloads / includes / triggers.php

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

827 lines 33.9 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\Easy_Digital_Downloads\Triggers
6 * @since 1.0.0
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Register plugin activity triggers
14 *
15 * @param array $triggers
16 * @return mixed
17 */
18 function gamipress_edd_activity_triggers( $triggers ) {
19
20 // Easy Digital Downloads
21 $triggers[__( 'Easy Digital Downloads', 'gamipress' )] = array(
22 'gamipress_publish_download' => __( 'Publish a new download', 'gamipress' ), // Internal GamiPress listener
23
24 'gamipress_edd_lifetime_value' => __( 'Lifetime value is equal, less or greater than a value', 'gamipress' ),
25
26 // Purchase
27 'gamipress_edd_new_purchase' => __( 'Make a new purchase', 'gamipress' ),
28
29 'gamipress_edd_new_download_purchase' => __( 'Purchase a download', 'gamipress' ),
30 'gamipress_edd_specific_download_purchase' => __( 'Purchase a specific download', 'gamipress' ),
31 'gamipress_edd_new_free_download_purchase' => __( 'Purchase a free download', 'gamipress' ),
32 'gamipress_edd_new_paid_download_purchase' => __( 'Purchase a paid download', 'gamipress' ),
33 'gamipress_edd_download_variation_purchase' => __( 'Purchase a specific download variation', 'gamipress' ),
34
35 'gamipress_edd_download_category_purchase' => __( 'Purchase a download of a specific category', 'gamipress' ),
36 'gamipress_edd_download_tag_purchase' => __( 'Purchase a download of a specific tag', 'gamipress' ),
37
38 'gamipress_edd_new_sale' => __( 'Vendor gets a new sale', 'gamipress' ),
39 // Refund
40 'gamipress_edd_purchase_refund' => __( 'Refund a purchase', 'gamipress' ),
41 'gamipress_edd_download_refund' => __( 'Refund a download', 'gamipress' ),
42 'gamipress_edd_specific_download_refund' => __( 'Refund a specific download', 'gamipress' ),
43
44 'gamipress_edd_download_variation_refund' => __( 'Refund a specific download variation', 'gamipress' ),
45 'gamipress_edd_download_category_refund' => __( 'Refund a download of a specific category', 'gamipress' ),
46 'gamipress_edd_download_tag_refund' => __( 'Refund a download of a specific tag', 'gamipress' ),
47
48 'gamipress_edd_user_download_refund' => __( 'Vendor gets a download refunded', 'gamipress' ),
49 );
50
51 // EDD FES
52 if( class_exists('EDD_Front_End_Submissions') ) {
53
54 $triggers[__( 'EDD - FrontEnd Submissions', 'gamipress' )] = array(
55 'gamipress_edd_approve_download' => __( 'Vendor get approved a new download', 'gamipress' ),
56 );
57 }
58
59 // EDD Wish Lists
60 if( class_exists('EDD_Wish_Lists') ) {
61 $triggers[__( 'EDD - Wish Lists', 'gamipress' )] = array(
62 'gamipress_publish_edd_wish_list' => __( 'Create a new wish list', 'gamipress' ), // Internal GamiPress listener
63 'gamipress_edd_add_to_wish_list' => __( 'Add a download to any wish list', 'gamipress' ),
64 'gamipress_edd_add_specific_to_wish_list' => __( 'Add a specific download to any wish list', 'gamipress' ),
65 );
66 }
67
68 // EDD Downloads Lists
69 if( class_exists('EDD_Downloads_Lists') ) {
70 $triggers[__( 'EDD - Downloads Lists', 'gamipress' )] = array(
71 'gamipress_edd_wish_download' => __( 'Add a download to their wishes list', 'gamipress' ),
72 'gamipress_edd_wish_specific_download' => __( 'Add a specific download to their wishes list', 'gamipress' ),
73 'gamipress_edd_favorite_download' => __( 'Add a download to their favorites list', 'gamipress' ),
74 'gamipress_edd_favorite_specific_download' => __( 'Add a specific download to their favorites list', 'gamipress' ),
75 'gamipress_edd_like_download' => __( 'Add a download to their likes list', 'gamipress' ),
76 'gamipress_edd_like_specific_download' => __( 'Add a specific download to their likes list', 'gamipress' ),
77 'gamipress_edd_recommend_download' => __( 'Add a download to their recommendations list', 'gamipress' ),
78 'gamipress_edd_recommend_specific_download' => __( 'Add a specific download to their recommendations list', 'gamipress' )
79 );
80 }
81
82 // EDD Reviews
83 if( class_exists('EDD_Reviews') ) {
84 $triggers[__( 'EDD - Reviews', 'gamipress' )] = array(
85 'gamipress_edd_new_review' => __( 'Review a download', 'gamipress' ),
86 'gamipress_edd_specific_new_review' => __( 'Review a specific download', 'gamipress' ),
87 'gamipress_edd_get_review' => __( 'Vendor gets a review on a download', 'gamipress' ),
88 'gamipress_edd_get_specific_review' => __( 'Vendor gets a review on a specific download', 'gamipress' )
89 );
90 }
91
92 // EDD Download Pages
93 if( class_exists('EDD_Download_Pages') ) {
94 $download_pages_index = __( 'EDD - Download Pages', 'gamipress' );
95
96 $triggers[$download_pages_index] = array(
97 'gamipress_publish_edd_download_page' => __( 'Publish a new download page', 'gamipress' ) // Internal GamiPress listener
98 );
99
100 // EDD FrontEnd Submissions + EDD Download Pages
101 if( class_exists('EDD_FES') ) {
102 $triggers[$download_pages_index]['gamipress_edd_approve_edd_download_page'] = __( 'Vendor get approved a new download page', 'gamipress' );
103 }
104 }
105
106 // EDD Social Discounts
107 if( class_exists('EDD_Social_Discounts') ) {
108 $triggers[__( 'EDD - Download Pages', 'gamipress' )] = array(
109 'gamipress_edd_share_download' => __( 'Share a download', 'gamipress' ),
110 'gamipress_edd_share_specific_download' => __( 'Share a specific download', 'gamipress' )
111 );
112 }
113
114 return $triggers;
115
116 }
117 add_filter( 'gamipress_activity_triggers', 'gamipress_edd_activity_triggers' );
118
119 /**
120 * Register Easy Digital Downloads specific activity triggers
121 *
122 * @since 1.0.0
123 *
124 * @param array $specific_activity_triggers
125 * @return array
126 */
127 function gamipress_edd_specific_activity_triggers( $specific_activity_triggers ) {
128
129 // Purchase
130 $specific_activity_triggers['gamipress_edd_specific_download_purchase'] = array( 'download' );
131 $specific_activity_triggers['gamipress_edd_download_variation_purchase'] = array( 'download' );
132 // Refund
133 $specific_activity_triggers['gamipress_edd_specific_download_refund'] = array( 'download' );
134 $specific_activity_triggers['gamipress_edd_download_variation_refund'] = array( 'download' );
135
136 // EDD Wish Lists
137 if( class_exists('EDD_Wish_Lists') ) {
138 $specific_activity_triggers['gamipress_edd_add_specific_to_wish_list'] = array( 'download' );
139 }
140
141 // EDD Downloads Lists
142 if( class_exists('EDD_Downloads_Lists') ) {
143 $specific_activity_triggers['gamipress_edd_wish_specific_download'] = array( 'download' );
144 $specific_activity_triggers['gamipress_edd_favorite_specific_download'] = array( 'download' );
145 $specific_activity_triggers['gamipress_edd_like_specific_download'] = array( 'download' );
146 $specific_activity_triggers['gamipress_edd_recommend_specific_download'] = array( 'download' );
147 }
148
149 // EDD Reviews
150 if( class_exists('EDD_Reviews') ) {
151 $specific_activity_triggers['gamipress_edd_specific_new_review'] = array( 'download' );
152 $specific_activity_triggers['gamipress_edd_get_specific_review'] = array( 'download' );
153 }
154
155 // EDD Social Discounts
156 if( class_exists('EDD_Social_Discounts') ) {
157 $specific_activity_triggers['gamipress_edd_share_specific_download'] = array( 'download' );
158 }
159
160 return $specific_activity_triggers;
161 }
162 add_filter( 'gamipress_specific_activity_triggers', 'gamipress_edd_specific_activity_triggers' );
163
164 /**
165 * Build custom activity trigger label
166 *
167 * @param string $title
168 * @param integer $requirement_id
169 * @param array $requirement
170 *
171 * @return string
172 */
173 function gamipress_edd_activity_trigger_label( $title, $requirement_id, $requirement ) {
174
175 $lifetime = ( isset( $requirement['edd_lifetime'] ) ) ? absint( $requirement['edd_lifetime'] ) : 0;
176 $lifetime_condition = ( isset( $requirement['edd_lifetime_condition'] ) ) ? $requirement['edd_lifetime_condition'] : 'equal';
177 $lifetime_conditions = gamipress_edd_get_lifetime_conditions();
178
179 switch( $requirement['trigger_type'] ) {
180
181 // Download variation
182 case 'gamipress_edd_download_variation_purchase':
183 case 'gamipress_edd_download_variation_refund':
184 $variation_id = ( isset( $requirement['edd_variation_id'] ) ) ? absint( $requirement['edd_variation_id'] ) : 0;
185
186 if( $variation_id !== 0 ) {
187
188 // Setup the pattern based on trigger type given
189 $pattern = __( 'Purchase %s', 'gamipress' );
190
191 if( $requirement['trigger_type'] === 'gamipress_edd_download_variation_refund' ) {
192 $pattern = __( 'Refund %s', 'gamipress' );
193 }
194
195 // Return the custom title
196 return sprintf( $pattern, gamipress_edd_get_download_variation_title( $requirement['achievement_post'], $variation_id, $requirement['achievement_post_site_id'] ) );
197 }
198 break;
199 // Category
200 case 'gamipress_edd_download_category_purchase':
201 case 'gamipress_edd_download_category_refund':
202 $category_id = ( isset( $requirement['edd_category_id'] ) ) ? absint( $requirement['edd_category_id'] ) : 0;
203
204 if( $category_id !== 0 ) {
205
206 // Setup the pattern based on trigger type given
207 $pattern = __( 'Purchase a download of "%s" category', 'gamipress' );
208
209 if( $requirement['trigger_type'] === 'gamipress_edd_download_category_refund' ) {
210 $pattern = __( 'Refund a download of "%s" category', 'gamipress' );
211 }
212
213 $category = get_term_by( 'term_id', $category_id, 'download_category' );
214
215 // Return the custom title
216 return sprintf( $pattern, $category->name );
217 }
218 break;
219 // Tag
220 case 'gamipress_edd_download_tag_purchase':
221 case 'gamipress_edd_download_tag_refund':
222 $tag_id = ( isset( $requirement['edd_tag_id'] ) ) ? absint( $requirement['edd_tag_id'] ) : 0;
223
224 if( $tag_id !== 0 ) {
225
226 // Setup the pattern based on trigger type given
227 $pattern = __( 'Purchase a download with "%s" tag', 'gamipress' );
228
229 if( $requirement['trigger_type'] === 'gamipress_edd_download_tag_refund' ) {
230 $pattern = __( 'Refund a download with "%s" tag', 'gamipress' );
231 }
232
233 $tag = get_term_by( 'term_id', $tag_id, 'download_tag' );
234
235 // Return the custom title
236 return sprintf( $pattern, $tag->name );
237 }
238 break;
239 // Lifetime value
240 case 'gamipress_edd_lifetime_value':
241 // Lifetime value is equal, less or greater than a value
242 return sprintf( __( 'lifetime value %s %s', 'gamipress' ), $lifetime_conditions[$lifetime_condition], $lifetime );
243 break;
244
245 }
246
247 return $title;
248 }
249 add_filter( 'gamipress_activity_trigger_label', 'gamipress_edd_activity_trigger_label', 10, 3 );
250
251 /**
252 * Register Easy Digital Downloads specific activity triggers labels
253 *
254 * @since 1.0.0
255 *
256 * @param array $specific_activity_trigger_labels
257 * @return array
258 */
259 function gamipress_edd_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
260
261 // Purchase
262 $specific_activity_trigger_labels['gamipress_edd_specific_download_purchase'] = __( 'Purchase %s', 'gamipress' );
263 $specific_activity_trigger_labels['gamipress_edd_download_variation_purchase'] = __( 'Purchase %s', 'gamipress' );
264 // Refund
265 $specific_activity_trigger_labels['gamipress_edd_specific_download_refund'] = __( 'Refund %s', 'gamipress' );
266 $specific_activity_trigger_labels['gamipress_edd_download_variation_refund'] = __( 'Refund %s', 'gamipress' );
267
268 // EDD Wish Lists
269 if( class_exists('EDD_Wish_Lists') ) {
270 $specific_activity_trigger_labels['gamipress_edd_add_specific_to_wish_list'] = __( 'Add %s to wish list', 'gamipress' );
271 }
272
273 // EDD Downloads Lists
274 if( class_exists('EDD_Downloads_Lists') ) {
275 $specific_activity_trigger_labels['gamipress_edd_wish_specific_download'] = __( 'Add %s to wish list', 'gamipress' );
276 $specific_activity_trigger_labels['gamipress_edd_favorite_specific_download'] = __( 'Favorite %s', 'gamipress' );
277 $specific_activity_trigger_labels['gamipress_edd_like_specific_download'] = __( 'Like %s', 'gamipress' );
278 $specific_activity_trigger_labels['gamipress_edd_recommend_specific_download'] = __( 'Recommend %s', 'gamipress' );
279 }
280
281 // EDD Reviews
282 if( class_exists('EDD_Reviews') ) {
283 $specific_activity_trigger_labels['gamipress_edd_specific_new_review'] = __( 'Review %s', 'gamipress' );
284 $specific_activity_trigger_labels['gamipress_edd_get_specific_review'] = __( 'Vendor gets a review on %s', 'gamipress' );
285 }
286
287 // EDD Social Discounts
288 if( class_exists('EDD_Social_Discounts') ) {
289 $specific_activity_trigger_labels['gamipress_edd_share_specific_download'] = __( 'Share %s', 'gamipress' );
290 }
291
292 return $specific_activity_trigger_labels;
293 }
294 add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_edd_specific_activity_trigger_label' );
295
296
297
298 /**
299 * Get user for a given trigger action.
300 *
301 * @since 1.0.0
302 *
303 * @param integer $user_id user ID to override.
304 * @param string $trigger Trigger name.
305 * @param array $args Passed trigger args.
306 * @return integer User ID.
307 */
308 function gamipress_edd_trigger_get_user_id( $user_id, $trigger, $args ) {
309
310 switch ( $trigger ) {
311 // Easy Digital Downloads
312 case 'gamipress_publish_download': // Internal GamiPress listener
313 // Purchase
314 case 'gamipress_edd_new_purchase':
315 case 'gamipress_edd_new_download_purchase':
316 case 'gamipress_edd_specific_download_purchase':
317 case 'gamipress_edd_new_free_download_purchase':
318 case 'gamipress_edd_new_paid_download_purchase':
319 case 'gamipress_edd_download_variation_purchase':
320 case 'gamipress_edd_download_category_purchase':
321 case 'gamipress_edd_download_tag_purchase':
322 case 'gamipress_edd_new_sale':
323 // Refund
324 case 'gamipress_edd_purchase_refund':
325 case 'gamipress_edd_download_refund':
326 case 'gamipress_edd_specific_download_refund':
327 case 'gamipress_edd_download_variation_refund':
328 case 'gamipress_edd_download_category_refund':
329 case 'gamipress_edd_download_tag_refund':
330 case 'gamipress_edd_user_download_refund':
331 // EDD FES
332 case 'gamipress_edd_approve_download':
333 // EDD Wish Lists
334 case 'gamipress_publish_edd_wish_list': // Internal GamiPress listener
335 case 'gamipress_edd_add_to_wish_list':
336 case 'gamipress_edd_add_specific_to_wish_list':
337 // EDD Downloads Lists
338 case 'gamipress_edd_wish_download':
339 case 'gamipress_edd_wish_specific_download':
340 case 'gamipress_edd_favorite_download':
341 case 'gamipress_edd_favorite_specific_download':
342 case 'gamipress_edd_like_download':
343 case 'gamipress_edd_like_specific_download':
344 case 'gamipress_edd_recommend_download':
345 case 'gamipress_edd_recommend_specific_download':
346 // EDD Reviews
347 case 'gamipress_edd_new_review':
348 case 'gamipress_edd_specific_new_review':
349 case 'gamipress_edd_get_review':
350 case 'gamipress_edd_get_specific_review':
351 // EDD Download Pages
352 case 'gamipress_publish_edd_download_page': // Internal GamiPress listener
353 case 'gamipress_edd_approve_edd_download_page':
354 // EDD Social Discounts
355 case 'gamipress_edd_download_social_share':
356 case 'gamipress_edd_share_specific_download':
357 // EDD Lifetime Value
358 case 'gamipress_edd_lifetime_value':
359 $user_id = $args[1];
360 break;
361 }
362
363 return $user_id;
364
365 }
366 add_filter( 'gamipress_trigger_get_user_id', 'gamipress_edd_trigger_get_user_id', 10, 3 );
367
368 /**
369 * Get the id for a given specific trigger action.
370 *
371 * @since 1.0.1
372 *
373 * integer $specific_id Specific ID.
374 * @param string $trigger Trigger name.
375 * @param array $args Passed trigger args.
376 *
377 * @return integer Specific ID.
378 */
379 function gamipress_edd_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
380
381 switch ( $trigger ) {
382 // EDD Reviews
383 case 'gamipress_edd_specific_new_review':
384 case 'gamipress_edd_get_specific_review':
385 $specific_id = $args[2];
386 break;
387 // Purchase
388 case 'gamipress_edd_specific_download_purchase':
389 case 'gamipress_edd_download_variation_purchase':
390 // Refund
391 case 'gamipress_edd_specific_download_refund':
392 case 'gamipress_edd_download_variation_refund':
393 // EDD Wish Lists
394 case 'gamipress_edd_add_specific_to_wish_list':
395 // EDD Downloads Lists
396 case 'gamipress_edd_wish_specific_download':
397 case 'gamipress_edd_favorite_specific_download':
398 case 'gamipress_edd_like_specific_download':
399 case 'gamipress_edd_recommend_specific_download':
400 // EDD Social Discounts
401 case 'gamipress_edd_share_specific_download':
402 $specific_id = $args[0];
403 break;
404 }
405
406 return $specific_id;
407 }
408 add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_edd_specific_trigger_get_id', 10, 3 );
409
410 /**
411 * Extended meta data for event trigger logging
412 *
413 * @since 1.0.2
414 *
415 * @param array $log_meta
416 * @param integer $user_id
417 * @param string $trigger
418 * @param integer $site_id
419 * @param array $args
420 *
421 * @return array
422 */
423 function gamipress_edd_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
424
425 switch ( $trigger ) {
426 // Easy Digital Downloads
427 case 'gamipress_publish_download': // Internal GamiPress listener
428 // EDD FES
429 case 'gamipress_edd_approve_download':
430 // EDD Social Discounts
431 case 'gamipress_edd_download_social_share':
432 case 'gamipress_edd_share_specific_download':
433 // Add the download ID
434 $log_meta['download_id'] = $args[0];
435 $log_meta['post_id'] = $args[0]; // Post ID added to make column visible on logs list
436 break;
437
438 // Easy Digital Downloads
439 case 'gamipress_edd_new_purchase':
440 case 'gamipress_edd_purchase_refund':
441 // Add the payment ID
442 $log_meta['payment_id'] = $args[0];
443 break;
444
445 // Easy Digital Downloads
446 // Purchase
447 case 'gamipress_edd_new_download_purchase':
448 case 'gamipress_edd_specific_download_purchase':
449 case 'gamipress_edd_new_free_download_purchase':
450 case 'gamipress_edd_new_paid_download_purchase':
451 // EDD FES
452 case 'gamipress_edd_new_sale':
453 // Refund
454 case 'gamipress_edd_download_refund':
455 case 'gamipress_edd_specific_download_refund':
456 case 'gamipress_edd_user_download_refund':
457 // Add the download and payment IDs
458 $log_meta['download_id'] = $args[0];
459 $log_meta['post_id'] = $args[0]; // Post ID added to make column visible on logs list
460 $log_meta['payment_id'] = $args[2];
461 break;
462
463 // Easy Digital Downloads
464 case 'gamipress_edd_download_variation_purchase':
465 case 'gamipress_edd_download_variation_refund':
466 // Add the download, variation and payment IDs
467 $log_meta['download_id'] = $args[0];
468 $log_meta['post_id'] = $args[0]; // Post ID added to make column visible on logs list
469 $log_meta['variation_id'] = $args[2];
470 $log_meta['payment_id'] = $args[3];
471 break;
472 case 'gamipress_edd_download_category_purchase':
473 case 'gamipress_edd_download_category_refund':
474 // Add the download, category and order IDs
475 $log_meta['download_id'] = $args[0];
476 $log_meta['post_id'] = $args[0]; // Post ID added to make column visible on logs list
477 $log_meta['category_id'] = $args[2];
478 $log_meta['payment_id'] = $args[3];
479 break;
480 case 'gamipress_edd_download_tag_purchase':
481 case 'gamipress_edd_download_tag_refund':
482 // Add the download, tag and order IDs
483 $log_meta['download_id'] = $args[0];
484 $log_meta['post_id'] = $args[0]; // Post ID added to make column visible on logs list
485 $log_meta['tag_id'] = $args[2];
486 $log_meta['payment_id'] = $args[3];
487 break;
488
489 // EDD Wish Lists
490 case 'gamipress_publish_edd_wish_list': // Internal GamiPress listener
491 // Add the download ID
492 $log_meta['list_id'] = $args[0];
493 break;
494
495 // EDD Download Pages
496 case 'gamipress_publish_edd_download_page': // Internal GamiPress listener
497 case 'gamipress_edd_approve_edd_download_page':
498 // Add the download ID
499 $log_meta['download_page_id'] = $args[0];
500 break;
501
502 // EDD Wish Lists
503 case 'gamipress_edd_add_to_wish_list':
504 case 'gamipress_edd_add_specific_to_wish_list':
505 // EDD Downloads Lists
506 case 'gamipress_edd_wish_download':
507 case 'gamipress_edd_wish_specific_download':
508 case 'gamipress_edd_favorite_download':
509 case 'gamipress_edd_favorite_specific_download':
510 case 'gamipress_edd_like_download':
511 case 'gamipress_edd_like_specific_download':
512 case 'gamipress_edd_recommend_download':
513 case 'gamipress_edd_recommend_specific_download':
514 // Add the download and list IDs
515 $log_meta['download_id'] = $args[0];
516 $log_meta['list_id'] = $args[2];
517 break;
518
519 // EDD Reviews
520 case 'gamipress_edd_new_review':
521 case 'gamipress_edd_specific_new_review':
522 // Add the download and review IDs
523 $log_meta['comment_id'] = $args[0];
524 $log_meta['download_id'] = $args[2];
525 break;
526 case 'gamipress_edd_get_review':
527 case 'gamipress_edd_get_specific_review':
528 // Add the download, reviewer and review IDs
529 $log_meta['comment_id'] = $args[0];
530 $log_meta['download_id'] = $args[2];
531 $log_meta['reviewer_id'] = $args[3];
532 break;
533 // EDD Lifetime Value
534 case 'gamipress_edd_lifetime_value':
535 $log_meta['lifetime_value'] = $args[0];
536 }
537
538 return $log_meta;
539 }
540 add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_edd_log_event_trigger_meta_data', 10, 5 );
541
542 /**
543 * Override the meta data to filter the logs count
544 *
545 * @since 1.1.4
546 *
547 * @param array $log_meta The meta data to filter the logs count
548 * @param int $user_id The given user's ID
549 * @param string $trigger The given trigger we're checking
550 * @param int $since The since timestamp where retrieve the logs
551 * @param int $site_id The desired Site ID to check
552 * @param array $args The triggered args or requirement object
553 *
554 * @return array The meta data to filter the logs count
555 */
556 function gamipress_edd_get_user_trigger_count_log_meta( $log_meta, $user_id, $trigger, $since, $site_id, $args ) {
557
558 switch( $trigger ) {
559 // Variation
560 case 'gamipress_edd_download_variation_purchase':
561 case 'gamipress_edd_download_variation_refund':
562 if( isset( $args[0] ) && isset( $args[2] ) ) {
563 // Add the download and variation IDs
564 $log_meta['download_id'] = absint( $args[0] );
565 $log_meta['variation_id'] = absint( $args[2] );
566 }
567
568 // $args could be a requirement object
569 if( isset( $args['edd_variation_id'] ) && isset( $args['achievement_post'] ) ) {
570 // Add the download and variation IDs
571 $log_meta['download_id'] = absint( $args['achievement_post'] );
572 $log_meta['variation_id'] = absint( $args['edd_variation_id'] );
573 }
574 break;
575 // Category
576 case 'gamipress_edd_download_category_purchase':
577 case 'gamipress_edd_download_category_refund':
578 if( isset( $args[2] ) ) {
579 // Add the download category ID
580 $log_meta['category_id'] = $args[2];
581 }
582
583 // $args could be a requirement object
584 if( isset( $args['edd_category_id'] ) ) {
585 // Add the download category ID
586 $log_meta['category_id'] = $args['edd_category_id'];
587 }
588 break;
589 // Tag
590 case 'gamipress_edd_download_tag_purchase':
591 case 'gamipress_edd_download_tag_refund':
592 if( isset( $args[2] ) ) {
593 // Add the download tag ID
594 $log_meta['tag_id'] = $args[2];
595 }
596
597 // $args could be a requirement object
598 if( isset( $args['edd_tag_id'] ) ) {
599 // Add the download tag ID
600 $log_meta['tag_id'] = $args['edd_tag_id'];
601 }
602 break;
603 }
604
605 return $log_meta;
606
607 }
608 add_filter( 'gamipress_get_user_trigger_count_log_meta', 'gamipress_edd_get_user_trigger_count_log_meta', 10, 6 );
609
610 /**
611 * Extra data fields
612 *
613 * @since 1.1.2
614 *
615 * @param array $fields
616 * @param int $log_id
617 * @param string $type
618 *
619 * @return array
620 */
621 function gamipress_edd_log_extra_data_fields( $fields, $log_id, $type ) {
622
623 $prefix = '_gamipress_';
624
625 $log = ct_get_object( $log_id );
626 $trigger = $log->trigger_type;
627
628 if( $type !== 'event_trigger' ) {
629 return $fields;
630 }
631
632 switch( $trigger ) {
633 // Category
634 case 'gamipress_edd_download_category_purchase':
635 case 'gamipress_edd_download_category_refund':
636
637 // Get categories stored and turn them into an array of options
638 $categories = get_terms( array(
639 'taxonomy' => 'download_category',
640 'hide_empty' => false,
641 ) );
642
643 $options = array();
644
645 foreach( $categories as $category ) {
646 $options[$category->term_id] = $category->name;
647 }
648
649 $fields[] = array(
650 'name' => __( 'Categories', 'gamipress' ),
651 'desc' => __( 'Categories attached to this log.', 'gamipress' ),
652 'id' => $prefix . 'category_id',
653 'type' => 'select',
654 'options' => $options
655 );
656 break;
657 // Tag
658 case 'gamipress_edd_download_tag_purchase':
659 case 'gamipress_edd_download_tag_refund':
660
661 // Get tags stored and turn them into an array of options
662 $tags = get_terms( array(
663 'taxonomy' => 'download_tag',
664 'hide_empty' => false,
665 ) );
666
667 $options = array();
668
669 foreach( $tags as $tag ) {
670 $options[$tag->term_id] = $tag->name;
671 }
672
673 $fields[] = array(
674 'name' => __( 'Tags', 'gamipress' ),
675 'desc' => __( 'Tags attached to this log.', 'gamipress' ),
676 'id' => $prefix . 'tag_id',
677 'type' => 'select',
678 'options' => $options
679 );
680 break;
681 }
682
683 return $fields;
684
685 }
686 add_filter( 'gamipress_log_extra_data_fields', 'gamipress_edd_log_extra_data_fields', 10, 3 );
687
688 /**
689 * Extra filter to check duplicated activity
690 *
691 * @since 1.0.2
692 *
693 * @param bool $return
694 * @param integer $user_id
695 * @param string $trigger
696 * @param integer $site_id
697 * @param array $args
698 *
699 * @return bool True if user deserves trigger, else false
700 */
701 function gamipress_edd_trigger_duplicity_check( $return, $user_id, $trigger, $site_id, $args ) {
702
703 // If user doesn't deserves trigger, then bail to prevent grant access
704 if( ! $return )
705 return $return;
706
707 $log_meta = array(
708 'type' => 'event_trigger',
709 'trigger_type' => $trigger,
710 );
711
712 switch ( $trigger ) {
713 // Easy Digital Downloads
714 case 'gamipress_publish_download': // Internal GamiPress listener
715 // User can not create same download more times, so check it
716 $log_meta['post_id'] = gamipress_get_event_arg( $args, 'post_id', 0 );
717 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
718 break;
719 case 'gamipress_edd_new_purchase':
720 case 'gamipress_edd_purchase_refund':
721 // User can not place or refund same payment ID more times, so check it
722 $log_meta['payment_id'] = $args[0];
723 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
724 break;
725 // Easy Digital Downloads
726 // Purchase
727 case 'gamipress_edd_new_download_purchase':
728 case 'gamipress_edd_specific_download_purchase':
729 case 'gamipress_edd_new_free_download_purchase':
730 case 'gamipress_edd_new_paid_download_purchase':
731 // EDD FES
732 case 'gamipress_edd_new_sale':
733 // Refund
734 case 'gamipress_edd_download_refund':
735 case 'gamipress_edd_specific_download_refund':
736 case 'gamipress_edd_user_download_refund':
737
738 $quantity = isset( $args[3] ) ? $args[3] : 1;
739
740 // Don't perform duplicity check if quantity is higher than 1
741 if( $quantity > 1 ) {
742 break;
743 }
744
745 // User can not place same download and payment IDs more times, so check it
746 $log_meta['download_id'] = $args[0];
747 $log_meta['payment_id'] = $args[2];
748 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
749 break;
750 // Easy Digital Downloads
751 // Variation
752 case 'gamipress_edd_download_variation_purchase':
753 case 'gamipress_edd_download_variation_refund':
754
755 $quantity = isset( $args[4] ) ? $args[4] : 1;
756
757 // Don't perform duplicity check if quantity is higher than 1
758 if( $quantity > 1 ) {
759 break;
760 }
761
762 // User can not place same download and payment IDs more times, so check it
763 $log_meta['download_id'] = $args[0];
764 $log_meta['payment_id'] = $args[3];
765 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
766 break;
767 // Category
768 case 'gamipress_edd_download_category_purchase':
769 case 'gamipress_edd_download_category_refund':
770
771 $quantity = isset( $args[4] ) ? $args[4] : 1;
772
773 // Don't perform duplicity check if quantity is higher than 1
774 if( $quantity > 1 ) {
775 break;
776 }
777
778 // User can not place same download, category and payment IDs more times, so check it
779 $log_meta['download_id'] = $args[0];
780 $log_meta['category_id'] = $args[2];
781 $log_meta['payment_id'] = $args[3];
782 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
783 break;
784 // Tag
785 case 'gamipress_edd_download_tag_purchase':
786 case 'gamipress_edd_download_tag_refund':
787
788 $quantity = isset( $args[4] ) ? $args[4] : 1;
789
790 // Don't perform duplicity check if quantity is higher than 1
791 if( $quantity > 1 ) {
792 break;
793 }
794
795 // User can not place same download, tag and payment IDs more times, so check it
796 $log_meta['download_id'] = $args[0];
797 $log_meta['tag_id'] = $args[2];
798 $log_meta['payment_id'] = $args[3];
799 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
800 break;
801 // EDD Wish Lists
802 case 'gamipress_publish_edd_wish_list': // Internal GamiPress listener
803 // User can not create same list more times, so check it
804 $log_meta['list_id'] = $args[0];
805 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
806 break;
807 // EDD Download Pages
808 case 'gamipress_publish_edd_download_page': // Internal GamiPress listener
809 // User can not create same download page more times, so check it
810 $log_meta['download_page_id'] = $args[0];
811 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
812 break;
813 // EDD Reviews
814 case 'gamipress_edd_new_review':
815 case 'gamipress_edd_specific_new_review':
816 case 'gamipress_edd_get_review':
817 case 'gamipress_edd_get_specific_review':
818 // User can not create same comment more times, so check it
819 $log_meta['comment_id'] = $args[0];
820 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
821 break;
822 }
823
824 return $return;
825
826 }
827 add_filter( 'gamipress_user_deserves_trigger', 'gamipress_edd_trigger_duplicity_check', 10, 5 );