PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.0.83
OttoKit: All-in-One Automation Platform v1.0.83
1.1.38 1.1.37 1.1.36 1.1.35 1.1.34 1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / learndash / actions / mark-course-complete-for-user.php
suretriggers / src / Integrations / learndash / actions Last commit date
add-user-group.php 3 years ago enroll-to-course.php 3 years ago find-course-taxonomy.php 1 year ago find-user-groups.php 1 year ago list-user-enrolled-courses.php 2 years ago make-user-group-leader.php 2 years ago mark-course-complete-for-user.php 3 years ago mark-lesson-complete-for-user.php 2 years ago mark-quiz-complete-for-user.php 2 years ago mark-topic-complete-for-user.php 2 years ago remove-from-course.php 3 years ago remove-user-from-group-leader.php 2 years ago remove-user-group.php 3 years ago reset-user-course-progress.php 2 years ago
mark-course-complete-for-user.php
268 lines
1 <?php
2 /**
3 * MarkCourseCompleteForUser.
4 * php version 5.6
5 *
6 * @category MarkCourseCompleteForUser
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\LearnDash\Actions;
15
16 use SureTriggers\Integrations\AutomateAction;
17 use SureTriggers\Integrations\LearnDash\LearnDash;
18 use SureTriggers\Traits\SingletonLoader;
19 use Exception;
20 use WP_Query;
21
22 /**
23 * MarkCourseCompleteForUser
24 *
25 * @category MarkCourseCompleteForUser
26 * @package SureTriggers
27 * @author BSF <username@example.com>
28 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
29 * @link https://www.brainstormforce.com/
30 * @since 1.0.0
31 */
32 class MarkCourseCompleteForUser extends AutomateAction {
33
34 /**
35 * Integration type.
36 *
37 * @var string
38 */
39 public $integration = 'LearnDash';
40 /**
41 * The quiz_list.
42 *
43 * @var array
44 */
45 private $quiz_list;
46 /**
47 * Action name.
48 *
49 * @var string
50 */
51 public $action = 'ld_mark_course_complete_for_user';
52
53 use SingletonLoader;
54
55 /**
56 * Register a action.
57 *
58 * @param array $actions actions.
59 * @return array
60 */
61 public function register( $actions ) {
62 $actions[ $this->integration ][ $this->action ] = [
63 'label' => __( 'Mark Course Complete For User', 'suretriggers' ),
64 'action' => $this->action,
65 'function' => [ $this, 'action_listener' ],
66 ];
67 return $actions;
68 }
69
70 /**
71 * Action listener.
72 *
73 * @param int $user_id user_id.
74 * @param int $automation_id automation_id.
75 * @param array $fields fields.
76 * @param array $selected_options selectedOptions.
77 * @psalm-suppress UndefinedMethod
78 * @throws Exception Error.
79 * @return bool|array
80 */
81 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
82 if ( ! function_exists( 'learndash_process_mark_complete' ) ) {
83 return false;
84 }
85 if ( ! $user_id ) {
86 throw new Exception( 'User email not exists.' );
87 }
88
89 $course_id = ( isset( $selected_options['sfwd-courses'] ) ) ? $selected_options['sfwd-courses'] : '0';
90
91 if ( 'all' === $course_id ) {
92
93 // Get all courses.
94 $query = new WP_Query(
95 [
96 'post_type' => 'sfwd-courses',
97 'post_status' => 'publish',
98 'fields' => 'ids',
99 'nopaging' => true, //phpcs:ignore
100 ]
101 );
102
103 $courses = $query->get_posts();
104 } else {
105
106 $course = get_post( (int) $course_id );
107 if ( ! $course ) {
108 throw new Exception( 'No course is available.' );
109 }
110
111 $courses = [ $course_id ];
112 }
113
114 $added_to_courses = [];
115
116 // Enroll user in courses.
117 $count = 1;
118 foreach ( $courses as $course_id ) {
119 self::mark_steps_done( $user_id, $course_id );
120 learndash_process_mark_complete( $user_id, $course_id );
121 $arr_key = count( $courses ) > 1 ? 'course_' . $count : 'course';
122 $added_to_courses[ $arr_key ] = LearnDash::get_course_pluggable_data( $course_id );
123 $count++;
124 }
125
126 $user_data = LearnDash::get_user_pluggable_data( $user_id );
127
128 return [
129 'user' => $user_data,
130 'courses' => $added_to_courses,
131 ];
132 }
133
134 /**
135 * Mark steps done
136 *
137 * @param int $user_id user id.
138 * @param int $course_id course id.
139 * @return void
140 */
141 public function mark_steps_done( $user_id, $course_id ) {
142 if ( ! function_exists( 'learndash_get_lesson_list' ) || ! function_exists( 'learndash_process_mark_complete' ) || ! function_exists( 'learndash_get_lesson_quiz_list' ) ) {
143 return;
144 }
145 $lessons = learndash_get_lesson_list( $course_id, [ 'num' => 0 ] );
146 foreach ( $lessons as $lesson ) {
147 self::mark_topics_done( $user_id, $lesson->ID, $course_id );
148 $lesson_quiz_list = learndash_get_lesson_quiz_list( $lesson->ID, $user_id, $course_id );
149
150 if ( $lesson_quiz_list ) {
151 foreach ( $lesson_quiz_list as $ql ) {
152 $this->quiz_list[ $ql['post']->ID ] = 0;
153 }
154 }
155
156 learndash_process_mark_complete( $user_id, $lesson->ID, false, $course_id );
157 }
158
159 self::mark_quiz_complete( $user_id, $course_id );
160 }
161
162 /**
163 * Marks topics done
164 *
165 * @param int $user_id User Id.
166 * @param int $lesson_id Lesson ID.
167 * @param int $course_id Course ID.
168 * @return void
169 */
170 public function mark_topics_done( $user_id, $lesson_id, $course_id ) {
171 if ( ! function_exists( 'learndash_get_topic_list' ) || ! function_exists( 'learndash_process_mark_complete' ) || ! function_exists( 'learndash_get_lesson_quiz_list' ) ) {
172 return;
173 }
174 $topic_list = learndash_get_topic_list( $lesson_id, $course_id );
175 if ( $topic_list ) {
176 foreach ( $topic_list as $topic ) {
177 learndash_process_mark_complete( $user_id, $topic->ID, false, $course_id );
178 $topic_quiz_list = learndash_get_lesson_quiz_list( $topic->ID, $user_id, $course_id );
179 if ( $topic_quiz_list ) {
180 foreach ( $topic_quiz_list as $ql ) {
181 $this->quiz_list[ $ql['post']->ID ] = 0;
182 }
183 }
184 }
185 }
186 }
187
188
189 /**
190 * Marks quiz complete
191 *
192 * @param int $user_id User ID.
193 * @param int $course_id Course ID.
194 * @return void
195 */
196 public function mark_quiz_complete( $user_id, $course_id = null ) {
197 if ( ! function_exists( 'learndash_get_course_quiz_list' ) || ! function_exists( 'learndash_is_quiz_complete' ) || ! function_exists( 'learndash_update_user_activity' ) ) {
198 return;
199 }
200 $quizzes = learndash_get_course_quiz_list( $course_id, $user_id );
201 if ( $quizzes ) {
202
203 foreach ( $quizzes as $quiz ) {
204 $this->quiz_list[ $quiz['post']->ID ] = 0;
205 }
206 }
207 $quizz_progress = [];
208 if ( ! empty( $this->quiz_list ) ) {
209
210 $usermeta = get_user_meta( $user_id, '_sfwd-quizzes', true );
211 $quizz_progress = (array) ( empty( $usermeta ) ? [] : $usermeta );
212
213 foreach ( $this->quiz_list as $quiz_id => $quiz ) {
214 $quiz_meta = (array) get_post_meta( $quiz_id, '_sfwd-quiz', true );
215
216 if ( learndash_is_quiz_complete( $user_id, $quiz_id, $course_id ) ) {
217 continue;
218 }
219
220 $quizdata = [
221 'quiz' => $quiz_id,
222 'score' => 0,
223 'count' => 0,
224 'pass' => true,
225 'rank' => '-',
226 'time' => time(),
227 'pro_quizid' => $quiz_meta['sfwd-quiz_quiz_pro'],
228 'course' => $course_id,
229 'points' => 0,
230 'total_points' => 0,
231 'percentage' => 100,
232 'timespent' => 0,
233 'has_graded' => false,
234 'statistic_ref_id' => 0,
235 'm_edit_by' => 9999999, // Manual Edit By ID.
236 'm_edit_time' => time(),
237 // Manual Edit timestamp.
238 ];
239
240 $quizz_progress[] = $quizdata;
241
242 // Then we add the quiz entry to the activity database.
243 learndash_update_user_activity(
244 [
245 'course_id' => $course_id,
246 'user_id' => $user_id,
247 'post_id' => $quiz_id,
248 'activity_type' => 'quiz',
249 'activity_action' => 'insert',
250 'activity_status' => true,
251 'activity_started' => $quizdata['time'],
252 'activity_completed' => $quizdata['time'],
253 'activity_meta' => $quizdata,
254 ]
255 );
256
257 }
258 }
259
260 if ( ! empty( $quizz_progress ) ) {
261 update_user_meta( $user_id, '_sfwd-quizzes', $quizz_progress );
262 }
263 }
264
265 }
266
267 MarkCourseCompleteForUser::get_instance();
268