# QDR Temporary Shared Storage - Plugin Structure ## Directory Structure ``` qdr-temporary-shared-storage/ ├── qdr-temporary-shared-storage.php # Main plugin file (bootstrap) ├── uninstall.php # Clean uninstallation │ ├── includes/ # Core functionality │ ├── class-qdr-tss.php # Core plugin class │ ├── class-qdr-tss-activator.php # Plugin activation │ ├── class-qdr-tss-deactivator.php # Plugin deactivation │ ├── class-qdr-tss-db-manager.php # Database operations │ ├── class-qdr-tss-file-manager.php # File operations │ ├── class-qdr-tss-settings.php # Settings management │ ├── class-qdr-tss-cron-manager.php # Scheduled tasks │ ├── class-qdr-tss-loader.php # Hook loader (registers all hooks) │ ├── class-qdr-tss-i18n.php # Internationalization │ └── functions.php # Helper functions │ ├── admin/ # Admin-related functionality │ ├── class-qdr-tss-admin.php # Admin controller │ ├── class-qdr-tss-media-page.php # Media page UI │ ├── class-qdr-tss-settings-page.php # Settings page UI │ ├── partials/ # Admin UI templates │ │ ├── media-page.php # Media listing page template │ │ └── settings-page.php # Settings page template │ ├── js/ │ │ └── admin.js # Admin JavaScript │ └── css/ │ └── admin.css # Admin styles │ ├── public/ # Public-facing functionality │ ├── class-qdr-tss-public.php # Public controller │ ├── class-qdr-tss-shortcode.php # Shortcode functionality │ ├── class-qdr-tss-download.php # Download functionality │ ├── js/ │ │ └── public.js # Public JavaScript │ └── css/ │ └── public.css # Public styles │ ├── rest-api/ # REST API functionality │ ├── class-qdr-tss-rest-controller.php # REST API base controller │ ├── class-qdr-tss-media-controller.php # Media endpoints │ └── class-qdr-tss-upload-controller.php# Upload endpoints │ ├── languages/ # Translation files │ ├── qdr-temporary-shared-storage.pot # Translation template │ └── qdr-temporary-shared-storage-cs_CZ.po # Czech translation │ └── docs/ # Documentation ├── integration-guide.md # Integration guide ├── plugin-structure.md # Plugin structure documentation ├── rest-api-docs.md # REST API documentation └── testing-guide.md # Testing guide ``` ## Class Responsibilities ### Core Classes #### QDR_TSS (Main Plugin Class) - Initialize the plugin - Load dependencies - Register hooks - Define plugin-wide constants - Load translations #### QDR_TSS_Activator - Handle plugin activation - Create database tables - Create directories - Create .htaccess files - Set default options - Create download page #### QDR_TSS_Deactivator - Handle plugin deactivation - Clear scheduled hooks #### QDR_TSS_Loader - Register actions and filters - Orchestrate all hooks for the plugin #### QDR_TSS_i18n - Load text domain - Enable internationalization #### QDR_TSS_DB_Manager - Create/update custom tables - Database migrations - Database queries for media items - CRUD operations for media items - Storage size calculations #### QDR_TSS_File_Manager - Handle file operations - Create file directories - Manage chunked uploads - Delete files - Clean up empty directories #### QDR_TSS_Settings - Get/set plugin settings - Settings validation - Default settings - API key management #### QDR_TSS_Cron_Manager - Register cron schedules - Handle expired files cleanup - Schedule checks ### Admin Classes #### QDR_TSS_Admin - Register admin menu items - Enqueue admin scripts/styles - Handle AJAX requests - Initialize admin hooks #### QDR_TSS_Media_Page - Render Media Shared Storage page - Handle media listing - Edit/delete functionality - AJAX handlers for media operations #### QDR_TSS_Settings_Page - Render Settings page - Save settings - AJAX handlers for settings operations - Storage management - Handle purge expired files ### Public Classes #### QDR_TSS_Public - Register public scripts/styles - Public hooks - Create download page #### QDR_TSS_Shortcode - Register shortcodes - Render download forms #### QDR_TSS_Download - Handle download requests - Verify passwords and references - Process file download - Update download stats ### REST API Classes #### QDR_TSS_REST_Controller - Base REST API functionality - Authentication - Permissions #### QDR_TSS_Media_Controller - GET/PUT/DELETE media endpoints - List media collection - Media properties management #### QDR_TSS_Upload_Controller - Chunked upload endpoints - File validation - Upload initialization - Chunk handling - Upload finalization ## File Dependencies Here's a list of the main file dependencies: 1. **qdr-temporary-shared-storage.php** - Loads: - class-qdr-tss-activator.php - class-qdr-tss-deactivator.php - class-qdr-tss.php 2. **class-qdr-tss.php** - Loads: - class-qdr-tss-loader.php - class-qdr-tss-i18n.php - class-qdr-tss-db-manager.php - class-qdr-tss-file-manager.php - class-qdr-tss-settings.php - class-qdr-tss-cron-manager.php - functions.php - class-qdr-tss-admin.php - class-qdr-tss-media-page.php - class-qdr-tss-settings-page.php - class-qdr-tss-public.php - class-qdr-tss-shortcode.php - class-qdr-tss-download.php - class-qdr-tss-rest-controller.php - class-qdr-tss-media-controller.php - class-qdr-tss-upload-controller.php 3. **class-qdr-tss-admin.php** - Loads: - admin/js/admin.js - admin/css/admin.css 4. **class-qdr-tss-public.php** - Loads: - public/js/public.js - public/css/public.css ## Additional Files Needed Based on the review of the source code, the following files need to be created/renamed: 1. **class-qdr-tss-loader.php** - Rename existing class-qdr-tss-file-loader.php to this name to match references in the code 2. **admin/js/admin.js** - Create this file for admin JavaScript functionality (currently referenced but not included) ## Database Schema The plugin uses a custom database table with the following schema: ```sql CREATE TABLE {$wpdb->prefix}qdr_temporary_shared_storage ( id bigint(20) NOT NULL AUTO_INCREMENT, media_id bigint(20) NOT NULL, original_file_name varchar(255) NOT NULL, description text NULL, message text NULL, active_from datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, active_to datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, password varchar(255) NOT NULL, reference varchar(255) NULL, upload_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, download_count int DEFAULT 0 NOT NULL, last_download datetime DEFAULT '0000-00-00 00:00:00' NULL, file_path varchar(255) NOT NULL, file_size bigint(20) NOT NULL, PRIMARY KEY (id), KEY media_id (media_id), KEY reference (reference), KEY active_to (active_to) ) ```