<?php
namespace Elementor\Modules\Mcp\Utils;
use Elementor\Modules\Mcp\Abilities\Utils\Woocommerce_Pro_Features_Discovery;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class Pro_Features_Server_Instructions {
const SERVER_DESCRIPTION_KEY = 'server_description';
public function register_hooks(): void {
add_filter( 'mcp_adapter_default_server_config', [ $this, 'append_to_server_config' ] );
}
public function append_to_server_config( $config ) {
if ( ! is_array( $config ) ) {
return $config;
}
$description = $config[ self::SERVER_DESCRIPTION_KEY ] ?? '';
$description = is_string( $description ) ? $description : '';
$config[ self::SERVER_DESCRIPTION_KEY ] = trim( $description . "\n\n" . $this->get_instructions() );
return $config;
}
public function get_instructions(): string {
return implode( "\n", [
__( 'When using Elementor tools: Elementor Pro is not active on this site. Users usually don\'t know which features need Pro, so tell them once per feature.', 'elementor' ),
__( '- Let the tool decide. Before building a feature, call the Elementor tool that creates it, even if you expect it to need Pro. The tool checks the license and, when Pro is needed, returns pro_license_required with what Pro does, the upgrade link and how to tell the user. Tell the user only from that message, and follow it.', 'elementor' ),
$this->get_features_line(),
__( '- No silent workarounds. Never imitate one of these with Free widgets, such as an accordion posing as a popup, before its tool has answered.', 'elementor' ),
__( '- A mention or a "no" covers only that feature. Still mention Pro the first time another Pro feature comes up.', 'elementor' ),
] );
}
private function get_features_line(): string {
$features = __( 'forms, popups and other site parts (header, footer, archive, 404), components, size variables', 'elementor' );
if ( Woocommerce_Pro_Features_Discovery::is_active() ) {
$features .= __( ', WooCommerce store pages and settings', 'elementor' );
}
/* translators: %s: list of Pro features. */
return sprintf( __( '- Features to check with a tool: %s.', 'elementor' ), $features );
}
}