plugin-structure.md 11 KB

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 and AJAX handlers
│   ├── class-qdr-tss-settings-page.php    # Settings page UI and AJAX handlers
│   ├── partials/                          # Admin UI templates
│   │   ├── media-page.php                 # Media listing page template
│   │   └── settings-page.php              # Settings page template
│   ├── js/
│   │   └── admin.js                       # Admin JavaScript (pagination, sorting, modals)
│   └── css/
│       └── admin.css                      # Admin styles (table, modals, buttons)
│
├── 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
    └── readme.md                          # Complete plugin documentation

Class Responsibilities

Core Classes

QDR_TSS (Main Plugin Class)

  • Initialize the plugin
  • Load dependencies
  • Register hooks for admin, public, REST API, and cron functionality
  • Define plugin-wide constants
  • Load translations

QDR_TSS_Activator

  • Handle plugin activation
  • Create database tables with proper schema
  • Create file system directories and security files
  • Set default options including API key generation
  • Create download page with shortcode
  • Schedule cron job for cleanup
  • Add rewrite rules for pretty URLs

QDR_TSS_Deactivator

  • Handle plugin deactivation
  • Clear scheduled cron jobs
  • Flush rewrite rules

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 (Singleton)

  • Create/update custom tables with proper indexes
  • Database queries for media items with pagination and filtering
  • CRUD operations for media items
  • Storage size calculations and limit checks
  • Handle expired items cleanup
  • Support for fileid-based operations

QDR_TSS_File_Manager (Singleton)

  • Handle file operations and chunked uploads
  • Generate unique file IDs
  • Create dated directory structures
  • Manage chunked upload process (init, store chunks, finalize)
  • Delete files and cleanup empty directories
  • File system initialization with security

QDR_TSS_Settings (Singleton)

  • Get/set plugin settings
  • Settings validation
  • Default settings management
  • API key generation and validation
  • Storage management settings

QDR_TSS_Cron_Manager

  • Register and manage cron schedules
  • Handle expired files cleanup (both files and database records)
  • Manual purge functionality
  • Automatic cleanup of empty directories

Admin Classes

QDR_TSS_Admin

  • Register admin menu items in Media and Settings
  • Enqueue admin scripts/styles with proper dependencies
  • Handle localization for JavaScript
  • Initialize admin hooks

QDR_TSS_Media_Page

  • Handle AJAX requests for media operations:
    • Get items with pagination, sorting, and filtering
    • Edit item properties
    • Delete items
    • Get item details for modals
    • NEW: Force activate functionality - Reset active period starting from current time
  • Pagination and search functionality
  • File management operations

QDR_TSS_Settings_Page

  • Handle AJAX requests for settings operations:
    • Save plugin settings
    • Manual purge of expired files
  • Settings validation and management

Public Classes

QDR_TSS_Public

  • Register public scripts/styles
  • Handle rewrite rules for pretty download URLs
  • Create download page if missing
  • Manage query variables for file downloads

QDR_TSS_Shortcode

  • Register and handle [qdr_tss_download] shortcode
  • Support for both specific file ID and generic download form

QDR_TSS_Download

  • Handle download requests with password and reference verification
  • Verify file accessibility (active dates)
  • Process file downloads with proper headers
  • Update download statistics (count and last download time)
  • Support for both URL parameter and shortcode-based downloads

REST API Classes

QDR_TSS_REST_Controller

  • Base REST API functionality and authentication
  • API key validation via X-Api-Key header
  • Permissions management for all endpoints

QDR_TSS_Media_Controller

  • REST endpoints for media management:
    • GET /media - List media with pagination and filtering
    • GET /media/{fileid} - Get specific media details
    • PUT /media/{fileid} - Update media properties
    • DELETE /media/{fileid} - Delete media
  • Proper error handling and response formatting
  • Security: passwords are excluded from API responses

QDR_TSS_Upload_Controller

  • REST endpoints for chunked file uploads:
    • POST /upload/init - Initialize chunked upload
    • POST /upload/chunk - Upload individual chunks
    • POST /upload/finalize - Combine chunks and create media record
  • File validation and storage limit checks
  • Proper cleanup of temporary files

Key Features and Changes

Database Schema Updates

  • fileid: Changed from media_id to fileid for better clarity
  • Proper indexes on commonly queried fields
  • Support for tracking download statistics

Admin Interface Enhancements

  • New Action Buttons:
    • Copy Permalink button with direct clipboard functionality
    • Force Activate button to reset active period
  • Improved UI: Better responsive design and modern styling
  • Enhanced Search: Filter by filename and reference
  • Better Modals: Improved modal system for viewing and editing

File Management Improvements

  • Unique File ID Generation: Improved algorithm using timestamp and random data
  • Chunked Upload Support: Complete implementation for large files
  • Storage Management: Automatic cleanup and size tracking
  • Security: Protected file storage with .htaccess rules

REST API Enhancements

  • Consistent Naming: Uses fileid instead of media_id throughout
  • Better Error Handling: Standardized error responses
  • Security: API key authentication for all endpoints
  • File Operations: Complete CRUD operations via REST API

Cron and Cleanup

  • Automatic Cleanup: Hourly cron job to remove expired files
  • Manual Purge: Admin interface button for immediate cleanup
  • Directory Cleanup: Removes empty directories after file deletion

Internationalization

  • Complete Translation Support: All user-facing strings are translatable
  • Czech Translation: Included as example
  • Proper Text Domains: Consistent use throughout the plugin

File Dependencies

Here's the updated dependency tree:

  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 all core components:

    • 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
    • Admin classes (admin.php, media-page.php, settings-page.php)
    • Public classes (public.php, shortcode.php, download.php)
    • REST API classes (rest-controller.php, media-controller.php, upload-controller.php)
  3. class-qdr-tss-admin.php - Enqueues:

    • admin/css/admin.css
    • admin/js/admin.js (with jQuery UI datepicker)
    • Localized JavaScript with translations
  4. class-qdr-tss-public.php - Enqueues:

    • public/css/public.css
    • public/js/public.js

Security Considerations

File Storage Security

  • Files stored in protected directory with .htaccess rules
  • No direct file access - all downloads go through WordPress
  • Automatic cleanup of expired files

API Security

  • API key authentication required for all REST endpoints
  • Proper nonce verification for admin AJAX requests
  • Input sanitization and validation throughout

Download Security

  • Password protection for all downloads
  • Optional reference codes for additional security
  • Time-based access control (active from/to dates)
  • Download tracking for audit purposes

Performance Optimizations

Database

  • Proper indexing on frequently queried columns
  • Pagination for large datasets
  • Efficient queries for file listing and search

File Operations

  • Chunked uploads for large files
  • Temporary file cleanup
  • Efficient storage usage tracking

Admin Interface

  • AJAX-based operations for better user experience
  • Client-side pagination and sorting
  • Lazy loading of file details

This structure provides a robust, secure, and user-friendly system for temporary file sharing with complete WordPress integration and comprehensive REST API support.