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/qsm/includes/triggers.php +389 -0 7.9.2 → 8.0.3 View file →
@@ -1,0 +1,389 @@
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 );