get_charset_collate(); $connection_table = $wpdb->prefix . 'wppilot_connection'; $log_table = $wpdb->prefix . 'wppilot_log'; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( "CREATE TABLE {$connection_table} ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, site_id varchar(36) NOT NULL DEFAULT '', site_url varchar(255) NOT NULL DEFAULT '', secret varchar(128) NOT NULL DEFAULT '', callback_token_hash varchar(64) NOT NULL DEFAULT '', connected_user_id bigint(20) unsigned NOT NULL DEFAULT 0, jwt_token text NOT NULL, jwt_expires_at datetime DEFAULT NULL, connected tinyint(1) NOT NULL DEFAULT 0, created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ) {$charset};" ); dbDelta( "CREATE TABLE {$log_table} ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, level varchar(10) NOT NULL DEFAULT 'info', message text NOT NULL, context text DEFAULT NULL, created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY level_idx (level), KEY created_at_idx (created_at) ) {$charset};" ); } private static function backfill_connected_user(): void { global $wpdb; $connection_table = $wpdb->prefix . 'wppilot_connection'; $connection_id = $wpdb->get_var( "SELECT id FROM {$connection_table} WHERE connected = 1 AND connected_user_id = 0 ORDER BY id ASC LIMIT 1" ); if ( null === $connection_id ) { return; } $administrators = get_users( array( 'role' => 'administrator', 'orderby' => 'ID', 'order' => 'ASC', 'number' => 1, 'fields' => array( 'ID' ), ) ); if ( empty( $administrators ) ) { return; } $wpdb->update( $connection_table, array( 'connected_user_id' => (int) $administrators[0]->ID ), array( 'id' => (int) $connection_id ), array( '%d' ), array( '%d' ) ); } private static function set_defaults(): void { add_option( 'wppilot_connected', '0' ); add_option( 'wppilot_log_level', 'info' ); } }