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 +62 -44 1.0.3 → 3.1.14 View file →
@@ -1,12 +1,12 @@
1 1 <?php
2 2 /**
3 3 * @package FireBox
4 - * @version 1.0.3 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 © 2021 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;
@@ -21,31 +21,8 @@
21 21
22 22 class Boxes
23 23 {
24 24 /**
25 - * A box instance
26 - *
27 - * @var Box
28 - */
29 - protected $box;
30 -
31 - /**
32 - * Factory
33 - *
34 - * @var Factory
35 - */
36 - protected $factory;
37 -
38 - public function __construct($box = null, $factory = null)
39 - {
40 - if (!$factory)
41 - {
42 - $factory = new \FPFramework\Base\Factory();
43 - }
44 - $this->factory = $factory;
45 - }
46 -
47 - /**
48 25 * Render boxes
49 26 *
50 27 * @return string
51 28 */
@@ -50,19 +27,32 @@
50 27 * @return string
51 28 */
52 29 public function render()
53 30 {
54 - if (!$boxes_query = BoxHelper::getAllBoxesWPQuery())
31 + if (!$boxes = BoxHelper::getAllBoxes())
55 32 {
56 33 return;
57 34 }
58 35
59 - if (!method_exists($boxes_query, 'have_posts') || (method_exists($boxes_query, 'have_posts') && !$boxes_query->have_posts()))
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))
60 44 {
61 - return;
62 - }
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 + }
63 53
64 - return $this->renderAll($boxes_query);
54 + return $this->renderAll($boxes);
65 55 }
66 56
67 57 /**
68 58 * Renders all boxes
@@ -73,33 +63,62 @@
73 63 */
74 64 public function renderAll($boxes)
75 65 {
76 66 $html = '';
77 -
78 - // handle WP_Query boxes loop
79 - if (isset($boxes->posts))
67 +
68 + if ($boxes instanceof \WP_Query)
80 69 {
81 - foreach ($boxes->posts as $box)
70 + if (!$boxes->have_posts())
82 71 {
72 + return;
73 + }
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
81 + while ($boxes->have_posts())
82 + {
83 83 $boxes->the_post();
84 84
85 - $this->prepare($box);
85 + global $post;
86 86
87 - $html .= $this->get_output($box);
87 + $this->prepare($post);
88 +
89 + // If the mode is embed, abort.
90 + if ($post->params->get('mode') == 'embed')
91 + {
92 + continue;
93 + }
94 +
95 + $html .= $this->get_output($post);
88 96 }
89 - wp_reset_query();
97 +
98 + // Reset post data
99 + wp_reset_postdata();
100 +
101 + // Restore global state
102 + $post = $originalPost;
103 + $authordata = $originalAuthorData;
90 104 }
91 - else
92 - // handle boxes array
105 + else if (is_array($boxes))
93 106 {
94 107 foreach ($boxes as $box)
95 108 {
96 109 $this->prepare($box);
110 +
111 + // If the mode is embed, abort.
112 + if ($box->params->get('mode') == 'embed')
113 + {
114 + continue;
115 + }
97 116
98 117 $html .= $this->get_output($box);
99 118 }
100 119 }
101 -
120 +
102 121 return $html;
103 122 }
104 123
105 124 /**
@@ -110,10 +129,9 @@
110 129 * @return void
111 130 */
112 131 private function prepare(&$box)
113 132 {
114 - // get meta options for box
115 - $meta = get_post_meta($box->ID, 'fpframework_meta_settings', true);
133 + $meta = BoxHelper::getMeta($box->ID);
116 134 $box->params = new Registry($meta);
117 135 }
118 136
119 137 /**
@@ -124,9 +142,9 @@
124 142 * @return string
125 143 */
126 144 private function get_output($box)
127 145 {
128 - $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'));
129 147
130 148 $testmode = $box->params->get('testmode', false);
131 149
132 150 // if box is in test mode only logged-in admin users can see it.
@@ -134,7 +152,7 @@
134 152 {
135 153 return '';
136 154 }
137 155
138 - return firebox()->box->render($box);
156 + return firebox()->box->setBox($box)->render();
139 157 }
140 158 }