PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.0.42
OttoKit: All-in-One Automation Platform v1.0.42
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 / masterstudy-lms / actions / unrolluserfromcourse.php
suretriggers / src / Integrations / masterstudy-lms / actions Last commit date
enrollusertocourse.php 3 years ago markcoursecompleteforuser.php 3 years ago marklessoncompleteforuser.php 3 years ago unrolluserfromcourse.php 3 years ago
unrolluserfromcourse.php
239 lines
1 <?php
2 /**
3 * UnrollUserFromCourse.
4 * php version 5.6
5 *
6 * @category UnrollUserFromCourse
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 use SureTriggers\Integrations\AutomateAction;
15 use SureTriggers\Traits\SingletonLoader;
16
17 /**
18 * UnrollUserFromCourse
19 *
20 * @category UnrollUserFromCourse
21 * @package SureTriggers
22 * @author BSF <username@example.com>
23 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
24 * @link https://www.brainstormforce.com/
25 * @since 1.0.0
26 */
27 class UnrollUserFromCourse extends AutomateAction {
28
29 /**
30 * Integration type.
31 *
32 * @var string
33 */
34 public $integration = 'MasterStudyLms';
35
36 /**
37 * Action name.
38 *
39 * @var string
40 */
41 public $action = 'unroll_user_from_course';
42
43 use SingletonLoader;
44
45 /**
46 * Register a action.
47 *
48 * @param array $actions actions.
49 * @return array
50 */
51 public function register( $actions ) {
52 $actions[ $this->integration ][ $this->action ] = [
53 'label' => __( 'Unroll User From Course', 'suretriggers' ),
54 'action' => $this->action,
55 'function' => [ $this, 'action_listener' ],
56 ];
57 return $actions;
58 }
59
60 /**
61 * Action listener.
62 *
63 * @param int $user_id user_id.
64 * @param int $automation_id automation_id.
65 * @param array $fields fields.
66 * @param array $selected_options selectedOptions.
67 * @psalm-suppress UndefinedMethod
68 * @throws Exception Exception.
69 *
70 * @return array|bool|void
71 */
72 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
73 $course_id = $selected_options['course'];
74 $user_id = $selected_options['wp_user_email'];
75
76 if ( is_email( $user_id ) ) {
77 $user = get_user_by( 'email', $user_id );
78
79 if ( $user ) {
80 $user_id = $user->ID;
81 $fields['user_id'] = $user_id;
82 } else {
83 // If there's no user found, return default message.
84 $error = [
85 'status' => esc_attr__( 'Error', 'suretriggers' ),
86 'response' => esc_attr__( 'User with the email provided not found.', 'suretriggers' ),
87 ];
88 return $error;
89 }
90 } else {
91 $error = [
92 'status' => esc_attr__( 'Error', 'suretriggers' ),
93 'response' => esc_attr__( 'Please enter valid email address.', 'suretriggers' ),
94 ];
95
96 return $error;
97 }
98
99 // Enroll the user in the course if they are not already enrolled.
100 if ( function_exists( 'stm_lms_get_user_course' ) ) {
101 $course = stm_lms_get_user_course( $user_id, $course_id, [ 'user_course_id' ] );
102
103 if ( ! empty( $course ) && ! count( $course ) ) {
104 $response = [
105 'status' => esc_attr__( 'Success', 'suretriggers' ),
106 'response' => esc_attr__( 'User not enrolled into this course.', 'suretriggers' ),
107 ];
108 } else {
109 // Reset the user's progress.
110 // Get the lessons and lesson associated with the course.
111 $curriculum = get_post_meta( $course_id, 'curriculum', true );
112
113 if ( ! empty( $curriculum ) ) {
114 // Convert the curriculum to an array of numbers.
115 if ( class_exists( '\STM_LMS_Helpers' ) ) {
116 /**
117 * Ignoring next line
118 *
119 * @phpstan-ignore-next-line
120 * */
121 $curriculum_items = \STM_LMS_Helpers::only_array_numbers( explode( ',', $curriculum ) );
122
123 // Get all lessons associated with the curriculum.
124 $curriculum_posts = get_posts(
125 [
126 'post__in' => $curriculum_items,
127 'posts_per_page' => 100,
128 'post_type' => [ 'stm-lessons', 'stm-quizzes', 'stm-assignments' ],
129 'post_status' => 'publish',
130 ]
131 );
132 }
133
134 if ( ! empty( $curriculum_posts ) ) {
135
136 foreach ( $curriculum_posts as $post_object ) {
137
138 $post_type = get_post_type( $post_object );
139
140 if ( 'stm-lessons' === $post_object->post_type ) {
141 // Reset lesson progress.
142 if ( function_exists( 'stm_lms_delete_user_lesson' ) ) {
143 stm_lms_delete_user_lesson( $user_id, $course_id, $post_object->ID );
144 }
145 }
146
147 if ( 'stm-assignments' === $post_object->post_type ) {
148 // Reset assignment progress.
149 $args = [
150 'posts_per_page' => - 1,
151 'post_type' => 'stm-user-assignment',
152 'post_status' => [
153 'pending',
154 'publish',
155 'draft',
156 ],
157 'meta_query' => [
158 'relation' => 'AND',
159 [
160 'key' => 'course_id',
161 'value' => $course_id,
162 'compare' => '=',
163 ],
164 [
165 'key' => 'assignment_id',
166 'value' => $post_object->ID,
167 'compare' => '=',
168 ],
169 [
170 'key' => 'student_id',
171 'value' => $user_id,
172 'compare' => '=',
173 ],
174 ],
175 ];
176 $q = new WP_Query( $args );
177 if ( $q->have_posts() ) {
178 while ( $q->have_posts() ) {
179 $q->the_post();
180 wp_delete_post( intval( get_the_ID() ) );
181 }
182 }
183 }
184
185 if ( 'stm-quizzes' === $post_object->post_type ) {
186 // Reset quiz progress.
187 if ( function_exists( 'stm_lms_delete_user_quiz' ) ) {
188 stm_lms_delete_user_quiz( $user_id, $course_id, $post_object->ID );
189 }
190 }
191
192 // Reset the user answers.
193 if ( function_exists( 'stm_lms_reset_user_answers' ) ) {
194 stm_lms_reset_user_answers( $course_id, $user_id );
195 }
196
197 // Update course progress.
198 if ( class_exists( '\STM_LMS_Course' ) ) {
199 \STM_LMS_Course::update_course_progress( $user_id, $course_id );
200 }
201 }
202
203 // Set the success response.
204 $response = [
205 'status' => esc_attr__( 'Success', 'suretriggers' ),
206 'response' => esc_attr__( 'User progress reset successfully.', 'suretriggers' ),
207 ];
208 }
209 } else {
210 // If there's no response, return an error message.
211 $error =
212 [
213 'status' => esc_attr__( 'Error', 'suretriggers' ),
214 'response' => esc_attr__( 'Something went wrong. Please check the action step configuration.', 'suretriggers' ),
215 ];
216 return $error;
217 }
218
219 // Unroll the user from the course.
220 if ( function_exists( 'stm_lms_get_delete_user_course' ) ) {
221 stm_lms_get_delete_user_course( $user_id, $course_id );
222 }
223 if ( class_exists( '\STM_LMS_Course' ) ) {
224 \STM_LMS_Course::remove_student( $course_id );
225 }
226
227 $response = [
228 'status' => esc_attr__( 'Success', 'suretriggers' ),
229 'response' => esc_attr__( 'User unrolled from course successfully.', 'suretriggers' ),
230 ];
231 }
232
233 return $response;
234 }
235 }
236 }
237
238 UnrollUserFromCourse::get_instance();
239