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 / buddypress / includes / rules-engine.php

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

166 lines 5.0 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\BuddyPress\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.1.2
15 *
16 * @param int $requirement_id
17 * @param string $trigger
18 * @param array $args
19 *
20 * @return bool
21 */
22 function gamipress_bp_check_if_meets_requirements( $requirement_id, $trigger, $args ) {
23
24 // Initialize the return value
25 $return = true;
26
27 // Check if given member type match with specific member type
28 if( $trigger === 'gamipress_bp_set_member_type' ) {
29
30 $member_type = $args[1];
31 $required_member_type = gamipress_get_post_meta( $requirement_id, '_gamipress_bp_member_type', true );
32
33 $return = (bool) (
34 $member_type !== ''
35 && $required_member_type !== ''
36 && $member_type === $required_member_type );
37 }
38
39 if( $trigger === 'gamipress_bp_update_profile_specific_value' ) {
40
41 $field_value = $args[2];
42 $required_field_value = gamipress_get_post_meta( $requirement_id, '_gamipress_bp_field_value', true );
43
44 if( is_array( $field_value ) ) {
45 $return = (bool) (
46 count( $field_value )
47 && $required_field_value !== ''
48 && in_array( $required_field_value, $field_value )
49 );
50 } else {
51 $return = (bool) (
52 $field_value !== ''
53 && $required_field_value !== ''
54 && $field_value === $required_field_value
55 );
56 }
57
58 }
59
60 return $return;
61
62 }
63
64 /**
65 * Filter triggered requirements to reduce the number of requirements to check by the awards engine
66 *
67 * @since 1.1.2
68 *
69 * @param array $triggered_requirements
70 * @param integer $user_id
71 * @param string $trigger
72 * @param integer $site_id
73 * @param array $args
74 *
75 * @return array
76 */
77 function gamipress_bp_filter_triggered_requirements( $triggered_requirements, $user_id, $trigger, $site_id, $args ) {
78
79 $new_requirements = array();
80
81 foreach( $triggered_requirements as $i => $requirement ) {
82
83 // Skip item
84 if( ! gamipress_bp_check_if_meets_requirements( $requirement->ID, $trigger, $args ) ) {
85 continue;
86 }
87
88 // Keep the requirement on the list of requirements to check by the awards engine
89 $new_requirements[] = $requirement;
90
91 }
92
93 return $new_requirements;
94
95 }
96 add_filter( 'gamipress_get_triggered_requirements', 'gamipress_bp_filter_triggered_requirements', 20, 5 );
97
98 /**
99 * Checks if an user is allowed to work on a given requirement related to a specific requirement
100 *
101 * @since 1.0.0
102 *
103 * @param bool $return The default return value
104 * @param int $user_id The given user's ID
105 * @param int $requirement_id The given requirement's post ID
106 * @param string $trigger The trigger triggered
107 * @param int $site_id The site id
108 * @param array $args Arguments of this trigger
109 *
110 * @return bool True if user has access to the requirement, false otherwise
111 */
112 function gamipress_bp_user_has_access_to_achievement( $return = false, $user_id = 0, $requirement_id = 0, $trigger = '', $site_id = 0, $args = array() ) {
113
114 // If we're not working with a requirement, bail here
115 if ( ! in_array( gamipress_get_post_type( $requirement_id ), gamipress_get_requirement_types_slugs() ) ) {
116 return $return;
117 }
118
119 // Check if user has access to the achievement ($return will be false if user has exceed the limit or achievement is not published yet)
120 if( ! $return ) {
121 return $return;
122 }
123
124 // Send back our eligibility
125 return gamipress_bp_check_if_meets_requirements( $requirement_id, $trigger, $args );
126 }
127 add_filter( 'user_has_access_to_achievement', 'gamipress_bp_user_has_access_to_achievement', 10, 6 );
128
129 /**
130 * Check if user is deserved to get awarded
131 *
132 * @since 1.0.0
133 *
134 * @param bool $return
135 * @param int $user_id
136 * @param string $trigger
137 * @param int $site_id
138 * @param array $args
139 *
140 * @return bool
141 */
142 function gamipress_bp_block_users_user_deserves_trigger( $return, $user_id, $trigger, $site_id, $args ) {
143
144 $blocked_member_types = gamipress_bp_get_option( 'blocked_member_types' );
145
146 if( ! function_exists( 'bp_get_member_type' ) ) {
147 return $return;
148 }
149
150 // Check if user member type has been manually blocked
151 if( is_array( $blocked_member_types ) ) {
152
153 $user_member_type = bp_get_member_type( $user_id );
154
155 foreach( $blocked_member_types as $blocked_member_type ) {
156 // Bail if user member type is blocked
157 if( $user_member_type === $blocked_member_type ) {
158 return false;
159 }
160 }
161
162 }
163
164 return $return;
165 }
166 add_filter( 'gamipress_user_deserves_trigger', 'gamipress_bp_block_users_user_deserves_trigger', 10, 5 );