PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7
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 4.2.1 All 138 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, at inc/admin/class-lp-reset-data.php

301 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 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
191 // Set status, start_time, end_time of course to enrolled.
192 $user_course_data->set_status( LP_COURSE_ENROLLED )
193 ->set_start_time( current_time( 'mysql', true ) )
194 ->set_end_time( '' )
195 ->set_graduation( 'in-progress' )
196 ->update();
197 // Remove items' course user learned.
198 $filter_remove = new LP_User_Items_Filter();
199 $filter_remove->parent_id = $user_course_data->get_user_item_id();
200 $filter_remove->user_id = $user_course_data->get_user_id();
201 $filter_remove->limit = - 1;
202 LP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );
203 }
204 if ( $object_reset == 'all' && $user_id ) {
205 global $wpdb;
206 $query = $wpdb->prepare(
207 "
208 SELECT item_id
209 FROM {$wpdb->learnpress_user_items}
210 WHERE user_id = %d AND item_type='lp_course'
211 ",
212 $user_id
213 );
214 $user_item_ids = $wpdb->get_col( $query );
215 if ( $user_item_ids ) {
216 foreach ( $user_item_ids as $user_item_id ) {
217 $course_id = $user_item_id;
218 $user_course_data = $user->get_course_data( $course_id );
219
220 // Set status, start_time, end_time of course to enrolled.
221 $user_course_data->set_status( LP_COURSE_ENROLLED )
222 ->set_start_time( current_time( 'mysql', true ) )
223 ->set_end_time( '' )
224 ->set_graduation( 'in-progress' )
225 ->update();
226 // Remove items' course user learned.
227 $filter_remove = new LP_User_Items_Filter();
228 $filter_remove->parent_id = $user_course_data->get_user_item_id();
229 $filter_remove->user_id = $user_course_data->get_user_id();
230 $filter_remove->limit = - 1;
231 LP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );
232 }
233 }
234 }
235
236 die();
237 }
238
239 public static function get_user_item_courses( $course_id, $user_id = 0 ) {
240 global $wpdb;
241
242 $where = '';
243 if ( $user_id ) {
244 $where = $wpdb->prepare( 'AND user_id = %d', $user_id );
245 }
246
247 $query = $wpdb->prepare(
248 "
249 SELECT *
250 FROM {$wpdb->learnpress_user_items}
251 WHERE item_type = %s
252 AND item_id = %d
253 $where
254 ",
255 LP_COURSE_CPT,
256 $course_id
257 );
258
259 echo "$query\n";
260
261 return $wpdb->get_results( $query );
262 }
263
264 public static function delete_user_items_by_id( $ids ) {
265 settype( $ids, 'array' );
266
267 global $wpdb;
268
269 // Delete meta
270 $format = array_fill( 0, sizeof( $ids ), '%d' );
271 $query = $wpdb->prepare( "DELETE FROM {$wpdb->learnpress_user_itemmeta} WHERE learnpress_user_item_id IN(" . join( ',', $format ) . ')', $ids );
272 $wpdb->query( $query );
273 echo "$query\n";
274
275 // Delete items
276 $query = $wpdb->prepare( "DELETE FROM {$wpdb->learnpress_user_items} WHERE user_item_id IN(" . join( ',', $format ) . ')', $ids );
277 $wpdb->query( $query );
278
279 echo "$query\n";
280
281 }
282
283 public static function get_user_items_by_parent( $parent_id ) {
284 global $wpdb;
285
286 $query = $wpdb->prepare(
287 "
288 SELECT *
289 FROM {$wpdb->learnpress_user_items}
290 WHERE parent_id = %d
291 ",
292 $parent_id
293 );
294
295 echo "$query\n";
296
297 return $wpdb->get_results( $query );
298 }
299 }
300 LP_Reset_Data::init();
301