PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / trunk
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI vtrunk
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 7.8.6 7.8.5 All 44 releases
gamipress / integrations / gravity-forms / includes / rules-engine.php

rules-engine.php in GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI trunk, at integrations/gravity-forms/includes/rules-engine.php

117 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Rules Engine
4 *
5 * @package GamiPress\Gravity_Forms\Rules_Engine
6 * @since 1.0.0
7 */
8 // Exit if accessed directly
9 if( !defined( 'ABSPATH' ) ) exit;
10
11 /**
12 * Checks if given requirement meets the requirements of triggered event
13 *
14 * @since 1.2.5
15 *
16 * @param int $requirement_id
17 * @param string $trigger
18 * @param array $args
19 *
20 * @return bool
21 */
22 function gamipress_gf_check_if_meets_requirements( $requirement_id, $trigger, $args ) {
23
24 // Initialize the return value
25 $return = true;
26
27 // If is between score trigger, rules engine needs to check if field name and values matches required ones
28 if( $return && ( $trigger === 'gamipress_gf_field_value_submission'
29 || $trigger === 'gamipress_gf_specific_field_value_submission' ) ) {
30
31 $field_name = absint( $args[2] );
32 $field_value = $args[3];
33
34 $required_field_name = absint( gamipress_get_post_meta( $requirement_id, '_gamipress_gf_field_name', true ) );
35 $required_field_value = gamipress_get_post_meta( $requirement_id, '_gamipress_gf_field_value', true );
36
37 // Note: On gravity forms is used the field ID instead of name!!!
38
39 // First, check if field name matches the required one
40 $return = (bool) ( $field_name === $required_field_name );
41
42 if( $return ) {
43 // Check if field value matches the required one (with support for arrays)
44 if( is_array( $field_value ) )
45 $return = (bool) ( in_array( $required_field_value, $field_value ) );
46 else
47 $return = (bool) ( $field_value === $required_field_value );
48 }
49 }
50
51 return $return;
52
53 }
54
55 /**
56 * Filter triggered requirements to reduce the number of requirements to check by the awards engine
57 *
58 * @since 1.2.5
59 *
60 * @param array $triggered_requirements
61 * @param integer $user_id
62 * @param string $trigger
63 * @param integer $site_id
64 * @param array $args
65 *
66 * @return array
67 */
68 function gamipress_gf_filter_triggered_requirements( $triggered_requirements, $user_id, $trigger, $site_id, $args ) {
69
70 $new_requirements = array();
71
72 foreach( $triggered_requirements as $i => $requirement ) {
73
74 // Skip item
75 if( ! gamipress_gf_check_if_meets_requirements( $requirement->ID, $trigger, $args ) ) {
76 continue;
77 }
78
79 // Keep the requirement on the list of requirements to check by the awards engine
80 $new_requirements[] = $requirement;
81
82 }
83
84 return $new_requirements;
85
86 }
87 add_filter( 'gamipress_get_triggered_requirements', 'gamipress_gf_filter_triggered_requirements', 20, 5 );
88
89 /**
90 * Checks if an user is allowed to work on a given requirement related to a minimum of score
91 *
92 * @since 1.0.0
93 *
94 * @param bool $return The default return value
95 * @param int $user_id The given user's ID
96 * @param int $requirement_id The given requirement's post ID
97 * @param string $trigger The trigger triggered
98 * @param int $site_id The site id
99 * @param array $args Arguments of this trigger
100 *
101 * @return bool True if user has access to the requirement, false otherwise
102 */
103 function gamipress_gf_user_has_access_to_achievement( $return = false, $user_id = 0, $requirement_id = 0, $trigger = '', $site_id = 0, $args = array() ) {
104
105 // If we're not working with a requirement, bail here
106 if ( ! in_array( get_post_type( $requirement_id ), gamipress_get_requirement_types_slugs() ) )
107 return $return;
108
109 // Check if user has access to the achievement ($return will be false if user has exceed the limit or achievement is not published yet)
110 if( ! $return )
111 return $return;
112
113 // Send back our eligibility
114 return gamipress_gf_check_if_meets_requirements( $requirement_id, $trigger, $args );
115
116 }
117 add_filter( 'user_has_access_to_achievement', 'gamipress_gf_user_has_access_to_achievement', 10, 6 );