PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.5
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.5
8.0.5 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 All 47 releases
← All changes | integrations/forminator/includes/triggers.php +453 -0 7.9.1 → 8.0.5 View file →
@@ -1,0 +1,453 @@
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 );