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
← All changes | integrations/wplms/includes/triggers.php +363 -0 7.8.9 → 8.0.3 View file →
@@ -1,0 +1,363 @@
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 );