PluginProbe
Pulsating Chat Button / trunk
Pulsating Chat Button vtrunk
trunk 1.5.10 1.5.6 1.5.7 1.5.8 1.5.9
amin-chat-button / chat-button.php

chat-button.php in Pulsating Chat Button trunk, at chat-button.php

652 lines 67.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: Pulsating Chat Button
4 * Plugin URI: https://wordpress.org/plugins/amin-chat-button/
5 * Description: WhatsApp Chat🔥. Adds a pulsating WhatsApp or Telegram button 🍀 to your website. Fast and easy installation. Setting up target id GTM and YandexMetrics. Setting pre-filled Message.
6 * Version: 1.5.10
7 * Requires at least: 5.6
8 * Requires PHP: 7.0
9 * Text Domain: amin-chat-button
10 * License: GPLv2 or later
11 * License URI: https://t.me/aminsha/
12 * Author: Amin Shah
13 * Author URI: https://t.me/aminsha
14 */
15
16 if (!defined('ABSPATH')) {
17 exit;
18 }
19
20 define('AMIN_CHAT_BUTTON_VERSION', '1.5.10');
21
22 // Add a menu item in the WordPress admin panel
23 function amin_chat_button_plugin_menu() {
24 add_menu_page(
25 'Chat Button Plugin Settings',
26 'Chat Button',
27 'manage_options',
28 'amin-chat-button-settings',
29 'amin_chat_button_settings_page',
30 'dashicons-whatsapp'
31 );
32 }
33 add_action('admin_menu', 'amin_chat_button_plugin_menu');
34
35 // Create the settings page for the plugin
36 function amin_chat_button_settings_page() {
37 if (!current_user_can('manage_options')) {
38 wp_die(esc_html__('You do not have sufficient permissions to access this page.', 'amin-chat-button'));
39 }
40
41 // Save the settings if the form is submitted
42 if (isset($_POST['amin_chat_button_plugin_submit'])) {
43
44 $nonce = isset($_POST['amin_chat_button_nonce']) ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_nonce'])) : '';
45
46 // Nonce check
47 if (!wp_verify_nonce($nonce, 'amin_chat_button_save_settings')) {
48 wp_die(esc_html__('Security check failed. Settings not saved.', 'amin-chat-button'));
49 }
50
51 update_option(
52 'amin_chat_button_plugin_enabled',
53 isset($_POST['amin_chat_button_plugin_enabled']) ? '1' : '0'
54 );
55 update_option(
56 'amin_chat_button_plugin_enabled_together',
57 isset($_POST['amin_chat_button_plugin_enabled_together']) ? '1' : '0'
58 );
59 update_option(
60 'amin_chat_button_plugin_phone_en',
61 isset($_POST['amin_chat_button_plugin_phone_en'])
62 ? sanitize_text_field(
63 wp_unslash($_POST['amin_chat_button_plugin_phone_en'])
64 )
65 : ''
66 );
67 update_option(
68 'amin_chat_button_plugin_phone_tr',
69 isset($_POST['amin_chat_button_plugin_phone_tr'])
70 ? sanitize_text_field(
71 wp_unslash($_POST['amin_chat_button_plugin_phone_tr'])
72 )
73 : ''
74 );
75 update_option(
76 'amin_chat_button_plugin_phone',
77 isset($_POST['amin_chat_button_plugin_phone'])
78 ? sanitize_text_field(
79 wp_unslash($_POST['amin_chat_button_plugin_phone'])
80 )
81 : ''
82 );
83 update_option(
84 'amin_chat_button_plugin_phone_link_en',
85 isset($_POST['amin_chat_button_plugin_phone_link_en'])
86 ? sanitize_text_field(
87 wp_unslash($_POST['amin_chat_button_plugin_phone_link_en'])
88 )
89 : ''
90 );
91 update_option(
92 'amin_chat_button_plugin_phone_link_tr',
93 isset($_POST['amin_chat_button_plugin_phone_link_tr'])
94 ? sanitize_text_field(
95 wp_unslash($_POST['amin_chat_button_plugin_phone_link_tr'])
96 )
97 : ''
98 );
99 update_option(
100 'amin_chat_button_plugin_phone_link',
101 isset($_POST['amin_chat_button_plugin_phone_link'])
102 ? sanitize_text_field(
103 wp_unslash($_POST['amin_chat_button_plugin_phone_link'])
104 )
105 : ''
106 );
107 update_option(
108 'amin_chat_button_plugin_text',
109 isset($_POST['amin_chat_button_plugin_text'])
110 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_text']))
111 : ''
112 );
113 update_option(
114 'amin_chat_button_plugin_text_en',
115 isset($_POST['amin_chat_button_plugin_text_en'])
116 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_text_en']))
117 : ''
118 );
119 update_option(
120 'amin_chat_button_plugin_text_en_loc',
121 isset($_POST['amin_chat_button_plugin_text_en_loc'])
122 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_text_en_loc']))
123 : ''
124 );
125 update_option(
126 'amin_chat_button_plugin_text_tr',
127 isset($_POST['amin_chat_button_plugin_text_tr'])
128 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_text_tr']))
129 : ''
130 );
131 update_option(
132 'amin_chat_button_plugin_text_tr_loc',
133 isset($_POST['amin_chat_button_plugin_text_tr_loc'])
134 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_text_tr_loc']))
135 : ''
136 );
137 update_option(
138 'amin_chat_button_plugin_position',
139 isset($_POST['amin_chat_button_plugin_position'])
140 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_position']))
141 : ''
142 );
143 update_option(
144 'amin_chat_button_tag_select',
145 isset($_POST['amin_chat_button_tag_select'])
146 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_tag_select']))
147 : ''
148 );
149 update_option(
150 'amin_chat_button_msg_select',
151 isset($_POST['amin_chat_button_msg_select'])
152 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_msg_select']))
153 : ''
154 );
155 update_option(
156 'amin_chat_button_plugin_target_id',
157 isset($_POST['amin_chat_button_plugin_target_id'])
158 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_target_id']))
159 : ''
160 );
161 update_option(
162 'amin_chat_button_plugin_gtag_report',
163 isset($_POST['amin_chat_button_plugin_gtag_report'])
164 ? sanitize_textarea_field(wp_unslash($_POST['amin_chat_button_plugin_gtag_report']))
165 : ''
166 );
167 update_option(
168 'amin_chat_button_plugin_yametrik_id',
169 isset($_POST['amin_chat_button_plugin_yametrik_id'])
170 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_yametrik_id']))
171 : ''
172 );
173 update_option(
174 'amin_chat_button_plugin_yametrik_account',
175 isset($_POST['amin_chat_button_plugin_yametrik_account'])
176 ? sanitize_text_field(wp_unslash($_POST['amin_chat_button_plugin_yametrik_account']))
177 : ''
178 );
179 update_option(
180 'amin_chat_button_plugin_prohibited_urls',
181 isset($_POST['amin_chat_button_plugin_prohibited_urls'])
182 ? sanitize_textarea_field(wp_unslash($_POST['amin_chat_button_plugin_prohibited_urls']))
183 : ''
184 );
185 update_option(
186 'amin_chat_button_plugin_pulsation',
187 isset($_POST['amin_chat_button_plugin_pulsation']) ? '1' : '0'
188 );
189 }
190
191 // Get the saved settings
192 $enabled = get_option('amin_chat_button_plugin_enabled', '0');
193 $enabled_together = get_option('amin_chat_button_plugin_enabled_together', '0');
194 $phone = get_option('amin_chat_button_plugin_phone', '');
195 $phone_en = get_option('amin_chat_button_plugin_phone_en', '');
196 $phone_tr = get_option('amin_chat_button_plugin_phone_tr', '');
197 $phone_link = get_option('amin_chat_button_plugin_phone_link', '');
198 $phone_link_en = get_option('amin_chat_button_plugin_phone_link_en', '');
199 $phone_link_tr = get_option('amin_chat_button_plugin_phone_link_tr', '');
200 $text = get_option('amin_chat_button_plugin_text', '');
201 $text_en = get_option('amin_chat_button_plugin_text_en', '');
202 $text_en_loc = get_option('amin_chat_button_plugin_text_en_loc', '');
203 $text_tr = get_option('amin_chat_button_plugin_text_tr', '');
204 $text_tr_loc = get_option('amin_chat_button_plugin_text_tr_loc', '');
205 $position = get_option('amin_chat_button_plugin_position', 'right-bottom');
206 $tag_select = get_option('amin_chat_button_tag_select', 'event');
207 $msg_select = get_option('amin_chat_button_msg_select', 'WhatsApp');
208 $target_id = get_option('amin_chat_button_plugin_target_id', '');
209 $gtag_report = get_option('amin_chat_button_plugin_gtag_report', '');
210 $yametrik_id = get_option('amin_chat_button_plugin_yametrik_id', '');
211 $yametrik_account = get_option('amin_chat_button_plugin_yametrik_account', '');
212 $prohibited_urls = get_option('amin_chat_button_plugin_prohibited_urls', '');
213 $pulsation = get_option('amin_chat_button_plugin_pulsation', '1');
214
215 // Display the settings form
216 ?>
217 <div class="cbp-wrap">
218 <h1><?php echo esc_html__('Chat Button Plugin Settings', 'amin-chat-button'); ?></h1>
219 <form method="post" action="">
220 <?php wp_nonce_field('amin_chat_button_save_settings', 'amin_chat_button_nonce'); ?>
221 <table class="cbp-form-table">
222 <tr>
223 <th scope="row"><?php echo esc_html__('Enable Chat Button', 'amin-chat-button'); ?></th>
224 <td>
225 <label for="amin_chat_button_plugin_enabled">
226 <input type="checkbox" id="amin_chat_button_plugin_enabled" name="amin_chat_button_plugin_enabled" value="1" <?php checked($enabled, '1'); ?>>
227 <?php echo esc_html__('Enable the chat button on the website', 'amin-chat-button'); ?>
228 </label>
229 </td>
230 </tr>
231 <tr>
232 <th scope="row"><?php echo esc_html__('Select messenger', 'amin-chat-button'); ?></th>
233 <td>
234 <select id="amin_chat_button_msg_select" name="amin_chat_button_msg_select">
235 <option value="WhatsApp" <?php selected($msg_select, 'WhatsApp'); ?>><?php echo esc_html__('WhatsApp', 'amin-chat-button'); ?></option>
236 <option value="Telegram" <?php selected($msg_select, 'Telegram'); ?>><?php echo esc_html__('Telegram', 'amin-chat-button'); ?></option>
237 </select>
238 </td>
239 </tr>
240 <tr>
241 <th scope="row"><?php echo esc_html__('Enable Pulsation', 'amin-chat-button'); ?></th>
242 <td>
243 <label for="amin_chat_button_plugin_pulsation">
244 <input type="checkbox" id="amin_chat_button_plugin_pulsation" name="amin_chat_button_plugin_pulsation" value="1" <?php checked($pulsation, '1'); ?>>
245 <?php echo esc_html__('Enable pulsating animation for the button', 'amin-chat-button'); ?>
246 </label>
247 </td>
248 </tr>
249 <tr>
250 <th scope="row"><?php echo esc_html__('Phone number and initial message together', 'amin-chat-button'); ?></th>
251 <td>
252 <label for="amin_chat_button_plugin_enabled_together">
253 <input type="checkbox" id="amin_chat_button_plugin_enabled_together" name="amin_chat_button_plugin_enabled_together" value="1" <?php checked($enabled_together, '1'); ?>>
254 <?php echo esc_html__('Select if you need to provide direct links to the messenger', 'amin-chat-button'); ?>
255 </label>
256 </td>
257 </tr>
258 <tbody id="amin_chat_button_plugin_fields_block" style="<?php echo $enabled_together ? 'display:none;' : ''; ?>">
259 <tr>
260 <th scope="row"><?php echo esc_html__('Phone Number. Default', 'amin-chat-button'); ?></th>
261 <td>
262 <input type="text" id="amin_chat_button_plugin_phone" name="amin_chat_button_plugin_phone" value="<?php echo esc_attr($phone); ?>">
263 <p class="cbp-description"><?php echo esc_html__('Enter the WhatsApp or Telegram phone number in international format without the "+" sign.', 'amin-chat-button'); ?></p>
264 </td>
265 </tr>
266 <tr>
267 <th scope="row"><?php echo esc_html__('First message text. Default', 'amin-chat-button'); ?></th>
268 <td>
269 <textarea id="amin_chat_button_plugin_text" name="amin_chat_button_plugin_text" rows="3" cols="40"><?php echo esc_textarea($text); ?></textarea>
270 <p class="cbp-description"><?php echo esc_html__('Enter your default language message text only for Whatsapp.', 'amin-chat-button'); ?></p>
271 </td>
272 </tr>
273 <tr>
274 <th scope="row"><?php echo esc_html__('First message text and phone number.', 'amin-chat-button'); ?><br><?php echo esc_html__('Other localization', 'amin-chat-button'); ?></th>
275 <td>
276 <input type="text" id="amin_chat_button_plugin_text_en_loc" name="amin_chat_button_plugin_text_en_loc" value="<?php echo esc_attr($text_en_loc); ?>" oninput="this.value = this.value.toLowerCase()">
277 <p class="cbp-description"><?php echo esc_html__('Localization code, for example "en"', 'amin-chat-button'); ?></p><br>
278 <textarea id="amin_chat_button_plugin_text_en" name="amin_chat_button_plugin_text_en" rows="3" cols="40"><?php echo esc_textarea($text_en); ?></textarea>
279 <p class="cbp-description"><?php echo esc_html__('Enter your message text only for Whatsapp.', 'amin-chat-button'); ?></p></br>
280 <input type="text" id="amin_chat_button_plugin_phone_en" name="amin_chat_button_plugin_phone_en" value="<?php echo esc_attr($phone_en); ?>">
281 <p class="cbp-description"><?php echo esc_html__('Substitute another phone number in international format without the "+" sign.', 'amin-chat-button'); ?></p>
282 </td>
283 </tr>
284 <tr>
285 <th scope="row"><?php echo esc_html__('First message text and phone number.', 'amin-chat-button'); ?><br><?php echo esc_html__('Other localization', 'amin-chat-button'); ?></th>
286 <td>
287 <input type="text" id="amin_chat_button_plugin_text_tr_loc" name="amin_chat_button_plugin_text_tr_loc" value="<?php echo esc_attr($text_tr_loc); ?>" oninput="this.value = this.value.toLowerCase()">
288 <p class="cbp-description"><?php echo esc_html__('Localization code, for example "tr"', 'amin-chat-button'); ?></p><br>
289 <textarea id="amin_chat_button_plugin_text_tr" name="amin_chat_button_plugin_text_tr" rows="3" cols="40"><?php echo esc_textarea($text_tr); ?></textarea>
290 <p class="cbp-description"><?php echo esc_html__('Enter your message text only for Whatsapp.', 'amin-chat-button'); ?></p></br>
291 <input type="text" id="amin_chat_button_plugin_phone_tr" name="amin_chat_button_plugin_phone_tr" value="<?php echo esc_attr($phone_tr); ?>">
292 <p class="cbp-description"><?php echo esc_html__('Substitute another phone number in international format without the "+" sign.', 'amin-chat-button'); ?></p>
293 </td>
294 </tr>
295 </tbody>
296 <tbody id="amin_chat_button_plugin_fields_together" style="<?php echo $enabled_together ? '' : 'display:none;'; ?>">
297 <tr>
298 <th scope="row"><?php echo esc_html__('Link. Default', 'amin-chat-button'); ?></th>
299 <td>
300 <input type="text" id="amin_chat_button_plugin_phone_link" name="amin_chat_button_plugin_phone_link" value="<?php echo esc_attr($phone_link); ?>">
301 <p class="cbp-description"><?php echo esc_html__('Paste the link, you can include the initial message as well.', 'amin-chat-button'); ?></p>
302 </td>
303 </tr>
304 <tr>
305 <th scope="row"><?php echo esc_html__('Link. Other localization', 'amin-chat-button'); ?></th>
306 <td>
307 <input type="text" id="amin_chat_button_plugin_phone_link_en" name="amin_chat_button_plugin_phone_link_en" value="<?php echo esc_attr($phone_link_en); ?>">
308 <p class="cbp-description"><?php echo esc_html__('Paste the link, you can include the initial message as well.', 'amin-chat-button'); ?></p>
309 <input type="text" id="amin_chat_button_plugin_text_en_loc" name="amin_chat_button_plugin_text_en_loc" value="<?php echo esc_attr($text_en_loc); ?>" oninput="this.value = this.value.toLowerCase()">
310 <p class="cbp-description"><?php echo esc_html__('Localization code, for example "en"', 'amin-chat-button'); ?></p>
311 </td>
312 </tr>
313 <tr>
314 <th scope="row"><?php echo esc_html__('Link. Other localization', 'amin-chat-button'); ?></th>
315 <td>
316 <input type="text" id="amin_chat_button_plugin_phone_link_tr" name="amin_chat_button_plugin_phone_link_tr" value="<?php echo esc_attr($phone_link_tr); ?>">
317 <p class="cbp-description"><?php echo esc_html__('Paste the link, you can include the initial message as well.', 'amin-chat-button'); ?></p>
318 <input type="text" id="amin_chat_button_plugin_text_tr_loc" name="amin_chat_button_plugin_text_tr_loc" value="<?php echo esc_attr($text_tr_loc); ?>" oninput="this.value = this.value.toLowerCase()">
319 <p class="cbp-description"><?php echo esc_html__('Localization code, for example "tr"', 'amin-chat-button'); ?></p>
320 </td>
321 </tr>
322 </tbody>
323 <tr>
324 <th scope="row"><?php echo esc_html__('Button Position', 'amin-chat-button'); ?></th>
325 <td>
326 <select id="amin_chat_button_plugin_position" name="amin_chat_button_plugin_position">
327 <option value="cbp-left-bottom" <?php selected($position, 'cbp-left-bottom'); ?>><?php echo esc_html__('Left Bottom', 'amin-chat-button'); ?></option>
328 <option value="cbp-right-bottom" <?php selected($position, 'cbp-right-bottom'); ?>><?php echo esc_html__('Right Bottom', 'amin-chat-button'); ?></option>
329 </select>
330 </td>
331 </tr>
332 <tr>
333 <th scope="row"><?php echo esc_html__('YandexMetrika Account ID', 'amin-chat-button'); ?></th>
334 <td>
335 <input type="text" id="amin_chat_button_plugin_yametrik_account" name="amin_chat_button_plugin_yametrik_account" value="<?php echo esc_attr($yametrik_account); ?>">
336 <p class="cbp-description"><?php echo esc_html__('Enter the ID account of the Yandex.', 'amin-chat-button'); ?></p>
337 </td>
338 </tr>
339 <tr>
340 <th scope="row"><?php echo esc_html__('YandexMetrika Target ID', 'amin-chat-button'); ?></th>
341 <td>
342 <input type="text" id="amin_chat_button_plugin_yametrik_id" name="amin_chat_button_plugin_yametrik_id" value="<?php echo esc_attr($yametrik_id); ?>">
343 <p class="cbp-description"><?php echo esc_html__('Enter the target ID to insert into the button.', 'amin-chat-button'); ?></p>
344 </td>
345 </tr>
346 <tr>
347 <th scope="row"><?php echo esc_html__('Tag Google', 'amin-chat-button'); ?></th>
348 <td>
349 <select id="amin_chat_button_tag_select" name="amin_chat_button_tag_select">
350 <option value="config" <?php selected($tag_select, 'config'); ?>><?php echo esc_html__('config', 'amin-chat-button'); ?></option>
351 <option value="event" <?php selected($tag_select, 'event'); ?>><?php echo esc_html__('event', 'amin-chat-button'); ?></option>
352 </select>
353 </td>
354 </tr>
355 <tr>
356 <th scope="row"><?php echo esc_html__('GTM Target ID', 'amin-chat-button'); ?></th>
357 <td>
358 <input type="text" id="amin_chat_button_plugin_target_id" name="amin_chat_button_plugin_target_id" value="<?php echo esc_attr($target_id); ?>">
359 <p class="cbp-description"><?php echo esc_html__('Enter the target ID to insert into the button.', 'amin-chat-button'); ?></p>
360 </td>
361 </tr>
362 <tr>
363 <th scope="row"><?php echo esc_html__('Function gtag_report_conversion', 'amin-chat-button'); ?></th>
364 <td>
365 <textarea id="amin_chat_button_plugin_gtag_report" name="amin_chat_button_plugin_gtag_report" rows="6" cols="40"><?php echo esc_textarea(get_option('amin_chat_button_plugin_gtag_report', '')); ?></textarea>
366 <p class="cbp-description"><?php echo esc_html__('Add a function to call gtag_report_conversion when your Target ID is clicked. The function is automatically wrapped in a <script></script> tag', 'amin-chat-button'); ?></p>
367 </td>
368 </tr>
369 <tr>
370 <th scope="row"><?php echo esc_html__('Prohibited URLs', 'amin-chat-button'); ?></th>
371 <td>
372 <textarea id="amin_chat_button_plugin_prohibited_urls" name="amin_chat_button_plugin_prohibited_urls" rows="6" cols="60"><?php echo esc_textarea(get_option('amin_chat_button_plugin_prohibited_urls', '')); ?></textarea>
373 <p class="cbp-description"><?php echo esc_html__('List the URLs of the pages where you do not want the chat button to be displayed (separated by commas).', 'amin-chat-button'); ?></p>
374 </td>
375 </tr>
376 </table>
377
378 <p class="cbp-submit">
379 <input type="submit" name="amin_chat_button_plugin_submit" class="cbp-button-primary" value="<?php echo esc_attr__('Save Settings', 'amin-chat-button'); ?>">
380 </p>
381 </form>
382 </div>
383 <?php
384 }
385
386 /**
387 * Escape a value for use inside a single quoted JavaScript string literal.
388 *
389 * The HTML layer is handled by esc_attr() on the finished onclick attribute,
390 * so this deliberately does not encode HTML entities the way esc_js() does:
391 * doing both would turn "&" into "&amp;" inside the JavaScript string.
392 *
393 * @param string $value Raw option value.
394 * @return string Value safe to place between single quotes in JavaScript.
395 */
396 function amin_chat_button_js_string($value) {
397 return addslashes(str_replace(array("\r", "\n"), '', (string) $value));
398 }
399
400 function amin_chat_button_plugin_add_button() {
401 if (get_option('amin_chat_button_plugin_enabled', '0') !== '1') return;
402
403 $options = array(
404 'enabled_together' => get_option('amin_chat_button_plugin_enabled_together', '0'),
405 'msg_select' => get_option('amin_chat_button_msg_select', 'WhatsApp'),
406 'position' => get_option('amin_chat_button_plugin_position', 'right-bottom'),
407 'target_id' => get_option('amin_chat_button_plugin_target_id', ''),
408 'gtag_report' => get_option('amin_chat_button_plugin_gtag_report', ''),
409 'tag_select' => get_option('amin_chat_button_tag_select', 'event'),
410 'yametrik_id' => get_option('amin_chat_button_plugin_yametrik_id', ''),
411 'yametrik_account' => get_option('amin_chat_button_plugin_yametrik_account', ''),
412 'prohibited_urls' => get_option('amin_chat_button_plugin_prohibited_urls', ''),
413 'pulsation' => get_option('amin_chat_button_plugin_pulsation', '1'),
414 'phone' => get_option('amin_chat_button_plugin_phone', ''),
415 'phone_en' => get_option('amin_chat_button_plugin_phone_en', ''),
416 'phone_tr' => get_option('amin_chat_button_plugin_phone_tr', ''),
417 'text' => get_option('amin_chat_button_plugin_text', ''),
418 'text_en' => get_option('amin_chat_button_plugin_text_en', ''),
419 'text_tr' => get_option('amin_chat_button_plugin_text_tr', ''),
420 'link' => get_option('amin_chat_button_plugin_phone_link', ''),
421 'link_en' => get_option('amin_chat_button_plugin_phone_link_en', ''),
422 'link_tr' => get_option('amin_chat_button_plugin_phone_link_tr', ''),
423 );
424
425 // Current URL, built by core instead of raw $_SERVER input
426 $current_url = home_url(add_query_arg(array(), null));
427
428 // Do not display the button on prohibited URLs
429 if ($current_url && !empty($options['prohibited_urls'])) {
430 foreach (array_map('trim', explode(',', $options['prohibited_urls'])) as $prohibited_url) {
431 if (stripos($current_url, $prohibited_url) !== false) return;
432 }
433 }
434
435 // Localization
436 $locale = (preg_match('/\/([a-z]{2})(\/|$)/i', $current_url, $m)) ? strtolower($m[1]) : '';
437 $phone = $options['phone'];
438 $text = $options['text'];
439 $link = $options['link'];
440
441 if ($locale === 'en') {
442 if (!empty($options['phone_en'])) $phone = $options['phone_en'];
443 if (!empty($options['text_en'])) $text = $options['text_en'];
444 if (!empty($options['link_en'])) $link = $options['link_en'];
445 } elseif ($locale === 'tr') {
446 if (!empty($options['phone_tr'])) $phone = $options['phone_tr'];
447 if (!empty($options['text_tr'])) $text = $options['text_tr'];
448 if (!empty($options['link_tr'])) $link = $options['link_tr'];
449 }
450
451 if (empty($phone)) return;
452
453 // Build the link automatically unless it was entered manually
454 if ($options['enabled_together'] !== '1') {
455 $link = ($options['msg_select'] === 'Telegram')
456 ? 'https://t.me/+' . rawurlencode($phone) . '?text=' . rawurlencode($text)
457 : 'https://api.whatsapp.com/send?phone=' . rawurlencode($phone) . '&text=' . rawurlencode($text);
458 }
459
460 // Button attributes
461 $button_id = ($options['msg_select'] === 'Telegram') ? 'cbp-tg-button' : 'cbp-whatsapp-button';
462 $button_class = ($options['msg_select'] === 'Telegram') ? 'cbp-tg-button' : 'cbp-whatsapp-button';
463 $button_text = ($options['msg_select'] === 'Telegram') ? 'Telegram' : 'WhatsApp';
464 $icon_src = ($options['msg_select'] === 'Telegram')
465 ? "data:image/png;base64,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"
466 : "data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhYiIgZGF0YS1pY29uPSJ3aGF0c2FwcCIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLXdoYXRzYXBwIGZhLXctMTQiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDQ4IDUxMiI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMzgwLjkgOTcuMUMzMzkgNTUuMSAyODMuMiAzMiAyMjMuOSAzMmMtMTIyLjQgMC0yMjIgOTkuNi0yMjIgMjIyIDAgMzkuMSAxMC4yIDc3LjMgMjkuNiAxMTFMMCA0ODBsMTE3LjctMzAuOWMzMi40IDE3LjcgNjguOSAyNyAxMDYuMSAyN2guMWMxMjIuMyAwIDIyNC4xLTk5LjYgMjI0LjEtMjIyIDAtNTkuMy0yNS4yLTExNS02Ny4xLTE1N3ptLTE1NyAzNDEuNmMtMzMuMiAwLTY1LjctOC45LTk0LTI1LjdsLTYuNy00LTY5LjggMTguM0w3MiAzNTkuMmwtNC40LTdjLTE4LjUtMjkuNC0yOC4yLTYzLjMtMjguMi05OC4yIDAtMTAxLjcgODIuOC0xODQuNSAxODQuNi0xODQuNSA0OS4zIDAgOTUuNiAxOS4yIDEzMC40IDU0LjEgMzQuOCAzNC45IDU2LjIgODEuMiA1Ni4xIDEzMC41IDAgMTAxLjgtODQuOSAxODQuNi0xODYuNiAxODQuNnptMTAxLjItMTM4LjJjLTUuNS0yLjgtMzIuOC0xNi4yLTM3LjktMTgtNS4xLTEuOS04LjgtMi44LTEyLjUgMi44LTMuNyA1LjYtMTQuMyAxOC0xNy42IDIxLjgtMy4yIDMuNy02LjUgNC4yLTEyIDEuNC0zMi42LTE2LjMtNTQtMjkuMS03NS41LTY2LTUuNy05LjggNS43LTkuMSAxNi4zLTMwLjMgMS44LTMuNy45LTYuOS0uNS05LjctMS40LTIuOC0xMi41LTMwLjEtMTcuMS00MS4yLTQuNS0xMC44LTkuMS05LjMtMTIuNS05LjUtMy4yLS4yLTYuOS0uMi0xMC42LS4yLTMuNyAwLTkuNyAxLjQtMTQuOCA2LjktNS4xIDUuNi0xOS40IDE5LTE5LjQgNDYuMyAwIDI3LjMgMTkuOSA1My43IDIyLjYgNTcuNCAyLjggMy43IDM5LjEgNTkuNyA5NC44IDgzLjggMzUuMiAxNS4yIDQ5IDE2LjUgNjYuNiAxMy45IDEwLjctMS42IDMyLjgtMTMuNCAzNy40LTI2LjQgNC42LTEzIDQuNi0yNC4xIDMuMi0yNi40LTEuMy0yLjUtNS0zLjktMTAuNS02LjZ6Ij48L3BhdGg+PC9zdmc+";
467
468 $allowed_tags = [
469 'img' => [
470 'src' => [],
471 'style' => [],
472 ],
473 'a' => [
474 'href' => [],
475 'title' => [],
476 ],
477 'div' => [
478 'type' => [],
479 'style' => [],
480 'class' => [],
481 ],
482 'br' => [],
483 'em' => [],
484 'strong' => [],
485 'span' => [],
486 ];
487
488 $allowed_protocols = [
489 'http',
490 'https',
491 'data',
492 ];
493
494 // Button classes. The Telegram button animates through its own base class,
495 // the WhatsApp button only through "puls"; "no-pulsation" switches both off.
496 $classes = [$button_class, $options['position']];
497 if ($options['pulsation'] === '1') {
498 if ($options['msg_select'] === 'WhatsApp') {
499 $classes[] = 'puls';
500 }
501 } else {
502 $classes[] = 'no-pulsation';
503 }
504
505 // Analytics calls go through the safe* helpers so a missing or blocked
506 // analytics library cannot break the click handler.
507 $onclick = sprintf(
508 "safeYm('%s','reachGoal','%s'), safeGtag('%s','%s')",
509 amin_chat_button_js_string($options['yametrik_account']),
510 amin_chat_button_js_string($options['yametrik_id']),
511 amin_chat_button_js_string($options['tag_select']),
512 amin_chat_button_js_string($options['target_id'])
513 );
514 if (!empty($options['gtag_report'])) {
515 $onclick .= ', safeGtagReport()';
516 }
517
518 // Button HTML
519 echo '<a href="' . esc_url($link) . '"
520 target="_blank"
521 rel="noopener noreferrer nofollow"
522 onclick="' . esc_attr($onclick) . '"
523 id="' . esc_attr($button_id) . '"
524 class="' . esc_attr(implode(' ', $classes)) . '">
525 <div type="button" style="background-color: #ffffff00;padding: 0;">
526 <div class="cbp-text-button">
527 ' . wp_kses('<img src="'. esc_attr($icon_src) .'">', $allowed_tags, $allowed_protocols) . '
528 <span>'. wp_kses($button_text, "strip") .'</span>
529 </div>
530 </div>
531 </a>';
532 }
533
534
535
536 // Enqueue styles and scripts
537 function amin_chat_button_plugin_enqueue_scripts() {
538 // Front-end styles
539 wp_enqueue_style(
540 'amin-chat-button-style',
541 plugin_dir_url(__FILE__) . 'style.css',
542 [],
543 AMIN_CHAT_BUTTON_VERSION
544 );
545
546 // Carrier handle for the inline analytics helpers (no source file of its own)
547 wp_register_script(
548 'amin-chat-button-safeym-script',
549 false,
550 [],
551 AMIN_CHAT_BUTTON_VERSION,
552 true // load in the footer
553 );
554 wp_enqueue_script('amin-chat-button-safeym-script');
555
556 wp_add_inline_script(
557 'amin-chat-button-safeym-script',
558 "function safeYm(metrikaId, goalName, addit) {
559 if (typeof ym === 'function' && Boolean(metrikaId)) {
560 ym(metrikaId, goalName, addit);
561 } else {
562 console.error('Yandex.Metrika haven\\'t loaded or blocked');
563 }
564 return false;
565 }
566 function safeGtag(event, targetId) {
567 if (typeof gtag === 'function' && Boolean(targetId)) {
568 gtag.apply(null, arguments);
569 } else {
570 console.error('Gtag haven\\'t loaded or blocked');
571 }
572 return false;
573 }
574 function safeGtagReport() {
575 if (typeof gtag_report_conversion === 'function') {
576 gtag_report_conversion();
577 } else {
578 console.error('gtag_report_conversion is not defined');
579 }
580 return false;
581 }",
582 'before'
583 );
584 }
585 add_action('wp_enqueue_scripts', 'amin_chat_button_plugin_enqueue_scripts');
586
587 // Admin assets, loaded on the plugin settings screen only
588 function amin_chat_button_enqueue_custom_admin_style($hook_suffix) {
589 if ('toplevel_page_amin-chat-button-settings' !== $hook_suffix) {
590 return;
591 }
592
593 wp_enqueue_style(
594 'amin-chat-button-admin',
595 plugin_dir_url(__FILE__) . 'admin.css',
596 [],
597 AMIN_CHAT_BUTTON_VERSION
598 );
599
600 wp_register_script(
601 'amin-chat-button-admin',
602 false,
603 [],
604 AMIN_CHAT_BUTTON_VERSION,
605 true
606 );
607 wp_enqueue_script('amin-chat-button-admin');
608
609 // Toggle between the separate phone/message fields and the direct-link fields
610 wp_add_inline_script(
611 'amin-chat-button-admin',
612 "document.addEventListener('DOMContentLoaded', function () {
613 var checkbox = document.getElementById('amin_chat_button_plugin_enabled_together');
614 var separateFields = document.getElementById('amin_chat_button_plugin_fields_block');
615 var togetherFields = document.getElementById('amin_chat_button_plugin_fields_together');
616
617 if (!checkbox || !separateFields || !togetherFields) {
618 return;
619 }
620
621 function toggleFields() {
622 separateFields.style.display = checkbox.checked ? 'none' : '';
623 togetherFields.style.display = checkbox.checked ? '' : 'none';
624 }
625
626 checkbox.addEventListener('change', toggleFields);
627 toggleFields(); // apply immediately if the checkbox is already on
628 });"
629 );
630 }
631 add_action('admin_enqueue_scripts', 'amin_chat_button_enqueue_custom_admin_style');
632
633 // Add settings link on plugin page
634 function amin_chat_button_plugin_settings_link($links) {
635 $settings_link = '<a href="' . esc_url(admin_url('admin.php?page=amin-chat-button-settings')) . '">' . esc_html__('Settings', 'amin-chat-button') . '</a>';
636 array_unshift($links, $settings_link);
637 return $links;
638 }
639 add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'amin_chat_button_plugin_settings_link');
640
641
642 // Display the WhatsApp button on the website
643 add_action('wp_footer', 'amin_chat_button_plugin_add_button');
644
645 function amin_chat_button_output_script_in_header() {
646 $script_code = get_option('amin_chat_button_plugin_gtag_report', '');
647 if (!empty($script_code)) {
648 echo '<script type="text/javascript">' . wp_kses($script_code, array()) . '</script>';
649 }
650 }
651
652 add_action('wp_head', 'amin_chat_button_output_script_in_header');