PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 3.1.10
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v3.1.10
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 / FB / BoxBlocksParser.php

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

171 lines 4.2 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.10 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\FB;
13
14 if (!defined('ABSPATH'))
15 {
16 exit; // Exit if accessed directly.
17 }
18
19 class BoxBlocksParser
20 {
21 public function __construct()
22 {
23 add_filter('render_block', [$this, 'parse_block'], 10, 2);
24 }
25
26 /**
27 * Single entry point for all render_block work on this class. Bails immediately
28 * when the block carries none of our FireBox attributes, before any preg_ /
29 * get_post_type() work runs for every block on the page.
30 *
31 * @param string $block_content
32 * @param array $block
33 *
34 * @return string
35 */
36 public function parse_block($block_content, $block)
37 {
38 if (empty($block['attrs']) || !$this->hasFireBoxAttrs($block['attrs']))
39 {
40 return $block_content;
41 }
42
43 $block_content = $this->maybe_load_block_extension_script($block_content, $block);
44 $block_content = $this->modify_block_output($block_content, $block);
45
46 return $block_content;
47 }
48
49 /**
50 * Whether the block's attributes contain any FireBox-specific key.
51 *
52 * @param array $attrs
53 *
54 * @return bool
55 */
56 private function hasFireBoxAttrs($attrs)
57 {
58 return isset($attrs['dataFBoxOnClick']) || isset($attrs['dataFBoxOnClickURLAddParameters']);
59 }
60
61 public function maybe_load_block_extension_script($block_content, $block)
62 {
63 if (isset($block['attrs']['dataFBoxOnClick']) && in_array($block['attrs']['dataFBoxOnClick'], ['copy_clipboard', 'download_file']))
64 {
65 wp_enqueue_style(
66 'firebox-block-extensions',
67 FBOX_MEDIA_PUBLIC_URL . 'css/block_extensions.css',
68 [],
69 FBOX_VERSION
70 );
71 wp_enqueue_script(
72 'firebox-block-extensions',
73 FBOX_MEDIA_PUBLIC_URL . 'js/block_extensions.js',
74 [],
75 FBOX_VERSION,
76 true
77 );
78 }
79
80 return $block_content;
81 }
82
83 /**
84 * Filters the block output by appending out custom data attributes
85 * on our supported blocks
86 *
87 * @param string $block_content
88 * @param array $block
89 *
90 * @return string
91 */
92 public function modify_block_output($block_content, $block)
93 {
94 $atts = $this->getBlockAttributes($block);
95 if (!$atts['utmParamsEnabled'])
96 {
97 return $block_content;
98 }
99
100 if (!isset($block['blockName']))
101 {
102 return $block_content;
103 }
104
105 $blockName = $block['blockName'];
106
107 $parsable_blocks = [
108 'firebox/button',
109 'firebox/image',
110 'core/button',
111 'core/image'
112 ];
113
114 if (!in_array($blockName, $parsable_blocks))
115 {
116 return $block_content;
117 }
118
119 // Check if href attribute contains ? then prefix is & else prefix is ?, use regex
120 $utmPrefix = preg_match('/href="([^"]*)\?/', $block_content) ? '&' : '?';
121
122 // Find utm_content
123 $utmContent = '';
124 if ($blockName === 'core/button')
125 {
126 $utmContent = trim(wp_strip_all_tags($block['innerHTML']));
127 }
128 else if ($blockName === 'firebox/button')
129 {
130 $utmContent = isset($block['attrs']['text']) ? trim(wp_strip_all_tags($block['attrs']['text'])) : '';
131 }
132 else if ($blockName === 'core/image')
133 {
134 // Get the src attribute value from $block['innerHTML'] using regex
135 $utmContent = preg_match('/src="([^"]*)"/', $block['innerHTML'], $matches) ? $matches[1] : '';
136 }
137 else if ($blockName === 'firebox/image')
138 {
139 $utmContent = isset($block['attrs']['image']['desktop']['url']) ? $block['attrs']['image']['desktop']['url'] : '';
140 }
141
142 // Get the UTM Parameters
143 $utmParams = $utmPrefix . 'utm_source=' . get_post_type() . '&utm_medium=' . $blockName . '&utm_campaign=' . get_the_title() . '&utm_content=' . $utmContent;
144
145 // Find the href attribute and append to it the utm params
146 $block_content = preg_replace('/href="([^"]*)"/', 'href="$1' . $utmParams . '"', $block_content);
147
148 return $block_content;
149 }
150
151 /**
152 * Retrieves the block attributes
153 *
154 * @param array $block
155 *
156 * @return array
157 */
158 private function getBlockAttributes($block)
159 {
160 $atts = [
161 'utmParamsEnabled' => false
162 ];
163
164 if (isset($block['attrs']['dataFBoxOnClickURLAddParameters']) && $block['attrs']['dataFBoxOnClickURLAddParameters'])
165 {
166 $atts['utmParamsEnabled'] = true;
167 }
168
169 return $atts;
170 }
171 }