PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 3.1.5
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v3.1.5
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.5, at Inc/Core/UsageTracking/UsageTracking.php

393 lines 20.8 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.5 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_submissions' => $this->pluginData->getSubmissions(),
80 'firebox_view_through_revenue' => $this->pluginData->getViewThroughRevenue(),
81 'firebox_click_through_revenue' => $this->pluginData->getClickThroughRevenue(),
82 'firebox_classic_campaigns' => $this->pluginData->getTotalsBySetting('mode', 'popup'),
83 'firebox_mode_slide_in' => $this->pluginData->getTotalsBySetting('mode', 'slide-in'),
84 'firebox_mode_fullscreen' => $this->pluginData->getTotalsBySetting('mode', 'fullscreen'),
85 'firebox_mode_stickybar' => $this->pluginData->getTotalsBySetting('mode', 'stickybar'),
86 'firebox_pageslide_campaigns' => $this->pluginData->getTotalsBySetting('mode', 'pageslide'),
87 'firebox_mode_floating' => $this->pluginData->getTotalsBySetting('mode', 'floating'),
88 'firebox_mode_sidebar' => $this->pluginData->getTotalsBySetting('mode', 'sidebar'),
89 'firebox_embed_campaigns' => $this->pluginData->getTotalsBySetting('mode', 'embed'),
90 'firebox_campaigns_pageload' => $this->pluginData->getTotalsBySetting('triggermethod', 'pageload'),
91 'firebox_campaigns_scroll_depth' => $this->pluginData->getTotalsBySetting('triggermethod', 'pageheight'),
92 'firebox_campaigns_element_visibility' => $this->pluginData->getTotalsBySetting('triggermethod', 'element'),
93 'firebox_campaigns_exit_intent' => $this->pluginData->getTotalsBySetting('triggermethod', 'userleave'),
94 'firebox_campaigns_click' => $this->pluginData->getTotalsBySetting('triggermethod', 'onclick'),
95 'firebox_campaigns_external_link_click' => $this->pluginData->getTotalsBySetting('triggermethod', 'onexternallink'),
96 'firebox_campaigns_hover' => $this->pluginData->getTotalsBySetting('triggermethod', 'elementHover'),
97 'firebox_campaigns_adblock_detect' => $this->pluginData->getTotalsBySetting('triggermethod', 'onAdBlockDetect'),
98 'firebox_campaigns_idle' => $this->pluginData->getTotalsBySetting('triggermethod', 'onIdle'),
99 'firebox_campaigns_floating_button' => $this->pluginData->getTotalsBySetting('triggermethod', 'floatingbutton'),
100 'firebox_campaigns_manual' => $this->pluginData->getTotalsBySetting('triggermethod', 'ondemand'),
101 'firebox_show_frequency_always' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'always'),
102 'firebox_show_frequency_session' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'session'),
103 'firebox_show_frequency_day' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'day'),
104 'firebox_show_frequency_week' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'week'),
105 'firebox_show_frequency_custom' => $this->pluginData->getTotalsBySetting('assign_impressions_param_type', 'custom'),
106 'firebox_cookie_never' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'never'),
107 'firebox_cookie_ever' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'ever'),
108 'firebox_cookie_session' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'session'),
109 'firebox_cookie_custom' => $this->pluginData->getTotalsBySetting('assign_cookietype', 'custom'),
110 'firebox_auto_close' => $this->pluginData->getTotalsBySetting('box_auto_close', 'boolean'),
111 'firebox_auto_focus' => $this->pluginData->getTotalsBySetting('autofocus', 'boolean'),
112 'firebox_close_with_esc' => $this->pluginData->getTotalsBySetting('close_on_esc', 'boolean'),
113 'firebox_display_conditions_all' => $this->pluginData->getTotalsBySetting('display_conditions_type', 'all'),
114 'firebox_display_conditions_mirror' => $this->pluginData->getTotalsBySetting('display_conditions_type', 'mirror'),
115 'firebox_display_conditions_custom' => $this->pluginData->getTotalsBySetting('display_conditions_type', 'custom'),
116 'firebox_campaigns_with_sound' => $this->pluginData->getTotalsBySetting('opening_sound.source', 'cond:not:none'),
117 'firebox_cond_date' => $this->pluginData->getTotalsByCondition('Date\Date'),
118 'firebox_cond_day_of_week' => $this->pluginData->getTotalsByCondition('Date\Day'),
119 'firebox_cond_month' => $this->pluginData->getTotalsByCondition('Date\Month'),
120 'firebox_cond_time' => $this->pluginData->getTotalsByCondition('Date\Time'),
121 'firebox_cond_user' => $this->pluginData->getTotalsByCondition('WP\UserID'),
122 'firebox_cond_menu' => $this->pluginData->getTotalsByCondition('WP\Menu'),
123 'firebox_cond_user_group' => $this->pluginData->getTotalsByCondition('WP\UserGroup'),
124 'firebox_cond_post' => $this->pluginData->getTotalsByCondition('WP\Posts'),
125 'firebox_cond_page' => $this->pluginData->getTotalsByCondition('WP\Pages'),
126 'firebox_cond_post_tag' => $this->pluginData->getTotalsByCondition('WP\Tags'),
127 'firebox_cond_post_category' => $this->pluginData->getTotalsByCondition('WP\Categories'),
128 'firebox_cond_cpt' => $this->pluginData->getTotalsByCondition('WP\CustomPostTypes'),
129 'firebox_cond_homepage' => $this->pluginData->getTotalsByCondition('WP\Homepage'),
130 'firebox_cond_device' => $this->pluginData->getTotalsByCondition('Device'),
131 'firebox_cond_browser' => $this->pluginData->getTotalsByCondition('Browser'),
132 'firebox_cond_os' => $this->pluginData->getTotalsByCondition('OS'),
133 'firebox_cond_city' => $this->pluginData->getTotalsByCondition('Geo\City'),
134 'firebox_cond_country' => $this->pluginData->getTotalsByCondition('Geo\Country'),
135 'firebox_cond_region' => $this->pluginData->getTotalsByCondition('Geo\Region'),
136 'firebox_cond_continent' => $this->pluginData->getTotalsByCondition('Geo\Continent'),
137 'firebox_cond_fb_view_campaign' => $this->pluginData->getTotalsByCondition('FireBox\Popup'),
138 'firebox_cond_fb_submitted_form' => $this->pluginData->getTotalsByCondition('FireBox\Form'),
139 'firebox_cond_edd_products_in_cart' => $this->pluginData->getTotalsByCondition('EDD\CartContainsProducts'),
140 'firebox_cond_edd_cart_items_count' => $this->pluginData->getTotalsByCondition('EDD\CartContainsXProducts'),
141 'firebox_cond_edd_amount_in_cart' => $this->pluginData->getTotalsByCondition('EDD\CartValue'),
142 'firebox_cond_edd_current_product' => $this->pluginData->getTotalsByCondition('EDD\Product'),
143 'firebox_cond_edd_purchased_product' => $this->pluginData->getTotalsByCondition('EDD\PurchasedProduct'),
144 'firebox_cond_edd_last_purchased_date' => $this->pluginData->getTotalsByCondition('EDD\LastPurchaseDate'),
145 'firebox_cond_edd_current_product_price' => $this->pluginData->getTotalsByCondition('EDD\CurrentProductPrice'),
146 'firebox_cond_edd_total_spend' => $this->pluginData->getTotalsByCondition('EDD\TotalSpend'),
147 'firebox_cond_edd_current_product_category' => $this->pluginData->getTotalsByCondition('EDD\Category'),
148 'firebox_cond_edd_category' => $this->pluginData->getTotalsByCondition('EDD\CategoryView'),
149 'firebox_cond_woo_products_in_cart' => $this->pluginData->getTotalsByCondition('WooCommerce\CartContainsProducts'),
150 'firebox_cond_woo_cart_items_count' => $this->pluginData->getTotalsByCondition('WooCommerce\CartContainsXProducts'),
151 'firebox_cond_woo_amount_in_cart' => $this->pluginData->getTotalsByCondition('WooCommerce\CartValue'),
152 'firebox_cond_woo_current_product' => $this->pluginData->getTotalsByCondition('WooCommerce\Product'),
153 'firebox_cond_woo_purchased_product' => $this->pluginData->getTotalsByCondition('WooCommerce\PurchasedProduct'),
154 'firebox_cond_woo_last_purchased_date' => $this->pluginData->getTotalsByCondition('WooCommerce\LastPurchaseDate'),
155 'firebox_cond_woo_current_product_price' => $this->pluginData->getTotalsByCondition('WooCommerce\CurrentProductPrice'),
156 'firebox_cond_woo_total_spend' => $this->pluginData->getTotalsByCondition('WooCommerce\TotalSpend'),
157 'firebox_cond_woo_current_product_category' => $this->pluginData->getTotalsByCondition('WooCommerce\Category'),
158 'firebox_cond_woo_category' => $this->pluginData->getTotalsByCondition('WooCommerce\CategoryView'),
159 'firebox_cond_url' => $this->pluginData->getTotalsByCondition('URL'),
160 'firebox_cond_referrer' => $this->pluginData->getTotalsByCondition('Referrer'),
161 'firebox_cond_ip' => $this->pluginData->getTotalsByCondition('IP'),
162 'firebox_cond_pageviews' => $this->pluginData->getTotalsByCondition('Pageviews'),
163 'firebox_cond_cookies' => $this->pluginData->getTotalsByCondition('Cookie'),
164 'firebox_cond_php' => $this->pluginData->getTotalsByCondition('PHP'),
165 'firebox_cond_wpml_language' => $this->pluginData->getTotalsByCondition('Language'),
166 'firebox_cond_timeonsite' => $this->pluginData->getTotalsByCondition('TimeOnSite'),
167 'firebox_cond_new_returning_visitor' => $this->pluginData->getTotalsByCondition('NewReturningVisitor'),
168 'firebox_actions' => $this->pluginData->getTotalsBySetting('actions', 'cond:not:emptyArray'),
169 'firebox_php_scripts_on_before' => $this->pluginData->getTotalsBySetting('phpscripts.beforerender', 'cond:not:empty'),
170 'firebox_php_scripts_on_after' => $this->pluginData->getTotalsBySetting('phpscripts.afterrender', 'cond:not:empty'),
171 'firebox_php_scripts_on_open' => $this->pluginData->getTotalsBySetting('phpscripts.open', 'cond:not:empty'),
172 'firebox_php_scripts_on_close' => $this->pluginData->getTotalsBySetting('phpscripts.close', 'cond:not:empty'),
173 'firebox_php_scripts_on_form_success' => $this->pluginData->getTotalsBySetting('phpscripts.formsuccess', 'cond:not:empty'),
174 'firebox_custom_css' => $this->pluginData->getTotalsBySetting('customcss', 'cond:not:empty'),
175 'firebox_custom_javascript' => $this->pluginData->getTotalsBySetting('customcode', 'cond:not:empty'),
176 'firebox_test_mode' => $this->pluginData->getTotalsBySetting('testmode', 'boolean'),
177 'firebox_prevent_page_scrollling' => $this->pluginData->getTotalsBySetting('preventpagescroll', 'boolean'),
178 'firebox_settings' => $this->getSettings()
179 ];
180
181 return $payload;
182 }
183
184 private function getDatabaseType($database_version = '')
185 {
186 $database_version = strtolower(trim((string) $database_version));
187 $database_driver = strtolower((string) $this->getDatabaseDriver());
188
189 if (strpos($database_version, 'mariadb') !== false || strpos($database_driver, 'mariadb') !== false)
190 {
191 return 'MariaDB';
192 }
193
194 if (
195 strpos($database_driver, 'mysql') !== false ||
196 strpos($database_driver, 'mysqli') !== false ||
197 strpos($database_driver, 'pdo_mysql') !== false ||
198 strpos($database_driver, 'pdo\\mysql') !== false
199 )
200 {
201 return 'MySQL';
202 }
203
204 if ($database_version !== '')
205 {
206 return 'MySQL';
207 }
208
209 return 'Unknown';
210 }
211
212 private function getDatabaseDriver()
213 {
214 global $wpdb;
215
216 if (is_object($wpdb->dbh))
217 {
218 // mysqli or PDO
219 $extension = get_class($wpdb->dbh);
220 }
221 else
222 {
223 // Unknown sql extension
224 $extension = null;
225 }
226
227 return $extension;
228 }
229
230 private function getSettings()
231 {
232 $excluded_keys = [
233 'api_key',
234 'geo_license_key',
235 'license_key',
236 'cloudflare_turnstile_site_key',
237 'cloudflare_turnstile_secret_key',
238 'recaptcha_v2_checkbox_site_key',
239 'recaptcha_v2_checkbox_secret_key',
240 'recaptcha_v2_invisible_site_key',
241 'recaptcha_v2_invisible_secret_key',
242 'recaptcha_v3_site_key',
243 'recaptcha_v3_secret_key',
244 'hcaptcha_site_key',
245 'hcaptcha_secret_key',
246 'openai_api_key',
247 'stripe_test_secret_key',
248 'stripe_test_publishable_key',
249 'stripe_live_secret_key',
250 'stripe_live_publishable_key',
251 'stripe_webhooks_secret_test',
252 'stripe_webhooks_secret_live',
253 'stripe_webhooks_id_test',
254 'stripe_webhooks_id_live',
255 ];
256
257 $excluded_keys = array_merge(
258 $excluded_keys,
259 \FireBox\Core\Helpers\Integrations::getSettingsKeys()
260 );
261
262 return array_diff_key(
263 $this->settings,
264 array_flip($excluded_keys)
265 );
266 }
267
268 /**
269 * Returns currently connected integrations.
270 *
271 * @return array
272 */
273 private function getConnectedIntegrations()
274 {
275 $connected_integrations = [];
276 $integrations = \FireBox\Core\Helpers\Integrations::getSettingsManagedIntegrations();
277 if (!is_array($integrations))
278 {
279 return $connected_integrations;
280 }
281
282 foreach ($integrations as $integration)
283 {
284 if (!is_array($integration) || empty($integration['slug']) || empty($integration['connected']))
285 {
286 continue;
287 }
288
289 $connected_integrations[] = (string) $integration['slug'];
290 }
291
292 return $connected_integrations;
293 }
294
295 /**
296 * Determines whether the plugin is active for the entire network.
297 *
298 * @return bool
299 */
300 private function is_active_for_network()
301 {
302 // Stop if not multisite
303 if (!is_multisite())
304 {
305 return false;
306 }
307
308 // Get all active plugins
309 $plugins = get_site_option('active_sitewide_plugins');
310
311 // Stop if the plugin is active for the entire network
312 if (isset($plugins[plugin_basename(FBOX_PLUGIN_BASE_FILE)]))
313 {
314 return true;
315 }
316
317 return false;
318 }
319
320 /**
321 * Total number of sites.
322 *
323 * @return int
324 */
325 private function get_sites_total()
326 {
327 return function_exists('get_blog_count') ? (int) get_blog_count() : 1;
328 }
329
330 /**
331 * Get the list of active plugins.
332 *
333 * @return array
334 */
335 private function get_active_plugins()
336 {
337 if (!function_exists('get_plugins'))
338 {
339 include ABSPATH . '/wp-admin/includes/plugin.php';
340 }
341
342 $active = is_multisite() ?
343 array_merge(get_option('active_plugins', []), array_flip(get_site_option('active_sitewide_plugins', []))) :
344 get_option('active_plugins', []);
345 $plugins = array_intersect_key(get_plugins(), array_flip($active));
346
347 return array_map(
348 static function ($plugin)
349 {
350 if (isset($plugin['Version']))
351 {
352 return $plugin['Version'];
353 }
354
355 return 'Not Set';
356 },
357 $plugins
358 );
359 }
360
361 /**
362 * Return the User Agent used in the API request.
363 *
364 * @return string
365 */
366 public function get_user_agent()
367 {
368 return 'FireBox/' . FBOX_VERSION . '; ' . get_bloginfo('url');
369 }
370
371 /**
372 * Returns onboarding status (completed|skipped|empty).
373 *
374 * @return string
375 */
376 private function getOnboardingStatus()
377 {
378 $status = strtolower(trim((string) get_option('firebox_onboarding_completed', '')));
379 if ($status === '')
380 {
381 return '';
382 }
383
384 if ($status === \FireBox\Core\Admin\Includes\Onboarding::ONBOARDING_STATUS_SKIPPED)
385 {
386 return \FireBox\Core\Admin\Includes\Onboarding::ONBOARDING_STATUS_SKIPPED;
387 }
388
389 // Treat any non-empty legacy value (e.g. version numbers) as completed.
390 return \FireBox\Core\Admin\Includes\Onboarding::ONBOARDING_STATUS_COMPLETED;
391 }
392 }
393