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 / qsm / includes / triggers.php

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

389 lines 13.4 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\QSM\Triggers
6 * @since 1.0.0
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Register plugin specific triggers
14 *
15 * @since 1.0.0
16 *
17 * @param array $triggers
18 * @return mixed
19 */
20 function gamipress_qsm_activity_triggers( $triggers ) {
21
22 $triggers[__( 'Quiz Master Survey', 'gamipress' )] = array(
23
24 // Quizzes
25 'gamipress_qsm_new_quiz_submission' => __( 'Submit a quiz', 'gamipress' ),
26 'gamipress_qsm_specific_new_quiz_submission' => __( 'Submit a specific quiz', 'gamipress' ),
27
28 // Minimum points
29 'gamipress_qsm_complete_quiz_points' => __( 'Complete a quiz with a minimum amount of points', 'gamipress' ),
30 'gamipress_qsm_complete_specific_quiz_points' => __( 'Complete a specific quiz with a minimum amount of points', 'gamipress' ),
31
32 // Maximum points
33 'gamipress_qsm_complete_quiz_max_points' => __( 'Complete a quiz with a maximum amount of points', 'gamipress' ),
34 'gamipress_qsm_complete_specific_quiz_max_points' => __( 'Complete a specific quiz with a maximum amount of points', 'gamipress' ),
35
36 // Between pointss
37 'gamipress_qsm_complete_quiz_between_points' => __( 'Complete a quiz on a range of points', 'gamipress' ),
38 'gamipress_qsm_complete_specifc_quiz_between_points' => __( 'Complete a specific quiz on a range of points', 'gamipress' ),
39
40 );
41
42 return $triggers;
43 }
44 add_filter( 'gamipress_activity_triggers', 'gamipress_qsm_activity_triggers' );
45
46 /**
47 * Register plugin specific activity triggers
48 *
49 * @since 1.0.0
50 *
51 * @param array $specific_activity_triggers
52 * @return array
53 */
54 function gamipress_qsm_specific_activity_triggers( $specific_activity_triggers ) {
55
56 // Quizzes
57 $specific_activity_triggers['gamipress_qsm_specific_new_quiz_submission'] = array( 'qsm_quiz' );
58
59 // Minimum points
60 $specific_activity_triggers['gamipress_qsm_complete_specific_quiz_points'] = array( 'qsm_quiz' );
61
62 // Maximum points
63 $specific_activity_triggers['gamipress_qsm_complete_specific_quiz_max_points'] = array( 'qsm_quiz' );
64
65 // Between points
66 $specific_activity_triggers['gamipress_qsm_complete_specifc_quiz_between_points'] = array( 'qsm_quiz' );
67
68 return $specific_activity_triggers;
69 }
70 add_filter( 'gamipress_specific_activity_triggers', 'gamipress_qsm_specific_activity_triggers' );
71
72 /**
73 * Build custom activity trigger label
74 *
75 * @param string $title
76 * @param integer $requirement_id
77 * @param array $requirement
78 *
79 * @return string
80 */
81 function gamipress_qsm_activity_trigger_label( $title, $requirement_id, $requirement ) {
82
83 $points = ( isset( $requirement['qsm_points'] ) ) ? absint( $requirement['qsm_points'] ) : 0;
84 $min_points = ( isset( $requirement['qsm_min_points'] ) ) ? absint( $requirement['qsm_min_points'] ) : 0;
85 $max_points = ( isset( $requirement['qsm_max_points'] ) ) ? absint( $requirement['qsm_max_points'] ) : 0;
86
87 switch( $requirement['trigger_type'] ) {
88
89 // Minimum points events
90 case 'gamipress_qsm_complete_quiz_points':
91 return sprintf( __( 'Completed a quiz with a points of %d or higher', 'gamipress'), $points );
92 break;
93 case 'gamipress_qsm_complete_specific_quiz_points':
94 $achievement_post_id = absint( $requirement['achievement_post'] );
95 return sprintf( __( 'Completed the quiz %s with a points of %d or higher', 'gamipress' ), get_the_title( $achievement_post_id ), $points );
96 break;
97
98 // Maximum points events
99 case 'gamipress_qsm_complete_quiz_max_points':
100 return sprintf( __( 'Completed a quiz with a maximum points of %d or higher', 'gamipress' ), $points );
101 break;
102 case 'gamipress_qsm_complete_specific_quiz_max_points':
103 $achievement_post_id = absint( $requirement['achievement_post'] );
104 return sprintf( __( 'Completed a quiz %s with a maximum points of %d', 'gamipress' ), get_the_title( $achievement_post_id ), $points );
105 break;
106
107 // Between points events
108 case 'gamipress_qsm_complete_quiz_between_points':
109 return sprintf( __( 'Completed a quiz with a points between %d and %d', 'gamipress' ), $min_points, $max_points );
110 break;
111 case 'gamipress_qsm_complete_specifc_quiz_between_points':
112 $achievement_post_id = absint( $requirement['achievement_post'] );
113 return sprintf( __( 'Complete the quiz %s with a points between %d and %d', 'gamipress' ), get_the_title( $achievement_post_id ), $min_points, $max_points );
114 break;
115 }
116
117 return $title;
118
119 }
120 add_filter( 'gamipress_activity_trigger_label', 'gamipress_qsm_activity_trigger_label', 10, 3 );
121
122 /**
123 * Register plugin specific activity triggers labels
124 *
125 * @since 1.0.0
126 *
127 * @param array $specific_activity_trigger_labels
128 * @return array
129 */
130 function gamipress_qsm_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
131
132 // Quizzes
133 $specific_activity_trigger_labels['gamipress_qsm_specific_new_quiz_submission'] = __( 'Submit %s', 'gamipress' );
134
135 return $specific_activity_trigger_labels;
136 }
137 add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_qsm_specific_activity_trigger_label' );
138
139 /**
140 * Get user for a given trigger action.
141 *
142 * @since 1.0.0
143 *
144 * @param integer $user_id user ID to override.
145 * @param string $trigger Trigger name.
146 * @param array $args Passed trigger args.
147 * @return integer User ID.
148 */
149 function gamipress_qsm_trigger_get_user_id( $user_id, $trigger, $args ) {
150
151 switch ( $trigger ) {
152 case 'gamipress_qsm_new_quiz_submission':
153 case 'gamipress_qsm_specific_new_quiz_submission':
154 case 'gamipress_qsm_complete_quiz_points':
155 case 'gamipress_qsm_complete_specific_quiz_points':
156 case 'gamipress_qsm_complete_quiz_max_points':
157 case 'gamipress_qsm_complete_specific_quiz_max_points':
158 case 'gamipress_qsm_complete_quiz_between_points':
159 case 'gamipress_qsm_complete_specifc_quiz_between_points':
160 $user_id = $args[1];
161 break;
162 }
163
164 return $user_id;
165
166 }
167 add_filter( 'gamipress_trigger_get_user_id', 'gamipress_qsm_trigger_get_user_id', 10, 3 );
168
169 /**
170 * Get the id for a given specific trigger action.
171 *
172 * @since 1.0.0
173 *
174 * @param integer $specific_id Specific ID.
175 * @param string $trigger Trigger name.
176 * @param array $args Passed trigger args.
177 *
178 * @return integer Specific ID.
179 */
180 function gamipress_qsm_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
181
182 switch( $trigger ) {
183 case 'gamipress_qsm_specific_new_quiz_submission':
184 case 'gamipress_qsm_complete_specific_quiz_points':
185 case 'gamipress_qsm_complete_specific_quiz_max_points':
186 case 'gamipress_qsm_complete_specifc_quiz_between_points':
187 $specific_id = $args[0];
188 break;
189 }
190
191 return $specific_id;
192 }
193 add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_qsm_specific_trigger_get_id', 10, 3 );
194
195 /**
196 * Extended meta data for event trigger logging
197 *
198 * @since 1.0.0
199 *
200 * @param array $log_meta
201 * @param integer $user_id
202 * @param string $trigger
203 * @param integer $site_id
204 * @param array $args
205 *
206 * @return array
207 */
208 function gamipress_qsm_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
209
210 switch( $trigger ) {
211 case 'gamipress_qsm_new_quiz_submission':
212 case 'gamipress_qsm_specific_new_quiz_submission':
213 case 'gamipress_qsm_complete_quiz_points':
214 case 'gamipress_qsm_complete_specific_quiz_points':
215 case 'gamipress_qsm_complete_quiz_max_points':
216 case 'gamipress_qsm_complete_specific_quiz_max_points':
217 case 'gamipress_qsm_complete_quiz_between_points':
218 case 'gamipress_qsm_complete_quiz_between_points':
219
220 // Add the quiz ID
221 $log_meta['quiz_id'] = $args[0];
222 $log_meta['points'] = $args[2];
223 break;
224
225 }
226
227 return $log_meta;
228
229 }
230 add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_qsm_log_event_trigger_meta_data', 10, 5 );
231
232 /**
233 * Extra data fields
234 *
235 * @since 1.0.0
236 *
237 * @param array $fields
238 * @param int $log_id
239 * @param string $type
240 *
241 * @return array
242 */
243 function gamipress_qsm_log_extra_data_fields( $fields, $log_id, $type ) {
244
245 $prefix = '_gamipress_';
246
247 $log = ct_get_object( $log_id );
248 $trigger = $log->trigger_type;
249
250 if( $type !== 'event_trigger' ) {
251 return $fields;
252 }
253
254 switch( $trigger ) {
255 case 'gamipress_qsm_new_quiz_submission':
256 case 'gamipress_qsm_specific_new_quiz_submission':
257 case 'gamipress_qsm_complete_quiz_points':
258 case 'gamipress_qsm_complete_specific_quiz_points':
259 case 'gamipress_qsm_complete_quiz_max_points':
260 case 'gamipress_qsm_complete_specific_quiz_max_points':
261 case 'gamipress_qsm_complete_quiz_between_points':
262 case 'gamipress_qsm_complete_quiz_between_points':
263 $fields[] = array(
264 'name' => __( 'Total points', 'gamipress' ),
265 'desc' => __( 'Total points the user got on complete this quiz.', 'gamipress' ),
266 'id' => $prefix . 'points',
267 'type' => 'text',
268 );
269 break;
270 }
271
272 return $fields;
273
274 }
275 add_filter( 'gamipress_log_extra_data_fields', 'gamipress_qsm_log_extra_data_fields', 10, 3 );
276
277 /**
278 * Override the meta data to filter the logs count
279 *
280 * @since 1.0.0
281 *
282 * @param array $log_meta The meta data to filter the logs count
283 * @param int $user_id The given user's ID
284 * @param string $trigger The given trigger we're checking
285 * @param int $since The since timestamp where retrieve the logs
286 * @param int $site_id The desired Site ID to check
287 * @param array $args The triggered args or requirement object
288 *
289 * @return array The meta data to filter the logs count
290 */
291 function gamipress_qsm_get_user_trigger_count_log_meta( $log_meta, $user_id, $trigger, $since, $site_id, $args ) {
292
293 switch( $trigger ) {
294 case 'gamipress_qsm_complete_quiz_points':
295 case 'gamipress_qsm_complete_specific_quiz_points':
296
297 $points = 0;
298
299 if( isset( $args[2] ) ) {
300 // Add the points
301 $points = $args[2];
302 }
303
304 // $args could be a requirement object
305 if( isset( $args['qsm_points'] ) ) {
306 // Add the points
307 $points = $args['qsm_points'];
308 }
309
310 $log_meta['points'] = array(
311 'key' => 'points',
312 'value' => (int) $points,
313 'compare' => '>=',
314 'type' => 'integer',
315 );
316 break;
317 case 'gamipress_qsm_complete_quiz_max_points':
318 case 'gamipress_qsm_complete_specific_quiz_max_points':
319
320 $points = 0;
321
322 if( isset( $args[2] ) ) {
323 // Add the points
324 $points = $args[2];
325 }
326
327 // $args could be a requirement object
328 if( isset( $args['qsm_points'] ) ) {
329 // Add the points
330 $points = $args['qsm_points'];
331 }
332
333 $log_meta['points'] = array(
334 'key' => 'points',
335 'value' => (int) $points,
336 'compare' => '<=',
337 'type' => 'integer',
338 );
339 break;
340 case 'gamipress_qsm_complete_quiz_between_points':
341 case 'gamipress_qsm_complete_quiz_between_points':
342
343 if( isset( $args[2] ) ) {
344 // Add the points
345 $points = $args[2];
346
347 $log_meta['points'] = array(
348 'key' => 'points',
349 'value' => $points,
350 'compare' => '>=',
351 'type' => 'integer',
352 );
353
354 }
355
356 // $args could be a requirement object
357 if( isset( $args['qsm_min_points'] ) ) {
358 // Add the points
359 $min_points = $args['qsm_min_points'];
360
361 $log_meta['points'] = array(
362 'key' => 'points',
363 'value' => $min_points,
364 'compare' => '>=',
365 'type' => 'integer',
366 );
367
368 }
369
370 // $args could be a requirement object
371 if( isset( $args['qsm_max_points'] ) ) {
372 // Add the points
373 $max_points = $args['qsm_max_points'];
374
375 $log_meta['points'] = array(
376 'key' => 'points',
377 'value' => $max_points,
378 'compare' => '<=',
379 'type' => 'integer',
380 );
381
382 }
383 break;
384 }
385
386 return $log_meta;
387
388 }
389 add_filter( 'gamipress_get_user_trigger_count_log_meta', 'gamipress_qsm_get_user_trigger_count_log_meta', 10, 6 );