PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.2
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.2
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 7.8.6 7.8.5 All 44 releases
gamipress / integrations / forminator / includes / triggers.php

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

453 lines 19.5 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\Forminator\Triggers
6 * @since 1.0.0
7 */
8 // Exit if accessed directly
9 if( !defined( 'ABSPATH' ) ) exit;
10
11 /**
12 * Register Forminator specific triggers
13 *
14 * @since 1.0.0
15 *
16 * @param array $triggers
17 * @return mixed
18 */
19 function gamipress_forminator_activity_triggers( $triggers ) {
20
21 $triggers[__( 'Forminator', 'gamipress' )] = array(
22 // Form
23 'gamipress_forminator_form_submission' => __( 'Successful submit a form', 'gamipress' ),
24 'gamipress_forminator_specific_form_submission' => __( 'Successful submit a specific form', 'gamipress' ),
25 'gamipress_forminator_form_field_value_submission' => __( 'Submit a specific field value on any form', 'gamipress' ),
26 'gamipress_forminator_specific_form_field_value_submission' => __( 'Submit a specific field value on a specific form', 'gamipress' ),
27 // Quiz
28 'gamipress_forminator_quiz_submission' => __( 'Successful submit a quiz', 'gamipress' ),
29 'gamipress_forminator_specific_quiz_submission' => __( 'Successful submit a specific quiz', 'gamipress' ),
30
31 'gamipress_forminator_pass_quiz' => __( 'Pass a quiz', 'gamipress' ),
32 'gamipress_forminator_pass_specific_quiz' => __( 'Pass a specific quiz', 'gamipress' ),
33
34 'gamipress_forminator_fail_quiz' => __( 'Fail a quiz', 'gamipress' ),
35 'gamipress_forminator_fail_specific_quiz' => __( 'Fail a specific quiz', 'gamipress' ),
36
37 'gamipress_forminator_quiz_field_value_submission' => __( 'Submit a specific field value on any quiz', 'gamipress' ),
38 'gamipress_forminator_specific_quiz_field_value_submission' => __( 'Submit a specific field value on a specific quiz', 'gamipress' ),
39 // Poll
40 'gamipress_forminator_poll_submission' => __( 'Successful vote on a poll', 'gamipress' ),
41 'gamipress_forminator_specific_poll_submission' => __( 'Successful vote on a specific poll', 'gamipress' ),
42 'gamipress_forminator_poll_field_value_submission' => __( 'Submit a specific field value on any poll', 'gamipress' ),
43 'gamipress_forminator_specific_poll_field_value_submission' => __( 'Submit a specific field value on a specific poll', 'gamipress' ),
44 );
45
46 return $triggers;
47
48 }
49 add_filter( 'gamipress_activity_triggers', 'gamipress_forminator_activity_triggers' );
50
51 /**
52 * Register Forminator specific activity triggers
53 *
54 * @since 1.0.0
55 *
56 * @param array $specific_activity_triggers
57 * @return array
58 */
59 function gamipress_forminator_specific_activity_triggers( $specific_activity_triggers ) {
60
61 // Poll
62 $specific_activity_triggers['gamipress_forminator_specific_form_submission'] = array( 'forminator_forms' );
63 $specific_activity_triggers['gamipress_forminator_specific_form_field_value_submission'] = array( 'forminator_forms' );
64 // Quiz
65 $specific_activity_triggers['gamipress_forminator_specific_quiz_submission'] = array( 'forminator_quizzes' );
66 $specific_activity_triggers['gamipress_forminator_pass_specific_quiz'] = array( 'forminator_quizzes' );
67 $specific_activity_triggers['gamipress_forminator_fail_specific_quiz'] = array( 'forminator_quizzes' );
68 $specific_activity_triggers['gamipress_forminator_specific_quiz_field_value_submission'] = array( 'forminator_quizzes' );
69 // Poll
70 $specific_activity_triggers['gamipress_forminator_specific_poll_submission'] = array( 'forminator_polls' );
71 $specific_activity_triggers['gamipress_forminator_specific_poll_field_value_submission'] = array( 'forminator_polls' );
72
73 return $specific_activity_triggers;
74 }
75 add_filter( 'gamipress_specific_activity_triggers', 'gamipress_forminator_specific_activity_triggers' );
76
77 /**
78 * Build custom activity trigger label
79 *
80 * @since 1.0.0
81 *
82 * @param string $title
83 * @param integer $requirement_id
84 * @param array $requirement
85 *
86 * @return string
87 */
88 function gamipress_forminator_activity_trigger_label( $title, $requirement_id, $requirement ) {
89
90 $field_name = ( isset( $requirement['forminator_field_name'] ) ) ? $requirement['forminator_field_name'] : '';
91 $field_value = ( isset( $requirement['forminator_field_value'] ) ) ? $requirement['forminator_field_value'] : '';
92
93 switch( $requirement['trigger_type'] ) {
94 // Specific field value on any form
95 case 'gamipress_forminator_form_field_value_submission':
96 return sprintf( __( 'Submit a form setting field "%s" to "%s" value', 'gamipress' ), $field_name, $field_value );
97 break;
98 // Specific field value on a specific form
99 case 'gamipress_forminator_specific_form_field_value_submission':
100 $achievement_post_id = absint( $requirement['achievement_post'] );
101 $form_title = gamipress_get_specific_activity_trigger_post_title( $achievement_post_id, $requirement['trigger_type'], get_current_blog_id() );
102 return sprintf( __( 'Submit %s form setting field "%s" to "%s" value', 'gamipress' ), $form_title, $field_name, $field_value );
103 break;
104 // Specific field value on any quiz
105 case 'gamipress_forminator_quiz_field_value_submission':
106 return sprintf( __( 'Submit a quiz setting field "%s" to "%s" value', 'gamipress' ), $field_name, $field_value );
107 break;
108 // Specific field value on a specific quiz
109 case 'gamipress_forminator_specific_quiz_field_value_submission':
110 $achievement_post_id = absint( $requirement['achievement_post'] );
111 $quiz_title = gamipress_get_specific_activity_trigger_post_title( $achievement_post_id, $requirement['trigger_type'], get_current_blog_id() );
112 return sprintf( __( 'Submit %s quiz setting field "%s" to "%s" value', 'gamipress' ), $quiz_title, $field_name, $field_value );
113 break;
114 // Specific field value on any poll
115 case 'gamipress_forminator_poll_field_value_submission':
116 return sprintf( __( 'Submit a poll setting field "%s" to "%s" value', 'gamipress' ), $field_name, $field_value );
117 break;
118 // Specific field value on a specific poll
119 case 'gamipress_forminator_specific_poll_field_value_submission':
120 $achievement_post_id = absint( $requirement['achievement_post'] );
121 $poll_title = gamipress_get_specific_activity_trigger_post_title( $achievement_post_id, $requirement['trigger_type'], get_current_blog_id() );
122 return sprintf( __( 'Submit %s poll setting field "%s" to "%s" value', 'gamipress' ), $poll_title, $field_name, $field_value );
123 break;
124 }
125
126 return $title;
127 }
128 add_filter( 'gamipress_activity_trigger_label', 'gamipress_forminator_activity_trigger_label', 10, 3 );
129
130 /**
131 * Register Forminator specific activity triggers labels
132 *
133 * @since 1.0.0
134 *
135 * @param array $specific_activity_trigger_labels
136 * @return array
137 */
138 function gamipress_forminator_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
139
140 $specific_activity_trigger_labels['gamipress_forminator_specific_form_submission'] = __( 'Submit %s form', 'gamipress' );
141 $specific_activity_trigger_labels['gamipress_forminator_specific_form_field_value_submission'] = __( 'Submit a specific field value on %s form', 'gamipress' );
142
143 $specific_activity_trigger_labels['gamipress_forminator_specific_quiz_submission'] = __( 'Submit %s quiz', 'gamipress' );
144 $specific_activity_trigger_labels['gamipress_forminator_pass_specific_quiz'] = __( 'Pass %s quiz', 'gamipress' );
145 $specific_activity_trigger_labels['gamipress_forminator_fail_specific_quiz'] = __( 'Fail %s quiz', 'gamipress' );
146 $specific_activity_trigger_labels['gamipress_forminator_specific_quiz_field_value_submission'] = __( 'Submit a specific field value on %s quiz', 'gamipress' );
147
148 $specific_activity_trigger_labels['gamipress_forminator_specific_poll_submission'] = __( 'Vote on %s poll', 'gamipress' );
149 $specific_activity_trigger_labels['gamipress_forminator_specific_poll_field_value_submission'] = __( 'Submit a specific field value on %s poll', 'gamipress' );
150
151 return $specific_activity_trigger_labels;
152 }
153 add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_forminator_specific_activity_trigger_label' );
154
155 /**
156 * Get user for a given trigger action.
157 *
158 * @since 1.0.0
159 *
160 * @param integer $user_id user ID to override.
161 * @param string $trigger Trigger name.
162 * @param array $args Passed trigger args.
163 * @return integer User ID.
164 */
165 function gamipress_forminator_trigger_get_user_id( $user_id, $trigger, $args ) {
166
167 switch ( $trigger ) {
168 // Form
169 case 'gamipress_forminator_form_submission':
170 case 'gamipress_forminator_specific_form_submission':
171 case 'gamipress_forminator_form_field_value_submission':
172 case 'gamipress_forminator_specific_form_field_value_submission':
173 // Quiz
174 case 'gamipress_forminator_quiz_submission':
175 case 'gamipress_forminator_specific_quiz_submission':
176
177 case 'gamipress_forminator_pass_quiz':
178 case 'gamipress_forminator_pass_specific_quiz':
179
180 case 'gamipress_forminator_fail_quiz':
181 case 'gamipress_forminator_fail_specific_quiz':
182
183 case 'gamipress_forminator_quiz_field_value_submission':
184 case 'gamipress_forminator_specific_quiz_field_value_submission':
185 // Poll
186 case 'gamipress_forminator_poll_submission':
187 case 'gamipress_forminator_specific_poll_submission':
188 case 'gamipress_forminator_poll_field_value_submission':
189 case 'gamipress_forminator_specific_poll_field_value_submission':
190 $user_id = $args[1];
191 break;
192 }
193
194 return $user_id;
195
196 }
197 add_filter( 'gamipress_trigger_get_user_id', 'gamipress_forminator_trigger_get_user_id', 10, 3 );
198
199 /**
200 * Get the id for a given specific trigger action.
201 *
202 * @since 1.0.0
203 *
204 * @param integer $specific_id Specific ID.
205 * @param string $trigger Trigger name.
206 * @param array $args Passed trigger args.
207 *
208 * @return integer Specific ID.
209 */
210 function gamipress_forminator_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
211
212 switch ( $trigger ) {
213 // Form
214 case 'gamipress_forminator_specific_form_submission':
215 case 'gamipress_forminator_specific_form_field_value_submission':
216 // Quiz
217 case 'gamipress_forminator_specific_quiz_submission':
218 case 'gamipress_forminator_pass_specific_quiz':
219 case 'gamipress_forminator_fail_specific_quiz':
220 case 'gamipress_forminator_specific_quiz_field_value_submission':
221 // Poll
222 case 'gamipress_forminator_specific_poll_submission':
223 case 'gamipress_forminator_specific_poll_field_value_submission':
224 $specific_id = $args[0];
225 break;
226 }
227
228 return $specific_id;
229 }
230 add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_forminator_specific_trigger_get_id', 10, 3 );
231
232 /**
233 * Extended meta data for event trigger logging
234 *
235 * @since 1.0.0
236 *
237 * @param array $log_meta
238 * @param integer $user_id
239 * @param string $trigger
240 * @param integer $site_id
241 * @param array $args
242 *
243 * @return array
244 */
245 function gamipress_forminator_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
246
247 switch ( $trigger ) {
248 // Form
249 case 'gamipress_forminator_form_submission':
250 case 'gamipress_forminator_specific_form_submission':
251 // Quiz
252 case 'gamipress_forminator_quiz_submission':
253 case 'gamipress_forminator_specific_quiz_submission':
254
255 case 'gamipress_forminator_pass_quiz':
256 case 'gamipress_forminator_pass_specific_quiz':
257
258 case 'gamipress_forminator_fail_quiz':
259 case 'gamipress_forminator_fail_specific_quiz':
260 // Poll
261 case 'gamipress_forminator_poll_submission':
262 case 'gamipress_forminator_specific_poll_submission':
263 // Add the post ID
264 $log_meta['post_id'] = $args[0];
265 break;
266 // Form
267 case 'gamipress_forminator_form_field_value_submission':
268 case 'gamipress_forminator_specific_form_field_value_submission':
269 // Quiz
270 case 'gamipress_forminator_quiz_field_value_submission':
271 case 'gamipress_forminator_specific_quiz_field_value_submission':
272 // Poll
273 case 'gamipress_forminator_poll_field_value_submission':
274 case 'gamipress_forminator_specific_poll_field_value_submission':
275 // Add the post ID
276 $log_meta['post_id'] = $args[0];
277 $log_meta['field_name'] = $args[2];
278 $log_meta['field_value'] = $args[3];
279 break;
280 }
281
282 return $log_meta;
283 }
284 add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_forminator_log_event_trigger_meta_data', 10, 5 );
285
286 /**
287 * Override the meta data to filter the logs count
288 *
289 * @since 1.0.0
290 *
291 * @param array $log_meta The meta data to filter the logs count
292 * @param int $user_id The given user's ID
293 * @param string $trigger The given trigger we're checking
294 * @param int $since The since timestamp where retrieve the logs
295 * @param int $site_id The desired Site ID to check
296 * @param array $args The triggered args or requirement object
297 *
298 * @return array The meta data to filter the logs count
299 */
300 function gamipress_forminator_get_user_trigger_count_log_meta( $log_meta, $user_id, $trigger, $since, $site_id, $args ) {
301
302 switch( $trigger ) {
303 // Form
304 case 'gamipress_forminator_form_field_value_submission':
305 case 'gamipress_forminator_specific_form_field_value_submission':
306 // Quiz
307 case 'gamipress_forminator_quiz_field_value_submission':
308 case 'gamipress_forminator_specific_quiz_field_value_submission':
309 // Poll
310 case 'gamipress_forminator_poll_field_value_submission':
311 case 'gamipress_forminator_specific_poll_field_value_submission':
312 if( isset( $args[2] ) && isset( $args[3] ) ) {
313 // Add the field name and value
314 $log_meta['field_name'] = $args[2];
315 $log_meta['field_value'] = $args[3];
316 }
317
318 // $args could be a requirement object
319 if( isset( $args['forminator_field_name'] ) && isset( $args['forminator_field_value'] ) ) {
320 // Add the field name and value
321 $log_meta['field_name'] = $args['forminator_field_name'];
322 $log_meta['field_value'] = $args['forminator_field_value'];
323 }
324 break;
325 }
326
327 return $log_meta;
328
329 }
330 add_filter( 'gamipress_get_user_trigger_count_log_meta', 'gamipress_forminator_get_user_trigger_count_log_meta', 10, 6 );
331
332 /**
333 * Override the count log for array fields
334 *
335 * @since 1.0.0
336 *
337 * @param int $trigger_count The total number of times a user has triggered the trigger
338 * @param int $user_id The given user's ID
339 * @param string $trigger The given trigger we're checking
340 * @param int $since The since timestamp where retrieve the logs
341 * @param int $site_id The desired Site ID to check
342 * @param array $args The triggered args or requirement object
343 *
344 * @return int The total number of times a user has triggered the trigger
345 */
346 function gamipress_forminator_get_user_trigger_count( $trigger_count, $user_id, $trigger, $since, $site_id, $args ) {
347
348 switch( $trigger ) {
349 // Form
350 case 'gamipress_forminator_form_field_value_submission':
351 case 'gamipress_forminator_specific_form_field_value_submission':
352 // Quiz
353 case 'gamipress_forminator_quiz_field_value_submission':
354 case 'gamipress_forminator_specific_quiz_field_value_submission':
355 // Poll
356 case 'gamipress_forminator_poll_field_value_submission':
357 case 'gamipress_forminator_specific_poll_field_value_submission':
358
359 if( $trigger_count === 0 ) {
360
361 $log_meta = array(
362 'type' => 'event_trigger',
363 'trigger_type' => $trigger,
364 );
365
366 $log_meta = apply_filters( 'gamipress_get_user_trigger_count_log_meta', $log_meta, $user_id, $trigger, $since, $site_id, $args );
367
368 if( isset( $log_meta['field_value'] ) ) {
369
370 if( is_array( $log_meta['field_value'] ) ) {
371 $log_meta[] = array(
372 'key' => 'field_value',
373 'value' => $log_meta['field_value'],
374 'compare' => 'IN',
375 );
376 } else {
377 $log_meta[] = array(
378 'key' => 'field_value',
379 'value' => '%"' . $log_meta['field_value'] . '"%',
380 'compare' => 'LIKE',
381 );
382 }
383
384 unset( $log_meta['field_value'] );
385
386 $trigger_count = absint( gamipress_get_user_log_count( absint( $user_id ), $log_meta, $since ) );
387
388 }
389 }
390 break;
391 }
392
393 return $trigger_count;
394
395 }
396 add_filter( 'gamipress_get_user_trigger_count', 'gamipress_forminator_get_user_trigger_count', 10, 6 );
397
398 /**
399 * Extra data fields
400 *
401 * @since 1.1.0
402 *
403 * @param array $fields
404 * @param int $log_id
405 * @param string $type
406 *
407 * @return array
408 */
409 function gamipress_forminator_log_extra_data_fields( $fields, $log_id, $type ) {
410
411 $prefix = '_gamipress_';
412
413 $log = ct_get_object( $log_id );
414 $trigger = $log->trigger_type;
415
416 if( $type !== 'event_trigger' ) {
417 return $fields;
418 }
419
420 switch( $trigger ) {
421 // Form
422 case 'gamipress_forminator_form_field_value_submission':
423 case 'gamipress_forminator_specific_form_field_value_submission':
424 // Quiz
425 case 'gamipress_forminator_quiz_field_value_submission':
426 case 'gamipress_forminator_specific_quiz_field_value_submission':
427 // Poll
428 case 'gamipress_forminator_poll_field_value_submission':
429 case 'gamipress_forminator_specific_poll_field_value_submission':
430
431 $field_value = ct_get_object_meta( $log_id, $prefix . 'field_value', true );
432
433 $fields[] = array(
434 'name' => __( 'Field name', 'gamipress' ),
435 'desc' => __( 'Field name attached to this log.', 'gamipress' ),
436 'id' => $prefix . 'field_name',
437 'type' => 'text',
438 );
439 $fields[] = array(
440 'name' => __( 'Field value', 'gamipress' ),
441 'desc' => __( 'Field value attached to this log.', 'gamipress' ),
442 'id' => $prefix . 'field_value',
443 'type' => ( is_array( $field_value ) ? 'advanced_select' : 'text' ),
444 'multiple' => ( is_array( $field_value ) && count( $field_value ) > 1 ? true : false ),
445 'options' => ( is_array( $field_value ) ? $field_value : array() ),
446 );
447 break;
448 }
449
450 return $fields;
451
452 }
453 add_filter( 'gamipress_log_extra_data_fields', 'gamipress_forminator_log_extra_data_fields', 10, 3 );