== Changelog ==

= 1.1.4 =

_Release date: 2026-06-02_

**Highlights**

* Full dev tooling setup (PHPCS, PHPStan level 9, PHPUnit) and first test suite
* WordPress 7.1 and PHP 8.5 compatibility declared

**Added**

* Composer dev tooling: PHPCS/WPCS, PHPStan (level 9), PHPUnit, PHPCompatibility
* phpstan.neon, phpcs.xml, phpunit.xml configuration
* PHPUnit test suite (22 tests, 54 assertions): plugin headers, Config, Rate_Limiter
* bin/deploy.sh: automated ZIP generation with production vendor only
* docs/: db-migrations.md, known-issues.md

**Changed**

* Tested up to WordPress 7.1; PHP compatibility extended to 8.5
* PHPStan level upgraded from 8 to 9
* `IDRIVEE2_MEDIA_VERSION` constant defined in plugin main file; replaces `get_file_data()` call in enqueue
* Admin page: proper `sanitize_key()` for `$_GET['page']`, type-check for `$_POST['test_file']`
* deploy.sh: switched from `composer update` to `composer install` for reproducible builds from lock file
* Logger stats: switched to `time() - ($n * DAY_IN_SECONDS)` arithmetic for consistent UTC dates
* uninstall.php: variable renamed to satisfy WP prefix naming rules

**Fixed**

* WP_Filesystem null guard before file operations in Media_Uploader
* Type-safety on all `get_option()`/`get_transient()` results (guards against mixed types)
* Rate_Limiter arithmetic: transient value narrowed to int before subtraction
* robotstxt-updater.php: short ternary operators replaced, `serialize()` annotated
* Media_Uploader deletion queue: malformed `timestamp=0` entries now requeued instead of deleted immediately
* Logger: UTC-consistent date arithmetic in both `track_s3_operation()` and `get_s3_stats()`

**Compatibility**

* WordPress: 6.8 - 7.1
* PHP: 8.2 - 8.5

**Tests**

* PHP Coding Standards: 3.13.5 (0 errors)
* WordPress Coding Standards: 3.3.0 (0 violations)
* PHPStan: Level 9, 0 errors
* PHPCompatibility scan: 8.2-8.5

= 1.1.3 =

_Release date: 2026-02-04_

**Highlights**

* Critical bug fix for namespace issue causing fatal error

**Fixed**

