=== Recordar for Bluesky & Mastodon ===
Contributors: JRMora
Donate link: https://jrmora.com
Tags: bluesky, mastodon, post, cron, archive
Requires at least: 6.0
Requires PHP: 7.4
Tested up to: 7.0
Stable tag: 2.2.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Automate archive (Ephemeris) & new posts to Bluesky & Mastodon. Includes scheduling, lists, editorial control and multi-language support.

== Description ==

Recordar for Bluesky & Mastodon is a plugin designed to automate the publication of archive content (ephemeris/on this day) to **Bluesky** and **Mastodon**. It integrates with the WordPress CRON system to:

* **Dual Publishing:** Connect both Bluesky and Mastodon simultaneously.
* **Smart Scheduling:** Automatically publish old posts ("On a day like today, N years/months ago") at user-defined times.
* **Full Multilanguage Support:** Detects and allows filtering posts by language (e.g., 'es', 'en', 'de') if using plugins like Polylang or WPML.
* **Immediate Publication of New Posts:** Optionally, send a post to your networks immediately upon publication in WordPress.
* **Editorial Control:** Exclude specific posts (by ID) to prevent automatic publication.
* **Link Handling (Embeds):** Generates the link embed with image, title, and excerpt. Supports native image uploading for both networks.
* **Diagnostic Tools:** Includes connection tests, Archive query tests, and CRON status/reset tools.
* **Granular Control:** Pause the entire system globally, or enable/disable each social network individually.
* **Lists Laboratory:** Create and save draft schedules offline before applying them.

**Requirements:**
* A Bluesky account (Handle + App Password).
* A Mastodon account (Instance URL + Access Token).

== Installation ==

1.  Upload the `recordar-for-bluesky` folder to your `/wp-content/plugins/` directory.
2.  Activate the plugin through the 'Plugins' menu in WordPress.
3.  Go to the new **Recordar for Bluesky** menu entry in your WordPress admin.
4.  Enter your credentials for Bluesky and/or Mastodon.
5.  Define the schedules and age of the posts you want to publish automatically.
6.  Make sure to save changes to schedule the CRON tasks!

== Frequently Asked Questions ==

= How do I get a Mastodon Access Token? =
Go to your Mastodon instance settings (usually under **Preferences > Development**). Click "New Application", give it a name (e.g., "WordPress"), select the permissions **read** and **write**, and save. Then click on the application name to reveal and copy the "Access Token".

= What is a Bluesky App Password? =
It is a password generated within your Bluesky account settings used specifically for third-party apps (like this plugin) to post on your behalf.

= How does time synchronization work? =
The plugin automatically detects your WordPress Timezone settings (Settings > General). You no longer need to calculate offsets manually. The CRON will fire exactly at the local time you configure.

= What happens if a post has an excluded ID? =
If a post is in the excluded IDs list, the plugin will never automatically publish it, neither as an ephemeris nor immediately as a new post.

= Will I lose my lists if I uninstall the plugin? =
By default, NO. Since version 1.9.0, data persistence is enabled by default to protect your lists. You can change this behavior in the "Uninstallation Options" section of the settings if you want a complete cleanup upon uninstallation.

= What do the status icons in the schedule list mean? =
After running a "Simulate Search" in the Testing Zone, the Active Schedule table updates to show results at a glance. A green checkmark (✅) indicates that content was found for that period. A grey dash (➖) indicates no matching post was found for today.

== Screenshots ==

1. Main configuration view with separate cards for Bluesky and Mastodon.
2. The "Lists Laboratory" and "Saved Lists" modules for managing presets.
3. Diagnostic section with CRON status and testing tools.

== Changelog ==

= 2.2.5 =
* **FIX:** Fixed regression in automated post messages where i18n placeholders were reverting to English after recent UI updates.

= 2.2.4 =
* **UX:** Improved the success message in the Testing Zone to accurately reflect which networks (Bluesky and/or Mastodon) received the test post.

= 2.2.3 =
* **COMPATIBILITY:** Tested up to WordPress 7.0.
* **FIX:** Resolved i18n string placeholders and translator comment warnings reported by WP 7.0 coding standards.
* **SECURITY:** Added proper escaping to admin dashboard icons and suppressed false positive validation warnings for strictly sanitized variables.

= 2.2.2 =
* Minor fix: Removed "New Blog Post!" prefix from automated posts for cleaner formatting.

= 2.2.1 =
* **FIX:** **UI Layout.** Fixed visual misalignment in the "List Builder" (Drafts) table columns.
* **UX:** **Mobile Improvements.** Added gutters to the dashboard to prevent "scroll traps" when managing long lists on mobile devices.
* **I18N:** **Translation Ready.** Search reports and Cron logs are now fully translatable (using proper placeholders).

