options = get_option('mxchat_options', $this->get_default_options()); add_shortcode('mxchat_chatbot', array($this, 'render_chatbot_shortcode')); add_action('wp_footer', array($this, 'append_chatbot_to_body')); } private function get_default_options() { return array( 'user_message_bg_color' => '#fff', 'user_message_font_color' => '#212121', 'bot_message_bg_color' => '#212121', 'bot_message_font_color' => '#fff', 'live_agent_message_bg_color' => '#212121', 'live_agent_message_font_color' => '#fff', 'top_bar_bg_color' => '#212121', 'send_button_font_color' => '#212121', 'close_button_color' => '#fff', 'chatbot_bg_color' => '#fff', 'chatbot_background_color' => '#212121', 'icon_color' => '#fff', 'chat_input_font_color' => '#212121', 'mode_indicator_bg_color' => '#212121', 'mode_indicator_font_color' => '#fff', 'api_key' => '', 'system_prompt_instructions' => esc_html__('[EXAMPLE INSTRUCTIONS] You are an AI Chatbot assistant for this website. The primary subject you should focus on is [insert proper subject here]. Your main goal is to assist visitors with questions related to this specific topic. Here are some key things to keep in mind: - Your name is [Chatbot Name]. - Stay focused on topics related to [insert proper subject here]. If a visitor asks about an unrelated topic, politely redirect the conversation to how you can assist them with this subject. - Do not make up links to pages. Only use specific links you see in your knowledgebase from [insert your domain]. Do not make assumptions or make up URLs. - Keep your responses short, concise, and to the point. Provide clear and direct answers suitable for a chatbot interaction. - Provide answers based on the knowledge available to you. If you do not have an answer to a specific question, let the visitor know that you don’t have the information.', 'mxchat'), 'model' => 'gpt-3.5-turbo', 'rate_limit' => '100', 'rate_limit_message' => esc_html__('Rate limit exceeded. Please try again later.', 'mxchat'), 'top_bar_title' => esc_html__('MxChat: Basic', 'mxchat'), 'intro_message' => __('Hello! How can I assist you today?', 'mxchat'), 'append_to_body' => 'on', 'enable_email_block' => '', // Default to disabled ); } public function append_chatbot_to_body() { $options = get_option('mxchat_options', $this->get_default_options()); $consent_category = 'marketing'; if (isset($options['append_to_body']) && $options['append_to_body'] === 'on') { // Store consent status but always render $has_consent = true; if ( isset($options['complianz_toggle']) && $options['complianz_toggle'] === 'on' && function_exists('cmplz_has_consent') ) { $has_consent = cmplz_has_consent($consent_category); } // Add consent status as a parameter to the shortcode echo do_shortcode('[mxchat_chatbot floating="yes" has_consent="' . ($has_consent ? 'yes' : 'no') . '"]'); } } private function mxchat_get_user_identifier() { return sanitize_text_field($_SERVER['REMOTE_ADDR']); } public function render_chatbot_shortcode($atts) { $attributes = shortcode_atts(array( 'floating' => 'yes', 'has_consent' => 'yes' // Add default ), $atts); $is_floating = $attributes['floating'] === 'yes'; $this->options = get_option('mxchat_options', $this->get_default_options()); // Check for Complianz consent if the toggle is enabled $initial_visibility = 'hidden'; $additional_class = ''; if (isset($this->options['complianz_toggle']) && $this->options['complianz_toggle'] === 'on') { // If Complianz is enabled, add no-consent class by default $additional_class = ' no-consent'; } $visibility_class = $initial_visibility . $additional_class; $bg_color = $this->options['chatbot_background_color'] ?? '#fff'; $user_message_bg_color = $this->options['user_message_bg_color'] ?? '#fff'; $user_message_font_color = $this->options['user_message_font_color'] ?? '#212121'; $bot_message_bg_color = $this->options['bot_message_bg_color'] ?? '#212121'; $bot_message_font_color = $this->options['bot_message_font_color'] ?? '#fff'; $top_bar_bg_color = $this->options['top_bar_bg_color'] ?? '#212121'; $send_button_font_color = $this->options['send_button_font_color'] ?? '#212121'; $intro_message = $this->options['intro_message'] ?? esc_html__('Hello! How can I assist you today?', 'mxchat'); $top_bar_title = $this->options['top_bar_title'] ?? esc_html__('MxChat: Basic', 'mxchat'); $chatbot_background_color = $this->options['chatbot_background_color'] ?? '#212121'; $icon_color = $this->options['icon_color'] ?? '#fff'; $chat_input_font_color = $this->options['chat_input_font_color'] ?? '#212121'; $close_button_color = $this->options['close_button_color'] ?? '#fff'; $chatbot_bg_color = $this->options['chatbot_bg_color'] ?? '#fff'; $pre_chat_message = isset($this->options['pre_chat_message']) ? sanitize_text_field(trim($this->options['pre_chat_message'])) : ''; $user_id = sanitize_key($this->mxchat_get_user_identifier()); $transient_key = 'mxchat_pre_chat_message_dismissed_' . $user_id; $input_copy = isset($this->options['input_copy']) ? esc_attr($this->options['input_copy']) : esc_attr__('How can I assist?', 'mxchat'); $rate_limit_message = isset($this->options['rate_limit_message']) ? esc_attr($this->options['rate_limit_message']) : esc_attr__('Rate limit exceeded. Please try again later.', 'mxchat'); $mode_indicator_bg_color = $this->options['mode_indicator_bg_color'] ?? '#212121'; $mode_indicator_font_color = $this->options['mode_indicator_font_color'] ?? '#fff'; $privacy_toggle = isset($this->options['privacy_toggle']) && $this->options['privacy_toggle'] === 'on'; $privacy_text = isset($this->options['privacy_text']) ? wp_kses_post($this->options['privacy_text']) : wp_kses_post(__('By chatting, you agree to our privacy policy.', 'mxchat')); $popular_question_1 = isset($this->options['popular_question_1']) ? esc_html($this->options['popular_question_1']) : ''; $popular_question_2 = isset($this->options['popular_question_2']) ? esc_html($this->options['popular_question_2']) : ''; $popular_question_3 = isset($this->options['popular_question_3']) ? esc_html($this->options['popular_question_3']) : ''; $additional_questions = isset($this->options['additional_popular_questions']) ? $this->options['additional_popular_questions'] : []; $custom_icon = isset($this->options['custom_icon']) ? esc_url($this->options['custom_icon']) : ''; $title_icon = isset($this->options['title_icon']) ? esc_url($this->options['title_icon']) : ''; $ai_agent_text = isset($this->options['ai_agent_text']) ? esc_html($this->options['ai_agent_text']) : esc_html__('AI Agent', 'mxchat'); $live_agent_message_bg_color = $this->options['live_agent_message_bg_color'] ?? '#212121'; $live_agent_message_font_color = $this->options['live_agent_message_font_color'] ?? '#fff'; $enable_email_block = isset($this->options['enable_email_block']) && ($this->options['enable_email_block'] === '1' || $this->options['enable_email_block'] === 'on'); ob_start(); // Check if floating attribute is set to 'yes' and wrap accordingly if ($is_floating) { echo '