2872ae2b97
#19 Per-article cross-posting: Content plugin injects "Cross-Posting" fieldset into article editor via onContentPrepareForm. Dynamic checkbox list of all enabled services. Skip toggle. System plugin reads article attribs for mokojoomcross_services (array of service IDs) and mokojoomcross_skip (boolean). Unchecked = post to all. #20 Analytics dashboard: Posts-by-service breakdown table with success rate column (color-coded). Top cross-posted articles list. DashboardModel methods: getServiceBreakdown(), getDailyTrend(), getTopArticles(). #21 OAuth flows: OAuthHelper with authorize URL generation (Facebook, LinkedIn, Twitter), PKCE for Twitter, code→token exchange, token storage in service credentials. OauthController with authorize and callback actions. Reads client ID/secret from plugin params. #22 Wiki documentation: Services guide (all 9 platforms, default vs custom mode), REST API reference, Message Templates guide with examples per platform, Troubleshooting guide. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>