195 lines
8.6 KiB
Text
195 lines
8.6 KiB
Text
== Changelog ==
|
||
|
||
= 0.4.0 =
|
||
|
||
_Release date: 2026-08-14_
|
||
|
||
**Highlights**
|
||
|
||
* Click-to-expand rows in the catalog table: clicking the ▸ next to a plugin's name reveals a detail row with the plugin's description and a link to its website on the store, so users can understand what each plugin does before installing. Pure CSS toggle (`:has()` + hidden checkbox) — no JavaScript, consistent with the classic-flow philosophy.
|
||
|
||
**Added**
|
||
|
||
* Detail row under each catalog entry, shown when the entry has a description or a website URL (Core 1.4.2+ exposes `description` in the catalog list; entries without either keep a plain, non-expandable row).
|
||
* "Visit website" link using `page_url` (falling back to `homepage`), opened in a new tab with `rel="noopener noreferrer"`.
|
||
|
||
**Changed**
|
||
|
||
* Plugin version 0.3.1 → 0.4.0. No database schema changes (no custom tables).
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 7.0 - 7.1 (declared floor of the ecosystem; scan-confirmed lower)
|
||
* PHP: 8.4 - 8.5 (declared floor of the ecosystem; scan-confirmed lower)
|
||
|
||
= 0.3.1 =
|
||
|
||
_Release date: 2026-08-14_
|
||
|
||
**Changed**
|
||
|
||
* Default store URL is now `https://www.robotstxt.software` (was `https://plugins.robotstxt.es`). Applies to new activations and fresh installs; existing saved URLs are preserved. The catalog API at the new domain is verified live.
|
||
* Plugin version 0.3.0 → 0.3.1.
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 7.0 - 7.1 (declared floor of the ecosystem; scan-confirmed lower)
|
||
* PHP: 8.4 - 8.5 (declared floor of the ecosystem; scan-confirmed lower)
|
||
|
||
= 0.3.0 =
|
||
|
||
_Release date: 2026-08-13_
|
||
|
||
**Highlights**
|
||
|
||
* Classic install/activate/update flow: the catalog actions now run on a full page load (`admin-post.php` with per-action-and-slug nonces) and report the outcome through standard admin notices (green success / red error) at the top of the page, replacing the previous AJAX flow.
|
||
|
||
**Added**
|
||
|
||
* Activate action — installed-but-inactive plugins show an "Activate" button that calls `activate_plugins()`.
|
||
* Update action — plugins with a newer catalog version show an "Update" button that re-downloads the ZIP and runs the `Plugin_Upgrader` with `overwrite` enabled.
|
||
* Install/Activate/Update buttons are nonce links (`robotstxt_manager_{action}_{slug}` nonce actions) to `admin-post.php`, all `manage_options`-gated.
|
||
* Redirect-based notices: handlers redirect back to the catalog page carrying `robotstxt_manager_result` (success/error) and `robotstxt_manager_message`, rendered as dismissible standard notices.
|
||
|
||
**Changed**
|
||
|
||
* `Robotstxt_Manager_Installer` rewritten from an AJAX handler to three admin-post handlers (`robotstxt_manager_install`, `robotstxt_manager_activate`, `robotstxt_manager_update`); download logic (Bearer account-key auth, ZIP validation, temp-file cleanup) unchanged.
|
||
* Removed the AJAX endpoint, `manager-install.js`, and its script localization.
|
||
* Plugin version 0.2.0 → 0.3.0.
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 7.0 - 7.1 (declared floor of the ecosystem; scan-confirmed lower)
|
||
* PHP: 8.4 - 8.5 (declared floor of the ecosystem; scan-confirmed lower)
|
||
|
||
= 0.2.0 =
|
||
|
||
_Release date: 2026-08-12_
|
||
|
||
**Highlights**
|
||
|
||
* Phase 2: the Install action. Free and premium plugins can be installed directly from the ROBOTSTXT catalog into the local site, authenticated with the account-level API key (requires Plugins Core 1.4.0+).
|
||
|
||
**Added**
|
||
|
||
* `Robotstxt_Manager_Installer` — AJAX handler (`wp_ajax_robotstxt_manager_install_plugin`, nonce-protected, `manage_options`-gated) that resolves the plugin in the remote catalog, downloads the ZIP (free plugins with a published public `download_url` directly; everything else via Core's authenticated `/download` endpoint with an `Authorization: Bearer <account API key>` header), validates the archive (ZIP magic bytes), installs it via `Plugin_Upgrader`, and cleans up the temp file on every path.
|
||
* `public/js/manager-install.js` — wires the Install buttons to the AJAX action with in-flight state and result rendering.
|
||
* Catalog view: enabled Install buttons for compatible plugins (free and premium).
|
||
|
||
**Changed**
|
||
|
||
* Plugin version 0.1.3 → 0.2.0. Description updated to reflect Phase 2.
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 7.0 - 7.1 (declared floor of the ecosystem; scan-confirmed lower)
|
||
* PHP: 8.4 - 8.5 (declared floor of the ecosystem; scan-confirmed lower)
|
||
|
||
= 0.1.3 =
|
||
|
||
_Release date: 2026-08-12_
|
||
|
||
**Changed**
|
||
|
||
* Version bumped 0.1.2 → 0.1.3.
|
||
* `composer.json` PHP requirement updated from `>=8.4` to `>=7.4` to match the real PHPCompatibility scan floor and the plugin header.
|
||
* `composer.lock` regenerated.
|
||
* `.pot` file regenerated for v0.1.3.
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 4.7 - 7.1
|
||
* PHP: 7.4 - 8.5
|
||
|
||
**Tests**
|
||
|
||
* PHP Coding Standards: PHP_CodeSniffer 3.13.6
|
||
* WordPress Coding Standards: WPCS 3.4.1
|
||
* PHPStan: level 9, 0 errors
|
||
* PHPCompatibility: 7.4–8.5 clean
|
||
* wp-compat: 0 errors against WP 4.7
|
||
|
||
= 0.1.2 =
|
||
|
||
_Release date: 2026-08-12_
|
||
|
||
**Highlights**
|
||
|
||
* Documentation refresh: readme.txt and changelog.txt aligned to the standard templates.
|
||
|
||
**Changed**
|
||
|
||
* Version bumped 0.1.1 → 0.1.2.
|
||
* readme.txt: added Extra Configurations section, Automatic download subsection in Installation, Previous versions link in Changelog.
|
||
* changelog.txt: 0.1.1 entry reformatted to follow the standard template (Highlights, Changed, Compatibility, Tests).
|
||
* PHPCompatibility scan (5.6–8.5): real PHP floor is **7.2**. Project declares **8.4** (ecosystem exception).
|
||
* wp-compat scan against WordPress 4.7: **zero WPCompat errors**. Real WP floor is **≤ 4.7**. Project declares **7.0** (ecosystem support window).
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 4.7 - 7.1
|
||
* PHP: 7.4 - 8.5
|
||
|
||
**Tests**
|
||
|
||
* PHP Coding Standards: PHP_CodeSniffer 3.13.6
|
||
* WordPress Coding Standards: WPCS 3.4.1
|
||
* PHPStan: level 9, 0 errors
|
||
* PHPCompatibility: 8.4–8.5 clean (real floor 7.2)
|
||
* wp-compat: 0 errors against WP 4.7
|
||
|
||
= 0.1.1 =
|
||
|
||
_Release date: 2026-08-12_
|
||
|
||
**Highlights**
|
||
|
||
* Compatibility scans completed and documented. No code changes.
|
||
|
||
**Changed**
|
||
|
||
* Version bumped 0.1.0 → 0.1.1.
|
||
* PHPCompatibility scan (5.6–8.5) completed: real PHP floor is **7.2** (highest-required feature is `object` return type, introduced in PHP 7.2). The project deliberately declares **8.4** to match the ROBOTSTXT ecosystem — this is a documented exception to `AGENTS-deploy.md` §"PHP compatibility check".
|
||
* wp-compat scan against WordPress 4.7: **zero WPCompat errors**. The Manager's code uses only WordPress APIs available since 4.7 or earlier. The real WordPress floor is **≤ 4.7**; the project declares `Requires at least: 7.0` to match the ecosystem support window.
|
||
* `.pot` file regenerated for v0.1.1.
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 4.7 - 7.1
|
||
* PHP: 7.4 - 8.5
|
||
|
||
**Tests**
|
||
|
||
* PHP Coding Standards: PHP_CodeSniffer 3.13.6
|
||
* WordPress Coding Standards: WPCS 3.4.1
|
||
* PHPStan: level 9, 0 errors
|
||
* PHPCompatibility: 8.4–8.5 clean (real floor 7.2)
|
||
* wp-compat: 0 errors against WP 4.7
|
||
|
||
= 0.1.0 =
|
||
|
||
_Release date: 2026-08-12_
|
||
|
||
**Highlights**
|
||
|
||
* Phase 1 scaffold of Manager (by ROBOTSTXT) — client-side dashboard for the ROBOTSTXT plugin ecosystem. Read-only catalog view with local install-state resolution.
|
||
|
||
**Added**
|
||
|
||
* Plugin header, autoloader (Composer with manual fallback), lifecycle hooks, constants (`ROBOTSTXT_MANAGER_VERSION`, `ROBOTSTXT_MANAGER_DIR`, `ROBOTSTXT_MANAGER_URL`, `ROBOTSTXT_MANAGER_BASENAME`).
|
||
* `Robotstxt_Manager_Loader` action/filter queue (identical pattern to Core/Mollie/Sync).
|
||
* `Robotstxt_Manager_Encryption` — AES-256-CBC encrypt/decrypt for the API key, using WordPress `AUTH_KEY` + `AUTH_SALT` for key derivation. Same pattern as Core's Forgejo token encryption.
|
||
* `Robotstxt_Manager_Core_Client` — HTTP client for the remote Plugins Core REST API. Authenticated via `Authorization: Bearer <key>` header. Implements `test_connection()`, `get_catalog()` (cached in transient), `clear_catalog_cache()`.
|
||
* `Robotstxt_Manager_Settings` — Settings API page with Store URL, API Key (masked, encrypted, last-4 hint, delete-on-empty preservation), Catalog Cache TTL, Data-on-Uninstall opt-in. AJAX "Test connection" button with nonce + capability check.
|
||
* `Robotstxt_Manager_Admin` — Top-level admin menu (label "ROBOTSTXT") with catalog table view. Resolves local install/active/update state for every catalog entry using `get_plugins()` + `is_plugin_active()`. "Refresh catalog" admin-post action.
|
||
* `uninstall.php` with opt-in data deletion (default: preserve all options and transients).
|
||
* Per-project tooling: Composer, PHPCS + WPCS + PHPCompatibility, PHPStan level 9 + wp-compat, PHPUnit. `bin/preflight.sh` and `bin/deploy.sh`.
|
||
|
||
**Compatibility**
|
||
|
||
* WordPress: 4.7 - 7.1
|
||
* PHP: 7.4 - 8.5
|
||
|
||
**Tests**
|
||
|
||
* Phase 1 scaffold — plugin-header tests included. Additional tests for Core client, settings, and admin rendering in follow-up phases.
|