chore: initial snapshot of 2meet-data-optimizer-hub-addon v0.1.0

Baseline before backporting wp-data-optimizer v3.0.1-v3.4.6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TbG1keQQ7XBa7qMQY16KCY
This commit is contained in:
2026-07-31 05:06:36 +08:00
commit 7f788cb4dc
15 changed files with 2711 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
<?php
/**
* Bootstrap for 2meet Data Optimizer Hub AddOn.
*
* 負責 hub-core 對 2meet-data-optimizer 反 EAV 引擎的 schema 整合:
* - 註冊 `_2meet_global_vendor_id` postmeta 到 cold zone (hp_vendor)
* - 將 hub-core 12 張自訂表註冊到 TMDO Custom Table Registry(享有 doctor + drift 偵測)
*
* @package TMDO_HUB
* @since 0.1.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
require_once TMDO_HUB_PATH . 'includes/class-tmdo-hub-vendor-field.php';
require_once TMDO_HUB_PATH . 'includes/class-tmdo-hub-custom-tables.php';
final class TMDO_Hub_Bootstrap {
public static function init(): void {
if ( ! class_exists( 'TMDO_API' ) && ! class_exists( 'WPDO_API' ) ) {
add_action( 'admin_notices', array( __CLASS__, 'missing_core_notice' ) );
return;
}
load_plugin_textdomain(
'tmdo-hub',
false,
dirname( plugin_basename( TMDO_HUB_FILE ) ) . '/languages'
);
// 接 tmdo_* 與 wpdo_* 雙向相容(核心 dual-fire 已配對,但這裡兩邊掛 callback 不會重複觸發
// — class 內部以 static $registered guard 確保 idempotent)。
add_action( 'tmdo_register_fields', array( 'TMDO_Hub_Vendor_Field', 'register' ), 10, 1 );
add_action( 'wpdo_register_fields', array( 'TMDO_Hub_Vendor_Field', 'register' ), 10, 1 );
add_action( 'tmdo_register_custom_tables', array( 'TMDO_Hub_Custom_Tables', 'register' ), 10, 1 );
add_action( 'wpdo_register_custom_tables', array( 'TMDO_Hub_Custom_Tables', 'register' ), 10, 1 );
}
public static function missing_core_notice(): void {
echo '<div class="notice notice-error"><p>';
echo esc_html__( '2meet Data Optimizer Hub AddOn 需要 2meet-data-optimizer 核心外掛,請先安裝並啟用。', 'tmdo-hub' );
echo '</p></div>';
}
}
+100
View File
@@ -0,0 +1,100 @@
<?php
/**
* Register 12 hub-core custom tables to TMDO Custom Table Registry.
*
* 從 2meet-hub-core/includes/class-tmhc-plugin.php:222-245 抽出。
* 表 schema 定義仍由 hub-core 擁有(透過 tmhc_get_table_suffixes() 等 helper 取得)。
*
* @package TMDO_HUB
* @since 0.1.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
final class TMDO_Hub_Custom_Tables {
private static bool $registered = false;
/**
* Hub 12 表清單(fallback 當 tmhc_get_table_suffixes 不可用時)。
*/
private const FALLBACK_SUFFIXES = array(
'2mhc_oauth_clients',
'2mhc_oauth_auth_codes',
'2mhc_oauth_access_tokens',
'2mhc_oauth_refresh_tokens',
'2mhc_oauth_slo_state',
'2mhc_user_identities',
'2mhc_vendor_sites',
'2mhc_aggregated_services',
'2mhc_brand_pages',
'2mhc_audit_log',
'2mhc_sync_inbox',
'2mhc_rate_limits',
);
/**
* Register tables to TMDO Custom Table Registry.
*
* @param object $registry TMDO_Custom_Table_Registry / WPDO_Custom_Table_Registry instance.
*/
public static function register( $registry ): void {
if ( self::$registered ) {
return;
}
if ( ! is_object( $registry ) || ! method_exists( $registry, 'register' ) ) {
return;
}
$suffixes = self::get_suffixes();
$expected_columns = self::get_expected_columns_safe();
$expected_indexes = self::get_expected_indexes_safe();
foreach ( $suffixes as $suffix ) {
$registry->register(
'2meet-data-optimizer-hub-addon',
array(
'table_name' => $suffix,
'primary_key' => 'id',
'expected_columns' => $expected_columns[ $suffix ] ?? array(),
'indexes' => $expected_indexes[ $suffix ] ?? array(),
'description' => '2meet Hub Core 自訂表:' . $suffix,
)
);
}
self::$registered = true;
}
private static function get_suffixes(): array {
if ( function_exists( 'tmhc_get_table_suffixes' ) ) {
$out = tmhc_get_table_suffixes();
if ( is_array( $out ) && ! empty( $out ) ) {
return $out;
}
}
return self::FALLBACK_SUFFIXES;
}
private static function get_expected_columns_safe(): array {
if ( class_exists( 'TMHC_Plugin' ) && method_exists( 'TMHC_Plugin', 'get_expected_columns' ) ) {
$reflection = new ReflectionMethod( 'TMHC_Plugin', 'get_expected_columns' );
if ( $reflection->isStatic() && $reflection->isPublic() ) {
return TMHC_Plugin::get_expected_columns();
}
}
return array();
}
private static function get_expected_indexes_safe(): array {
if ( class_exists( 'TMHC_Plugin' ) && method_exists( 'TMHC_Plugin', 'get_expected_indexes' ) ) {
$reflection = new ReflectionMethod( 'TMHC_Plugin', 'get_expected_indexes' );
if ( $reflection->isStatic() && $reflection->isPublic() ) {
return TMHC_Plugin::get_expected_indexes();
}
}
return array();
}
}
+43
View File
@@ -0,0 +1,43 @@
<?php
/**
* Hub vendor postmeta field registration.
*
* 從 2meet-hub-core/includes/class-tmhc-plugin.php:204-213 抽出。
*
* @package TMDO_HUB
* @since 0.1.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
final class TMDO_Hub_Vendor_Field {
private static bool $registered = false;
/**
* Register `_2meet_global_vendor_id` to cold zone for hp_vendor post type.
*
* @param object $registry TMDO_Schema_Registry / WPDO_Schema_Registry instance.
*/
public static function register( $registry ): void {
if ( self::$registered ) {
return;
}
if ( ! is_object( $registry ) || ! method_exists( $registry, 'register' ) ) {
return;
}
$registry->register(
'2meet-data-optimizer-hub-addon',
array(
'meta_key' => '_2meet_global_vendor_id',
'post_type' => 'hp_vendor',
'zone' => 'cold',
'data_type' => 'bigint',
'indexed' => true,
)
);
self::$registered = true;
}
}