PluginProbe
WPBot – AI ChatBot for Live Support, Lead Generation, AI Services / 8.7.2
WPBot – AI ChatBot for Live Support, Lead Generation, AI Services v8.7.2
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 8.4.9 All 531 releases
chatbot / functions.php

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

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