feat: One-way content sync — push articles, menus, and modules from dev to remote sites #89

Closed
opened 2026-05-30 18:03:49 +00:00 by jmiller · 1 comment
Owner

Summary

Add a content sync feature that allows pushing Joomla content (articles, categories, menus, modules) from a dev/staging site to one or more remote MokoWaaS sites. One-way push only, manually triggered.

Requirements

Content Types to Sync

  • Articles — including category assignments, custom fields, and publishing state
  • Categories — full tree structure
  • Menus — menu types and menu items with proper parent/child relationships
  • Modules — module config, position assignments, and menu assignments

Sync Targets

  • Configure one or more remote MokoWaaS sites as sync targets
  • Each target needs: URL + API token
  • Targets configured in plugin params (subform repeatable)

Matching Strategy

  • Match content across sites by alias (articles/categories) or custom sync ID
  • On first sync, create on remote; subsequent syncs update existing

Trigger

  • Manual only — admin toggle, API endpoint, or button
  • API: POST /?mokowaas=sync and POST /api/v1/mokowaas/sync
  • Select content types per sync, dry-run mode available

Direction

  • One-way push: dev site is source of truth

Implementation

New Files

  • Service/ContentSyncService.php
  • SyncController.php and SyncReceiveController.php

Test Plan

  • Configure sync target to demo site
  • Push articles, verify on remote
  • Push updates, verify changes applied
  • Test categories, menus, modules
  • Test dry-run mode
  • Verify error handling for unreachable targets
## Summary Add a content sync feature that allows pushing Joomla content (articles, categories, menus, modules) from a dev/staging site to one or more remote MokoWaaS sites. One-way push only, manually triggered. ## Requirements ### Content Types to Sync - **Articles** — including category assignments, custom fields, and publishing state - **Categories** — full tree structure - **Menus** — menu types and menu items with proper parent/child relationships - **Modules** — module config, position assignments, and menu assignments ### Sync Targets - Configure one or more remote MokoWaaS sites as sync targets - Each target needs: URL + API token - Targets configured in plugin params (subform repeatable) ### Matching Strategy - Match content across sites by alias (articles/categories) or custom sync ID - On first sync, create on remote; subsequent syncs update existing ### Trigger - Manual only — admin toggle, API endpoint, or button - API: POST /?mokowaas=sync and POST /api/v1/mokowaas/sync - Select content types per sync, dry-run mode available ### Direction - One-way push: dev site is source of truth ## Implementation ### New Files - Service/ContentSyncService.php - SyncController.php and SyncReceiveController.php ## Test Plan - [ ] Configure sync target to demo site - [ ] Push articles, verify on remote - [ ] Push updates, verify changes applied - [ ] Test categories, menus, modules - [ ] Test dry-run mode - [ ] Verify error handling for unreachable targets
Author
Owner

Branch created: feature/89-feat-one-way-content-sync-push-articles-

git fetch origin
git checkout feature/89-feat-one-way-content-sync-push-articles-
Branch created: [`feature/89-feat-one-way-content-sync-push-articles-`](https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/src/branch/feature/89-feat-one-way-content-sync-push-articles-) ```bash git fetch origin git checkout feature/89-feat-one-way-content-sync-push-articles- ```
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoWaaS#89