docs: restructure CHANGELOG by feature area
Universal: Auto Version Bump / Version Bump (push) Has been cancelled
Universal: Auto Version Bump / Version Bump (push) Has been cancelled
Reorganized from chronological bullet dump into structured sections: Core Engine, Admin Component, Queue Processing, Per-Article Controls, OAuth, Migration, Service Plugins (34 platforms by category), Plugin Configuration, Infrastructure. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+112
-50
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user