PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 7.9.8
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v7.9.8
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 / wpep / includes / triggers.php

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

334 lines 13.0 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\WPEP\Triggers
6 * @since 1.0.0
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Register WPEP specific triggers
14 *
15 * @param array $triggers
16 * @return mixed
17 */
18 function gamipress_wpep_activity_triggers( $triggers ) {
19
20 $triggers[__( 'WPEP', 'gamipress' )] = array(
21
22 // Assessments
23 'gamipress_wpep_complete_assessment' => __( 'Complete an assessment', 'gamipress' ),
24 'gamipress_wpep_complete_specific_assessment' => __( 'Complete a specific assessment', 'gamipress' ),
25 'gamipress_wpep_fail_assessment' => __( 'Fail an assessment', 'gamipress' ),
26 'gamipress_wpep_fail_specific_assessment' => __( 'Fail a specific assessment', 'gamipress' ),
27
28 // Minimum grade
29 'gamipress_wpep_complete_assessment_min_grade' => __( 'Complete an assessment with a minimum percent grade', 'gamipress' ),
30 'gamipress_wpep_complete_specific_assessment_min_grade' => __( 'Complete a specific assessment with a minimum percent grade', 'gamipress' ),
31
32 // Maximum grade
33 'gamipress_wpep_complete_assessment_max_grade' => __( 'Complete an assessment with a maximum percent grade', 'gamipress' ),
34 'gamipress_wpep_complete_specific_assessment_max_grade' => __( 'Complete a specific assessment with a maximum percent grade', 'gamipress' ),
35
36 // Between grades
37 'gamipress_wpep_complete_assessment_between_grade' => __( 'Complete an assessment on a range of percent grade', 'gamipress' ),
38 'gamipress_wpep_complete_specific_assessment_between_grade' => __( 'Complete a specific assessment on a range of percent grade', 'gamipress' ),
39
40 // Lessons
41 'gamipress_wpep_complete_lesson' => __( 'Complete a lesson', 'gamipress' ),
42 'gamipress_wpep_complete_specific_lesson' => __( 'Complete a specific lesson', 'gamipress' ),
43
44 // Courses
45 'gamipress_wpep_complete_course' => __( 'Complete a course', 'gamipress' ),
46 'gamipress_wpep_complete_specific_course' => __( 'Complete a specific course', 'gamipress' ),
47 );
48
49 return $triggers;
50
51 }
52 add_filter( 'gamipress_activity_triggers', 'gamipress_wpep_activity_triggers' );
53
54 /**
55 * Register WPEP specific activity triggers
56 *
57 * @since 1.0.0
58 *
59 * @param array $specific_activity_triggers
60 * @return array
61 */
62 function gamipress_wpep_specific_activity_triggers( $specific_activity_triggers ) {
63
64 // Post Type Assessment
65 $assessment = 'wpep_assessment';
66 if( defined( 'WPEP_POST_TYPE_ASSESSMENT' ) )
67 $assessment = WPEP_POST_TYPE_ASSESSMENT;
68
69 // Post Type Course
70 $course = 'courses';
71 if( defined( 'WPEP_POST_TYPE_COURSE' ) )
72 $course = WPEP_POST_TYPE_COURSE;
73
74 // Assessments
75 $specific_activity_triggers['gamipress_wpep_complete_specific_assessment'] = array( $assessment );
76 $specific_activity_triggers['gamipress_wpep_fail_specific_assessment'] = array( $assessment );
77
78 $specific_activity_triggers['gamipress_wpep_complete_specific_assessment_min_grade'] = array( $assessment );
79
80 $specific_activity_triggers['gamipress_wpep_complete_specific_assessment_max_grade'] = array( $assessment );
81
82 $specific_activity_triggers['gamipress_wpep_complete_specific_assessment_between_grade'] = array( $assessment );
83
84 // Lessons
85 $specific_activity_triggers['gamipress_wpep_complete_specific_lesson'] = array( 'wpep_lessons' );
86
87 // Courses
88 $specific_activity_triggers['gamipress_wpep_complete_specific_course'] = array( $course );
89
90 return $specific_activity_triggers;
91
92 }
93 add_filter( 'gamipress_specific_activity_triggers', 'gamipress_wpep_specific_activity_triggers' );
94
95 /**
96 * Build custom activity trigger label
97 *
98 * @param string $title
99 * @param integer $requirement_id
100 * @param array $requirement
101 *
102 * @return string
103 */
104 function gamipress_wpep_activity_trigger_label( $title, $requirement_id, $requirement ) {
105
106 $score = ( isset( $requirement['wpep_score'] ) ) ? absint( $requirement['wpep_score'] ) : 0;
107 $min_score = ( isset( $requirement['wpep_min_score'] ) ) ? absint( $requirement['wpep_min_score'] ) : 0;
108 $max_score = ( isset( $requirement['wpep_max_score'] ) ) ? absint( $requirement['wpep_max_score'] ) : 0;
109
110 switch( $requirement['trigger_type'] ) {
111
112 // Minimum grade events
113 case 'gamipress_wpep_complete_assessment_min_grade':
114 return sprintf( __( 'Completed an assessment with a score of %d or higher', 'gamipress' ), $score );
115 break;
116 case 'gamipress_wpep_complete_specific_assessment_min_grade':
117 $achievement_post_id = absint( $requirement['achievement_post'] );
118 return sprintf( __( 'Complete the assessment %s with a score of %d or higher', 'gamipress' ), get_the_title( $achievement_post_id ), $score );
119 break;
120
121 // Maximum grade events
122 case 'gamipress_wpep_complete_assessment_max_grade':
123 return sprintf( __( 'Completed an assessment with a maximum score of %d', 'gamipress' ), $score );
124 break;
125 case 'gamipress_wpep_complete_specific_assessment_max_grade':
126 $achievement_post_id = absint( $requirement['achievement_post'] );
127 return sprintf( __( 'Complete the assessment %s with a maximum score of %d', 'gamipress' ), get_the_title( $achievement_post_id ), $score );
128 break;
129
130 // Between grade events
131 case 'gamipress_wpep_complete_assessment_between_grade':
132 return sprintf( __( 'Completed an assessment with a score between %d and %d', 'gamipress' ), $min_score, $max_score );
133 break;
134 case 'gamipress_wpep_complete_specific_assessment_between_grade':
135 $achievement_post_id = absint( $requirement['achievement_post'] );
136 return sprintf( __( 'Complete the assessment %s with a score between %d and %d', 'gamipress' ), get_the_title( $achievement_post_id ), $min_score, $max_score );
137 break;
138
139 }
140
141 return $title;
142
143 }
144 add_filter( 'gamipress_activity_trigger_label', 'gamipress_wpep_activity_trigger_label', 10, 3 );
145
146 /**
147 * Register WPEP specific activity triggers labels
148 *
149 * @since 1.0.0
150 *
151 * @param array $specific_activity_trigger_labels
152 * @return array
153 */
154 function gamipress_wpep_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
155
156 // Assessments
157 $specific_activity_trigger_labels['gamipress_wpep_complete_specific_assessment'] = __( 'Complete the assessment %s', 'gamipress' );
158 $specific_activity_trigger_labels['gamipress_wpep_fail_specific_assessment'] = __( 'Fail the assessment %s', 'gamipress' );
159
160 // Lessons
161 $specific_activity_trigger_labels['gamipress_wpep_complete_specific_lesson'] = __( 'Complete the lesson %s', 'gamipress' );
162
163 // Courses
164 $specific_activity_trigger_labels['gamipress_wpep_complete_specific_course'] = __( 'Complete the course %s', 'gamipress' );
165
166 return $specific_activity_trigger_labels;
167 }
168 add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_wpep_specific_activity_trigger_label' );
169
170 /**
171 * Get WPEP specific activity trigger post title
172 *
173 * @since 1.0.0
174 *
175 * @param string $post_title
176 * @param integer $specific_id
177 * @param string $trigger_type
178 * @param int $site_id
179 * @return string
180 */
181 function gamipress_wpep_specific_activity_trigger_post_title( $post_title, $specific_id, $trigger_type, $site_id ) {
182
183 switch( $trigger_type ) {
184 case 'gamipress_wpep_complete_specific_lesson':
185 if( absint( $specific_id ) !== 0 ) {
186 $lesson = WPEP\Entity\Course::instance()->get_lesson( $specific_id );
187
188 $post_title = ( $lesson ? $lesson->title : '' );
189 }
190 break;
191 }
192
193 return $post_title;
194
195 }
196 add_filter( 'gamipress_specific_activity_trigger_post_title', 'gamipress_wpep_specific_activity_trigger_post_title', 10, 4 );
197
198 /**
199 * Get user for a given trigger action.
200 *
201 * @since 1.0.0
202 *
203 * @param integer $user_id user ID to override.
204 * @param string $trigger Trigger name.
205 * @param array $args Passed trigger args.
206 * @return integer User ID.
207 */
208 function gamipress_wpep_trigger_get_user_id( $user_id, $trigger, $args ) {
209
210 switch ( $trigger ) {
211 // Assessments
212 case 'gamipress_wpep_complete_assessment':
213 case 'gamipress_wpep_complete_specific_assessment':
214 case 'gamipress_wpep_fail_assessment':
215 case 'gamipress_wpep_fail_specific_assessment':
216 // Minimum grade
217 case 'gamipress_wpep_complete_assessment_min_grade':
218 case 'gamipress_wpep_complete_specific_assessment_min_grade':
219 // Maximum grade
220 case 'gamipress_wpep_complete_assessment_max_grade':
221 case 'gamipress_wpep_complete_specific_assessment_max_grade':
222 // Between grades
223 case 'gamipress_wpep_complete_assessment_between_grade':
224 case 'gamipress_wpep_complete_specific_assessment_between_grade':
225 // Lessons
226 case 'gamipress_wpep_complete_lesson':
227 case 'gamipress_wpep_complete_specific_lesson':
228 // Courses
229 case 'gamipress_wpep_complete_course':
230 case 'gamipress_wpep_complete_specific_course':
231 $user_id = $args[1];
232 break;
233 }
234
235 return $user_id;
236
237 }
238 add_filter( 'gamipress_trigger_get_user_id', 'gamipress_wpep_trigger_get_user_id', 10, 3 );
239
240 /**
241 * Get the id for a given specific trigger action.
242 *
243 * @since 1.0.0
244 *
245 * @param integer $specific_id Specific ID.
246 * @param string $trigger Trigger name.
247 * @param array $args Passed trigger args.
248 *
249 * @return integer Specific ID.
250 */
251 function gamipress_wpep_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
252
253 switch ( $trigger ) {
254 // Assessments
255 case 'gamipress_wpep_complete_specific_assessment':
256 case 'gamipress_wpep_fail_specific_assessment':
257 case 'gamipress_wpep_complete_specific_assessment_min_grade':
258 case 'gamipress_wpep_complete_specific_assessment_max_grade':
259 case 'gamipress_wpep_complete_specific_assessment_between_grade':
260 // Lessons
261 case 'gamipress_wpep_complete_specific_lesson':
262 // Assessments
263 case 'gamipress_wpep_complete_specific_course':
264 $specific_id = $args[0];
265 break;
266 }
267
268 return $specific_id;
269 }
270 add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_wpep_specific_trigger_get_id', 10, 3 );
271
272 /**
273 * Extended meta data for event trigger logging
274 *
275 * @since 1.0.0
276 *
277 * @param array $log_meta
278 * @param integer $user_id
279 * @param string $trigger
280 * @param integer $site_id
281 * @param array $args
282 *
283 * @return array
284 */
285 function gamipress_wpep_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
286
287 switch ( $trigger ) {
288
289 // Assessments
290 case 'gamipress_wpep_complete_assessment':
291 case 'gamipress_wpep_complete_specific_assessment':
292 case 'gamipress_wpep_fail_assessment':
293 case 'gamipress_wpep_fail_specific_assessment':
294 // Add the status, assessment, question and answer IDs
295 $log_meta['assessment_id'] = $args[0];
296 $log_meta['question_id'] = $args[2];
297 $log_meta['question_answer_id'] = $args[3];
298 $log_meta['status'] = $args[4];
299 break;
300 // Minimum grade
301 case 'gamipress_wpep_complete_assessment_min_grade':
302 case 'gamipress_wpep_complete_specific_assessment_min_grade':
303 // Maximum grade
304 case 'gamipress_wpep_complete_assessment_max_grade':
305 case 'gamipress_wpep_complete_specific_assessment_max_grade':
306 // Between grades
307 case 'gamipress_wpep_complete_assessment_between_grade':
308 case 'gamipress_wpep_complete_specific_assessment_between_grade':
309 // Add the score, assessment, question and answer IDs
310 $log_meta['assessment_id'] = $args[0];
311 $log_meta['question_id'] = $args[2];
312 $log_meta['question_answer_id'] = $args[3];
313 $log_meta['score'] = $args[4];
314 break;
315
316 // Lessons
317 case 'gamipress_wpep_complete_lesson':
318 case 'gamipress_wpep_complete_specific_lesson':
319 // Add the lesson and course IDs
320 $log_meta['lesson_id'] = $args[0];
321 $log_meta['course_id'] = $args[2];
322 break;
323
324 // Courses
325 case 'gamipress_wpep_complete_course':
326 case 'gamipress_wpep_complete_specific_course':
327 // Add the course ID
328 $log_meta['course_id'] = $args[0];
329 break;
330 }
331
332 return $log_meta;
333 }
334 add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_wpep_log_event_trigger_meta_data', 10, 5 );