plugin_name = $plugin_name; $this->version = $version; $this->db_manager = QDR_TSS_DB_Manager::instance(); $this->file_manager = QDR_TSS_File_Manager::instance(); } /** * Register the REST API routes. * * @since 1.0.0 */ public function register_routes() { register_rest_route($this->namespace, '/' . $this->base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'get_items'), 'permission_callback' => array($this, 'check_permission'), ), )); register_rest_route($this->namespace, '/' . $this->base . '/(?P[\w]+)', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'get_item'), 'permission_callback' => array($this, 'check_permission'), ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array($this, 'update_item'), 'permission_callback' => array($this, 'check_permission'), ), array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array($this, 'delete_item'), 'permission_callback' => array($this, 'check_permission'), ), )); } /** * Check permission for REST API requests. * * @since 1.0.0 * @return bool True if authorized, false otherwise. */ public function check_permission() { $rest_controller = new QDR_TSS_REST_Controller($this->plugin_name, $this->version); return $rest_controller->check_rest_permission(); } /** * Get a collection of items. * * @since 1.0.0 * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items($request) { $args = array( 'per_page' => isset($request['per_page']) ? (int) $request['per_page'] : 10, 'page' => isset($request['page']) ? (int) $request['page'] : 1, 'orderby' => isset($request['orderby']) ? $request['orderby'] : 'upload_date', 'order' => isset($request['order']) ? $request['order'] : 'DESC', 'original_file_name' => isset($request['original_file_name']) ? $request['original_file_name'] : '', 'reference' => isset($request['reference']) ? $request['reference'] : '', ); $result = $this->db_manager->get_items($args); $response = new WP_REST_Response($result['items']); $response->header('X-WP-Total', $result['total']); $response->header('X-WP-TotalPages', $result['total_pages']); return $response; } /** * Get a single item. * * @since 1.0.0 * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item($request) { $id = $request['id']; $item = $this->db_manager->get_item_by_fileid($id); if (!$item) { return new WP_Error( 'qdr_tss_not_found', __('File not found.', 'qdr-temporary-shared-storage'), array('status' => 404) ); } // Remove password from response unset($item->password); return new WP_REST_Response($item, 200); } /** * Update a single item. * * @since 1.0.0 * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function update_item($request) { $id = $request['id']; $item = $this->db_manager->get_item_by_fileid($id); if (!$item) { return new WP_Error( 'qdr_tss_not_found', __('File not found.', 'qdr-temporary-shared-storage'), array('status' => 404) ); } $data = array(); // Update properties if (isset($request['message'])) { $data['message'] = sanitize_textarea_field($request['message']); } if (isset($request['active_from'])) { $data['active_from'] = sanitize_text_field($request['active_from']); } if (isset($request['active_to'])) { $data['active_to'] = sanitize_text_field($request['active_to']); } if (isset($request['reference'])) { $data['reference'] = sanitize_text_field($request['reference']); } if (isset($request['description'])) { $data['description'] = sanitize_textarea_field($request['description']); } if (empty($data)) { return new WP_Error( 'qdr_tss_no_changes', __('No changes to update.', 'qdr-temporary-shared-storage'), array('status' => 400) ); } $result = $this->db_manager->update_item_by_fileid($id, $data); if (!$result) { return new WP_Error( 'qdr_tss_update_failed', __('Failed to update file.', 'qdr-temporary-shared-storage'), array('status' => 500) ); } $updated_item = $this->db_manager->get_item_by_fileid($id); // Remove password from response unset($updated_item->password); return new WP_REST_Response($updated_item, 200); } /** * Delete a single item. * * @since 1.0.0 * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function delete_item($request) { $id = $request['id']; $item = $this->db_manager->get_item_by_fileid($id); if (!$item) { return new WP_Error( 'qdr_tss_not_found', __('File not found.', 'qdr-temporary-shared-storage'), array('status' => 404) ); } // Delete file $this->file_manager->delete_file($item->file_path); // Delete from database $result = $this->db_manager->delete_item_by_fileid($id); if (!$result) { return new WP_Error( 'qdr_tss_delete_failed', __('Failed to delete file.', 'qdr-temporary-shared-storage'), array('status' => 500) ); } return new WP_REST_Response(array( 'deleted' => true, 'fileid' => $id ), 200); } }