PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.2
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.2
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 / rest-api / v1 / admin / class-lp-admin-rest-reset-data-controller.php

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

220 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class LP_REST_Users_Controller
5 * in LearnPres > Tool
6 *
7 * @since 4.0.4
8 * @author Nhamdv <email@email.com>
9 */
10 class LP_REST_Admin_Reset_Data_Controller extends LP_Abstract_REST_Controller {
11
12 public function __construct() {
13 $this->namespace = 'lp/v1/admin/tools';
14 $this->rest_base = 'reset-data';
15
16 parent::__construct();
17 }
18
19 /**
20 * Register rest routes.
21 */
22 public function register_routes() {
23 $this->routes = array(
24 'search-courses' => array(
25 array(
26 'methods' => WP_REST_Server::READABLE,
27 'callback' => array( $this, 'search_courses' ),
28 'permission_callback' => array( $this, 'check_admin_permission' ),
29 ),
30 ),
31 'reset-courses' => array(
32 array(
33 'methods' => WP_REST_Server::READABLE,
34 'callback' => array( $this, 'reset_courses' ),
35 'permission_callback' => array( $this, 'check_admin_permission' ),
36 ),
37 ),
38 );
39
40 parent::register_routes();
41 }
42
43 public function check_admin_permission() {
44 return LP_Abstract_API::check_admin_permission();
45 }
46
47 /**
48 * Search Course for Reset Course
49 *
50 * @param WP_REST_Request $request
51 * @return void
52 */
53 public function search_courses( $request ) {
54 $params = $request->get_params();
55 $s = ! empty( $params['s'] ) ? $params['s'] : '';
56
57 // Response.
58 $response = new LP_REST_Response();
59 $response->data = '';
60
61 try {
62 global $wpdb;
63
64 $query = $wpdb->prepare(
65 "SELECT ID as id, post_title AS title, 'students', '' AS status
66 FROM {$wpdb->posts}
67 WHERE post_type = %s AND post_title LIKE %s",
68 LP_COURSE_CPT,
69 '%' . $wpdb->esc_like( $s ) . '%'
70 );
71
72 $courses = array();
73 $rows = $wpdb->get_results( $query );
74
75 if ( $rows ) {
76 $course_ids = wp_list_pluck( $rows, 'id' );
77 $format = array_fill( 0, count( $course_ids ), '%d' );
78 $args = $course_ids;
79 $args[] = LP_COURSE_CPT;
80 $query = $wpdb->prepare( "SELECT item_id FROM {$wpdb->learnpress_user_items} WHERE item_id IN(" . implode( ',', $format ) . ') AND item_type = %s', $args );
81
82 $item_ids = $wpdb->get_col( $query );
83
84 if ( $item_ids ) {
85 for ( $n = count( $rows ), $i = $n - 1; $i >= 0; $i -- ) {
86 if ( ! in_array( $rows[ $i ]->id, $item_ids ) ) {
87 unset( $rows[ $i ] );
88 }
89 }
90 } else {
91 throw new Exception( esc_html__( 'No items available!', 'learnpress' ) );
92 }
93
94 if ( $rows ) {
95 foreach ( $rows as $k => $row ) {
96 $course = learn_press_get_course( $row->id );
97 $row->students = $course->get_total_user_enrolled();
98
99 if ( $row->students ) {
100 $courses[] = $row;
101 }
102 }
103 }
104 } else {
105 throw new Exception( esc_html__( 'No courses available!', 'learnpress' ) );
106 }
107
108 $response->status = 'success';
109 $response->data = $courses;
110 } catch ( Exception $e ) {
111 $response->message = $e->getMessage();
112 }
113
114 return rest_ensure_response( $response );
115 }
116
117 /**
118 * Get Final Quiz in Course Settings.
119 *
120 * @return void
121 */
122 public function reset_courses( WP_REST_Request $request ) {
123 $params = $request->get_params();
124 $course_id = isset( $params['courseId'] ) ? $params['courseId'] : false;
125
126 // Responsive.
127 $response = new LP_REST_Response();
128 $response->data = '';
129
130 try {
131 if ( empty( $course_id ) ) {
132 throw new Exception( esc_html__( 'No course ID available', 'learnpress' ) );
133 }
134
135 global $wpdb;
136
137 // GET list user_item_id child of parent course ids.
138 $child_user_item_ids = $wpdb->get_col(
139 $wpdb->prepare(
140 "SELECT user_item_id FROM $wpdb->learnpress_user_items
141 WHERE ref_id=%d
142 ",
143 $course_id
144 )
145 );
146
147 // DELETE course_item ( lesson, quiz ) by course id in table user_items.
148 $wpdb->delete(
149 $wpdb->learnpress_user_items,
150 array(
151 'ref_id' => $course_id,
152 ),
153 array( '%d' )
154 );
155
156 // DELETE user_itemmeta for ( lesson, quiz... )
157 if ( ! empty( $child_user_item_ids ) ) {
158 foreach ( $child_user_item_ids as $child_user_item_id ) {
159 $wpdb->delete(
160 $wpdb->learnpress_user_itemmeta,
161 array(
162 'learnpress_user_item_id' => absint( $child_user_item_id ),
163 ),
164 array( '%d' )
165 );
166
167 LP_User_Items_Result_DB::instance()->delete( absint( $child_user_item_id ) );
168 }
169 }
170
171 // Change status, graduation... by course id
172 $wpdb->update(
173 $wpdb->learnpress_user_items,
174 array(
175 'status' => LP_COURSE_ENROLLED,
176 'graduation' => 'in-progress',
177 'start_time' => current_time( 'mysql', true ),
178 'end_time' => null,
179 ),
180 array(
181 'item_id' => $course_id,
182 ),
183 array( '%s', '%s', '%s', null ),
184 array( '%d' )
185 );
186
187 // GET all user_item_ids by course ids
188 $user_item_ids = $wpdb->get_col(
189 $wpdb->prepare(
190 "SELECT user_item_id FROM $wpdb->learnpress_user_items
191 WHERE item_id=%d
192 ",
193 $course_id
194 )
195 );
196
197 // DELETE user_itemmeta course by course id.
198 if ( ! empty( $user_item_ids ) ) {
199 foreach ( $user_item_ids as $user_item_id ) {
200 $wpdb->delete(
201 $wpdb->learnpress_user_itemmeta,
202 array(
203 'learnpress_user_item_id' => absint( $user_item_id ),
204 ),
205 array( '%d' )
206 );
207
208 LP_User_Items_Result_DB::instance()->delete( absint( $user_item_id ) );
209 }
210 }
211
212 $response->status = 'success';
213 } catch ( Exception $e ) {
214 $response->message = $e->getMessage();
215 }
216
217 return rest_ensure_response( $response );
218 }
219 }
220