PluginProbe
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services / 8.7.6
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services v8.7.6
8.7.6 8.7.5 8.7.4 8.7.3 8.7.2 8.7.1 8.7.0 8.6.9 8.6.8 8.6.7 8.6.6 8.6.5 8.6.4 8.6.2 8.6.1 8.6.0 8.5.9 8.5.8 8.5.7 8.5.6 8.5.5 8.5.4 8.5.3 8.5.2 8.5.0 All 532 releases
← All changes | functions.php +2080 -2007 8.7.08.7.6 View file →
@@ -1,2007 +1,2080 @@
1 -<?php
2 -/**
3 - * @param $type
4 - * Display wpwBot Icon ball
5 - */
6 -if (!defined('ABSPATH')) exit; // Exit if accessed directly
7 -
8 -
9 -function qcld_custom_search_form( $form ) {
10 - // Add a hidden input to limit search to 'product' post type
11 - if (get_option('wp_chatbot_agent_image') == "custom-agent.png") {
12 - $wp_chatbot_custom_agent_path = get_option('wp_chatbot_custom_agent_path');
13 - } else if (get_option('wp_chatbot_agent_image') != "custom-agent.png") {
14 - $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
15 - } else {
16 - $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
17 - }
18 - $hidden_field = '<a class="wp-chatbot qc_wpbot_chat_link" id="wp-chatbot-search-btn" data-search-type="product" data-search-term="" style="max-height: 50px; margin-left: 10px;padding: 0 !important;position: absolute;top: -9px;right: -60px;"><img src="'. esc_url($wp_chatbot_custom_agent_path) .'" alt=""></a>';
19 - $block_content = str_replace( '</form>', $hidden_field . '</form>', $form );
20 - return $block_content;
21 -}
22 -if(get_option('wpbot_enable_on_search') == 1 && (get_option('disable_floating_button') != '1') && get_option('disable_wp_chatbot') != 1 ){
23 - add_filter( 'get_search_form', 'qcld_custom_search_form' );
24 - add_filter( 'render_block_core/search', 'qcld_modify_gutenberg_search_block', 10, 2 );
25 -}
26 -
27 -
28 -function qcld_modify_gutenberg_search_block( $block_content, $block ) {
29 - // Add a hidden input to limit search to 'product' post type
30 - if (get_option('wp_chatbot_agent_image') == "custom-agent.png") {
31 - $wp_chatbot_custom_agent_path = get_option('wp_chatbot_custom_agent_path');
32 - } else if (get_option('wp_chatbot_agent_image') != "custom-agent.png") {
33 - $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
34 - } else {
35 - $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
36 - }
37 - $hidden_field = '<button type="button" class="wp-chatbot qc_wpbot_chat_link" id="wp-chatbot-search-btn" data-search-type="product" data-search-term="" style="max-height: 50px; margin-left: 10px;padding: 0 !important"><img src="'. esc_url($wp_chatbot_custom_agent_path) .'" alt=""></button>';
38 - // Inject the hidden field before the closing </form> tag
39 - $block_content = str_replace( '</div></form>', $hidden_field . '</div></form>', $block_content );
40 - return $block_content;
41 -}
42 -if(get_option('disable_floating_button') != '1'){
43 - add_action('wp_footer', 'wp_chatbot_load_footer_html');
44 -}
45 -add_action( 'admin_footer', 'qcld_style_for_hide_iframe');
46 -function qcld_style_for_hide_iframe(){
47 -?>
48 - <script>
49 - jQuery( document ).ready(function() {
50 - setInterval(function(){
51 - if(document.querySelector('.wp-block-legacy-widget__edit-preview-iframe')){
52 - document.querySelector('.wp-block-legacy-widget__edit-preview-iframe').addEventListener("load", ev => {
53 - jQuery('.wp-block-legacy-widget__edit-preview-iframe').contents().find('#wp-chatbot-chat-container').hide();
54 - });
55 -
56 - }
57 - }, 500);
58 - });
59 - </script>
60 -<?php
61 -}
62 -/**
63 - * Extract a YouTube video ID from common URL formats.
64 - *
65 - * @param string $url YouTube watch, embed, short, or youtu.be URL.
66 - * @return string Video ID or empty string.
67 - */
68 -if ( ! function_exists( 'qcld_wpbot_extract_youtube_id' ) ) {
69 - function qcld_wpbot_extract_youtube_id( $url ) {
70 - $url = trim( (string) $url );
71 - if ( $url === '' ) {
72 - return '';
73 - }
74 -
75 - if ( preg_match( '/(?:youtube\.com\/(?:embed\/|shorts\/|live\/|watch\?(?:.*&)?v=)|youtu\.be\/)([A-Za-z0-9_-]{11})/', $url, $matches ) ) {
76 - return $matches[1];
77 - }
78 -
79 - $path = (string) wp_parse_url( $url, PHP_URL_PATH );
80 - $base = basename( $path );
81 - if ( preg_match( '/^[A-Za-z0-9_-]{11}$/', $base ) ) {
82 - return $base;
83 - }
84 -
85 - return '';
86 - }
87 -}
88 -if ( ! function_exists( 'qcld_wpbot_youtube_icon_embed_src' ) ) {
89 - function qcld_wpbot_youtube_icon_embed_src( $url ) {
90 - $video_id = qcld_wpbot_extract_youtube_id( $url );
91 - if ( $video_id === '' ) {
92 - return '';
93 - }
94 -
95 - return add_query_arg(
96 - array(
97 - 'autoplay' => '1',
98 - 'mute' => '1',
99 - 'loop' => '1',
100 - 'playlist' => $video_id,
101 - 'controls' => '0',
102 - 'showinfo' => '0',
103 - 'rel' => '0',
104 - 'fs' => '0',
105 - 'iv_load_policy' => '3',
106 - 'cc_load_policy' => '0',
107 - 'disablekb' => '1',
108 - 'playsinline' => '1',
109 - 'modestbranding' => '1',
110 - 'color' => 'white',
111 - ),
112 - 'https://www.youtube.com/embed/' . rawurlencode( $video_id )
113 - );
114 - }
115 -}
116 -function wp_chatbot_load_footer_html(){
117 - if ( get_option('disable_wp_chatbot') != 1 && wp_chatbot_load_controlling() === true) {
118 -
119 - ?>
120 - <style>
121 - <?php if(get_option('wp_chatbot_custom_css')!="") {
122 -
123 - echo wp_strip_all_tags( get_option('wp_chatbot_custom_css') );// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
124 - }
125 - ?>
126 - </style>
127 -
128 - <?php if (get_option('qcld_wb_chatbot_change_bg') == 1) {
129 - if (get_option('qcld_wb_chatbot_board_bg_path') != "") {
130 - $qcld_wb_chatbot_board_bg_path = get_option('qcld_wb_chatbot_board_bg_path');
131 - } else {
132 - $qcld_wb_chatbot_board_bg_path = QCLD_wpCHATBOT_IMG_URL . 'background/background.png';
133 - }
134 - ?>
135 - <style>
136 - .wp-chatbot-container {
137 - background-image: url(<?php echo esc_url($qcld_wb_chatbot_board_bg_path); ?>) !important;
138 - }
139 - </style>
140 - <?php }
141 - $wp_chatbot_enable_rtl = "";
142 - if (get_option('enable_wp_chatbot_rtl') == '1') {
143 - $wp_chatbot_enable_rtl .= "wp-chatbot-rtl";
144 - }
145 - $wp_chatbot_enable_mobile_screen = "";
146 - // if (get_option('enable_wp_chatbot_mobile_full_screen')==1) {
147 - $wp_chatbot_enable_mobile_screen .= "wp-chatbot-mobile-full-screen";
148 - // }
149 - ?>
150 - <div id="wp-chatbot-chat-container" class="<?php echo esc_attr($wp_chatbot_enable_rtl .' '.$wp_chatbot_enable_mobile_screen); ?>" style="<?php if(get_option('disable_floating_button') == '1'){ echo 'display:none';} ?>">
151 - <div id="wp-chatbot-integration-container">
152 - <div class="wp-chatbot-integration-button-container">
153 - <?php if (get_option('enable_wp_chatbot_skype_floating_icon') == 1) { ?>
154 - <a href="skype:<?php echo esc_attr(get_option('enable_wp_chatbot_skype_id')); ?>?chat"><span
155 - class="inetegration-skype-btn" title="<?php esc_attr_e('Skype', 'chatbot'); ?>"> </span></a>
156 - <?php } ?>
157 - <?php if (get_option('enable_wp_chatbot_floating_whats') == 1) { ?>
158 - <a href="<?php echo esc_url('https://api.whatsapp.com/send?phone=' . get_option('qlcd_wp_chatbot_whats_num')); ?>"
159 - target="_blank"><span class="intergration-whats"
160 - title="<?php esc_html_e('WhatsApp', 'chatbot'); ?>"></span></a>
161 - <?php } ?>
162 - <?php if (get_option('enable_wp_chatbot_floating_viber') == 1) { ?>
163 - <a href="<?php echo esc_url('https://live.viber.com/#/' . get_option('qlcd_wp_chatbot_viber_acc')); ?>"
164 - target="_blank"><span class="intergration-viber"
165 - title="<?php esc_html_e('Viber', 'chatbot'); ?>"></span></a>
166 - <?php } ?>
167 - <?php if (get_option('enable_wp_chatbot_floating_phone') == 1 && get_option('qlcd_wp_chatbot_phone') != "") { ?>
168 - <a href="tel:<?php echo esc_attr(get_option('qlcd_wp_chatbot_phone')); ?>"><span
169 - class="intergration-phone"
170 - title="<?php esc_html_e('Phone', 'chatbot'); ?>"> </span></a>
171 - <?php } ?>
172 - <?php if (get_option('enable_wp_chatbot_floating_link') == 1 && get_option('qlcd_wp_chatbot_weblink') != "") { ?>
173 - <a href="<?php echo esc_url(get_option('qlcd_wp_chatbot_weblink')); ?>" target="_blank"><span
174 - class="intergration-weblink" title="<?php esc_html_e('Web Link', 'chatbot'); ?>"></span></a>
175 - <?php } ?>
176 - </div>
177 - </div>
178 - <?php
179 - //Get wpcommerce cart
180 -
181 - $qcld_wb_chatbot_theme = get_option('qcld_wb_chatbot_theme');
182 - if (file_exists(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . '/templates/' . $qcld_wb_chatbot_theme . '/style.css')) {
183 - wp_register_style('qcld-wp-chatbot-style', plugins_url(basename(plugin_dir_path(__FILE__)) . '/templates/' . $qcld_wb_chatbot_theme . '/style.css', basename(__FILE__)), '', QCLD_wpCHATBOT_VERSION, 'screen');
184 - wp_enqueue_style('qcld-wp-chatbot-style');
185 - }
186 - if (file_exists(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . '/templates/' . $qcld_wb_chatbot_theme . '/template.php')) {
187 - require_once(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . '/templates/' . $qcld_wb_chatbot_theme . '/template.php');
188 - } else {
189 - echo "<h2>" . esc_html__('No wpWBot Theme Found!', 'chatbot') . "</h2>";
190 - }
191 - ?>
192 - <?php
193 - if (get_option('disable_wp_chatbot_notification') != 1) {
194 - ?>
195 - <div id="wp-chatbot-notification-container" class="wp-chatbot-notification-container">
196 - <div class="wp-chatbot-notification-controller">
197 - <span class="wp-chatbot-notification-close">
198 - <?php esc_html_e('X', 'chatbot'); ?>
199 - </span>
200 - </div>
201 - <?php
202 - $testingTip="";
203 - if (get_option('wp_chatbot_agent_image') == "custom-agent.png") {
204 - $wp_chatbot_custom_agent_path = get_option('wp_chatbot_custom_agent_path');
205 - } else if (get_option('wp_chatbot_agent_image') != "custom-agent.png") {
206 - $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
207 - } else {
208 - $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
209 - }
210 - ?>
211 - <div class="wp-chatbot-notification-agent-profile">
212 - <div class="wp-chatbot-notification-widget-avatar" ><img
213 - src="<?php echo esc_url($wp_chatbot_custom_agent_path); ?>" alt=""></div>
214 - <div class="wp-chatbot-notification-welcome"><?php echo wp_kses_post(wpb_randmom_message_handle(maybe_unserialize(get_option('qlcd_wp_chatbot_welcome')))) . ' <strong>' . esc_html(get_option('qlcd_wp_chatbot_host')) . '</strong>'; ?></div>
215 - </div>
216 - <?php
217 - //update_option('qlcd_wp_chatbot_notifications','Welcome to WpBot');
218 - $notifications = qcld_wb_chatbot_func_str_replace(wp_kses_post(maybe_unserialize(get_option('qlcd_wp_chatbot_notifications'))));
219 -
220 - ?>
221 -
222 - <div class="wp-chatbot-notification-message"><?php echo esc_html($notifications[0]); ?></div>
223 - </div>
224 - <?php } ?>
225 - <!--wp-chatbot-board-container-->
226 - <div id="wp-chatbot-ball" class="">
227 - <div class="wp-chatbot-ball">
228 - <div class="wp-chatbot-ball-animator wp-chatbot-ball-animation-switch"></div>
229 - <?php
230 - if (get_option('wp_chatbot_icon') == "custom.png") {
231 - $wp_chatbot_custom_icon_path = (!empty(get_option('wp_chatbot_custom_icon_path'))) ? get_option('wp_chatbot_custom_icon_path') : QCLD_wpCHATBOT_IMG_URL . 'icon-1.png';
232 -
233 - } else if (get_option('wp_chatbot_icon') != "custom.png") {
234 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_icon');
235 - } else {
236 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom.png';
237 - }
238 - $_wpbot_icon_video = get_option('wp_chatbot_icon_video', '');
239 - $_wpbot_video_is_youtube = ( strpos( $_wpbot_icon_video, 'youtube.com' ) !== false || strpos( $_wpbot_icon_video, 'youtu.be' ) !== false );
240 - $_wpbot_youtube_embed_src = $_wpbot_video_is_youtube ? qcld_wpbot_youtube_icon_embed_src( $_wpbot_icon_video ) : '';
241 - $_wpbot_video_delay_ms = absint( get_option( 'wp_chatbot_icon_video_delay', 0 ) ) * 1000;
242 -
243 - $wp_chatbot_ball_is_youtube = ($_wpbot_icon_video !== '' && (strpos($_wpbot_icon_video, 'youtube.com') !== false || strpos($_wpbot_icon_video, 'youtu.be') !== false));
244 - $wp_chatbot_ball_is_video = ($_wpbot_icon_video !== '' && !$wp_chatbot_ball_is_youtube);
245 - $wp_chatbot_ball_has_video = ($wp_chatbot_ball_is_youtube || $wp_chatbot_ball_is_video);
246 - ?>
247 - <img src="<?php echo esc_url($wp_chatbot_custom_icon_path); ?>"
248 - alt="wpChatIcon" qcld_agent="<?php echo esc_url($wp_chatbot_custom_icon_path); ?>"
249 - id="wp-chatbot-ball-icon-img"
250 - <?php if ($wp_chatbot_ball_has_video) { echo 'style="display:none;"'; } ?> >
251 - <?php if ( $_wpbot_icon_video !== '' ) : ?>
252 - <?php if ( $_wpbot_video_is_youtube && $_wpbot_youtube_embed_src !== '' ) : ?>
253 - <iframe class="wpbot-icon-video" src="<?php echo $_wpbot_video_delay_ms > 0 ? 'about:blank' : esc_url( $_wpbot_youtube_embed_src ); ?>" data-wpbot-yt-src="<?php echo esc_url( $_wpbot_youtube_embed_src ); ?>" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture"></iframe>
254 - <?php elseif ( ! $_wpbot_video_is_youtube ) : ?>
255 - <video class="wpbot-icon-video" src="<?php echo esc_url( $_wpbot_icon_video ); ?>" autoplay muted loop playsinline preload="auto"></video>
256 - <?php endif; ?>
257 - <?php endif; ?>
258 - </div>
259 -
260 - </div>
261 - <?php
262 - if ( $_wpbot_icon_video !== '' ) :
263 - ?>
264 - <script>
265 - (function(){
266 - var wpbotDelay = <?php echo (int) $_wpbot_video_delay_ms; ?>;
267 - function wpbotForcePlay(){
268 - var v = document.querySelector('#wp-chatbot-ball video.wpbot-icon-video');
269 - if( v ){
270 - v.muted = true;
271 - v.volume = 0;
272 - v.loop = true;
273 - var tries = 0, maxTries = 30;
274 - var timer = setInterval(function(){
275 - tries++;
276 - v.play().then(function(){ clearInterval(timer); }).catch(function(){});
277 - if( tries >= maxTries ) clearInterval(timer);
278 - }, 300);
279 - }
280 - var yt = document.querySelector('#wp-chatbot-ball iframe.wpbot-icon-video');
281 - if( yt ){
282 - var ytSrc = yt.getAttribute('data-wpbot-yt-src');
283 - if( ytSrc && ( !yt.getAttribute('src') || yt.getAttribute('src') === 'about:blank' || yt.getAttribute('src').indexOf('autoplay=1') === -1 ) ){
284 - yt.setAttribute('src', ytSrc);
285 - }
286 - }
287 - }
288 - function wpbotDelayedPlay(){
289 - setTimeout(wpbotForcePlay, wpbotDelay);
290 - }
291 - if( document.readyState === 'loading' ){
292 - document.addEventListener('DOMContentLoaded', wpbotDelayedPlay);
293 - } else {
294 - wpbotDelayedPlay();
295 - }
296 - window.addEventListener('load', function(){
297 - setTimeout(wpbotForcePlay, wpbotDelay);
298 - });
299 - })();
300 - </script>
301 - <?php endif; ?>
302 - <?php
303 - $fb_app_id = get_option('qlcd_wp_chatbot_fb_app_id');
304 - $fb_page_id = get_option('qlcd_wp_chatbot_fb_page_id');
305 - $fb_mgs_color = get_option('qlcd_wp_chatbot_fb_color') != '' ? get_option('qlcd_wp_chatbot_fb_color') : '#0084ff';
306 - $fb_mgs_in = get_option('qlcd_wp_chatbot_fb_in_msg') != '' ? get_option('qlcd_wp_chatbot_fb_in_msg') : 'You are welcome';
307 - $fb_mgs_out = get_option('qlcd_wp_chatbot_fb_out_msg') != '' ? get_option('qlcd_wp_chatbot_fb_out_msg') : 'You are not logged in';
308 - if (get_option('enable_wp_chatbot_messenger') == 1 && get_option('enable_wp_chatbot_messenger_floating_icon') == 1) {
309 - ?>
310 - <!-- wp-chatbot-board-container-->
311 - <script>
312 -
313 - window.fbAsyncInit = function () {
314 - FB.init({
315 - appId: '<?php echo esc_js($fb_app_id); ?>',
316 - autoLogAppEvents: true,
317 - xfbml: true,
318 - version: 'v2.12'
319 - });
320 - };
321 -
322 - (function (d, s, id) {
323 - var js, fjs = d.getElementsByTagName(s)[0];
324 - if (d.getElementById(id)) return;
325 - js = d.createElement(s);
326 - js.id = id;
327 - js.src = 'https://connect.facebook.net/en_US/sdk.js';
328 - fjs.parentNode.insertBefore(js, fjs);
329 - }(document, 'script', 'facebook-jssdk'));
330 - </script>
331 - <div class="fb-customerchat"
332 - page_id="<?php echo esc_attr($fb_page_id); ?>"
333 - greeting_dialog_display="hide"
334 - theme_color="<?php echo esc_attr($fb_mgs_color); ?>"
335 - logged_in_greeting="<?php echo esc_attr($fb_mgs_in); ?>"
336 - logged_out_greeting="<?php echo esc_attr($fb_mgs_out); ?>"></div>
337 - <?php
338 - }
339 - ?>
340 - <!--container-->
341 - <!--wp-chatbot-ball-wrapper-->
342 - </div>
343 -
344 - <?php
345 -
346 - if ( get_transient( 'qcld_bot_clear_cache' ) ) {
347 - echo '<script type="text/javascript">var wpbot_clear_cache = 1 </script>';
348 - delete_transient( 'qcld_bot_clear_cache' );
349 - }
350 -
351 - }else{
352 - ?>
353 - <script>
354 - var openingHourIsFn = 1;
355 - </script>
356 - <?php
357 - }
358 -}
359 -//wp_chatbot load control handler.
360 -function wp_chatbot_load_controlling(){
361 - $wp_chatbot_load = true;
362 -
363 -
364 - if (get_option('wp_chatbot_show_pages') == 'off') {
365 - $wp_chatbot_select_pages = unserialize(get_option('wp_chatbot_show_pages_list'));
366 - if (is_page() && !empty($wp_chatbot_select_pages)) {
367 -
368 - if (in_array(get_the_ID(), $wp_chatbot_select_pages) == true) {
369 -
370 - $wp_chatbot_load = true;
371 - } else {
372 - $wp_chatbot_load = false;
373 - }
374 -
375 - }
376 -
377 - if(function_exists('is_shop')){
378 - if (is_shop() || is_cart() || is_checkout() || 'product' == get_post_type()) {
379 - $wp_chatbot_load = false;
380 - }
381 - }
382 -
383 - }
384 - if (get_option('wp_chatbot_show_wpcommerce') == 'off') {
385 -
386 - }
387 - //load wpwbot shortcode template and prevent default wpwbot from footer.
388 - if (is_page()) {
389 - $page_id = get_the_ID();
390 - $page = get_post($page_id);
391 - if (has_shortcode($page->post_content, 'wpwbot')) {
392 - $wp_chatbot_load = false;
393 - }
394 - }
395 -
396 - $post_list = maybe_unserialize(get_option('wp_chatbot_exclude_post_list'));
397 -
398 - if( is_array( $post_list ) && in_array(get_post_type(), $post_list)){
399 - $wp_chatbot_load = false;
400 - }
401 - if (wp_chatbot_is_mobile() && get_option('disable_wp_chatbot_on_mobile') == 1) {
402 - $wp_chatbot_load = false;
403 - }
404 -
405 - if (get_option('wp_chatbot_show_home_page') == 'off' && is_home()) {
406 - $wp_chatbot_load = false;
407 - }
408 -
409 - if (get_option('wp_chatbot_show_posts') == 'off' && 'post' == get_post_type()) {
410 - $wp_chatbot_load = false;
411 - }
412 -
413 - if(is_admin()){
414 - $wp_chatbot_load = false;
415 - }
416 - return $wp_chatbot_load;
417 -}
418 -//checking Devices
419 -function wp_chatbot_is_mobile(){
420 - $useragent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
421 - if (preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i', $useragent) || preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i', substr($useragent, 0, 4))) {
422 - return true;
423 - } else {
424 - return false;
425 - }
426 -}
427 -//Checking wpwbot opening hour
428 -function wp_chatbot_check_opening_hours(){
429 - $curent_day=strtolower(gmdate('l',strtotime(current_time( 'mysql' ))));
430 - $current_time=gmdate('H:i',strtotime(current_time( 'mysql')));
431 - $is_wpwbot_open =false;
432 - if(get_option('wpwbot_hours')) {
433 - $wpwbot_times = wp_kses_post(unserialize(get_option('wpwbot_hours')));
434 - if (isset($wpwbot_times[$curent_day])) {
435 - $day_times = $wpwbot_times[$curent_day];
436 - if (!empty($day_times)) {
437 - foreach ($day_times as $day_time) {
438 - if(strtotime($current_time) > strtotime($day_time[0]) && strtotime($current_time) < strtotime($day_time[1]) ){
439 - $is_wpwbot_open=true;
440 - }
441 - }
442 - }
443 - }
444 - }
445 - return $is_wpwbot_open;
446 -}
447 -
448 -/**
449 - * wpwBot Search keyword product
450 - */
451 -add_action('wp_ajax_qcld_wb_chatbot_keyword', 'qcld_wb_chatbot_keyword');
452 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_keyword', 'qcld_wb_chatbot_keyword');
453 -function qcld_wb_chatbot_keyword(){
454 - // Verify nonce for security
455 - $nonce = isset($_POST['security']) ? sanitize_text_field(wp_unslash($_POST['security'])) : (isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '');
456 - if ( ! wp_verify_nonce( $nonce, 'wp_chatbot' ) && ! wp_verify_nonce( $nonce, 'qcsecretbotnonceval123qc' ) ) {
457 - wp_send_json_error( array( 'status' => 'fail', 'message' => 'Security check failed.' ) );
458 - wp_die();
459 - }
460 -
461 - $keyword = sanitize_text_field(wp_unslash($_POST['keyword']));
462 - $product_per_page = get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10;
463 - if (get_option('qlcd_wp_chatbot_search_option') == 'standard') {
464 - $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
465 - $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
466 - //Merging all query together.
467 - $argu_params = array(
468 - 'post_type' => 'product',
469 - 'post_status' => 'publish',
470 - 'posts_per_page' => $product_per_page,
471 - 'orderby' => $product_orderby,
472 - 'order' => $product_order,
473 - 's' => $keyword,
474 - );
475 - /******
476 - *WP Query Operation to get products.*
477 - *******/
478 - $product_query = new WP_Query($argu_params);
479 - $product_num = $product_query->post_count;
480 - //Getting total product number by string.
481 - $total_argu = array('post_type' => 'product', 's' => $keyword, 'posts_per_page' => 100);
482 - $total_query = new WP_Query($total_argu);
483 - $total_product_num = $total_query->post_count;
484 - $html = '<div class="wp-chatbot-products-area">';
485 - $_pf = new WC_Product_Factory();
486 - //repeating the products
487 - if ($product_num > 0) {
488 - $html .= '<ul class="wp-chatbot-products">';
489 - while ($product_query->have_posts()) : $product_query->the_post();
490 - $product = $_pf->get_product(get_the_ID());
491 - if (wp_chatbot_product_controlling(get_the_ID()) == true) {
492 - $html .= '<li class="wp-chatbot-product">';
493 - $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
494 - $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
495 - <div class="wp-chatbot-product-summary">
496 - <div class="wp-chatbot-product-table">
497 - <div class="wp-chatbot-product-table-cell">
498 - <h3 class="wp-chatbot-product-title">' . $product->post->post_title . '</h3>
499 - <div class="price">' . $product->get_price_html() . '</div>';
500 - $html .= ' </div>
501 - </div>
502 - </div></a>
503 - </li>';
504 - }
505 - endwhile;
506 - wp_reset_postdata();
507 - $html .= '</ul>';
508 - if ($total_product_num > $product_per_page && $product_per_page > 0 ) {
509 - $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="' . esc_attr($keyword) . '" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
510 - }
511 - }
512 - $html .= '</div>';
513 - } else if (get_option('qlcd_wp_chatbot_search_option') == 'advanced') {
514 - $result = wpwBot_Search::factory()->search($keyword);
515 - $products = $result['products'];
516 - $product_num = count($result['products']);
517 - $total_product_num = $result['total_products'];
518 - $more_product_ids = implode(",", $result['more_ids']);
519 - $html = '<div class="wp-chatbot-products-area">';
520 - $_pf = new WC_Product_Factory();
521 - //repeating the products
522 - if ($product_num > 0) {
523 - $html .= '<ul class="wp-chatbot-products">';
524 - foreach ($products as $product) {
525 - if (wp_chatbot_product_controlling($product->get_id()) == true) {
526 - $html .= '<li class="wp-chatbot-product">';
527 - $html .= '<a target="_blank" href="' . get_permalink($product->get_id()) . '" wp-chatbot-pid= "' . $product->get_id() . '" title="' . esc_attr($product->get_title()) . '">';
528 - $html .= get_the_post_thumbnail($product->get_id(), 'shop_catalog') . '
529 - <div class="wp-chatbot-product-summary">
530 - <div class="wp-chatbot-product-table">
531 - <div class="wp-chatbot-product-table-cell">
532 - <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
533 - <div class="price">' . $product->get_price_html() . '</div>';
534 - $html .= ' </div></div></div></a></li>';
535 - }
536 - }
537 - $html .= '</ul>';
538 - if ($total_product_num > $product_per_page && $product_per_page > 0) {
539 - $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="' . esc_attr($more_product_ids) . '" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
540 - }
541 - }
542 - $html .= '</div>';
543 - }
544 - $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
545 - wp_send_json($response);
546 -
547 -}
548 -/**
549 - * wpwBot Categories
550 - */
551 -add_action('wp_ajax_qcld_wb_chatbot_category', 'qcld_wb_chatbot_category');
552 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_category', 'qcld_wb_chatbot_category');
553 -function qcld_wb_chatbot_category(){
554 - $category_type="common";
555 - if (get_option('wp_chatbot_show_parent_category') != "") {
556 - $terms = get_terms( array( 'taxonomy' => 'product_cat', 'parent' => 0, 'hide_empty' => true, 'fields' => 'all' ) );
557 - } else {
558 - $terms = get_terms( array( 'taxonomy' => 'product_cat', 'hide_empty' => true, 'fields' => 'all' ) );
559 - }
560 - $html = "";
561 - foreach ($terms as $term) {
562 - $child_terms=get_terms( array( 'taxonomy' => 'product_cat', 'parent' => $term->term_id, 'hide_empty' => true, 'fields' => 'all' ) );
563 - if(get_option('wp_chatbot_show_sub_category')==1 && count($child_terms) >0){
564 - $category_type="hasChilds";
565 - }
566 - $html .= '<span class="qcld-chatbot-product-category" data-category-type="' . $category_type . '" data-category-slug="' . $term->slug . '" data-category-id="' . $term->term_id . '">' . $term->name . '</span>';
567 - }
568 - wp_send_json($html);
569 -
570 -}
571 -/**
572 - * wpwBot Sub categories
573 - */
574 -add_action('wp_ajax_qcld_wb_chatbot_sub_category', 'qcld_wb_chatbot_sub_category');
575 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_sub_category', 'qcld_wb_chatbot_sub_category');
576 -function qcld_wb_chatbot_sub_category(){
577 - $parent_id = intval( wp_unslash( $_POST['parent_id'] ) );
578 - $terms = get_terms( array( 'taxonomy' => 'product_cat', 'parent' => $parent_id, 'hide_empty' => true, 'fields' => 'all' ) );
579 - $html = "";
580 - foreach ($terms as $term) {
581 - $html .= '<span class="qcld-chatbot-product-category" data-category-type="common" data-category-slug="' . $term->slug . '" data-category-id="' . $term->term_id . '">' . $term->name . '</span>';
582 - }
583 - wp_send_json($html);
584 -
585 -}
586 -/**
587 - * wpwBot category product
588 - */
589 -add_action('wp_ajax_qcld_wb_chatbot_category_products', 'qcld_wb_chatbot_category_products');
590 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_category_products', 'qcld_wb_chatbot_category_products');
591 -function qcld_wb_chatbot_category_products(){
592 - $category_id = intval( wp_unslash( $_POST['category'] ) );
593 - $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
594 - $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
595 - $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
596 - //Merging all query together.
597 - $argu_params = array(
598 - 'post_type' => 'product',
599 - 'post_status' => 'publish',
600 - 'ignore_sticky_posts' => 1,
601 - 'orderby' => $product_orderby,
602 - 'order' => $product_order,
603 - 'posts_per_page' => $product_per_page,
604 - 'tax_query' => array(
605 - array(
606 - 'taxonomy' => 'product_cat',
607 - 'field' => 'term_id',
608 - 'terms' => $category_id,
609 - 'operator' => 'IN'
610 - )
611 - )
612 - );
613 - /******
614 - *WP Query Operation to get products.*
615 - *******/
616 - $product_query = new WP_Query($argu_params);
617 - $product_num = $product_query->post_count;
618 - //Getting total product number by string.
619 - $total_argu = array(
620 - 'post_type' => 'product',
621 - 'post_status' => 'publish',
622 - 'posts_per_page' => 100,
623 - 'tax_query' => array(
624 - array(
625 - 'taxonomy' => 'product_cat',
626 - 'field' => 'term_id',
627 - 'terms' => $category_id,
628 - 'operator' => 'IN'
629 - )
630 - )
631 - );
632 - $total_query = new WP_Query($total_argu);
633 - $total_product_num = $total_query->post_count;
634 - $_pf = new WC_Product_Factory();
635 - //repeating the products
636 - $html = '';
637 - if ($product_num > 0) {
638 - $html .= '<div class="wp-chatbot-products-area">';
639 - $html .= '<ul class="wp-chatbot-products">';
640 - while ($product_query->have_posts()) : $product_query->the_post();
641 - $product = $_pf->get_product(get_the_ID());
642 - //$qcld_thumb = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'shop_thumbnail' );
643 - $html .= '<li class="wp-chatbot-product">';
644 - $html .= '<a class="wp-chatbot-product-url" wp-chatbot-pid= "' . get_the_ID() . '" target="_blank" href="' . get_permalink(get_the_ID()) . '" title="' . esc_attr($product->get_title() ? $product->get_title() : get_the_ID()) . '">';
645 - $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
646 - <div class="wp-chatbot-product-summary">
647 - <div class="wp-chatbot-product-table">
648 - <div class="wp-chatbot-product-table-cell">
649 - <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
650 - <div class="price">' . $product->get_price_html() . '</div>';
651 - $html .= ' </div>
652 - </div>
653 - </div></a>
654 - </li>';
655 - endwhile;
656 - wp_reset_postdata();
657 - $html .= '</ul>';
658 - if ($total_product_num > $product_per_page && $product_per_page >0) {
659 - $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="category" data-search-term="' . $category_id . '" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
660 - }
661 - $html .= '</div>';
662 - } else {
663 - $html = '';
664 - }
665 - $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
666 - wp_send_json($response);
667 -}
668 -/**
669 - * wpwBot latest, featured, recent product
670 - */
671 -add_action('wp_ajax_qcld_wb_chatbot_featured_products', 'qcld_wb_chatbot_featured_products');
672 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_featured_products', 'qcld_wb_chatbot_featured_products');
673 -function qcld_wb_chatbot_featured_products(){
674 - $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
675 - $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
676 - $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
677 - //get featured products query.
678 - $argu_params = array('post_status' => 'publish',
679 - 'posts_per_page' => $product_per_page,
680 - 'post_type' => 'product',
681 - 'post_status' => 'publish',
682 - 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured'))
683 - );
684 - /******
685 - *WP Query Operation to get products.*
686 - *******/
687 - $product_query = new WP_Query($argu_params);
688 - $product_num = $product_query->post_count;
689 - //Getting total product number by string.
690 - $total_argu = array('post_status' => 'publish',
691 - 'posts_per_page' => 100,
692 - 'post_type' => 'product',
693 - 'post_status' => 'publish',
694 - 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured',),)
695 - );
696 - $total_query = new WP_Query($total_argu);
697 - $total_product_num = $total_query->post_count;
698 - $html = '<div class="wp-chatbot-products-area">';
699 - $_pf = new WC_Product_Factory();
700 - //repeating the products
701 - if ($product_num > 0) {
702 - //$html .= '<p>sdf sdfdsf : '.$asdfdf.'</p>';
703 - $html .= '<ul class="wp-chatbot-products">';
704 - while ($product_query->have_posts()) : $product_query->the_post();
705 - $product = $_pf->get_product(get_the_ID());
706 - $html .= '<li class="wp-chatbot-product">';
707 - $html .= '<a class="wp-chatbot-product-url" wp-chatbot-pid= "' . get_the_ID() . '" target="_blank" href="' . get_permalink(get_the_ID()) . '" title="' . esc_attr($product->get_title() ? $product->get_title() : get_the_ID()) . '">';
708 - $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
709 - <div class="wp-chatbot-product-summary">
710 - <div class="wp-chatbot-product-table">
711 - <div class="wp-chatbot-product-table-cell">
712 - <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
713 - <div class="price">' . $product->get_price_html() . '</div>';
714 - $html .= ' </div>
715 - </div>
716 - </div></a>
717 - </li>';
718 - endwhile;
719 - wp_reset_postdata();
720 - $html .= '</ul>';
721 - if ($total_product_num > $product_per_page) {
722 - $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="featured" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
723 - }
724 - }
725 - $html .= '</div>';
726 - $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
727 - wp_send_json($response);
728 -}
729 -//Product display controll
730 -function wp_chatbot_product_controlling($product_id){
731 - $display_product = true;
732 - //Controlling Out of Stock product display from back end.
733 - $_pf = new WC_Product_Factory();
734 - $product = $_pf->get_product($product_id);
735 - if ($product->manage_stock == 'yes' && $product->stock_quantity <= 0 && get_option('wp_chatbot_exclude_stock_out_product') == 1) {
736 - $display_product = false;
737 - }
738 - return $display_product;
739 -}
740 -//Get Sale products
741 -add_action('wp_ajax_qcld_wb_chatbot_sale_products', 'qcld_wb_chatbot_sale_products');
742 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_sale_products', 'qcld_wb_chatbot_sale_products');
743 -function qcld_wb_chatbot_sale_products(){
744 - $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
745 - $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
746 - $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
747 - //get sale products query.
748 - $argu_params = array(
749 - 'post_type' => 'product',
750 - 'post_status' => 'publish',
751 - 'posts_per_page' => $product_per_page,
752 - 'meta_query' => array(
753 - 'relation' => 'OR',
754 - array( // Simple products type
755 - 'key' => '_sale_price',
756 - 'value' => 0,
757 - 'compare' => '>',
758 - 'type' => 'numeric'
759 - ),
760 - array( // Variable products type
761 - 'key' => '_min_variation_sale_price',
762 - 'value' => 0,
763 - 'compare' => '>',
764 - 'type' => 'numeric'
765 - )
766 - )
767 - );
768 - /******
769 - *WP Query Operation to get products.*
770 - *******/
771 - $product_query = new WP_Query($argu_params);
772 - $product_num = $product_query->post_count;
773 - //Getting total product number by string.
774 - $total_argu = array(
775 - 'post_type' => 'product',
776 - 'post_status' => 'publish',
777 - 'posts_per_page' => 100,
778 - 'meta_query' => array(
779 - 'relation' => 'OR',
780 - array( // Simple products type
781 - 'key' => '_sale_price',
782 - 'value' => 0,
783 - 'compare' => '>',
784 - 'type' => 'numeric'
785 - ),
786 - array( // Variable products type
787 - 'key' => '_min_variation_sale_price',
788 - 'value' => 0,
789 - 'compare' => '>',
790 - 'type' => 'numeric'
791 - )
792 - )
793 - );
794 - $total_query = new WP_Query($total_argu);
795 - $total_product_num = $total_query->post_count;
796 - $html = '<div class="wp-chatbot-products-area">';
797 - $_pf = new WC_Product_Factory();
798 - //repeating the products
799 - if ($product_num > 0) {
800 - //$html .= '<p>sdf sdfdsf : '.$asdfdf.'</p>';
801 - $html .= '<ul class="wp-chatbot-products">';
802 - while ($product_query->have_posts()) : $product_query->the_post();
803 - $product = $_pf->get_product(get_the_ID());
804 - $html .= '<li class="wp-chatbot-product">';
805 - $html .= '<a class="wp-chatbot-product-url" wp-chatbot-pid= "' . get_the_ID() . '" target="_blank" href="' . get_permalink(get_the_ID()) . '" title="' . esc_attr($product->get_title() ? $product->get_title() : get_the_ID()) . '">';
806 - $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
807 - <div class="wp-chatbot-product-summary">
808 - <div class="wp-chatbot-product-table">
809 - <div class="wp-chatbot-product-table-cell">
810 - <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
811 - <div class="price">' . $product->get_price_html() . '</div>';
812 - $html .= ' </div>
813 - </div>
814 - </div></a>
815 - </li>';
816 - endwhile;
817 - wp_reset_postdata();
818 - $html .= '</ul>';
819 - if ($total_product_num > $product_per_page) {
820 - $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="sale" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
821 - }
822 - }
823 - $html .= '</div>';
824 - $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
825 - wp_send_json($response);
826 -}
827 -//load more
828 -add_action('wp_ajax_qcld_wb_chatbot_load_more', 'qcld_wb_chatbot_load_more');
829 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_load_more', 'qcld_wb_chatbot_load_more');
830 -function qcld_wb_chatbot_load_more(){
831 - $offset = intval( wp_unslash( $_POST['offset'] ) );
832 - $search_type = sanitize_text_field( wp_unslash( $_POST['search_type'] ) );
833 - $search_term = sanitize_text_field( wp_unslash( $_POST['search_term'] ) );
834 - $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
835 - $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
836 - $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
837 - $next_offset = intval($product_per_page + $offset);
838 - if ($search_type == 'product' && $search_term != 'featured' && $search_term != 'sale' && get_option('qlcd_wp_chatbot_search_option') == 'advanced') {
839 - //if have multiple ids then explode else have single need to array push
840 - if (strpos($search_term, ',') !== false) {
841 - $product_ids = explode(',', $search_term);
842 - } else {
843 - $product_ids = array($search_term);
844 - }
845 - $result = wpwBot_Search::factory()->get_load_more_products($product_ids);
846 - $products = $result['products'];
847 - $product_num = count($result['products']);
848 - $total_product_num = $result['total_products'];
849 - $more_product_ids = implode(",", $result['more_ids']);
850 - $_pf = new WC_Product_Factory();
851 - //repeating the products
852 - $html = '';
853 - if ($product_num > 0) {
854 - foreach ($products as $product) {
855 - $html .= '<li class="wp-chatbot-product">';
856 - $html .= '<a target="_blank" href="' . get_permalink($product->get_id()) . '" wp-chatbot-pid= "' . $product->get_id() . '" title="' . esc_attr($product->get_title()) . '">';
857 - $html .= get_the_post_thumbnail($product->get_id(), 'shop_catalog') . '
858 - <div class="wp-chatbot-product-summary">
859 - <div class="wp-chatbot-product-table">
860 - <div class="wp-chatbot-product-table-cell">
861 - <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
862 - <div class="price">' . $product->get_price_html() . '</div>';
863 - $html .= ' </div></div></div></a></li>';
864 - }
865 - }
866 - $response = array('html' => $html, 'product_num' => $total_product_num, 'search_term' => $more_product_ids, 'offset' => $next_offset, 'per_page' => $product_per_page);
867 - } else {
868 - if ($search_type == 'product' && $search_term != 'featured' && $search_term != 'sale') { //For Standard search
869 - $argu_params = array(
870 - 'post_type' => 'product',
871 - 'post_status' => 'publish',
872 - 'posts_per_page' => $product_per_page,
873 - 'offset' => $offset,
874 - 'orderby' => $product_orderby,
875 - 'order' => $product_order,
876 - 's' => $search_term,
877 - );
878 - } else if ($search_type == 'category') {
879 - $argu_params = array(
880 - 'post_type' => 'product',
881 - 'post_status' => 'publish',
882 - 'ignore_sticky_posts' => 1,
883 - 'posts_per_page' => $product_per_page,
884 - 'orderby' => $product_orderby,
885 - 'order' => $product_order,
886 - 'offset' => $offset,
887 - 'tax_query' => array(
888 - array(
889 - 'taxonomy' => 'product_cat',
890 - 'field' => 'term_id',
891 - 'terms' => $search_term,
892 - 'operator' => 'IN'
893 - )
894 - )
895 - );
896 - } else if ($search_type == 'product' && $search_term == 'featured') {
897 - $argu_params = array(
898 - 'post_type' => 'product',
899 - 'post_status' => 'publish',
900 - 'ignore_sticky_posts' => 1,
901 - 'posts_per_page' => $product_per_page,
902 - 'orderby' => $product_orderby,
903 - 'order' => $product_order,
904 - 'offset' => $offset,
905 - 'meta_query' => array('key' => '_featured', 'value' => 'yes')
906 - );
907 - } else if ($search_type == 'product' && $search_term == 'sale') {
908 - $argu_params = array(
909 - 'post_type' => 'product',
910 - 'post_status' => 'publish',
911 - 'ignore_sticky_posts' => 1,
912 - 'posts_per_page' => $product_per_page,
913 - 'orderby' => $product_orderby,
914 - 'order' => $product_order,
915 - 'offset' => $offset,
916 - 'meta_query' => array(
917 - 'relation' => 'OR',
918 - array( // Simple products type
919 - 'key' => '_sale_price',
920 - 'value' => 0,
921 - 'compare' => '>',
922 - 'type' => 'numeric'
923 - ),
924 - array( // Variable products type
925 - 'key' => '_min_variation_sale_price',
926 - 'value' => 0,
927 - 'compare' => '>',
928 - 'type' => 'numeric'
929 - )
930 - )
931 - );
932 - }
933 - $product_query = new WP_Query($argu_params);
934 - $product_num = $product_query->post_count;
935 - $_pf = new WC_Product_Factory();
936 - //repeating the products
937 - $html = '';
938 - if ($product_num > 0) {
939 - while ($product_query->have_posts()) : $product_query->the_post();
940 - $product = $_pf->get_product(get_the_ID());
941 - $html .= '<li class="wp-chatbot-product">';
942 - $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
943 - $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
944 - <div class="wp-chatbot-product-summary">
945 - <div class="wp-chatbot-product-table">
946 - <div class="wp-chatbot-product-table-cell">
947 - <h3 class="wp-chatbot-product-title">' . $product->post->post_title . '</h3>
948 - <div class="price">' . $product->get_price_html() . '</div>';
949 - $html .= ' </div>
950 - </div>
951 - </div></a>
952 - </li>';
953 - endwhile;
954 - wp_reset_postdata();
955 - } else {
956 - $html .= '';
957 - }
958 - $response = array('html' => $html, 'product_num' => $product_num, 'search_term' => $search_term, 'offset' => $next_offset, 'per_page' => $product_per_page);
959 - }
960 - wp_send_json($response);
961 -}
962 -//product details
963 -add_action('wp_ajax_qcld_wb_chatbot_product_details', 'qcld_wb_chatbot_product_details');
964 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_product_details', 'qcld_wb_chatbot_product_details');
965 -function qcld_wb_chatbot_product_details(){
966 - $product_id = intval( wp_unslash( $_POST['wp_chatbot_pid'] ) );
967 - //Tracking product view from chat board
968 - wp_chatbot_view_track_product_by_id($product_id);
969 - //wpcommerce product factory
970 - $wc_pf = new WC_Product_Factory();
971 - $product = $wc_pf->get_product($product_id);
972 - $product_type = $wc_pf->get_product_type($product_id);
973 - $product_title = '<h2 id="wp-chatbot-product-title" ><a target="_blank" href="' . get_permalink($product->get_id()) . '">' . $product->get_title() . '</a></h2>';
974 - $product_desc = apply_filters('the_excerpt', $product->post->post_excerpt);//$product->post->post_excerpt;
975 - $gallery_ids = $product->get_gallery_image_ids();
976 - //images processing..
977 - $product_feature_image_id = get_post_thumbnail_id($product_id);
978 - $product_feature_image = wp_get_attachment_image_src($product_feature_image_id, 'full');
979 - $product_feature_thumb = wp_get_attachment_image_src($product_feature_image_id, 'shop_thumbnail');
980 - //$full_img_src = $product_feature_image[0];
981 - //$product_image = '<img style="width:500px;height:300px" src="' . $full_img_src . '" >';
982 - $product_image = '<div class="wp-chatbot-product-image-large">
983 - <a href="' . $product_feature_image[0] . '" id="wp-chatbot-product-image-large-path"><img id="wp-chatbot-product-image-large-src" src="' . $product_feature_image[0] . '" alt="Large Image" title="Zoom Image" /></a>
984 - </div>';
985 - $product_image .= '<div class="wp-chatbot-product-image-thumbs"><ul>
986 - <li class="wp-chatbot-product-active-image-thumbs"><a href="' . $product_feature_image[0] . '" class="wp-chatbot-product-image-thumbs-path"><img class="wp-chatbot-product-image-thumbs-src" src="' . $product_feature_thumb[0] . '" alt="Thumb Image" /></a></li>';
987 - if (!empty($gallery_ids)) {
988 - foreach ($gallery_ids as $gallery_id) {
989 - $gallery_image = wp_get_attachment_image_src($gallery_id, 'full');
990 - $gallery_thumb = wp_get_attachment_image_src($gallery_id, 'shop_thumbnail');
991 - $product_image .= '<li><a href="' . $gallery_image[0] . '" class="wp-chatbot-product-image-thumbs-path"><img class="wp-chatbot-product-image-thumbs-src" src="' . $gallery_thumb[0] . '" alt="Thumb Image" /></a></li>';
992 - }
993 - }
994 - $product_image .= '</ul></div>';
995 - $product_price = '<p class="wp-chatbot-product-price" id="wp-chatbot-product-price">' . $product->get_price_html() . '</p>';
996 - $product_sku = '<p class="wp-chatbot-product-sku"> ' . __('SKU', 'chatbot') . ' : ' . $product->get_sku() . '</p>';
997 - //if ( $product->is_in_stock() || $product->is_purchasable() )
998 - //Handle variable product start
999 - $variations = "";
1000 - $add_cart_button = "";
1001 - $product_quantity = "";
1002 - if ($product->is_in_stock()) {
1003 - if ($product_type == "variable") {
1004 - //Getting product variation number based details
1005 - $variations_data = array();
1006 - foreach ($product->get_children() as $child_id) {
1007 - $all_cfs = get_post_custom($child_id);
1008 - array_push($variations_data, array('variation_id' => $child_id, 'variation_data' => $all_cfs));
1009 - }
1010 - $variations_data = json_encode($variations_data);
1011 - $attributes = $product->get_attributes();
1012 - //Handling Variant & Non Variant products
1013 - $var_attrs = $product->get_variation_attributes();
1014 - $varation_names = array();
1015 - if (!empty($var_attrs)) {
1016 - foreach ($var_attrs as $key => $value) {
1017 - array_push($varation_names, $key);
1018 - }
1019 - }
1020 - $debug = $varation_names;
1021 - foreach ($attributes as $attribute) {
1022 - /*if (empty($attribute['is_visible']) || ($attribute['is_taxonomy'] && !taxonomy_exists($attribute['name']))) {
1023 - continue;
1024 - }*/
1025 - $title = wc_attribute_label($attribute['name']);
1026 - $name = $attribute['name'];
1027 - if ($attribute['is_taxonomy']) {
1028 - $values = wc_get_product_terms($product->get_id(), $attribute['name'], array('fields' => 'slugs'));
1029 - } else {
1030 - $values = array_map('trim', explode(WC_DELIMITER, $attribute['value']));
1031 - }
1032 - natsort($values);
1033 - if (!in_array($name, $varation_names)) {
1034 - $variations .= '<p><label for="' . sanitize_title($name) . '">' . $title . '</label> ' . ucfirst(implode(",", $values)) . '</p>';
1035 - } else {
1036 - $variations .= '<div class="wp-chatbot-variable-' . sanitize_title($name) . '">';
1037 - $variations .= '<label for="' . sanitize_title($name) . '">' . $title . '</label>';
1038 - $variations .= '<select id="' . esc_attr(sanitize_title($name)) . '" name="attribute_' . sanitize_title($name) . '" data-attribute_name="attribute_' . sanitize_title($name) . '" class="each_attribute">';
1039 - $variations .= '<option value="">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_choose_option')))) . '</option>';
1040 - foreach ($values as $value) {
1041 - $attr_key = 'attribute_' . sanitize_title( $name );
1042 - if ( isset( $_REQUEST[ $attr_key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
1043 - $selected_value = sanitize_text_field( wp_unslash( $_REQUEST[ $attr_key ] ) );
1044 - } else {
1045 - $selected_value = '';
1046 - }
1047 - $variations .= '<option value="' . esc_attr(strtolower($value)) . '"' . selected($selected_value, $value, false) . '>' . apply_filters('wpcommerce_variation_option_name', $value) . '</option>';
1048 - }
1049 - $variations .= '</select></div>';
1050 - }
1051 - }
1052 - $add_cart_button .= '<input type="button" id="wp-chatbot-variation-add-to-cart" wp-chatbot-product-id="' . $product_id . '" value="' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_add_to_cart')))) . '" variation_id="" />';
1053 - $add_cart_button .= "<input type='hidden' id='wp-chatbot-variation-data' data-product-variation='" . $variations_data . "' />";
1054 - } else {
1055 - $add_cart_button .= '<input type="button" id="wp-chatbot-add-cart-button" wp-chatbot-product-id="' . $product_id . '" value="' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_add_to_cart')))) . '" />';
1056 - }
1057 - //Handle variable product end.
1058 - $product_quantity .= '<label for="">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</label>
1059 - <input type="number" id="vPQuantity" value="1" />';
1060 - }
1061 - //$response=$full_size_image;
1062 - $response = array('title' => $product_title, 'description' => $product_desc, 'image' => $product_image, 'price' => $product_price, 'sku' => $product_sku, 'quantity' => $product_quantity, 'buttton' => $add_cart_button, 'variation' => $variations, 'type' => $product_type, 'debug' => $debug);
1063 - wp_send_json($response);
1064 -}
1065 -//Add to cart for variable product.
1066 -add_action('wp_ajax_qcld_variable_add_to_cart', 'qcld_variable_add_to_cart');
1067 -add_action('wp_ajax_nopriv_qcld_variable_add_to_cart', 'qcld_variable_add_to_cart');
1068 -function qcld_variable_add_to_cart(){
1069 - $product_id = intval( wp_unslash( $_POST['p_id'] ) );
1070 - $quantity = intval( wp_unslash( $_POST['quantity'] ) );
1071 - $variations_id = intval( wp_unslash( $_POST['variations_id'] ) );
1072 - $attrs = isset( $_POST['attributes'] ) ? array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['attributes'] ) ) : array();
1073 - //echo wp_send_json(array('p_id'=>$product_id,'qnty'=>$quantity,'id'=>$variations_id,'att'=>$attrs));
1074 - $attributes = array();
1075 - foreach ($attrs as $attr) {
1076 - $single = explode("#", $attr);
1077 - if (isset($single[0])) {
1078 - $a_name = explode("_", $single[0]);
1079 - }
1080 - $attributes[$a_name[2]] = $single[1];
1081 - }
1082 - global $wpcommerce;
1083 - $result = $wpcommerce->cart->add_to_cart($product_id, $quantity, $variations_id, $attributes, null);
1084 - if ($result != false) {
1085 - wp_send_json('variable');
1086 - } else {
1087 - wp_send_json('error');
1088 - }
1089 -}
1090 -//Add to cart for simple product.
1091 -add_action('wp_ajax_qcld_wb_chatbot_add_to_cart', 'qcld_wb_chatbot_add_to_cart');
1092 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_add_to_cart', 'qcld_wb_chatbot_add_to_cart');
1093 -function qcld_wb_chatbot_add_to_cart(){
1094 - $product_id = intval( wp_unslash( $_POST['product_id'] ) );
1095 - $product_quantity = intval( wp_unslash( $_POST['quantity'] ) );
1096 - global $wpcommerce;
1097 - $result = $wpcommerce->cart->add_to_cart($product_id, $product_quantity);
1098 - if ($result != false) {
1099 - wp_send_json('simple');
1100 - } else {
1101 - wp_send_json('error');
1102 - }
1103 -}
1104 -//Support part
1105 -add_action('wp_ajax_qcld_wb_chatbot_support_email', 'qcld_wb_chatbot_support_email');
1106 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_support_email', 'qcld_wb_chatbot_support_email');
1107 -function qcld_wb_chatbot_support_email(){
1108 - $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
1109 - if ( ! wp_verify_nonce( $nonce, 'qcsecretbotnonceval123qc' ) ) {
1110 - wp_send_json_error( array( 'error' => esc_html__( 'Error: Invalid nonce verification.', 'chatbot' ) ) );
1111 - }
1112 - $name = trim(sanitize_text_field(wp_unslash($_POST['name'])));
1113 - $email = sanitize_email(wp_unslash($_POST['email']));
1114 - $message = sanitize_text_field(wp_unslash($_POST['message']));
1115 - $subject = sanitize_text_field(get_option('qlcd_wp_chatbot_email_sub') != '' ? get_option('qlcd_wp_chatbot_email_sub') : 'Support Email from wpWBot by Client');
1116 - //Extract Domain
1117 - $url = get_site_url();
1118 - $url = wp_parse_url($url);
1119 - $domain = $url['host'];
1120 - //$admin_email = "admin@" . $domain;
1121 - $admin_email = sanitize_email(get_option('admin_email'));
1122 - $toEmail = sanitize_email(get_option('qlcd_wp_chatbot_admin_email') != '' ? get_option('qlcd_wp_chatbot_admin_email') : $admin_email);
1123 -
1124 -
1125 - if(get_option('qlcd_wp_chatbot_from_email') && get_option('qlcd_wp_chatbot_from_email')!=''){
1126 - $fromEmail = get_option('qlcd_wp_chatbot_from_email');
1127 - }else{
1128 - $fromEmail = "wordpress@" . $domain;
1129 - }
1130 - //Starting messaging and status.
1131 - $response['status'] = 'fail';
1132 - $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_email_fail')));
1133 - if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
1134 - $response['message'] = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_invalid_email'))));
1135 - $response['status'] = 'fail';
1136 - } else {
1137 - //build email body
1138 - $bodyContent = "";
1139 - $bodyContent .= '<p><strong>' . __('Support Request Details', 'chatbot') . ':</strong></p><hr>';
1140 - $bodyContent .= '<p>' . __('Name', 'chatbot') . ' : ' . $name . '</p>';
1141 - $bodyContent .= '<p>' . __('Email', 'chatbot') . ' : ' . $email . '</p>';
1142 - $bodyContent .= '<p>' . __('Subject', 'chatbot') . ' : ' . $subject . '</p>';
1143 - $bodyContent .= '<p>' . __('Message', 'chatbot') . ' : ' . $message . '</p>';
1144 - $bodyContent .= '<p>' . __('Mail Generated on', 'chatbot') . ': ' . current_time('F j, Y, g:i a') . '</p>';
1145 - $to = $toEmail;
1146 - $body = $bodyContent;
1147 - $headers = array();
1148 - $headers[] = 'Content-Type: text/html; charset=UTF-8';
1149 - $headers[] = 'From: ' . $name . ' <' . $fromEmail . '>';
1150 - $headers[] = 'Reply-To: ' . $name . ' <' . $email . '>';
1151 - $result = wp_mail($to, $subject, $body, $headers);
1152 - if ($result) {
1153 - $response['status'] = 'success';
1154 - $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_email_sent')));
1155 - }
1156 -
1157 - }
1158 - echo wp_json_encode($response);
1159 - die();
1160 -}
1161 -//Support Phone
1162 -add_action('wp_ajax_qcld_wb_chatbot_support_phone', 'qcld_wb_chatbot_support_phone');
1163 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_support_phone', 'qcld_wb_chatbot_support_phone');
1164 -function qcld_wb_chatbot_support_phone(){
1165 - check_ajax_referer('qcsecretbotnonceval123qc', 'nonce');
1166 - $name = trim(sanitize_text_field(wp_unslash($_POST['name'])));
1167 - $phone =sanitize_text_field(wp_unslash($_POST['phone']));
1168 - $subject = 'WPBot Support Mail Request for Call Back';
1169 - //Extract Domain
1170 - $url = get_site_url();
1171 - $url = wp_parse_url($url);
1172 - $domain = $url['host'];
1173 - //$admin_email = "admin@" . $domain;
1174 - $admin_email = get_option('admin_email');
1175 - $toEmail = sanitize_email(get_option('qlcd_wp_chatbot_admin_email') != '' ? get_option('qlcd_wp_chatbot_admin_email') : $admin_email);
1176 -
1177 -
1178 - if(get_option('qlcd_wp_chatbot_from_email') && get_option('qlcd_wp_chatbot_from_email')!=''){
1179 - $fromEmail = sanitize_email(get_option('qlcd_wp_chatbot_from_email'));
1180 - }else{
1181 - $fromEmail = "wordpress@" . $domain;
1182 - }
1183 - //Starting messaging and status.
1184 - $response['status'] = 'fail';
1185 - $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_phone_fail')));
1186 - //build email body
1187 - $bodyContent = "";
1188 - $bodyContent .= '<p><strong>' . __('Support Request Details', 'chatbot') . ':</strong></p><hr>';
1189 - $bodyContent .= '<p>' . __('Name', 'chatbot') . ' : ' . $name . '</p>';
1190 - $bodyContent .= '<p>' . __('Phone', 'chatbot') . ' : ' . $phone . '</p>';
1191 - $bodyContent .= '<p>' . __('Subject', 'chatbot') . ' : ' . $subject . '</p>';
1192 - $bodyContent .= '<p>' . __('Message', 'chatbot') . ' : ' . __(' Call me at ', 'chatbot'). $phone . '</p>';
1193 - $bodyContent .= '<p>' . __('Mail Generated on', 'chatbot') . ': ' . current_time('F j, Y, g:i a') . '</p>';
1194 - $to = $toEmail;
1195 - $body = $bodyContent;
1196 - $headers = array();
1197 - $headers[] = 'Content-Type: text/html; charset=UTF-8';
1198 - $headers[] = 'From: ' . $name . ' <' . $fromEmail . '>';
1199 - $headers[] = 'Reply-To: ' . $name . ' <' . $fromEmail . '>';
1200 - $result = wp_mail($to, $subject, $body, $headers);
1201 - if ($result) {
1202 - $response['status'] = 'success';
1203 - $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_phone_sent')));
1204 - }
1205 - echo wp_json_encode($response);
1206 - die();
1207 -}
1208 -// Order Status part. removed
1209 -
1210 -function wpb_randmom_message_handle($items){
1211 - return $items[wp_rand(0, count($items) - 1)];
1212 -}
1213 -function qcld_wb_chatbot_func_str_replace($messages = array()){
1214 - $refined_mesgses = array();
1215 - foreach ($messages as $message) {
1216 - $refined_msg = str_replace('\\', '', $message);
1217 - array_push($refined_mesgses, $refined_msg);
1218 - }
1219 - return $refined_mesgses;
1220 -}
1221 -add_action('wp_ajax_qcld_wb_chatbot_login_user', 'qcld_wb_chatbot_login_user');
1222 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_login_user', 'qcld_wb_chatbot_login_user');
1223 -function qcld_wb_chatbot_login_user(){
1224 - // First check the nonce, if it fails the function will break
1225 - check_ajax_referer('wpwbot-order-nonce', 'security');
1226 - // Nonce is checked, get the POST data and sign user on
1227 - $info = array();
1228 - $info['user_login'] = trim(sanitize_text_field(wp_unslash($_POST['user_name'])));
1229 - $info['user_password'] = trim(sanitize_text_field(wp_unslash($_POST['user_pass'])));
1230 - $info['remember'] = true;
1231 - $user_signon = wp_signon($info, false);
1232 - $response = array();
1233 - if (is_wp_error($user_signon)) {
1234 - $response['status'] = "fail";
1235 - $response['message'] = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_order_password_incorrect'))));
1236 - } else {
1237 - $response = get_order_by_username($info['user_login']);
1238 - $response['status'] = "success";
1239 - }
1240 - wp_send_json($response);
1241 -}
1242 -add_action('wp_ajax_qcld_wb_chatbot_loged_in_user_orders', 'qcld_wb_chatbot_loged_in_user_orders');
1243 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_loged_in_user_orders', 'qcld_wb_chatbot_loged_in_user_orders');
1244 -function qcld_wb_chatbot_loged_in_user_orders(){
1245 - $current_user = wp_get_current_user();
1246 - $user_name = $current_user->user_login;
1247 - $response = get_order_by_username($user_name);
1248 - wp_send_json($response);
1249 -}
1250 -function get_order_by_username($user_name){
1251 - global $post;
1252 - $response = array();
1253 - $response['status'] .= "success";
1254 - $user = get_user_by('login', $user_name);
1255 - // The query arguments
1256 - $customer_orders = get_posts(array(
1257 - 'numberposts' => -1,
1258 - 'meta_key' => '_customer_user',
1259 - 'meta_value' => $user->ID,
1260 - 'post_type' => wc_get_order_types(),
1261 - 'post_status' => array_keys(wc_get_order_statuses()),
1262 - 'posts_per_page' => 10,
1263 - 'orderby' => 'date',
1264 - ));
1265 - $response['order_num'] = count($customer_orders);
1266 - $order_html = '';
1267 - if ($response['order_num'] > 0) {
1268 - $response['message'] .= wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_order_found'))));
1269 - $order_html .= '<div class="wp-chatbot-orders-container">
1270 - <div class="wp-chatbot-orders-header">
1271 - <div class="order-id">' . __('ID', 'chatbot') . '</div>
1272 - <div class="order-date">' . __('Date', 'chatbot') . ' </div>
1273 - <div class="order-items">' . __('Items', 'chatbot') . '</div>
1274 - <div class="order-status">' . __('Status', 'chatbot') . '</div>
1275 - </div>';
1276 - foreach ($customer_orders as $order) {
1277 - //Formatting order summery
1278 - if (isset($_COOKIE['from_app']) && $_COOKIE['from_app'] == 'yes') {
1279 - $thanks_page_id = sanitize_text_field(get_option('wp_chatbot_app_order_thankyou'));
1280 - $thanks_parmanlink = esc_url(get_permalink($thanks_page_id));
1281 - $order_url = '<a href="' . $thanks_parmanlink . '?order_id=' . $order->ID . '" >' . $order->ID . '</a>';
1282 - } else {
1283 - $order_url = '<a href="' . get_url(get_permalink(get_option('wpcommerce_myaccount_page_id')) . '/view-order/' . $order->ID) . '" target="_blank" >' . $order->ID . '</a>';
1284 - }
1285 - $order_html .= '<div class="wp-chatbot-orders-single">
1286 - <div class="order-id"> ' . $order_url . '</div>
1287 - <div class="order-date"> <p>' . gmdate("m/d/Y", strtotime($order->post_date)) . '</p> </div>
1288 - <div class="order-items">';
1289 - $singleOrder = new WC_Order($order->ID);
1290 - $items = $singleOrder->get_items();
1291 - foreach ($items as $item) {
1292 - $order_html .= '<p>' . $item["name"] . ' X ' . $item["qty"] . '</p>';
1293 - }
1294 - $order_html .= '</div>
1295 - <div class="order-status">' . strtoupper(end(explode("-", $order->post_status))) . '</div>
1296 -
1297 - </div>';
1298 - }
1299 - $order_html .= '</div>';
1300 - } else {
1301 - $response['message'] .= get_option('qlcd_wp_chatbot_sorry') . '! <strong>' . $user_name . '</strong>';
1302 - $order_html .= '<p>' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_order_not_found')))) . '</p>';
1303 - }
1304 - $response['html'] = $order_html;
1305 - return $response;
1306 -}
1307 -//Recently viewed products
1308 -//keeping id in cookies as
1309 -function wp_chatbot_track_product_view(){
1310 - if (!is_singular('product')) {
1311 - return;
1312 - }
1313 - global $post;
1314 - wp_chatbot_view_track_product_by_id($post->ID);
1315 -}
1316 -function wp_chatbot_view_track_product_by_id($post_id){
1317 - if (empty($_COOKIE['wp_chatbot_wpcommerce_recently_viewed']))
1318 - $viewed_products = array();
1319 - else
1320 - $viewed_products = (array)explode('|', $_COOKIE['wp_chatbot_wpcommerce_recently_viewed']);
1321 - if (!in_array($post_id, $viewed_products)) {
1322 - $viewed_products[] = $post_id;
1323 - }
1324 - if (sizeof($viewed_products) > 15) {
1325 - array_shift($viewed_products);
1326 - }
1327 - // Store for session only
1328 - if( function_exists( 'wc_setcookie' ) ){
1329 - wc_setcookie('wp_chatbot_wpcommerce_recently_viewed', implode('|', $viewed_products));
1330 - }
1331 -}
1332 -add_action('template_redirect', 'wp_chatbot_track_product_view', 20);
1333 -//recent view product ajax
1334 -add_action('wp_ajax_qcld_wb_chatbot_recently_viewed_products', 'qcld_wb_chatbot_recently_viewed_products');
1335 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_recently_viewed_products', 'qcld_wb_chatbot_recently_viewed_products');
1336 -function qcld_wb_chatbot_recently_viewed_products(){
1337 - // Get wpCommerce Global
1338 - $_pf = new WC_Product_Factory();
1339 - //show post per page.
1340 - $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
1341 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1342 - // Get recently viewed product cookies data
1343 - $viewed_products = !empty($_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) ? (array)explode('|', $_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) : array();
1344 - $viewed_products = array_filter(array_map('absint', $viewed_products));
1345 - //get featured products if has.
1346 - $featured_products = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured'))));
1347 - //Getting recently vieew products.
1348 - if (!empty($viewed_products)) {
1349 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_viewed_product_welcome'))));
1350 - $product_query = new WP_Query(array(
1351 - 'posts_per_page' => $product_per_page,
1352 - 'no_found_rows' => 1,
1353 - 'post_status' => 'publish',
1354 - 'post_type' => 'product',
1355 - 'post__in' => $viewed_products,
1356 - ));
1357 - //Getting featured products
1358 - } else if ($featured_products->post_count > 0) {
1359 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_featured_product_welcome'))));
1360 - $product_query = $featured_products;
1361 - } else {
1362 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1363 - //Getting recent products
1364 - $product_query = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'orderby' => 'date', 'order' => 'DESC'));
1365 - }
1366 - if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1367 - $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1368 - } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1369 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1370 - } else {
1371 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1372 - }
1373 - $html = '<div class="wp-chatbot-agent-profile">
1374 - <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1375 - <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1376 - <div class="wp-chatbot-bubble">' . $wp_chatbot_product_title . '</div>
1377 - </div>';
1378 - if ($product_query->post_count > 0) {
1379 - $html .= '<div class="wp-chatbot-products-area">';
1380 - $html .= '<ul class="wp-chatbot-products">';
1381 - while ($product_query->have_posts()) : $product_query->the_post();
1382 - $product = $_pf->get_product(get_the_ID());
1383 - $html .= '<li class="wp-chatbot-product">';
1384 - $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
1385 - $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
1386 - <div class="wp-chatbot-product-summary">
1387 - <div class="wp-chatbot-product-table">
1388 - <div class="wp-chatbot-product-table-cell">
1389 - <h3 class="wp-chatbot-product-title">' . esc_html($product->post->post_title) . '</h3>
1390 - <div class="price">' . $product->get_price_html() . '</div>';
1391 - $html .= ' </div>
1392 - </div>
1393 - </div></a>
1394 - </li>';
1395 - endwhile;
1396 - wp_reset_query();
1397 - wp_reset_postdata();
1398 - $html .= '</ul></div>';
1399 - } else {
1400 - $html .= '<div class="wp-chatbot-products-area">';
1401 - $html .= '<p style="text-align: center">You have no products !';
1402 - $html .= '</div>';
1403 - }
1404 - wp_send_json($html);
1405 -}
1406 -//Recently viewed product shortcode
1407 -add_shortcode('wpwbot_products', 'qcld_wb_chatbot_recently_viewed_shortcode');
1408 -function qcld_wb_chatbot_recently_viewed_shortcode(){
1409 - // Get wpCommerce Global
1410 - $_pf = new WC_Product_Factory();
1411 - $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
1412 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1413 - // Get recently viewed product cookies data
1414 - $viewed_products = !empty($_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) ? (array)explode('|', $_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) : array();
1415 - $viewed_products = array_filter(array_map('absint', $viewed_products));
1416 - //get featured products if has.
1417 - $featured_products = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured'))));
1418 - //Getting recently vieew products.
1419 - if (!empty($viewed_products)) {
1420 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_viewed_product_welcome'))));
1421 - $product_query = new WP_Query(array(
1422 - 'posts_per_page' => $product_per_page,
1423 - 'no_found_rows' => 1,
1424 - 'post_status' => 'publish',
1425 - 'post_type' => 'product',
1426 - 'post__in' => $viewed_products,
1427 - ));
1428 - //implementing featured products
1429 - } else if ($featured_products->post_count > 0) {
1430 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_featured_product_welcome'))));
1431 - $product_query = $featured_products;
1432 - } else {
1433 - $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1434 - //Getting recent products
1435 - $product_query = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'orderby' => 'date', 'order' => 'DESC'));
1436 - }
1437 - if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1438 - $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1439 - } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1440 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1441 - } else {
1442 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1443 - }
1444 - $html = '<div class="wp-chatbot-agent-profile">
1445 - <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1446 - <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1447 - <div class="wp-chatbot-bubble">' . esc_html($wp_chatbot_product_title) . '</div>
1448 - </div>';
1449 - if ($product_query->post_count > 0) {
1450 - $html .= '<div class="wp-chatbot-products-area">';
1451 - $html .= '<ul class="wp-chatbot-products">';
1452 - while ($product_query->have_posts()) : $product_query->the_post();
1453 - $product = $_pf->get_product(get_the_ID());
1454 - $html .= '<li class="wp-chatbot-product">';
1455 - $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
1456 - $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
1457 - <div class="wp-chatbot-product-summary">
1458 - <div class="wp-chatbot-product-table">
1459 - <div class="wp-chatbot-product-table-cell">
1460 - <h3 class="wp-chatbot-product-title">' . esc_html($product->post->post_title) . '</h3>
1461 - <div class="price">' . $product->get_price_html() . '</div>';
1462 - $html .= ' </div>
1463 - </div>
1464 - </div></a>
1465 - </li>';
1466 - endwhile;
1467 - wp_reset_query();
1468 - wp_reset_postdata();
1469 - $html .= '</ul></div>';
1470 - } else {
1471 - $html .= '<div class="wp-chatbot-products-area">';
1472 - $html .= '<p style="text-align: center">' . __('You have no products', 'chatbot') . ' !';
1473 - $html .= '</div>';
1474 - }
1475 - return $html;
1476 -}
1477 -//Show cart for wp chatbot
1478 -add_action('wp_ajax_qcld_wb_chatbot_show_cart', 'qcld_wb_chatbot_show_cart');
1479 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_show_cart', 'qcld_wb_chatbot_show_cart');
1480 -function qcld_wb_chatbot_show_cart(){
1481 - global $wpcommerce;
1482 - // $cart_url = $wpcommerce->cart->get_cart_url();
1483 - $cart_url = wc_get_cart_url();
1484 - $checkout_url = wc_get_checkout_url();
1485 - //$checkout_url = $wpcommerce->cart->get_checkout_url();
1486 - $items = $wpcommerce->cart->get_cart();
1487 - $itemCount = $wpcommerce->cart->cart_contents_count;
1488 - $cart_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_shopping_cart'))));
1489 - $no_cart_item_msg = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1490 - if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1491 - $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1492 - } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1493 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1494 - } else {
1495 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1496 - }
1497 - $html = '<div class="wp-chatbot-agent-profile">
1498 - <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1499 - <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1500 - <div class="wp-chatbot-bubble">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_welcome')))) . '</div>
1501 - </div>';
1502 - if ($itemCount >= 1) {
1503 - $html .= '<div class ="wp-chatbot-cart-container">';
1504 - $html .= '<div class="wp-chatbot-cart-header"><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_title')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_price')))) . '</div><div class="qcld-wp-chatbot-cell"></div></div>';
1505 - $html .= '<div class ="wp-chatbot-cart-body">';
1506 - foreach ($items as $item => $values) {
1507 - $cart_item= apply_filters('wpcommerce_cart_item_product', $values['data'], $values, $item);
1508 - //product image
1509 - $getProductDetail = wc_get_product($values['product_id']);
1510 - $price = get_post_meta($values['product_id'], '_price', true);
1511 - $html .= '<div class="wp-chatbot-cart-single">
1512 - <div class="qcld-wp-chatbot-cell"> <h3 class="wp-chatbot-title">' . $cart_item->get_title() . '</h3></div>';
1513 - $html .= '<div class="qcld-wp-chatbot-cell">';
1514 - $html .= '<input class="qcld-wp-chatbot-cart-item-qnty" data-cart-item="' . $item . '" type="number" min="1" value="' . $values['quantity'] . '"></div>';
1515 - $html .= '<div class="qcld-wp-chatbot-cell"><span class="wp-chatbot-cart-price">' . apply_filters('wpcommerce_cart_item_price', WC()->cart->get_product_price($cart_item), $values, $item) . '</span> </div>';
1516 - $html .= '<div class="qcld-wp-chatbot-cell"><span data-cart-item="' . $item . '" class="wp-chatbot-remove-cart-item">X</span></div> </div>';
1517 - }
1518 - $html .= ' </div>';//End of cart body
1519 - $html .= '<div class="wp-chatbot-cart-single">
1520 - <div class="qcld-wp-chatbot-cell"></div>
1521 - <div class="qcld-wp-chatbot-cell"><strong>Total</strong></div>
1522 - <div class="qcld-wp-chatbot-cell"><strong>' . $wpcommerce->cart->get_cart_total() . '</strong></div>
1523 - </div>';
1524 - $html .= '<div class="wp-chatbot-cart-footer"><div class="qcld-wp-chatbot-cart-page"><a class="wp-chatbot-cart-link" href="' . $cart_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_link')))) . '</a></div><div class="qcld-wp-chatbot-checkout"><a class="wp-chatbot-checkout-link" href="' . $checkout_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_checkout_link')))) . '</a></div></div>';
1525 - $html .= ' </div>';
1526 - } else {
1527 - $html .= '<div class="wp-chatbot-cart-container">';
1528 - $html .= '<div><p style="text-align:center">' . $no_cart_item_msg . '</p></div>';
1529 - $html .= '</div>';
1530 - }
1531 - $response = array('html' => $html, 'items' => $itemCount);
1532 - wp_send_json($response);
1533 -}
1534 -//cart onley for wp chatbot
1535 -add_action('wp_ajax_qcld_wb_chatbot_only_cart', 'qcld_wb_chatbot_only_cart');
1536 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_only_cart', 'qcld_wb_chatbot_only_cart');
1537 -function qcld_wb_chatbot_only_cart(){
1538 - global $wpcommerce;
1539 - // $cart_url = $wpcommerce->cart->get_cart_url();
1540 - $cart_url = wc_get_cart_url();
1541 - $checkout_url = wc_get_checkout_url();
1542 - //$checkout_url = $wpcommerce->cart->get_checkout_url();
1543 - $items = $wpcommerce->cart->get_cart();
1544 - $itemCount = $wpcommerce->cart->cart_contents_count;
1545 - $no_cart_item_msg = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1546 -
1547 - $html = '';
1548 - if ($itemCount >= 1) {
1549 - $html .= '<div class ="wp-chatbot-cart-container">';
1550 - $html .= '<div class="wp-chatbot-cart-header"><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_title')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_price')))) . '</div><div class="qcld-wp-chatbot-cell"></div></div>';
1551 - $html .= '<div class ="wp-chatbot-cart-body">';
1552 - foreach ($items as $item => $values) {
1553 - $cart_item= apply_filters('wpcommerce_cart_item_product', $values['data'], $values, $item);
1554 - //product image
1555 - $getProductDetail = wc_get_product($values['product_id']);
1556 - $price = get_post_meta($values['product_id'], '_price', true);
1557 - $html .= '<div class="wp-chatbot-cart-single">
1558 - <div class="qcld-wp-chatbot-cell"> <h3 class="wp-chatbot-title">' . $cart_item->get_title() . '</h3></div>';
1559 - $html .= '<div class="qcld-wp-chatbot-cell">';
1560 - $html .= '<input class="qcld-wp-chatbot-cart-item-qnty" data-cart-item="' . $item . '" type="number" min="1" value="' . $values['quantity'] . '"></div>';
1561 - $html .= '<div class="qcld-wp-chatbot-cell"><span class="wp-chatbot-cart-price">' . apply_filters('wpcommerce_cart_item_price', WC()->cart->get_product_price($cart_item), $values, $item) . '</span> </div>';
1562 - $html .= '<div class="qcld-wp-chatbot-cell"><span data-cart-item="' . $item . '" class="wp-chatbot-remove-cart-item">X</span></div> </div>';
1563 - }
1564 - $html .= ' </div>';//End of cart body
1565 - $html .= '<div class="wp-chatbot-cart-single">
1566 - <div class="qcld-wp-chatbot-cell"></div>
1567 - <div class="qcld-wp-chatbot-cell"><strong>Total</strong></div>
1568 - <div class="qcld-wp-chatbot-cell"><strong>' . $wpcommerce->cart->get_cart_total() . '</strong></div>
1569 - </div>';
1570 - $html .= '<div class="wp-chatbot-cart-footer"><div class="qcld-wp-chatbot-cart-page"><a class="wp-chatbot-cart-link" href="' . $cart_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_link')))) . '</a></div><div class="qcld-wp-chatbot-checkout"><a class="wp-chatbot-checkout-link" href="' . $checkout_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_checkout_link')))) . '</a></div></div>';
1571 - $html .= ' </div>';
1572 - } else {
1573 - $html .= '<div class="wp-chatbot-cart-container">';
1574 - $html .= '<div><p style="text-align:center">' . esc_html($no_cart_item_msg) . '</p></div>';
1575 - $html .= '</div>';
1576 - }
1577 - $response = array('html' => $html, 'items' => $itemCount);
1578 - wp_send_json($response);
1579 -}
1580 -//Cart show Shortcode
1581 -add_shortcode('wpwbot_cart', 'qcld_wb_chatbot_cart_shortcode');
1582 -function qcld_wb_chatbot_cart_shortcode(){
1583 - global $wpcommerce;
1584 - $items = $wpcommerce->cart->get_cart();
1585 - $itemCount = $wpcommerce->cart->cart_contents_count;
1586 - $cart_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_shopping_cart'))));
1587 - $no_cart_item_msg = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1588 - if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1589 - $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1590 - } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1591 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1592 - } else {
1593 - $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1594 - }
1595 - $html = '<div class="wp-chatbot-agent-profile">
1596 - <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1597 - <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1598 - <div class="wp-chatbot-bubble">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_welcome')))) . '</div>
1599 - </div>';
1600 - if ($itemCount >= 1) {
1601 - $html .= '<div class ="wp-chatbot-cart-container">';
1602 - $html .= '<div class="wp-chatbot-cart-header"><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_title')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_price')))) . '</div> <div class="qcld-wp-chatbot-cell"></div> </div>';
1603 - $html .= '<div class ="wp-chatbot-cart-body">';
1604 - foreach ($items as $item => $values) {
1605 - $cart_item = apply_filters('wpcommerce_cart_item_product', $values['data'], $values, $item);
1606 - //product image
1607 - $getProductDetail = wc_get_product($values['product_id']);
1608 - $price = get_post_meta($values['product_id'], '_price', true);
1609 - $html .= '<div class="wp-chatbot-cart-single">
1610 - <div class="qcld-wp-chatbot-cell"> <h3 class="wp-chatbot-title">' . $cart_item->get_title() . '</h3></div>';
1611 - $html .= '<div class="qcld-wp-chatbot-cell">';
1612 - $html .= '<input class="qcld-wp-chatbot-cart-item-qnty" data-cart-item="' . $item . '" type="number" min="1" value="' . $values['quantity'] . '"></div>';
1613 - $html .= '<div class="qcld-wp-chatbot-cell"><span class="wp-chatbot-cart-price">' . apply_filters('wpcommerce_cart_item_price', WC()->cart->get_product_price($cart_item), $values, $item) . '</span> </div>';
1614 - $html .= '<div class="qcld-wp-chatbot-cell"><span data-cart-item="' . $item . '" class="wp-chatbot-remove-cart-item">X</span></div> </div>';
1615 - }
1616 - $html .= ' </div>';//End of cart body
1617 - $html .= '<div class="wp-chatbot-cart-single">
1618 - <div class="qcld-wp-chatbot-cell"></div>
1619 - <div class="qcld-wp-chatbot-cell"><strong>Total</strong></div>
1620 - <div class="qcld-wp-chatbot-cell"><strong>' . $wpcommerce->cart->get_cart_total() . '</strong></div>
1621 - </div>';
1622 - $html .= '<div class="wp-chatbot-cart-footer"><div class="qcld-wp-chatbot-cart-page"><a href="' . site_url() . '/cart" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_link')))) . '</a></div><div class="qcld-wp-chatbot-checkout"><a href="' . site_url() . '/checkout" target="_blank">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_checkout_link')))) . '</a></div></div>';
1623 - $html .= ' </div>';
1624 - } else {
1625 - $html .= '<div class="wp-chatbot-cart-container">';
1626 - $html .= '<div><p style="text-align:center">' . $no_cart_item_msg . '</p></div>';
1627 - $html .= '</div>';
1628 - }
1629 - // $response=array('html'=>$html,'items'=>$itemCount);
1630 - return $html;
1631 -}
1632 -//Updating the cart items.
1633 -add_action('wp_ajax_qcld_wb_chatbot_update_cart_item_number', 'qcld_wb_chatbot_update_cart_item_number');
1634 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_update_cart_item_number', 'qcld_wb_chatbot_update_cart_item_number');
1635 -function qcld_wb_chatbot_update_cart_item_number(){
1636 - check_ajax_referer( 'wp_chatbot', 'nonce' );
1637 - //getting cart items n
1638 - $cart_item_key = sanitize_text_field(wp_unslash($_POST['cart_item_key']));
1639 - $qnty = sanitize_text_field(wp_unslash($_POST['qnty']));
1640 - global $wpcommerce;
1641 - $result = $wpcommerce->cart->set_quantity($cart_item_key, $qnty);
1642 - wp_send_json($result);
1643 -}
1644 -//Show item after removing from cart page.
1645 -add_action('wp_ajax_qcld_wb_chatbot_cart_item_remove', 'qcld_wb_chatbot_cart_item_remove');
1646 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_cart_item_remove', 'qcld_wb_chatbot_cart_item_remove');
1647 -function qcld_wb_chatbot_cart_item_remove(){
1648 - check_ajax_referer( 'wp_chatbot', 'nonce' );
1649 - //getting cart items n
1650 - $cart_item_key = sanitize_text_field(wp_unslash($_POST['cart_item']));
1651 - global $wpcommerce;
1652 - $result = $wpcommerce->cart->remove_cart_item($cart_item_key);
1653 - wp_send_json($result);
1654 -}
1655 -//Show cart page by shortcode.
1656 -add_action('wp_ajax_qcld_wb_chatbot_cart_page', 'qcld_wb_chatbot_cart_page');
1657 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_cart_page', 'qcld_wb_chatbot_cart_page');
1658 -function qcld_wb_chatbot_cart_page(){
1659 - global $wpcommerce;
1660 - $itemCount = $wpcommerce->cart->cart_contents_count;
1661 - $html = "";
1662 - if ($itemCount < 0) {
1663 - $html .= wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1664 - } else {
1665 - $html .= do_shortcode("[wpcommerce_cart]");
1666 - }
1667 - wp_send_json($html);
1668 -}
1669 -//Show checkout page by shortcode.
1670 -add_action('wp_ajax_qcld_wb_chatbot_checkout_page', 'qcld_wb_chatbot_checkout_page');
1671 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_checkout_page', 'qcld_wb_chatbot_checkout_page');
1672 -function qcld_wb_chatbot_checkout_page(){
1673 - global $wpcommerce;
1674 - $itemCount = $wpcommerce->cart->cart_contents_count;
1675 - $html = "";
1676 - if ($itemCount < 0) {
1677 - $status = 'no';
1678 - $html .= wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1679 - } else {
1680 - $status = 'yes';
1681 - $checkout_page_id = get_option('wp_chatbot_app_checkout');
1682 - $checkout_parmanlink = esc_url(get_permalink($checkout_page_id));
1683 - $html .= $checkout_parmanlink;
1684 - }
1685 - $response = array('status' => $status, 'html' => $html);
1686 - wp_send_json($response);
1687 -}
1688 -//_dynamic_intent
1689 -function qcld_dynamic_intent(){
1690 - global $wpdb;
1691 - $intents = array();
1692 -
1693 - $ai_df = get_option('enable_wp_chatbot_dailogflow');
1694 - $custom_intent_labels = maybe_unserialize( get_option('qlcd_wp_custon_intent_label'));
1695 - if($ai_df==1 && isset($custom_intent_labels[0]) && trim($custom_intent_labels[0])!=''):
1696 -
1697 - foreach($custom_intent_labels as $custom_intent_label):
1698 - $intents[] = $custom_intent_label;
1699 - endforeach;
1700 -
1701 - endif;
1702 -
1703 -
1704 -
1705 - if(class_exists('Qcformbuilder_Forms_Admin')){
1706 -
1707 -
1708 - $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM ". $wpdb->prefix."wfb_forms WHERE type= %s",'primary')); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1709 -
1710 - if(!empty($results)){
1711 -
1712 - foreach($results as $result){
1713 - $form = maybe_unserialize($result->config);
1714 - $intents[] = $form['name'];
1715 - }
1716 -
1717 - }
1718 - }
1719 -
1720 - if(!empty($intents)){
1721 - return implode(", ", $intents);
1722 - }else{
1723 - return '';
1724 - }
1725 -
1726 -}
1727 -
1728 -//User login on Checkout page.
1729 -// add_action('wp_ajax_qcld_wb_chatbot_checkout_user_login', 'qcld_wb_chatbot_checkout_user_login');
1730 -// add_action('wp_ajax_nopriv_qcld_wb_chatbot_checkout_user_login', 'qcld_wb_chatbot_checkout_user_login');
1731 -// function qcld_wb_chatbot_checkout_user_login(){
1732 -// // Nonce is checked, get the POST data and sign user on
1733 -// $info = array();
1734 -// //$info['nonce'] = $_POST['nonce_val'];
1735 -// $info['user_login'] = trim(sanitize_text_field(wp_unslash($_POST['user_name'])));
1736 -// $info['user_password'] = trim(sanitize_text_field(wp_unslash($_POST['user_pass'])));
1737 -// $info['remember'] = true;
1738 -// $user_signon = wp_signon($info, false);
1739 -// // $response=$info;
1740 -// $response = array();
1741 -// if (is_wp_error($user_signon)) {
1742 -// // $response['status'] = "fail";
1743 -// $response = "no";
1744 -// } else {
1745 -// $response = "yes";
1746 -// }
1747 -// wp_send_json($response);
1748 -// }
1749 -// Load template for App Order Thank You page url
1750 -function wp_chatbot_load_app_template($template){
1751 - if (is_page('wpwbot-mobile-app')) {
1752 - return dirname(__FILE__) . '/templates/app-templates/app.php';
1753 - }
1754 - return $template;
1755 -}
1756 -add_filter('template_include', 'wp_chatbot_load_app_template', 99);
1757 -// Load template for App Order Thank You page url
1758 -function wp_chatbot_load_app_order_thankyou_template($template){
1759 - if (is_page('wpwbot-app-order-thankyou')) {
1760 - return dirname(__FILE__) . '/templates/app-templates/app-order-thankyou.php';
1761 - }
1762 - return $template;
1763 -}
1764 -add_filter('template_include', 'wp_chatbot_load_app_order_thankyou_template', 99);
1765 -// Load template for App checkout
1766 -function wp_chatbot_load_app_checkout_template($template){
1767 - if (is_page('wpwbot-app-checkout')) {
1768 - return dirname(__FILE__) . '/templates/app-templates/app-checkout.php';
1769 - }
1770 - return $template;
1771 -}
1772 -add_filter('template_include', 'wp_chatbot_load_app_checkout_template', 99);
1773 -// Create embed page when plugin install or activate
1774 -//register_activation_hook(__FILE__, 'wp_chatbot_create_app_order_thankyou_page');
1775 -add_action('init', 'wp_chatbot_create_app_checkout_thankyou_page');
1776 -function wp_chatbot_create_app_checkout_thankyou_page(){
1777 - if (get_option('wp_chatbot_app_pages') == 1) {
1778 - //Mobile App page create
1779 - $existing_app = new WP_Query( array( 'post_type' => 'page', 'name' => 'wpwbot-mobile-app', 'post_status' => 'publish', 'posts_per_page' => 1 ) );
1780 - if ( ! $existing_app->have_posts() ) {
1781 - //post status and options
1782 - $app_page = array(
1783 - 'comment_status' => 'closed',
1784 - 'ping_status' => 'closed',
1785 - 'post_author' => get_current_user_id(),
1786 - 'post_date' => gmdate('Y-m-d H:i:s'),
1787 - 'post_status' => 'publish',
1788 - 'post_title' => 'wpwBot Mobile App',
1789 - 'post_name' => 'wpwbot-mobile-app',
1790 - 'post_type' => 'page',
1791 - );
1792 - //insert page and save the id
1793 - $wpwbot_app = wp_insert_post($app_page, false);
1794 - //save the id in the database
1795 - update_option('wp_chatbot_app_checkout', $wpwbot_app);
1796 - }
1797 - //App checkout page create
1798 - $existing_checkout = new WP_Query( array( 'post_type' => 'page', 'name' => 'wpwbot-app-checkout', 'post_status' => 'publish', 'posts_per_page' => 1 ) );
1799 - if ( ! $existing_checkout->have_posts() ) {
1800 - //post status and options
1801 - $checkout_page = array(
1802 - 'comment_status' => 'closed',
1803 - 'ping_status' => 'closed',
1804 - 'post_author' => get_current_user_id(),
1805 - 'post_date' => gmdate('Y-m-d H:i:s'),
1806 - 'post_status' => 'publish',
1807 - 'post_title' => 'wpwBot App Checkout',
1808 - 'post_name' => 'wpwbot-app-checkout',
1809 - 'post_type' => 'page',
1810 - );
1811 - //insert page and save the id
1812 - $app_checkout = wp_insert_post($checkout_page, false);
1813 - //save the id in the database
1814 - update_option('wp_chatbot_app_checkout', $app_checkout);
1815 - }
1816 - //App Order thank you page create
1817 - $existing_thankyou = new WP_Query( array( 'post_type' => 'page', 'name' => 'wpwbot-app-order-thankyou', 'post_status' => 'publish', 'posts_per_page' => 1 ) );
1818 - if ( ! $existing_thankyou->have_posts() ) {
1819 - //post status and options
1820 - $thankyou_page = array(
1821 - 'comment_status' => 'closed',
1822 - 'ping_status' => 'closed',
1823 - 'post_author' => get_current_user_id(),
1824 - 'post_date' => gmdate('Y-m-d H:i:s'),
1825 - 'post_status' => 'publish',
1826 - 'post_title' => 'wpwBot App Order Thank You',
1827 - 'post_name' => 'wpwbot-app-order-thankyou',
1828 - 'post_type' => 'page',
1829 - );
1830 - //insert page and save the id
1831 - $app_order_thankyou = wp_insert_post($thankyou_page, false);
1832 - //save the id in the database
1833 - update_option('wp_chatbot_app_order_thankyou', $app_order_thankyou);
1834 - }
1835 - }
1836 - //Keep tracking from App by cookies
1837 - if ( isset( $_GET['from'] ) && sanitize_text_field( wp_unslash( $_GET['from'] ) ) === 'app' ) { // phpcs:ignore WordPress.Security.NonceVerification
1838 - if (!isset($_COOKIE['from_app'])) {
1839 - setcookie('from_app', 'yes', (time() + 3600), '/');
1840 - }
1841 - }
1842 -}
1843 -/***
1844 - * Override order Thank page for mobile app
1845 - */
1846 -add_action('wpcommerce_thankyou', 'qcld_wb_chatbot__redirect_after_purchase', 10, 1);
1847 -function qcld_wb_chatbot__redirect_after_purchase($order_get_id){
1848 - if (isset($_COOKIE['from_app']) && $_COOKIE['from_app'] == 'yes') {
1849 - global $wp;
1850 - if (is_checkout() && !empty($wp->query_vars['order-received'])) {
1851 - $thanks_page_id = get_option('wp_chatbot_app_order_thankyou');
1852 - $thanks_parmanlink = esc_url(get_permalink($thanks_page_id));
1853 - wp_safe_redirect($thanks_parmanlink . '?order_id=' . $order_get_id);
1854 - exit;
1855 - }
1856 - } else {
1857 - remove_action('wpcommerce_thankyou', 'qcld_wb_chatbot__redirect_after_purchase');
1858 - do_action('wpcommerce_thankyou', $order_get_id);
1859 - }
1860 -}
1861 -
1862 -function qcld_choose_random($array){
1863 - if (is_array($array) && !empty($array)) {
1864 - return $array[array_rand($array)];
1865 - }
1866 - return $array;
1867 -}
1868 -
1869 -//User session count
1870 -add_action('wp_ajax_qcld_wb_chatbot_session_count', 'qcld_wb_chatbot_session_count');
1871 -add_action('wp_ajax_nopriv_qcld_wb_chatbot_session_count', 'qcld_wb_chatbot_session_count');
1872 -function qcld_wb_chatbot_session_count(){
1873 - // Nonce is checked, get the POST data and sign user on
1874 - check_ajax_referer( 'wp_chatbot', 'nonce' );
1875 - global $wpdb;
1876 - $wpdb->show_errors = true;
1877 - $tableuser = $wpdb->prefix.'wpbot_sessions';
1878 - $response = array();
1879 -
1880 -
1881 - $session_exists = $wpdb->get_row($wpdb->prepare("select * from {$tableuser} where 1 and id = %d",1)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, PluginCheck.Security.DirectDB.UnescapedDBParameter
1882 -
1883 - if(empty($session_exists)){
1884 - $wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
1885 - $tableuser,
1886 - array(
1887 - 'session' => 1,
1888 - )
1889 - );
1890 - }else{
1891 -
1892 - $session_id = $session_exists->id;
1893 -
1894 - $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1895 - $tableuser,
1896 - array(
1897 - 'session'=>($session_exists->session+1),
1898 - ),
1899 - array('id'=>$session_id),
1900 - array(
1901 - '%d',
1902 - ),
1903 - array('%d')
1904 - );
1905 -
1906 - }
1907 -
1908 - wp_send_json($response);
1909 -}
1910 -
1911 -/* WPBot Chat History Addon check */
1912 -function qcld_wpbot_is_active_chat_history(){
1913 -
1914 - if(function_exists('qcwp_chat_session_menu_fnc') || function_exists('qcwp_chat_session_menu_fnc_free') || function_exists( 'qcpdcs_chat_session_menu_fnc' ) ){
1915 - return 1;
1916 - }else{
1917 - return 0;
1918 - }
1919 -
1920 -}
1921 -
1922 -function qcld_wpbot_input_validation( $data ) {
1923 - $data = html_entity_decode($data);
1924 - $data = trim($data);
1925 - $data = stripslashes($data);
1926 - $data = htmlspecialchars($data);
1927 - return $data;
1928 -}
1929 -add_action('wp_ajax_qcld_small_talk_import', 'qcld_small_talk_import');
1930 -function qcld_small_talk_import(){
1931 - if ( ! current_user_can( 'manage_options' ) ) {
1932 - wp_die();
1933 - }
1934 - global $wpdb;
1935 -
1936 - $table = $wpdb->prefix.'wpbot_response';
1937 -
1938 - $csvFile = file(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . 'small_talk.csv');
1939 -
1940 - foreach ($csvFile as $line) {
1941 - $line = str_getcsv($line, ',', '"');
1942 - $wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
1943 - $table, array(
1944 - 'query' => $line[0],
1945 - 'keyword' => $line[1],
1946 - 'response' => $line[2],
1947 - 'category'=> $line[3],
1948 - 'intent'=> '',
1949 - //'lang'=> 'en_US',
1950 - ));
1951 - }
1952 -
1953 - $table2 = $wpdb->prefix.'wpbot_response_category';
1954 -
1955 - $wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
1956 - $table2, array(
1957 - 'name' => 'smalltalk',
1958 - ));
1959 -
1960 - update_option( 'qcld_small_talk_imported', 'yes' );
1961 -
1962 -}
1963 -function sanitize_array( &$array ) {
1964 - if (!empty($array)) {
1965 - foreach ($array as &$value) {
1966 - if( !is_array($value) )
1967 - // sanitize if value is not an array
1968 - $value = sanitize_text_field( esc_html($value) );
1969 - else
1970 - // go inside this function again
1971 - sanitize_array(esc_html($value));
1972 - }
1973 - }
1974 - return $array;
1975 -}
1976 -function qcld_wpbot_meta_tags() {
1977 - echo '<!-- "This site uses ChatBot for WordPress - WPBot from https://www.wpbot.pro/" -->';
1978 -}
1979 -add_action('wp_footer', 'qcld_wpbot_meta_tags', 100);
1980 -
1981 -if ( ! function_exists( 'qcld_change_language_from_center' ) ) {
1982 - add_action( 'wp_ajax_qcld_change_language_from_center', 'qcld_change_language_from_center' );
1983 - add_action( 'wp_ajax_nopriv_qcld_change_language_from_center', 'qcld_change_language_from_center' );
1984 - function qcld_change_language_from_center() {
1985 - if ( ! current_user_can( 'manage_options' ) ) {
1986 - wp_send_json_error( array( 'message' => 'Unauthorized.' ) );
1987 - }
1988 - $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
1989 - if ( ! wp_verify_nonce( $nonce, 'wp_chatbot' ) ) {
1990 - wp_send_json_error( array( 'message' => 'Invalid nonce.' ) );
1991 - }
1992 - $plugin_path = plugin_dir_path( __FILE__ );
1993 - include $plugin_path . 'includes/admin/settings-fields.php';
1994 - $json_file_path = $plugin_path . 'includes/language-center.json';
1995 -
1996 - $json_string = file_get_contents( $json_file_path );
1997 - if ( isset( $_POST['language'] ) ) {
1998 - $language = sanitize_text_field( wp_unslash( $_POST['language'] ) );
1999 - $language_array= json_decode($json_string)->$language;
2000 - update_option( 'wp_chatbot_language_center_language', $language );
2001 - wp_send_json_success( array( 'message' => true, 'data' => $language_array, 'language' => $language ) );
2002 - } else {
2003 - wp_send_json_error( array( 'message' => 'Language not specified.' ) );
2004 -
2005 - }
2006 - }
2007 -}
1 +<?php
2 +/**
3 + * @param $type
4 + * Display wpwBot Icon ball
5 + */
6 +if (!defined('ABSPATH')) exit; // Exit if accessed directly
7 +
8 +
9 +function qcld_custom_search_form( $form ) {
10 + // Add a hidden input to limit search to 'product' post type
11 + if (get_option('wp_chatbot_agent_image') == "custom-agent.png") {
12 + $wp_chatbot_custom_agent_path = get_option('wp_chatbot_custom_agent_path');
13 + } else if (get_option('wp_chatbot_agent_image') != "custom-agent.png") {
14 + $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
15 + } else {
16 + $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
17 + }
18 + $hidden_field = '<a class="wp-chatbot qc_wpbot_chat_link" id="wp-chatbot-search-btn" data-search-type="product" data-search-term="" style="max-height: 50px; margin-left: 10px;padding: 0 !important;position: absolute;top: -9px;right: -60px;"><img src="'. esc_url($wp_chatbot_custom_agent_path) .'" alt=""></a>';
19 + $block_content = str_replace( '</form>', $hidden_field . '</form>', $form );
20 + return $block_content;
21 +}
22 +if(get_option('wpbot_enable_on_search') == 1 && (get_option('disable_floating_button') != '1') && get_option('disable_wp_chatbot') != 1 ){
23 + add_filter( 'get_search_form', 'qcld_custom_search_form' );
24 + add_filter( 'render_block_core/search', 'qcld_modify_gutenberg_search_block', 10, 2 );
25 +}
26 +
27 +
28 +function qcld_modify_gutenberg_search_block( $block_content, $block ) {
29 + // Add a hidden input to limit search to 'product' post type
30 + if (get_option('wp_chatbot_agent_image') == "custom-agent.png") {
31 + $wp_chatbot_custom_agent_path = get_option('wp_chatbot_custom_agent_path');
32 + } else if (get_option('wp_chatbot_agent_image') != "custom-agent.png") {
33 + $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
34 + } else {
35 + $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
36 + }
37 + $hidden_field = '<button type="button" class="wp-chatbot qc_wpbot_chat_link" id="wp-chatbot-search-btn" data-search-type="product" data-search-term="" style="max-height: 50px; margin-left: 10px;padding: 0 !important"><img src="'. esc_url($wp_chatbot_custom_agent_path) .'" alt=""></button>';
38 + // Inject the hidden field before the closing </form> tag
39 + $block_content = str_replace( '</div></form>', $hidden_field . '</div></form>', $block_content );
40 + return $block_content;
41 +}
42 +if(get_option('disable_floating_button') != '1'){
43 + add_action('wp_footer', 'wp_chatbot_load_footer_html');
44 +}
45 +add_action( 'admin_footer', 'qcld_style_for_hide_iframe');
46 +function qcld_style_for_hide_iframe(){
47 +?>
48 + <script>
49 + jQuery( document ).ready(function() {
50 + setInterval(function(){
51 + if(document.querySelector('.wp-block-legacy-widget__edit-preview-iframe')){
52 + document.querySelector('.wp-block-legacy-widget__edit-preview-iframe').addEventListener("load", ev => {
53 + jQuery('.wp-block-legacy-widget__edit-preview-iframe').contents().find('#wp-chatbot-chat-container').hide();
54 + });
55 +
56 + }
57 + }, 500);
58 + });
59 + </script>
60 +<?php
61 +}
62 +/**
63 + * Extract a YouTube video ID from common URL formats.
64 + *
65 + * @param string $url YouTube watch, embed, short, or youtu.be URL.
66 + * @return string Video ID or empty string.
67 + */
68 +if ( ! function_exists( 'qcld_wpbot_extract_youtube_id' ) ) {
69 + function qcld_wpbot_extract_youtube_id( $url ) {
70 + $url = trim( (string) $url );
71 + if ( $url === '' ) {
72 + return '';
73 + }
74 +
75 + if ( preg_match( '/(?:youtube\.com\/(?:embed\/|shorts\/|live\/|watch\?(?:.*&)?v=)|youtu\.be\/)([A-Za-z0-9_-]{11})/', $url, $matches ) ) {
76 + return $matches[1];
77 + }
78 +
79 + $path = (string) wp_parse_url( $url, PHP_URL_PATH );
80 + $base = basename( $path );
81 + if ( preg_match( '/^[A-Za-z0-9_-]{11}$/', $base ) ) {
82 + return $base;
83 + }
84 +
85 + return '';
86 + }
87 +}
88 +if ( ! function_exists( 'qcld_wpbot_youtube_icon_embed_src' ) ) {
89 + function qcld_wpbot_youtube_icon_embed_src( $url ) {
90 + $video_id = qcld_wpbot_extract_youtube_id( $url );
91 + if ( $video_id === '' ) {
92 + return '';
93 + }
94 +
95 + return add_query_arg(
96 + array(
97 + 'autoplay' => '1',
98 + 'mute' => '1',
99 + 'loop' => '1',
100 + 'playlist' => $video_id,
101 + 'controls' => '0',
102 + 'showinfo' => '0',
103 + 'rel' => '0',
104 + 'fs' => '0',
105 + 'iv_load_policy' => '3',
106 + 'cc_load_policy' => '0',
107 + 'disablekb' => '1',
108 + 'playsinline' => '1',
109 + 'modestbranding' => '1',
110 + 'color' => 'white',
111 + ),
112 + 'https://www.youtube.com/embed/' . rawurlencode( $video_id )
113 + );
114 + }
115 +}
116 +function wp_chatbot_load_footer_html(){
117 + if ( get_option('disable_wp_chatbot') != 1 && wp_chatbot_load_controlling() === true) {
118 +
119 + ?>
120 + <style>
121 + <?php if(get_option('wp_chatbot_custom_css')!="") {
122 +
123 + echo wp_strip_all_tags( get_option('wp_chatbot_custom_css') );// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
124 + }
125 + ?>
126 + </style>
127 +
128 + <?php if (get_option('qcld_wb_chatbot_change_bg') == 1) {
129 + if (get_option('qcld_wb_chatbot_board_bg_path') != "") {
130 + $qcld_wb_chatbot_board_bg_path = get_option('qcld_wb_chatbot_board_bg_path');
131 + } else {
132 + $qcld_wb_chatbot_board_bg_path = QCLD_wpCHATBOT_IMG_URL . 'background/background.png';
133 + }
134 + ?>
135 + <style>
136 + .wp-chatbot-container {
137 + background-color: #eceef3 !important;
138 + background-image: url(<?php echo esc_url($qcld_wb_chatbot_board_bg_path); ?>) !important;
139 + background-size: cover !important;
140 + background-position: center !important;
141 + background-repeat: no-repeat !important;
142 + }
143 + .wp-chatbot-template-01 #wp-chatbot-board-container,
144 + .wp-chatbot-template-01 .wp-chatbot-board-container {
145 + background-color: #eceef3 !important;
146 + background-image: none !important;
147 + }
148 + .wp-chatbot-template-01 #wp-chatbot-board-container::before,
149 + .wp-chatbot-template-01 .wp-chatbot-board-container::before {
150 + background-color: #eceef3 !important;
151 + background-image: url(<?php echo esc_url($qcld_wb_chatbot_board_bg_path); ?>) !important;
152 + background-size: cover !important;
153 + background-position: center !important;
154 + background-repeat: no-repeat !important;
155 + }
156 + </style>
157 + <?php }
158 + $wp_chatbot_enable_rtl = "";
159 + if (get_option('enable_wp_chatbot_rtl') == '1') {
160 + $wp_chatbot_enable_rtl .= "wp-chatbot-rtl";
161 + }
162 + $wp_chatbot_enable_mobile_screen = "";
163 + // if (get_option('enable_wp_chatbot_mobile_full_screen')==1) {
164 + $wp_chatbot_enable_mobile_screen .= "wp-chatbot-mobile-full-screen";
165 + // }
166 + ?>
167 + <div id="wp-chatbot-chat-container" class="<?php echo esc_attr($wp_chatbot_enable_rtl .' '.$wp_chatbot_enable_mobile_screen); ?>" style="<?php if(get_option('disable_floating_button') == '1'){ echo 'display:none';} ?>">
168 + <div id="wp-chatbot-integration-container">
169 + <div class="wp-chatbot-integration-button-container">
170 + <?php if (get_option('enable_wp_chatbot_skype_floating_icon') == 1) { ?>
171 + <a href="skype:<?php echo esc_attr(get_option('enable_wp_chatbot_skype_id')); ?>?chat"><span
172 + class="inetegration-skype-btn" title="<?php esc_attr_e('Skype', 'chatbot'); ?>"> </span></a>
173 + <?php } ?>
174 + <?php if (get_option('enable_wp_chatbot_floating_whats') == 1) { ?>
175 + <a href="<?php echo esc_url('https://api.whatsapp.com/send?phone=' . get_option('qlcd_wp_chatbot_whats_num')); ?>"
176 + target="_blank"><span class="intergration-whats"
177 + title="<?php esc_html_e('WhatsApp', 'chatbot'); ?>"></span></a>
178 + <?php } ?>
179 + <?php if (get_option('enable_wp_chatbot_floating_viber') == 1) { ?>
180 + <a href="<?php echo esc_url('https://live.viber.com/#/' . get_option('qlcd_wp_chatbot_viber_acc')); ?>"
181 + target="_blank"><span class="intergration-viber"
182 + title="<?php esc_html_e('Viber', 'chatbot'); ?>"></span></a>
183 + <?php } ?>
184 + <?php if (get_option('enable_wp_chatbot_floating_phone') == 1 && get_option('qlcd_wp_chatbot_phone') != "") { ?>
185 + <a href="tel:<?php echo esc_attr(get_option('qlcd_wp_chatbot_phone')); ?>"><span
186 + class="intergration-phone"
187 + title="<?php esc_html_e('Phone', 'chatbot'); ?>"> </span></a>
188 + <?php } ?>
189 + <?php if (get_option('enable_wp_chatbot_floating_link') == 1 && get_option('qlcd_wp_chatbot_weblink') != "") { ?>
190 + <a href="<?php echo esc_url(get_option('qlcd_wp_chatbot_weblink')); ?>" target="_blank"><span
191 + class="intergration-weblink" title="<?php esc_html_e('Web Link', 'chatbot'); ?>"></span></a>
192 + <?php } ?>
193 + </div>
194 + </div>
195 + <?php
196 + //Get wpcommerce cart
197 +
198 + $qcld_wb_chatbot_theme = get_option('qcld_wb_chatbot_theme');
199 + if (file_exists(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . '/templates/' . $qcld_wb_chatbot_theme . '/style.css')) {
200 + wp_register_style('qcld-wp-chatbot-style', plugins_url(basename(plugin_dir_path(__FILE__)) . '/templates/' . $qcld_wb_chatbot_theme . '/style.css', basename(__FILE__)), '', QCLD_wpCHATBOT_VERSION, 'screen');
201 + wp_enqueue_style('qcld-wp-chatbot-style');
202 + }
203 + if (file_exists(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . '/templates/' . $qcld_wb_chatbot_theme . '/template.php')) {
204 + require_once(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . '/templates/' . $qcld_wb_chatbot_theme . '/template.php');
205 + } else {
206 + echo "<h2>" . esc_html__('No wpWBot Theme Found!', 'chatbot') . "</h2>";
207 + }
208 + ?>
209 + <?php
210 + if (get_option('disable_wp_chatbot_notification') != 1) {
211 + ?>
212 + <div id="wp-chatbot-notification-container" class="wp-chatbot-notification-container">
213 + <div class="wp-chatbot-notification-controller">
214 + <span class="wp-chatbot-notification-close">
215 + <?php esc_html_e('X', 'chatbot'); ?>
216 + </span>
217 + </div>
218 + <?php
219 + $testingTip="";
220 + if (get_option('wp_chatbot_agent_image') == "custom-agent.png") {
221 + $wp_chatbot_custom_agent_path = get_option('wp_chatbot_custom_agent_path');
222 + } else if (get_option('wp_chatbot_agent_image') != "custom-agent.png") {
223 + $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
224 + } else {
225 + $wp_chatbot_custom_agent_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
226 + }
227 + ?>
228 + <div class="wp-chatbot-notification-agent-profile">
229 + <div class="wp-chatbot-notification-widget-avatar" ><img
230 + src="<?php echo esc_url($wp_chatbot_custom_agent_path); ?>" alt=""></div>
231 + <div class="wp-chatbot-notification-welcome"><?php echo wp_kses_post(wpb_randmom_message_handle(maybe_unserialize(get_option('qlcd_wp_chatbot_welcome')))) . ' <strong>' . esc_html(get_option('qlcd_wp_chatbot_host')) . '</strong>'; ?></div>
232 + </div>
233 + <?php
234 + //update_option('qlcd_wp_chatbot_notifications','Welcome to WpBot');
235 + $notifications = qcld_wb_chatbot_func_str_replace(wp_kses_post(maybe_unserialize(get_option('qlcd_wp_chatbot_notifications'))));
236 +
237 + ?>
238 +
239 + <div class="wp-chatbot-notification-message"><?php echo esc_html($notifications[0]); ?></div>
240 + </div>
241 + <?php } ?>
242 + <!--wp-chatbot-board-container-->
243 + <div id="wp-chatbot-ball" class="">
244 + <div class="wp-chatbot-ball">
245 + <div class="wp-chatbot-ball-animator wp-chatbot-ball-animation-switch"></div>
246 + <?php
247 + if (get_option('wp_chatbot_icon') == "custom.png") {
248 + $wp_chatbot_custom_icon_path = (!empty(get_option('wp_chatbot_custom_icon_path'))) ? get_option('wp_chatbot_custom_icon_path') : QCLD_wpCHATBOT_IMG_URL . 'icon-1.png';
249 +
250 + } else if (get_option('wp_chatbot_icon') != "custom.png") {
251 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_icon');
252 + } else {
253 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom.png';
254 + }
255 + $_wpbot_icon_video = get_option('wp_chatbot_icon_video', '');
256 + $_wpbot_video_is_youtube = ( strpos( $_wpbot_icon_video, 'youtube.com' ) !== false || strpos( $_wpbot_icon_video, 'youtu.be' ) !== false );
257 + $_wpbot_youtube_embed_src = $_wpbot_video_is_youtube ? qcld_wpbot_youtube_icon_embed_src( $_wpbot_icon_video ) : '';
258 + $_wpbot_video_delay_ms = absint( get_option( 'wp_chatbot_icon_video_delay', 0 ) ) * 1000;
259 +
260 + $wp_chatbot_ball_is_youtube = ($_wpbot_icon_video !== '' && (strpos($_wpbot_icon_video, 'youtube.com') !== false || strpos($_wpbot_icon_video, 'youtu.be') !== false));
261 + $wp_chatbot_ball_is_video = ($_wpbot_icon_video !== '' && !$wp_chatbot_ball_is_youtube);
262 + $wp_chatbot_ball_has_video = ($wp_chatbot_ball_is_youtube || $wp_chatbot_ball_is_video);
263 + ?>
264 + <img src="<?php echo esc_url($wp_chatbot_custom_icon_path); ?>"
265 + alt="wpChatIcon" qcld_agent="<?php echo esc_url($wp_chatbot_custom_icon_path); ?>"
266 + id="wp-chatbot-ball-icon-img"
267 + <?php if ($wp_chatbot_ball_has_video) { echo 'style="display:none;"'; } ?> >
268 + <?php if ( $_wpbot_icon_video !== '' ) : ?>
269 + <?php if ( $_wpbot_video_is_youtube && $_wpbot_youtube_embed_src !== '' ) : ?>
270 + <iframe class="wpbot-icon-video" src="<?php echo $_wpbot_video_delay_ms > 0 ? 'about:blank' : esc_url( $_wpbot_youtube_embed_src ); ?>" data-wpbot-yt-src="<?php echo esc_url( $_wpbot_youtube_embed_src ); ?>" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture"></iframe>
271 + <?php elseif ( ! $_wpbot_video_is_youtube ) : ?>
272 + <video class="wpbot-icon-video" src="<?php echo esc_url( $_wpbot_icon_video ); ?>" autoplay muted loop playsinline preload="auto"></video>
273 + <?php endif; ?>
274 + <?php endif; ?>
275 + </div>
276 +
277 + </div>
278 + <?php
279 + if ( $_wpbot_icon_video !== '' ) :
280 + ?>
281 + <script>
282 + (function(){
283 + var wpbotDelay = <?php echo (int) $_wpbot_video_delay_ms; ?>;
284 + function wpbotForcePlay(){
285 + var v = document.querySelector('#wp-chatbot-ball video.wpbot-icon-video');
286 + if( v ){
287 + v.muted = true;
288 + v.volume = 0;
289 + v.loop = true;
290 + var tries = 0, maxTries = 30;
291 + var timer = setInterval(function(){
292 + tries++;
293 + v.play().then(function(){ clearInterval(timer); }).catch(function(){});
294 + if( tries >= maxTries ) clearInterval(timer);
295 + }, 300);
296 + }
297 + var yt = document.querySelector('#wp-chatbot-ball iframe.wpbot-icon-video');
298 + if( yt ){
299 + var ytSrc = yt.getAttribute('data-wpbot-yt-src');
300 + if( ytSrc && ( !yt.getAttribute('src') || yt.getAttribute('src') === 'about:blank' || yt.getAttribute('src').indexOf('autoplay=1') === -1 ) ){
301 + yt.setAttribute('src', ytSrc);
302 + }
303 + }
304 + }
305 + function wpbotDelayedPlay(){
306 + setTimeout(wpbotForcePlay, wpbotDelay);
307 + }
308 + if( document.readyState === 'loading' ){
309 + document.addEventListener('DOMContentLoaded', wpbotDelayedPlay);
310 + } else {
311 + wpbotDelayedPlay();
312 + }
313 + window.addEventListener('load', function(){
314 + setTimeout(wpbotForcePlay, wpbotDelay);
315 + });
316 + })();
317 + </script>
318 + <?php endif; ?>
319 + <?php
320 + $fb_app_id = get_option('qlcd_wp_chatbot_fb_app_id');
321 + $fb_page_id = get_option('qlcd_wp_chatbot_fb_page_id');
322 + $fb_mgs_color = get_option('qlcd_wp_chatbot_fb_color') != '' ? get_option('qlcd_wp_chatbot_fb_color') : '#0084ff';
323 + $fb_mgs_in = get_option('qlcd_wp_chatbot_fb_in_msg') != '' ? get_option('qlcd_wp_chatbot_fb_in_msg') : 'You are welcome';
324 + $fb_mgs_out = get_option('qlcd_wp_chatbot_fb_out_msg') != '' ? get_option('qlcd_wp_chatbot_fb_out_msg') : 'You are not logged in';
325 + if (get_option('enable_wp_chatbot_messenger') == 1 && get_option('enable_wp_chatbot_messenger_floating_icon') == 1) {
326 + ?>
327 + <!-- wp-chatbot-board-container-->
328 + <script>
329 +
330 + window.fbAsyncInit = function () {
331 + FB.init({
332 + appId: '<?php echo esc_js($fb_app_id); ?>',
333 + autoLogAppEvents: true,
334 + xfbml: true,
335 + version: 'v2.12'
336 + });
337 + };
338 +
339 + (function (d, s, id) {
340 + var js, fjs = d.getElementsByTagName(s)[0];
341 + if (d.getElementById(id)) return;
342 + js = d.createElement(s);
343 + js.id = id;
344 + js.src = 'https://connect.facebook.net/en_US/sdk.js';
345 + fjs.parentNode.insertBefore(js, fjs);
346 + }(document, 'script', 'facebook-jssdk'));
347 + </script>
348 + <div class="fb-customerchat"
349 + page_id="<?php echo esc_attr($fb_page_id); ?>"
350 + greeting_dialog_display="hide"
351 + theme_color="<?php echo esc_attr($fb_mgs_color); ?>"
352 + logged_in_greeting="<?php echo esc_attr($fb_mgs_in); ?>"
353 + logged_out_greeting="<?php echo esc_attr($fb_mgs_out); ?>"></div>
354 + <?php
355 + }
356 + ?>
357 + <!--container-->
358 + <!--wp-chatbot-ball-wrapper-->
359 + </div>
360 +
361 + <?php
362 +
363 + if ( get_transient( 'qcld_bot_clear_cache' ) ) {
364 + echo '<script type="text/javascript">var wpbot_clear_cache = 1 </script>';
365 + delete_transient( 'qcld_bot_clear_cache' );
366 + }
367 +
368 + }else{
369 + ?>
370 + <script>
371 + var openingHourIsFn = 1;
372 + </script>
373 + <?php
374 + }
375 +}
376 +//wp_chatbot load control handler.
377 +function wp_chatbot_load_controlling(){
378 + $wp_chatbot_load = true;
379 +
380 +
381 + if (get_option('wp_chatbot_show_pages') == 'off') {
382 + $wp_chatbot_select_pages = unserialize(get_option('wp_chatbot_show_pages_list'));
383 + if (is_page() && !empty($wp_chatbot_select_pages)) {
384 +
385 + if (in_array(get_the_ID(), $wp_chatbot_select_pages) == true) {
386 +
387 + $wp_chatbot_load = true;
388 + } else {
389 + $wp_chatbot_load = false;
390 + }
391 +
392 + }
393 +
394 + if(function_exists('is_shop')){
395 + if (is_shop() || is_cart() || is_checkout() || 'product' == get_post_type()) {
396 + $wp_chatbot_load = false;
397 + }
398 + }
399 +
400 + }
401 + if (get_option('wp_chatbot_show_wpcommerce') == 'off') {
402 +
403 + }
404 + //load wpwbot shortcode template and prevent default wpwbot from footer.
405 + if (is_page()) {
406 + $page_id = get_the_ID();
407 + $page = get_post($page_id);
408 + if (has_shortcode($page->post_content, 'wpwbot')) {
409 + $wp_chatbot_load = false;
410 + }
411 + }
412 +
413 + $post_list = maybe_unserialize(get_option('wp_chatbot_exclude_post_list'));
414 +
415 + if( is_array( $post_list ) && in_array(get_post_type(), $post_list)){
416 + $wp_chatbot_load = false;
417 + }
418 + if (wp_chatbot_is_mobile() && get_option('disable_wp_chatbot_on_mobile') == 1) {
419 + $wp_chatbot_load = false;
420 + }
421 +
422 + if (get_option('wp_chatbot_show_home_page') == 'off' && is_home()) {
423 + $wp_chatbot_load = false;
424 + }
425 +
426 + if (get_option('wp_chatbot_show_posts') == 'off' && 'post' == get_post_type()) {
427 + $wp_chatbot_load = false;
428 + }
429 +
430 + if(is_admin()){
431 + $wp_chatbot_load = false;
432 + }
433 + return $wp_chatbot_load;
434 +}
435 +//checking Devices
436 +function wp_chatbot_is_mobile(){
437 + $useragent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
438 + if (preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i', $useragent) || preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i', substr($useragent, 0, 4))) {
439 + return true;
440 + } else {
441 + return false;
442 + }
443 +}
444 +//Checking wpwbot opening hour
445 +function wp_chatbot_check_opening_hours(){
446 + $curent_day=strtolower(gmdate('l',strtotime(current_time( 'mysql' ))));
447 + $current_time=gmdate('H:i',strtotime(current_time( 'mysql')));
448 + $is_wpwbot_open =false;
449 + if(get_option('wpwbot_hours')) {
450 + $wpwbot_times = wp_kses_post(unserialize(get_option('wpwbot_hours')));
451 + if (isset($wpwbot_times[$curent_day])) {
452 + $day_times = $wpwbot_times[$curent_day];
453 + if (!empty($day_times)) {
454 + foreach ($day_times as $day_time) {
455 + if(strtotime($current_time) > strtotime($day_time[0]) && strtotime($current_time) < strtotime($day_time[1]) ){
456 + $is_wpwbot_open=true;
457 + }
458 + }
459 + }
460 + }
461 + }
462 + return $is_wpwbot_open;
463 +}
464 +
465 +/**
466 + * wpwBot Search keyword product
467 + */
468 +add_action('wp_ajax_qcld_wb_chatbot_keyword', 'qcld_wb_chatbot_keyword');
469 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_keyword', 'qcld_wb_chatbot_keyword');
470 +function qcld_wb_chatbot_keyword(){
471 + // Verify nonce for security
472 + $nonce = isset($_POST['security']) ? sanitize_text_field(wp_unslash($_POST['security'])) : (isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '');
473 + if ( ! wp_verify_nonce( $nonce, 'wp_chatbot' ) && ! wp_verify_nonce( $nonce, 'qcsecretbotnonceval123qc' ) ) {
474 + wp_send_json_error( array( 'status' => 'fail', 'message' => 'Security check failed.' ) );
475 + wp_die();
476 + }
477 +
478 + $keyword = sanitize_text_field(wp_unslash($_POST['keyword']));
479 + $product_per_page = get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10;
480 + if (get_option('qlcd_wp_chatbot_search_option') == 'standard') {
481 + $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
482 + $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
483 + //Merging all query together.
484 + $argu_params = array(
485 + 'post_type' => 'product',
486 + 'post_status' => 'publish',
487 + 'posts_per_page' => $product_per_page,
488 + 'orderby' => $product_orderby,
489 + 'order' => $product_order,
490 + 's' => $keyword,
491 + );
492 + /******
493 + *WP Query Operation to get products.*
494 + *******/
495 + $product_query = new WP_Query($argu_params);
496 + $product_num = $product_query->post_count;
497 + //Getting total product number by string.
498 + $total_argu = array('post_type' => 'product', 's' => $keyword, 'posts_per_page' => 100);
499 + $total_query = new WP_Query($total_argu);
500 + $total_product_num = $total_query->post_count;
501 + $html = '<div class="wp-chatbot-products-area">';
502 + $_pf = new WC_Product_Factory();
503 + //repeating the products
504 + if ($product_num > 0) {
505 + $html .= '<ul class="wp-chatbot-products">';
506 + while ($product_query->have_posts()) : $product_query->the_post();
507 + $product = $_pf->get_product(get_the_ID());
508 + if (wp_chatbot_product_controlling(get_the_ID()) == true) {
509 + $html .= '<li class="wp-chatbot-product">';
510 + $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
511 + $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
512 + <div class="wp-chatbot-product-summary">
513 + <div class="wp-chatbot-product-table">
514 + <div class="wp-chatbot-product-table-cell">
515 + <h3 class="wp-chatbot-product-title">' . $product->post->post_title . '</h3>
516 + <div class="price">' . $product->get_price_html() . '</div>';
517 + $html .= ' </div>
518 + </div>
519 + </div></a>
520 + </li>';
521 + }
522 + endwhile;
523 + wp_reset_postdata();
524 + $html .= '</ul>';
525 + if ($total_product_num > $product_per_page && $product_per_page > 0 ) {
526 + $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="' . esc_attr($keyword) . '" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
527 + }
528 + }
529 + $html .= '</div>';
530 + } else if (get_option('qlcd_wp_chatbot_search_option') == 'advanced') {
531 + $result = wpwBot_Search::factory()->search($keyword);
532 + $products = $result['products'];
533 + $product_num = count($result['products']);
534 + $total_product_num = $result['total_products'];
535 + $more_product_ids = implode(",", $result['more_ids']);
536 + $html = '<div class="wp-chatbot-products-area">';
537 + $_pf = new WC_Product_Factory();
538 + //repeating the products
539 + if ($product_num > 0) {
540 + $html .= '<ul class="wp-chatbot-products">';
541 + foreach ($products as $product) {
542 + if (wp_chatbot_product_controlling($product->get_id()) == true) {
543 + $html .= '<li class="wp-chatbot-product">';
544 + $html .= '<a target="_blank" href="' . get_permalink($product->get_id()) . '" wp-chatbot-pid= "' . $product->get_id() . '" title="' . esc_attr($product->get_title()) . '">';
545 + $html .= get_the_post_thumbnail($product->get_id(), 'shop_catalog') . '
546 + <div class="wp-chatbot-product-summary">
547 + <div class="wp-chatbot-product-table">
548 + <div class="wp-chatbot-product-table-cell">
549 + <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
550 + <div class="price">' . $product->get_price_html() . '</div>';
551 + $html .= ' </div></div></div></a></li>';
552 + }
553 + }
554 + $html .= '</ul>';
555 + if ($total_product_num > $product_per_page && $product_per_page > 0) {
556 + $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="' . esc_attr($more_product_ids) . '" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
557 + }
558 + }
559 + $html .= '</div>';
560 + }
561 + $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
562 + wp_send_json($response);
563 +
564 +}
565 +/**
566 + * wpwBot Categories
567 + */
568 +add_action('wp_ajax_qcld_wb_chatbot_category', 'qcld_wb_chatbot_category');
569 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_category', 'qcld_wb_chatbot_category');
570 +function qcld_wb_chatbot_category(){
571 + $category_type="common";
572 + if (get_option('wp_chatbot_show_parent_category') != "") {
573 + $terms = get_terms( array( 'taxonomy' => 'product_cat', 'parent' => 0, 'hide_empty' => true, 'fields' => 'all' ) );
574 + } else {
575 + $terms = get_terms( array( 'taxonomy' => 'product_cat', 'hide_empty' => true, 'fields' => 'all' ) );
576 + }
577 + $html = "";
578 + foreach ($terms as $term) {
579 + $child_terms=get_terms( array( 'taxonomy' => 'product_cat', 'parent' => $term->term_id, 'hide_empty' => true, 'fields' => 'all' ) );
580 + if(get_option('wp_chatbot_show_sub_category')==1 && count($child_terms) >0){
581 + $category_type="hasChilds";
582 + }
583 + $html .= '<span class="qcld-chatbot-product-category" data-category-type="' . $category_type . '" data-category-slug="' . $term->slug . '" data-category-id="' . $term->term_id . '">' . $term->name . '</span>';
584 + }
585 + wp_send_json($html);
586 +
587 +}
588 +/**
589 + * wpwBot Sub categories
590 + */
591 +add_action('wp_ajax_qcld_wb_chatbot_sub_category', 'qcld_wb_chatbot_sub_category');
592 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_sub_category', 'qcld_wb_chatbot_sub_category');
593 +function qcld_wb_chatbot_sub_category(){
594 + $parent_id = intval( wp_unslash( $_POST['parent_id'] ) );
595 + $terms = get_terms( array( 'taxonomy' => 'product_cat', 'parent' => $parent_id, 'hide_empty' => true, 'fields' => 'all' ) );
596 + $html = "";
597 + foreach ($terms as $term) {
598 + $html .= '<span class="qcld-chatbot-product-category" data-category-type="common" data-category-slug="' . $term->slug . '" data-category-id="' . $term->term_id . '">' . $term->name . '</span>';
599 + }
600 + wp_send_json($html);
601 +
602 +}
603 +/**
604 + * wpwBot category product
605 + */
606 +add_action('wp_ajax_qcld_wb_chatbot_category_products', 'qcld_wb_chatbot_category_products');
607 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_category_products', 'qcld_wb_chatbot_category_products');
608 +function qcld_wb_chatbot_category_products(){
609 + $category_id = intval( wp_unslash( $_POST['category'] ) );
610 + $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
611 + $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
612 + $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
613 + //Merging all query together.
614 + $argu_params = array(
615 + 'post_type' => 'product',
616 + 'post_status' => 'publish',
617 + 'ignore_sticky_posts' => 1,
618 + 'orderby' => $product_orderby,
619 + 'order' => $product_order,
620 + 'posts_per_page' => $product_per_page,
621 + 'tax_query' => array(
622 + array(
623 + 'taxonomy' => 'product_cat',
624 + 'field' => 'term_id',
625 + 'terms' => $category_id,
626 + 'operator' => 'IN'
627 + )
628 + )
629 + );
630 + /******
631 + *WP Query Operation to get products.*
632 + *******/
633 + $product_query = new WP_Query($argu_params);
634 + $product_num = $product_query->post_count;
635 + //Getting total product number by string.
636 + $total_argu = array(
637 + 'post_type' => 'product',
638 + 'post_status' => 'publish',
639 + 'posts_per_page' => 100,
640 + 'tax_query' => array(
641 + array(
642 + 'taxonomy' => 'product_cat',
643 + 'field' => 'term_id',
644 + 'terms' => $category_id,
645 + 'operator' => 'IN'
646 + )
647 + )
648 + );
649 + $total_query = new WP_Query($total_argu);
650 + $total_product_num = $total_query->post_count;
651 + $_pf = new WC_Product_Factory();
652 + //repeating the products
653 + $html = '';
654 + if ($product_num > 0) {
655 + $html .= '<div class="wp-chatbot-products-area">';
656 + $html .= '<ul class="wp-chatbot-products">';
657 + while ($product_query->have_posts()) : $product_query->the_post();
658 + $product = $_pf->get_product(get_the_ID());
659 + //$qcld_thumb = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'shop_thumbnail' );
660 + $html .= '<li class="wp-chatbot-product">';
661 + $html .= '<a class="wp-chatbot-product-url" wp-chatbot-pid= "' . get_the_ID() . '" target="_blank" href="' . get_permalink(get_the_ID()) . '" title="' . esc_attr($product->get_title() ? $product->get_title() : get_the_ID()) . '">';
662 + $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
663 + <div class="wp-chatbot-product-summary">
664 + <div class="wp-chatbot-product-table">
665 + <div class="wp-chatbot-product-table-cell">
666 + <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
667 + <div class="price">' . $product->get_price_html() . '</div>';
668 + $html .= ' </div>
669 + </div>
670 + </div></a>
671 + </li>';
672 + endwhile;
673 + wp_reset_postdata();
674 + $html .= '</ul>';
675 + if ($total_product_num > $product_per_page && $product_per_page >0) {
676 + $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="category" data-search-term="' . $category_id . '" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
677 + }
678 + $html .= '</div>';
679 + } else {
680 + $html = '';
681 + }
682 + $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
683 + wp_send_json($response);
684 +}
685 +/**
686 + * wpwBot latest, featured, recent product
687 + */
688 +add_action('wp_ajax_qcld_wb_chatbot_featured_products', 'qcld_wb_chatbot_featured_products');
689 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_featured_products', 'qcld_wb_chatbot_featured_products');
690 +function qcld_wb_chatbot_featured_products(){
691 + $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
692 + $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
693 + $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
694 + //get featured products query.
695 + $argu_params = array('post_status' => 'publish',
696 + 'posts_per_page' => $product_per_page,
697 + 'post_type' => 'product',
698 + 'post_status' => 'publish',
699 + 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured'))
700 + );
701 + /******
702 + *WP Query Operation to get products.*
703 + *******/
704 + $product_query = new WP_Query($argu_params);
705 + $product_num = $product_query->post_count;
706 + //Getting total product number by string.
707 + $total_argu = array('post_status' => 'publish',
708 + 'posts_per_page' => 100,
709 + 'post_type' => 'product',
710 + 'post_status' => 'publish',
711 + 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured',),)
712 + );
713 + $total_query = new WP_Query($total_argu);
714 + $total_product_num = $total_query->post_count;
715 + $html = '<div class="wp-chatbot-products-area">';
716 + $_pf = new WC_Product_Factory();
717 + //repeating the products
718 + if ($product_num > 0) {
719 + //$html .= '<p>sdf sdfdsf : '.$asdfdf.'</p>';
720 + $html .= '<ul class="wp-chatbot-products">';
721 + while ($product_query->have_posts()) : $product_query->the_post();
722 + $product = $_pf->get_product(get_the_ID());
723 + $html .= '<li class="wp-chatbot-product">';
724 + $html .= '<a class="wp-chatbot-product-url" wp-chatbot-pid= "' . get_the_ID() . '" target="_blank" href="' . get_permalink(get_the_ID()) . '" title="' . esc_attr($product->get_title() ? $product->get_title() : get_the_ID()) . '">';
725 + $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
726 + <div class="wp-chatbot-product-summary">
727 + <div class="wp-chatbot-product-table">
728 + <div class="wp-chatbot-product-table-cell">
729 + <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
730 + <div class="price">' . $product->get_price_html() . '</div>';
731 + $html .= ' </div>
732 + </div>
733 + </div></a>
734 + </li>';
735 + endwhile;
736 + wp_reset_postdata();
737 + $html .= '</ul>';
738 + if ($total_product_num > $product_per_page) {
739 + $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="featured" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
740 + }
741 + }
742 + $html .= '</div>';
743 + $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
744 + wp_send_json($response);
745 +}
746 +//Product display controll
747 +function wp_chatbot_product_controlling($product_id){
748 + $display_product = true;
749 + //Controlling Out of Stock product display from back end.
750 + $_pf = new WC_Product_Factory();
751 + $product = $_pf->get_product($product_id);
752 + if ($product->manage_stock == 'yes' && $product->stock_quantity <= 0 && get_option('wp_chatbot_exclude_stock_out_product') == 1) {
753 + $display_product = false;
754 + }
755 + return $display_product;
756 +}
757 +//Get Sale products
758 +add_action('wp_ajax_qcld_wb_chatbot_sale_products', 'qcld_wb_chatbot_sale_products');
759 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_sale_products', 'qcld_wb_chatbot_sale_products');
760 +function qcld_wb_chatbot_sale_products(){
761 + $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
762 + $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
763 + $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
764 + //get sale products query.
765 + $argu_params = array(
766 + 'post_type' => 'product',
767 + 'post_status' => 'publish',
768 + 'posts_per_page' => $product_per_page,
769 + 'meta_query' => array(
770 + 'relation' => 'OR',
771 + array( // Simple products type
772 + 'key' => '_sale_price',
773 + 'value' => 0,
774 + 'compare' => '>',
775 + 'type' => 'numeric'
776 + ),
777 + array( // Variable products type
778 + 'key' => '_min_variation_sale_price',
779 + 'value' => 0,
780 + 'compare' => '>',
781 + 'type' => 'numeric'
782 + )
783 + )
784 + );
785 + /******
786 + *WP Query Operation to get products.*
787 + *******/
788 + $product_query = new WP_Query($argu_params);
789 + $product_num = $product_query->post_count;
790 + //Getting total product number by string.
791 + $total_argu = array(
792 + 'post_type' => 'product',
793 + 'post_status' => 'publish',
794 + 'posts_per_page' => 100,
795 + 'meta_query' => array(
796 + 'relation' => 'OR',
797 + array( // Simple products type
798 + 'key' => '_sale_price',
799 + 'value' => 0,
800 + 'compare' => '>',
801 + 'type' => 'numeric'
802 + ),
803 + array( // Variable products type
804 + 'key' => '_min_variation_sale_price',
805 + 'value' => 0,
806 + 'compare' => '>',
807 + 'type' => 'numeric'
808 + )
809 + )
810 + );
811 + $total_query = new WP_Query($total_argu);
812 + $total_product_num = $total_query->post_count;
813 + $html = '<div class="wp-chatbot-products-area">';
814 + $_pf = new WC_Product_Factory();
815 + //repeating the products
816 + if ($product_num > 0) {
817 + //$html .= '<p>sdf sdfdsf : '.$asdfdf.'</p>';
818 + $html .= '<ul class="wp-chatbot-products">';
819 + while ($product_query->have_posts()) : $product_query->the_post();
820 + $product = $_pf->get_product(get_the_ID());
821 + $html .= '<li class="wp-chatbot-product">';
822 + $html .= '<a class="wp-chatbot-product-url" wp-chatbot-pid= "' . get_the_ID() . '" target="_blank" href="' . get_permalink(get_the_ID()) . '" title="' . esc_attr($product->get_title() ? $product->get_title() : get_the_ID()) . '">';
823 + $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
824 + <div class="wp-chatbot-product-summary">
825 + <div class="wp-chatbot-product-table">
826 + <div class="wp-chatbot-product-table-cell">
827 + <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
828 + <div class="price">' . $product->get_price_html() . '</div>';
829 + $html .= ' </div>
830 + </div>
831 + </div></a>
832 + </li>';
833 + endwhile;
834 + wp_reset_postdata();
835 + $html .= '</ul>';
836 + if ($total_product_num > $product_per_page) {
837 + $html .= '<p style="text-align: center"><button type="button" id="wp-chatbot-loadmore" data-offset="' . $product_per_page . '" data-search-type="product" data-search-term="sale" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_load_more')))) . ' <span id="wp-chatbot-loadmore-loader"></span></button> </p>';
838 + }
839 + }
840 + $html .= '</div>';
841 + $response = array('html' => $html, 'product_num' => $total_product_num, 'per_page' => $product_per_page);
842 + wp_send_json($response);
843 +}
844 +//load more
845 +add_action('wp_ajax_qcld_wb_chatbot_load_more', 'qcld_wb_chatbot_load_more');
846 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_load_more', 'qcld_wb_chatbot_load_more');
847 +function qcld_wb_chatbot_load_more(){
848 + $offset = intval( wp_unslash( $_POST['offset'] ) );
849 + $search_type = sanitize_text_field( wp_unslash( $_POST['search_type'] ) );
850 + $search_term = sanitize_text_field( wp_unslash( $_POST['search_term'] ) );
851 + $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
852 + $product_orderby = sanitize_text_field(get_option('qlcd_wp_chatbot_product_orderby') != '' ? get_option('qlcd_wp_chatbot_product_orderby') : 'title');
853 + $product_order = sanitize_text_field(get_option('qlcd_wp_chatbot_product_order') != '' ? get_option('qlcd_wp_chatbot_product_order') : 'ASC');
854 + $next_offset = intval($product_per_page + $offset);
855 + if ($search_type == 'product' && $search_term != 'featured' && $search_term != 'sale' && get_option('qlcd_wp_chatbot_search_option') == 'advanced') {
856 + //if have multiple ids then explode else have single need to array push
857 + if (strpos($search_term, ',') !== false) {
858 + $product_ids = explode(',', $search_term);
859 + } else {
860 + $product_ids = array($search_term);
861 + }
862 + $result = wpwBot_Search::factory()->get_load_more_products($product_ids);
863 + $products = $result['products'];
864 + $product_num = count($result['products']);
865 + $total_product_num = $result['total_products'];
866 + $more_product_ids = implode(",", $result['more_ids']);
867 + $_pf = new WC_Product_Factory();
868 + //repeating the products
869 + $html = '';
870 + if ($product_num > 0) {
871 + foreach ($products as $product) {
872 + $html .= '<li class="wp-chatbot-product">';
873 + $html .= '<a target="_blank" href="' . get_permalink($product->get_id()) . '" wp-chatbot-pid= "' . $product->get_id() . '" title="' . esc_attr($product->get_title()) . '">';
874 + $html .= get_the_post_thumbnail($product->get_id(), 'shop_catalog') . '
875 + <div class="wp-chatbot-product-summary">
876 + <div class="wp-chatbot-product-table">
877 + <div class="wp-chatbot-product-table-cell">
878 + <h3 class="wp-chatbot-product-title">' . $product->get_title() . '</h3>
879 + <div class="price">' . $product->get_price_html() . '</div>';
880 + $html .= ' </div></div></div></a></li>';
881 + }
882 + }
883 + $response = array('html' => $html, 'product_num' => $total_product_num, 'search_term' => $more_product_ids, 'offset' => $next_offset, 'per_page' => $product_per_page);
884 + } else {
885 + if ($search_type == 'product' && $search_term != 'featured' && $search_term != 'sale') { //For Standard search
886 + $argu_params = array(
887 + 'post_type' => 'product',
888 + 'post_status' => 'publish',
889 + 'posts_per_page' => $product_per_page,
890 + 'offset' => $offset,
891 + 'orderby' => $product_orderby,
892 + 'order' => $product_order,
893 + 's' => $search_term,
894 + );
895 + } else if ($search_type == 'category') {
896 + $argu_params = array(
897 + 'post_type' => 'product',
898 + 'post_status' => 'publish',
899 + 'ignore_sticky_posts' => 1,
900 + 'posts_per_page' => $product_per_page,
901 + 'orderby' => $product_orderby,
902 + 'order' => $product_order,
903 + 'offset' => $offset,
904 + 'tax_query' => array(
905 + array(
906 + 'taxonomy' => 'product_cat',
907 + 'field' => 'term_id',
908 + 'terms' => $search_term,
909 + 'operator' => 'IN'
910 + )
911 + )
912 + );
913 + } else if ($search_type == 'product' && $search_term == 'featured') {
914 + $argu_params = array(
915 + 'post_type' => 'product',
916 + 'post_status' => 'publish',
917 + 'ignore_sticky_posts' => 1,
918 + 'posts_per_page' => $product_per_page,
919 + 'orderby' => $product_orderby,
920 + 'order' => $product_order,
921 + 'offset' => $offset,
922 + 'meta_query' => array('key' => '_featured', 'value' => 'yes')
923 + );
924 + } else if ($search_type == 'product' && $search_term == 'sale') {
925 + $argu_params = array(
926 + 'post_type' => 'product',
927 + 'post_status' => 'publish',
928 + 'ignore_sticky_posts' => 1,
929 + 'posts_per_page' => $product_per_page,
930 + 'orderby' => $product_orderby,
931 + 'order' => $product_order,
932 + 'offset' => $offset,
933 + 'meta_query' => array(
934 + 'relation' => 'OR',
935 + array( // Simple products type
936 + 'key' => '_sale_price',
937 + 'value' => 0,
938 + 'compare' => '>',
939 + 'type' => 'numeric'
940 + ),
941 + array( // Variable products type
942 + 'key' => '_min_variation_sale_price',
943 + 'value' => 0,
944 + 'compare' => '>',
945 + 'type' => 'numeric'
946 + )
947 + )
948 + );
949 + }
950 + $product_query = new WP_Query($argu_params);
951 + $product_num = $product_query->post_count;
952 + $_pf = new WC_Product_Factory();
953 + //repeating the products
954 + $html = '';
955 + if ($product_num > 0) {
956 + while ($product_query->have_posts()) : $product_query->the_post();
957 + $product = $_pf->get_product(get_the_ID());
958 + $html .= '<li class="wp-chatbot-product">';
959 + $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
960 + $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
961 + <div class="wp-chatbot-product-summary">
962 + <div class="wp-chatbot-product-table">
963 + <div class="wp-chatbot-product-table-cell">
964 + <h3 class="wp-chatbot-product-title">' . $product->post->post_title . '</h3>
965 + <div class="price">' . $product->get_price_html() . '</div>';
966 + $html .= ' </div>
967 + </div>
968 + </div></a>
969 + </li>';
970 + endwhile;
971 + wp_reset_postdata();
972 + } else {
973 + $html .= '';
974 + }
975 + $response = array('html' => $html, 'product_num' => $product_num, 'search_term' => $search_term, 'offset' => $next_offset, 'per_page' => $product_per_page);
976 + }
977 + wp_send_json($response);
978 +}
979 +//product details
980 +add_action('wp_ajax_qcld_wb_chatbot_product_details', 'qcld_wb_chatbot_product_details');
981 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_product_details', 'qcld_wb_chatbot_product_details');
982 +function qcld_wb_chatbot_product_details(){
983 + $product_id = intval( wp_unslash( $_POST['wp_chatbot_pid'] ) );
984 + //Tracking product view from chat board
985 + wp_chatbot_view_track_product_by_id($product_id);
986 + //wpcommerce product factory
987 + $wc_pf = new WC_Product_Factory();
988 + $product = $wc_pf->get_product($product_id);
989 + $product_type = $wc_pf->get_product_type($product_id);
990 + $product_title = '<h2 id="wp-chatbot-product-title" ><a target="_blank" href="' . get_permalink($product->get_id()) . '">' . $product->get_title() . '</a></h2>';
991 + $product_desc = apply_filters('the_excerpt', $product->post->post_excerpt);//$product->post->post_excerpt;
992 + $gallery_ids = $product->get_gallery_image_ids();
993 + //images processing..
994 + $product_feature_image_id = get_post_thumbnail_id($product_id);
995 + $product_feature_image = wp_get_attachment_image_src($product_feature_image_id, 'full');
996 + $product_feature_thumb = wp_get_attachment_image_src($product_feature_image_id, 'shop_thumbnail');
997 + //$full_img_src = $product_feature_image[0];
998 + //$product_image = '<img style="width:500px;height:300px" src="' . $full_img_src . '" >';
999 + $product_image = '<div class="wp-chatbot-product-image-large">
1000 + <a href="' . $product_feature_image[0] . '" id="wp-chatbot-product-image-large-path"><img id="wp-chatbot-product-image-large-src" src="' . $product_feature_image[0] . '" alt="Large Image" title="Zoom Image" /></a>
1001 + </div>';
1002 + $product_image .= '<div class="wp-chatbot-product-image-thumbs"><ul>
1003 + <li class="wp-chatbot-product-active-image-thumbs"><a href="' . $product_feature_image[0] . '" class="wp-chatbot-product-image-thumbs-path"><img class="wp-chatbot-product-image-thumbs-src" src="' . $product_feature_thumb[0] . '" alt="Thumb Image" /></a></li>';
1004 + if (!empty($gallery_ids)) {
1005 + foreach ($gallery_ids as $gallery_id) {
1006 + $gallery_image = wp_get_attachment_image_src($gallery_id, 'full');
1007 + $gallery_thumb = wp_get_attachment_image_src($gallery_id, 'shop_thumbnail');
1008 + $product_image .= '<li><a href="' . $gallery_image[0] . '" class="wp-chatbot-product-image-thumbs-path"><img class="wp-chatbot-product-image-thumbs-src" src="' . $gallery_thumb[0] . '" alt="Thumb Image" /></a></li>';
1009 + }
1010 + }
1011 + $product_image .= '</ul></div>';
1012 + $product_price = '<p class="wp-chatbot-product-price" id="wp-chatbot-product-price">' . $product->get_price_html() . '</p>';
1013 + $product_sku = '<p class="wp-chatbot-product-sku"> ' . __('SKU', 'chatbot') . ' : ' . $product->get_sku() . '</p>';
1014 + //if ( $product->is_in_stock() || $product->is_purchasable() )
1015 + //Handle variable product start
1016 + $variations = "";
1017 + $add_cart_button = "";
1018 + $product_quantity = "";
1019 + if ($product->is_in_stock()) {
1020 + if ($product_type == "variable") {
1021 + //Getting product variation number based details
1022 + $variations_data = array();
1023 + foreach ($product->get_children() as $child_id) {
1024 + $all_cfs = get_post_custom($child_id);
1025 + array_push($variations_data, array('variation_id' => $child_id, 'variation_data' => $all_cfs));
1026 + }
1027 + $variations_data = json_encode($variations_data);
1028 + $attributes = $product->get_attributes();
1029 + //Handling Variant & Non Variant products
1030 + $var_attrs = $product->get_variation_attributes();
1031 + $varation_names = array();
1032 + if (!empty($var_attrs)) {
1033 + foreach ($var_attrs as $key => $value) {
1034 + array_push($varation_names, $key);
1035 + }
1036 + }
1037 + $debug = $varation_names;
1038 + foreach ($attributes as $attribute) {
1039 + /*if (empty($attribute['is_visible']) || ($attribute['is_taxonomy'] && !taxonomy_exists($attribute['name']))) {
1040 + continue;
1041 + }*/
1042 + $title = wc_attribute_label($attribute['name']);
1043 + $name = $attribute['name'];
1044 + if ($attribute['is_taxonomy']) {
1045 + $values = wc_get_product_terms($product->get_id(), $attribute['name'], array('fields' => 'slugs'));
1046 + } else {
1047 + $values = array_map('trim', explode(WC_DELIMITER, $attribute['value']));
1048 + }
1049 + natsort($values);
1050 + if (!in_array($name, $varation_names)) {
1051 + $variations .= '<p><label for="' . sanitize_title($name) . '">' . $title . '</label> ' . ucfirst(implode(",", $values)) . '</p>';
1052 + } else {
1053 + $variations .= '<div class="wp-chatbot-variable-' . sanitize_title($name) . '">';
1054 + $variations .= '<label for="' . sanitize_title($name) . '">' . $title . '</label>';
1055 + $variations .= '<select id="' . esc_attr(sanitize_title($name)) . '" name="attribute_' . sanitize_title($name) . '" data-attribute_name="attribute_' . sanitize_title($name) . '" class="each_attribute">';
1056 + $variations .= '<option value="">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_choose_option')))) . '</option>';
1057 + foreach ($values as $value) {
1058 + $attr_key = 'attribute_' . sanitize_title( $name );
1059 + if ( isset( $_REQUEST[ $attr_key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
1060 + $selected_value = sanitize_text_field( wp_unslash( $_REQUEST[ $attr_key ] ) );
1061 + } else {
1062 + $selected_value = '';
1063 + }
1064 + $variations .= '<option value="' . esc_attr(strtolower($value)) . '"' . selected($selected_value, $value, false) . '>' . apply_filters('wpcommerce_variation_option_name', $value) . '</option>';
1065 + }
1066 + $variations .= '</select></div>';
1067 + }
1068 + }
1069 + $add_cart_button .= '<input type="button" id="wp-chatbot-variation-add-to-cart" wp-chatbot-product-id="' . $product_id . '" value="' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_add_to_cart')))) . '" variation_id="" />';
1070 + $add_cart_button .= "<input type='hidden' id='wp-chatbot-variation-data' data-product-variation='" . $variations_data . "' />";
1071 + } else {
1072 + $add_cart_button .= '<input type="button" id="wp-chatbot-add-cart-button" wp-chatbot-product-id="' . $product_id . '" value="' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_add_to_cart')))) . '" />';
1073 + }
1074 + //Handle variable product end.
1075 + $product_quantity .= '<label for="">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</label>
1076 + <input type="number" id="vPQuantity" value="1" />';
1077 + }
1078 + //$response=$full_size_image;
1079 + $response = array('title' => $product_title, 'description' => $product_desc, 'image' => $product_image, 'price' => $product_price, 'sku' => $product_sku, 'quantity' => $product_quantity, 'buttton' => $add_cart_button, 'variation' => $variations, 'type' => $product_type, 'debug' => $debug);
1080 + wp_send_json($response);
1081 +}
1082 +//Add to cart for variable product.
1083 +add_action('wp_ajax_qcld_variable_add_to_cart', 'qcld_variable_add_to_cart');
1084 +add_action('wp_ajax_nopriv_qcld_variable_add_to_cart', 'qcld_variable_add_to_cart');
1085 +function qcld_variable_add_to_cart(){
1086 + $product_id = intval( wp_unslash( $_POST['p_id'] ) );
1087 + $quantity = intval( wp_unslash( $_POST['quantity'] ) );
1088 + $variations_id = intval( wp_unslash( $_POST['variations_id'] ) );
1089 + $attrs = isset( $_POST['attributes'] ) ? array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['attributes'] ) ) : array();
1090 + //echo wp_send_json(array('p_id'=>$product_id,'qnty'=>$quantity,'id'=>$variations_id,'att'=>$attrs));
1091 + $attributes = array();
1092 + foreach ($attrs as $attr) {
1093 + $single = explode("#", $attr);
1094 + if (isset($single[0])) {
1095 + $a_name = explode("_", $single[0]);
1096 + }
1097 + $attributes[$a_name[2]] = $single[1];
1098 + }
1099 + global $wpcommerce;
1100 + $result = $wpcommerce->cart->add_to_cart($product_id, $quantity, $variations_id, $attributes, null);
1101 + if ($result != false) {
1102 + wp_send_json('variable');
1103 + } else {
1104 + wp_send_json('error');
1105 + }
1106 +}
1107 +//Add to cart for simple product.
1108 +add_action('wp_ajax_qcld_wb_chatbot_add_to_cart', 'qcld_wb_chatbot_add_to_cart');
1109 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_add_to_cart', 'qcld_wb_chatbot_add_to_cart');
1110 +function qcld_wb_chatbot_add_to_cart(){
1111 + $product_id = intval( wp_unslash( $_POST['product_id'] ) );
1112 + $product_quantity = intval( wp_unslash( $_POST['quantity'] ) );
1113 + global $wpcommerce;
1114 + $result = $wpcommerce->cart->add_to_cart($product_id, $product_quantity);
1115 + if ($result != false) {
1116 + wp_send_json('simple');
1117 + } else {
1118 + wp_send_json('error');
1119 + }
1120 +}
1121 +//Support part
1122 +add_action('wp_ajax_qcld_wb_chatbot_support_email', 'qcld_wb_chatbot_support_email');
1123 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_support_email', 'qcld_wb_chatbot_support_email');
1124 +function qcld_wb_chatbot_support_email(){
1125 + $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
1126 + if ( ! wp_verify_nonce( $nonce, 'qcsecretbotnonceval123qc' ) ) {
1127 + wp_send_json_error( array( 'error' => esc_html__( 'Error: Invalid nonce verification.', 'chatbot' ) ) );
1128 + }
1129 + $name = trim(sanitize_text_field(wp_unslash($_POST['name'])));
1130 + $email = sanitize_email(wp_unslash($_POST['email']));
1131 + $message = sanitize_text_field(wp_unslash($_POST['message']));
1132 + $subject = sanitize_text_field(get_option('qlcd_wp_chatbot_email_sub') != '' ? get_option('qlcd_wp_chatbot_email_sub') : 'Support Email from wpWBot by Client');
1133 + //Extract Domain
1134 + $url = get_site_url();
1135 + $url = wp_parse_url($url);
1136 + $domain = $url['host'];
1137 + //$admin_email = "admin@" . $domain;
1138 + $admin_email = sanitize_email(get_option('admin_email'));
1139 + $toEmail = sanitize_email(get_option('qlcd_wp_chatbot_admin_email') != '' ? get_option('qlcd_wp_chatbot_admin_email') : $admin_email);
1140 +
1141 +
1142 + if(get_option('qlcd_wp_chatbot_from_email') && get_option('qlcd_wp_chatbot_from_email')!=''){
1143 + $fromEmail = get_option('qlcd_wp_chatbot_from_email');
1144 + }else{
1145 + $fromEmail = "wordpress@" . $domain;
1146 + }
1147 + //Starting messaging and status.
1148 + $response['status'] = 'fail';
1149 + $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_email_fail')));
1150 + if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
1151 + $response['message'] = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_invalid_email'))));
1152 + $response['status'] = 'fail';
1153 + } else {
1154 + //build email body
1155 + $bodyContent = "";
1156 + $bodyContent .= '<p><strong>' . __('Support Request Details', 'chatbot') . ':</strong></p><hr>';
1157 + $bodyContent .= '<p>' . __('Name', 'chatbot') . ' : ' . $name . '</p>';
1158 + $bodyContent .= '<p>' . __('Email', 'chatbot') . ' : ' . $email . '</p>';
1159 + $bodyContent .= '<p>' . __('Subject', 'chatbot') . ' : ' . $subject . '</p>';
1160 + $bodyContent .= '<p>' . __('Message', 'chatbot') . ' : ' . $message . '</p>';
1161 + $bodyContent .= '<p>' . __('Mail Generated on', 'chatbot') . ': ' . current_time('F j, Y, g:i a') . '</p>';
1162 + $to = $toEmail;
1163 + $body = $bodyContent;
1164 + $headers = array();
1165 + $headers[] = 'Content-Type: text/html; charset=UTF-8';
1166 + $headers[] = 'From: ' . $name . ' <' . $fromEmail . '>';
1167 + $headers[] = 'Reply-To: ' . $name . ' <' . $email . '>';
1168 + $result = wp_mail($to, $subject, $body, $headers);
1169 + if ($result) {
1170 + $response['status'] = 'success';
1171 + $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_email_sent')));
1172 + }
1173 +
1174 + }
1175 + echo wp_json_encode($response);
1176 + die();
1177 +}
1178 +//Support Phone
1179 +add_action('wp_ajax_qcld_wb_chatbot_support_phone', 'qcld_wb_chatbot_support_phone');
1180 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_support_phone', 'qcld_wb_chatbot_support_phone');
1181 +function qcld_wb_chatbot_support_phone(){
1182 + check_ajax_referer('qcsecretbotnonceval123qc', 'nonce');
1183 + $name = trim(sanitize_text_field(wp_unslash($_POST['name'])));
1184 + $phone =sanitize_text_field(wp_unslash($_POST['phone']));
1185 + $subject = 'WPBot Support Mail Request for Call Back';
1186 + //Extract Domain
1187 + $url = get_site_url();
1188 + $url = wp_parse_url($url);
1189 + $domain = $url['host'];
1190 + //$admin_email = "admin@" . $domain;
1191 + $admin_email = get_option('admin_email');
1192 + $toEmail = sanitize_email(get_option('qlcd_wp_chatbot_admin_email') != '' ? get_option('qlcd_wp_chatbot_admin_email') : $admin_email);
1193 +
1194 +
1195 + if(get_option('qlcd_wp_chatbot_from_email') && get_option('qlcd_wp_chatbot_from_email')!=''){
1196 + $fromEmail = sanitize_email(get_option('qlcd_wp_chatbot_from_email'));
1197 + }else{
1198 + $fromEmail = "wordpress@" . $domain;
1199 + }
1200 + //Starting messaging and status.
1201 + $response['status'] = 'fail';
1202 + $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_phone_fail')));
1203 + //build email body
1204 + $bodyContent = "";
1205 + $bodyContent .= '<p><strong>' . __('Support Request Details', 'chatbot') . ':</strong></p><hr>';
1206 + $bodyContent .= '<p>' . __('Name', 'chatbot') . ' : ' . $name . '</p>';
1207 + $bodyContent .= '<p>' . __('Phone', 'chatbot') . ' : ' . $phone . '</p>';
1208 + $bodyContent .= '<p>' . __('Subject', 'chatbot') . ' : ' . $subject . '</p>';
1209 + $bodyContent .= '<p>' . __('Message', 'chatbot') . ' : ' . __(' Call me at ', 'chatbot'). $phone . '</p>';
1210 + $bodyContent .= '<p>' . __('Mail Generated on', 'chatbot') . ': ' . current_time('F j, Y, g:i a') . '</p>';
1211 + $to = $toEmail;
1212 + $body = $bodyContent;
1213 + $headers = array();
1214 + $headers[] = 'Content-Type: text/html; charset=UTF-8';
1215 + $headers[] = 'From: ' . $name . ' <' . $fromEmail . '>';
1216 + $headers[] = 'Reply-To: ' . $name . ' <' . $fromEmail . '>';
1217 + $result = wp_mail($to, $subject, $body, $headers);
1218 + if ($result) {
1219 + $response['status'] = 'success';
1220 + $response['message'] = str_replace('\\', '',wp_kses_post(get_option('qlcd_wp_chatbot_phone_sent')));
1221 + }
1222 + echo wp_json_encode($response);
1223 + die();
1224 +}
1225 +// Order Status part. removed
1226 +
1227 +function wpb_randmom_message_handle($items){
1228 + return $items[wp_rand(0, count($items) - 1)];
1229 +}
1230 +function qcld_wb_chatbot_func_str_replace($messages = array()){
1231 + $refined_mesgses = array();
1232 + foreach ($messages as $message) {
1233 + $refined_msg = str_replace('\\', '', $message);
1234 + array_push($refined_mesgses, $refined_msg);
1235 + }
1236 + return $refined_mesgses;
1237 +}
1238 +add_action('wp_ajax_qcld_wb_chatbot_login_user', 'qcld_wb_chatbot_login_user');
1239 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_login_user', 'qcld_wb_chatbot_login_user');
1240 +function qcld_wb_chatbot_login_user(){
1241 + // First check the nonce, if it fails the function will break
1242 + check_ajax_referer('wpwbot-order-nonce', 'security');
1243 + // Nonce is checked, get the POST data and sign user on
1244 + $info = array();
1245 + $info['user_login'] = trim(sanitize_text_field(wp_unslash($_POST['user_name'])));
1246 + $info['user_password'] = trim(sanitize_text_field(wp_unslash($_POST['user_pass'])));
1247 + $info['remember'] = true;
1248 + $user_signon = wp_signon($info, false);
1249 + $response = array();
1250 + if (is_wp_error($user_signon)) {
1251 + $response['status'] = "fail";
1252 + $response['message'] = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_order_password_incorrect'))));
1253 + } else {
1254 + $response = get_order_by_username($info['user_login']);
1255 + $response['status'] = "success";
1256 + }
1257 + wp_send_json($response);
1258 +}
1259 +add_action('wp_ajax_qcld_wb_chatbot_loged_in_user_orders', 'qcld_wb_chatbot_loged_in_user_orders');
1260 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_loged_in_user_orders', 'qcld_wb_chatbot_loged_in_user_orders');
1261 +function qcld_wb_chatbot_loged_in_user_orders(){
1262 + $current_user = wp_get_current_user();
1263 + $user_name = $current_user->user_login;
1264 + $response = get_order_by_username($user_name);
1265 + wp_send_json($response);
1266 +}
1267 +function get_order_by_username($user_name){
1268 + global $post;
1269 + $response = array();
1270 + $response['status'] .= "success";
1271 + $user = get_user_by('login', $user_name);
1272 + // The query arguments
1273 + $customer_orders = get_posts(array(
1274 + 'numberposts' => -1,
1275 + 'meta_key' => '_customer_user',
1276 + 'meta_value' => $user->ID,
1277 + 'post_type' => wc_get_order_types(),
1278 + 'post_status' => array_keys(wc_get_order_statuses()),
1279 + 'posts_per_page' => 10,
1280 + 'orderby' => 'date',
1281 + ));
1282 + $response['order_num'] = count($customer_orders);
1283 + $order_html = '';
1284 + if ($response['order_num'] > 0) {
1285 + $response['message'] .= wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_order_found'))));
1286 + $order_html .= '<div class="wp-chatbot-orders-container">
1287 + <div class="wp-chatbot-orders-header">
1288 + <div class="order-id">' . __('ID', 'chatbot') . '</div>
1289 + <div class="order-date">' . __('Date', 'chatbot') . ' </div>
1290 + <div class="order-items">' . __('Items', 'chatbot') . '</div>
1291 + <div class="order-status">' . __('Status', 'chatbot') . '</div>
1292 + </div>';
1293 + foreach ($customer_orders as $order) {
1294 + //Formatting order summery
1295 + if (isset($_COOKIE['from_app']) && $_COOKIE['from_app'] == 'yes') {
1296 + $thanks_page_id = sanitize_text_field(get_option('wp_chatbot_app_order_thankyou'));
1297 + $thanks_parmanlink = esc_url(get_permalink($thanks_page_id));
1298 + $order_url = '<a href="' . $thanks_parmanlink . '?order_id=' . $order->ID . '" >' . $order->ID . '</a>';
1299 + } else {
1300 + $order_url = '<a href="' . get_url(get_permalink(get_option('wpcommerce_myaccount_page_id')) . '/view-order/' . $order->ID) . '" target="_blank" >' . $order->ID . '</a>';
1301 + }
1302 + $order_html .= '<div class="wp-chatbot-orders-single">
1303 + <div class="order-id"> ' . $order_url . '</div>
1304 + <div class="order-date"> <p>' . gmdate("m/d/Y", strtotime($order->post_date)) . '</p> </div>
1305 + <div class="order-items">';
1306 + $singleOrder = new WC_Order($order->ID);
1307 + $items = $singleOrder->get_items();
1308 + foreach ($items as $item) {
1309 + $order_html .= '<p>' . $item["name"] . ' X ' . $item["qty"] . '</p>';
1310 + }
1311 + $order_html .= '</div>
1312 + <div class="order-status">' . strtoupper(end(explode("-", $order->post_status))) . '</div>
1313 +
1314 + </div>';
1315 + }
1316 + $order_html .= '</div>';
1317 + } else {
1318 + $response['message'] .= get_option('qlcd_wp_chatbot_sorry') . '! <strong>' . $user_name . '</strong>';
1319 + $order_html .= '<p>' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_order_not_found')))) . '</p>';
1320 + }
1321 + $response['html'] = $order_html;
1322 + return $response;
1323 +}
1324 +//Recently viewed products
1325 +//keeping id in cookies as
1326 +function wp_chatbot_track_product_view(){
1327 + if (!is_singular('product')) {
1328 + return;
1329 + }
1330 + global $post;
1331 + wp_chatbot_view_track_product_by_id($post->ID);
1332 +}
1333 +function wp_chatbot_view_track_product_by_id($post_id){
1334 + if (empty($_COOKIE['wp_chatbot_wpcommerce_recently_viewed']))
1335 + $viewed_products = array();
1336 + else
1337 + $viewed_products = (array)explode('|', $_COOKIE['wp_chatbot_wpcommerce_recently_viewed']);
1338 + if (!in_array($post_id, $viewed_products)) {
1339 + $viewed_products[] = $post_id;
1340 + }
1341 + if (sizeof($viewed_products) > 15) {
1342 + array_shift($viewed_products);
1343 + }
1344 + // Store for session only
1345 + if( function_exists( 'wc_setcookie' ) ){
1346 + wc_setcookie('wp_chatbot_wpcommerce_recently_viewed', implode('|', $viewed_products));
1347 + }
1348 +}
1349 +add_action('template_redirect', 'wp_chatbot_track_product_view', 20);
1350 +//recent view product ajax
1351 +add_action('wp_ajax_qcld_wb_chatbot_recently_viewed_products', 'qcld_wb_chatbot_recently_viewed_products');
1352 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_recently_viewed_products', 'qcld_wb_chatbot_recently_viewed_products');
1353 +function qcld_wb_chatbot_recently_viewed_products(){
1354 + // Get wpCommerce Global
1355 + $_pf = new WC_Product_Factory();
1356 + //show post per page.
1357 + $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
1358 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1359 + // Get recently viewed product cookies data
1360 + $viewed_products = !empty($_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) ? (array)explode('|', $_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) : array();
1361 + $viewed_products = array_filter(array_map('absint', $viewed_products));
1362 + //get featured products if has.
1363 + $featured_products = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured'))));
1364 + //Getting recently vieew products.
1365 + if (!empty($viewed_products)) {
1366 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_viewed_product_welcome'))));
1367 + $product_query = new WP_Query(array(
1368 + 'posts_per_page' => $product_per_page,
1369 + 'no_found_rows' => 1,
1370 + 'post_status' => 'publish',
1371 + 'post_type' => 'product',
1372 + 'post__in' => $viewed_products,
1373 + ));
1374 + //Getting featured products
1375 + } else if ($featured_products->post_count > 0) {
1376 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_featured_product_welcome'))));
1377 + $product_query = $featured_products;
1378 + } else {
1379 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1380 + //Getting recent products
1381 + $product_query = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'orderby' => 'date', 'order' => 'DESC'));
1382 + }
1383 + if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1384 + $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1385 + } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1386 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1387 + } else {
1388 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1389 + }
1390 + $html = '<div class="wp-chatbot-agent-profile">
1391 + <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1392 + <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1393 + <div class="wp-chatbot-bubble">' . $wp_chatbot_product_title . '</div>
1394 + </div>';
1395 + if ($product_query->post_count > 0) {
1396 + $html .= '<div class="wp-chatbot-products-area">';
1397 + $html .= '<ul class="wp-chatbot-products">';
1398 + while ($product_query->have_posts()) : $product_query->the_post();
1399 + $product = $_pf->get_product(get_the_ID());
1400 + $html .= '<li class="wp-chatbot-product">';
1401 + $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
1402 + $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
1403 + <div class="wp-chatbot-product-summary">
1404 + <div class="wp-chatbot-product-table">
1405 + <div class="wp-chatbot-product-table-cell">
1406 + <h3 class="wp-chatbot-product-title">' . esc_html($product->post->post_title) . '</h3>
1407 + <div class="price">' . $product->get_price_html() . '</div>';
1408 + $html .= ' </div>
1409 + </div>
1410 + </div></a>
1411 + </li>';
1412 + endwhile;
1413 + wp_reset_query();
1414 + wp_reset_postdata();
1415 + $html .= '</ul></div>';
1416 + } else {
1417 + $html .= '<div class="wp-chatbot-products-area">';
1418 + $html .= '<p style="text-align: center">You have no products !';
1419 + $html .= '</div>';
1420 + }
1421 + wp_send_json($html);
1422 +}
1423 +//Recently viewed product shortcode
1424 +add_shortcode('wpwbot_products', 'qcld_wb_chatbot_recently_viewed_shortcode');
1425 +function qcld_wb_chatbot_recently_viewed_shortcode(){
1426 + // Get wpCommerce Global
1427 + $_pf = new WC_Product_Factory();
1428 + $product_per_page = sanitize_text_field(get_option('qlcd_wp_chatbot_ppp') != '' ? get_option('qlcd_wp_chatbot_ppp') : 10);
1429 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1430 + // Get recently viewed product cookies data
1431 + $viewed_products = !empty($_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) ? (array)explode('|', $_COOKIE['wp_chatbot_wpcommerce_recently_viewed']) : array();
1432 + $viewed_products = array_filter(array_map('absint', $viewed_products));
1433 + //get featured products if has.
1434 + $featured_products = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'tax_query' => array(array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured'))));
1435 + //Getting recently vieew products.
1436 + if (!empty($viewed_products)) {
1437 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_viewed_product_welcome'))));
1438 + $product_query = new WP_Query(array(
1439 + 'posts_per_page' => $product_per_page,
1440 + 'no_found_rows' => 1,
1441 + 'post_status' => 'publish',
1442 + 'post_type' => 'product',
1443 + 'post__in' => $viewed_products,
1444 + ));
1445 + //implementing featured products
1446 + } else if ($featured_products->post_count > 0) {
1447 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_featured_product_welcome'))));
1448 + $product_query = $featured_products;
1449 + } else {
1450 + $wp_chatbot_product_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_latest_product_welcome'))));
1451 + //Getting recent products
1452 + $product_query = new WP_Query(array('post_status' => 'publish', 'posts_per_page' => $product_per_page, 'post_type' => 'product', 'orderby' => 'date', 'order' => 'DESC'));
1453 + }
1454 + if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1455 + $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1456 + } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1457 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1458 + } else {
1459 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1460 + }
1461 + $html = '<div class="wp-chatbot-agent-profile">
1462 + <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1463 + <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1464 + <div class="wp-chatbot-bubble">' . esc_html($wp_chatbot_product_title) . '</div>
1465 + </div>';
1466 + if ($product_query->post_count > 0) {
1467 + $html .= '<div class="wp-chatbot-products-area">';
1468 + $html .= '<ul class="wp-chatbot-products">';
1469 + while ($product_query->have_posts()) : $product_query->the_post();
1470 + $product = $_pf->get_product(get_the_ID());
1471 + $html .= '<li class="wp-chatbot-product">';
1472 + $html .= '<a target="_blank" href="' . get_permalink(get_the_ID()) . '" wp-chatbot-pid= "' . get_the_ID() . '" title="' . esc_attr($product->post->post_title ? $product->post->post_title : get_the_ID()) . '">';
1473 + $html .= get_the_post_thumbnail(get_the_ID(), 'shop_catalog') . '
1474 + <div class="wp-chatbot-product-summary">
1475 + <div class="wp-chatbot-product-table">
1476 + <div class="wp-chatbot-product-table-cell">
1477 + <h3 class="wp-chatbot-product-title">' . esc_html($product->post->post_title) . '</h3>
1478 + <div class="price">' . $product->get_price_html() . '</div>';
1479 + $html .= ' </div>
1480 + </div>
1481 + </div></a>
1482 + </li>';
1483 + endwhile;
1484 + wp_reset_query();
1485 + wp_reset_postdata();
1486 + $html .= '</ul></div>';
1487 + } else {
1488 + $html .= '<div class="wp-chatbot-products-area">';
1489 + $html .= '<p style="text-align: center">' . __('You have no products', 'chatbot') . ' !';
1490 + $html .= '</div>';
1491 + }
1492 + return $html;
1493 +}
1494 +//Show cart for wp chatbot
1495 +add_action('wp_ajax_qcld_wb_chatbot_show_cart', 'qcld_wb_chatbot_show_cart');
1496 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_show_cart', 'qcld_wb_chatbot_show_cart');
1497 +function qcld_wb_chatbot_show_cart(){
1498 + global $wpcommerce;
1499 + // $cart_url = $wpcommerce->cart->get_cart_url();
1500 + $cart_url = wc_get_cart_url();
1501 + $checkout_url = wc_get_checkout_url();
1502 + //$checkout_url = $wpcommerce->cart->get_checkout_url();
1503 + $items = $wpcommerce->cart->get_cart();
1504 + $itemCount = $wpcommerce->cart->cart_contents_count;
1505 + $cart_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_shopping_cart'))));
1506 + $no_cart_item_msg = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1507 + if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1508 + $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1509 + } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1510 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1511 + } else {
1512 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1513 + }
1514 + $html = '<div class="wp-chatbot-agent-profile">
1515 + <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1516 + <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1517 + <div class="wp-chatbot-bubble">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_welcome')))) . '</div>
1518 + </div>';
1519 + if ($itemCount >= 1) {
1520 + $html .= '<div class ="wp-chatbot-cart-container">';
1521 + $html .= '<div class="wp-chatbot-cart-header"><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_title')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_price')))) . '</div><div class="qcld-wp-chatbot-cell"></div></div>';
1522 + $html .= '<div class ="wp-chatbot-cart-body">';
1523 + foreach ($items as $item => $values) {
1524 + $cart_item= apply_filters('wpcommerce_cart_item_product', $values['data'], $values, $item);
1525 + //product image
1526 + $getProductDetail = wc_get_product($values['product_id']);
1527 + $price = get_post_meta($values['product_id'], '_price', true);
1528 + $html .= '<div class="wp-chatbot-cart-single">
1529 + <div class="qcld-wp-chatbot-cell"> <h3 class="wp-chatbot-title">' . $cart_item->get_title() . '</h3></div>';
1530 + $html .= '<div class="qcld-wp-chatbot-cell">';
1531 + $html .= '<input class="qcld-wp-chatbot-cart-item-qnty" data-cart-item="' . $item . '" type="number" min="1" value="' . $values['quantity'] . '"></div>';
1532 + $html .= '<div class="qcld-wp-chatbot-cell"><span class="wp-chatbot-cart-price">' . apply_filters('wpcommerce_cart_item_price', WC()->cart->get_product_price($cart_item), $values, $item) . '</span> </div>';
1533 + $html .= '<div class="qcld-wp-chatbot-cell"><span data-cart-item="' . $item . '" class="wp-chatbot-remove-cart-item">X</span></div> </div>';
1534 + }
1535 + $html .= ' </div>';//End of cart body
1536 + $html .= '<div class="wp-chatbot-cart-single">
1537 + <div class="qcld-wp-chatbot-cell"></div>
1538 + <div class="qcld-wp-chatbot-cell"><strong>Total</strong></div>
1539 + <div class="qcld-wp-chatbot-cell"><strong>' . $wpcommerce->cart->get_cart_total() . '</strong></div>
1540 + </div>';
1541 + $html .= '<div class="wp-chatbot-cart-footer"><div class="qcld-wp-chatbot-cart-page"><a class="wp-chatbot-cart-link" href="' . $cart_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_link')))) . '</a></div><div class="qcld-wp-chatbot-checkout"><a class="wp-chatbot-checkout-link" href="' . $checkout_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_checkout_link')))) . '</a></div></div>';
1542 + $html .= ' </div>';
1543 + } else {
1544 + $html .= '<div class="wp-chatbot-cart-container">';
1545 + $html .= '<div><p style="text-align:center">' . $no_cart_item_msg . '</p></div>';
1546 + $html .= '</div>';
1547 + }
1548 + $response = array('html' => $html, 'items' => $itemCount);
1549 + wp_send_json($response);
1550 +}
1551 +//cart onley for wp chatbot
1552 +add_action('wp_ajax_qcld_wb_chatbot_only_cart', 'qcld_wb_chatbot_only_cart');
1553 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_only_cart', 'qcld_wb_chatbot_only_cart');
1554 +function qcld_wb_chatbot_only_cart(){
1555 + global $wpcommerce;
1556 + // $cart_url = $wpcommerce->cart->get_cart_url();
1557 + $cart_url = wc_get_cart_url();
1558 + $checkout_url = wc_get_checkout_url();
1559 + //$checkout_url = $wpcommerce->cart->get_checkout_url();
1560 + $items = $wpcommerce->cart->get_cart();
1561 + $itemCount = $wpcommerce->cart->cart_contents_count;
1562 + $no_cart_item_msg = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1563 +
1564 + $html = '';
1565 + if ($itemCount >= 1) {
1566 + $html .= '<div class ="wp-chatbot-cart-container">';
1567 + $html .= '<div class="wp-chatbot-cart-header"><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_title')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_price')))) . '</div><div class="qcld-wp-chatbot-cell"></div></div>';
1568 + $html .= '<div class ="wp-chatbot-cart-body">';
1569 + foreach ($items as $item => $values) {
1570 + $cart_item= apply_filters('wpcommerce_cart_item_product', $values['data'], $values, $item);
1571 + //product image
1572 + $getProductDetail = wc_get_product($values['product_id']);
1573 + $price = get_post_meta($values['product_id'], '_price', true);
1574 + $html .= '<div class="wp-chatbot-cart-single">
1575 + <div class="qcld-wp-chatbot-cell"> <h3 class="wp-chatbot-title">' . $cart_item->get_title() . '</h3></div>';
1576 + $html .= '<div class="qcld-wp-chatbot-cell">';
1577 + $html .= '<input class="qcld-wp-chatbot-cart-item-qnty" data-cart-item="' . $item . '" type="number" min="1" value="' . $values['quantity'] . '"></div>';
1578 + $html .= '<div class="qcld-wp-chatbot-cell"><span class="wp-chatbot-cart-price">' . apply_filters('wpcommerce_cart_item_price', WC()->cart->get_product_price($cart_item), $values, $item) . '</span> </div>';
1579 + $html .= '<div class="qcld-wp-chatbot-cell"><span data-cart-item="' . $item . '" class="wp-chatbot-remove-cart-item">X</span></div> </div>';
1580 + }
1581 + $html .= ' </div>';//End of cart body
1582 + $html .= '<div class="wp-chatbot-cart-single">
1583 + <div class="qcld-wp-chatbot-cell"></div>
1584 + <div class="qcld-wp-chatbot-cell"><strong>Total</strong></div>
1585 + <div class="qcld-wp-chatbot-cell"><strong>' . $wpcommerce->cart->get_cart_total() . '</strong></div>
1586 + </div>';
1587 + $html .= '<div class="wp-chatbot-cart-footer"><div class="qcld-wp-chatbot-cart-page"><a class="wp-chatbot-cart-link" href="' . $cart_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_link')))) . '</a></div><div class="qcld-wp-chatbot-checkout"><a class="wp-chatbot-checkout-link" href="' . $checkout_url . '" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_checkout_link')))) . '</a></div></div>';
1588 + $html .= ' </div>';
1589 + } else {
1590 + $html .= '<div class="wp-chatbot-cart-container">';
1591 + $html .= '<div><p style="text-align:center">' . esc_html($no_cart_item_msg) . '</p></div>';
1592 + $html .= '</div>';
1593 + }
1594 + $response = array('html' => $html, 'items' => $itemCount);
1595 + wp_send_json($response);
1596 +}
1597 +//Cart show Shortcode
1598 +add_shortcode('wpwbot_cart', 'qcld_wb_chatbot_cart_shortcode');
1599 +function qcld_wb_chatbot_cart_shortcode(){
1600 + global $wpcommerce;
1601 + $items = $wpcommerce->cart->get_cart();
1602 + $itemCount = $wpcommerce->cart->cart_contents_count;
1603 + $cart_title = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_shopping_cart'))));
1604 + $no_cart_item_msg = wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1605 + if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') == "custom-agent.png") {
1606 + $wp_chatbot_custom_icon_path = get_option('wp_chatbot_custom_agent_path');
1607 + } else if (get_option('wp_chatbot_custom_agent_path') != "" && get_option('wp_chatbot_agent_image') != "custom-agent.png") {
1608 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . get_option('wp_chatbot_agent_image');
1609 + } else {
1610 + $wp_chatbot_custom_icon_path = QCLD_wpCHATBOT_IMG_URL . 'custom-agent.png';
1611 + }
1612 + $html = '<div class="wp-chatbot-agent-profile">
1613 + <div class="wp-chatbot-widget-avatar"><img src="' . esc_url($wp_chatbot_custom_icon_path) . '" alt=""></div>
1614 + <div class="wp-chatbot-widget-agent">' . esc_html(get_option('qlcd_wp_chatbot_agent')) . '</div>
1615 + <div class="wp-chatbot-bubble">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_welcome')))) . '</div>
1616 + </div>';
1617 + if ($itemCount >= 1) {
1618 + $html .= '<div class ="wp-chatbot-cart-container">';
1619 + $html .= '<div class="wp-chatbot-cart-header"><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_title')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_quantity')))) . '</div><div class="qcld-wp-chatbot-cell">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_price')))) . '</div> <div class="qcld-wp-chatbot-cell"></div> </div>';
1620 + $html .= '<div class ="wp-chatbot-cart-body">';
1621 + foreach ($items as $item => $values) {
1622 + $cart_item = apply_filters('wpcommerce_cart_item_product', $values['data'], $values, $item);
1623 + //product image
1624 + $getProductDetail = wc_get_product($values['product_id']);
1625 + $price = get_post_meta($values['product_id'], '_price', true);
1626 + $html .= '<div class="wp-chatbot-cart-single">
1627 + <div class="qcld-wp-chatbot-cell"> <h3 class="wp-chatbot-title">' . $cart_item->get_title() . '</h3></div>';
1628 + $html .= '<div class="qcld-wp-chatbot-cell">';
1629 + $html .= '<input class="qcld-wp-chatbot-cart-item-qnty" data-cart-item="' . $item . '" type="number" min="1" value="' . $values['quantity'] . '"></div>';
1630 + $html .= '<div class="qcld-wp-chatbot-cell"><span class="wp-chatbot-cart-price">' . apply_filters('wpcommerce_cart_item_price', WC()->cart->get_product_price($cart_item), $values, $item) . '</span> </div>';
1631 + $html .= '<div class="qcld-wp-chatbot-cell"><span data-cart-item="' . $item . '" class="wp-chatbot-remove-cart-item">X</span></div> </div>';
1632 + }
1633 + $html .= ' </div>';//End of cart body
1634 + $html .= '<div class="wp-chatbot-cart-single">
1635 + <div class="qcld-wp-chatbot-cell"></div>
1636 + <div class="qcld-wp-chatbot-cell"><strong>Total</strong></div>
1637 + <div class="qcld-wp-chatbot-cell"><strong>' . $wpcommerce->cart->get_cart_total() . '</strong></div>
1638 + </div>';
1639 + $html .= '<div class="wp-chatbot-cart-footer"><div class="qcld-wp-chatbot-cart-page"><a href="' . site_url() . '/cart" target="_blank" >' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_cart_link')))) . '</a></div><div class="qcld-wp-chatbot-checkout"><a href="' . site_url() . '/checkout" target="_blank">' . wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_checkout_link')))) . '</a></div></div>';
1640 + $html .= ' </div>';
1641 + } else {
1642 + $html .= '<div class="wp-chatbot-cart-container">';
1643 + $html .= '<div><p style="text-align:center">' . $no_cart_item_msg . '</p></div>';
1644 + $html .= '</div>';
1645 + }
1646 + // $response=array('html'=>$html,'items'=>$itemCount);
1647 + return $html;
1648 +}
1649 +//Updating the cart items.
1650 +add_action('wp_ajax_qcld_wb_chatbot_update_cart_item_number', 'qcld_wb_chatbot_update_cart_item_number');
1651 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_update_cart_item_number', 'qcld_wb_chatbot_update_cart_item_number');
1652 +function qcld_wb_chatbot_update_cart_item_number(){
1653 + check_ajax_referer( 'wp_chatbot', 'nonce' );
1654 + //getting cart items n
1655 + $cart_item_key = sanitize_text_field(wp_unslash($_POST['cart_item_key']));
1656 + $qnty = sanitize_text_field(wp_unslash($_POST['qnty']));
1657 + global $wpcommerce;
1658 + $result = $wpcommerce->cart->set_quantity($cart_item_key, $qnty);
1659 + wp_send_json($result);
1660 +}
1661 +//Show item after removing from cart page.
1662 +add_action('wp_ajax_qcld_wb_chatbot_cart_item_remove', 'qcld_wb_chatbot_cart_item_remove');
1663 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_cart_item_remove', 'qcld_wb_chatbot_cart_item_remove');
1664 +function qcld_wb_chatbot_cart_item_remove(){
1665 + check_ajax_referer( 'wp_chatbot', 'nonce' );
1666 + //getting cart items n
1667 + $cart_item_key = sanitize_text_field(wp_unslash($_POST['cart_item']));
1668 + global $wpcommerce;
1669 + $result = $wpcommerce->cart->remove_cart_item($cart_item_key);
1670 + wp_send_json($result);
1671 +}
1672 +//Show cart page by shortcode.
1673 +add_action('wp_ajax_qcld_wb_chatbot_cart_page', 'qcld_wb_chatbot_cart_page');
1674 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_cart_page', 'qcld_wb_chatbot_cart_page');
1675 +function qcld_wb_chatbot_cart_page(){
1676 + global $wpcommerce;
1677 + $itemCount = $wpcommerce->cart->cart_contents_count;
1678 + $html = "";
1679 + if ($itemCount < 0) {
1680 + $html .= wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1681 + } else {
1682 + $html .= do_shortcode("[wpcommerce_cart]");
1683 + }
1684 + wp_send_json($html);
1685 +}
1686 +//Show checkout page by shortcode.
1687 +add_action('wp_ajax_qcld_wb_chatbot_checkout_page', 'qcld_wb_chatbot_checkout_page');
1688 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_checkout_page', 'qcld_wb_chatbot_checkout_page');
1689 +function qcld_wb_chatbot_checkout_page(){
1690 + global $wpcommerce;
1691 + $itemCount = $wpcommerce->cart->cart_contents_count;
1692 + $html = "";
1693 + if ($itemCount < 0) {
1694 + $status = 'no';
1695 + $html .= wp_kses_post(wpb_randmom_message_handle(unserialize(get_option('qlcd_wp_chatbot_no_cart_items'))));
1696 + } else {
1697 + $status = 'yes';
1698 + $checkout_page_id = get_option('wp_chatbot_app_checkout');
1699 + $checkout_parmanlink = esc_url(get_permalink($checkout_page_id));
1700 + $html .= $checkout_parmanlink;
1701 + }
1702 + $response = array('status' => $status, 'html' => $html);
1703 + wp_send_json($response);
1704 +}
1705 +//_dynamic_intent
1706 +function qcld_dynamic_intent(){
1707 + global $wpdb;
1708 + $intents = array();
1709 +
1710 + $ai_df = get_option('enable_wp_chatbot_dailogflow');
1711 + $custom_intent_labels = maybe_unserialize( get_option('qlcd_wp_custon_intent_label'));
1712 + if($ai_df==1 && isset($custom_intent_labels[0]) && trim($custom_intent_labels[0])!=''):
1713 +
1714 + foreach($custom_intent_labels as $custom_intent_label):
1715 + $intents[] = $custom_intent_label;
1716 + endforeach;
1717 +
1718 + endif;
1719 +
1720 +
1721 +
1722 + if(class_exists('Qcformbuilder_Forms_Admin')){
1723 +
1724 +
1725 + $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM ". $wpdb->prefix."wfb_forms WHERE type= %s",'primary')); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1726 +
1727 + if(!empty($results)){
1728 +
1729 + foreach($results as $result){
1730 + $form = maybe_unserialize($result->config);
1731 + $intents[] = $form['name'];
1732 + }
1733 +
1734 + }
1735 + }
1736 +
1737 + if(!empty($intents)){
1738 + return implode(", ", $intents);
1739 + }else{
1740 + return '';
1741 + }
1742 +
1743 +}
1744 +
1745 +//User login on Checkout page.
1746 +// add_action('wp_ajax_qcld_wb_chatbot_checkout_user_login', 'qcld_wb_chatbot_checkout_user_login');
1747 +// add_action('wp_ajax_nopriv_qcld_wb_chatbot_checkout_user_login', 'qcld_wb_chatbot_checkout_user_login');
1748 +// function qcld_wb_chatbot_checkout_user_login(){
1749 +// // Nonce is checked, get the POST data and sign user on
1750 +// $info = array();
1751 +// //$info['nonce'] = $_POST['nonce_val'];
1752 +// $info['user_login'] = trim(sanitize_text_field(wp_unslash($_POST['user_name'])));
1753 +// $info['user_password'] = trim(sanitize_text_field(wp_unslash($_POST['user_pass'])));
1754 +// $info['remember'] = true;
1755 +// $user_signon = wp_signon($info, false);
1756 +// // $response=$info;
1757 +// $response = array();
1758 +// if (is_wp_error($user_signon)) {
1759 +// // $response['status'] = "fail";
1760 +// $response = "no";
1761 +// } else {
1762 +// $response = "yes";
1763 +// }
1764 +// wp_send_json($response);
1765 +// }
1766 +// Load template for App Order Thank You page url
1767 +function wp_chatbot_load_app_template($template){
1768 + if (is_page('wpwbot-mobile-app')) {
1769 + return dirname(__FILE__) . '/templates/app-templates/app.php';
1770 + }
1771 + return $template;
1772 +}
1773 +add_filter('template_include', 'wp_chatbot_load_app_template', 99);
1774 +// Load template for App Order Thank You page url
1775 +function wp_chatbot_load_app_order_thankyou_template($template){
1776 + if (is_page('wpwbot-app-order-thankyou')) {
1777 + return dirname(__FILE__) . '/templates/app-templates/app-order-thankyou.php';
1778 + }
1779 + return $template;
1780 +}
1781 +add_filter('template_include', 'wp_chatbot_load_app_order_thankyou_template', 99);
1782 +// Load template for App checkout
1783 +function wp_chatbot_load_app_checkout_template($template){
1784 + if (is_page('wpwbot-app-checkout')) {
1785 + return dirname(__FILE__) . '/templates/app-templates/app-checkout.php';
1786 + }
1787 + return $template;
1788 +}
1789 +add_filter('template_include', 'wp_chatbot_load_app_checkout_template', 99);
1790 +// Create embed page when plugin install or activate
1791 +//register_activation_hook(__FILE__, 'wp_chatbot_create_app_order_thankyou_page');
1792 +add_action('init', 'wp_chatbot_create_app_checkout_thankyou_page');
1793 +function wp_chatbot_create_app_checkout_thankyou_page(){
1794 + if (get_option('wp_chatbot_app_pages') == 1) {
1795 + //Mobile App page create
1796 + $existing_app = new WP_Query( array( 'post_type' => 'page', 'name' => 'wpwbot-mobile-app', 'post_status' => 'publish', 'posts_per_page' => 1 ) );
1797 + if ( ! $existing_app->have_posts() ) {
1798 + //post status and options
1799 + $app_page = array(
1800 + 'comment_status' => 'closed',
1801 + 'ping_status' => 'closed',
1802 + 'post_author' => get_current_user_id(),
1803 + 'post_date' => gmdate('Y-m-d H:i:s'),
1804 + 'post_status' => 'publish',
1805 + 'post_title' => 'wpwBot Mobile App',
1806 + 'post_name' => 'wpwbot-mobile-app',
1807 + 'post_type' => 'page',
1808 + );
1809 + //insert page and save the id
1810 + $wpwbot_app = wp_insert_post($app_page, false);
1811 + //save the id in the database
1812 + update_option('wp_chatbot_app_checkout', $wpwbot_app);
1813 + }
1814 + //App checkout page create
1815 + $existing_checkout = new WP_Query( array( 'post_type' => 'page', 'name' => 'wpwbot-app-checkout', 'post_status' => 'publish', 'posts_per_page' => 1 ) );
1816 + if ( ! $existing_checkout->have_posts() ) {
1817 + //post status and options
1818 + $checkout_page = array(
1819 + 'comment_status' => 'closed',
1820 + 'ping_status' => 'closed',
1821 + 'post_author' => get_current_user_id(),
1822 + 'post_date' => gmdate('Y-m-d H:i:s'),
1823 + 'post_status' => 'publish',
1824 + 'post_title' => 'wpwBot App Checkout',
1825 + 'post_name' => 'wpwbot-app-checkout',
1826 + 'post_type' => 'page',
1827 + );
1828 + //insert page and save the id
1829 + $app_checkout = wp_insert_post($checkout_page, false);
1830 + //save the id in the database
1831 + update_option('wp_chatbot_app_checkout', $app_checkout);
1832 + }
1833 + //App Order thank you page create
1834 + $existing_thankyou = new WP_Query( array( 'post_type' => 'page', 'name' => 'wpwbot-app-order-thankyou', 'post_status' => 'publish', 'posts_per_page' => 1 ) );
1835 + if ( ! $existing_thankyou->have_posts() ) {
1836 + //post status and options
1837 + $thankyou_page = array(
1838 + 'comment_status' => 'closed',
1839 + 'ping_status' => 'closed',
1840 + 'post_author' => get_current_user_id(),
1841 + 'post_date' => gmdate('Y-m-d H:i:s'),
1842 + 'post_status' => 'publish',
1843 + 'post_title' => 'wpwBot App Order Thank You',
1844 + 'post_name' => 'wpwbot-app-order-thankyou',
1845 + 'post_type' => 'page',
1846 + );
1847 + //insert page and save the id
1848 + $app_order_thankyou = wp_insert_post($thankyou_page, false);
1849 + //save the id in the database
1850 + update_option('wp_chatbot_app_order_thankyou', $app_order_thankyou);
1851 + }
1852 + }
1853 + //Keep tracking from App by cookies
1854 + if ( isset( $_GET['from'] ) && sanitize_text_field( wp_unslash( $_GET['from'] ) ) === 'app' ) { // phpcs:ignore WordPress.Security.NonceVerification
1855 + if (!isset($_COOKIE['from_app'])) {
1856 + setcookie('from_app', 'yes', (time() + 3600), '/');
1857 + }
1858 + }
1859 +}
1860 +/***
1861 + * Override order Thank page for mobile app
1862 + */
1863 +add_action('wpcommerce_thankyou', 'qcld_wb_chatbot__redirect_after_purchase', 10, 1);
1864 +function qcld_wb_chatbot__redirect_after_purchase($order_get_id){
1865 + if (isset($_COOKIE['from_app']) && $_COOKIE['from_app'] == 'yes') {
1866 + global $wp;
1867 + if (is_checkout() && !empty($wp->query_vars['order-received'])) {
1868 + $thanks_page_id = get_option('wp_chatbot_app_order_thankyou');
1869 + $thanks_parmanlink = esc_url(get_permalink($thanks_page_id));
1870 + wp_safe_redirect($thanks_parmanlink . '?order_id=' . $order_get_id);
1871 + exit;
1872 + }
1873 + } else {
1874 + remove_action('wpcommerce_thankyou', 'qcld_wb_chatbot__redirect_after_purchase');
1875 + do_action('wpcommerce_thankyou', $order_get_id);
1876 + }
1877 +}
1878 +
1879 +function qcld_choose_random($array){
1880 + if (is_array($array) && !empty($array)) {
1881 + return $array[array_rand($array)];
1882 + }
1883 + return $array;
1884 +}
1885 +
1886 +//User session count
1887 +add_action('wp_ajax_qcld_wb_chatbot_session_count', 'qcld_wb_chatbot_session_count');
1888 +add_action('wp_ajax_nopriv_qcld_wb_chatbot_session_count', 'qcld_wb_chatbot_session_count');
1889 +function qcld_wb_chatbot_session_count(){
1890 + // Nonce is checked, get the POST data and sign user on
1891 + check_ajax_referer( 'wp_chatbot', 'nonce' );
1892 + global $wpdb;
1893 + $wpdb->show_errors = true;
1894 + $tableuser = $wpdb->prefix.'wpbot_sessions';
1895 + $response = array();
1896 +
1897 +
1898 + $session_exists = $wpdb->get_row($wpdb->prepare("select * from {$tableuser} where 1 and id = %d",1)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, PluginCheck.Security.DirectDB.UnescapedDBParameter
1899 +
1900 + if(empty($session_exists)){
1901 + $wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
1902 + $tableuser,
1903 + array(
1904 + 'session' => 1,
1905 + )
1906 + );
1907 + }else{
1908 +
1909 + $session_id = $session_exists->id;
1910 +
1911 + $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1912 + $tableuser,
1913 + array(
1914 + 'session'=>($session_exists->session+1),
1915 + ),
1916 + array('id'=>$session_id),
1917 + array(
1918 + '%d',
1919 + ),
1920 + array('%d')
1921 + );
1922 +
1923 + }
1924 +
1925 + wp_send_json($response);
1926 +}
1927 +
1928 +/* WPBot Chat History Addon check */
1929 +function qcld_wpbot_is_active_chat_history(){
1930 +
1931 + if(function_exists('qcwp_chat_session_menu_fnc') || function_exists('qcwp_chat_session_menu_fnc_free') || function_exists( 'qcpdcs_chat_session_menu_fnc' ) ){
1932 + return 1;
1933 + }else{
1934 + return 0;
1935 + }
1936 +
1937 +}
1938 +
1939 +/**
1940 + * Safely sanitize chatbot conversation input.
1941 + *
1942 + * SECURITY FIX (CVE WPBot Stored XSS ≤ 8.6.9):
1943 + * The previous order was: wp_kses() → html_entity_decode() → htmlspecialchars().
1944 + * An attacker could submit entity-encoded payloads (&lt;img onerror=...&gt;) that
1945 + * bypassed wp_kses (which saw inert text), were then decoded back into live markup
1946 + * by html_entity_decode(), and survived into storage and the admin UI.
1947 + *
1948 + * Correct order: html_entity_decode() FIRST → wp_kses() → htmlspecialchars().
1949 + * wp_kses() now sees the real decoded markup and strips forbidden tags/attributes.
1950 + *
1951 + * @param string $data Raw conversation string (already wp_unslash'd by caller).
1952 + * @return string Sanitized, entity-encoded string safe for DB storage.
1953 + */
1954 +function qcld_wpbot_input_validation( $data ) {
1955 + // 1. Decode any entity-encoded HTML so wp_kses sees the real markup.
1956 + $data = html_entity_decode( $data, ENT_QUOTES | ENT_HTML5, 'UTF-8' );
1957 + $data = trim( $data );
1958 + $data = stripslashes( $data );
1959 + // 2. Sanitize with a strict allowlist — NOW operating on decoded markup.
1960 + $data = wp_kses( $data, wpbot_get_safe_conversation_tags() );
1961 + // 3. Re-encode for safe DB storage; admin.js decodes for rendering.
1962 + $data = htmlspecialchars( $data, ENT_QUOTES | ENT_HTML5, 'UTF-8' );
1963 + return $data;
1964 +}
1965 +
1966 +/**
1967 + * Returns the strict HTML allowlist for chatbot conversation content.
1968 + *
1969 + * Critically: no event-handler attributes (onerror, onclick, onload, etc.) are
1970 + * allowed — wp_kses strips any attribute not explicitly listed here.
1971 + * 'img' is intentionally omitted; bot responses that include images should use
1972 + * safe URLs only and can be re-added with only 'src', 'alt', 'class' if needed.
1973 + *
1974 + * @return array<string, array<string, bool>>
1975 + */
1976 +function wpbot_get_safe_conversation_tags() {
1977 + return array(
1978 + 'ul' => array( 'class' => true ),
1979 + 'ol' => array( 'class' => true ),
1980 + 'li' => array( 'class' => true, 'id' => true ),
1981 + 'div' => array( 'class' => true, 'id' => true ),
1982 + 'span' => array( 'class' => true, 'id' => true ),
1983 + 'p' => array( 'class' => true ),
1984 + 'br' => array(),
1985 + 'strong' => array(),
1986 + 'em' => array(),
1987 + 'b' => array(),
1988 + 'i' => array(),
1989 + 'a' => array(
1990 + 'href' => true,
1991 + 'target' => true,
1992 + 'rel' => true,
1993 + 'class' => true,
1994 + ),
1995 + // 'img' intentionally excluded — prevents onerror/onload injection.
1996 + // Add back with only 'src','alt','class' if bot image responses are needed.
1997 + );
1998 +}
1999 +add_action('wp_ajax_qcld_small_talk_import', 'qcld_small_talk_import');
2000 +function qcld_small_talk_import(){
2001 + if ( ! current_user_can( 'manage_options' ) ) {
2002 + wp_die();
2003 + }
2004 + global $wpdb;
2005 +
2006 + $table = $wpdb->prefix.'wpbot_response';
2007 +
2008 + $csvFile = file(QCLD_wpCHATBOT_PLUGIN_DIR_PATH . 'small_talk.csv');
2009 +
2010 + foreach ($csvFile as $line) {
2011 + $line = str_getcsv($line, ',', '"');
2012 + $wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
2013 + $table, array(
2014 + 'query' => $line[0],
2015 + 'keyword' => $line[1],
2016 + 'response' => $line[2],
2017 + 'category'=> $line[3],
2018 + 'intent'=> '',
2019 + //'lang'=> 'en_US',
2020 + ));
2021 + }
2022 +
2023 + $table2 = $wpdb->prefix.'wpbot_response_category';
2024 +
2025 + $wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
2026 + $table2, array(
2027 + 'name' => 'smalltalk',
2028 + ));
2029 +
2030 + update_option( 'qcld_small_talk_imported', 'yes' );
2031 +
2032 +}
2033 +function sanitize_array( &$array ) {
2034 + if (!empty($array)) {
2035 + foreach ($array as &$value) {
2036 + if( !is_array($value) )
2037 + // sanitize if value is not an array
2038 + $value = sanitize_text_field( esc_html($value) );
2039 + else
2040 + // go inside this function again
2041 + sanitize_array(esc_html($value));
2042 + }
2043 + }
2044 + return $array;
2045 +}
2046 +function qcld_wpbot_meta_tags() {
2047 + echo '<!-- "This site uses ChatBot for WordPress - WPBot from https://www.wpbot.pro/" -->';
2048 +}
2049 +add_action('wp_footer', 'qcld_wpbot_meta_tags', 100);
2050 +
2051 +if ( ! function_exists( 'qcld_change_language_from_center' ) ) {
2052 + add_action( 'wp_ajax_qcld_change_language_from_center', 'qcld_change_language_from_center' );
2053 + add_action( 'wp_ajax_nopriv_qcld_change_language_from_center', 'qcld_change_language_from_center' );
2054 + function qcld_change_language_from_center() {
2055 + if ( ! current_user_can( 'manage_options' ) ) {
2056 + wp_send_json_error( array( 'message' => 'Unauthorized.' ) );
2057 + }
2058 + $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
2059 + if ( ! wp_verify_nonce( $nonce, 'wp_chatbot' ) ) {
2060 + wp_send_json_error( array( 'message' => 'Invalid nonce.' ) );
2061 + }
2062 + $plugin_path = plugin_dir_path( __FILE__ );
2063 + include $plugin_path . 'includes/admin/settings-fields.php';
2064 + $json_file_path = $plugin_path . 'includes/language-center.json';
2065 +
2066 + $json_string = file_get_contents( $json_file_path );
2067 + if ( isset( $_POST['language'] ) ) {
2068 + $language = sanitize_text_field( wp_unslash( $_POST['language'] ) );
2069 + $language_array= json_decode($json_string)->$language;
2070 + update_option( 'wp_chatbot_language_center_language', $language );
2071 + wp_send_json_success( array( 'message' => true, 'data' => $language_array, 'language' => $language ) );
2072 + } else {
2073 + wp_send_json_error( array( 'message' => 'Language not specified.' ) );
2074 +
2075 + }
2076 + }
2077 +}
2078 +
2079 +// AI Actions Chat Preview
2080 +