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/buddyboss/includes/community/includes/rules-engine.php +165 -0 7.9.9.1 → 8.0.5 View file →
@@ -1,0 +1,165 @@
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 + return $return;
60 +
61 +}
62 +
63 +/**
64 + * Filter triggered requirements to reduce the number of requirements to check by the awards engine
65 + *
66 + * @since 1.1.2
67 + *
68 + * @param array $triggered_requirements
69 + * @param integer $user_id
70 + * @param string $trigger
71 + * @param integer $site_id
72 + * @param array $args
73 + *
74 + * @return array
75 + */
76 +function gamipress_bp_filter_triggered_requirements( $triggered_requirements, $user_id, $trigger, $site_id, $args ) {
77 +
78 + $new_requirements = array();
79 +
80 + foreach( $triggered_requirements as $i => $requirement ) {
81 +
82 + // Skip item
83 + if( ! gamipress_bp_check_if_meets_requirements( $requirement->ID, $trigger, $args ) ) {
84 + continue;
85 + }
86 +
87 + // Keep the requirement on the list of requirements to check by the awards engine
88 + $new_requirements[] = $requirement;
89 +
90 + }
91 +
92 + return $new_requirements;
93 +
94 +}
95 +add_filter( 'gamipress_get_triggered_requirements', 'gamipress_bp_filter_triggered_requirements', 20, 5 );
96 +
97 +/**
98 + * Checks if an user is allowed to work on a given requirement related to a specific requirement
99 + *
100 + * @since 1.0.0
101 + *
102 + * @param bool $return The default return value
103 + * @param int $user_id The given user's ID
104 + * @param int $requirement_id The given requirement's post ID
105 + * @param string $trigger The trigger triggered
106 + * @param int $site_id The site id
107 + * @param array $args Arguments of this trigger
108 + *
109 + * @return bool True if user has access to the requirement, false otherwise
110 + */
111 +function gamipress_bp_user_has_access_to_achievement( $return = false, $user_id = 0, $requirement_id = 0, $trigger = '', $site_id = 0, $args = array() ) {
112 +
113 + // If we're not working with a requirement, bail here
114 + if ( ! in_array( gamipress_get_post_type( $requirement_id ), gamipress_get_requirement_types_slugs() ) ) {
115 + return $return;
116 + }
117 +
118 + // Check if user has access to the achievement ($return will be false if user has exceed the limit or achievement is not published yet)
119 + if( ! $return ) {
120 + return $return;
121 + }
122 +
123 + // Send back our eligibility
124 + return gamipress_bp_check_if_meets_requirements( $requirement_id, $trigger, $args );
125 +}
126 +add_filter( 'user_has_access_to_achievement', 'gamipress_bp_user_has_access_to_achievement', 10, 6 );
127 +
128 +/**
129 + * Check if user is deserved to get awarded
130 + *
131 + * @since 1.0.0
132 + *
133 + * @param bool $return
134 + * @param int $user_id
135 + * @param string $trigger
136 + * @param int $site_id
137 + * @param array $args
138 + *
139 + * @return bool
140 + */
141 +function gamipress_bp_block_users_user_deserves_trigger( $return, $user_id, $trigger, $site_id, $args ) {
142 +
143 + $blocked_member_types = gamipress_bp_get_option( 'blocked_member_types' );
144 +
145 + if( ! function_exists( 'bp_get_member_type' ) ) {
146 + return $return;
147 + }
148 +
149 + // Check if user member type has been manually blocked
150 + if( is_array( $blocked_member_types ) ) {
151 +
152 + $user_member_type = bp_get_member_type( $user_id );
153 +
154 + foreach( $blocked_member_types as $blocked_member_type ) {
155 + // Bail if user member type is blocked
156 + if( $user_member_type === $blocked_member_type ) {
157 + return false;
158 + }
159 + }
160 +
161 + }
162 +
163 + return $return;
164 +}
165 +add_filter( 'gamipress_user_deserves_trigger', 'gamipress_bp_block_users_user_deserves_trigger', 10, 5 );