PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.36
OttoKit: All-in-One Automation Platform v1.1.36
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-lesson-complete-for-user.php
suretriggers / src / Integrations / learndash / actions Last commit date
add-user-group.php 11 months ago enroll-to-course.php 11 months ago find-course-taxonomy.php 11 months ago find-user-group-leader-groups.php 5 months ago find-user-groups.php 11 months ago list-user-enrolled-courses.php 11 months ago make-user-group-leader.php 2 years ago mark-course-complete-for-user.php 11 months ago mark-lesson-complete-for-user.php 11 months ago mark-quiz-complete-for-user.php 11 months ago mark-topic-complete-for-user.php 11 months ago remove-from-course.php 11 months ago remove-user-from-group-leader.php 11 months ago remove-user-group.php 11 months ago reset-user-course-progress.php 11 months ago
mark-lesson-complete-for-user.php
254 lines
1 <?php
2 /**
3 * MarkLessonCompleteForUser.
4 * php version 5.6
5 *
6 * @category MarkLessonCompleteForUser
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 * MarkLessonCompleteForUser
24 *
25 * @category MarkLessonCompleteForUser
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 MarkLessonCompleteForUser 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_lesson_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 Lesson 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 return [
87 'status' => 'error',
88 'message' => 'User email not exists.',
89 ];
90 }
91
92 $course_id = $selected_options['sfwd-courses'];
93 $lesson_id = $selected_options['sfwd-lessons'];
94 self::mark_steps_done( $user_id, $lesson_id, $course_id );
95
96 $user_data = LearnDash::get_user_pluggable_data( $user_id );
97 $lesson = get_post( (int) $lesson_id, ARRAY_A );
98 $lesson_data = [];
99 if ( is_array( $lesson ) ) {
100 $lesson_data = [
101 'ID' => $lesson['ID'],
102 'title' => $lesson['post_title'],
103 'URL' => get_permalink( $lesson['ID'] ),
104 'status' => $lesson['post_status'],
105 'featured_image_id' => get_post_meta( $lesson['ID'], '_thumbnail_id', true ),
106 'featured_image_url' => get_the_post_thumbnail_url( $lesson['ID'] ),
107 ];
108 }
109 return [
110 'user' => $user_data,
111 'course' => LearnDash::get_course_pluggable_data( $course_id ),
112 'lesson' => $lesson_data,
113 ];
114 }
115
116 /**
117 * Mark steps done
118 *
119 * @param int $user_id user id.
120 * @param int $lesson_id lesson id.
121 * @param int $course_id course id.
122 * @return array|void
123 */
124 public function mark_steps_done( $user_id, $lesson_id, $course_id ) {
125 if ( ! function_exists( 'learndash_get_lesson_list' ) || ! function_exists( 'learndash_process_mark_complete' ) || ! function_exists( 'learndash_get_lesson_quiz_list' ) ) {
126 return [
127 'status' => 'error',
128 'message' => __( 'Required functions not found.', 'suretriggers' ),
129
130 ];
131 }
132
133 self::mark_topics_done( $user_id, $lesson_id, $course_id );
134 $lesson_quiz_list = learndash_get_lesson_quiz_list( $lesson_id, $user_id, $course_id );
135
136 if ( ! empty( $lesson_quiz_list ) ) {
137 foreach ( $lesson_quiz_list as $ql ) {
138 $this->quiz_list[ $ql['post']->ID ] = 0;
139 }
140 self::mark_quiz_complete( $user_id, $course_id );
141 }
142
143 learndash_process_mark_complete( $user_id, $lesson_id, false, $course_id );
144 }
145
146 /**
147 * Marks topics done
148 *
149 * @param int $user_id User Id.
150 * @param int $lesson_id Lesson ID.
151 * @param int $course_id Course ID.
152 * @return array|void
153 */
154 public function mark_topics_done( $user_id, $lesson_id, $course_id ) {
155 if ( ! function_exists( 'learndash_get_topic_list' ) || ! function_exists( 'learndash_process_mark_complete' ) || ! function_exists( 'learndash_get_lesson_quiz_list' ) ) {
156 return [
157 'status' => 'error',
158 'message' => __( 'Required functions not found.', 'suretriggers' ),
159
160 ];
161 }
162 $topic_list = learndash_get_topic_list( $lesson_id, $course_id );
163 if ( ! empty( $topic_list ) ) {
164 foreach ( $topic_list as $topic ) {
165 learndash_process_mark_complete( $user_id, $topic->ID, false, $course_id );
166 $topic_quiz_list = learndash_get_lesson_quiz_list( $topic->ID, $user_id, $course_id );
167 if ( $topic_quiz_list ) {
168 foreach ( $topic_quiz_list as $ql ) {
169 $this->quiz_list[ $ql['post']->ID ] = 0;
170 }
171 }
172 }
173 }
174 }
175
176
177 /**
178 * Marks quiz complete
179 *
180 * @param int $user_id User ID.
181 * @param int $course_id Course ID.
182 * @return array|void
183 */
184 public function mark_quiz_complete( $user_id, $course_id = null ) {
185 if ( ! function_exists( 'learndash_get_course_quiz_list' ) || ! function_exists( 'learndash_is_quiz_complete' ) || ! function_exists( 'learndash_update_user_activity' ) ) {
186 return [
187 'status' => 'error',
188 'message' => __( 'Required functions not found.', 'suretriggers' ),
189
190 ];
191 }
192
193 $quizz_progress = [];
194 if ( ! empty( $this->quiz_list ) ) {
195
196 $usermeta = get_user_meta( $user_id, '_sfwd-quizzes', true );
197 $quizz_progress = (array) ( empty( $usermeta ) ? [] : $usermeta );
198
199 foreach ( $this->quiz_list as $quiz_id => $quiz ) {
200 $quiz_meta = (array) get_post_meta( $quiz_id, '_sfwd-quiz', true );
201
202 if ( learndash_is_quiz_complete( $user_id, $quiz_id, $course_id ) ) {
203 continue;
204 }
205
206 $quizdata = [
207 'quiz' => $quiz_id,
208 'score' => 0,
209 'count' => 0,
210 'pass' => true,
211 'rank' => '-',
212 'time' => time(),
213 'pro_quizid' => $quiz_meta['sfwd-quiz_quiz_pro'],
214 'course' => $course_id,
215 'points' => 0,
216 'total_points' => 0,
217 'percentage' => 100,
218 'timespent' => 0,
219 'has_graded' => false,
220 'statistic_ref_id' => 0,
221 'm_edit_by' => 9999999, // Manual Edit By ID.
222 'm_edit_time' => time(),
223 // Manual Edit timestamp.
224 ];
225
226 $quizz_progress[] = $quizdata;
227
228 // Then we add the quiz entry to the activity database.
229 learndash_update_user_activity(
230 [
231 'course_id' => $course_id,
232 'user_id' => $user_id,
233 'post_id' => $quiz_id,
234 'activity_type' => 'quiz',
235 'activity_action' => 'insert',
236 'activity_status' => true,
237 'activity_started' => $quizdata['time'],
238 'activity_completed' => $quizdata['time'],
239 'activity_meta' => $quizdata,
240 ]
241 );
242
243 }
244 }
245
246 if ( ! empty( $quizz_progress ) ) {
247 update_user_meta( $user_id, '_sfwd-quizzes', $quizz_progress );
248 }
249 }
250
251 }
252
253 MarkLessonCompleteForUser::get_instance();
254