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/learndash/includes/requirements.php +404 -0 7.9.4 → 8.0.5 View file →
@@ -1,0 +1,404 @@
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 );