* Critical namespace issue with Robotstxt_Updater class causing fatal error
* Fatal error "Class 'iDrivee2Media\Robotstxt_Updater' not found" resolved
* Added global namespace prefix (`\`) to `Robotstxt_Updater::init()` call in main plugin file
* Plugin now loads correctly without PHP fatal errors

**Technical Details**

* Issue: `Robotstxt_Updater` class is defined in global namespace but was called from within `iDrivee2Media` namespace
* Solution: Changed `Robotstxt_Updater::init()` to `\Robotstxt_Updater::init()` to explicitly reference global namespace
* Location: idrivee2-media-upload.php line 67

**Compatibility**

* WordPress: 6.8 - 6.9
* PHP: 8.2 - 8.4
* MariaDB: 10.6+

**Tests**

* PHP Coding Standards: 0 errors
* WordPress Coding Standards (WPCS): 3.3
* PHPStan: Level 8 (0 errors)
* PHPCompatibility: 8.2-8.4

= 1.1.2 =

_Release date: 2026-02-04_

**Highlights**

* Build system improvements for consistent PHP 8.2+ deployments

**Changed**

* Deployment script updated to use PHP 8.2 as platform base for production builds
* Now uses `composer update --no-dev` instead of `composer install --no-dev`
* Temporarily configures `platform.php 8.2` during build for consistent dependency resolution
* Platform configuration cleaned up after build completes
* Deploy script updated to bin/deploy.sh version 1.1.0

**Improved**

* Production packages now guarantee PHP 8.2+ compatibility regardless of development environment PHP version
* Build consistency ensures reliable deployments across different server environments with varying PHP versions
* Using `composer update` ensures latest compatible versions for target PHP version
* Dependency resolution is consistent and predictable

**Compatibility**

* WordPress: 6.8 - 6.9
* PHP: 8.2 - 8.4
* MariaDB: 10.6+

**Tests**

* PHP Coding Standards: 0 errors
* WordPress Coding Standards (WPCS): 3.3
* PHPStan: Level 8 (0 errors)
* PHPCompatibility: 8.2-8.4

= 1.1.1 =

_Release date: 2026-02-04_

**Highlights**

* Deployment script improvements to ensure production packages are complete

**Fixed**

* Deployment script now includes essential files in production packages
* update.json (auto-update system) now included in deploy
* robotstxt-updater.php (auto-update handler) now included in deploy
* readme.txt (WordPress.org documentation) now included in deploy
* changelog.txt (full changelog) now included in deploy
* Updated script documentation and output messages

**Improved**

* Production packages now contain all files required for automatic updates from Gitea
* Deploy script version updated to 1.1.0

**Compatibility**

* WordPress: 6.8 - 6.9
* PHP: 8.2 - 8.4
* MariaDB: 10.6+

**Tests**

* PHP Coding Standards: 0 errors
* WordPress Coding Standards (WPCS): 3.3
* PHPStan: Level 8 (0 errors)
* PHPCompatibility: 8.2-8.4

= 1.1.0 =

_Release date: 2026-02-04_

**Highlights**

* Configuration and consistency improvements for PHP 8.2+ compatibility
* Updated plugin repository URLs to Gitea
* Fixed text domain consistency across all files

**Changed**

* Added explicit PHP version requirement (>=8.2) to composer.json
* Updated update.json with correct plugin information
* Fixed Text Domain in robotstxt-updater.php to match plugin slug (idrivee2-media-upload)
* Migrated repository from GitHub to Gitea (git.robotstxt.es)
* Added Gitea Plugin URI and Primary Branch headers

**Fixed**

* Composer now validates PHP version during dependency installation
* Plugin update system correctly identifies the plugin
* Translations properly loaded for updater error messages

**Improved**

* All text domains now consistently use 'idrivee2-media-upload'
* Update metadata accurately reflects plugin information

**Compatibility**

* WordPress: 6.8 - 6.9
* PHP: 8.2 - 8.4
* MariaDB: 10.6+

**Tests**

* PHP Coding Standards: 0 errors
* WordPress Coding Standards (WPCS): 3.3
* PHPStan: Level 8 (0 errors)
* PHPCompatibility: 8.2-8.4

= 1.0.0 =

_Release date: 2026-02-03_

**Highlights**

* First stable production-ready release
* Enterprise-grade security with comprehensive logging
* OWASP Top 10 (2021) compliance
* PHPStan level 8 compliance with zero errors
* Security rating: A+ (Excellent)

**Added**

* Security logging system with comprehensive audit trail
* Rate limiting protection (60s users, 30s admins)
* S3 operation statistics tracking (30-day retention)
* Logger class for security and operations logging
* Rate_Limiter class for abuse prevention
* Comprehensive security audit documentation (7,500+ lines)
* Code quality report with metrics (3,200+ lines)

**Changed**

* Capability checks switched from role checks to manage_options
* Type safety with strict type hints throughout
* Error messages now user-friendly with translations
* Admin interface shows rate limit feedback

**Fixed**

* All 17 PHPStan level 8 type safety issues resolved
* Array type specifications added to all methods
* Null handling for AWS error messages
* Return type declarations match actual returns
* All capability checks use manage_options

**Security**

* OWASP Top 10 (2021) 100% compliance
* Enhanced nonce validation
* Comprehensive input sanitization and output escaping
* Security logging for all critical operations
* Rate limiting to prevent brute force attacks

**Compatibility**

* WordPress: 6.8 - 6.9
* PHP: 8.2 - 8.4
* MariaDB: 10.6+

**Tests**

* PHP Coding Standards: 0 errors
* WordPress Coding Standards (WPCS): 3.3
* PHPStan: Level 8 (0 errors)
* PHPCompatibility: 8.2-8.4

= 0.3.0 =

_Release date: 2025-02-03_

**Highlights**

* Complete refactoring to class-based architecture
* Modular file structure with dependency injection
* Added PHPUnit test framework
* Moved from Media to Settings menu

**Added**

* Settings page in WordPress Admin (Settings → iDrivee2)
* Timestamped test files (test-YYYYMMDDHHMMSS.txt)
* Persistent test files with delete capability
* Database-stored configuration option
* Hybrid configuration (wp-config.php + database)
* Class-based architecture with 6 classes
* PHPUnit test structure
* PHPStan static analysis
* Deployment script (bin/deploy.sh)
* Uninstall script
* Composer scripts (test, phpcs, phpstan, lint)

**Changed**

* Menu location from Media → iDrivee2 to Settings → iDrivee2
* Architecture from functional to object-oriented
* JavaScript version from hardcoded to dynamic

**Fixed**

* Code duplication eliminated (7 instances)
* WordPress Coding Standards violations
* PHP compatibility issues
* Type safety with strict declarations

**Compatibility**

* WordPress: 6.7 - 6.9
* PHP: 8.2 - 8.4
* MariaDB: 10.6+

**Tests**

* PHP Coding Standards: 0 errors
* WordPress Coding Standards (WPCS): 3.3
* PHPStan: Basic structure added
* PHPCompatibility: 8.2+

= 0.1.13 =

_Release date: 2024-XX-XX_

**Highlights**

* Initial public release
* Basic S3-compatible storage integration

**Added**

* Automatic media upload to S3
* Local file deletion after upload
* CDN URL rewriting
* WordPress admin testing interface
* Configuration via wp-config.php constants
* Multisite support

**Compatibility**

* WordPress: 6.5+
* PHP: 7.4+
* MariaDB: 10.6+