= 2.2.0 =
* **NEW:** **Visual Status Indicators.** Added a new status column in the Active Schedule table.
* **UX:** **In-situ Feedback.** When running "Simulate Search", the table now displays a green checkmark (✅) for found posts and a grey dash (➖) for empty slots, allowing for quick status checks without scrolling.
* **IMPROVEMENT:** **Tooltips.** Added native WordPress tooltips to status icons for better clarity.

= 2.1.0 =
* **NEW:** **Mastodon Support!** Now you can connect your Mastodon account (Instance + Token).
* **NEW:** **Multi-Network Logic.** Publish to Bluesky, Mastodon, or both simultaneously.
* **NEW:** **Individual Toggles.** Pause or activate each social network independently without stopping the global system.
* **UX:** Redesigned credentials interface with separate cards for each network.
* **IMPROVEMENT:** **Rich Text for Mastodon.** Automatically appends the post excerpt to the message body when uploading images to ensure context is preserved (since Mastodon hides link cards when media is attached).

= 2.0.0 =
* **NEW:** **Month-based Scheduling.** Now you can schedule ephemeris for "1 month ago", "3 months ago", etc., expanding the possibilities beyond just years.
* **IMPROVEMENT:** **Unified Selectors.** The schedule dropdowns now handle and display both months and years intelligently.
* **IMPROVEMENT:** **Translation Logic.** Implemented `_n()` function to ensure accurate pluralization of time periods in all languages (e.g., "1 year" vs "5 years").
* **LOGIC:** **Robust Date Calculation.** Added specific logic to handle month subtraction safely (handling edge cases like day 31 automatically).

= 1.9.0 =
* **NEW:** **Automatic Timezone Synchronization.** Removed manual offset selector. The plugin now intelligently uses the WordPress "Settings > General" timezone configuration.
* **NEW:** **Data Persistence Option.** Added a "Danger Zone" setting to choose whether to keep lists/settings upon uninstallation.
* **IMPROVEMENT:** **Reforged CRON Logic.** Completely rewrote the scheduling function using DateTimeZone.
* **FIX:** **Server Compatibility.** Added fallback for servers missing mbstring extension and hardened time parsing to prevent fatal errors.
* **IMPROVEMENT:** **Enhanced Logging.** The status log now explicitly displays Local Blog Time vs UTC.

= 1.8.1 =
* **UX:** Added an important safety warning to the "Force Publish Now" tool. It alerts the user that this action publishes all listed posts simultaneously to prevent accidental flooding.

= 1.8.0 =
* **NEW:** **Global Pause** system. Added a switch to temporarily stop all automatic activity without losing settings.
* **NEW:** **Lists Laboratory (Drafts)**. New dedicated tool to create, edit, and save list drafts "offline" without affecting the active schedule.
* **IMPROVEMENT:** **Modular Design (Dashboard)**. Complete UI overhaul using a card and grid system for better usability.
* **IMPROVEMENT:** **Search Persistence**. Archive test results now remain on screen after reload until manually closed.
* **CRITICAL FIX:** Hardened **CRON Reset** logic. Fixed recalculation to prevent past events from firing immediately upon reset, respecting server time offset.
* **MAINTENANCE:** **Clean Uninstall** (`uninstall.php`). The plugin now automatically wipes all its options and credentials from the database upon deletion.

== Upgrade Notice ==

= 2.2.5 =
Fixes an issue with automated message translation. Update recommended.

= 2.2.4 =
Minor UX improvement in the Testing Zone feedback messages.

= 2.2.3 =
Maintenance update preparing the plugin for WordPress 7.0 compatibility. Fixed internal placeholder translation strings and security validations.

= 2.2.2 =
Minor fix: Removed "New Blog Post!" prefix from automated posts for cleaner formatting.Tnx @@artblackman

= 2.2.1 =
Minor Maintenance Release: Fixed List Builder column alignment, improved mobile scrolling, and updated translation strings for logs and reports.

= 2.2.0 =
UX Update: Now you can see matching post status (found/empty) directly in your Active Schedule list after running a simulation.

= 2.1.0 =
Big Update! Now with full **Mastodon** support. You can configure your instance and token to cross-post your ephemeris and new posts to the Fediverse.

= 2.0.0 =
Major Feature: Added support for scheduling by MONTHS (e.g., 6 months ago) in addition to years. Enjoy more content possibilities!

= 1.9.0 =
Major Update: Replaced manual time offsets with Automatic Timezone Synchronization. Added Data Persistence protection. Please check your schedule after updating.