- 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.
53 lines
2.6 KiB
PHP
53 lines
2.6 KiB
PHP
<?php
|
|
/**
|
|
* Plugin Name: Oribi Tech Sync
|
|
* Description: Sync WordPress pages and theme files from a remote Git repository. Configure a repo URL + PAT, then sync on command via admin UI or REST API.
|
|
* Version: 1.0.0
|
|
* Author: Oribi Technology Services
|
|
* Requires at least: 6.0
|
|
* Requires PHP: 7.4
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) exit;
|
|
|
|
define( 'ORIBI_SYNC_VERSION', '1.0.0' );
|
|
define( 'ORIBI_SYNC_DIR', plugin_dir_path( __FILE__ ) );
|
|
define( 'ORIBI_SYNC_URL', plugin_dir_url( __FILE__ ) );
|
|
define( 'ORIBI_SYNC_BASENAME', plugin_basename( __FILE__ ) );
|
|
|
|
// ─── Includes ─────────────────────────────────────────────────────────────────
|
|
require_once ORIBI_SYNC_DIR . 'includes/crypto.php';
|
|
require_once ORIBI_SYNC_DIR . 'includes/api-client.php';
|
|
require_once ORIBI_SYNC_DIR . 'includes/sync-engine.php';
|
|
require_once ORIBI_SYNC_DIR . 'includes/push-client.php';
|
|
require_once ORIBI_SYNC_DIR . 'includes/admin.php';
|
|
require_once ORIBI_SYNC_DIR . 'includes/rest.php';
|
|
require_once ORIBI_SYNC_DIR . 'includes/theme-preview.php';
|
|
|
|
// ─── Activation / Deactivation ────────────────────────────────────────────────
|
|
register_activation_hook( __FILE__, 'oribi_sync_activate' );
|
|
register_deactivation_hook( __FILE__, 'oribi_sync_deactivate' );
|
|
|
|
function oribi_sync_activate() {
|
|
// Ensure default options exist
|
|
add_option( 'oribi_sync_repo', '', '', 'no' );
|
|
add_option( 'oribi_sync_branch', 'main', '', 'no' );
|
|
add_option( 'oribi_sync_provider', '', '', 'no' );
|
|
add_option( 'oribi_sync_pat', '', '', 'no' );
|
|
add_option( 'oribi_sync_last_run', '', '', 'no' );
|
|
add_option( 'oribi_sync_log', [], '', 'no' );
|
|
}
|
|
|
|
function oribi_sync_deactivate() {
|
|
wp_clear_scheduled_hook( 'oribi_sync_cron_run' );
|
|
}
|
|
|
|
// ─── Uninstall (static, called by WP) ─────────────────────────────────────────
|
|
// See uninstall.php for full cleanup.
|
|
|
|
// ─── Plugin action links ──────────────────────────────────────────────────────
|
|
add_filter( 'plugin_action_links_' . ORIBI_SYNC_BASENAME, function ( $links ) {
|
|
$links[] = '<a href="' . esc_url( admin_url( 'options-general.php?page=oribi-sync' ) ) . '">Settings</a>';
|
|
return $links;
|
|
} );
|