Add REST API endpoints for repo folder listing and page pushing
- Implemented `GET /repo-folders` to list available sub-folders in the configured repository. - Added `POST /push` to push a single page to the repository. - Introduced `POST /push-all` to push all synced pages back to the repository. - Enhanced `oribi_sync_rest_sync` to push local changes after pulling, except during dry runs. - Created `oribi_sync_push_page` and `oribi_sync_push_all` functions to handle page pushing logic. - Updated post meta on successful pushes to track last push time and SHA. - Added logging for push actions and errors. Enhance sync engine to support theme file synchronization - Added functionality to auto-apply changed theme files from the repository's theme directory. - Created `oribi_sync_apply_theme_files` to handle theme file updates during sync. - Ensured the existence of a minimal theme structure in the `ots-theme` directory. Refactor uninstall process to clean up additional post meta - Updated `uninstall.php` to remove new post meta related to push operations. - Ensured comprehensive cleanup of options and metadata upon plugin uninstallation. Introduce push client for handling page pushes to Gitea - Created `push-client.php` to encapsulate logic for pushing pages back to the Git repository. - Implemented conflict resolution by creating branches and opening pull requests when necessary. - Added helper functions for authenticated API requests to Gitea.
This commit is contained in:
27
README.md
27
README.md
@@ -4,12 +4,13 @@ WordPress plugin that syncs pages and theme files from a remote Git repository.
|
||||
|
||||
## Features
|
||||
|
||||
- **Page sync** — Reads Gutenberg HTML files from the repo's `pages/` directory and creates/updates WordPress pages automatically.
|
||||
- **Page sync (pull)** — Reads Gutenberg HTML files from the repo's `pages/` directory and creates/updates WordPress pages automatically.
|
||||
- **Page push** — Push WordPress page content back to the repo as PHP page-data files. On conflict (remote file changed since last sync), automatically creates a branch and opens a pull request for review.
|
||||
- **Theme file preview & apply** — Fetches files from the repo's `theme/` directory, shows a side-by-side preview against the active theme, and lets an admin selectively apply changes.
|
||||
- **Encrypted PAT storage** — Personal Access Tokens are stored encrypted (AES-256-CBC) in the database with `autoload=false`.
|
||||
- **Dry-run mode** — Preview what a sync would do without making any changes.
|
||||
- **Sync log** — Keeps a history of the last 20 syncs with details on created, updated, trashed, and skipped pages.
|
||||
- **REST API & webhook** — Trigger syncs programmatically or via Git host webhooks.
|
||||
- **REST API & webhook** — Trigger syncs and pushes programmatically or via Git host webhooks.
|
||||
- **Trash policy** — Pages removed from the repo are moved to Trash for manual review.
|
||||
|
||||
## Repository Layout
|
||||
@@ -56,7 +57,7 @@ repo/
|
||||
| **GitHub** (github.com + GHE) | `Bearer` token | Fine-grained PAT with `Contents: Read` |
|
||||
| **GitLab** (gitlab.com + self-hosted) | `PRIVATE-TOKEN` header | Project/personal access token with `read_repository` |
|
||||
| **Bitbucket Cloud** | Basic or Bearer | App password (`username:app_password`) or repository token |
|
||||
| **Gitea / Forgejo** | `token` header | Application token with repo read access |
|
||||
| **Gitea / Forgejo** | `token` header | Application token with repo **read + write** access |
|
||||
| **Azure DevOps** | Basic (`:PAT`) | Personal access token with `Code: Read` scope |
|
||||
|
||||
Select your provider on the settings page, or leave it on "Auto-detect" to infer from the URL.
|
||||
@@ -78,6 +79,11 @@ Select your provider on the settings page, or leave it on "Auto-detect" to infer
|
||||
- Click **Dry Run** to preview changes without modifying anything.
|
||||
- Click **Preview Theme Files** to fetch and review theme files from the repo.
|
||||
|
||||
### Push Pages to Repo
|
||||
- The **Push Pages to Repo** section lists all synced pages with individual **Push** buttons and a **Push All Pages** button.
|
||||
- Pushing converts the page's Gutenberg content into a PHP page-data file and commits it to the configured branch.
|
||||
- **Conflict handling:** If the remote file has changed since the last sync (SHA mismatch), the plugin creates a branch named `oribi-sync/{slug}-{timestamp}` and opens a **pull request** for manual review. A link to the PR is shown in the admin UI.
|
||||
|
||||
### REST API
|
||||
|
||||
All REST endpoints require `manage_options` capability (authenticated admin).
|
||||
@@ -93,6 +99,18 @@ curl -X POST "https://yoursite.com/wp-json/oribi-sync/v1/sync?dry_run=1" \
|
||||
-H "X-WP-Nonce: <nonce>" \
|
||||
--cookie "wordpress_logged_in_...=..."
|
||||
|
||||
# Push a single page
|
||||
curl -X POST https://yoursite.com/wp-json/oribi-sync/v1/push \
|
||||
-H "X-WP-Nonce: <nonce>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"post_id": 123}' \
|
||||
--cookie "wordpress_logged_in_...=..."
|
||||
|
||||
# Push all synced pages
|
||||
curl -X POST https://yoursite.com/wp-json/oribi-sync/v1/push-all \
|
||||
-H "X-WP-Nonce: <nonce>" \
|
||||
--cookie "wordpress_logged_in_...=..."
|
||||
|
||||
# Get status
|
||||
curl https://yoursite.com/wp-json/oribi-sync/v1/status \
|
||||
-H "X-WP-Nonce: <nonce>" \
|
||||
@@ -131,6 +149,9 @@ Set up a webhook on your Git host to trigger syncs on push:
|
||||
| File removed from `pages/` | Move corresponding WP page to Trash |
|
||||
| New file in `theme/` | Available for preview & manual apply |
|
||||
| Changed file in `theme/` | Available for preview & manual apply |
|
||||
| **Push:** page not in repo | Create `.php` file on target branch |
|
||||
| **Push:** page in repo, no conflict | Update `.php` file on target branch |
|
||||
| **Push:** page in repo, SHA conflict | Create branch `oribi-sync/{slug}-{timestamp}`, commit, open PR |
|
||||
|
||||
## Requirements
|
||||
|
||||
|
||||
Reference in New Issue
Block a user