PluginProbe
AI Chatbot for WooCommerce & Live Chat – onWebChat / 3.2.0
AI Chatbot for WooCommerce & Live Chat – onWebChat v3.2.0
3.10.0 3.9.2 3.9.3 3.9.1 3.9.0 3.8.4 3.8.2 3.8.1 3.8.0 3.7.2 3.7.1 3.7.0 3.6.0 3.5.5 trunk 1.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.2 1.0.3 1.0.4 1.0.5 All 49 releases
← All changes | onwebchat.php +358 -158 3.8.23.2.0 View file →
@@ -1,34 +1,15 @@
1 1 <?php
2 -
3 -if ( ! defined( 'ABSPATH' ) ) {
4 - exit; // Exit if accessed directly
5 -}
6 -
7 2 /*
8 -Plugin Name: onWebChat - Live Chat & AI Chatbot
3 +Plugin Name: onWebChat Live Chat
9 4 Plugin URI: https://www.onwebchat.com/wordpress-live-chat-plugin.php
10 -Description: Empower visitors with real-time human chat and integrated AI chatbots. onWebChat Live Chat delivers instant responses, smoother interactions, and 24/7 availability - improving engagement, satisfaction, and conversions. Includes WooCommerce product sync for AI training.
5 +Description: live chat service that helps you communicate with your website's visitors.
11 6 Author: onWebChat
12 -Version: 3.8.2
7 +Version: 3.2.0
13 8 Author URI: https://www.onwebchat.com
14 9 */
15 10
16 -// Plugin version. Keep in sync with the Version header above on each release.
17 -// Sent to onWebChat when the plugin is linked to an account.
18 -if (!defined('ONWEBCHAT_PLUGIN_VERSION')) {
19 - define('ONWEBCHAT_PLUGIN_VERSION', '3.8.2');
20 -}
21 11
22 -/**
23 - * WooCommerce Testing Mode Configuration
24 - * Set to true for local development (127.0.0.1:81)
25 - * Set to false for production (www.onwebchat.com)
26 - */
27 -if (!defined('ONWEBCHAT_WC_TESTING_MODE')) {
28 - define('ONWEBCHAT_WC_TESTING_MODE', false);
29 -}
30 -
31 12 /* ---------------------------------------------------- *
32 13 * Create Settings Page
33 14 * ---------------------------------------------------- */
34 15
@@ -35,17 +16,8 @@
35 16
36 17 define('ONWEBCHAT_SMALL_LOGO', plugins_url( 'images/onwebchat-logo.png' , __FILE__ ));
37 18 define('ONWEBCHAT_SERVER_URL','https://www.onwebchat.com/get-chatid.php');
38 19
39 -// Load WooCommerce modules if WooCommerce is active
40 -add_action('plugins_loaded', function () {
41 - if (class_exists('WooCommerce')) {
42 - // Product catalog sync (plugin -> onWebChat, for AI training).
43 - require_once __DIR__ . '/includes/woocommerce-sync.php';
44 - // Live order-status lookup (onWebChat -> plugin, during a chat).
45 - require_once __DIR__ . '/includes/woocommerce-orders.php';
46 - }
47 -});
48 20
49 21 // add styles
50 22 add_action( 'admin_enqueue_scripts', 'register_plugin_styles' );
51 23
@@ -57,12 +29,9 @@
57 29
58 30 // define the settings
59 31 add_action('admin_init','onwebchat_register_setttings');
60 32
61 -// handle form submissions early (before any output)
62 -add_action('admin_init', 'onwebchat_handle_all_form_submissions');
63 33
64 -
65 34 /* ---------------------------------------------------- *
66 35 * Display onWebChat on footer
67 36 * ---------------------------------------------------- */
68 37
@@ -83,13 +52,354 @@
83 52 * Admin Page Display Function
84 53 * ------------------------------------------------------ */
85 54
86 55 function onwebchat_init_menu_page() {
87 - // Load the new tabbed settings page
88 - require_once __DIR__ . '/admin/settings-page.php';
89 - onwebchat_settings_page();
56 +
57 +
58 + $options = get_option('onwebchat_plugin_option');
59 + $chatId = $options['text_string'];
60 +
61 + $isConnected = false;
62 + if($chatId !="") {
63 + $isConnected = true;
64 + }
65 +
66 + $isSecondPage = false;
67 +
68 +
69 + /*****************************************************************
70 + * Ask server for chatId
71 + *****************************************************************/
72 + if ( isset( $_POST["action"] ) && $_POST["action"] == "login" ) {
73 +
74 +
75 + // the following lines are added to verify a correct security nonce(token) by using "wp_verify_nonce()"
76 + if (! isset($_POST['_wpnonce'])
77 + || ! wp_verify_nonce( $_POST['_wpnonce'], 'on_web_chat_nonce')){
78 + print 'Sorry, your nonce did not verify.';
79 + exit;
80 + }
81 +
82 + $options = get_option('onwebchat_plugin_option');
83 + $chatId = $options['text_string'];
84 + //****************************
85 +
86 + // get username, password and chatId
87 + $userName = $_POST["onWebChatUser"];
88 +
89 + if(isset($_POST["onWebChatPass"])) {
90 + $userPass = $_POST["onWebChatPass"];
91 + }
92 +
93 + $chatId = $_POST["chatId"];
94 +
95 +
96 + if( isset($_POST["pages-select"])) {
97 + $pagesSelect = $_POST["pages-select"];
98 + }
99 +
100 + if( isset($_POST["showonpages"])) {
101 + $showOnPages = $_POST["showonpages"];
102 + }
103 +
104 + if(isset($_POST["hideonpages"])) {
105 + $hideOnPages = $_POST["hideonpages"];
106 + }
107 +
108 + if(isset($_POST["onwebchat-api"])) {
109 + $onwebchatApi = $_POST["onwebchat-api"];
110 + }
111 +
112 +
113 + if(isChatIdValid($chatId)) {
114 +
115 + if ( isset($_POST["isSecondPage"])){
116 + $isSecondPage = $_POST["isSecondPage"];
117 + }
118 +
119 + //----------- update chatId option ------------
120 + $my_options = get_option('onwebchat_plugin_option');
121 +
122 + $my_options['text_string'] = $chatId;
123 +
124 + //Update entire array
125 + update_option('onwebchat_plugin_option', $my_options);
126 + //-----------------------------------------------
127 +
128 + // remove user email from db
129 + if(!$isSecondPage) {
130 + update_option( 'onwebchat_plugin_option_user', '');
131 + update_option( 'onwebchat_plugin_option_pages_select', 1);
132 +
133 + } else {
134 +
135 + update_option( 'onwebchat_plugin_option_pages_select', $pagesSelect);
136 +
137 + if ($pagesSelect==2){
138 + update_option( 'onwebchat_plugin_option_show_pages', $showOnPages);
139 + } else if ($pagesSelect==3){
140 + update_option( 'onwebchat_plugin_option_hide_pages', $hideOnPages);
141 + }
142 +
143 + //TODO update textarea
144 + update_option( 'onwebchat_plugin_option_api_code', $onwebchatApi);
145 + }
146 +
147 + // move to next page
148 + print('<script>window.location.href="admin.php?page=onwebchat_settings"</script>');
149 +
150 + } else {
151 +
152 + // save username at options
153 + update_option( 'onwebchat_plugin_option_user', $userName );
154 +
155 + // ask server for chatId
156 + $response = wp_remote_post(ONWEBCHAT_SERVER_URL, array(
157 + 'method' => 'POST',
158 + 'timeout' => 45,
159 + 'redirection' => 5,
160 + 'httpversion' => '1.0',
161 + 'blocking' => true,
162 + 'headers' => array(),
163 + 'body' => array( 'email' => $userName, 'pass' => $userPass ),
164 + 'cookies' => array()
165 + ));
166 +
167 + if ( is_wp_error( $response ) ) {
168 + $error_message = $response->get_error_message();
169 +
170 + } else {
171 + // If no chatId returned
172 + if($response['body'] == '-1') {
173 + // display an error for wrong credentials
174 + onwebchat_login_error(true);
175 +
176 + } else {
177 +
178 + //----------- update chatId
179 + $my_options = get_option('onwebchat_plugin_option');
180 +
181 + $my_options['text_string'] = $response['body'];
182 +
183 + update_option('onwebchat_plugin_option', $my_options);
184 + update_option( 'onwebchat_plugin_option_pages_select', 1);
185 + //--------------------------------------------
186 +
187 + // move to next page
188 + print('<script>window.location.href="admin.php?page=onwebchat_settings"</script>');
189 + }
190 + }
191 + }
192 +
193 + $m_option_hide = false;
194 + if(isset($_POST['onwebchat_plugin_option_hide'])) {
195 + $m_option_hide = $_POST['onwebchat_plugin_option_hide'];
196 + }
197 +
198 + update_option('onwebchat_plugin_option_hide', $m_option_hide); //an einai stin proti selida tote to kanei keno (opote by default den einai epilegmeno)
199 +
200 + }
201 +
202 + //********************************************************************
203 +
204 +
205 + /*********************************************************************
206 + * Disconnect account
207 + *********************************************************************/
208 + if( isset($_GET["action"]) && $_GET["action"] == "deactivate" && $isConnected) {
209 + $isConnected = false;
210 +
211 + $my_options = get_option('onwebchat_plugin_option');
212 +
213 + $my_options['text_string'] = '';
214 +
215 + update_option('onwebchat_plugin_option', $my_options);
216 + update_option( 'onwebchat_plugin_option_pages_select', 1);
217 +
218 + $chatIdOption = get_option('onwebchat_plugin_option');
219 + $chatId = $chatIdOption['text_string'];
220 +
221 + print('<script>window.location.href="admin.php?page=onwebchat_settings"</script>');
222 +
223 + }
224 + //***********************************************************************
225 +
226 +
227 +
228 + ?>
229 + <div>
230 + <h2 style="font-size:22px; color:#59808c">onWebChat <?php ($isConnected == true) ? print 'Settings' : print 'Activation'; ?> </h2>
231 +
232 + <form action="admin.php?page=onwebchat_settings" method="post">
233 + <input type="hidden" name="action" value="login">
234 + <?php
235 +
236 + //create nonce(token)
237 + wp_nonce_field('on_web_chat_nonce');
238 +
239 + // Login Page
240 + if($isConnected != true) {
241 +
242 + $chatId = get_option( 'onwebchat_plugin_option' );
243 + $chatId = $chatId['text_string'];
244 + ?>
245 +
246 + <hr class="small-hr2">
247 +
248 + <h3 class="header-1">Connect with your onWebChat account</h3>
249 +
250 +
251 +
252 + <div class="username-div">
253 + <!-- sanitize user-provided parameter -->
254 + <strong>Email: </strong><input class="username-text-field" type="text" name="onWebChatUser" value="<?php echo esc_attr(get_option( 'onwebchat_plugin_option_user' )); ?>"/>
255 + </div>
256 +
257 + <div class="password-div">
258 + <strong>Password: </strong><input class="password-text-field" type="password" name="onWebChatPass" value="<?php echo get_option( 'onWebChatPass' ); ?>"/>
259 + </div>
260 +
261 + <div style="width: 560px; height: 10px; border-bottom: 1px solid #bfbfbf; text-align: center; margin-top:30px">
262 + <span class="header-or" style="font-size: 23px; background-color: #f1f1f1; padding: 0 10px;">
263 + OR
264 + </span>
265 + </div>
266 +
267 +
268 + <h3 class="header-2">Paste your onWebChat Chat Id</h3>
269 + <div class="chatid-div">
270 + <strong>Chat Id:</strong> <input class="chatid-text-field" type="text" name="chatId" value="<?php echo $chatId; ?>"/>
271 + </div>
272 +
273 + <hr class="small-hr2">
274 +
275 + <div class="new-account-link">
276 + <span class="info-star">*</span> If you don't have an account on onWebChat live chat service, you should create one <a href="https://www.onwebchat.com/signup.php" target="_blank">here</a>
277 + </div>
278 +
279 +
280 + <?php
281 + }
282 +
283 + // 2nd Page
284 + else {
285 + $options = get_option('onwebchat_plugin_option_user');
286 +
287 + // display user email
288 + if($options!=''){
289 + //sanitize user-provided parameter
290 + $email = esc_html($options);
291 + $html = '<br><h3 class="header-1-p2">Activated for onWebChat account: </h3>';
292 + $html .= "<strong class='account-id'>$email</strong> ";
293 + }
294 +
295 + // display chatId
296 + else {
297 + $chatId = get_option( 'onwebchat_plugin_option' );
298 + $chatId = $chatId['text_string'];
299 + $html = '<br><h3 class="header-1-p2">Activated for onWebChat Chat Id: </h3>';
300 + $html .= "<strong class='account-id'>$chatId</strong> ";
301 + }
302 + $html .= ' <a href="admin.php?page=onwebchat_settings&amp;action=deactivate">Deactivate</a>';
303 + //$html .= ' <div class="admin-login-info"> <span>*</span> To connect to onWebChat Operator Console click <a target="_blank" href="https://www.onwebchat.com/login.php">here</a> </div>';
304 + echo $html;
305 +
306 + $options = get_option('onwebchat_plugin_option_hide');
307 +
308 + $chatId = get_option( 'onwebchat_plugin_option' );
309 + $chatId = $chatId['text_string'];
310 +
311 + //TODO get correct value
312 + $onwebchatApi = get_option('onwebchat_plugin_option_api_code');
313 + $onwebchatApi = str_replace('\\','',$onwebchatApi);
314 + ?>
315 + <!-- <div class="hide-div">-->
316 + <!-- <strong>Hide Chat Widget:</strong> <input type="checkbox" id="plugin_text_checkbox" name="onwebchat_plugin_option_hide" value="1" --><?php //checked( $options, 1 ); ?><!-- />-->
317 + <!-- </div>-->
318 +
319 +
320 +
321 + <div class="hide-div">
322 + <select id="pages-select" name="pages-select" onchange="onwc_select_change()">
323 + <option value="1" <?php selected( get_option('onwebchat_plugin_option_pages_select'), 1 ); ?>>Show chat widget on all pages</option>
324 + <option value="2" <?php selected( get_option('onwebchat_plugin_option_pages_select'), 2 ); ?>>Show on the following pages:</option>
325 + <option value="3" <?php selected( get_option('onwebchat_plugin_option_pages_select'), 3 ); ?>>Hide on the following pages:</option>
326 + <option value="4" <?php selected( get_option('onwebchat_plugin_option_pages_select'), 4 ); ?>>Hide chat widget from all pages</option>
327 + </select>
328 + </div>
329 +
330 + <div id="onwc_show_on_pages_div" style="display:none">
331 + <input id="showonpages" name="showonpages" class="showhidepages" type="text" value="<?php echo esc_attr(get_option( 'onwebchat_plugin_option_show_pages' )); ?>" /><a href="#" style="text-decoration: none;" onmouseover="document.getElementById('help').style.visibility = 'visible'"; ONMOUSEOUT="document.getElementById('help').style.visibility = 'hidden'"><strong><font size="4" face="Arial"> ? </font></strong></a>
332 + </div>
333 + <div id="onwc_hide_on_pages_div" style="display:none">
334 + <input id="hideonpages" name="hideonpages" class="showhidepages" type="text" value="<?php echo esc_attr(get_option( 'onwebchat_plugin_option_hide_pages' )); ?>" /><a href="#" style="text-decoration: none;" onmouseover="document.getElementById('help').style.visibility = 'visible'"; ONMOUSEOUT="document.getElementById('help').style.visibility = 'hidden'"><strong><font size="4" face="Arial"> ? </font></strong></a>
335 + </div>
336 +
337 + <div id="help">
338 + <span>You can insert multiple pages seperated by space. You can insert a part of the page or URL. e.g. &nbsp; index pric contact.php blog/</span>
339 + </div>
340 +
341 + <h3 class="header-2">Write your onWebChat Chat API code</h3>
342 + <div class="chatid-div">
343 + <strong>onWebChat API:</strong>
344 + <br>
345 + <!-- sanitize user-provided parameter -->
346 + <textarea class="chatid-text-field" style="margin-left: 0px;" rows="10" name="onwebchat-api"><?php echo esc_html($onwebchatApi); ?></textarea>
347 + <br>
348 + <br>
349 + </div>
350 +
351 + <div>
352 + <br /><br />
353 + </div>
354 +
355 + <!-- hiden fields -->
356 + <input class="chatid-text-field-hide" type="text" name="chatId" value="<?php echo esc_attr($chatId); ?>"/>
357 + <input class="chatid-text-field-hide" type="text" name="onWebChatUser" value="<?php echo esc_attr(get_option( 'onwebchat_plugin_option_user' )); ?>"/>
358 + <input class="chatid-text-field-hide" type="text" name="isSecondPage" value="1"/>
359 +
360 + <div class="new-account-link"> <span>*</span> To connect to onWebChat Operator Console click <a target="_blank" href="https://www.onwebchat.com/login.php">here</a> </div>
361 + <?php
362 +
363 +
364 + }
365 +
366 + // Display the Save Button
367 + $html = '<input class="button button-primary" style="margin-left: 230px;" type="submit" value="Save Changes"/>';
368 + echo $html;
369 + ?>
370 + </form>
371 + </div>
372 +
373 + <script type="text/javascript">
374 +
375 +
376 + function onwc_select_change() {
377 + var e = document.getElementById("pages-select");
378 + var selected = e.options[e.selectedIndex].value;
379 + if (selected == 1){
380 + document.getElementById("onwc_show_on_pages_div").style.display = "none";
381 + document.getElementById("onwc_hide_on_pages_div").style.display = "none";
382 + } else if (selected == 2){
383 + document.getElementById("onwc_show_on_pages_div").style.display = "block";
384 + document.getElementById("onwc_hide_on_pages_div").style.display = "none";
385 + } else if (selected == 3){
386 + document.getElementById("onwc_show_on_pages_div").style.display = "none";
387 + document.getElementById("onwc_hide_on_pages_div").style.display = "block";
388 + } else if (selected == 4){
389 + document.getElementById("onwc_show_on_pages_div").style.display = "none";
390 + document.getElementById("onwc_hide_on_pages_div").style.display = "none";
391 + }
392 +
393 + }
394 + document.addEventListener('DOMContentLoaded', function() {
395 + onwc_select_change();
396 + }, false);
397 + </script>
398 + <?php
90 399 }
91 400
401 +
92 402 /* ----------------------------------------------------- *
93 403 * Admin Page Styles Registration
94 404 * ----------------------------------------------------- */
95 405
@@ -117,17 +427,8 @@
117 427
118 428 //TODO api code
119 429 //* register the api code
120 430 register_setting( 'onwebchat_plugin_option', 'onwebchat_plugin_option_api_code');
121 -
122 - /******************** WooCommerce Sync Settings ************************/
123 - register_setting( 'onwebchat_wc_sync', 'onwebchat_wc_sync_enabled');
124 - register_setting( 'onwebchat_wc_sync', 'onwebchat_wc_sync_mode');
125 - register_setting( 'onwebchat_wc_sync', 'onwebchat_wc_sync_include_price');
126 - register_setting( 'onwebchat_wc_sync', 'onwebchat_wc_sync_secret');
127 - register_setting( 'onwebchat_wc_sync', 'onwebchat_wc_last_bulk_sync');
128 - register_setting( 'onwebchat_wc_sync', 'onwebchat_wc_excluded_categories');
129 - register_setting( 'onwebchat_wc_sync', 'onwebchat_wc_sync_categories');
130 431 }
131 432
132 433
133 434 /* ----------------------------------------------------- *
@@ -137,22 +438,12 @@
137 438 // print chat widget code
138 439 function onwebchat_add_script_at_footer() {
139 440
140 441 $options = get_option('onwebchat_plugin_option');
141 - $chatId = (is_array($options) && isset($options['text_string'])) ? $options['text_string'] : '';
442 + $chatId = $options['text_string'];
142 443 //$hideWidget = get_option('onwebchat_plugin_option_hide');
143 444 $hideWidget = false;
144 -
145 - // If no chat ID is configured, don't output widget code
146 - if (empty($chatId)) {
147 - return;
148 - }
149 445
150 - // Merchant option: show the chat widget only to signed-in users (default: off).
151 - if (get_option('onwebchat_plugin_option_logged_only', 0) && !is_user_logged_in()) {
152 - return;
153 - }
154 -
155 446 $widgetCode = "<script type='text/javascript'>var onWebChat={ar:[], set: function(a,b){if (typeof onWebChat_==='undefined'){this.ar.push([a,b]);}else{onWebChat_.set(a,b);}},get:function(a){return(onWebChat_.get(a));},w:(function(){ var ga=document.createElement('script'); ga.type = 'text/javascript';ga.async=1;ga.src='//www.onwebchat.com/clientchat/$chatId';var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(ga,s);})()}</script>";
156 447
157 448 $apiCode = get_option('onwebchat_plugin_option_api_code');
158 449
@@ -162,38 +453,25 @@
162 453
163 454 $widgetCode .= $apiCode;
164 455
165 456
166 - // Identity PROOF for the logged-in email: HMAC_SHA256(shared sync secret, lowercase(email)).
167 - // The onWebChat server recomputes it with the same secret; only when it matches does the AI treat
168 - // the email as verified and allow the email-only "my recent orders" lookup. A visitor faking
169 - // onWebChat.set('email') from the console cannot produce this hash, so they can never list another
170 - // customer's orders. The '0' sentinel means "not signed in": it tells onWebChat to DROP any stored
171 - // proof, so on a shared computer nobody inherits the previous customer's identity after a logout.
172 - $onwebchat_email_hash = '0';
173 - $onwebchat_wc_secret = get_option('onwebchat_wc_sync_secret');
174 -
175 457 //check if user is logged if yes get username, email
176 458 if ( is_user_logged_in() ) {
177 459
178 - $current_user = wp_get_current_user();
460 + global $current_user;
461 + get_currentuserinfo();
179 462
180 - // get user name (escaped for safe use inside the inline script)
181 - $onwebchat_user = esc_js( $current_user->user_login );
463 + // get user name
464 + $onwebchat_user = $current_user->user_login;
182 465
183 - // get user email (escaped for safe use inside the inline script)
184 - $onwebchat_email = esc_js( $current_user->user_email );
466 + // get user email
467 + $onwebchat_email = $current_user->user_email;
185 468
186 469 //add api info
187 470 if ($onwebchat_user != null && $onwebchat_user != "" && $onwebchat_user != "guest" && $onwebchat_user != "Guest") {
188 471 if ($onwebchat_email != null && $onwebchat_email != ""){
189 - // Hash the raw (unescaped) email so both sides hash identical bytes.
190 - if (!empty($onwebchat_wc_secret)) {
191 - $onwebchat_email_hash = hash_hmac('sha256', strtolower(trim($current_user->user_email)), $onwebchat_wc_secret);
192 - }
193 -
194 472 $widgetCode = $widgetCode."<script type='text/javascript'>onWebChat.set('name','$onwebchat_user');
195 - onWebChat.set('email','$onwebchat_email');</script>";
473 + onWebChat.set('email','$onwebchat_email'); </script>";
196 474 } else {
197 475 $widgetCode = $widgetCode."<script type='text/javascript'>onWebChat.set('name','$onwebchat_user');</script>";
198 476 }
199 477 }
@@ -198,12 +476,8 @@
198 476 }
199 477 }
200 478 }
201 479
202 - if (!empty($onwebchat_wc_secret)) {
203 - $widgetCode .= "<script type='text/javascript'>onWebChat.set('emailHash','" . esc_js($onwebchat_email_hash) . "');</script>";
204 - }
205 -
206 480 $currentPage = substr( strtolower($_SERVER['SERVER_PROTOCOL']), 0, strpos( strtolower($_SERVER['SERVER_PROTOCOL']), "/") );
207 481 $currentPage .= ( empty($_SERVER['HTTPS']) ? NULL : ( ($_SERVER['HTTPS'] == "on") ? "s" : NULL) );
208 482 $currentPage .= "://" . $_SERVER['SERVER_NAME'];
209 483 $currentPage .= ( $_SERVER['SERVER_PORT'] == 80 ? "" : ":".$_SERVER['SERVER_PORT'] );
@@ -236,9 +510,9 @@
236 510 }
237 511 }
238 512 }
239 513 } else if($pagesSelect == 4) {
240 - //hide chat widget from all pages
514 + //TODO we hide chat widget from all pages
241 515 $hideWidget = true;
242 516 }
243 517
244 518 if(!$hideWidget && $showSelect) {
@@ -250,16 +524,12 @@
250 524 /************************************************************************
251 525 * display error function
252 526 ***********************************************************************/
253 527 function onwebchat_login_error($contition = false) {
254 -
255 -
256 -
257 528 if($contition) {
258 529 ?>
259 -
260 530 <div class="error">
261 - <p><strong>Invalid credentials!</strong> Please make sure you have entered the correct email and password, <strong>OR</strong> provide a valid Chat ID</p>
531 + <p><strong>Wrong credentials!</strong> Please enter correct <u>email and password</u> <strong>OR</strong> a valid <u>Chat Id</u>.</p>
262 532 </div>
263 533 <?php
264 534 }
265 535 else {
@@ -273,75 +543,5 @@
273 543 function isChatIdValid($input) {
274 544 return preg_match('/^[a-f0-9]{32,40}+[\\/]?+[0-9]{0,2}+[\\/]?+[0-9]{0,2}$/i', $input);
275 545 }
276 546
277 -/************************************************************************
278 - * Fetch WooCommerce secret during login
279 - * Called automatically when user logs in with email/password
280 - * This way they don't need to re-enter credentials in WooCommerce tab
281 - ***********************************************************************/
282 -function onwebchat_fetch_wc_secret_on_login($email, $password, $chatId) {
283 - // Extract key part (before first slash if present)
284 - $key = explode('/', $chatId)[0];
285 -
286 - // Determine endpoint based on testing mode constant
287 - $endpoint = ONWEBCHAT_WC_TESTING_MODE
288 - ? 'http://127.0.0.1:81/api/integrations/woocommerce/secret'
289 - : 'https://www.onwebchat.com/api/integrations/woocommerce/secret';
290 -
291 - // Request secret with authentication
292 - $response = wp_remote_post($endpoint, array(
293 - 'timeout' => 15,
294 - 'sslverify' => !ONWEBCHAT_WC_TESTING_MODE,
295 - 'headers' => array(
296 - 'Content-Type' => 'application/json',
297 - ),
298 - 'body' => wp_json_encode(array(
299 - 'email' => $email,
300 - 'password' => $password,
301 - 'site_key' => $key,
302 - 'version' => ONWEBCHAT_PLUGIN_VERSION,
303 - )),
304 - ));
305 -
306 - if (is_wp_error($response)) {
307 - // Silently fail - user can still connect manually in WooCommerce tab
308 - error_log('onWebChat: Failed to fetch WC secret on login: ' . $response->get_error_message());
309 - return;
310 - }
311 -
312 - $status_code = wp_remote_retrieve_response_code($response);
313 - $response_body = wp_remote_retrieve_body($response);
314 - $body = json_decode($response_body, true);
315 -
316 - if ($status_code >= 200 && $status_code < 300 && isset($body['success']) && $body['success']) {
317 - // Success! Store the secret
318 - update_option('onwebchat_wc_sync_secret', $body['secret']);
319 - error_log('onWebChat: WooCommerce sync connected automatically during login');
320 -
321 - // Enable AI order-status lookup by default on connect and register our
322 - // callback URL with onWebChat (best effort; the merchant can toggle it off).
323 - update_option('onwebchat_wc_order_lookup_enabled', true);
324 - global $onwebchat_wc_orders;
325 - if (isset($onwebchat_wc_orders) && is_object($onwebchat_wc_orders)) {
326 - $onwebchat_wc_orders->push_order_lookup_config(true);
327 - }
328 - }
329 - // If it fails, user can still connect manually - no error shown
330 -}
331 -
332 -/************************************************************************
333 - * Handle all form submissions early to avoid blank page on redirect
334 - * Must run on admin_init before any output is sent
335 - ***********************************************************************/
336 -function onwebchat_handle_all_form_submissions() {
337 - // Only run on our settings page
338 - if (!isset($_GET['page']) || $_GET['page'] !== 'onwebchat_settings') {
339 - return;
340 - }
341 -
342 - // Load the general tab handlers
343 - require_once __DIR__ . '/admin/tabs/general.php';
344 - onwebchat_handle_general_actions();
345 -}
346 -
347 -// omit the closing php tag ? > for avoid issues
547 +?>