(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'];
}
?>