=' ) ) { return; } self::activate(); } private static function create_purchase_table(): void { global $wpdb; $table_name = $wpdb->prefix . Constants::PURCHASE_TABLE_NAME; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE {$table_name} ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, session_id varchar(255) NOT NULL, payment_intent varchar(255) DEFAULT '' NOT NULL, article_id bigint(20) unsigned NOT NULL, purchaser_email varchar(190) DEFAULT '' NOT NULL, amount bigint(20) unsigned NOT NULL DEFAULT 0, currency varchar(10) DEFAULT 'usd' NOT NULL, gateway varchar(50) DEFAULT 'stripe' NOT NULL, status varchar(50) DEFAULT 'pending' NOT NULL, access_token varchar(255) DEFAULT '' NOT NULL, access_claimed_at datetime DEFAULT NULL, created_at datetime NOT NULL, updated_at datetime NOT NULL, PRIMARY KEY (id), UNIQUE KEY session_id (session_id), KEY article_id (article_id), KEY purchaser_email (purchaser_email), KEY access_token (access_token), KEY status (status) ) {$charset_collate};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); } private static function migrate_existing_access_claims(): void { global $wpdb; $table_name = $wpdb->prefix . Constants::PURCHASE_TABLE_NAME; $wpdb->query( "UPDATE {$table_name} SET access_claimed_at = updated_at WHERE status = 'paid' AND access_token <> '' AND access_claimed_at IS NULL" ); } }