PluginProbe
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services / 8.7.0
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services v8.7.0
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
chatbot / functions.php

functions.php in WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services 8.7.0, at functions.php

2,008 lines 107.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
2008