R2 Media Manager page) * @see includes/class-r2-ajax.php (AJAX batch + test-connection handlers) * * CHANGELOG * 1.0.0 — 2026-04-25 Initial release. Full CPO-spec implementation on top of WP * Offload Media Lite. Supersedes one-off migration script and * mu-plugin endpoint filter. */ if ( ! defined( 'ABSPATH' ) ) { exit; } define( 'PR_R2_VERSION', '1.1.0' ); define( 'PR_R2_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'PR_R2_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); define( 'PR_R2_PLUGIN_FILE', __FILE__ ); require_once PR_R2_PLUGIN_DIR . 'includes/class-r2-endpoint.php'; require_once PR_R2_PLUGIN_DIR . 'includes/class-r2-log.php'; require_once PR_R2_PLUGIN_DIR . 'includes/class-r2-admin-page.php'; require_once PR_R2_PLUGIN_DIR . 'includes/class-r2-ajax.php'; // Create log table on activation. Self-heals on every boot if table is missing. register_activation_hook( PR_R2_PLUGIN_FILE, [ 'PR_R2_Log', 'create_table' ] ); add_action( 'plugins_loaded', function () { global $wpdb; $table = $wpdb->prefix . 'pr_r2_log'; if ( $wpdb->get_var( "SHOW TABLES LIKE '{$table}'" ) !== $table ) { PR_R2_Log::create_table(); } }, 1 ); PR_R2_Endpoint::init(); PR_R2_Admin_Page::init(); PR_R2_Ajax::init();