PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 3.1.14
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v3.1.14
3.1.14 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 All 123 releases
← All changes | Inc/Core/FB/Boxes.php +48 -8 1.1.0 → 3.1.14 View file →
@@ -1,12 +1,12 @@
1 1 <?php
2 2 /**
3 3 * @package FireBox
4 - * @version 1.1.0 Free
4 + * @version 3.1.14 Free
5 5 *
6 6 * @author FirePlugins <[email protected]>
7 7 * @link https://www.fireplugins.com
8 - * @copyright Copyright © 2022 FirePlugins All Rights Reserved
8 + * @copyright Copyright © 2026 FirePlugins All Rights Reserved
9 9 * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
10 10 */
11 11
12 12 namespace FireBox\Core\FB;
@@ -32,8 +32,26 @@
32 32 {
33 33 return;
34 34 }
35 35
36 + // Session-dependent conditions (Pageviews, Time on Site) are stamped and evaluated
37 + // in the browser, so the stamper must run on every page — not just pages where a
38 + // campaign renders — for the pageview counter and session start to stay accurate.
39 + //
40 + // On pages where a campaign does render, the full runtime already contains the
41 + // stamper, so only the standalone ~1 KB script is needed elsewhere. The priority
42 + // runs late, after the per-box enqueues added from Box::render().
43 + if (BoxHelper::sessionConditionsInUse($boxes))
44 + {
45 + add_action('wp_enqueue_scripts', function()
46 + {
47 + if (!wp_script_is('firebox-main', 'enqueued'))
48 + {
49 + wp_enqueue_script('firebox-session-stamp');
50 + }
51 + }, 100);
52 + }
53 +
36 54 return $this->renderAll($boxes);
37 55 }
38 56
39 57 /**
@@ -45,9 +63,9 @@
45 63 */
46 64 public function renderAll($boxes)
47 65 {
48 66 $html = '';
49 -
67 +
50 68 if ($boxes instanceof \WP_Query)
51 69 {
52 70 if (!$boxes->have_posts())
53 71 {
@@ -52,9 +70,15 @@
52 70 if (!$boxes->have_posts())
53 71 {
54 72 return;
55 73 }
56 -
74 +
75 + // Backup global state
76 + global $post, $authordata;
77 + $originalPost = $post;
78 + $originalAuthorData = $authordata;
79 +
80 + // Setup the post data for our custom query
57 81 while ($boxes->have_posts())
58 82 {
59 83 $boxes->the_post();
60 84
@@ -60,13 +84,24 @@
60 84
61 85 global $post;
62 86
63 87 $this->prepare($post);
88 +
89 + // If the mode is embed, abort.
90 + if ($post->params->get('mode') == 'embed')
91 + {
92 + continue;
93 + }
64 94
65 95 $html .= $this->get_output($post);
66 96 }
97 +
98 + // Reset post data
99 + wp_reset_postdata();
67 100
68 - wp_reset_postdata();
101 + // Restore global state
102 + $post = $originalPost;
103 + $authordata = $originalAuthorData;
69 104 }
70 105 else if (is_array($boxes))
71 106 {
72 107 foreach ($boxes as $box)
@@ -71,8 +106,14 @@
71 106 {
72 107 foreach ($boxes as $box)
73 108 {
74 109 $this->prepare($box);
110 +
111 + // If the mode is embed, abort.
112 + if ($box->params->get('mode') == 'embed')
113 + {
114 + continue;
115 + }
75 116
76 117 $html .= $this->get_output($box);
77 118 }
78 119 }
@@ -88,10 +129,9 @@
88 129 * @return void
89 130 */
90 131 private function prepare(&$box)
91 132 {
92 - // get meta options for box
93 - $meta = get_post_meta($box->ID, 'fpframework_meta_settings', true);
133 + $meta = BoxHelper::getMeta($box->ID);
94 134 $box->params = new Registry($meta);
95 135 }
96 136
97 137 /**
@@ -102,9 +142,9 @@
102 142 * @return string
103 143 */
104 144 private function get_output($box)
105 145 {
106 - $logged_and_admin = (is_user_logged_in() && current_user_can('manage_options'));
146 + $logged_and_admin = (is_user_logged_in() && current_user_can('edit_fireboxes'));
107 147
108 148 $testmode = $box->params->get('testmode', false);
109 149
110 150 // if box is in test mode only logged-in admin users can see it.