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

133 lines 4.8 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\WP_PostRatings\Rules_Engine
6 * @since 1.0.0
7 */
8 // Exit if accessed directly
9 if( !defined( 'ABSPATH' ) ) exit;
10
11 /**
12 * Checks if an user is allowed to work on a given requirement related to a specific rate
13 *
14 * @since 1.0.0
15 *
16 * @param int $requirement_id The given requirement's post ID
17 * @param string $trigger The trigger triggered
18 * @param array $args Arguments of this trigger
19 *
20 * @return bool True if user has access to the requirement, false otherwise
21 */
22 function gamipress_wp_postratings_check_if_meets_requirements( $requirement_id, $trigger, $args ) {
23
24 // Initialize the return value
25 $return = true;
26
27 // If is specific rating trigger, rules engine needs the rate
28 if( ( $trigger === 'gamipress_wp_postratings_rate_specific'
29 || $trigger === 'gamipress_wp_postratings_specific_rate_specific'
30 || $trigger === 'gamipress_wp_postratings_user_rate_specific'
31 || $trigger === 'gamipress_wp_postratings_user_specific_rate_specific' ) ) {
32
33 if( $trigger === 'gamipress_wp_postratings_user_rate_specific'
34 || $trigger === 'gamipress_wp_postratings_user_specific_rate_specific' ) {
35 $rate = intval( $args[3] );
36 } else {
37 $rate = intval( $args[2] );
38 }
39
40 $required_rate = intval( get_post_meta( $requirement_id, '_gamipress_wp_postratings_rate', true ) );
41
42 // True if rate is equal than required rate
43 $return = (bool) ( $rate === $required_rate );
44
45 }
46
47 // If is minimum rating trigger, rules engine needs the rate
48 if( ( $trigger === 'gamipress_wp_postratings_minimum_rate'
49 || $trigger === 'gamipress_wp_postratings_specific_minimum_rate'
50 || $trigger === 'gamipress_wp_postratings_user_minimum_rate'
51 || $trigger === 'gamipress_wp_postratings_user_specific_minimum_rate' ) ) {
52
53 if( $trigger === 'gamipress_wp_postratings_user_minimum_rate'
54 || $trigger === 'gamipress_wp_postratings_user_specific_minimum_rate' ) {
55 $rate = intval( $args[3] );
56 } else {
57 $rate = intval( $args[2] );
58 }
59
60 $required_rate = intval( get_post_meta( $requirement_id, '_gamipress_wp_postratings_rate', true ) );
61
62 // True if there is rate is bigger than required rate
63 $return = (bool) ( $rate >= $required_rate );
64
65 }
66
67 // Send back our eligibility
68 return $return;
69 }
70
71 /**
72 * Filter triggered requirements to reduce the number of requirements to check by the awards engine
73 *
74 * @since 1.0.0
75 *
76 * @param array $triggered_requirements
77 * @param integer $user_id
78 * @param string $trigger
79 * @param integer $site_id
80 * @param array $args
81 *
82 * @return array
83 */
84 function gamipress_wp_postratings_filter_triggered_requirements( $triggered_requirements, $user_id, $trigger, $site_id, $args ) {
85
86 $new_requirements = array();
87
88 foreach( $triggered_requirements as $i => $requirement ) {
89
90 // Skip item
91 if( ! gamipress_wp_postratings_check_if_meets_requirements( $requirement->ID, $trigger, $args ) ) {
92 continue;
93 }
94
95 // Keep the requirement on the list of requirements to check by the awards engine
96 $new_requirements[] = $requirement;
97
98 }
99
100 return $new_requirements;
101
102 }
103 add_filter( 'gamipress_get_triggered_requirements', 'gamipress_wp_postratings_filter_triggered_requirements', 20, 5 );
104
105 /**
106 * Checks if a user is allowed to work on a given requirement related to a minimum of score
107 *
108 * @since 1.0.0
109 *
110 * @param bool $return The default return value
111 * @param int $user_id The given user's ID
112 * @param int $requirement_id The given requirement's post ID
113 * @param string $trigger The trigger triggered
114 * @param int $site_id The site id
115 * @param array $args Arguments of this trigger
116 *
117 * @return bool True if user has access to the requirement, false otherwise
118 */
119 function gamipress_wp_postratings_user_has_access_to_achievement( $return = false, $user_id = 0, $requirement_id = 0, $trigger = '', $site_id = 0, $args = array() ) {
120
121 // If we're not working with a requirement, bail here
122 if ( ! in_array( get_post_type( $requirement_id ), gamipress_get_requirement_types_slugs() ) )
123 return $return;
124
125 // Check if user has access to the achievement ($return will be false if user has exceed the limit or achievement is not published yet)
126 if( ! $return )
127 return $return;
128
129 // Send back our eligibility
130 return gamipress_wp_postratings_check_if_meets_requirements( $requirement_id, $trigger, $args );
131
132 }
133 add_filter( 'user_has_access_to_achievement', 'gamipress_wp_postratings_user_has_access_to_achievement', 10, 6 );