PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 1.0.10
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v1.0.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 1.0.10, at Inc/Core/FB/BoxBlocksParser.php

157 lines 3.9 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 1.0.10 Free
5 *
6 * @author FirePlugins <info@fireplugins.com>
7 * @link https://www.fireplugins.com
8 * @copyright Copyright © 2022 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 // filter the post content by setting supported block attributes
24 add_filter('render_block', [$this, 'modify_block_output'], 10, 2);
25 }
26
27 /**
28 * Filters the block output by appending out custom data attributes
29 * on our supported blocks
30 *
31 * @param string $block_content
32 * @param array $block
33 *
34 * @return string
35 */
36 public function modify_block_output($block_content, $block)
37 {
38 if (!isset($block['blockName']))
39 {
40 return $block_content;
41 }
42
43 $blockName = $block['blockName'];
44
45 $parsable_blocks = [
46 'core/buttons',
47 'core/image'
48 ];
49
50 if (!in_array($blockName, $parsable_blocks))
51 {
52 return $block_content;
53 }
54
55 /**
56 * Handle Core Buttons Block
57 */
58 if ($blockName == 'core/buttons')
59 {
60 $buttons = isset($block['innerBlocks']) ? $block['innerBlocks'] : [];
61 if (!$buttons)
62 {
63 return $block_content;
64 }
65
66 foreach ($buttons as $button)
67 {
68 $block_content = $this->replaceBlockAttributes('a', $button, $block_content);
69 }
70 }
71 /**
72 * Handle Core Image Block
73 */
74 else if ($blockName == 'core/image')
75 {
76 $new_block_html = $block['innerHTML'];
77
78 // check if we have an anchor element and add attributes to this elem.
79 $anchorExists = substr_count($new_block_html, '<a ');
80
81 $element = $anchorExists ? 'a' : 'figure';
82
83 $block_content = $this->replaceBlockAttributes($element, $block, $block_content);
84 }
85
86 return $block_content;
87 }
88
89 /**
90 * Adds the data attributes and class($atts) to the given element($element) within the block content($block_content)
91 *
92 * @param string $element
93 * @param array $block
94 * @param string $block_element
95 *
96 * @return string
97 */
98 private function replaceBlockAttributes($element, $block, $block_content)
99 {
100 $atts = $this->getBlockAttributes($block);
101 if (!$atts['enabled'])
102 {
103 return $block_content;
104 }
105
106 $new_block_html = $block['innerHTML'];
107
108 // box
109 if (!is_null($atts['box']) && $atts['box'] !== 'none')
110 {
111 if ($atts['box'] !== 'current')
112 {
113 $new_block_html = str_replace('<' . $element . ' ', '<' . $element . ' data-fbox="' . esc_attr($atts['box']) . '" ', $new_block_html);
114 }
115
116 // cmd
117 if ($atts['cmd'])
118 {
119 $new_block_html = str_replace('<' . $element . ' ', '<' . $element . ' data-fbox-cmd="' . esc_attr($atts['cmd']) . '" ', $new_block_html);
120 }
121
122 // prevent default
123 if ($atts['preventDefault'])
124 {
125 $new_block_html = str_replace('<' . $element . ' ', '<' . $element . ' data-fbox-prevent="' . esc_attr((int) $atts['preventDefault']) . '" ', $new_block_html);
126 }
127 }
128
129 // class
130 if ($atts['class'])
131 {
132 $new_block_html = preg_replace('/<' . $element . '(.*)class="/', "<" . $element . "$1class=\"" . esc_attr($atts['class']) . ' ', $new_block_html);
133 }
134
135 return str_replace($block['innerHTML'], $new_block_html, $block_content);
136 }
137
138 /**
139 * Retrieves the block attributes
140 *
141 * @param array $block
142 *
143 * @return array
144 */
145 private function getBlockAttributes($block)
146 {
147 $atts = [];
148
149 $atts['enabled'] = isset($block['attrs']['dataFBoxEnabled']) ?: false;
150 $atts['box'] = isset($block['attrs']['dataFBox']) ? $block['attrs']['dataFBox'] : null;
151 $atts['cmd'] = isset($block['attrs']['dataFBoxCmd']) ? $block['attrs']['dataFBoxCmd'] : 'close';
152 $atts['class'] = isset($block['attrs']['dataFBoxClass']) ? $block['attrs']['dataFBoxClass'] : '';
153 $atts['preventDefault'] = isset($block['attrs']['dataFBoxPreventDefault']) ? $block['attrs']['dataFBoxPreventDefault'] : 1;
154
155 return $atts;
156 }
157 }