← All changes
|
inc/rest-api/v1/admin/class-lp-admin-rest-reset-data-controller.php
+219
-219
4.3.9
→
4.4.9
View file →
| @@ -1,219 +1,219 @@ | ||
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Class LP_REST_Users_Controller | |
| 5 | - * in LearnPres > Tool | |
| 6 | - * | |
| 7 | - * @since 4.0.4 | |
| 8 | - * @author Nhamdv <[email protected]> | |
| 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_or_purchased(); | |
| 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', 1 ), | |
| 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 | -} | |
| 1 | +<?php | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * Class LP_REST_Users_Controller | |
| 5 | + * in LearnPres > Tool | |
| 6 | + * | |
| 7 | + * @since 4.0.4 | |
| 8 | + * @author Nhamdv <[email protected]> | |
| 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_or_purchased(); | |
| 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', 1 ), | |
| 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 | +} | |