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