PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.3
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.3
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / inc / admin / class-lp-reset-data.php

class-lp-reset-data.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7.3, at inc/admin/class-lp-reset-data.php

307 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 class LP_Reset_Data {
3 public static function init() {
4 $ajax_events = array(
5 'search-users',
6 'reset-user-courses' => 'ajax_reset_user_courses',
7 'reset-user-item' => 'ajax_reset_user_item',
8 );
9
10 foreach ( $ajax_events as $action => $callback ) {
11 if ( is_numeric( $action ) ) {
12 $action = $callback;
13 }
14
15 $actions = LP_Request::parse_action( $action );
16 $method = $actions['action'];
17
18 if ( ! is_callable( $callback ) ) {
19 $callback = array( __CLASS__, $callback );
20
21 if ( ! is_callable( $callback ) ) {
22 $method = preg_replace( '/-/', '_', $method );
23 $callback = array( __CLASS__, $method );
24 }
25 }
26 LP_Request::register_ajax( "rs-{$action}", $callback );
27 }
28 }
29
30 public static function ajax_reset_user_item() {
31 $user_id = LP_Request::get_string( 'user_id' );
32 $item_id = LP_Request::get_int( 'item_id' );
33
34 if ( ! is_numeric( $user_id ) ) {
35 $user_email = get_user_by( 'email', $user_id );
36 $user_login = get_user_by( 'login', $user_id );
37
38 if ( $user_email ) {
39 $user_id = $user_email->ID;
40 } elseif ( $user_login ) {
41 $user_id = $user_login->ID;
42 }
43 }
44
45 global $wpdb;
46
47 $query = $wpdb->prepare(
48 "
49 SELECT user_item_id
50 FROM {$wpdb->learnpress_user_items}
51 WHERE user_id = %d AND item_id = %d
52 ",
53 $user_id,
54 $item_id
55 );
56
57 $user_item_ids = $wpdb->get_col( $query );
58 if ( $user_item_ids ) {
59 $query = "
60 SELECT DISTINCT parent_id AS parent, item_id
61 FROM {$wpdb->learnpress_user_items}
62 WHERE user_item_id IN(" . join( ',', $user_item_ids ) . ')
63 ';
64 $parents = $wpdb->get_results( $query );
65
66 $format = array_fill( 0, sizeof( $user_item_ids ), '%d' );
67 $query = $wpdb->prepare(
68 "
69 DELETE
70 FROM {$wpdb->learnpress_user_itemmeta}
71 WHERE learnpress_user_item_id IN(" . join( ',', $format ) . ')
72 ',
73 $user_item_ids
74 );
75 $wpdb->query( $query );
76
77 $query = $wpdb->prepare(
78 "
79 DELETE
80 FROM {$wpdb->learnpress_user_items}
81 WHERE user_id = %d AND item_id = %d
82 ",
83 $user_id,
84 $item_id
85 );
86
87 $wpdb->query( $query );
88
89 if ( $parents ) {
90 foreach ( $parents as $parent ) {
91 $retaken_items = learn_press_get_user_item_meta( $parent->parent, '_retaken_items', true );
92 if ( $retaken_items ) {
93 if ( ! isset( $retaken_items[ $parent->item_id ] ) ) {
94 continue;
95 }
96
97 unset( $retaken_items[ $parent->item_id ] );
98 learn_press_update_user_item_meta( $parent->parent, '_retaken_items', $retaken_items );
99 }
100 }
101 }
102
103 echo __( 'Item progress is deleted', 'learnpress' );
104 } else {
105 echo __( 'No data found', 'learnpress' );
106 }
107 // LP_Debug::rollbackTransaction();
108 die();
109 }
110
111 public static function remove_item_data() {
112
113 }
114
115 public static function search_users() {
116 global $wpdb;
117
118 $s = LP_Request::get_string( 's' );
119 $query = $wpdb->prepare(
120 "
121 SELECT ID AS id, user_login AS username, user_email AS email, '' AS status
122 FROM {$wpdb->users}
123 WHERE user_login LIKE %s
124 OR user_email LIKE %s
125 ",
126 '%' . $wpdb->esc_like( $s ) . '%',
127 '%' . $wpdb->esc_like( $s ) . '%'
128 );
129
130 $users = array();
131
132 $rows = $wpdb->get_results( $query );
133 if ( $rows ) {
134 $user_ids = wp_list_pluck( $rows, 'id' );
135 $format = array_fill( 0, sizeof( $user_ids ), '%d' );
136 $args = $user_ids;
137 $args[] = LP_COURSE_CPT;
138 $query = $wpdb->prepare( "SELECT user_id, item_id FROM {$wpdb->learnpress_user_items} WHERE user_id IN(" . join( ',', $format ) . ') AND item_type = %s', $args );
139
140 $items = $wpdb->get_results( $query );
141 if ( $items ) {
142 $uids = wp_list_pluck( $items, 'user_id' );
143 for ( $n = sizeof( $rows ), $i = $n - 1; $i >= 0; $i -- ) {
144
145 if ( ! in_array( $rows[ $i ]->id, $uids ) ) {
146 unset( $rows[ $i ] );
147 continue;
148 }
149
150 if ( empty( $rows[ $i ]->courses ) ) {
151 $rows[ $i ]->courses = array();
152 }
153 foreach ( $items as $item ) {
154 if ( $item->user_id == $rows[ $i ]->id ) {
155 $rows[ $i ]->courses[ $item->item_id ] = array(
156 'url' => get_the_permalink( $item->item_id ),
157 'id' => $item->item_id,
158 'title' => get_the_title( $item->item_id ),
159 );
160 }
161 }
162 }
163 } else {
164 $rows = array();
165 }
166
167 if ( $rows ) {
168 foreach ( $rows as $k => $row ) {
169 $users[] = $row;
170 if ( sizeof( $users ) > 100 ) {
171 break;
172 }
173 }
174 }
175 }
176
177 learn_press_send_json( $users );
178 }
179
180 public static function ajax_reset_user_courses() {
181 $user_id = LP_Request::get_int( 'user_id' );
182 $course_id = LP_Request::get_int( 'course_id' );
183 $object_reset = LP_Request::get_string( 'object_reset' );
184 $user = learn_press_get_user( $user_id );
185 if ( ! current_user_can( 'administrator' ) ) {
186 return;
187 }
188 if ( $course_id && $object_reset == 'single' ) {
189 $user_course_data = $user->get_course_data( $course_id );
190 if ( ! $user_course_data ) {
191 return;
192 }
193
194 // Set status, start_time, end_time of course to enrol.
195 $user_course_data->set_status( LP_COURSE_ENROLLED )
196 ->set_start_time( time() )
197 ->set_end_time()
198 ->set_graduation( LP_COURSE_GRADUATION_IN_PROGRESS )
199 ->update();
200 // Remove items' course user learned.
201 $filter_remove = new LP_User_Items_Filter();
202 $filter_remove->parent_id = $user_course_data->get_user_item_id();
203 $filter_remove->user_id = $user_course_data->get_user_id();
204 $filter_remove->limit = - 1;
205 LP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );
206 }
207 if ( $object_reset == 'all' && $user_id ) {
208 global $wpdb;
209 $query = $wpdb->prepare(
210 "
211 SELECT item_id
212 FROM {$wpdb->learnpress_user_items}
213 WHERE user_id = %d AND item_type='lp_course'
214 ",
215 $user_id
216 );
217 $user_item_ids = $wpdb->get_col( $query );
218 if ( $user_item_ids ) {
219 foreach ( $user_item_ids as $user_item_id ) {
220 $course_id = $user_item_id;
221 $user_course_data = $user->get_course_data( $course_id );
222 if ( ! $user_course_data ) {
223 continue;
224 }
225
226 // Set status, start_time, end_time of course to enrolled.
227 $user_course_data->set_status( LP_COURSE_ENROLLED )
228 ->set_start_time( time() )
229 ->set_end_time()
230 ->set_graduation( LP_COURSE_GRADUATION_IN_PROGRESS )
231 ->update();
232 // Remove items' course user learned.
233 $filter_remove = new LP_User_Items_Filter();
234 $filter_remove->parent_id = $user_course_data->get_user_item_id();
235 $filter_remove->user_id = $user_course_data->get_user_id();
236 $filter_remove->limit = - 1;
237 LP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );
238 }
239 }
240 }
241
242 die();
243 }
244
245 public static function get_user_item_courses( $course_id, $user_id = 0 ) {
246 global $wpdb;
247
248 $where = '';
249 if ( $user_id ) {
250 $where = $wpdb->prepare( 'AND user_id = %d', $user_id );
251 }
252
253 $query = $wpdb->prepare(
254 "
255 SELECT *
256 FROM {$wpdb->learnpress_user_items}
257 WHERE item_type = %s
258 AND item_id = %d
259 $where
260 ",
261 LP_COURSE_CPT,
262 $course_id
263 );
264
265 echo "$query\n";
266
267 return $wpdb->get_results( $query );
268 }
269
270 public static function delete_user_items_by_id( $ids ) {
271 settype( $ids, 'array' );
272
273 global $wpdb;
274
275 // Delete meta
276 $format = array_fill( 0, sizeof( $ids ), '%d' );
277 $query = $wpdb->prepare( "DELETE FROM {$wpdb->learnpress_user_itemmeta} WHERE learnpress_user_item_id IN(" . join( ',', $format ) . ')', $ids );
278 $wpdb->query( $query );
279 echo "$query\n";
280
281 // Delete items
282 $query = $wpdb->prepare( "DELETE FROM {$wpdb->learnpress_user_items} WHERE user_item_id IN(" . join( ',', $format ) . ')', $ids );
283 $wpdb->query( $query );
284
285 echo "$query\n";
286
287 }
288
289 public static function get_user_items_by_parent( $parent_id ) {
290 global $wpdb;
291
292 $query = $wpdb->prepare(
293 "
294 SELECT *
295 FROM {$wpdb->learnpress_user_items}
296 WHERE parent_id = %d
297 ",
298 $parent_id
299 );
300
301 echo "$query\n";
302
303 return $wpdb->get_results( $query );
304 }
305 }
306 LP_Reset_Data::init();
307