PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 3.1.8
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v3.1.8
3.1.13 3.1.12 3.1.11 3.1.10 3.1.9 3.1.8 3.1.7 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 All 122 releases
firebox / Inc / Core / UsageTracking / UsageTracking.php

UsageTracking.php in FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment 3.1.8, at Inc/Core/UsageTracking/UsageTracking.php

395 lines 21.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package FireBox
4 * @version 3.1.8 Free
5 *
6 * @author FirePlugins <info@fireplugins.com>
7 * @link https://www.fireplugins.com
8 * @copyright Copyright © 2026 FirePlugins All Rights Reserved
9 * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
10 */
11
12 namespace FireBox\Core\UsageTracking;
13
14 if (!defined('ABSPATH'))
15 {
16 exit; // Exit if accessed directly.
17 }
18
19 class UsageTracking
20 {
21 private $settings = [];
22
23 private $pluginData = [];
24
25 public function __construct()
26 {
27 $this->settings = get_option('firebox_settings', []);
28 $this->pluginData = new PluginData();
29 }
30
31 public function getData()
32 {
33 global $wpdb;
34
35 $theme_data = wp_get_theme();
36 $database_version = $wpdb->db_version();
37
38 $onboarding_status = $this->getOnboardingStatus();
39
40 $payload = [
41 // Generic Data
42 'url' => home_url(),
43 'email' => get_option('admin_email'),
44 'php_version' => PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION,
45 'wp_version' => get_bloginfo('version'),
46 'database_type' => $this->getDatabaseType($database_version),
47 'database_driver' => $this->getDatabaseDriver(),
48 'database_version' => $database_version,
49 'server_version' => isset($_SERVER['SERVER_SOFTWARE']) ? sanitize_text_field(wp_unslash($_SERVER['SERVER_SOFTWARE'])) : '',
50 'is_debug' => defined('WP_DEBUG') && WP_DEBUG,
51 'is_ssl' => is_ssl(),
52 'is_multisite' => is_multisite(),
53 'is_network_activated' => $this->is_active_for_network(),
54 'is_wpcom' => defined('IS_WPCOM') && IS_WPCOM,
55 'is_wpcom_vip' => (defined('WPCOM_IS_VIP_ENV') && WPCOM_IS_VIP_ENV) || (function_exists('wpcom_is_vip') && wpcom_is_vip()),
56 'is_wp_cache' => defined('WP_CACHE') && WP_CACHE,
57 'sites_count' => $this->get_sites_total(),
58 'active_plugins' => $this->get_active_plugins(),
59 'theme_name' => $theme_data->get('Name'),
60 'theme_version' => $theme_data->get('Version'),
61 'locale' => get_locale(),
62 'timezone_offset' => wp_timezone_string(),
63 // FireBox Specific Data
64 'firebox_version' => FBOX_VERSION,
65 'firebox_license_key' => get_option('firebox_license_key', ''),
66 'firebox_license_type' => FBOX_LICENSE_TYPE,
67 'firebox_license_plan' => FBOX_LICENSE_PLAN,
68 'firebox_license_status' => get_option('firebox_license_status', ''),
69 'firebox_onboarding_status' => $onboarding_status,
70 'firebox_onboarding_completed' => $onboarding_status !== '',
71 'firebox_onboarding_skipped' => $onboarding_status === \FireBox\Core\Admin\Includes\Onboarding::ONBOARDING_STATUS_SKIPPED,
72 'firebox_is_pro' => FBOX_LICENSE_TYPE === 'pro',
73 'firebox_connected_integrations' => $this->getConnectedIntegrations(),
74 'firebox_views' => $this->pluginData->getViews(),
75 'firebox_dimensions' => $this->pluginData->getDimensionsData(),
76 'firebox_campaigns_published' => $this->pluginData->getCampaigns('publish'),
77 'firebox_campaigns_draft' => $this->pluginData->getCampaigns('draft'),
78 'firebox_campaigns_trash' => $this->pluginData->getCampaigns('trash'),
79 'firebox_ttf_draft_sec' => $this->pluginData->getTimeToFirstCampaignDraft(),
80 'firebox_ttf_publish_sec' => $this->pluginData->getTimeToFirstCampaignPublish(),
81 'firebox_submissions' => $this->pluginData->getSubmissions(),
82 'firebox_view_through_revenue' => $this->pluginData->getViewThroughRevenue(),
83 'firebox_click_through_revenue' => $this->pluginData->getClickThroughRevenue(),
84 'firebox_classic_campaigns' => $this->pluginData->getTotalsBySetting('mode', 'popup'),
85 'firebox_mode_slide_in' => $this->pluginData->getTotalsBySetting('mode', 'slide-in'),
86 'firebox_mode_fullscreen' => $this->pluginData->getTotalsBySetting('mode', 'fullscreen'),
87 'firebox_mode_stickybar' => $this->pluginData->getTotalsBySetting('mode', 'stickybar'),
88 'firebox_pageslide_campaigns' => $this->pluginData->getTotalsBySetting('mode', 'pageslide'),
89 'firebox_mode_floating' => $this->pluginData->getTotalsBySetting('mode', 'floating'),
90 'firebox_mode_sidebar' => $this->pluginData->getTotalsBySetting('mode', 'sidebar'),
91 'firebox_embed_campaigns' => $this->pluginData->getTotalsBySetting('mode', 'embed'),
92 'firebox_campaigns_pageload' => $this->pluginData->getTotalsBySetting('triggermethod', 'pageload'),
93 'firebox_campaigns_scroll_depth' => $this->pluginData->getTotalsBySetting('triggermethod', 'pageheight'),
94 'firebox_campaigns_element_visibility' => $this->pluginData->getTotalsBySetting('triggermethod', 'element'),
95 'firebox_campaigns_exit_intent' => $this->pluginData->getTotalsBySetting('triggermethod', 'userleave'),
96 'firebox_campaigns_click' => $this->pluginData->getTotalsBySetting('triggermethod', 'onclick'),
97 'firebox_campaigns_external_link_click' => $this->pluginData->getTotalsBySetting('triggermethod', 'onexternallink'),
98 'firebox_campaigns_hover' => $this->pluginData->getTotalsBySetting('triggermethod', 'elementHover'),
99 'firebox_campaigns_adblock_detect' => $this->pluginData->getTotalsBySetting('triggermethod', 'onAdBlockDetect'),
100 'firebox_campaigns_idle' => $this->pluginData->getTotalsBySetting('triggermethod', 'onIdle'),
101 'firebox_campaigns_floating_button' => $this->pluginData->getTotalsBySetting('triggermethod', 'floatingbutton'),
102 'firebox_campaigns_manual' => $this->pluginData->getTotalsBySetting('triggermethod', 'ondemand'),
103 'firebox_show_frequency_always' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'always'),
104 'firebox_show_frequency_session' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'session'),
105 'firebox_show_frequency_day' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'day'),
106 'firebox_show_frequency_week' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'week'),
107 'firebox_show_frequency_custom' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'custom'),
108 'firebox_cookie_never' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'never'),
109 'firebox_cookie_ever' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'ever'),
110 'firebox_cookie_session' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'session'),
111 'firebox_cookie_custom' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'custom'),
112 'firebox_auto_close' => $this->pluginData->getTotalsBySetting('box_auto_close', 'boolean'),
113 'firebox_auto_focus' => $this->pluginData->getTotalsBySetting('autofocus', 'boolean'),
114 'firebox_close_with_esc' => $this->pluginData->getTotalsBySetting('close_on_esc', 'boolean'),
115 'firebox_display_conditions_all' => $this->pluginData->getTotalsBySetting('display_conditions_type', 'all'),
116 'firebox_display_conditions_mirror' => $this->pluginData->getTotalsBySetting('display_conditions_type', 'mirror'),
117 'firebox_display_conditions_custom' => $this->pluginData->getTotalsBySetting('display_conditions_type', 'custom'),
118 'firebox_campaigns_with_sound' => $this->pluginData->getTotalsBySetting('opening_sound.source', 'cond:not:none'),
119 'firebox_cond_date' => $this->pluginData->getTotalsByCondition('Date\Date'),
120 'firebox_cond_day_of_week' => $this->pluginData->getTotalsByCondition('Date\Day'),
121 'firebox_cond_month' => $this->pluginData->getTotalsByCondition('Date\Month'),
122 'firebox_cond_time' => $this->pluginData->getTotalsByCondition('Date\Time'),
123 'firebox_cond_user' => $this->pluginData->getTotalsByCondition('WP\UserID'),
124 'firebox_cond_menu' => $this->pluginData->getTotalsByCondition('WP\Menu'),
125 'firebox_cond_user_group' => $this->pluginData->getTotalsByCondition('WP\UserGroup'),
126 'firebox_cond_post' => $this->pluginData->getTotalsByCondition('WP\Posts'),
127 'firebox_cond_page' => $this->pluginData->getTotalsByCondition('WP\Pages'),
128 'firebox_cond_post_tag' => $this->pluginData->getTotalsByCondition('WP\Tags'),
129 'firebox_cond_post_category' => $this->pluginData->getTotalsByCondition('WP\Categories'),
130 'firebox_cond_cpt' => $this->pluginData->getTotalsByCondition('WP\CustomPostTypes'),
131 'firebox_cond_homepage' => $this->pluginData->getTotalsByCondition('WP\Homepage'),
132 'firebox_cond_device' => $this->pluginData->getTotalsByCondition('Device'),
133 'firebox_cond_browser' => $this->pluginData->getTotalsByCondition('Browser'),
134 'firebox_cond_os' => $this->pluginData->getTotalsByCondition('OS'),
135 'firebox_cond_city' => $this->pluginData->getTotalsByCondition('Geo\City'),
136 'firebox_cond_country' => $this->pluginData->getTotalsByCondition('Geo\Country'),
137 'firebox_cond_region' => $this->pluginData->getTotalsByCondition('Geo\Region'),
138 'firebox_cond_continent' => $this->pluginData->getTotalsByCondition('Geo\Continent'),
139 'firebox_cond_fb_view_campaign' => $this->pluginData->getTotalsByCondition('FireBox\Popup'),
140 'firebox_cond_fb_submitted_form' => $this->pluginData->getTotalsByCondition('FireBox\Form'),
141 'firebox_cond_edd_products_in_cart' => $this->pluginData->getTotalsByCondition('EDD\CartContainsProducts'),
142 'firebox_cond_edd_cart_items_count' => $this->pluginData->getTotalsByCondition('EDD\CartContainsXProducts'),
143 'firebox_cond_edd_amount_in_cart' => $this->pluginData->getTotalsByCondition('EDD\CartValue'),
144 'firebox_cond_edd_current_product' => $this->pluginData->getTotalsByCondition('EDD\Product'),
145 'firebox_cond_edd_purchased_product' => $this->pluginData->getTotalsByCondition('EDD\PurchasedProduct'),
146 'firebox_cond_edd_last_purchased_date' => $this->pluginData->getTotalsByCondition('EDD\LastPurchaseDate'),
147 'firebox_cond_edd_current_product_price' => $this->pluginData->getTotalsByCondition('EDD\CurrentProductPrice'),
148 'firebox_cond_edd_total_spend' => $this->pluginData->getTotalsByCondition('EDD\TotalSpend'),
149 'firebox_cond_edd_current_product_category' => $this->pluginData->getTotalsByCondition('EDD\Category'),
150 'firebox_cond_edd_category' => $this->pluginData->getTotalsByCondition('EDD\CategoryView'),
151 'firebox_cond_woo_products_in_cart' => $this->pluginData->getTotalsByCondition('WooCommerce\CartContainsProducts'),
152 'firebox_cond_woo_cart_items_count' => $this->pluginData->getTotalsByCondition('WooCommerce\CartContainsXProducts'),
153 'firebox_cond_woo_amount_in_cart' => $this->pluginData->getTotalsByCondition('WooCommerce\CartValue'),
154 'firebox_cond_woo_current_product' => $this->pluginData->getTotalsByCondition('WooCommerce\Product'),
155 'firebox_cond_woo_purchased_product' => $this->pluginData->getTotalsByCondition('WooCommerce\PurchasedProduct'),
156 'firebox_cond_woo_last_purchased_date' => $this->pluginData->getTotalsByCondition('WooCommerce\LastPurchaseDate'),
157 'firebox_cond_woo_current_product_price' => $this->pluginData->getTotalsByCondition('WooCommerce\CurrentProductPrice'),
158 'firebox_cond_woo_total_spend' => $this->pluginData->getTotalsByCondition('WooCommerce\TotalSpend'),
159 'firebox_cond_woo_current_product_category' => $this->pluginData->getTotalsByCondition('WooCommerce\Category'),
160 'firebox_cond_woo_category' => $this->pluginData->getTotalsByCondition('WooCommerce\CategoryView'),
161 'firebox_cond_url' => $this->pluginData->getTotalsByCondition('URL'),
162 'firebox_cond_referrer' => $this->pluginData->getTotalsByCondition('Referrer'),
163 'firebox_cond_ip' => $this->pluginData->getTotalsByCondition('IP'),
164 'firebox_cond_pageviews' => $this->pluginData->getTotalsByCondition('Pageviews'),
165 'firebox_cond_cookies' => $this->pluginData->getTotalsByCondition('Cookie'),
166 'firebox_cond_php' => $this->pluginData->getTotalsByCondition('PHP'),
167 'firebox_cond_wpml_language' => $this->pluginData->getTotalsByCondition('Language'),
168 'firebox_cond_timeonsite' => $this->pluginData->getTotalsByCondition('TimeOnSite'),
169 'firebox_cond_new_returning_visitor' => $this->pluginData->getTotalsByCondition('NewReturningVisitor'),
170 'firebox_actions' => $this->pluginData->getTotalsBySetting('actions', 'cond:not:emptyArray'),
171 'firebox_php_scripts_on_before' => $this->pluginData->getTotalsBySetting('phpscripts.beforerender', 'cond:not:empty'),
172 'firebox_php_scripts_on_after' => $this->pluginData->getTotalsBySetting('phpscripts.afterrender', 'cond:not:empty'),
173 'firebox_php_scripts_on_open' => $this->pluginData->getTotalsBySetting('phpscripts.open', 'cond:not:empty'),
174 'firebox_php_scripts_on_close' => $this->pluginData->getTotalsBySetting('phpscripts.close', 'cond:not:empty'),
175 'firebox_php_scripts_on_form_success' => $this->pluginData->getTotalsBySetting('phpscripts.formsuccess', 'cond:not:empty'),
176 'firebox_custom_css' => $this->pluginData->getTotalsBySetting('customcss', 'cond:not:empty'),
177 'firebox_custom_javascript' => $this->pluginData->getTotalsBySetting('customcode', 'cond:not:empty'),
178 'firebox_test_mode' => $this->pluginData->getTotalsBySetting('testmode', 'boolean'),
179 'firebox_prevent_page_scrollling' => $this->pluginData->getTotalsBySetting('preventpagescroll', 'boolean'),
180 'firebox_settings' => $this->getSettings()
181 ];
182
183 return $payload;
184 }
185
186 private function getDatabaseType($database_version = '')
187 {
188 $database_version = strtolower(trim((string) $database_version));
189 $database_driver = strtolower((string) $this->getDatabaseDriver());
190
191 if (strpos($database_version, 'mariadb') !== false || strpos($database_driver, 'mariadb') !== false)
192 {
193 return 'MariaDB';
194 }
195
196 if (
197 strpos($database_driver, 'mysql') !== false ||
198 strpos($database_driver, 'mysqli') !== false ||
199 strpos($database_driver, 'pdo_mysql') !== false ||
200 strpos($database_driver, 'pdo\\mysql') !== false
201 )
202 {
203 return 'MySQL';
204 }
205
206 if ($database_version !== '')
207 {
208 return 'MySQL';
209 }
210
211 return 'Unknown';
212 }
213
214 private function getDatabaseDriver()
215 {
216 global $wpdb;
217
218 if (is_object($wpdb->dbh))
219 {
220 // mysqli or PDO
221 $extension = get_class($wpdb->dbh);
222 }
223 else
224 {
225 // Unknown sql extension
226 $extension = null;
227 }
228
229 return $extension;
230 }
231
232 private function getSettings()
233 {
234 $excluded_keys = [
235 'api_key',
236 'geo_license_key',
237 'license_key',
238 'cloudflare_turnstile_site_key',
239 'cloudflare_turnstile_secret_key',
240 'recaptcha_v2_checkbox_site_key',
241 'recaptcha_v2_checkbox_secret_key',
242 'recaptcha_v2_invisible_site_key',
243 'recaptcha_v2_invisible_secret_key',
244 'recaptcha_v3_site_key',
245 'recaptcha_v3_secret_key',
246 'hcaptcha_site_key',
247 'hcaptcha_secret_key',
248 'openai_api_key',
249 'stripe_test_secret_key',
250 'stripe_test_publishable_key',
251 'stripe_live_secret_key',
252 'stripe_live_publishable_key',
253 'stripe_webhooks_secret_test',
254 'stripe_webhooks_secret_live',
255 'stripe_webhooks_id_test',
256 'stripe_webhooks_id_live',
257 ];
258
259 $excluded_keys = array_merge(
260 $excluded_keys,
261 \FireBox\Core\Helpers\Integrations::getSettingsKeys()
262 );
263
264 return array_diff_key(
265 $this->settings,
266 array_flip($excluded_keys)
267 );
268 }
269
270 /**
271 * Returns currently connected integrations.
272 *
273 * @return array
274 */
275 private function getConnectedIntegrations()
276 {
277 $connected_integrations = [];
278 $integrations = \FireBox\Core\Helpers\Integrations::getSettingsManagedIntegrations();
279 if (!is_array($integrations))
280 {
281 return $connected_integrations;
282 }
283
284 foreach ($integrations as $integration)
285 {
286 if (!is_array($integration) || empty($integration['slug']) || empty($integration['connected']))
287 {
288 continue;
289 }
290
291 $connected_integrations[] = (string) $integration['slug'];
292 }
293
294 return $connected_integrations;
295 }
296
297 /**
298 * Determines whether the plugin is active for the entire network.
299 *
300 * @return bool
301 */
302 private function is_active_for_network()
303 {
304 // Stop if not multisite
305 if (!is_multisite())
306 {
307 return false;
308 }
309
310 // Get all active plugins
311 $plugins = get_site_option('active_sitewide_plugins');
312
313 // Stop if the plugin is active for the entire network
314 if (isset($plugins[plugin_basename(FBOX_PLUGIN_BASE_FILE)]))
315 {
316 return true;
317 }
318
319 return false;
320 }
321
322 /**
323 * Total number of sites.
324 *
325 * @return int
326 */
327 private function get_sites_total()
328 {
329 return function_exists('get_blog_count') ? (int) get_blog_count() : 1;
330 }
331
332 /**
333 * Get the list of active plugins.
334 *
335 * @return array
336 */
337 private function get_active_plugins()
338 {
339 if (!function_exists('get_plugins'))
340 {
341 include ABSPATH . '/wp-admin/includes/plugin.php';
342 }
343
344 $active = is_multisite() ?
345 array_merge(get_option('active_plugins', []), array_flip(get_site_option('active_sitewide_plugins', []))) :
346 get_option('active_plugins', []);
347 $plugins = array_intersect_key(get_plugins(), array_flip($active));
348
349 return array_map(
350 static function ($plugin)
351 {
352 if (isset($plugin['Version']))
353 {
354 return $plugin['Version'];
355 }
356
357 return 'Not Set';
358 },
359 $plugins
360 );
361 }
362
363 /**
364 * Return the User Agent used in the API request.
365 *
366 * @return string
367 */
368 public function get_user_agent()
369 {
370 return 'FireBox/' . FBOX_VERSION . '; ' . get_bloginfo('url');
371 }
372
373 /**
374 * Returns onboarding status (completed|skipped|empty).
375 *
376 * @return string
377 */
378 private function getOnboardingStatus()
379 {
380 $status = strtolower(trim((string) get_option('firebox_onboarding_completed', '')));
381 if ($status === '')
382 {
383 return '';
384 }
385
386 if ($status === \FireBox\Core\Admin\Includes\Onboarding::ONBOARDING_STATUS_SKIPPED)
387 {
388 return \FireBox\Core\Admin\Includes\Onboarding::ONBOARDING_STATUS_SKIPPED;
389 }
390
391 // Treat any non-empty legacy value (e.g. version numbers) as completed.
392 return \FireBox\Core\Admin\Includes\Onboarding::ONBOARDING_STATUS_COMPLETED;
393 }
394 }
395