diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f91e3f9..5bb7fd7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,56 +9,118 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] ### Added -- Initial package structure with component, system plugin, content plugin, and webservices plugin -- Admin component with dashboard, post queue, services management, and activity logs -- System plugin triggering cross-post on article publish via `onContentAfterSave` -- Content plugin adding cross-post controls to article editor -- WebServices API plugin with REST endpoints for posts and services + +#### Core Engine +- Cross-posting engine dispatches articles to service plugins on publish +- System plugin hooks `onContentAfterSave` and `onContentChangeState` +- Duplicate guard prevents re-posting to services that already received an article +- Message template rendering with 8 placeholders: `{title}`, `{url}`, `{introtext}`, `{fulltext}`, `{image}`, `{category}`, `{author}`, `{date}` - Custom `mokojoomcross` plugin group for extensible service architecture -- Service plugins: Facebook, X/Twitter, LinkedIn, Mastodon, Bluesky, Mailchimp, Telegram, Discord, Slack -- Database tables: services, posts, templates, logs -- Perfect Publisher Pro migration tool in installer script -- Message template system with per-platform placeholders -- Post queue with scheduled posting, retry logic, and delivery tracking -- Core cross-posting engine: service plugin dispatch, duplicate guard, immediate execution -- System plugin listens to both `onContentAfterSave` and `onContentChangeState` for publish events -- Full admin templates: services list, post queue list, activity logs list, dashboard with recent activity -- Service edit form with default/custom mode toggle and credential fields -- Dashboard migration controller action for Perfect Publisher Pro import -- Template placeholders: {title}, {url}, {introtext}, {fulltext}, {image}, {category}, {author}, {date} -- Queue processing: Joomla Scheduled Task plugin (`plg_task_mokojoomcross`) — preferred method -- Queue processing: Page-load fallback via system plugin `onAfterRender` with configurable throttle -- Configurable processing method: scheduler-only (recommended), page-load only, or both -- Dashboard warning banner when page-load processing is active instead of scheduler +- `MokoJoomCrossServiceInterface` contract for all service plugins + +#### Admin Component (5 views) +- **Dashboard** — summary cards, posts-by-service analytics with success rates, top cross-posted articles, recent activity feed, PP Pro migration banner, page-load processing warning +- **Post Queue** — list with color-coded status badges, error messages, retry counts, platform post IDs, article/service columns, date filters +- **Services** — CRUD with service type selector (34 platforms organized by category), default/custom mode badges, publish toggle, credential editor +- **Templates** — CRUD for message templates, per-platform assignment, placeholder reference panel, template body preview +- **Activity Logs** — list with level badges (info/warning/error), service column, context data, level and search filters + +#### Queue Processing (3 methods) +- Joomla Scheduled Task plugin (`plg_task_mokojoomcross`) — preferred, processes 20 posts per run +- Page-load fallback via system plugin `onAfterRender` — configurable throttle interval, backend/frontend/both - Shared `QueueProcessor` helper with DB lock to prevent concurrent execution -- Failed post retry with configurable max retries and delay +- Failed post retry with configurable max retries and exponential delay +- Scheduled post support (`scheduled_at` column) - Automatic log cleanup based on configurable retention period -- PP Pro migration rewritten: reads #__autotweet_channels table with credential mapping per service type -- PP Pro migration fallback: extracts from component params when channel table missing -- Plugin-level config forms for Telegram, Facebook, Discord, Slack (default bot tokens stored in plugin params) -- Telegram plugin config: default bot token, parse mode, link preview toggle -- Facebook plugin config: default page access token, default page ID -- Discord plugin config: default webhook URL, embed color -- Slack plugin config: default webhook URL -- LinkedIn plugin config: OAuth client ID/secret, redirect URI -- Mastodon plugin config: default instance URL, visibility, hashtags -- Bluesky plugin config: default PDS URL, auto link cards -- Mailchimp plugin config: default sender name/email, auto-send toggle -- Template management: full CRUD with list/edit views, placeholder reference panel -- Templates submenu item and dashboard quick link -- Logs filter form with level and search filters -- Admin component now has 5 submenu items: Dashboard, Post Queue, Services, Templates, Logs -- Per-article cross-posting: skip toggle and service checkboxes in article editor attribs tab -- Content plugin injects dynamic "Cross-Posting" fieldset via onContentPrepareForm -- System plugin reads article attribs for mokojoomcross_services and mokojoomcross_skip -- Analytics dashboard: posts-by-service table with success rates, top articles, daily trend data -- OAuth helper: authorization URL generation, PKCE for Twitter, code exchange, token storage -- OAuth controller: authorize and callback endpoints for Facebook, LinkedIn, Twitter -- Wiki: Services guide, REST API reference, Message Templates, Troubleshooting -- 25 expansion service plugins: Generic Webhook, Microsoft Teams, Threads, Google Business - Profile, WhatsApp Business, Google Chat, Medium, Pinterest, Reddit, SendGrid, Brevo, - WordPress, Ntfy, Tumblr, ConvertKit, Nostr, ActivityPub, Dev.to, Ghost, Hashnode, - Google Blogger, Matrix/Element, RSS Feed, Constant Contact, TikTok -- Generic Webhook plugin: universal connector for IFTTT, Zapier, n8n, Make, any custom endpoint -- Service type dropdown updated with all 34 platforms organized by category -- Package manifest now includes all 40 sub-extensions (component + 5 core plugins + 34 service plugins) + +#### Per-Article Controls +- "Cross-Posting" fieldset injected into article editor via `onContentPrepareForm` +- Skip cross-posting toggle per article +- Service selection checkboxes (unchecked = post to all enabled services) + +#### OAuth 2.0 +- `OAuthHelper` with authorization URL generation, code-to-token exchange, token storage +- Twitter PKCE flow support +- `OauthController` with authorize and callback endpoints +- Reads client ID/secret from service plugin params + +#### Perfect Publisher Pro Migration +- Reads `#__autotweet_channels` table with per-platform credential mapping +- Fallback extraction from component params when channel table missing +- Maps Facebook, Twitter, LinkedIn, Telegram, Discord, Slack, Mastodon +- Creates services in disabled state for manual verification +- One-click migration from dashboard + +#### Service Plugins (34 platforms) + +**Social Media (12)** +- Facebook / Meta — Graph API v19.0, default MokoWaaS app mode, page feed posting +- X / Twitter — API v2, OAuth 2.0 Bearer Token, 280 char limit +- LinkedIn — Share API v2, organization + personal profile, 3000 char limit +- Mastodon — API v1, multi-instance, hashtags, 500 char limit +- Bluesky — AT Protocol, session auth, app passwords, 300 char limit +- Threads (Meta) — Threads Publishing API, default app mode, 500 char limit +- Pinterest — Pins API v5, board selection, image-focused +- Reddit — OAuth2 link submission, subreddit selection +- Tumblr — API v2, link/text posts, OAuth 1.0a +- TikTok — Content Posting API, photo slideshows +- Nostr — NIP-01 event publishing, configurable relays +- ActivityPub — generic Fediverse (Pleroma, Akkoma, Misskey, Pixelfed) + +**Chat / Messaging (8)** +- Telegram — Bot API, default @MokoWaaSBot + custom bot, HTML/Markdown, 4096 chars +- Discord — Webhooks, default MokoWaaS webhook mode, embeds, 2000 chars +- Slack — Incoming Webhooks, default MokoWaaS webhook mode, Block Kit +- Microsoft Teams — Incoming Webhooks, default mode, Adaptive Cards +- Google Chat — Webhook API, card formatting +- WhatsApp Business — Meta Cloud API, template + free-form messages +- Matrix / Element — Client-Server API, self-hosted homeserver support +- Ntfy — Push notifications, priority levels, action buttons + +**Email / Newsletter (5)** +- Mailchimp — Campaigns API, audience selection, send/draft modes +- SendGrid — Marketing Campaigns API v3, Single Send creation +- Brevo (Sendinblue) — API v3, campaign creation +- ConvertKit — API v3, broadcast creation +- Constant Contact — API v3, campaign creation + +**Publishing / Blogging (6)** +- Medium — Publishing API, full HTML, canonical URL, tags +- WordPress — REST API v2, Application Passwords, category mapping +- Dev.to — Forem API, markdown, series support +- Ghost — Admin API v5, JWT auth, full HTML +- Hashnode — GraphQL API, cover image, tags +- Google Blogger — Blogger API v3, labels from categories + +**Business (1)** +- Google Business Profile — API v1, local posts (UPDATE/EVENT/OFFER) + +**Universal (2)** +- Generic Webhook — POST/PUT to any URL, JSON/form body, custom headers (IFTTT, Zapier, n8n, Make) +- RSS Feed — dedicated cross-post feed generation + +#### Plugin Configuration +- Telegram: default bot token, parse mode, link preview toggle +- Facebook: default page access token, default page ID +- Discord: default webhook URL, embed color +- Slack: default webhook URL +- LinkedIn: OAuth client ID/secret, redirect URI +- Mastodon: default instance URL, visibility, hashtags +- Bluesky: default PDS URL, auto link cards +- Mailchimp: default sender name/email, auto-send toggle +- Microsoft Teams: default webhook URL +- Threads: default webhook URL + +#### Infrastructure +- 7 CI/CD workflows: CI, auto-release, pre-release, auto-bump, update-server, cascade-dev, issue-branch +- Joomla update server (`updates.xml`) with development channel +- WebServices REST API plugin with CRUD routes for posts and services +- Database: 4 tables (services, posts, templates, logs) with default templates +- Package installer with auto-enable for core + task + service plugins +- 9 wiki documentation pages +- Windows Terminal profile in Joomla dropdown + +## [01.00.00] - 2026-05-28 + +### Added +- Initial release