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 / learndash / includes / requirements.php

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

404 lines 20.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Requirements
4 *
5 * @package GamiPress\LearnDash\Requirements
6 * @since 1.0.4
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Add the score field to the requirement object
14 *
15 * @param $requirement
16 * @param $requirement_id
17 *
18 * @return array
19 */
20 function gamipress_ld_requirement_object( $requirement, $requirement_id ) {
21
22 if( isset( $requirement['trigger_type'] )
23 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_grade'
24 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_grade'
25 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_grade'
26 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_grade'
27 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_grade'
28 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_max_grade'
29 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_max_grade'
30 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_max_grade'
31 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_max_grade'
32 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_max_grade'
33 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_grade'
34 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_grade'
35 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_max_grade'
36 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_max_grade' ) ) {
37
38 // Minimum/Maximum grade percent
39 $requirement['ld_score'] = get_post_meta( $requirement_id, '_gamipress_ld_score', true );
40
41 }
42
43 if( isset( $requirement['trigger_type'] )
44 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_between_grade'
45 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_between_grade'
46 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_between_grade'
47 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_between_grade'
48 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_between_grade'
49 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_between_grade'
50 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_between_grade' ) ) {
51
52 // Between grade percent
53 $requirement['ld_min_score'] = get_post_meta( $requirement_id, '_gamipress_ld_min_score', true );
54 $requirement['ld_max_score'] = get_post_meta( $requirement_id, '_gamipress_ld_max_score', true );
55
56 }
57
58 if( isset( $requirement['trigger_type'] )
59 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category'
60 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_grade'
61 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_max_grade'
62 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_between_grade'
63 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_course_category'
64 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_course_category'
65 || $requirement['trigger_type'] === 'gamipress_ld_complete_topic_course_category'
66 || $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_course_category'
67 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_course_category'
68 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_course_category'
69 || $requirement['trigger_type'] === 'gamipress_ld_enroll_course_category'
70 || $requirement['trigger_type'] === 'gamipress_ld_complete_course_category' ) ) {
71
72 // Course category
73 $requirement['ld_course_category_id'] = get_post_meta( $requirement_id, '_gamipress_ld_course_category_id', true );
74
75 }
76
77 if( isset( $requirement['trigger_type'] )
78 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag'
79 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_grade'
80 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_max_grade'
81 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_between_grade'
82 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_course_tag'
83 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_course_tag'
84 || $requirement['trigger_type'] === 'gamipress_ld_complete_topic_course_tag'
85 || $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_course_tag'
86 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_course_tag'
87 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_course_tag'
88 || $requirement['trigger_type'] === 'gamipress_ld_enroll_course_tag'
89 || $requirement['trigger_type'] === 'gamipress_ld_complete_course_tag' ) ) {
90
91 // Course tag
92 $requirement['ld_course_tag_id'] = get_post_meta( $requirement_id, '_gamipress_ld_course_tag_id', true );
93
94 }
95
96 if( isset( $requirement['trigger_type'] )
97 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_topic_category' ) ) {
98
99 // Topic category
100 $requirement['ld_topic_category_id'] = get_post_meta( $requirement_id, '_gamipress_ld_topic_category_id', true );
101
102 }
103
104 if( isset( $requirement['trigger_type'] )
105 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_topic_tag' ) ) {
106
107 // Topic tag
108 $requirement['ld_topic_tag_id'] = get_post_meta( $requirement_id, '_gamipress_ld_topic_tag_id', true );
109
110 }
111
112 if( isset( $requirement['trigger_type'] )
113 && ( $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_lesson_category'
114 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_lesson_category'
115 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_category' ) ) {
116
117 // Lesson category
118 $requirement['ld_lesson_category_id'] = get_post_meta( $requirement_id, '_gamipress_ld_lesson_category_id', true );
119
120 }
121
122 if( isset( $requirement['trigger_type'] )
123 && ( $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_lesson_tag'
124 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_lesson_tag'
125 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_tag' ) ) {
126
127 // Lesson tag
128 $requirement['ld_lesson_tag_id'] = get_post_meta( $requirement_id, '_gamipress_ld_lesson_tag_id', true );
129
130 }
131
132 if( isset( $requirement['trigger_type'] )
133 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category'
134 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_category'
135 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_category'
136 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_grade'
137 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_max_grade'
138 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_between_grade' ) ) {
139
140 // Quiz category
141 $requirement['ld_quiz_category_id'] = get_post_meta( $requirement_id, '_gamipress_ld_quiz_category_id', true );
142
143 }
144
145 if( isset( $requirement['trigger_type'] )
146 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag'
147 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_tag'
148 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_tag'
149 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_grade'
150 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_max_grade'
151 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_between_grade' ) ) {
152
153 // Quiz tag
154 $requirement['ld_quiz_tag_id'] = get_post_meta( $requirement_id, '_gamipress_ld_quiz_tag_id', true );
155
156 }
157
158 return $requirement;
159 }
160 add_filter( 'gamipress_requirement_object', 'gamipress_ld_requirement_object', 10, 2 );
161
162 /**
163 * Category field on requirements UI
164 *
165 * @param $requirement_id
166 * @param $post_id
167 */
168 function gamipress_ld_requirement_ui_fields( $requirement_id, $post_id ) {
169
170 $score = absint( get_post_meta( $requirement_id, '_gamipress_ld_score', true ) );
171 $min_score = get_post_meta( $requirement_id, '_gamipress_ld_min_score', true );
172 $max_score = get_post_meta( $requirement_id, '_gamipress_ld_max_score', true );
173 ?>
174
175 <span class="ld-quiz-score"><input type="text" value="<?php echo $score; ?>" size="3" maxlength="3" placeholder="100" />%</span>
176 <span class="ld-quiz-min-score"><input type="text" value="<?php echo ( ! empty( $min_score ) ? absint( $min_score ) : '' ); ?>" size="3" maxlength="3" placeholder="Min" />% -</span>
177 <span class="ld-quiz-max-score"><input type="text" value="<?php echo ( ! empty( $max_score ) ? absint( $max_score ) : '' ); ?>" size="3" maxlength="3" placeholder="Max" />%</span>
178
179 <?php
180
181 // Course taxonomy fields
182 gamipress_ld_taxonomy_fields( $requirement_id, 'course' );
183
184 // Topic taxonomy fields
185 gamipress_ld_taxonomy_fields( $requirement_id, 'topic' );
186
187 // Lesson taxonomy fields
188 gamipress_ld_taxonomy_fields( $requirement_id, 'lesson' );
189
190 // Quiz taxonomy fields
191 gamipress_ld_taxonomy_fields( $requirement_id, 'quiz' );
192 }
193 add_action( 'gamipress_requirement_ui_html_after_achievement_post', 'gamipress_ld_requirement_ui_fields', 10, 2 );
194
195 /**
196 * Helper function to generate the category and tag fields
197 *
198 * @param int $requirement_id
199 * @param string $element
200 */
201 function gamipress_ld_taxonomy_fields( $requirement_id, $element ) {
202
203 // Category select
204 $category_id = absint( gamipress_get_post_meta( $requirement_id, '_gamipress_ld_' . $element . '_category_id', true ) );
205 $categories = get_terms( array(
206 'taxonomy' => 'ld_' . $element . '_category',
207 'hide_empty' => false,
208 ) );
209
210 ?>
211
212 <span class="ld-<?php echo $element; ?>-category">
213 <select>
214 <?php if( is_array( $categories ) && count( $categories ) ) : ?>
215 <?php foreach( $categories as $category ) : ?>
216 <option value="<?php echo $category->term_id; ?>" <?php selected( $category_id, $category->term_id ); ?>><?php echo $category->name; ?></option>
217 <?php endforeach; ?>
218 <?php endif; ?>
219 </select>
220 </span>
221
222 <?php
223
224 // Tag select
225 $tag_id = absint( gamipress_get_post_meta( $requirement_id, '_gamipress_ld_' . $element . '_tag_id', true ) );
226 $tags = get_terms( array(
227 'taxonomy' => 'ld_' . $element . '_tag',
228 'hide_empty' => false,
229 ) );
230
231 ?>
232
233 <span class="ld-<?php echo $element; ?>-tag">
234 <select>
235 <?php if( is_array( $tags ) && count( $tags ) ) : ?>
236 <?php foreach( $tags as $tag ) : ?>
237 <option value="<?php echo $tag->term_id; ?>" <?php selected( $tag_id, $tag->term_id ); ?>><?php echo $tag->name; ?></option>
238 <?php endforeach; ?>
239 <?php endif; ?>
240 </select>
241 </span>
242
243 <?php
244 }
245
246 /**
247 * Custom handler to save the score on requirements UI
248 *
249 * @param $requirement_id
250 * @param $requirement
251 */
252 function gamipress_ld_ajax_update_requirement( $requirement_id, $requirement ) {
253
254 $requirement = wp_parse_args( $requirement, array(
255 'ld_score' => '',
256 'ld_min_score' => '',
257 'ld_max_score' => '',
258 'ld_course_category_id' => '',
259 'ld_course_tag_id' => '',
260 'ld_topic_category_id' => '',
261 'ld_topic_tag_id' => '',
262 'ld_lesson_category_id' => '',
263 'ld_lesson_tag_id' => '',
264 'ld_quiz_category_id' => '',
265 'ld_quiz_tag_id' => '',
266 ) );
267
268 if( isset( $requirement['trigger_type'] )
269 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_grade'
270 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_grade'
271 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_grade'
272 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_grade'
273 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_grade'
274 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_max_grade'
275 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_max_grade'
276 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_max_grade'
277 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_max_grade'
278 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_max_grade'
279 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_grade'
280 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_grade'
281 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_max_grade'
282 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_max_grade' ) ) {
283
284 // Save the score field
285 update_post_meta( $requirement_id, '_gamipress_ld_score', $requirement['ld_score'] );
286
287 }
288
289 if( isset( $requirement['trigger_type'] )
290 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_between_grade'
291 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_between_grade'
292 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_between_grade'
293 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_between_grade'
294 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_between_grade'
295 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_between_grade'
296 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_between_grade' ) ) {
297
298 // Between grade percent
299 update_post_meta( $requirement_id, '_gamipress_ld_min_score', $requirement['ld_min_score'] );
300 update_post_meta( $requirement_id, '_gamipress_ld_max_score', $requirement['ld_max_score'] );
301
302 }
303
304 if( isset( $requirement['trigger_type'] )
305 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category'
306 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_grade'
307 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_max_grade'
308 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_between_grade'
309 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_course_category'
310 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_course_category'
311 || $requirement['trigger_type'] === 'gamipress_ld_complete_topic_course_category'
312 || $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_course_category'
313 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_course_category'
314 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_course_category'
315 || $requirement['trigger_type'] === 'gamipress_ld_enroll_course_category'
316 || $requirement['trigger_type'] === 'gamipress_ld_complete_course_category' ) ) {
317
318 // Course category
319 update_post_meta( $requirement_id, '_gamipress_ld_course_category_id', $requirement['ld_course_category_id'] );
320
321 }
322
323 if( isset( $requirement['trigger_type'] )
324 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag'
325 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_grade'
326 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_max_grade'
327 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_between_grade'
328 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_course_tag'
329 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_course_tag'
330 || $requirement['trigger_type'] === 'gamipress_ld_complete_topic_course_tag'
331 || $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_course_tag'
332 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_course_tag'
333 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_course_tag'
334 || $requirement['trigger_type'] === 'gamipress_ld_enroll_course_tag'
335 || $requirement['trigger_type'] === 'gamipress_ld_complete_course_tag' ) ) {
336
337 // Course tag
338 update_post_meta( $requirement_id, '_gamipress_ld_course_tag_id', $requirement['ld_course_tag_id'] );
339
340 }
341
342 if( isset( $requirement['trigger_type'] )
343 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_topic_category' ) ) {
344
345 // Topic category
346 update_post_meta( $requirement_id, '_gamipress_ld_topic_category_id', $requirement['ld_topic_category_id'] );
347
348 }
349
350 if( isset( $requirement['trigger_type'] )
351 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_topic_tag' ) ) {
352
353 // Topic tag
354 update_post_meta( $requirement_id, '_gamipress_ld_topic_tag_id', $requirement['ld_topic_tag_id'] );
355
356 }
357
358 if( isset( $requirement['trigger_type'] )
359 && ( $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_lesson_category'
360 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_lesson_category'
361 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_category' ) ) {
362
363 // Lesson category
364 update_post_meta( $requirement_id, '_gamipress_ld_lesson_category_id', $requirement['ld_lesson_category_id'] );
365
366 }
367
368 if( isset( $requirement['trigger_type'] )
369 && ( $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_lesson_tag'
370 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_lesson_tag'
371 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_tag' ) ) {
372
373 // Lesson tag
374 update_post_meta( $requirement_id, '_gamipress_ld_lesson_tag_id', $requirement['ld_lesson_tag_id'] );
375
376 }
377
378 if( isset( $requirement['trigger_type'] )
379 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category'
380 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_category'
381 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_category'
382 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_grade'
383 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_max_grade'
384 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_between_grade' ) ) {
385
386 // Quiz category
387 update_post_meta( $requirement_id, '_gamipress_ld_quiz_category_id', $requirement['ld_quiz_category_id'] );
388
389 }
390
391 if( isset( $requirement['trigger_type'] )
392 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag'
393 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_tag'
394 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_tag'
395 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_grade'
396 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_max_grade'
397 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_between_grade' ) ) {
398
399 // Quiz category
400 update_post_meta( $requirement_id, '_gamipress_ld_quiz_tag_id', $requirement['ld_quiz_tag_id'] );
401
402 }
403 }
404 add_action( 'gamipress_ajax_update_requirement', 'gamipress_ld_ajax_update_requirement', 10, 2 );