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/wpep/includes/triggers.php +334 -0 7.9.2 → 8.0.5 View file →
@@ -1,0 +1,334 @@
1 +<?php
2 +/**
3 + * Triggers
4 + *
5 + * @package GamiPress\WPEP\Triggers
6 + * @since 1.0.0
7 + */
8 +
9 +// Exit if accessed directly
10 +if( !defined( 'ABSPATH' ) ) exit;
11 +
12 +/**
13 + * Register WPEP specific triggers
14 + *
15 + * @param array $triggers
16 + * @return mixed
17 + */
18 +function gamipress_wpep_activity_triggers( $triggers ) {
19 +
20 + $triggers[__( 'WPEP', 'gamipress' )] = array(
21 +
22 + // Assessments
23 + 'gamipress_wpep_complete_assessment' => __( 'Complete an assessment', 'gamipress' ),
24 + 'gamipress_wpep_complete_specific_assessment' => __( 'Complete a specific assessment', 'gamipress' ),
25 + 'gamipress_wpep_fail_assessment' => __( 'Fail an assessment', 'gamipress' ),
26 + 'gamipress_wpep_fail_specific_assessment' => __( 'Fail a specific assessment', 'gamipress' ),
27 +
28 + // Minimum grade
29 + 'gamipress_wpep_complete_assessment_min_grade' => __( 'Complete an assessment with a minimum percent grade', 'gamipress' ),
30 + 'gamipress_wpep_complete_specific_assessment_min_grade' => __( 'Complete a specific assessment with a minimum percent grade', 'gamipress' ),
31 +
32 + // Maximum grade
33 + 'gamipress_wpep_complete_assessment_max_grade' => __( 'Complete an assessment with a maximum percent grade', 'gamipress' ),
34 + 'gamipress_wpep_complete_specific_assessment_max_grade' => __( 'Complete a specific assessment with a maximum percent grade', 'gamipress' ),
35 +
36 + // Between grades
37 + 'gamipress_wpep_complete_assessment_between_grade' => __( 'Complete an assessment on a range of percent grade', 'gamipress' ),
38 + 'gamipress_wpep_complete_specific_assessment_between_grade' => __( 'Complete a specific assessment on a range of percent grade', 'gamipress' ),
39 +
40 + // Lessons
41 + 'gamipress_wpep_complete_lesson' => __( 'Complete a lesson', 'gamipress' ),
42 + 'gamipress_wpep_complete_specific_lesson' => __( 'Complete a specific lesson', 'gamipress' ),
43 +
44 + // Courses
45 + 'gamipress_wpep_complete_course' => __( 'Complete a course', 'gamipress' ),
46 + 'gamipress_wpep_complete_specific_course' => __( 'Complete a specific course', 'gamipress' ),
47 + );
48 +
49 + return $triggers;
50 +
51 +}
52 +add_filter( 'gamipress_activity_triggers', 'gamipress_wpep_activity_triggers' );
53 +
54 +/**
55 + * Register WPEP specific activity triggers
56 + *
57 + * @since 1.0.0
58 + *
59 + * @param array $specific_activity_triggers
60 + * @return array
61 + */
62 +function gamipress_wpep_specific_activity_triggers( $specific_activity_triggers ) {
63 +
64 + // Post Type Assessment
65 + $assessment = 'wpep_assessment';
66 + if( defined( 'WPEP_POST_TYPE_ASSESSMENT' ) )
67 + $assessment = WPEP_POST_TYPE_ASSESSMENT;
68 +
69 + // Post Type Course
70 + $course = 'courses';
71 + if( defined( 'WPEP_POST_TYPE_COURSE' ) )
72 + $course = WPEP_POST_TYPE_COURSE;
73 +
74 + // Assessments
75 + $specific_activity_triggers['gamipress_wpep_complete_specific_assessment'] = array( $assessment );
76 + $specific_activity_triggers['gamipress_wpep_fail_specific_assessment'] = array( $assessment );
77 +
78 + $specific_activity_triggers['gamipress_wpep_complete_specific_assessment_min_grade'] = array( $assessment );
79 +
80 + $specific_activity_triggers['gamipress_wpep_complete_specific_assessment_max_grade'] = array( $assessment );
81 +
82 + $specific_activity_triggers['gamipress_wpep_complete_specific_assessment_between_grade'] = array( $assessment );
83 +
84 + // Lessons
85 + $specific_activity_triggers['gamipress_wpep_complete_specific_lesson'] = array( 'wpep_lessons' );
86 +
87 + // Courses
88 + $specific_activity_triggers['gamipress_wpep_complete_specific_course'] = array( $course );
89 +
90 + return $specific_activity_triggers;
91 +
92 +}
93 +add_filter( 'gamipress_specific_activity_triggers', 'gamipress_wpep_specific_activity_triggers' );
94 +
95 +/**
96 + * Build custom activity trigger label
97 + *
98 + * @param string $title
99 + * @param integer $requirement_id
100 + * @param array $requirement
101 + *
102 + * @return string
103 + */
104 +function gamipress_wpep_activity_trigger_label( $title, $requirement_id, $requirement ) {
105 +
106 + $score = ( isset( $requirement['wpep_score'] ) ) ? absint( $requirement['wpep_score'] ) : 0;
107 + $min_score = ( isset( $requirement['wpep_min_score'] ) ) ? absint( $requirement['wpep_min_score'] ) : 0;
108 + $max_score = ( isset( $requirement['wpep_max_score'] ) ) ? absint( $requirement['wpep_max_score'] ) : 0;
109 +
110 + switch( $requirement['trigger_type'] ) {
111 +
112 + // Minimum grade events
113 + case 'gamipress_wpep_complete_assessment_min_grade':
114 + return sprintf( __( 'Completed an assessment with a score of %d or higher', 'gamipress' ), $score );
115 + break;
116 + case 'gamipress_wpep_complete_specific_assessment_min_grade':
117 + $achievement_post_id = absint( $requirement['achievement_post'] );
118 + return sprintf( __( 'Complete the assessment %s with a score of %d or higher', 'gamipress' ), get_the_title( $achievement_post_id ), $score );
119 + break;
120 +
121 + // Maximum grade events
122 + case 'gamipress_wpep_complete_assessment_max_grade':
123 + return sprintf( __( 'Completed an assessment with a maximum score of %d', 'gamipress' ), $score );
124 + break;
125 + case 'gamipress_wpep_complete_specific_assessment_max_grade':
126 + $achievement_post_id = absint( $requirement['achievement_post'] );
127 + return sprintf( __( 'Complete the assessment %s with a maximum score of %d', 'gamipress' ), get_the_title( $achievement_post_id ), $score );
128 + break;
129 +
130 + // Between grade events
131 + case 'gamipress_wpep_complete_assessment_between_grade':
132 + return sprintf( __( 'Completed an assessment with a score between %d and %d', 'gamipress' ), $min_score, $max_score );
133 + break;
134 + case 'gamipress_wpep_complete_specific_assessment_between_grade':
135 + $achievement_post_id = absint( $requirement['achievement_post'] );
136 + return sprintf( __( 'Complete the assessment %s with a score between %d and %d', 'gamipress' ), get_the_title( $achievement_post_id ), $min_score, $max_score );
137 + break;
138 +
139 + }
140 +
141 + return $title;
142 +
143 +}
144 +add_filter( 'gamipress_activity_trigger_label', 'gamipress_wpep_activity_trigger_label', 10, 3 );
145 +
146 +/**
147 + * Register WPEP specific activity triggers labels
148 + *
149 + * @since 1.0.0
150 + *
151 + * @param array $specific_activity_trigger_labels
152 + * @return array
153 + */
154 +function gamipress_wpep_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
155 +
156 + // Assessments
157 + $specific_activity_trigger_labels['gamipress_wpep_complete_specific_assessment'] = __( 'Complete the assessment %s', 'gamipress' );
158 + $specific_activity_trigger_labels['gamipress_wpep_fail_specific_assessment'] = __( 'Fail the assessment %s', 'gamipress' );
159 +
160 + // Lessons
161 + $specific_activity_trigger_labels['gamipress_wpep_complete_specific_lesson'] = __( 'Complete the lesson %s', 'gamipress' );
162 +
163 + // Courses
164 + $specific_activity_trigger_labels['gamipress_wpep_complete_specific_course'] = __( 'Complete the course %s', 'gamipress' );
165 +
166 + return $specific_activity_trigger_labels;
167 +}
168 +add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_wpep_specific_activity_trigger_label' );
169 +
170 +/**
171 + * Get WPEP specific activity trigger post title
172 + *
173 + * @since 1.0.0
174 + *
175 + * @param string $post_title
176 + * @param integer $specific_id
177 + * @param string $trigger_type
178 + * @param int $site_id
179 + * @return string
180 + */
181 +function gamipress_wpep_specific_activity_trigger_post_title( $post_title, $specific_id, $trigger_type, $site_id ) {
182 +
183 + switch( $trigger_type ) {
184 + case 'gamipress_wpep_complete_specific_lesson':
185 + if( absint( $specific_id ) !== 0 ) {
186 + $lesson = WPEP\Entity\Course::instance()->get_lesson( $specific_id );
187 +
188 + $post_title = ( $lesson ? $lesson->title : '' );
189 + }
190 + break;
191 + }
192 +
193 + return $post_title;
194 +
195 +}
196 +add_filter( 'gamipress_specific_activity_trigger_post_title', 'gamipress_wpep_specific_activity_trigger_post_title', 10, 4 );
197 +
198 +/**
199 + * Get user for a given trigger action.
200 + *
201 + * @since 1.0.0
202 + *
203 + * @param integer $user_id user ID to override.
204 + * @param string $trigger Trigger name.
205 + * @param array $args Passed trigger args.
206 + * @return integer User ID.
207 + */
208 +function gamipress_wpep_trigger_get_user_id( $user_id, $trigger, $args ) {
209 +
210 + switch ( $trigger ) {
211 + // Assessments
212 + case 'gamipress_wpep_complete_assessment':
213 + case 'gamipress_wpep_complete_specific_assessment':
214 + case 'gamipress_wpep_fail_assessment':
215 + case 'gamipress_wpep_fail_specific_assessment':
216 + // Minimum grade
217 + case 'gamipress_wpep_complete_assessment_min_grade':
218 + case 'gamipress_wpep_complete_specific_assessment_min_grade':
219 + // Maximum grade
220 + case 'gamipress_wpep_complete_assessment_max_grade':
221 + case 'gamipress_wpep_complete_specific_assessment_max_grade':
222 + // Between grades
223 + case 'gamipress_wpep_complete_assessment_between_grade':
224 + case 'gamipress_wpep_complete_specific_assessment_between_grade':
225 + // Lessons
226 + case 'gamipress_wpep_complete_lesson':
227 + case 'gamipress_wpep_complete_specific_lesson':
228 + // Courses
229 + case 'gamipress_wpep_complete_course':
230 + case 'gamipress_wpep_complete_specific_course':
231 + $user_id = $args[1];
232 + break;
233 + }
234 +
235 + return $user_id;
236 +
237 +}
238 +add_filter( 'gamipress_trigger_get_user_id', 'gamipress_wpep_trigger_get_user_id', 10, 3 );
239 +
240 +/**
241 + * Get the id for a given specific trigger action.
242 + *
243 + * @since 1.0.0
244 + *
245 + * @param integer $specific_id Specific ID.
246 + * @param string $trigger Trigger name.
247 + * @param array $args Passed trigger args.
248 + *
249 + * @return integer Specific ID.
250 + */
251 +function gamipress_wpep_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
252 +
253 + switch ( $trigger ) {
254 + // Assessments
255 + case 'gamipress_wpep_complete_specific_assessment':
256 + case 'gamipress_wpep_fail_specific_assessment':
257 + case 'gamipress_wpep_complete_specific_assessment_min_grade':
258 + case 'gamipress_wpep_complete_specific_assessment_max_grade':
259 + case 'gamipress_wpep_complete_specific_assessment_between_grade':
260 + // Lessons
261 + case 'gamipress_wpep_complete_specific_lesson':
262 + // Assessments
263 + case 'gamipress_wpep_complete_specific_course':
264 + $specific_id = $args[0];
265 + break;
266 + }
267 +
268 + return $specific_id;
269 +}
270 +add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_wpep_specific_trigger_get_id', 10, 3 );
271 +
272 +/**
273 + * Extended meta data for event trigger logging
274 + *
275 + * @since 1.0.0
276 + *
277 + * @param array $log_meta
278 + * @param integer $user_id
279 + * @param string $trigger
280 + * @param integer $site_id
281 + * @param array $args
282 + *
283 + * @return array
284 + */
285 +function gamipress_wpep_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
286 +
287 + switch ( $trigger ) {
288 +
289 + // Assessments
290 + case 'gamipress_wpep_complete_assessment':
291 + case 'gamipress_wpep_complete_specific_assessment':
292 + case 'gamipress_wpep_fail_assessment':
293 + case 'gamipress_wpep_fail_specific_assessment':
294 + // Add the status, assessment, question and answer IDs
295 + $log_meta['assessment_id'] = $args[0];
296 + $log_meta['question_id'] = $args[2];
297 + $log_meta['question_answer_id'] = $args[3];
298 + $log_meta['status'] = $args[4];
299 + break;
300 + // Minimum grade
301 + case 'gamipress_wpep_complete_assessment_min_grade':
302 + case 'gamipress_wpep_complete_specific_assessment_min_grade':
303 + // Maximum grade
304 + case 'gamipress_wpep_complete_assessment_max_grade':
305 + case 'gamipress_wpep_complete_specific_assessment_max_grade':
306 + // Between grades
307 + case 'gamipress_wpep_complete_assessment_between_grade':
308 + case 'gamipress_wpep_complete_specific_assessment_between_grade':
309 + // Add the score, assessment, question and answer IDs
310 + $log_meta['assessment_id'] = $args[0];
311 + $log_meta['question_id'] = $args[2];
312 + $log_meta['question_answer_id'] = $args[3];
313 + $log_meta['score'] = $args[4];
314 + break;
315 +
316 + // Lessons
317 + case 'gamipress_wpep_complete_lesson':
318 + case 'gamipress_wpep_complete_specific_lesson':
319 + // Add the lesson and course IDs
320 + $log_meta['lesson_id'] = $args[0];
321 + $log_meta['course_id'] = $args[2];
322 + break;
323 +
324 + // Courses
325 + case 'gamipress_wpep_complete_course':
326 + case 'gamipress_wpep_complete_specific_course':
327 + // Add the course ID
328 + $log_meta['course_id'] = $args[0];
329 + break;
330 + }
331 +
332 + return $log_meta;
333 +}
334 +add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_wpep_log_event_trigger_meta_data', 10, 5 );