PluginProbe
Image Hotspot – Map Image Annotation / 3.4
Image Hotspot – Map Image Annotation v3.4
3.8 3.7 3.6 trunk 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 All 30 releases
← All changes | functions.php +266 -665 trunk3.4 View file →
@@ -14,26 +14,25 @@
14 14 ) {
15 15 return;
16 16 }
17 17 wp_enqueue_style('ima-google-font', plugins_url('assets/css/google-font.css', __FILE__));
18 - wp_enqueue_style('imh-6310-style', plugins_url('assets/css/style-pro.css', __FILE__));
18 + wp_enqueue_style('imh-6310-style', plugins_url('assets/css/style.css', __FILE__));
19 19 wp_enqueue_style('imh-6310-color-style', plugins_url('assets/css/jquery.minicolors.css', __FILE__));
20 20 wp_enqueue_style('imh-6310-font-select-style', plugins_url('assets/css/fontselect.css', __FILE__));
21 - wp_enqueue_style('imh-font-awesome-all', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css');
21 + wp_enqueue_style('imh-font-awesome-new', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css');
22 + wp_enqueue_style('imh-font-awesome-old', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/v4-shims.min.css');
22 23 wp_enqueue_style('imh-6310-codemirror-style', plugins_url('assets/css/codemirror.min.css', __FILE__));
23 24 wp_enqueue_style('imh-6310-color-style', plugins_url('assets/css/jquery.minicolors.min.css', __FILE__));
24 25 wp_enqueue_style('imh-6310-jquery-ui-css', plugins_url('assets/css/jquery-ui.min.css', __FILE__));
25 - wp_enqueue_style('imh-6310-select2', plugins_url('assets/css/select2.min.css', __FILE__));
26 26
27 27 wp_enqueue_script('imh-6310-font-select-js', plugins_url('assets/js/fontselect.js', __FILE__), array('jquery'));
28 28 wp_enqueue_script('imh-6310-jquery-ui-js', plugins_url('assets/js/jquery-ui.min.js', __FILE__), array('jquery'));
29 29 wp_enqueue_script('imh-6310-color-js', plugins_url('assets/js/jquery.minicolors.min.js', __FILE__), array('jquery'));
30 30 wp_enqueue_script('imh-6310-codemirror-js', plugins_url('assets/js/codemirror.min.js', __FILE__), array('jquery'));
31 - wp_enqueue_script('imh-6310-select2', plugins_url('assets/js/select2.min.js', __FILE__), array('jquery'));
32 - wp_enqueue_script('imh-6310-common', plugins_url('assets/js/imh-6310-common-pro.js', __FILE__), array('jquery'));
33 - wp_enqueue_script('imh-6310-json-js', plugins_url('assets/js/json-data-pro.js', __FILE__), array('jquery'));
34 - wp_enqueue_script('imh-6310-admin-js', plugins_url('assets/js/imh-6310-admin-script-pro.js', __FILE__), array('jquery'));
35 - wp_enqueue_script('imh-6310-modal-js', plugins_url('assets/js/imh-6310-admin-modal-pro.js', __FILE__), array('jquery'));
31 + wp_enqueue_script('imh-6310-common', plugins_url('assets/js/imh-6310-common.js', __FILE__), array('jquery'));
32 + wp_enqueue_script('imh-6310-json-js', plugins_url('assets/js/json-data.js', __FILE__), array('jquery'));
33 + wp_enqueue_script('imh-6310-admin-js', plugins_url('assets/js/imh-6310-admin-script.js', __FILE__), array('jquery'));
34 + wp_enqueue_script('imh-6310-modal-js', plugins_url('assets/js/imh-6310-admin-modal.js', __FILE__), array('jquery'));
36 35 }
37 36
38 37 function imh_6310_replace($data) {
39 38 if($data == '') return '';
@@ -40,11 +39,8 @@
40 39 else if(strlen($data) == 0) return '';
41 40 while(strpos($data, "\\") !== false) {
42 41 $data = str_replace("\\", "", $data);
43 42 }
44 - while(strpos($data, "@@##!!@@") !== false) {
45 - $data = str_replace("@@##!!@@", "'", $data);
46 - }
47 43 return $data;
48 44 }
49 45
50 46 function imh_6310_get_user_roles(){
@@ -89,20 +85,8 @@
89 85 </div>
90 86 <?php
91 87 }
92 88
93 -function imh_6310_check_field_exists(){
94 - global $wpdb;
95 - $style_table = $wpdb->prefix . 'imh_6310_style';
96 - $charset_collate = $wpdb->get_charset_collate();
97 -
98 - $wpdb->query("SHOW COLUMNS FROM {$style_table} LIKE 'display_type'");
99 - if(!($wpdb->num_rows)){
100 - $wpdb->query("alter table {$style_table} add (display_type int DEFAULT 0)");
101 - }
102 -
103 -}
104 -
105 89 function imh_6310_image_map_install()
106 90 {
107 91 global $wpdb;
108 92
@@ -111,9 +95,8 @@
111 95
112 96 $sql = "CREATE TABLE IF NOT EXISTS $style_table (
113 97 id int UNSIGNED NOT NULL AUTO_INCREMENT,
114 98 name varchar(100) DEFAULT NULL,
115 - display_type int DEFAULT 0,
116 99 css LONGTEXT DEFAULT NULL,
117 100 PRIMARY KEY (id)
118 101 ) $charset_collate;";
119 102
@@ -129,15 +112,8 @@
129 112 }
130 113
131 114 function imh_6310_version_status() {
132 115 global $wpdb;
133 - $imh_6310_textarea_updated = imh_6310_get_option('imh_6310_textarea_updated');
134 - if(!$imh_6310_textarea_updated){
135 - $wpdb->query("DELETE FROM {$wpdb->prefix}options where option_name='imh_6310_textarea_updated'");
136 - $wpdb->query("INSERT INTO {$wpdb->prefix}options(option_name, option_value) VALUES ('imh_6310_textarea_updated', '1')");
137 - $wpdb->query("ALTER TABLE {$wpdb->prefix}imh_6310_style MODIFY css LONGTEXT");
138 - }
139 -
140 116 $db_version = imh_6310_get_option('imh_6310_version_info');
141 117 if(!$db_version){
142 118 $wpdb->query("DELETE FROM {$wpdb->prefix}options where option_name='imh_6310_version_info'");
143 119 $wpdb->query("INSERT INTO {$wpdb->prefix}options(option_name, option_value) VALUES ('imh_6310_version_info', '".imh_6310_PLUGIN_CURRENT_VERSION."')");
@@ -152,96 +128,156 @@
152 128 }
153 129 }
154 130 }
155 131
156 - function imh_6310_check_license($key, $autoUpdate = false) {
132 + function imh_6310_check_license($key, $autoUpdate = false)
133 + {
157 134 global $wpdb;
158 -
159 - // Use WordPress options API for retrieving/storing options
160 - $db_key = sanitize_text_field(get_option('imh_6310_license_key'));
161 -
162 - if (!$db_key) {
163 - update_option('imh_6310_license_key', sanitize_text_field($key));
164 - } elseif ($db_key !== $key) {
165 - update_option('imh_6310_license_key', sanitize_text_field($key));
135 +
136 + $db_key = imh_6310_get_option('imh_6310_license_key');
137 + if(!$db_key){
138 + $wpdb->query("DELETE FROM {$wpdb->prefix}options where option_name='imh_6310_license_key'");
139 + $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->prefix}options SET option_name = %s, option_value = %s", 'imh_6310_license_key', "{$key}"));
140 + if(!$wpdb->insert_id) {
141 + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}options SET option_value = %s where option_name = %s", "{$key}", 'imh_6310_license_key'));
142 + }
143 + }else if($db_key != $key){
144 + $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}options SET option_value = %s where option_name = %s", "{$key}", 'imh_6310_license_key'));
166 145 }
167 -
168 - // Ensure ZipArchive is available
169 - if (!class_exists('ZipArchive')) {
170 - echo "<p style='font-size: 16px; color: red;'><b>Activation Error: </b> ZipArchive extension is not activated in your cPanel. Please check the video on how to activate it.</p>";
171 - echo '<iframe width="560" height="315" src="https://www.youtube.com/watch?v=TGx4-it1ons" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <br /><br />';
172 - return;
146 +
147 + $imh_6310_selected_server = imh_6310_get_option('imh_6310_selected_server');
148 + $url = $imh_6310_selected_server == 2 || $imh_6310_selected_server == '2' ? "http://demo.tcsesoft2.com/" : "http://demo.tcsesoft.com/";
149 + if(!class_exists('ZipArchive')){
150 + $api_params = array(
151 + 'edd_action' => 'activate_license',
152 + 'license' => $key,
153 + 'item_name' => urlencode('Image map hotspot'),
154 + 'url' => home_url(),
155 + 'type' => 'imh'
156 + );
157 +
158 + $response = wp_remote_post($url, array("body" => $api_params));
159 + $license_data = json_decode(wp_remote_retrieve_body($response));
160 +
161 + if (is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response)) {
162 + if (is_wp_error($response)) {
163 + $message = $response->get_error_message();
164 + } else {
165 + $message = __('An error occurred, please try again.');
166 + }
167 + } else {
168 + if (false === $license_data->success) {
169 + switch ($license_data->error) {
170 + case 'invalid_key':
171 + $message = __('<p class="imh-6310-error-message">Your have enter invalid license key.</p>');
172 + break;
173 + case 'site_inactive':
174 + $message = __('<p class="imh-6310-error-message">Your license is not active for this URL.</p>');
175 + break;
176 + default:
177 + $message = __('<p class="imh-6310-error-message">An error occurred, please try again.</p>');
178 + break;
179 + }
180 + return;
181 + }
182 + }
183 +
184 + if (!empty($message)) {
185 + echo $message;
186 + return;
187 + }
188 +
189 + if (!function_exists('download_url')) {
190 + require_once ABSPATH . 'wp-admin/includes/file.php';
191 + require_once(ABSPATH . 'wp-includes/pluggable.php');
192 + }
193 +
194 + $file_url = $license_data->download_url;
195 + $tmp_file = download_url($file_url);
196 + $filepath = ABSPATH . 'wp-content/plugins';
197 + WP_Filesystem();
198 + $unzipfile = unzip_file($tmp_file, $filepath);
199 +
200 + if (is_wp_error($unzipfile)) {
201 + echo '<p class="imh-6310-error-message">There was an error unzipping the file.</p>';
202 + return;
203 + } else {
204 +
205 + if(!$autoUpdate){
206 + echo "<p class='imh-6310-success-message'>Congratulations! Your license activated successfully.</p>";
207 + wp_remote_post($url, array("body" => ['file_name' => $license_data->file_name]));
208 + return;
209 + }
210 + }
211 +
212 + echo "<p style='font-size: 16px; color: red;'><b>Activation Error: </b> ZipArchive extension is not activated in your cPanel. Please check the video on how to activate it.</p>";
213 + echo '<iframe width="560" height="315" src="https://www.youtube.com/embed/XQMLA_F_CYs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <br /><br />';
214 + return;
173 215 }
174 -
175 - // Set up API parameters securely
216 +
176 217 $api_params = array(
177 - 'edd_action' => 'activate_license',
178 - 'license' => sanitize_text_field($key),
179 - 'item_name' => urlencode('Image map hotspot'),
180 - 'url' => esc_url(home_url()),
181 - 'type' => 'imh'
218 + 'edd_action' => 'activate_license',
219 + 'license' => $key,
220 + 'item_name' => urlencode('Image map hotspot'),
221 + 'url' => home_url(),
222 + 'type' => 'imh'
182 223 );
183 -
184 - $url = "https://demo.tcsesoft.com/";
224 +
185 225 $response = wp_remote_post($url, array("body" => $api_params));
186 -
187 - if (is_wp_error($response)) {
188 - echo "<p class='imh-6310-error-message'>" . esc_html($response->get_error_message()) . "</p>";
189 - return;
226 + $license_data = json_decode(wp_remote_retrieve_body($response));
227 +
228 + if (is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response)) {
229 + if (is_wp_error($response)) {
230 + $message = $response->get_error_message();
231 + } else {
232 + $message = __('An error occurred, please try again.');
233 + }
234 + } else {
235 + if (false === $license_data->success) {
236 + switch ($license_data->error) {
237 + case 'invalid_key':
238 + $message = __('<p class="imh-6310-error-message">Your have enter invalid license key.</p>');
239 + break;
240 + case 'site_inactive':
241 + $message = __('<p class="imh-6310-error-message">Your license is not active for this URL.</p>');
242 + break;
243 + default:
244 + $message = __('<p class="imh-6310-error-message">An error occurred, please try again.</p>');
245 + break;
246 + }
247 + }
190 248 }
191 -
192 - $license_data = json_decode(wp_remote_retrieve_body($response));
193 - if (!isset($license_data->success) || !$license_data->success) {
194 - $message = '<p class="imh-6310-error-message">An error occurred, please try again.</p>';
195 - if (isset($license_data->error)) {
196 - switch ($license_data->error) {
197 - case 'invalid_key':
198 - $message = '<p class="imh-6310-error-message">You have entered an invalid license key.</p>';
199 - break;
200 - case 'site_inactive':
201 - $message = '<p class="imh-6310-error-message">Your license is not active for this URL.</p>';
202 - break;
203 - }
204 - }
205 - echo $message;
206 - return;
249 +
250 + if (!empty($message)) {
251 + echo $message;
252 + return;
207 253 }
208 -
209 - // Ensure necessary functions are available for download/unzipping
254 +
210 255 if (!function_exists('download_url')) {
211 - require_once ABSPATH . 'wp-admin/includes/file.php';
256 + require_once ABSPATH . 'wp-admin/includes/file.php';
257 + require_once(ABSPATH . 'wp-includes/pluggable.php');
212 258 }
213 - if (!function_exists('wp_handle_sideload')) {
214 - require_once ABSPATH . 'wp-admin/includes/file.php';
215 - }
216 -
217 - // Download and unzip the file securely
218 - $file_url = esc_url($license_data->download_url);
259 + $file_url = $license_data->download_url;
219 260 $tmp_file = download_url($file_url);
220 -
221 - if (is_wp_error($tmp_file)) {
222 - echo '<p class="imh-6310-error-message">Error downloading the file.</p>';
223 - return;
224 - }
225 -
226 - $plugin_dir = WP_CONTENT_DIR . '/plugins/';
227 - $file_name = sanitize_file_name($license_data->file_name);
228 - $file_path = $plugin_dir . $file_name;
229 -
261 + $filepath = WP_CONTENT_DIR . '/plugins';
262 + WP_Filesystem();
263 + copy($tmp_file, $filepath . "/{$license_data->file_name}");
264 + @unlink($tmp_file);
265 +
230 266 $zip = new ZipArchive;
231 - if ($zip->open($tmp_file) === true) {
232 - $zip->extractTo($plugin_dir);
233 - $zip->close();
234 - @unlink($tmp_file);
235 -
236 - if (!$autoUpdate) {
237 - echo "<p class='imh-6310-success-message'>Congratulations! Your license activated successfully.</p>";
238 - }
267 + $res = $zip->open($filepath . "/{$license_data->file_name}");
268 + if (!$res) {
269 + echo '<p class="imh-6310-error-message">There was an error unzipping the file.</p>';
239 270 } else {
240 - echo '<p class="imh-6310-error-message">There was an error unzipping the file.</p>';
271 + $zip->extractTo($filepath . "/");
272 + $zip->close();
273 +
274 + if(!$autoUpdate){
275 + echo "<p class='imh-6310-success-message'>Congratulations! Your license activated successfully.</p>";
276 + }
241 277 }
242 - }
243 -
278 + wp_remote_post($url, array("body" => ['file_name' => $license_data->file_name]));
279 + }
244 280
245 281 function imh_6310_fa_icon_list($startTag, $endTag) {
246 282 $iconArray = array (
247 283 'fab fa-500px' => ['500px', '\f26e'],
@@ -326,8 +362,9 @@
326 362 'fas fa-baby-carriage' => ['buggy, carrier, infant, push, stroller, transportation, walk, wheels', '\f77d'],
327 363 'fas fa-backspace' => ['command, delete, erase, keyboard, undo', '\f55a'],
328 364 'fas fa-backward' => ['previous, rewind', '\f04a'],
329 365 'fas fa-bacon' => ['blt, breakfast, ham, lard, meat, pancetta, pork, rasher', '\f7e5'],
366 + 'fas fa-bahai' => ["bahai, bahá'í, star", '\f666'],
330 367 'fas fa-balance-scale' => ['balanced, justice, legal, measure, weight', '\f24e'],
331 368 'fas fa-balance-scale-left' => ['justice, legal, measure, unbalanced, weight', '\f515'],
332 369 'fas fa-balance-scale-right' => ['justice, legal, measure, unbalanced, weight', '\f516'],
333 370 'fas fa-ban' => ['abort, ban, block, cancel, delete, hide, prohibit, remove, stop, trash', '\f05e'],
@@ -388,8 +425,9 @@
388 425 'fas fa-border-style' => ['Border Style', '\f853'],
389 426 'fas fa-bowling-ball' => ['alley, candlepin, gutter, lane, strike, tenpin', '\f436'],
390 427 'fas fa-box' => ['archive, container, package, storage', '\f466'],
391 428 'fas fa-box-open' => ['archive, container, package, storage, unpack', '\f49e'],
429 + 'fas fa-box-tissue' => ['cough, covid-19, kleenex, mucus, nose, sneeze, snot', '\f95b'],
392 430 'fas fa-boxes' => ['archives, inventory, storage, warehouse', '\f468'],
393 431 'fas fa-braille' => ['alphabet, blind, dots, raised, vision', '\f2a1'],
394 432 'fas fa-brain' => ['cerebellum, gray matter, intellect, medulla oblongata, mind, noodle, wit', '\f5dc'],
395 433 'fas fa-bread-slice' => ['bake, bakery, baking, dough, flour, gluten, grain, sandwich, sourdough, toast, wheat, yeast', '\f7ec'],
@@ -408,8 +446,9 @@
408 446 'fab fa-buromobelexperte' => ['Büromöbel-Experte GmbH & Co. KG.', '\f37f'],
409 447 'fas fa-bus' => ['public transportation, transportation, travel, vehicle', '\f207'],
410 448 'fas fa-bus-alt' => ['mta, public transportation, transportation, travel, vehicle', '\f55e'],
411 449 'fas fa-business-time' => ['alarm, briefcase, business socks, clock, flight of the conchords, reminder, wednesday', '\f64a'],
450 + 'fab fa-buy-n-large' => ['Buy n Large', '\f8a6'],
412 451 'fab fa-buysellads' => ['BuySellAds', '\f20d'],
413 452 'fas fa-calculator' => ['abacus, addition, arithmetic, counting, math, multiplication, subtraction', '\f1ec'],
414 453 'fas fa-calendar' => ['calendar-o, date, event, schedule, time, when', '\f133'],
415 454 'fas fa-calendar-alt' => ['calendar, date, event, schedule, time, when', '\f073'],
@@ -430,8 +469,9 @@
430 469 'fas fa-car-alt' => ['auto, automobile, sedan, transportation, travel, vehicle', '\f5de'],
431 470 'fas fa-car-battery' => ['auto, electric, mechanic, power', '\f5df'],
432 471 'fas fa-car-crash' => ['accident, auto, automobile, insurance, sedan, transportation, vehicle, wreck', '\f5e1'],
433 472 'fas fa-car-side' => ['auto, automobile, sedan, transportation, travel, vehicle', '\f5e4'],
473 + 'fas fa-caravan' => ['camper, motor home, rv, trailer, travel', '\f8ff'],
434 474 'fas fa-caret-down' => ['arrow, dropdown, expand, menu, more, triangle', '\f0d7'],
435 475 'fas fa-caret-left' => ['arrow, back, previous, triangle', '\f0d9'],
436 476 'fas fa-caret-right' => ['arrow, forward, next, triangle', '\f0da'],
437 477 'fas fa-caret-square-down' => ['arrow, caret-square-o-down, dropdown, expand, menu, more, triangle', '\f150'],
@@ -533,8 +573,9 @@
533 573 'fas fa-comments-dollar' => ['bubble, chat, commenting, conversation, feedback, message, money, note, notification, pay, sms, speech, spend, texting, transfer', '\f653'],
534 574 'fas fa-compact-disc' => ['album, bluray, cd, disc, dvd, media, movie, music, record, video, vinyl', '\f420'],
535 575 'fas fa-compass' => ['directions, directory, location, menu, navigation, safari, travel', '\f14e'],
536 576 'fas fa-compress' => ['collapse, fullscreen, minimize, move, resize, shrink, smaller', '\f066'],
577 + 'fas fa-compress-alt' => ['collapse, fullscreen, minimize, move, resize, shrink, smaller', '\f422'],
537 578 'fas fa-compress-arrows-alt ' => ['collapse, fullscreen, minimize, move, resize, shrink, smaller', '\f78c'],
538 579 'fas fa-concierge-bell' => ['attention, hotel, receptionist, service, support', '\f562'],
539 580 ' fab fa-confluence' => ['atlassian', '\f78d'],
540 581 'fab fa-connectdevelop' => ['Connect Develop', '\f20e'],
@@ -543,11 +584,17 @@
543 584
544 585 'fas fa-cookie-bite' => ['baked good, bitten, chips, chocolate, eat, snack, sweet, treat', '\f564'],
545 586 'fas fa-copy' => ['clone, duplicate, file, files-o, paper, paste', '\f0c5'],
546 587 'fas fa-copyright' => ['brand, mark, register, trademark', '\f1f9'],
588 + 'fab fa-cotton-bureau' => ['clothing, t-shirts, tshirts', '\f89e'],
547 589 'fas fa-couch' => ['chair, cushion, furniture, relax, sofa', '\f4b8'],
548 590 'fab fa-cpanel' => ['cPanel ', '\f388'],
549 591 'fab fa-creative-commons' => ['Creative Commons', '\f25e'],
592 + 'fab fa-creative-commons-by' => ['Creative Commons Attribution', '\f4e7'],
593 + 'fab fa-creative-commons-nc' => ['Creative Commons Noncommercial', '\f4e8'],
594 + 'fab fa-creative-commons-nc-eu' => ['Creative Commons Noncommercial (Euro Sign)', '\f4e9'],
595 + 'fab fa-creative-commons-nc-jp' => ['Creative Commons Noncommercial (Yen Sign)', '\f4ea'],
596 + 'fab fa-creative-commons-nd' => ['Creative Commons No Derivative Works', '\f4eb'],
550 597 'fab fa-creative-commons-pd' => ['Creative Commons Public Domain', '\f4ec'],
551 598 'fab fa-creative-commons-pd-alt' => ['Alternate Creative Commons Public Domain', '\f4ed'],
552 599 'fab fa-creative-commons-remix' => ['Creative Commons Remix', '\f4ee'],
553 600 'fab fa-creative-commons-sa' => ['Creative Commons Share Alike', '\f4ef'],
@@ -571,8 +618,9 @@
571 618 'fas fa-cut' => ['clip, scissors, snip', '\f0c4'],
572 619 'fab fa-cuttlefish' => ['Cuttlefish ', '\f38c'],
573 620 'fab fa-d-and-d' => ['Dungeons & Dragons', '\f38d'],
574 621 'fab fa-d-and-d-beyond' => ['Dungeons & Dragons, d&d, dnd, fantasy, gaming, tabletop', '\f6ca'],
622 + 'fab fa-dailymotion' => ['dailymotion', '\f952'],
575 623 'fab fa-dashcube' => ['DashCube', '\f210'],
576 624 'fas fa-database' => ['computer, development, directory, memory, storage', '\f1c0'],
577 625 'fas fa-deaf' => ['ear, hearing, sign language', '\f2a4'],
578 626 'fab fa-delicious' => ['Delicious', '\f1a5'],
@@ -600,8 +648,9 @@
600 648 'fas fa-digital-tachograph' => ['data, distance, speed, tachometer', '\f566'],
601 649 'fas fa-directions' => ['map, navigation, sign, turn', '\f5eb'],
602 650 'fab fa-discord' => ['Discord', '\f392'],
603 651 'fab fa-discourse' => ['Discourse', '\f393'],
652 + 'fas fa-disease' => ['bacteria, cancer, covid-19, illness, infection, sickness, virus', '\f7fa'],
604 653 'fas fa-divide' => ['arithmetic, calculus, division, math', '\f529'],
605 654 'fas fa-dizzy' => ['dazed, dead, disapprove, emoticon, face', '\f567'],
606 655 'fas fa-dna' => ['double helix, genetic, helix, molecule, protein', '\f471'],
607 656 'fab fa-dochub' => ['DocHub', '\f394'],
@@ -659,8 +708,9 @@
659 708 'fas fa-exchange-alt' => ['arrow, arrows, exchange, reciprocate, return, swap, transfer', '\f362'],
660 709 'fas fa-exclamation' => ['alert, danger, error, important, notice, notification, notify, problem, warning', '\f12a'],
661 710 'fas fa-exclamation-circle' => ['alert, danger, error, important, notice, notification, notify, problem, warning', '\f06a'],
662 711 'fas fa-expand' => ['bigger, enlarge, fullscreen, resize', '\f065'],
712 + 'fas fa-expand-alt' => ['arrows, bigger, enlarge, fullscreen, resize', '\f424'],
663 713 'fas fa-expand-arrows-alt' => ['bigger, enlarge, fullscreen, move, resize', '\f31e'],
664 714 'fab fa-expeditedssl' => ['ExpeditedSSL ', '\f23e'],
665 715 'fas fa-external-link-alt' => ['external-link, new, open, share', '\f35d'],
666 716 'fas fa-external-link-square-alt' => ['external-link-square, new, open, share', '\f360'],
@@ -674,8 +724,9 @@
674 724 'fas fa-fan' => ['ac, air conditioning, blade, blower, cool, hot', '\f863'],
675 725 'fab fa-fantasy-flight-games' => ['Dungeons & Dragons, d&d, dnd, fantasy, game, gaming, tabletop', '\f6dc'],
676 726 'fas fa-fast-backward' => ['beginning, first, previous, rewind, start', '\f049'],
677 727 'fas fa-fast-forward' => ['end, last, next', '\f050'],
728 + 'fas fa-faucet' => ['covid-19, drip, house, hygiene, kitchen, sink, water', '\f905'],
678 729 'fas fa-fax' => ['business, communicate, copy, facsimile, send', '\f1ac'],
679 730 'fas fa-feather' => ['bird, light, plucked, quill, write', '\f52d'],
680 731 'fas fa-feather-alt' => ['bird, light, plucked, quill, write', '\f56b'],
681 732 'fab fa-fedex' => ['Federal Express, package, shipping', '\f797'],
@@ -714,8 +765,9 @@
714 765 'fas fa-fire' => ['burn, caliente, flame, heat, hot, popular', '\f06d'],
715 766 'fas fa-fire-alt' => ['burn, caliente, flame, heat, hot, popular', '\f7e4'],
716 767 'fas fa-fire-extinguisher' => ['burn, caliente, fire fighter, flame, heat, hot, rescue', '\f134'],
717 768 'fab fa-firefox' => ['browser', '\f269'],
769 + 'fab fa-firefox-browser' => ['browser', '\f907'],
718 770 'fas fa-first-aid' => ['emergency, emt, health, medical, rescue', '\f479'],
719 771 'fab fa-first-order' => ['First Order', '\f2b0'],
720 772 'fab fa-first-order-alt' => ['Alternate First Order', '\f50a'],
721 773 'fab fa-firstdraft' => ['firstdraft', '\f3a1'],
@@ -834,9 +886,11 @@
834 886 'fas fa-hammer' => ['admin, fix, repair, settings, tool', '\f6e3'],
835 887 'fas fa-hamsa' => ['fas fa-hamsa', '\f665'],
836 888 'fas fa-hand-holding' => ['carry, lift', '\f4bd'],
837 889 'fas fa-hand-holding-heart' => ['carry, charity, gift, lift, package', '\f4be'],
890 + 'fas fa-hand-holding-medical' => ['care, covid-19, donate, help', '\f95c'],
838 891 'fas fa-hand-holding-usd' => ['$, carry, dollar sign, donation, giving, lift, money, price', '\f4c0'],
892 + 'fas fa-hand-holding-water' => ['carry, covid-19, drought, grow, lift', '\f4c1'],
839 893 'fas fa-hand-lizard' => ['game, roshambo', '\f258'],
840 894 'fas fa-hand-middle-finger' => ['flip the bird, gesture, hate, rude', '\f806'],
841 895 'fas fa-hand-paper' => ['game, halt, roshambo, stop', '\f256'],
842 896 'fas fa-hand-peace' => ['rest, truce', '\f25b'],
@@ -846,17 +900,27 @@
846 900 'fas fa-hand-point-up' => ['finger, hand-o-up, point', '\f0a6'],
847 901 'fas fa-hand-pointer' => ['arrow, cursor, select', '\f25a'],
848 902 'fas fa-hand-rock' => ['fist, game, roshambo', '\f255'],
849 903 'fas fa-hand-scissors' => ['cut, game, roshambo', '\f257'],
904 + 'fas fa-hand-sparkles' => ['clean, covid-19, hygiene, magic, soap, wash', '\f95d'],
850 905 'fas fa-hand-spock' => ['live long, prosper, salute, star trek, vulcan', '\f259'],
851 906 'fas fa-hands' => ['carry, hold, lift', '\f4c2'],
852 907 'fas fa-hands-helping' => ['aid, assistance, handshake, partnership, volunteering', '\f4c4'],
908 + 'fas fa-hands-wash' => ['covid-19, hygiene, soap, wash', '\f95e'],
853 909 'fas fa-handshake' => ['agreement, greeting, meeting, partnership', '\f2b5'],
910 + 'fas fa-handshake-alt-slash' => ['broken, covid-19, social distance', '\f95f'],
911 + 'fas fa-handshake-slash' => ['broken, covid-19, social distance', '\f960'],
854 912 'fas fa-hanukiah' => ['candle, hanukkah, jewish, judaism, light', '\f6e6'],
855 913 'fas fa-hard-hat' => ['construction, hardhat, helmet, safety', '\f807'],
856 914 'fas fa-hashtag' => ['Twitter, instagram, pound, social media, tag', '\f292'],
915 + 'fas fa-hat-cowboy' => ['buckaroo, horse, jackeroo, john b., old west, pardner, ranch, rancher, rodeo, western, wrangler', '\f8c0'],
916 + 'fas fa-hat-cowboy-side' => ['buckaroo, horse, jackeroo, john b., old west, pardner, ranch, rancher, rodeo, western, wrangler', '\f8c1'],
857 917 'fas fa-hat-wizard' => ['Dungeons & Dragons, accessory, buckle, clothing, d&d, dnd, fantasy, halloween, head, holiday, mage, magic, pointy, witch', '\f6e8'],
858 918 'fas fa-hdd' => ['cpu, hard drive, harddrive, machine, save, storage', '\f0a0'],
919 + 'fas fa-head-side-cough' => ['cough, covid-19, germs, lungs, respiratory, sick', '\f961'],
920 + 'fas fa-head-side-cough-slash' => ['cough, covid-19, germs, lungs, respiratory, sick', '\f962'],
921 + 'fas fa-head-side-mask' => ['breath, covid-19, filter, respirator, virus', '\f963'],
922 + 'fas fa-head-side-virus' => ['cold, covid-19, flu, sick', '\f964'],
859 923 'fas fa-heading' => ['format, header, text, title', '\f1dc'],
860 924 'fas fa-headphones' => ['audio, listen, music, sound, speaker', '\f025'],
861 925 'fas fa-headphones-alt' => ['audio, listen, music, sound, speaker', '\f58f'],
862 926 'fas fa-headset' => ['audio, gamer, gaming, listen, live chat, microphone, shot caller, sound, support, telemarketer', '\f590'],
@@ -879,8 +943,9 @@
879 943 'fas fa-horse-head' => ['equus, fauna, mammmal, mare, neigh, pony', '\f7ab'],
880 944 'fas fa-hospital' => ['building, covid-19, emergency room, medical center', '\f0f8'],
881 945 'fas fa-hospital-alt' => ['building, covid-19, emergency room, medical center', '\f47d'],
882 946 'fas fa-hospital-symbol' => ['clinic, covid-19, emergency, map', '\f47e'],
947 + 'fas fa-hospital-user' => ['covid-19, doctor, network, patient, primary care', '\f80d'],
883 948 'fas fa-hot-tub' => ['bath, jacuzzi, massage, sauna, spa', '\f593'],
884 949 'fas fa-hotdog' => ['bun, chili, frankfurt, frankfurter, kosher, polish, sandwich, sausage, vienna, weiner', '\f80f'],
885 950 'fas fa-hotel' => ['building, inn, lodging, motel, resort, travel', '\f594'],
886 951 'fab fa-hotjar' => ['Hotjar', '\f3b1'],
@@ -888,8 +953,9 @@
888 953 'fas fa-hourglass-end' => ['hour, minute, sand, stopwatch, time', '\f253'],
889 954 'fas fa-hourglass-half' => ['hour, minute, sand, stopwatch, time', '\f252'],
890 955 'fas fa-hourglass-start' => ['hour, minute, sand, stopwatch, time', '\f251'],
891 956 'fas fa-house-damage' => ['building, devastation, disaster, home, insurance', '\f6f1'],
957 + 'fas fa-house-user' => ['covid-19, home, isolation, quarantine', '\f965'],
892 958 'fab fa-houzz' => ['Houzz', '\f27c'],
893 959 'fas fa-hryvnia' => ['currency, money, ukraine, ukrainian', '\f6f2'],
894 960 'fab fa-html5' => ['HTML 5 Logo', '\f13b'],
895 961 'fab fa-hubspot' => ['HubSpot', '\f3b2'],
@@ -899,8 +965,9 @@
899 965 'fas fa-icons' => ['bolt, emoji, heart, image, music, photo, symbols', '\f86d'],
900 966 'fas fa-id-badge' => ['address, contact, identification, license, profile', '\f2c1'],
901 967 'fas fa-id-card' => ['contact, demographics, document, identification, issued, profile', '\f2c2'],
902 968 'fas fa-id-card-alt' => ['ontact, demographics, document, identification, issued, profile', '\f47f'],
969 + 'fab fa-ideal' => ['iDeal', '\f913'],
903 970 'fas fa-igloo' => ['dome, dwelling, eskimo, home, house, ice, snow', '\f7ae'],
904 971 'fas fa-image' => ['album, landscape, photo, picture', '\f03e'],
905 972 'fas fa-images' => ['album, landscape, photo, picture', '\f302'],
906 973 'fab fa-imdb' => ['IMDB', '\f2d8'],
@@ -949,8 +1016,9 @@
949 1016 'fas fa-landmark' => ['building, historic, memorable, monument, politics', '\f66f'],
950 1017 'fas fa-language' => ['dialect, idiom, localize, speech, translate, vernacular', '\f1ab'],
951 1018 'fas fa-laptop' => ['computer, cpu, dell, demo, device, mac, macbook, machine, pc', '\f109'],
952 1019 'fas fa-laptop-code' => ['computer, cpu, dell, demo, develop, device, mac, macbook, machine, pc', '\f5fc'],
1020 + 'fas fa-laptop-house' => ['computer, covid-19, device, office, remote, work from home', '\f966'],
953 1021 'fas fa-laptop-medical' => ['computer, device, ehr, electronic health records, history', '\f812'],
954 1022 'fab fa-laravel' => ['Laravel', '\f3bd'],
955 1023 'fab fa-lastfm' => ['last.fm', '\f202'],
956 1024 'fab fa-lastfm-square' => ['last.fm Square', '\f203'],
@@ -988,8 +1056,10 @@
988 1056 'fas fa-long-arrow-alt-right' => ['forward, long-arrow-right, next', '\f30b'],
989 1057 'fas fa-long-arrow-alt-up' => ['long-arrow-up, upload', '\f30c'],
990 1058 'fas fa-low-vision' => ['blind, eye, sight', '\f2a8'],
991 1059 'fas fa-luggage-cart' => ['bag, baggage, suitcase, travel', '\f59d'],
1060 + 'fas fa-lungs' => ['air, breath, covid-19, organ, respiratory', '\f604'],
1061 + 'fas fa-lungs-virus' => ['breath, covid-19, respiratory, sick', '\f967'],
992 1062 'fab fa-lyft' => ['lyft', '\f3c3'],
993 1063 'fab fa-magento' => ['Magento', '\f3c4'],
994 1064 'fas fa-magic' => ['autocomplete, automatic, mage, magic, spell, wand, witch, wizard', '\f0d0'],
995 1065 'fas fa-magnet' => ['Attract, lodestone, tool', '\f076'],
@@ -1013,8 +1083,9 @@
1013 1083 'fas fa-mars-stroke-v' => ['Mars Stroke Vertical', '\f22a'],
1014 1084 'fas fa-mask' => ['carnivale, costume, disguise, halloween, secret, super hero', '\f6fa'],
1015 1085 'fab fa-mastodon' => ['Mastodon', '\f4f6'],
1016 1086 'fab fa-maxcdn' => ['MaxCDN', '\f136'],
1087 + 'fab fa-mdb' => ['Material Design for Bootstrap', '\f8ca'],
1017 1088 'fas fa-medal' => ['award, ribbon, star, trophy', '\f5a2'],
1018 1089 'fab fa-medapps' => ['MedApps', '\f3c6'],
1019 1090 'fab fa-medium' => ['Medium ', '\f23a'],
1020 1091 'fab fa-medium-m' => ['Medium M', '\f3c7'],
@@ -1029,8 +1100,9 @@
1029 1100 'fab fa-mendeley' => ['Mendeley', '\f7b3'],
1030 1101 'fas fa-menorah' => ['candle, hanukkah, jewish, judaism, light', '\f676'],
1031 1102 'fas fa-mercury' => ['transgender', '\f223'],
1032 1103 'fas fa-meteor' => ['armageddon, asteroid, comet, shooting star, space', '\f753'],
1104 + 'fab fa-microblog' => ['Micro.blog', '\f91a'],
1033 1105 'fas fa-microchip' => ['cpu, hardware, processor, technology', '\f2db'],
1034 1106 'fas fa-microphone' => ['audio, podcast, record, sing, sound, voice', '\f130'],
1035 1107 'fas fa-microphone-alt' => ['audio, podcast, record, sing, sound, voice', '\f3c9'],
1036 1108 'fas fa-microphone-alt-slash' => ['audio, disable, mute, podcast, record, sing, sound, voice', '\f539'],
@@ -1042,8 +1114,9 @@
1042 1114 'fas fa-minus-square' => ['collapse, delete, hide, minify, negative, remove, shape, trash', '\f146'],
1043 1115 'fas fa-mitten' => ['clothing, cold, glove, hands, knitted, seasonal, warmth', '\f7b5'],
1044 1116 'fab fa-mix' => ['Mix', '\f3cb'],
1045 1117 'fab fa-mixcloud' => ['Mixcloud', '\f289'],
1118 + 'fab fa-mixer' => ['Mixer', '\f956'],
1046 1119 'fab fa-mizuni' => ['Mizuni', '\f3cc'],
1047 1120 'fas fa-mobile' => ['pple, call, cell phone, cellphone, device, iphone, number, screen, telephone', '\f10b'],
1048 1121 'fas fa-mobile-alt' => ['apple, call, cell phone, cellphone, device, iphone, number, screen, telephone', '\f3cd'],
1049 1122 'fab fa-modx' => ['MODX', '\f285'],
@@ -1059,8 +1132,9 @@
1059 1132 'fas fa-mortar-pestle' => ['crush, culinary, grind, medical, mix, pharmacy, prescription, spices', '\f5a7'],
1060 1133 'fas fa-mosque' => ['building, islam, landmark, muslim', '\f678'],
1061 1134 'fas fa-motorcycle' => ['bike, machine, transportation, vehicle', '\f21c'],
1062 1135 'fas fa-mountain' => ['glacier, hiking, hill, landscape, travel, view', '\f6fc'],
1136 + 'fas fa-mouse' => ['click, computer, cursor, input, peripheral', '\f8cc'],
1063 1137 'fas fa-mouse-pointer' => ['arrow, cursor, select', '\f245'],
1064 1138 'fas fa-mug-hot' => ['caliente, cocoa, coffee, cup, drink, holiday, hot chocolate, steam, tea, warmth', '\f7b6'],
1065 1139 'fas fa-music' => ['lyrics, melody, note, sing, sound', '\f001'],
1066 1140 'fab fa-napster' => ['Napster', '\f3d2'],
@@ -1086,8 +1160,9 @@
1086 1160 'fab fa-opencart' => ['OpenCart', '\f23d'],
1087 1161 'fab fa-openid' => ['OpenID', '\f19b'],
1088 1162 'fab fa-opera' => ['Opera', '\f26a'],
1089 1163 'fab fa-optin-monster' => ['Optin Monster', '\f23c'],
1164 + 'fab fa-orcid' => ['ORCID', '\f8d2'],
1090 1165 'fab fa-osi' => ['Open Source Initiative', '\f41a'],
1091 1166 'fas fa-otter' => ['animal, badger, fauna, fur, mammal, marten', '\f700'],
1092 1167 'fas fa-outdent' => ['lign, justify, paragraph, tab', '\f03b'],
1093 1168 'fab fa-page4' => ['page4 Corporation', '\f3d7'],
@@ -1119,8 +1194,9 @@
1119 1194 'fas fa-pen-square' => ['edit, pencil-square, update, write', '\f14b'],
1120 1195 'fas fa-pencil-alt' => ['design, edit, pencil, update, write', '\f303'],
1121 1196 'fas fa-pencil-ruler' => ['design, draft, draw, pencil', '\f5ae'],
1122 1197 'fab fa-penny-arcade' => ['Dungeons & Dragons, d&d, dnd, fantasy, game, gaming, pax, tabletop', '\f704'],
1198 + 'fas fa-people-arrows' => ['covid-19, personal space, social distance, space, spread, users', '\f968'],
1123 1199 'fas fa-people-carry' => ['box, carry, fragile, help, movers, package', '\f4ce'],
1124 1200 'fas fa-pepper-hot' => ['buffalo wings, capsicum, chili, chilli, habanero, jalapeno, mexican, spicy, tabasco, vegetable', '\f816'],
1125 1201 'fas fa-percent' => ['discount, fraction, proportion, rate, ratio', '\f295'],
1126 1202 'fas fa-percentage' => ['discount, fraction, proportion, rate, ratio', '\f541'],
@@ -1140,8 +1216,9 @@
1140 1216 'fab fa-pied-piper' => ['Pied Piper Logo', '\f2ae'],
1141 1217 'fab fa-pied-piper-alt' => ['Alternate Pied Piper Logo (Old)', '\f1a8'],
1142 1218 'fab fa-pied-piper-hat' => ['clothing', '\f4e5'],
1143 1219 'fab fa-pied-piper-pp' => ['Pied Piper PP Logo (Old)', '\f1a7'],
1220 + 'fab fa-pied-piper-square' => ['Pied Piper Square Logo (Old)', '\f91e'],
1144 1221 'fas fa-piggy-bank' => ['bank, save, savings', '\f4d3'],
1145 1222 'fas fa-pills' => ['drugs, medicine, prescription, tablets', '\f484'],
1146 1223 'fab fa-pinterest' => ['Pinterest', '\f0d2'],
1147 1224 'fab fa-pinterest-p' => ['Pinterest P', '\f231'],
@@ -1150,8 +1227,9 @@
1150 1227 'fas fa-place-of-worship' => ['building, church, holy, mosque, synagogue', '\f67f'],
1151 1228 'fas fa-plane' => ['airplane, destination, fly, location, mode, travel, trip', '\f072'],
1152 1229 'fas fa-plane-arrival' => ['airplane, arriving, destination, fly, land, landing, location, mode, travel, trip', '\f5af'],
1153 1230 'fas fa-plane-departure' => ['airplane, departing, destination, fly, location, mode, take off, taking off, travel, trip', '\f5b0'],
1231 + 'fas fa-plane-slash' => ['airplane mode, canceled, covid-19, delayed, grounded, travel', '\f969'],
1154 1232 'fas fa-play' => ['audio, music, playing, sound, start, video', '\f04b'],
1155 1233 'fas fa-play-circle' => ['audio, music, playing, sound, start, video', '\f144'],
1156 1234 'fab fa-playstation' => ['PlayStation', '\f3df'],
1157 1235 'fas fa-plug' => ['connect, electric, online, power', '\f1e6'],
@@ -1175,8 +1253,10 @@
1175 1253 'fas fa-print' => ['business, copy, document, office, paper', '\f02f'],
1176 1254 'fas fa-procedures' => ['EKG, bed, electrocardiogram, health, hospital, life, patient, vital', '\f487'],
1177 1255 'fab fa-product-hunt' => ['Product Hunt', '\f288'],
1178 1256 'fas fa-project-diagram' => ['chart, graph, network, pert', '\f542'],
1257 + 'fas fa-pump-medical' => ['anti-bacterial, clean, covid-19, disinfect, hygiene, medical grade, sanitizer, soap', '\f96a'],
1258 + 'fas fa-pump-soap' => ['anti-bacterial, clean, covid-19, disinfect, hygiene, sanitizer, soap', '\f96b'],
1179 1259 'fab fa-pushed' => ['Pushed', '\f3e1'],
1180 1260 'fas fa-puzzle-piece' => ['add-on, addon, game, section', '\f12e'],
1181 1261 'fab fa-python' => ['Python', '\f3e2'],
1182 1262 'fab fa-qq' => ['QQ', '\f1d6'],
@@ -1200,8 +1280,9 @@
1200 1280 'fab fa-reacteurope' => ['ReactEurope', '\f75d'],
1201 1281 'fab fa-readme' => ['ReadMe', '\f4d5'],
1202 1282 'fab fa-rebel' => ['Rebel Alliance', '\f1d0'],
1203 1283 'fas fa-receipt' => ['check, invoice, money, pay, table', '\f543'],
1284 + 'fas fa-record-vinyl' => ['LP, album, analog, music, phonograph, sound', '\f8d9'],
1204 1285 'fas fa-recycle' => ['Waste, compost, garbage, reuse, trash', '\f1b8'],
1205 1286 'fab fa-red-river' => ['red river', '\f3e3'],
1206 1287 'fab fa-reddit' => ['reddit Logo', '\f1a1'],
1207 1288 'fab fa-reddit-alien' => ['reddit Alien', '\f281'],
@@ -1217,8 +1298,9 @@
1217 1298 'fab fa-replyd' => ['replyd', '\f3e6'],
1218 1299 'fas fa-republican' => ['american, conservative, election, elephant, politics, republican party, right, right-wing, usa', '\f75e'],
1219 1300 'fab fa-researchgate' => ['Researchgate', '\f4f8'],
1220 1301 'fab fa-resolving' => ['Resolving', '\f3e7'],
1302 + 'fas fa-restroom' => ['bathroom, john, loo, potty, washroom, waste, wc', '\f7bd'],
1221 1303 'fas fa-retweet' => ['refresh, reload, share, swap', '\f079'],
1222 1304 'fab fa-rev' => ['Rev.io', '\f5b2'],
1223 1305 'fas fa-ribbon' => ['badge, cause, lapel, pin', '\f4d6'],
1224 1306 'fas fa-ring' => ['Dungeons & Dragons, Gollum, band, binding, d&d, dnd, engagement, fantasy, gold, jewelry, marriage, precious', '\f70b'],
@@ -1268,12 +1350,14 @@
1268 1350 'fas fa-share-alt-square' => ['forward, save, send, social', '\f1e1'],
1269 1351 'fas fa-share-square' => ['forward, save, send, social', '\f14d'],
1270 1352 'fas fa-shekel-sign' => ['currency, ils, money', '\f20b'],
1271 1353 'fas fa-shield-alt' => ['achievement, award, block, defend, security, winner', '\f3ed'],
1354 + 'fas fa-shield-virus' => ['antibodies, barrier, covid-19, health, protect', '\f96c'],
1272 1355 'fas fa-ship' => ['boat, sea, water', '\f21a'],
1273 1356 'fas fa-shipping-fast' => ['express, fedex, mail, overnight, package, ups', '\f48b'],
1274 1357 'fab fa-shirtsinbulk' => ['Shirts in Bulk', '\f214'],
1275 1358 'fas fa-shoe-prints' => ['feet, footprints, steps, walk', '\f54b'],
1359 + 'fab fa-shopify' => ['Shopify', '\f957'],
1276 1360 'fas fa-shopping-bag' => ['buy, checkout, grocery, payment, purchase', '\f290'],
1277 1361 'fas fa-shopping-basket' => ['buy, checkout, grocery, payment, purchase', '\f291'],
1278 1362 'fas fa-shopping-cart' => ['buy, checkout, grocery, payment, purchase', '\f07a'],
1279 1363 'fab fa-shopware' => ['Shopware', '\f5b5'],
@@ -1317,8 +1401,9 @@
1317 1401 'fas fa-snowboarding' => ['activity, fitness, olympics, outdoors, person', '\f7ce'],
1318 1402 'fas fa-snowflake' => ['precipitation, rain, winter', '\f2dc'],
1319 1403 'fas fa-snowman' => ['decoration, frost, frosty, holiday', '\f7d0'],
1320 1404 'fas fa-snowplow' => ['clean up, cold, road, storm, winter', '\f7d2'],
1405 + 'fas fa-soap' => ['bubbles, clean, covid-19, hygiene, wash', '\f96e'],
1321 1406 'fas fa-socks' => ['business socks, business time, clothing, feet, flight of the conchords, wednesday', '\f696'],
1322 1407 'fas fa-solar-panel' => ['clean, eco-friendly, energy, green, sun', '\f5ba'],
1323 1408 'fas fa-sort' => ['filter, order', '\f0dc'],
1324 1409 'fas fa-sort-alpha-down' => ['alphabetical, arrange, filter, order, sort-alpha-asc', '\f15d'],
@@ -1372,10 +1457,13 @@
1372 1457 'fas fa-sticky-note' => ['message, note, paper, reminder, sticker', '\f249'],
1373 1458 'fas fa-stop' => ['block, box, square', '\f04d'],
1374 1459 'fas fa-stop-circle' => ['block, box, circle, square', '\f28d'],
1375 1460 'fas fa-stopwatch' => ['clock, reminder, time', '\f2f2'],
1461 + 'fas fa-stopwatch-20' => ['ABCs, countdown, covid-19, happy birthday, i will survive, reminder, seconds, time, timer', '\f96f'],
1376 1462 'fas fa-store' => ['building, buy, purchase, shopping', '\f54e'],
1377 1463 'fas fa-store-alt' => ['building, buy, purchase, shopping', '\f54f'],
1464 + 'fas fa-store-alt-slash' => ['building, buy, closed, covid-19, purchase, shopping', '\f970'],
1465 + 'fas fa-store-slash' => ['building, buy, closed, covid-19, purchase, shopping', '\f971'],
1378 1466 'fab fa-strava' => ['Strava', '\f428'],
1379 1467 'fas fa-stream' => ['flow, list, timeline', '\f550'],
1380 1468 'fas fa-street-view' => ['directions, location, map, navigation', '\f21d'],
1381 1469 'fas fa-strikethrough' => ['cancel, edit, font, format, text, type', '\f0cc'],
@@ -1395,8 +1483,9 @@
1395 1483 'fab fa-supple' => ['Supple', '\f3f9'],
1396 1484 'fas fa-surprise' => ['emoticon, face, shocked', '\f5c2'],
1397 1485 'fab fa-suse' => ['linux, operating system, os', '\f7d6'],
1398 1486 'fas fa-swatchbook' => ['Pantone, color, design, hue, palette', '\f5c3'],
1487 + 'fab fa-swift' => ['Swift', '\f8e1'],
1399 1488 'fas fa-swimmer' => ['athlete, head, man, olympics, person, pool, water', '\f5c4'],
1400 1489 'fas fa-swimming-pool' => ['ladder, recreation, swim, water', '\f5c5'],
1401 1490 'fab fa-symfony' => ['Symfony', '\f83d'],
1402 1491 'fas fa-synagogue' => ['building, jewish, judaism, religion, star of david, temple', '\f69b'],
@@ -1452,8 +1541,9 @@
1452 1541 'fas fa-toggle-off' => ['switch', '\f204'],
1453 1542 'fas fa-toggle-on' => ['switch', '\f205'],
1454 1543 'fas fa-toilet' => ['bathroom, flush, john, loo, pee, plumbing, poop, porcelain, potty, restroom, throne, washroom, waste, wc', '\f7d8'],
1455 1544 'fas fa-toilet-paper' => ['bathroom, covid-19, halloween, holiday, lavatory, prank, restroom, roll', '\f71e'],
1545 + 'fas fa-toilet-paper-slash' => ['bathroom, covid-19, halloween, holiday, lavatory, leaves, prank, restroom, roll, trouble, ut oh', '\f972'],
1456 1546 'fas fa-toolbox' => ['admin, container, fix, repair, settings, tools', '\f552'],
1457 1547 'fas fa-tools' => ['admin, fix, repair, screwdriver, settings, tools, wrench', '\f7d9'],
1458 1548 'fas fa-tooth' => ['bicuspid, dental, dentist, molar, mouth, teeth', '\f5c9'],
1459 1549 'fas fa-torah' => ['book, jewish, judaism, religion, scroll', '\f6a0'],
@@ -1461,8 +1551,9 @@
1461 1551 'fas fa-tractor' => ['agriculture, farm, vehicle', '\f722'],
1462 1552 'fab fa-trade-federation' => ['Trade Federation', '\f513'],
1463 1553 'fas fa-trademark' => ['copyright, register, symbol', '\f25c'],
1464 1554 'fas fa-traffic-light' => ['direction, road, signal, travel', '\f637'],
1555 + 'fas fa-trailer' => ['carry, haul, moving, travel', '\f941'],
1465 1556 'fas fa-train' => ['bullet, commute, locomotive, railway, subway', '\f238'],
1466 1557 'fas fa-tram' => ['crossing, machine, mountains, seasonal, transportation', '\f7da'],
1467 1558 'fas fa-transgender' => ['intersex', '\f224'],
1468 1559 'fas fa-transgender-alt' => ['intersex', '\f225'],
@@ -1490,8 +1581,9 @@
1490 1581 'fab fa-typo3' => ['Typo3', '\f42b'],
1491 1582 'fab fa-uber' => ['Uber', '\f402'],
1492 1583 'fab fa-ubuntu' => ['linux, operating system, os', '\f7df'],
1493 1584 'fab fa-uikit' => ['UIkit', '\f403'],
1585 + 'fab fa-umbraco' => ['Umbraco', '\f8e8'],
1494 1586 'fas fa-umbrella' => ['protection, rain, storm, wet', '\f0e9'],
1495 1587 'fas fa-umbrella-beach' => ['protection, recreation, sand, shade, summer, sun', '\f5ca'],
1496 1588 'fas fa-underline' => ['edit, emphasis, format, text, writing', '\f0cd'],
1497 1589 'fas fa-undo' => ['back, control z, exchange, oops, return, rotate, swap', '\f0e2'],
@@ -1496,8 +1588,9 @@
1496 1588 'fas fa-underline' => ['edit, emphasis, format, text, writing', '\f0cd'],
1497 1589 'fas fa-undo' => ['back, control z, exchange, oops, return, rotate, swap', '\f0e2'],
1498 1590 'fas fa-undo-alt' => ['back, control z, exchange, oops, return, swap', '\f2ea'],
1499 1591 'fab fa-uniregistry' => ['Uniregistry', '\f404'],
1592 + 'fab fa-unity' => ['Unity 3D', '\f949'],
1500 1593 'fas fa-universal-access' => ['accessibility, hearing, person, seeing, visual impairment', '\f29a'],
1501 1594 'fas fa-university' => ['bank, building, college, higher education - students, institution', '\f19c'],
1502 1595 'fas fa-unlink' => ['attachment, chain, chain-broken, remove', '\f127'],
1503 1596 'fas fa-unlock' => ['admin, lock, password, private, protect', '\f09c'],
@@ -1553,8 +1646,11 @@
1553 1646 'fab fa-vimeo' => ['Vimeo', '\f40a'],
1554 1647 'fab fa-vimeo-square' => ['Vimeo Square', '\f194'],
1555 1648 'fab fa-vimeo-v' => ['vimeo', '\f27d'],
1556 1649 'fab fa-vine' => ['Vine', '\f1ca'],
1650 + 'fas fa-virus' => ['bug, covid-19, flu, health, sick, viral', '\f974'],
1651 + 'fas fa-virus-slash' => ['bug, covid-19, cure, eliminate, flu, health, sick, viral', '\f975'],
1652 + 'fas fa-viruses' => ['bugs, covid-19, flu, health, multiply, sick, spread, viral', '\f976'],
1557 1653 'fab fa-vk' => ['VK', '\f189'],
1558 1654 'fab fa-vnv' => ['VNV', '\f40b'],
1559 1655 'fas fa-voicemail' => ['answer, inbox, message, phone', '\f897'],
1560 1656 'fas fa-volleyball-ball' => ['beach, olympics, sport', '\f45f'],
@@ -1769,9 +1865,10 @@
1769 1865
1770 1866 // Save the SQL statements to a file
1771 1867 file_put_contents($fileName, $file_content);
1772 1868 echo '<a href="'. $path['url'].$name .'" target="_blank" id="export-image-map-hotspot-plugin">Download</a>';
1773 - } else {
1869 + }
1870 + else{
1774 1871 echo '<a href="#" id="export-image-map-hotspot-plugin">Download</a>';
1775 1872 }
1776 1873 }
1777 1874
@@ -1789,39 +1886,24 @@
1789 1886 $style_table = $wpdb->prefix . 'imh_6310_style';
1790 1887
1791 1888 $wpdb->query("TRUNCATE {$style_table}");
1792 1889
1793 - $sql = '';
1794 - $prefix = explode('image-map-hotspot-backup', basename($url))[0];
1795 - $handle = fopen($url, 'r');
1796 - if ($handle) {
1797 - while (($line = fgets($handle)) !== false) {
1798 - $sql .= $line;
1799 -
1800 - // Check if the line ends with a semicolon (end of a SQL statement)
1801 - if (substr(trim($line), -1) == ';') {
1802 - // Replace the prefix in the SQL command
1803 - $sql = str_replace($prefix, $wpdb->prefix, $sql);
1804 -
1805 - // Execute the SQL statement
1806 - $result = $wpdb->query($sql);
1807 -
1808 - if ($result === false) {
1809 - echo '<div class="notice notice-error"><p>Error executing SQL: ' . $wpdb->last_error . '</p></div>';
1810 - }
1811 -
1812 - $sql = ''; // Reset for the next statement
1813 - }
1814 - }
1815 - fclose($handle);
1816 - } else {
1817 - echo '<div class="notice notice-error"><p>Could not open the SQL file for reading.</p></div>';
1818 - return;
1819 - }
1820 -
1821 - echo '<div class="notice notice-success"><p>Data imported successfully from SQL file.</p></div>';
1822 -}
1823 -
1890 + $result = '';
1891 + $file = fopen($url, "r");
1892 + while(! feof($file)) {
1893 + $result .= fgets($file);
1894 + }
1895 + fclose($file);
1896 + if(strlen($result)) {
1897 + $result = explode('!@#$$#@!', $result);
1898 + foreach($result as $value) {
1899 + if(strlen(trim($value)) > 3) {
1900 + $wpdb->query(trim($value));
1901 + }
1902 + }
1903 + }
1904 + echo "<p style='color: green; font-size: 14px;'>Data import successfully.</p>";
1905 + }
1824 1906 function imh_6310_validate_url($url){
1825 1907 if ($url != '' && substr($url, 0, 7) != "http://" && substr($url, 0, 8) != "https://"){
1826 1908 $url = "http://{$url}";
1827 1909 }
@@ -1826,544 +1908,63 @@
1826 1908 $url = "http://{$url}";
1827 1909 }
1828 1910 return $url;
1829 1911 }
1830 -
1831 1912 function imh_6310_load_templates($js, $counter, $ids) {
1832 - $desktopSize = imh_6310_get_option('imh_6310_desktop_size');
1833 - $iPadSize = imh_6310_get_option('imh_6310_ipad_size');
1834 - $mobileSize = imh_6310_get_option('imh_6310_mobile_size');
1835 -
1836 - $desktopSize = $desktopSize ? $desktopSize : 30;
1837 - $mobileSize = $mobileSize ? $mobileSize : 20;
1838 - $iPadSize = $iPadSize ? $iPadSize : $mobileSize;
1839 -
1913 + $html = "";
1840 1914 $customCSS = "";
1841 - $always_show = isset($js->alwaysShow) && $js->alwaysShow == 1 ? 1 : 0;
1915 +
1916 + $customCSS .= "
1917 + .imh-6310-annotation-box-{$ids} .imh-6310-point-{$counter} .imh-6310-pin-main-img {
1918 + color: ".esc_attr($js->fontAwesomeIconColor).";
1919 + font-size: ".esc_attr($js->fontAwesomIconSize)."px;
1920 + }
1921 + .imh-6310-annotation-box-{$ids} .imh-6310-point-{$counter} .imh-6310-pin-hover-img {
1922 + color: ".esc_attr($js->fontAwesomeIconHoverColor).";
1923 + font-size: ".esc_attr($js->fontAwesomIconSize)."px;
1924 + }
1925 +
1926 + ";
1842 1927
1843 - if($js->iconType == 1) {
1928 + $target = $js->openNewTab == '1' ? "target='_blank'" : '';
1929 + $anchorStart = $js->customIconLinkType == '1' ? "<a href='".imh_6310_validate_url(esc_attr($js->linkURL))."' {$target}>" : '';
1930 + $anchorEnd = $anchorStart ? '</a>' : '';
1931 + echo "
1932 + <div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}'>
1933 + {$anchorStart}
1934 + <div class='imh-6310-template-01-hover-content'>".esc_attr(str_replace("@@##!!@@", "'", $js->linkText))."</div>
1935 + {$anchorEnd}
1936 + </div>
1937 + ";
1844 1938 $customCSS .= "
1845 - .imh-6310-annotation-box-{$ids} .imh-6310-point-{$counter} .imh-6310-pin-main-img {
1846 - color: ".esc_attr($js->fontAwesomeIconColor).";
1847 - font-size: ".esc_attr($js->fontAwesomIconSize)."px;
1848 - }
1849 - .imh-6310-annotation-box-{$ids} .imh-6310-point-{$counter} .imh-6310-pin-hover-img {
1850 - color: ".esc_attr($js->fontAwesomeIconHoverColor).";
1851 - font-size: ".esc_attr($js->fontAwesomIconSize)."px;
1852 - }
1853 - ";
1854 - } else if($js->iconType == 2){
1855 - $customCSS .= "
1856 - .imh-6310-annotation-box-{$ids} .imh-6310-point-{$counter} .imh-6310-pin-main-img {
1857 - width: ".esc_attr($js->imgOrIconSize)."px;
1858 - height: ".esc_attr($js->imgOrIconSize)."px;
1859 - border-radius: 50%;
1860 - }
1861 - .imh-6310-annotation-box-{$ids} .imh-6310-point-{$counter} .imh-6310-pin-hover-img {
1862 - width: ".esc_attr($js->imgOrIconSize)."px;
1863 - height: ".esc_attr($js->imgOrIconSize)."px;
1864 - border-radius: 50%;
1865 - }
1866 - ";
1867 - } else if($js->iconType == 3){
1868 - $customCSS .= "
1869 - .imh-6310-annotation-box-{$ids} .imh-6310-point-{$counter} .imh-6310-customtext {
1870 - color: ".esc_attr($js->customTextColor).";
1871 - font-size: ".esc_attr($js->customTextSize)."px;
1872 - background-color: ".esc_attr($js->customTextBgColor).";
1873 - z-index:-1;
1874 - }
1875 - ";
1876 - }
1877 -
1878 - if($js->elementType == '1' || $js->elementType == '2'){
1879 - $target = $js->openNewTab == '1' ? "target='_blank'" : '';
1880 - $linkStatus = false;
1881 - if($js->customIconLinkType == '1'){
1882 - if(isset($js->linkPosition) && $js->linkPosition == '1'){
1883 - $linkStatus = true;
1884 - } else if(!isset($js->linkPosition)){
1885 - $linkStatus = true;
1886 - }
1887 - }
1888 -
1889 - $anchorStart = $linkStatus ? "<a href='".imh_6310_validate_url(esc_attr($js->linkURL))."' {$target}>" : '';
1890 - $anchorEnd = $anchorStart ? '</a>' : '';
1891 -
1892 - if($js->selectedTemplate == '01') {
1893 - echo "
1894 - <div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}' data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
1895 - {$anchorStart}
1896 - ".
1897 - ($js->linkText ? "<div class='imh-6310-template-01-hover-content'><div class='imh-6310-close-button imh-6310-close-button-mobile'></div>".imh_6310_replace(esc_attr($js->linkText))."</div>" : '')
1898 - ."
1899 - {$anchorEnd}
1900 - </div>
1901 - ";
1902 - $customCSS .= "
1903 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-01-hover-content{
1904 - background-color: ".esc_attr($js->tempCommonBgColor)." !important;
1905 - color: ".esc_attr($js->tempCommonFontColor).";
1906 - font-size: ".esc_attr($js->tempCommonFontSize)."px;
1907 - line-height: ".esc_attr((isset($js->tempCommonFontSize) && $js->tempCommonFontSize ? $js->tempCommonFontSize: 0) + 6)."px;
1908 - padding: 5px 10px;
1909 - border-radius: 10px;
1910 - max-width: 200px !important;
1911 - }
1912 - @media screen and (min-width: 100px) and (max-width: 1366px) {
1913 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-01-hover-content {
1914 - font-size:".esc_attr(isset($js->tempCommonFontSizeMobile) ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize)."px;
1915 - line-height:".esc_attr((isset($js->tempCommonFontSizeMobile) && $js->tempCommonFontSizeMobile ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize) + 6)."px;
1916 - }
1917 - }
1918 - ";
1919 - }
1920 - else if($js->selectedTemplate == '02') {
1921 - echo "
1922 - <div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}'
1923 - data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
1924 - <div class='imh-6310-tooltip imh-6310-template-02'>
1925 - <div class='imh-6310-template-02-hover-content'>
1926 - <div class='imh-6310-template-01-hover-content'>
1927 - <div class='imh-6310-close-button imh-6310-close-button-mobile'></div>
1928 - <div class='imh-6310-template-02-content'>
1929 - ".imh_6310_create_embedded_code($js->tem02EmbeddedLink)."
1930 - </div>
1931 - </div>
1932 - </div>
1933 - </div>
1934 - </div>
1935 - ";
1936 - }
1937 - else if($js->selectedTemplate == '03') {
1938 - echo "
1939 - <div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}'
1940 - data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
1941 - {$anchorStart}
1942 - <div class='imh-6310-template-03-hover-content'>
1943 - <div class='imh-6310-template-01-hover-content'>
1944 - <div class='imh-6310-close-button imh-6310-close-button-mobile'></div>
1945 - <div class='imh-6310-template-03-tooltip-testimonial'>
1946 - <div class='imh-6310-template-03-tooltip-pic'>
1947 - <img src='{$js->openDesImg}' alt=''>
1948 - </div>
1949 - <div class='imh-6310-template-03-tooltip-testimonial-content'>
1950 - <div class='imh-6310-template-03-tooltip-testimonial-title'>".imh_6310_replace(esc_attr($js->linkText))."</div>
1951 - <div class='imh-6310-template-03-tooltip-description'>
1952 - ".esc_attr($js->openDescription)."
1953 - </div>
1954 - </div>
1955 - </div>
1956 - </div>
1957 - </div>
1958 - {$anchorEnd}
1959 - </div>
1960 - ";
1961 - $customCSS .= "
1962 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-03-hover-content{
1963 - width: ".esc_attr(isset($js->tooltipWidth) ? $js->tooltipWidth : 400)."px;
1964 - }
1965 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-03-tooltip-testimonial{
1966 - background-color: ".esc_attr($js->tempCommonBgColor).";
1967 - }
1968 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-03-tooltip-testimonial .imh-6310-template-03-tooltip-testimonial-title{
1969 - font-size: ".esc_attr($js->tempCommonFontSize)."px;
1970 - line-height: ".esc_attr((isset($js->tempCommonFontSize) && $js->tempCommonFontSize ? $js->tempCommonFontSize: 0) + 6)."px;
1971 - color: ".esc_attr($js->tempCommonFontColor).";
1972 - padding-bottom:5px;
1973 - }
1974 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-03-tooltip-testimonial .imh-6310-template-03-tooltip-description{
1975 - color: ".esc_attr($js->openDesFontColor).";
1976 - font-size:".esc_attr($js->openDesFontSize)."px;
1977 - line-height:".esc_attr((isset($js->openDesFontSize) && $js->openDesFontSize ? $js->openDesFontSize: 0) + 6)."px;
1978 - }
1979 - @media screen and (min-width: 100px) and (max-width: 1366px) {
1980 - .imh-6310-template-03-tooltip-testimonial-title{margin-top: 40px !important;}
1981 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-03-tooltip-testimonial .imh-6310-template-03-tooltip-description{
1982 - font-size:".esc_attr(isset($js->openDesFontSizeMobile) ? $js->openDesFontSizeMobile : $js->openDesFontSize)."px;
1983 - }
1984 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-03-tooltip-testimonial .imh-6310-template-03-tooltip-testimonial-title{
1985 - font-size:".esc_attr(isset($js->tempCommonFontSizeMobile) ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize)."px;
1986 - line-height:".esc_attr((isset($js->tempCommonFontSizeMobile) && $js->tempCommonFontSizeMobile ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize) + 6)."px;
1987 - }
1988 - }
1989 - ";
1990 - }
1991 - else if($js->selectedTemplate == '04') {
1992 - echo "<div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}'
1993 - data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
1994 - {$anchorStart}
1995 - <div class='imh-6310-template-01-hover-content'>
1996 - <div class='imh-6310-close-button imh-6310-close-button-mobile'></div>
1997 - <div class='imh-6310-template-04-tooltip-testimonial'>
1998 - <div class='imh-6310-template-04-tooltip-testimonial-content'>
1999 - <div class='imh-6310-template-04-tooltip-pic'>
2000 - <img src='{$js->openDesImg}'>
2001 - </div>
2002 - <div class='imh-6310-template-04-tooltip-title'>".
2003 - imh_6310_replace(esc_attr($js->linkText))."
2004 - </div>
2005 - <div class='imh-6310-template-04-tooltip-description'>
2006 - ".imh_6310_replace(esc_attr($js->openDescription))."
2007 - </div>
2008 - </div>
2009 - </div>
2010 - </div>
2011 - {$anchorEnd}
2012 - </div>";
1939 + .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-01-hover-content{
1940 + color: ".esc_attr($js->tempCommonFontColor).";
1941 + font-size: ".esc_attr($js->tempCommonFontSize)."px;
1942 + line-height: ".esc_attr($js->tempCommonFontSize + 6)."px;
1943 + padding: 5px 10px;
1944 + border-radius: 10px;
1945 + max-width: 200px !important;
1946 + }
1947 +
1948 + ";
2013 1949
2014 - $customCSS .= "
2015 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-04-tooltip-testimonial{
2016 - width: ".esc_attr(isset($js->tooltipWidth) ? $js->tooltipWidth : 400)."px;
2017 - background: ".esc_attr($js->tempCommonBgColor).";
2018 - text-decoration: none !important;
2019 - }
2020 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-04-tooltip-title{
2021 - color: ".esc_attr($js->tempCommonFontColor).";
2022 - font-size:".esc_attr($js->tempCommonFontSize)."px;
2023 - line-height:".esc_attr((isset($js->tempCommonFontSize) && $js->tempCommonFontSize ? $js->tempCommonFontSize: 0) + 6)."px;
2024 - text-decoration: none !important; ;
2025 - }
2026 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-04-tooltip-description{
2027 - color: ".esc_attr($js->openDesFontColor).";
2028 - font-size:".esc_attr($js->openDesFontSize)."px;
2029 - line-height:".esc_attr((isset($js->openDesFontSize) && $js->openDesFontSize ? $js->openDesFontSize: 0) + 6)."px;
2030 - text-decoration:none !important;
2031 - }
2032 - @media screen and (min-width: 100px) and (max-width: 1366px) {
2033 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-04-tooltip-title{
2034 - font-size:".esc_attr(isset($js->tempCommonFontSizeMobile) ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize)."px;
2035 - line-height:".esc_attr((isset($js->tempCommonFontSizeMobile) && $js->tempCommonFontSizeMobile ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize) + 6)."px;
2036 - }
2037 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-04-tooltip-description{
2038 - font-size:".esc_attr(isset($js->openDesFontSizeMobile) ? $js->openDesFontSizeMobile : $js->openDesFontSize)."px;
2039 - }
2040 - }
2041 - ";
2042 - }
2043 - else if($js->selectedTemplate == '05') {
2044 - echo "
2045 - <div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}'
2046 - data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
2047 - {$anchorStart}
2048 - <div class='imh-6310-template-05-hover-content'>
2049 - <div class='imh-6310-template-01-hover-content'>
2050 - <div class='imh-6310-close-button imh-6310-close-button-mobile'></div>
2051 - <div class='imh-6310-template-05-tooltip-testimonial'>
2052 - <div class='imh-6310-template-05-tooltip-testimonial-content'>
2053 - <div class='imh-6310-template-05-tooltip-pic'>
2054 - <img src='".esc_attr($js->openDesImg)."'>
2055 - </div>
2056 - <div class='imh-6310-template-05-tooltip-title'>".imh_6310_replace(esc_attr($js->linkText))."</div>
2057 - </div>
2058 - <div class='imh-6310-template-05-tooltip-description'>
2059 - ".imh_6310_replace(esc_attr($js->openDescription))."
2060 - </div>
2061 - </div>
2062 - </div>
2063 - </div>
2064 - {$anchorEnd}
2065 - </div>
2066 - ";
2067 - $customCSS .= "
2068 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-05-hover-content{
2069 - width: ".esc_attr(isset($js->tooltipWidth) ? $js->tooltipWidth : 400)."px;
2070 - background: ".esc_attr($js->tempCommonBgColor).";
2071 - }
2072 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-05-tooltip-testimonial-content .imh-6310-template-05-tooltip-title {
2073 - color: ".esc_attr($js->tempCommonFontColor).";
2074 - font-size:".esc_attr($js->tempCommonFontSize)."px;
2075 - line-height:".esc_attr((isset($js->tempCommonFontSize) && $js->tempCommonFontSize ? $js->tempCommonFontSize: 0) + 6)."px;
2076 - }
1950 +
2077 1951
2078 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-05-tooltip-description {
2079 - color: ".esc_attr($js->openDesFontColor).";
2080 - font-size:".esc_attr($js->openDesFontSize)."px;
2081 - line-height:".esc_attr((isset($js->openDesFontSize) && $js->openDesFontSize ? $js->openDesFontSize: 0) + 6)."px;
2082 - }
2083 - @media screen and (min-width: 100px) and (max-width: 1366px) {
2084 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-05-tooltip-testimonial-content .imh-6310-template-05-tooltip-title {
2085 - font-size:".esc_attr(isset($js->tempCommonFontSizeMobile) ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize)."px;
2086 - line-height:".esc_attr((isset($js->tempCommonFontSizeMobile) && $js->tempCommonFontSizeMobile ? $js->tempCommonFontSizeMobile : $js->tempCommonFontSize) + 6)."px;
2087 - }
2088 - .imh-6310-template-05-tooltip-description{width: calc(100% - 16px) !important;}
2089 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-05-tooltip-description {
2090 - font-size:".esc_attr(isset($js->openDesFontSizeMobile) ? $js->openDesFontSizeMobile : $js->openDesFontSize)."px;
2091 - }
2092 - }
2093 - ";
2094 -
2095 - }
2096 - } else if( $js->elementType == '3' ){
2097 - echo "
2098 - <div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}'
2099 - data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
2100 - <div class='imh-6310-template-01-hover-content'>
2101 - <div class='imh-6310-close-button imh-6310-close-button-mobile'></div>
2102 - ".imh_6310_replace($js->customeHtmlCode)."
2103 - </div>
2104 - </div>";
2105 -
2106 - $customCSS .= imh_6310_replace($js->customeCssCode);
2107 - }
1952 + wp_register_style("imh-6310-custom-" . esc_attr($ids) . "-" . esc_attr($counter) . "-css", "");
1953 + wp_enqueue_style("imh-6310-custom-" . esc_attr($ids) . "-" . esc_attr($counter) . "-css");
1954 + wp_add_inline_style("imh-6310-custom-" . esc_attr($ids) . "-" . esc_attr($counter) . "-css", $customCSS);
2108 1955
2109 -
2110 - if(isset($js->selectedTemplate) && $js->selectedTemplate != '02' && $js->openPopup == '2' && $js->elementType != '3'){
2111 - echo "<div class='imh-6310-modal imh-6310-popup-{$ids}-{$counter}' style='display:none;'>
2112 - <div class='imh-6310-modal-content imh-6310-modal-xl'>
2113 - <div class='imh-6310-popup'>
2114 - <div class='imh-6310-close-button'></div>
2115 - ".imh_6310_create_embedded_code($js->customeCodePopup)."
2116 - </div>
2117 - </div>
2118 - </div>";
2119 -
2120 - $customCSS .= "@media screen and (min-width: 100px) and (max-width: 1366px) {.imh-6310-hover-content-{$ids}-{$counter}{display: none}}";
2121 - } else if(isset($js->selectedTemplate) && $js->selectedTemplate != '02' && $js->openPopup == '3' && $js->elementType != '3'){
2122 - echo "
2123 - <div class='imh-6310-modal imh-6310-popup-{$ids}-{$counter}' style='display:none;'>
2124 - <div class='imh-6310-modal-content imh-6310-modal-xl'>
2125 - <div class='imh-6310-popup'>
2126 - <div class='imh-6310-template-01-hover-content'>
2127 - <div class='imh-6310-close-button'></div>
2128 - ".imh_6310_replace($js->popupCustomHtml)."
2129 - </div>
2130 - </div>
2131 - </div>
2132 - </div>
2133 - ";
2134 -
2135 - $customCSS .= "
2136 - .imh-6310-popup-{$ids}-{$counter} {
2137 - box-sizing: border-box !important;
2138 - }
2139 - .imh-6310-popup-{$ids}-{$counter} .imh-6310-modal-content{
2140 - width: 100% !important;
2141 - max-width: 350px !important;
2142 - height: auto !important
2143 - }";
2144 - $customCSS .= imh_6310_replace($js->popupCustomCss);
2145 - $customCSS .= "@media screen and (min-width: 100px) and (max-width: 1366px) {.imh-6310-hover-content-{$ids}-{$counter}{display: none}}";
2146 - } else if($js->elementType == '5') {
2147 - echo "
2148 - <div class='imh-6310-hover-content imh-6310-hover-content-{$ids}-{$counter}'
2149 - data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
2150 - <div class='imh-6310-woocommerce-product'>
2151 - <div class='imh-6310-close-button imh-6310-close-button-mobile'></div>";
2152 - imh_6310_woocommerce_product($js->productIds);
2153 -
2154 - echo "</div>
2155 - </div>";
2156 -
2157 - $customCSS .= "
2158 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-woocommerce-product{
2159 - width: ".esc_attr(isset($js->productBoxWidth) ? $js->productBoxWidth : 500)."px;
2160 - background: ".esc_attr(isset($js->productBoxBgColor) ? $js->productBoxBgColor : 'rgb(255, 255, 255)').";
2161 - padding: 15px 15px 10px;
2162 - border-radius: 5px;
2163 - display: grid;
2164 - grid-template-columns: repeat(".esc_attr(isset($js->productPerRowDesk)&&$js->productPerRowDesk ? $js->productPerRowDesk : 3).", 1fr);
2165 - gap: 15px;
2166 - box-shadow: 0 0 10px #aaa;
2167 - }
2168 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-woocommerce-product-col{
2169 - position: relative;
2170 - display: flex;
2171 - flex-direction: column;
2172 - justify-content: space-between;
2173 - align-items: center;
2174 - border: 1px solid #ccc;
2175 - padding: 15px;
2176 - box-sizing: border-box;
2177 - border-radius: 5px;
2178 - overflow: hidden;
2179 - transition: all 0.5s ease 0s;
2180 - }
2181 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-woocommerce-product-col:hover{
2182 - background: ".esc_attr(isset($js->productBoxHoverColor) && $js->productBoxHoverColor ? $js->productBoxHoverColor : 'rgb(240, 240, 240)').";
2183 - }
2184 - .imh-6310-hover-content-{$ids}-{$counter} .woocommerce-loop-product__title{
2185 - font-size: ".esc_attr(isset($js->productTitleFontSize) && $js->productTitleFontSize ? $js->productTitleFontSize : 18)."px;
2186 - color: ".esc_attr(isset($js->productTitleColor) ? $js->productTitleColor : '#000').";
2187 - }
2188 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-woocommerce-product-col:hover .woocommerce-loop-product__title{
2189 - color: ".esc_attr(isset($js->productTitleHoverColor) ? $js->productTitleHoverColor : '#423831').";
2190 - }
2191 - .imh-6310-hover-content-{$ids}-{$counter} .button{
2192 - padding: 10px 15px !important;
2193 - font-size: .8rem;
2194 - }
2195 - .imh-6310-hover-content-{$ids}-{$counter} del .woocommerce-Price-amount bdi{
2196 - font-size: ".esc_attr(isset($js->productPriceFontSize) ? $js->productPriceFontSize : 16)."px !important;
2197 - line-height: ".(esc_attr(isset($js->productPriceFontSize) && $js->productPriceFontSize ? $js->productPriceFontSize : 16) + 6)."px !important;
2198 - color: ".esc_attr(isset($js->productDisPriceColor) ? $js->productDisPriceColor : 'rgb(255, 0, 0)')." !important;
2199 - text-decoration: line-through !important;
2200 - text-decoration-color: ".esc_attr(isset($js->productDisPriceColor) ? $js->productDisPriceColor : 'rgb(255, 0, 0)')." !important;
2201 - text-decoration-thickness: 3px;
2202 - }
2203 - .imh-6310-hover-content-{$ids}-{$counter} ins .woocommerce-Price-amount *{
2204 - font-size: ".esc_attr(isset($js->productPriceFontSize) ? $js->productPriceFontSize : 16)."px !important;
2205 - color: ".esc_attr(isset($js->productPriceColor) ? $js->productPriceColor : 'rgb(4, 107, 210)')." !important;
2206 - }
2207 - .imh-6310-hover-content-{$ids}-{$counter} .sip-product-control-container a{
2208 - font-size: ".esc_attr(isset($js->productBtnFontSize) ? $js->productBtnFontSize : 18)."px !important;
2209 - color: ".esc_attr(isset($js->productBtnColor) ? $js->productBtnColor : 'rgb(255, 255, 255)')." !important;
2210 - border-color: ".esc_attr(isset($js->productBtnBgColor) ? $js->productBtnBgColor : 'rgb(4, 107, 210)')." !important;
2211 - background-color: ".esc_attr(isset($js->productBtnBgColor) ? $js->productBtnBgColor : 'rgb(4, 107, 210)')." !important;
2212 - margin-top: 7px;
2213 - }
2214 - .imh-6310-hover-content-{$ids}-{$counter} .sip-product-control-container .added_to_cart{
2215 - padding: 7px 15px 6px !important;
2216 - margin-left: 7px !important;
2217 - display: inline-block !important;
2218 - border-radius: 5px !important;
2219 - }
2220 - .imh-6310-hover-content-{$ids}-{$counter} .sip-product-control-container a:hover{
2221 - color: ".esc_attr(isset($js->productBtnHoverColor) ? $js->productBtnHoverColor : 'rgb(245, 245, 245)')." !important;
2222 - border-color: ".esc_attr(isset($js->productBtnBgHoverColor) ? $js->productBtnBgHoverColor : 'rgb(210, 100, 72)')." !important;
2223 - background-color: ".esc_attr(isset($js->productBtnBgHoverColor) ? $js->productBtnBgHoverColor : 'rgb(210, 100, 72)')." !important;
2224 - }
2225 -
2226 -
2227 - ";
2228 - $customCSS .= imh_6310_replace($js->popupCustomCss);
2229 - $customCSS .= "@media screen and (min-width: 100px) and (max-width: 1366px) {
2230 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-woocommerce-product{
2231 - width: calc(98% - {$iPadSize}px);
2232 - margin: 0 calc(1% + ".($iPadSize/2)."px);
2233 - box-sizing: border-box;
2234 - grid-template-columns: repeat(".esc_attr(isset($js->productPerRowMob) && $js->productPerRowMob ? $js->productPerRowMob : 2).", 1fr);
2235 - }
2236 - .imh-6310-hover-content-{$ids}-{$counter} .woocommerce-loop-product__title{
2237 - font-size: ".(esc_attr(isset($js->productTitleFontSize) && $js->productTitleFontSize ? $js->productTitleFontSize : 18) * .8)."px;
2238 - }
2239 - .imh-6310-hover-content-{$ids}-{$counter} .button{
2240 - margin-top: 7px !important;
2241 - }
2242 - .imh-6310-hover-content-{$ids}-{$counter} .add_to_cart_button{
2243 - font-size: ".(esc_attr(isset($js->productBtnFontSize) && $js->productBtnFontSize ? $js->productBtnFontSize : 18) * .8)."px !important;
2244 - }
2245 - }";
2246 - }else if($js->elementType == '6') {
2247 - //Shortcode
2248 - echo "
2249 - <div class='imh-6310-hover-content imh-6310-plugin-shortcode imh-6310-hover-content-{$ids}-{$counter}'
2250 - data-always-show='{$always_show}' data-imh-6310-id='{$ids}-{$counter}' style='display:none;'>
2251 - <div class='imh-6310-template-06-hover-content'>
2252 - <div class='imh-6310-close-button imh-6310-close-button-mobile'></div>
2253 - ".
2254 - (isset($js->pluginShortCode) && $js->pluginShortCode ? do_shortcode($js->pluginShortCode) : 'No ShortCode found')
2255 - ."
2256 - </div>
2257 - </div>";
2258 -
2259 - $customCSS .= "
2260 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-06-hover-content{
2261 - width: 600px;
2262 - background: #FFF;
2263 - padding: 15px;
2264 - }
2265 - @media screen and (max-width: 1366px) {
2266 - .imh-6310-hover-content-{$ids}-{$counter} .imh-6310-template-06-hover-content{
2267 - width: 370px;
2268 - }
2269 - }
2270 - ";
2271 -
2272 - }
2273 -
2274 -
2275 - wp_register_style("imh-6310-custom-" . esc_attr($ids) . "-" . esc_attr($counter) . "-css", "");
2276 - wp_enqueue_style("imh-6310-custom-" . esc_attr($ids) . "-" . esc_attr($counter) . "-css");
2277 - wp_add_inline_style("imh-6310-custom-" . esc_attr($ids) . "-" . esc_attr($counter) . "-css", $customCSS);
1956 + wp_register_script("imh-6310-template-" . esc_attr($counter) . "-js", "");
1957 + wp_enqueue_script("imh-6310-template-" . esc_attr($counter) . "-js");
1958 + wp_add_inline_script("imh-6310-template-" . esc_attr($counter) . "-js", $html);
2278 1959 }
2279 1960
2280 1961
2281 - function imh_6310_create_embedded_code($embeddedCode) {
2282 - if (!$embeddedCode) return;
2283 - $embeddedCode = explode("AABBAA", $embeddedCode);
2284 - $allAttrName = explode("XXYYXX", $embeddedCode[0]);
2285 - $allAttrValue = explode("XXYYXX", $embeddedCode[1]);
2286 -
2287 - $htmlCode = "";
2288 - if (
2289 - count($allAttrName) &&
2290 - count($allAttrValue) &&
2291 - count($allAttrName) == count($allAttrValue)
2292 - ) {
2293 - for ($i = 0; $i < count($allAttrName); $i++) {
2294 - $htmlCode .= " " . $allAttrName[$i] . '="' . $allAttrValue[$i] . '"';
2295 - }
2296 - }
2297 -
2298 - if ($htmlCode) {
2299 - $htmlCode = "<iframe" . $htmlCode . " style='border: 2px solid #FFF !important'></iframe>";
2300 - }
2301 - return $htmlCode;
2302 - }
2303 -
2304 - function imh_6310_woocommerce_product($ids){
2305 - if(!$ids){
2306 - echo "<h3>No product found.</h3>";
2307 - return;
2308 - }
2309 - $ids = explode(',', $ids);
2310 - global $post;
2311 - foreach($ids as $id){
2312 - echo "<div class='imh-6310-woocommerce-product-col'>";
2313 - $post = get_post($id, OBJECT);
2314 - setup_postdata($post);
1962 + function imh_6310_check_field_exists(){
1963 + global $wpdb;
2315 1964
2316 - global $product;
2317 -
2318 - woocommerce_template_loop_product_link_open();
2319 -
2320 - woocommerce_show_product_loop_sale_flash();
2321 - woocommerce_template_loop_product_thumbnail();
2322 -
2323 - woocommerce_template_loop_product_title();
2324 -
2325 - woocommerce_template_loop_price();
2326 -
2327 - woocommerce_template_loop_product_link_close();
2328 -
2329 - echo '<div class="sip-product-control-container">';
2330 - woocommerce_template_loop_add_to_cart();
2331 - echo '<a href="' . get_the_permalink() . '" class="button">' . esc_html('Details', 'image-point') . '</a>';
2332 - echo '</div>';
2333 - echo '</div>';
1965 + $imh_6310_selected_server = imh_6310_get_option('imh_6310_selected_server');
1966 + if(!$imh_6310_selected_server){
1967 + $wpdb->query("DELETE FROM {$wpdb->prefix}options where option_name='imh_6310_selected_server'");
1968 + $wpdb->query("INSERT INTO {$wpdb->prefix}options(option_name, option_value) VALUES ('imh_6310_selected_server', '1')");
2334 1969 }
2335 -
2336 - wp_reset_postdata();
2337 - }
2338 -
2339 - function imh_6310_render_products() {
2340 - if (!class_exists('WooCommerce')) {
2341 - echo '<p>WooCommerce is not active.</p>';
2342 - return;
2343 - }
2344 -
2345 - $products = wc_get_products(['limit' => -1]);
2346 -
2347 - if (empty($products)) {
2348 - echo '<p>No products found.</p>';
2349 - return;
2350 - }
2351 -
2352 - echo '<div class="imh-6310-search-container">';
2353 - echo '<input type="text" id="imh-6310-product-search" placeholder="Type to search for products">';
2354 - echo '<div class="imh-6310-suggestion-list imh-6310-hidden">';
2355 -
2356 - foreach ($products as $product) {
2357 - $image_url = wp_get_attachment_image_url($product->get_image_id(), 'full');
2358 -
2359 - echo "<div class='imh-6310-product-list imh-6310-hidden'
2360 - data-product-id='{$product->get_id()}'
2361 - data-product-img='{$image_url}'>
2362 - {$product->get_name()}
2363 - </div>";
2364 - }
2365 -
2366 - echo '</div>';
2367 - echo '<div class="imh-6310-no-product imh-6310-hidden">No product found.</div>';
2368 - echo '</div>';
2369 - }
1970 + }