(string) $faq['question'], 'keywords' => isset( $faq['keywords'] ) ? (string) $faq['keywords'] : '', 'answer' => (string) $faq['answer'], ); } $contact = array( 'show' => $settings['contact_show'], 'call' => '' !== $settings['call_number'] ? array( 'label' => '' !== $settings['call_label'] ? $settings['call_label'] : $defaults['call_label'], 'url' => 'tel:' . $settings['call_number'], ) : null, 'callback' => ! empty( $settings['callback'] ) ? array( 'label' => '' !== $settings['callback_label'] ? $settings['callback_label'] : $defaults['callback_label'], ) : null, 'whatsapp' => '' !== $settings['whatsapp_number'] ? array( 'label' => '' !== $settings['whatsapp_label'] ? $settings['whatsapp_label'] : $defaults['whatsapp_label'], 'number' => $settings['whatsapp_number'], 'text' => $settings['whatsapp_text'], ) : null, ); $data = array( 'restUrl' => esc_url_raw( rest_url( AVCA_REST_NAMESPACE . '/' ) ), 'contact' => $contact, 'welcome' => $settings['welcome'], 'fallback' => '' !== $settings['fallback'] ? $settings['fallback'] : $defaults['fallback'], 'faqs' => $faqs, 'maxSuggestions' => (int) $settings['max_suggestions'], 'quickLinks' => avca_parse_quick_links( $settings['quick_links'] ), 'siteSearch' => ! empty( $settings['site_search'] ) && ! empty( $settings['search_types'] ), 'leadForm' => ! empty( $settings['lead_form'] ), 'leadPhone' => ! empty( $settings['lead_phone'] ), 'leadPrompt' => '' !== $settings['lead_prompt'] ? $settings['lead_prompt'] : $defaults['lead_prompt'], 'leadButton' => '' !== $settings['lead_button'] ? $settings['lead_button'] : $defaults['lead_button'], 'leadThanks' => '' !== $settings['lead_thanks'] ? $settings['lead_thanks'] : $defaults['lead_thanks'], 'logUnanswered' => ! empty( $settings['log_unanswered'] ), 'autoOpen' => (int) $settings['auto_open'], 'i18n' => array( 'typing' => __( 'Typing…', 'avi-support-assistant' ), 'open' => '' !== $settings['tooltip'] ? $settings['tooltip'] : $defaults['tooltip'], 'close' => __( 'Close chat', 'avi-support-assistant' ), 'searchIntro' => __( 'I found these pages that may help:', 'avi-support-assistant' ), 'name' => __( 'Your name', 'avi-support-assistant' ), 'email' => __( 'Email address', 'avi-support-assistant' ), 'phone' => __( 'Phone (optional)', 'avi-support-assistant' ), 'message' => __( 'How can we help?', 'avi-support-assistant' ), 'send' => __( 'Send', 'avi-support-assistant' ), 'sending' => __( 'Sending…', 'avi-support-assistant' ), 'required' => __( 'Please enter your name and a valid email address.', 'avi-support-assistant' ), 'error' => __( 'Sorry, something went wrong. Please try again.', 'avi-support-assistant' ), 'leaveDetails' => __( 'I would like to leave my details.', 'avi-support-assistant' ), 'callbackAsk' => __( 'I would like a callback.', 'avi-support-assistant' ), 'callbackIntro' => __( 'Sure! Share your number and a good time to call, and our team will call you back.', 'avi-support-assistant' ), 'phoneNeeded' => __( 'Phone number', 'avi-support-assistant' ), 'bestTime' => __( 'Best time to call (optional)', 'avi-support-assistant' ), 'callbackDone' => __( 'Thank you! We will call you back soon.', 'avi-support-assistant' ), 'needPhone' => __( 'Please enter your name and phone number.', 'avi-support-assistant' ), ), ); /** * Filter the data passed to the chat script. Used by the Pro add-on. * * @param array $data Script data. * @param array $settings Plugin settings. */ return apply_filters( 'avca_script_data', $data, $settings ); } /** * Register front-end assets. */ function avca_register_assets() { wp_register_style( 'avca-frontend', AVCA_URL . 'assets/css/frontend.css', array(), AVCA_VERSION ); wp_register_script( 'avca-frontend', AVCA_URL . 'assets/js/frontend.js', array(), AVCA_VERSION, true ); } add_action( 'wp_enqueue_scripts', 'avca_register_assets', 5 ); /** * Enqueue front-end assets once. */ function avca_enqueue_assets() { static $done = false; if ( $done ) { return; } $done = true; if ( ! wp_script_is( 'avca-frontend', 'registered' ) ) { avca_register_assets(); } wp_enqueue_style( 'avca-frontend' ); wp_enqueue_script( 'avca-frontend' ); wp_add_inline_script( 'avca-frontend', 'var avcaData = ' . wp_json_encode( avca_get_script_data() ) . ';', 'before' ); } /** * Enqueue assets when the floating widget will be shown. */ function avca_maybe_enqueue_assets() { if ( avca_should_display() ) { avca_enqueue_assets(); } } add_action( 'wp_enqueue_scripts', 'avca_maybe_enqueue_assets' ); /** * Default robot mascot SVG (original artwork). * * @return string */ function avca_get_robot_svg() { return ''; } /** * Chat bubble icon SVG. * * @return string */ function avca_get_chat_svg() { return ''; } /** * Allowed HTML for icons. * * @return array */ function avca_icon_allowed_html() { $shape = array( 'fill' => true, 'stroke' => true, 'stroke-width' => true, 'stroke-linecap' => true, 'stroke-linejoin' => true, ); return array( 'img' => array( 'src' => true, 'alt' => true, ), 'svg' => array( 'viewbox' => true, 'aria-hidden' => true, 'focusable' => true, ), 'line' => array_merge( $shape, array( 'x1' => true, 'y1' => true, 'x2' => true, 'y2' => true, ) ), 'circle' => array_merge( $shape, array( 'cx' => true, 'cy' => true, 'r' => true, ) ), 'rect' => array_merge( $shape, array( 'x' => true, 'y' => true, 'width' => true, 'height' => true, 'rx' => true, ) ), 'path' => array_merge( $shape, array( 'd' => true ) ), ); } /** * Echo an icon safely. * * @param string $html Icon markup. */ function avca_echo_icon( $html ) { echo wp_kses( $html, avca_icon_allowed_html() ); } /** * Bot icon markup: uploaded image if set, otherwise the built-in robot. * * @param array $settings Plugin settings. * @return string */ function avca_get_bot_icon_html( $settings ) { if ( '' !== $settings['bot_icon'] ) { return ''; } return avca_get_robot_svg(); } /** * Render a chat instance. * * @param string $mode 'floating' or 'inline'. */ function avca_render_chat( $mode ) { static $instance = 0; ++$instance; $settings = avca_get_settings(); $defaults = avca_get_defaults(); $floating = 'floating' === $mode; $label = '' !== $settings['tooltip'] ? $settings['tooltip'] : $defaults['tooltip']; $bot_name = '' !== $settings['bot_name'] ? $settings['bot_name'] : $defaults['bot_name']; $color = sanitize_hex_color( $settings['color'] ); $color = $color ? $color : $defaults['color']; $icon = avca_get_bot_icon_html( $settings ); $panel_id = 'avca-panel-' . $instance; $input_id = 'avca-input-' . $instance; $classes = array( 'avca-root', 'avca-root--' . $mode, 'avca-theme-' . $settings['theme'], ); if ( $floating ) { $classes[] = 'avca-pos-' . $settings['position']; $classes[] = 'avca-launcher-' . $settings['launcher']; $classes[] = 'avca-devices-' . $settings['devices']; } ?>
>