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

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

390 lines 20.0 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 if( isset( $requirement['trigger_type'] )
255 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_grade'
256 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_grade'
257 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_grade'
258 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_grade'
259 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_grade'
260 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_max_grade'
261 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_max_grade'
262 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_max_grade'
263 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_max_grade'
264 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_max_grade'
265 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_grade'
266 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_grade'
267 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_max_grade'
268 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_max_grade' ) ) {
269
270 // Save the score field
271 update_post_meta( $requirement_id, '_gamipress_ld_score', $requirement['ld_score'] );
272
273 }
274
275 if( isset( $requirement['trigger_type'] )
276 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_between_grade'
277 || $requirement['trigger_type'] === 'gamipress_ld_complete_specific_quiz_between_grade'
278 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_specific_course_between_grade'
279 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_between_grade'
280 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_between_grade'
281 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_between_grade'
282 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_between_grade' ) ) {
283
284 // Between grade percent
285 update_post_meta( $requirement_id, '_gamipress_ld_min_score', $requirement['ld_min_score'] );
286 update_post_meta( $requirement_id, '_gamipress_ld_max_score', $requirement['ld_max_score'] );
287
288 }
289
290 if( isset( $requirement['trigger_type'] )
291 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category'
292 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_grade'
293 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_max_grade'
294 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_category_between_grade'
295 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_course_category'
296 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_course_category'
297 || $requirement['trigger_type'] === 'gamipress_ld_complete_topic_course_category'
298 || $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_course_category'
299 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_course_category'
300 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_course_category'
301 || $requirement['trigger_type'] === 'gamipress_ld_enroll_course_category'
302 || $requirement['trigger_type'] === 'gamipress_ld_complete_course_category' ) ) {
303
304 // Course category
305 update_post_meta( $requirement_id, '_gamipress_ld_course_category_id', $requirement['ld_course_category_id'] );
306
307 }
308
309 if( isset( $requirement['trigger_type'] )
310 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag'
311 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_grade'
312 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_max_grade'
313 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_course_tag_between_grade'
314 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_course_tag'
315 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_course_tag'
316 || $requirement['trigger_type'] === 'gamipress_ld_complete_topic_course_tag'
317 || $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_course_tag'
318 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_course_tag'
319 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_course_tag'
320 || $requirement['trigger_type'] === 'gamipress_ld_enroll_course_tag'
321 || $requirement['trigger_type'] === 'gamipress_ld_complete_course_tag' ) ) {
322
323 // Course tag
324 update_post_meta( $requirement_id, '_gamipress_ld_course_tag_id', $requirement['ld_course_tag_id'] );
325
326 }
327
328 if( isset( $requirement['trigger_type'] )
329 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_topic_category' ) ) {
330
331 // Topic category
332 update_post_meta( $requirement_id, '_gamipress_ld_topic_category_id', $requirement['ld_topic_category_id'] );
333
334 }
335
336 if( isset( $requirement['trigger_type'] )
337 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_topic_tag' ) ) {
338
339 // Topic tag
340 update_post_meta( $requirement_id, '_gamipress_ld_topic_tag_id', $requirement['ld_topic_tag_id'] );
341
342 }
343
344 if( isset( $requirement['trigger_type'] )
345 && ( $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_lesson_category'
346 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_lesson_category'
347 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_category' ) ) {
348
349 // Lesson category
350 update_post_meta( $requirement_id, '_gamipress_ld_lesson_category_id', $requirement['ld_lesson_category_id'] );
351
352 }
353
354 if( isset( $requirement['trigger_type'] )
355 && ( $requirement['trigger_type'] === 'gamipress_ld_assignment_upload_lesson_tag'
356 || $requirement['trigger_type'] === 'gamipress_ld_approve_assignment_lesson_tag'
357 || $requirement['trigger_type'] === 'gamipress_ld_complete_lesson_tag' ) ) {
358
359 // Lesson tag
360 update_post_meta( $requirement_id, '_gamipress_ld_lesson_tag_id', $requirement['ld_lesson_tag_id'] );
361
362 }
363
364 if( isset( $requirement['trigger_type'] )
365 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category'
366 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_category'
367 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_category'
368 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_grade'
369 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_max_grade'
370 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_category_between_grade' ) ) {
371
372 // Quiz category
373 update_post_meta( $requirement_id, '_gamipress_ld_quiz_category_id', $requirement['ld_quiz_category_id'] );
374
375 }
376
377 if( isset( $requirement['trigger_type'] )
378 && ( $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag'
379 || $requirement['trigger_type'] === 'gamipress_ld_pass_quiz_tag'
380 || $requirement['trigger_type'] === 'gamipress_ld_fail_quiz_tag'
381 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_grade'
382 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_max_grade'
383 || $requirement['trigger_type'] === 'gamipress_ld_complete_quiz_tag_between_grade' ) ) {
384
385 // Quiz category
386 update_post_meta( $requirement_id, '_gamipress_ld_quiz_tag_id', $requirement['ld_quiz_tag_id'] );
387
388 }
389 }
390 add_action( 'gamipress_ajax_update_requirement', 'gamipress_ld_ajax_update_requirement', 10, 2 );