WebMCP Forms registry. * * @package ModelGainWebmcpForms */ namespace ModelGain\WordPress\WebmcpForms; /** * Explicit per-form opt-in UI. */ final class Admin { /** * Property value. * * @var ContactForm7Adapter */ private $adapter; /** * Property value. * * @var Settings */ private $settings; /** * Perform the documented operation. * * @param ContactForm7Adapter $adapter Form adapter. * @param Settings $settings Settings store. */ public function __construct( ContactForm7Adapter $adapter, Settings $settings ) { $this->adapter = $adapter; $this->settings = $settings; } /** * Register the Tools page. * * @return void */ public function register() { add_management_page( __( 'WebMCP Forms', 'modelgain-webmcp-forms' ), __( 'WebMCP Forms', 'modelgain-webmcp-forms' ), 'manage_options', 'modelgain-webmcp-forms', array( $this, 'render' ) ); } /** * Render and process the registry. * * @return void */ public function render() { if ( ! current_user_can( 'manage_options' ) ) { wp_die( esc_html__( 'You do not have permission to manage WebMCP Forms.', 'modelgain-webmcp-forms' ) ); } $forms = $this->adapter->discover(); $saved = false; if ( isset( $_POST['modelgain_webmcp_forms_save'] ) ) { check_admin_referer( 'modelgain_webmcp_forms_save', 'modelgain_webmcp_forms_nonce' ); $posted_enabled = isset( $_POST['enabled'] ) && is_array( $_POST['enabled'] ) ? map_deep( wp_unslash( $_POST['enabled'] ), 'sanitize_text_field' ) : array(); $posted_tool_names = isset( $_POST['tool_name'] ) && is_array( $_POST['tool_name'] ) ? map_deep( wp_unslash( $_POST['tool_name'] ), 'sanitize_text_field' ) : array(); foreach ( $forms as $form ) { $form_id = $form->id(); $enabled = isset( $posted_enabled[ $form_id ] ); $tool_name = isset( $posted_tool_names[ $form_id ] ) ? sanitize_text_field( $posted_tool_names[ $form_id ] ) : ''; $this->settings->save_form( $form_id, $enabled && $form->is_compatible(), $tool_name ); } $saved = true; } $tool_name_conflicts = $this->settings->tool_name_conflicts( $forms ); if ( $saved ) { add_settings_error( 'modelgain_webmcp_forms', 'saved', __( 'WebMCP Forms settings saved.', 'modelgain-webmcp-forms' ), 'updated' ); } if ( ! empty( $tool_name_conflicts ) ) { add_settings_error( 'modelgain_webmcp_forms', 'tool-name-conflict', __( 'Two or more enabled forms use the same WebMCP tool name. Conflicting tools are blocked until every enabled form has a unique tool name.', 'modelgain-webmcp-forms' ), 'error' ); } settings_errors( 'modelgain_webmcp_forms' ); ?>