plugin_name = $plugin_name; $this->version = $version; $this->db_manager = QDR_TSS_DB_Manager::instance(); $this->file_manager = QDR_TSS_File_Manager::instance(); } /** * AJAX handler for getting items. * * @since 1.0.0 */ public function ajax_get_items() { // Check nonce if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'qdr_tss_nonce')) { wp_send_json_error(array('message' => __('Security check failed.', 'qdr-temporary-shared-storage'))); } // Parse parameters $args = array( 'per_page' => isset($_POST['per_page']) ? intval($_POST['per_page']) : 10, 'page' => isset($_POST['page']) ? intval($_POST['page']) : 1, 'orderby' => isset($_POST['orderby']) ? sanitize_text_field($_POST['orderby']) : 'upload_date', 'order' => isset($_POST['order']) ? sanitize_text_field($_POST['order']) : 'DESC', 'original_file_name' => isset($_POST['original_file_name']) ? sanitize_text_field($_POST['original_file_name']) : '', 'reference' => isset($_POST['reference']) ? sanitize_text_field($_POST['reference']) : '', ); $result = $this->db_manager->get_items($args); wp_send_json_success($result); } /** * AJAX handler for editing an item. * * @since 1.0.0 */ public function ajax_edit_item() { // Check nonce if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'qdr_tss_nonce')) { wp_send_json_error(array('message' => __('Security check failed.', 'qdr-temporary-shared-storage'))); } // Check required parameters if (!isset($_POST['id']) || empty($_POST['id'])) { wp_send_json_error(array('message' => __('Missing item ID.', 'qdr-temporary-shared-storage'))); } $id = intval($_POST['id']); // Get the item $item = $this->db_manager->get_item($id); if (!$item) { wp_send_json_error(array('message' => __('Item not found.', 'qdr-temporary-shared-storage'))); } // Prepare update data $data = array(); if (isset($_POST['description'])) { $data['description'] = sanitize_textarea_field($_POST['description']); } if (isset($_POST['message'])) { $data['message'] = sanitize_textarea_field($_POST['message']); } if (isset($_POST['active_from'])) { $data['active_from'] = sanitize_text_field($_POST['active_from']); } if (isset($_POST['active_to'])) { $data['active_to'] = sanitize_text_field($_POST['active_to']); } if (isset($_POST['reference'])) { $data['reference'] = sanitize_text_field($_POST['reference']); } if (empty($data)) { wp_send_json_error(array('message' => __('No changes to update.', 'qdr-temporary-shared-storage'))); } // Update in database $result = $this->db_manager->update_item($id, $data); if ($result === false) { wp_send_json_error(array('message' => __('Failed to update item.', 'qdr-temporary-shared-storage'))); } // Get updated record $updated_item = $this->db_manager->get_item($id); wp_send_json_success(array( 'item' => $updated_item, 'message' => __('Item updated successfully.', 'qdr-temporary-shared-storage') )); } /** * AJAX handler for deleting an item. * * @since 1.0.0 */ public function ajax_delete_item() { // Check nonce if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'qdr_tss_nonce')) { wp_send_json_error(array('message' => __('Security check failed.', 'qdr-temporary-shared-storage'))); } // Check required parameters if (!isset($_POST['id']) || empty($_POST['id'])) { wp_send_json_error(array('message' => __('Missing item ID.', 'qdr-temporary-shared-storage'))); } $id = intval($_POST['id']); // Get the item $item = $this->db_manager->get_item($id); if (!$item) { wp_send_json_error(array('message' => __('Item not found.', 'qdr-temporary-shared-storage'))); } // Delete file $this->file_manager->delete_file($item->file_path); // Delete from database $result = $this->db_manager->delete_item($id); if ($result === false) { wp_send_json_error(array('message' => __('Failed to delete item.', 'qdr-temporary-shared-storage'))); } wp_send_json_success(array( 'message' => __('Item deleted successfully.', 'qdr-temporary-shared-storage') )); } /** * AJAX handler for getting item details. * * @since 1.0.0 */ public function ajax_get_item_details() { // Check nonce if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'qdr_tss_nonce')) { wp_send_json_error(array('message' => __('Security check failed.', 'qdr-temporary-shared-storage'))); } // Check required parameters if (!isset($_POST['id']) || empty($_POST['id'])) { wp_send_json_error(array('message' => __('Missing item ID.', 'qdr-temporary-shared-storage'))); } $id = intval($_POST['id']); // Get the item $item = $this->db_manager->get_item($id); if (!$item) { wp_send_json_error(array('message' => __('Item not found.', 'qdr-temporary-shared-storage'))); } // Add permalink and shortcode $item->permalink = site_url('shared-file-download/' . $item->fileid); $item->shortcode = '[qdr_tss_download id="' . $item->fileid . '"]'; // Remove password from response unset($item->password); wp_send_json_success(array( 'item' => $item )); } /** * AJAX handler for force activating an item. * * @since 1.0.0 */ public function ajax_force_activate_item() { // Check nonce if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'qdr_tss_nonce')) { wp_send_json_error(array('message' => __('Security check failed.', 'qdr-temporary-shared-storage'))); } // Check required parameters if (!isset($_POST['id']) || empty($_POST['id'])) { wp_send_json_error(array('message' => __('Missing item ID.', 'qdr-temporary-shared-storage'))); } $id = intval($_POST['id']); // Get the item $item = $this->db_manager->get_item($id); if (!$item) { wp_send_json_error(array('message' => __('Item not found.', 'qdr-temporary-shared-storage'))); } // Calculate new dates using absolute difference formula $now = current_time('mysql'); $active_from = new DateTime($item->active_from); $active_to = new DateTime($item->active_to); // Calculate absolute difference in seconds $duration_seconds = abs($active_to->getTimestamp() - $active_from->getTimestamp()); // Set new active period starting from now $new_active_from = new DateTime($now); $new_active_to = clone $new_active_from; $new_active_to->add(new DateInterval('PT' . $duration_seconds . 'S')); // Update in database $data = array( 'active_from' => $new_active_from->format('Y-m-d H:i:s'), 'active_to' => $new_active_to->format('Y-m-d H:i:s') ); $result = $this->db_manager->update_item($id, $data); if ($result === false) { wp_send_json_error(array('message' => __('Failed to force activate item.', 'qdr-temporary-shared-storage'))); } wp_send_json_success(array( 'message' => __('Item has been force activated successfully.', 'qdr-temporary-shared-storage'), 'new_active_from' => $new_active_from->format('Y-m-d H:i:s'), 'new_active_to' => $new_active_to->format('Y-m-d H:i:s') )); } }