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/presto-player/includes/rules-engine.php +130 -0 7.8.9 → 8.0.5 View file →
@@ -1,0 +1,130 @@
1 +<?php
2 +/**
3 + * Rules Engine
4 + *
5 + * @package GamiPress\Presto_Player\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.0.0
15 + *
16 + * @param int $requirement_id
17 + * @param string $trigger
18 + * @param array $args
19 + *
20 + * @return bool
21 + */
22 +function gamipress_presto_player_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( $trigger === 'gamipress_presto_player_watch_video_min_percent'
29 + || $trigger === 'gamipress_presto_player_watch_specific_video_min_percent' ) {
30 +
31 + $percent = absint( $args[2] );
32 +
33 + $required_percent = absint( gamipress_get_post_meta( $requirement_id, '_gamipress_presto_player_percent', true ) );
34 +
35 + // True if percent watched is higher than required score
36 + $return = (bool) ( absint( $percent ) === absint( ceil( $required_percent / 10) * 10 ) );
37 +
38 + }
39 +
40 + // If is between percent trigger, rules engine needs to check the minimum and maximum percent allowed
41 + if( $trigger === 'gamipress_presto_player_watch_video_between_percent'
42 + || $trigger === 'gamipress_presto_player_watch_specific_video_between_percent' ) {
43 +
44 + $percent = absint( $args[2] );
45 +
46 + $min_percent = absint( get_post_meta( $requirement_id, '_gamipress_presto_player_min_percent', true ) );
47 + $max_percent = absint( get_post_meta( $requirement_id, '_gamipress_presto_player_max_percent', true ) );
48 +
49 + // True if there is percent is bigger than min percent and lower than max percent
50 + $return = (bool) ( $percent >= $min_percent && $percent <= $max_percent );
51 + }
52 +
53 + // Platform
54 + if( $trigger === 'gamipress_presto_player_watch_video_platform' ) {
55 +
56 + $platform_selected = $args[3];
57 +
58 + $platform = get_post_meta( $requirement_id, '_gamipress_presto_player_platform', true );
59 +
60 + // True if platform is selected
61 + $return = (bool) ( $platform_selected === $platform );
62 + }
63 +
64 + return $return;
65 +
66 +}
67 +
68 +/**
69 + * Filter triggered requirements to reduce the number of requirements to check by the awards engine
70 + *
71 + * @since 1.0.0
72 + *
73 + * @param array $triggered_requirements
74 + * @param integer $user_id
75 + * @param string $trigger
76 + * @param integer $site_id
77 + * @param array $args
78 + *
79 + * @return array
80 + */
81 +function gamipress_presto_player_filter_triggered_requirements( $triggered_requirements, $user_id, $trigger, $site_id, $args ) {
82 +
83 + $new_requirements = array();
84 +
85 + foreach( $triggered_requirements as $i => $requirement ) {
86 +
87 + // Skip item
88 + if( ! gamipress_presto_player_check_if_meets_requirements( $requirement->ID, $trigger, $args ) ) {
89 + continue;
90 + }
91 +
92 + // Keep the requirement on the list of requirements to check by the awards engine
93 + $new_requirements[] = $requirement;
94 +
95 + }
96 +
97 + return $new_requirements;
98 +
99 +}
100 +add_filter( 'gamipress_get_triggered_requirements', 'gamipress_presto_player_filter_triggered_requirements', 20, 5 );
101 +
102 +/**
103 + * Checks if an user is allowed to work on a given requirement related to a minimum of score
104 + *
105 + * @since 1.0.0
106 + *
107 + * @param bool $return The default return value
108 + * @param int $user_id The given user's ID
109 + * @param int $requirement_id The given requirement's post ID
110 + * @param string $trigger The trigger triggered
111 + * @param int $site_id The site id
112 + * @param array $args Arguments of this trigger
113 + *
114 + * @return bool True if user has access to the requirement, false otherwise
115 + */
116 +function gamipress_presto_player_user_has_access_to_achievement( $return = false, $user_id = 0, $requirement_id = 0, $trigger = '', $site_id = 0, $args = array() ) {
117 +
118 + // If we're not working with a requirement, bail here
119 + if ( ! in_array( get_post_type( $requirement_id ), gamipress_get_requirement_types_slugs() ) )
120 + return $return;
121 +
122 + // Check if user has access to the achievement ($return will be false if user has exceed the limit or achievement is not published yet)
123 + if( ! $return )
124 + return $return;
125 +
126 + // Send back our eligibility
127 + return gamipress_presto_player_check_if_meets_requirements( $requirement_id, $trigger, $args );
128 +
129 +}
130 +add_filter( 'user_has_access_to_achievement', 'gamipress_presto_player_user_has_access_to_achievement', 10, 6 );