• 1.4.1 6a8de6e2e2

    v1.4.1 Stable

    javier released this 2026-08-10 16:31:55 +00:00 | 0 commits to main since this release

    1.4.1

    Release date: 2026-08-10

    Highlights

    • Security hardening, data preservation option, and WP-CLI commands
    • 66 tests (up from 38), 100% coverage of tested classes

    Added

    • Data preservation option — checkbox under Settings → iDrivee2 to opt in to data deletion on uninstall (default: preserve)
    • WP-CLI commands: wp idrivee2 test-connection, wp idrivee2 cleanup-local-files, wp idrivee2 stats --days=N

    Security

    • Logger: validate IP with filter_var( FILTER_VALIDATE_IP ) instead of sanitize_text_field
    • Admin page: wp_unslash() at read point for $_POST['test_file']
    • Cron cleanup: wp_delete_file() replaces WP_Filesystem() (cron-safe, no credentials needed)
    • Uninstall: data preservation is opt-in per AGENTS policy (default: preserve all data)

    Changed

    • WordPress minimum corrected 4.1 → 5.3 (wp-compat verified)
    • Uninstall: delete_post_meta_by_key() replaces raw SQL
    • robotstxt-updater.php documented as EXTERNAL DEPENDENCY

    Compatibility

    • WordPress: 5.3 - 7.1
    • PHP: 8.1 - 8.5

    Tests

    • PHP Coding Standards: 3.13.5 (0 errors)
    • WordPress Coding Standards: 3.3.0 (0 violations)
    • PHPStan: Level 9, 0 errors
    • PHPUnit: 66 tests, 109 assertions
    Downloads
  • 1.4.0 cc1bca74fa

    v1.4.0 Stable

    javier released this 2026-08-10 16:22:41 +00:00 | 1 commits to main since this release

    1.4.0

    Release date: 2026-08-10

    Highlights

    • Security hardening, data preservation option, and WP-CLI commands
    • 66 tests (up from 38), 100% coverage of tested classes

    Added

    • Data preservation option — checkbox under Settings → iDrivee2 to opt in to data deletion on uninstall (default: preserve)
    • WP-CLI commands: wp idrivee2 test-connection, wp idrivee2 cleanup-local-files, wp idrivee2 stats --days=N

    Security

    • Logger: validate IP with filter_var( FILTER_VALIDATE_IP ) instead of sanitize_text_field
    • Admin page: wp_unslash() at read point for $_POST['test_file']
    • Cron cleanup: wp_delete_file() replaces WP_Filesystem() (cron-safe, no credentials needed)
    • Uninstall: data preservation is opt-in per AGENTS policy (default: preserve all data)

    Changed

    • WordPress minimum corrected 4.1 → 5.3 (wp-compat verified)
    • Uninstall: delete_post_meta_by_key() replaces raw SQL
    • robotstxt-updater.php documented as EXTERNAL DEPENDENCY

    Compatibility

    • WordPress: 5.3 - 7.1
    • PHP: 8.1 - 8.5

    Tests

    • PHP Coding Standards: 3.13.5 (0 errors)
    • WordPress Coding Standards: 3.3.0 (0 violations)
    • PHPStan: Level 9, 0 errors
    • PHPUnit: 66 tests, 109 assertions
    Downloads
  • 1.3.0 916d7845be

    v1.3.0 Stable

    javier released this 2026-07-18 13:31:17 +00:00 | 2 commits to main since this release

    1.3.0

    Release date: 2026-07-18

    Highlights

    • New image sub-sizes control: ship less data per upload, ideal for large camera files. Reduces work in both the WP 7.1 client-side path (browser) and the server-side path.

    Added

    • Settings field Image Sub-sizes under Settings → iDrivee2 with three modes: all (default), thumbnail (only the default thumbnail), none (no sub-sizes).
    • IDRIVEE2_MEDIA_SUBSIZES_MODE wp-config.php constant — same priority pattern as the S3 credentials; the field becomes read-only when set.
    • In thumbnail and none modes the big_image_size_threshold filter is also disabled, so WordPress no longer creates a -scaled derivative for images larger than 2560px.

    Security

    • composer audit CVEs resolved: guzzlehttp/guzzle 7.11 → 7.15, guzzlehttp/psr7 2.11 → 2.13, mtdowling/jmespath.php 2.8 → 2.9 (CVE-2026-55767 / 55568 / 55766 / 54133).

    Tooling

    • bin/preflight.sh added — automated pre-deploy verification per AGENTS-testing-build-deployment.md (PHPCS, PHPStan, PHPCompatibility, PHPUnit + coverage, composer audit, candidate ZIP inspection).
    • .claude/settings.json added — mechanical deny rules for deploy.sh, git push/tag/merge per AGENTS.md.

    Compatibility

    • WordPress: 4.1 - 7.1
    • PHP: 8.1 - 8.5

    Tests

    • PHP Coding Standards: 3.13.5 (0 errors)
    • WordPress Coding Standards: 3.3.0 (0 violations)
    • PHPStan: Level 9, 0 errors
    • PHPUnit: 38 tests, 60 assertions
    Downloads
  • 1.2.1 a97911a978

    v1.2.1 Stable

    javier released this 2026-06-05 09:47:38 +00:00 | 3 commits to main since this release

    1.2.1

    Release date: 2026-06-05

    Fixed

    • Infinite recursion on image uploadwp_update_post() (called to update the attachment GUID after S3 upload) was firing the edit_attachment WordPress action, which re-triggered the upload method, which called wp_update_post() again, creating infinite recursion. Xdebug killed the process at 512 stack frames, WordPress reported "The server cannot process the image". Fixed by: (1) removing the edit_attachment hook — wp_update_attachment_metadata covers all new-upload scenarios; (2) adding a static re-entry guard ($in_progress per attachment ID) as a safety net.

    • Fatal error: fclose() on already-closed stream — The AWS SDK (via Guzzle) closes file streams automatically after reading them for upload. The finally block was attempting to fclose() streams that were already closed, throwing TypeError: fclose(): Argument #1 ($stream) must be an open stream resource. Fixed by checking is_resource($fh) before calling fclose().

    Compatibility

    • WordPress: 4.1 - 7.1
    • PHP: 8.1 - 8.5

    Tests

    • PHP Coding Standards: 3.13.5 (0 errors)
    • WordPress Coding Standards: 3.3.0 (0 violations)
    • PHPStan: Level 9, 0 errors
    • PHPUnit: 22 tests, 54 assertions
    Downloads
  • 1.2.0 31be5438e7

    v1.2.0 Stable

    javier released this 2026-06-02 19:06:43 +00:00 | 4 commits to main since this release

    1.2.0

    Release date: 2026-06-02

    Highlights

    • Media uploads dramatically faster: concurrent S3 uploads + streaming from disk

    Performance

    • Concurrent uploads via AWS CommandPool (default 5, configurable via IDRIVEE2_UPLOAD_CONCURRENCY)
    • Files now stream directly from disk (fopen + resource) instead of loading fully into memory
    • Removed per-file headObject pre-check (eliminates N extra HTTP round-trips per image)
    • Single DB write for upload stats per attachment (replaces one write per file)
    • Hook priority lowered from 999 to 10

    Compatibility

    • WordPress: 4.1 - 7.1
    • PHP: 8.1 - 8.5

    Tests

    • PHP Coding Standards: 3.13.5 (0 errors)
    • WordPress Coding Standards: 3.3.0 (0 violations)
    • PHPStan: Level 9, 0 errors
    • PHPUnit: 22 tests, 54 assertions
    Downloads
  • 1.1.4 1dd5809016

    v1.1.4 Stable

    javier released this 2026-06-02 18:50:57 +00:00 | 5 commits to main since this release

    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
    Downloads
  • 1.1.3 d6e6011c3d

    v1.1.3 Stable

    javier released this 2026-02-04 09:43:51 +00:00 | 6 commits to main since this release

    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
    Downloads
  • 1.1.1 d523565c79

    v1.1.1 Stable

    javier released this 2026-02-04 09:26:57 +00:00 | 7 commits to main since this release

    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
    Downloads
  • 1.1.0 47885eb7c3

    v1.1.0 Stable

    javier released this 2026-02-04 09:16:12 +00:00 | 8 commits to main since this release

    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
    Downloads
  • 1.0.0 e6299a3e14

    v1.0.0 Stable

    javier released this 2026-02-03 15:55:54 +00:00 | 9 commits to main since this release

    1.0.0

    • Fixes
    Downloads