NEW: “Is there football now?” subpage under Operation — a plain YES/NO status panel based on the hayahora.futbol feed, with a short note about the data source. Designed for non-technical users to check at a glance whether there are active La Liga IP blocks
NEW: Optional “Notifications recipient” email field — leave empty to use the site administrator (default), or set a different address to route notifications to a support mailbox or to the final client
UX: Settings page reorganized into clearer sections: Interface mode, Cloudflare Credentials, Bypass behavior (with “Force Proxy OFF during football” now at the top), Email notifications, Uninstall, and Advanced options (only visible in Advanced mode)
UX: Technical options (Staleness threshold, Action logging, Log retention, External cron token) are now grouped under “Advanced options” and hidden in Simple mode to reduce noise for client sites
UX: “Advanced” mode label now explicitly mentions cron settings so users know where to find them
I18N: Plugin now calls load_plugin_textdomain() so the bundled .mo files in /languages/ are picked up when installing from the release zip (previously only translations published on translate.wordpress.org were applied)
I18N: All five bundled languages (es_ES, ca, eu, fr_FR, gl_ES) are now at 100% translation coverage — machine-assisted translations for ca/eu/fr_FR/gl_ES will be refined by the GlotPress community over time
1.9.5
NEW: Feed diagnostics panel on the Operation page (local data.json age and size, last remote fetch status, active blocked IPs count)
NEW: “Clear local cache (data.json)” button to force a clean re-fetch on the next check
NEW: Staleness threshold setting (1-72h, default 6h) — “blocked” states whose last stateChange is older than this are treated as unblocked, preventing orphan entries from keeping the bypass active indefinitely. Overridable via cfbcolorvivo_stale_threshold_seconds filter
NEW: Minimum-ISPs-with-blocks setting (1-20, default 2) — general bypass only triggers when at least N distinct ISPs report blocks simultaneously, reducing false positives from isolated single-ISP outages. Falls back to classic behavior if the feed has no per-ISP information. Overridable via cfbcolorvivo_min_isps_blocked filter
NEW: Feed diagnostics panel now lists the ISPs with active blocks and whether they meet the minimum-ISPs gate
NEW: Optional email notifications to the site admin when the bypass turns on/off automatically, with a 2-minute throttle to prevent bursts. Off by default. Overridable via cfbcolorvivo_email_throttle_seconds filter
NEW: Interface mode setting — “Simple” hides the diagnostics panel, the logs tab and the technical console for non-technical users, leaving only the block status and the manual proxy ON/OFF buttons. “Advanced” shows everything as before. New installs default to Simple; upgrades from 1.9.x and earlier keep the Advanced experience automatically
NEW: External cron settings now show the full request URL and a ready-to-paste crontab example using your current check interval
NEW: “Delete data on uninstall” setting — uncheck it to keep settings, credentials and logs across reinstalls. Cron hook and ephemeral transients are always cleaned up regardless of this setting
SECURITY: Update URI header added to lock updates to WordPress.org (prevents slug hijacking by external sources)
PERF: get_settings() memoized per request, avoiding repeated normalization on the same page load
FIX: Explicit logging when dns_get_record() fails for the site domain
FIX: DateTime parse errors when comparing lastUpdate are now logged instead of silenced
FIX: Warning logged when hayahora.futbol JSON has unexpected structure (no lastUpdate nor known IP keys)
CODE: stateChanges parsing deduplicated across three call sites into a single latest_state_from_changes() helper
UI: “Reset settings” option removed — uninstalling the plugin (with “Delete data on uninstall” checked, which is the default) gives the same clean slate and avoids duplicating the destructive action
1.9.2
I18N: Source language refactored to English (was Spanish), aligning with the WordPress.org translation convention
I18N: New es_ES.po with 100% Spanish translations bundled (no functionality change for Spanish users)
I18N: ca, eu, fr_FR and gl_ES translations completed to 100% (23 new strings added)
I18N: en_US.po removed (source IS English now, no longer needed)
I18N: .pot regenerated from current code with English msgids and accurate line references
DOCS: Plugin header Description rewritten in English to match the new source language
1.9.1
FIX: Text domain changed to match new WP.org slug (es-football-bypass-for-cloudflare)
FIX: All file paths now use wp_upload_dir() instead of hardcoded WP_CONTENT_DIR
FIX: File operations migrated to WP_Filesystem API (no more file_put_contents)
FIX: register_setting() uses proper array format with sanitize_callback
FIX: Stricter sanitization for selected_records, bypass_blocked_ips and state fields
FIX: Inline JavaScript no longer uses PHP interpolation, uses wp_localize_script data
FIX: Plugin data directory renamed to es-football-bypass-for-cloudflare in uploads
FIX: Contributors field corrected in readme.txt
DOCS: External services section updated with hayahora.futbol information links
1.9.0
RENAME: Plugin renamed from “CF Football Bypass” to “ES Football Bypass for Cloudflare” (WordPress.org trademark compliance)
DOCS: External services section expanded with server IP detection services documentation
DOCS: Enhanced privacy and data transmission details for all external services