PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.3
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.3
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 / wplms / includes / triggers.php

triggers.php in GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI 8.0.3, at integrations/wplms/includes/triggers.php

363 lines 16.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Triggers
4 *
5 * @package GamiPress\WPLMS\Triggers
6 * @since 1.0.0
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Register triggers
14 *
15 * @param array $triggers
16 * @return mixed
17 */
18 function gamipress_wplms_activity_triggers( $triggers ) {
19
20 $triggers[__( 'WPLMS', 'gamipress' )] = array(
21
22 // Course
23 'gamipress_wplms_subscribe_course' => __( 'Subscribe on a course', 'gamipress' ),
24 'gamipress_wplms_subscribe_specific_course' => __( 'Subscribe on a specific course', 'gamipress' ),
25 'gamipress_wplms_start_course' => __( 'Start a course', 'gamipress' ),
26 'gamipress_wplms_start_specific_course' => __( 'Start a specific course', 'gamipress' ),
27 'gamipress_wplms_complete_course' => __( 'Complete a course', 'gamipress' ),
28 'gamipress_wplms_complete_specific_course' => __( 'Complete a specific course', 'gamipress' ),
29 'gamipress_wplms_complete_course_minimum_mark' => __( 'Complete a course with a minimum mark', 'gamipress' ),
30 'gamipress_wplms_complete_specific_course_minimum_mark' => __( 'Complete a specific course with a minimum mark', 'gamipress' ),
31 'gamipress_wplms_review_course' => __( 'Review a course', 'gamipress' ),
32 'gamipress_wplms_review_specific_course' => __( 'Review a specific course', 'gamipress' ),
33 'gamipress_wplms_unsubscribe_course' => __( 'Unsubscribe from a course', 'gamipress' ),
34 'gamipress_wplms_unsubscribe_specific_course' => __( 'Unsubscribe from a specific course', 'gamipress' ),
35 'gamipress_wplms_retake_course' => __( 'Retake a course', 'gamipress' ),
36 'gamipress_wplms_retake_specific_course' => __( 'Retake a specific course', 'gamipress' ),
37
38 // Quiz
39 'gamipress_wplms_start_quiz' => __( 'Start a quiz', 'gamipress' ),
40 'gamipress_wplms_start_specific_quiz' => __( 'Start a specific quiz', 'gamipress' ),
41 'gamipress_wplms_complete_quiz' => __( 'Complete a quiz', 'gamipress' ),
42 'gamipress_wplms_complete_specific_quiz' => __( 'Complete a specific quiz', 'gamipress' ),
43 'gamipress_wplms_complete_quiz_minimum_mark' => __( 'Complete a quiz with a minimum mark', 'gamipress' ),
44 'gamipress_wplms_complete_specific_quiz_minimum_mark' => __( 'Complete a specific quiz with a minimum mark', 'gamipress' ),
45 'gamipress_wplms_retake_quiz' => __( 'Retake a quiz', 'gamipress' ),
46 'gamipress_wplms_retake_specific_quiz' => __( 'Retake a specific quiz', 'gamipress' ),
47
48 // Assignment
49 'gamipress_wplms_start_assignment' => __( 'Start an assignment', 'gamipress' ),
50 'gamipress_wplms_start_specific_assignment' => __( 'Start a specific assignment', 'gamipress' ),
51 'gamipress_wplms_complete_assignment' => __( 'Complete an assignment', 'gamipress' ),
52 'gamipress_wplms_complete_specific_assignment' => __( 'Complete a specific assignment', 'gamipress' ),
53 'gamipress_wplms_complete_assignment_minimum_mark' => __( 'Complete an assignment with a minimum mark', 'gamipress' ),
54 'gamipress_wplms_complete_specific_assignment_minimum_mark' => __( 'Complete a specific assignment with a minimum mark', 'gamipress' ),
55
56 // Unit
57 'gamipress_wplms_complete_unit' => __( 'Complete an unit', 'gamipress' ),
58 'gamipress_wplms_complete_specific_unit' => __( 'Complete a specific unit', 'gamipress' ),
59 );
60
61 return $triggers;
62
63 }
64 add_filter( 'gamipress_activity_triggers', 'gamipress_wplms_activity_triggers' );
65
66 /**
67 * Register specific activity triggers
68 *
69 * @since 1.0.0
70 *
71 * @param array $specific_activity_triggers
72 * @return array
73 */
74 function gamipress_wplms_specific_activity_triggers( $specific_activity_triggers ) {
75
76 // Course
77 $specific_activity_triggers['gamipress_wplms_subscribe_specific_course'] = array( 'course' );
78 $specific_activity_triggers['gamipress_wplms_start_specific_course'] = array( 'course' );
79 $specific_activity_triggers['gamipress_wplms_complete_specific_course'] = array( 'course' );
80 $specific_activity_triggers['gamipress_wplms_complete_specific_course_minimum_mark'] = array( 'course' );
81 $specific_activity_triggers['gamipress_wplms_review_specific_course'] = array( 'course' );
82 $specific_activity_triggers['gamipress_wplms_unsubscribe_specific_course'] = array( 'course' );
83 $specific_activity_triggers['gamipress_wplms_retake_specific_course'] = array( 'course' );
84
85 // Quiz
86 $specific_activity_triggers['gamipress_wplms_start_specific_quiz'] = array( 'quiz' );
87 $specific_activity_triggers['gamipress_wplms_complete_specific_quiz'] = array( 'quiz' );
88 $specific_activity_triggers['gamipress_wplms_complete_specific_quiz_minimum_mark'] = array( 'quiz' );
89 $specific_activity_triggers['gamipress_wplms_retake_specific_quiz'] = array( 'quiz' );
90
91 // Assignment
92 $specific_activity_triggers['gamipress_wplms_start_specific_assignment'] = array( 'assignment' );
93 $specific_activity_triggers['gamipress_wplms_complete_specific_assignment'] = array( 'assignment' );
94 $specific_activity_triggers['gamipress_wplms_complete_specific_assignment_minimum_mark'] = array( 'assignment' );
95
96 // Unit
97 $specific_activity_triggers['gamipress_wplms_complete_specific_unit'] = array( 'unit' );
98
99 return $specific_activity_triggers;
100 }
101 add_filter( 'gamipress_specific_activity_triggers', 'gamipress_wplms_specific_activity_triggers' );
102
103 /**
104 * Build custom activity trigger label
105 *
106 * @since 1.0.0
107 *
108 * @param string $title
109 * @param integer $requirement_id
110 * @param array $requirement
111 *
112 * @return string
113 */
114 function gamipress_wplms_activity_trigger_label( $title, $requirement_id, $requirement ) {
115
116 $minimum_score = ( isset( $requirement['wplms_score'] ) ) ? absint( $requirement['wplms_score'] ) : 0;
117
118 switch( $requirement['trigger_type'] ) {
119 // Course
120 case 'gamipress_wplms_complete_course_minimum_mark':
121 return sprintf( __( 'Completed a course with a minimum mark of %d', 'gamipress' ), $minimum_score );
122 break;
123 case 'gamipress_wplms_complete_specific_course_minimum_mark':
124 $post_id = absint( $requirement['achievement_post'] );
125 return sprintf( __( 'Complete the course %s with a minimum mark of %d', 'gamipress' ), get_the_title( $post_id ), $minimum_score );
126 break;
127 // Quiz
128 case 'gamipress_wplms_complete_quiz_minimum_mark':
129 return sprintf( __( 'Completed a quiz with a minimum mark of %d', 'gamipress' ), $minimum_score );
130 break;
131 case 'gamipress_wplms_complete_specific_quiz_minimum_mark':
132 $post_id = absint( $requirement['achievement_post'] );
133 return sprintf( __( 'Complete the quiz %s with a minimum mark of %d', 'gamipress' ), get_the_title( $post_id ), $minimum_score );
134 break;
135 // Assignment
136 case 'gamipress_wplms_complete_assignment_minimum_mark':
137 return sprintf( __( 'Completed an assignment with a minimum mark of %d', 'gamipress' ), $minimum_score );
138 break;
139 case 'gamipress_wplms_complete_specific_assignment_minimum_mark':
140 $post_id = absint( $requirement['achievement_post'] );
141 return sprintf( __( 'Complete the assignment %s with a minimum mark of %d', 'gamipress' ), get_the_title( $post_id ), $minimum_score );
142 break;
143 }
144
145 return $title;
146
147 }
148 add_filter( 'gamipress_activity_trigger_label', 'gamipress_wplms_activity_trigger_label', 10, 3 );
149
150 /**
151 * Register specific activity triggers labels
152 *
153 * @since 1.0.0
154 *
155 * @param array $specific_activity_trigger_labels
156 *
157 * @return array
158 */
159 function gamipress_wplms_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
160
161 // Course
162 $specific_activity_trigger_labels['gamipress_wplms_subscribe_specific_course'] = __( 'Subscribe to the course %s', 'gamipress' );
163 $specific_activity_trigger_labels['gamipress_wplms_start_specific_course'] = __( 'Start the course %s', 'gamipress' );
164 $specific_activity_trigger_labels['gamipress_wplms_complete_specific_course'] = __( 'Complete the course %s', 'gamipress' );
165 $specific_activity_trigger_labels['gamipress_wplms_review_specific_course'] = __( 'Review the course %s', 'gamipress' );
166 $specific_activity_trigger_labels['gamipress_wplms_unsubscribe_specific_course'] = __( 'Unsubscribe from the course %s', 'gamipress' );
167 $specific_activity_trigger_labels['gamipress_wplms_retake_specific_course'] = __( 'Retake the course %s', 'gamipress' );
168
169 // Quiz
170 $specific_activity_trigger_labels['gamipress_wplms_start_specific_quiz'] = __( 'Start the quiz %s', 'gamipress' );
171 $specific_activity_trigger_labels['gamipress_wplms_complete_specific_quiz'] = __( 'Complete the quiz %s', 'gamipress' );
172 $specific_activity_trigger_labels['gamipress_wplms_retake_specific_quiz'] = __( 'Retake the quiz %s', 'gamipress' );
173
174 // Assignment
175 $specific_activity_trigger_labels['gamipress_wplms_start_specific_assignment'] = __( 'Start the assignment %s', 'gamipress' );
176 $specific_activity_trigger_labels['gamipress_wplms_complete_specific_assignment'] = __( 'Complete the assignment %s', 'gamipress' );
177
178 // Unit
179 $specific_activity_trigger_labels['gamipress_wplms_complete_specific_unit'] = __( 'Complete the unit %s', 'gamipress' );
180
181 return $specific_activity_trigger_labels;
182 }
183 add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_wplms_specific_activity_trigger_label' );
184
185 /**
186 * Get user for a given trigger action.
187 *
188 * @since 1.0.0
189 *
190 * @param integer $user_id user ID to override.
191 * @param string $trigger Trigger name.
192 * @param array $args Passed trigger args.
193 * @return integer User ID.
194 */
195 function gamipress_wplms_trigger_get_user_id( $user_id, $trigger, $args ) {
196
197 switch ( $trigger ) {
198 // Course
199 case 'gamipress_wplms_subscribe_course':
200 case 'gamipress_wplms_subscribe_specific_course':
201 case 'gamipress_wplms_start_course':
202 case 'gamipress_wplms_start_specific_course':
203 case 'gamipress_wplms_complete_course':
204 case 'gamipress_wplms_complete_specific_course':
205 case 'gamipress_wplms_complete_course_minimum_mark':
206 case 'gamipress_wplms_complete_specific_course_minimum_mark':
207 case 'gamipress_wplms_review_course':
208 case 'gamipress_wplms_review_specific_course':
209 case 'gamipress_wplms_unsubscribe_course':
210 case 'gamipress_wplms_unsubscribe_specific_course':
211 case 'gamipress_wplms_retake_course':
212 case 'gamipress_wplms_retake_specific_course':
213 // Quiz
214 case 'gamipress_wplms_start_quiz':
215 case 'gamipress_wplms_start_specific_quiz':
216 case 'gamipress_wplms_complete_quiz':
217 case 'gamipress_wplms_complete_specific_quiz':
218 case 'gamipress_wplms_complete_quiz_minimum_mark':
219 case 'gamipress_wplms_complete_specific_quiz_minimum_mark':
220 case 'gamipress_wplms_retake_quiz':
221 case 'gamipress_wplms_retake_specific_quiz':
222 // Assignment
223 case 'gamipress_wplms_start_assignment':
224 case 'gamipress_wplms_start_specific_assignment':
225 case 'gamipress_wplms_complete_assignment':
226 case 'gamipress_wplms_complete_specific_assignment':
227 case 'gamipress_wplms_complete_assignment_minimum_mark':
228 case 'gamipress_wplms_complete_specific_assignment_minimum_mark':
229 // Unit
230 case 'gamipress_wplms_complete_unit':
231 case 'gamipress_wplms_complete_specific_unit':
232 $user_id = $args[1];
233 break;
234 }
235
236 return $user_id;
237
238 }
239 add_filter( 'gamipress_trigger_get_user_id', 'gamipress_wplms_trigger_get_user_id', 10, 3 );
240
241 /**
242 * Get the id for a given specific trigger action.
243 *
244 * @since 1.0.0
245 *
246 * @param integer $specific_id Specific ID.
247 * @param string $trigger Trigger name.
248 * @param array $args Passed trigger args.
249 *
250 * @return integer Specific ID.
251 */
252 function gamipress_wplms_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
253
254 switch ( $trigger ) {
255 // Course
256 case 'gamipress_wplms_subscribe_specific_course':
257 case 'gamipress_wplms_start_specific_course':
258 case 'gamipress_wplms_complete_specific_course':
259 case 'gamipress_wplms_complete_specific_course_minimum_mark':
260 case 'gamipress_wplms_review_specific_course':
261 case 'gamipress_wplms_unsubscribe_specific_course':
262 case 'gamipress_wplms_retake_specific_course':
263 // Quiz
264 case 'gamipress_wplms_start_specific_quiz':
265 case 'gamipress_wplms_complete_specific_quiz':
266 case 'gamipress_wplms_complete_specific_quiz_minimum_mark':
267 case 'gamipress_wplms_retake_specific_quiz':
268 // Assignment
269 case 'gamipress_wplms_start_specific_assignment':
270 case 'gamipress_wplms_complete_specific_assignment':
271 case 'gamipress_wplms_complete_specific_assignment_minimum_mark':
272 // Unit
273 case 'gamipress_wplms_complete_specific_unit':
274 $specific_id = $args[0];
275 break;
276 }
277
278 return $specific_id;
279 }
280 add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_wplms_specific_trigger_get_id', 10, 3 );
281
282 /**
283 * Extended meta data for event trigger logging
284 *
285 * @since 1.0.0
286 *
287 * @param array $log_meta
288 * @param integer $user_id
289 * @param string $trigger
290 * @param integer $site_id
291 * @param array $args
292 *
293 * @return array
294 */
295 function gamipress_wplms_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
296
297 switch ( $trigger ) {
298 // Course
299 case 'gamipress_wplms_subscribe_course':
300 case 'gamipress_wplms_subscribe_specific_course':
301 case 'gamipress_wplms_start_course':
302 case 'gamipress_wplms_start_specific_course':
303 case 'gamipress_wplms_complete_course':
304 case 'gamipress_wplms_complete_specific_course':
305 case 'gamipress_wplms_review_course':
306 case 'gamipress_wplms_review_specific_course':
307 case 'gamipress_wplms_unsubscribe_course':
308 case 'gamipress_wplms_unsubscribe_specific_course':
309 case 'gamipress_wplms_retake_course':
310 case 'gamipress_wplms_retake_specific_course':
311 // Add the course ID
312 $log_meta['course_id'] = $args[0];
313 break;
314 case 'gamipress_wplms_complete_course_minimum_mark':
315 case 'gamipress_wplms_complete_specific_course_minimum_mark':
316 // Add the course ID and score
317 $log_meta['course_id'] = $args[0];
318 $log_meta['score'] = $args[2];
319 break;
320 // Quiz
321 case 'gamipress_wplms_start_quiz':
322 case 'gamipress_wplms_start_specific_quiz':
323 case 'gamipress_wplms_complete_quiz':
324 case 'gamipress_wplms_complete_specific_quiz':
325 case 'gamipress_wplms_retake_quiz':
326 case 'gamipress_wplms_retake_specific_quiz':
327 // Add the quiz ID
328 $log_meta['quiz_id'] = $args[0];
329 break;
330 case 'gamipress_wplms_complete_quiz_minimum_mark':
331 case 'gamipress_wplms_complete_specific_quiz_minimum_mark':
332 // Add the quiz ID and score
333 $log_meta['quiz_id'] = $args[0];
334 $log_meta['score'] = $args[2];
335 break;
336
337 // Assignment
338 case 'gamipress_wplms_start_assignment':
339 case 'gamipress_wplms_start_specific_assignment':
340 case 'gamipress_wplms_complete_assignment':
341 case 'gamipress_wplms_complete_specific_assignment':
342 // Add the assignment ID
343 $log_meta['assignment_id'] = $args[0];
344 break;
345 case 'gamipress_wplms_complete_assignment_minimum_mark':
346 case 'gamipress_wplms_complete_specific_assignment_minimum_mark':
347 // Add the assignment ID and score
348 $log_meta['assignment_id'] = $args[0];
349 $log_meta['score'] = $args[2];
350 break;
351
352 // Unit
353 case 'gamipress_wplms_complete_unit':
354 case 'gamipress_wplms_complete_specific_unit':
355 // Add the unit and course IDs
356 $log_meta['unit_id'] = $args[0];
357 $log_meta['course_id'] = $args[2];
358 break;
359 }
360
361 return $log_meta;
362 }
363 add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_wplms_log_event_trigger_meta_data', 10, 5 );