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

154 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.8 Free
5 *
6 * @author FirePlugins <info@fireplugins.com>
7 * @link https://www.fireplugins.com
8 * @copyright Copyright © 2021 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 $new_block_html = str_replace('<' . $element . ' ', '<' . $element . ' data-fbox="' . esc_attr($atts['box']) . '" ', $new_block_html);
112
113 // cmd
114 if ($atts['cmd'])
115 {
116 $new_block_html = str_replace('<' . $element . ' ', '<' . $element . ' data-fbox-cmd="' . esc_attr($atts['cmd']) . '" ', $new_block_html);
117 }
118
119 // prevent default
120 if ($atts['preventDefault'])
121 {
122 $new_block_html = str_replace('<' . $element . ' ', '<' . $element . ' data-fbox-prevent="' . esc_attr((int) $atts['preventDefault']) . '" ', $new_block_html);
123 }
124 }
125
126 // class
127 if ($atts['class'])
128 {
129 $new_block_html = preg_replace('/<' . $element . '(.*)class="/', "<" . $element . "$1class=\"" . esc_attr($atts['class']) . ' ', $new_block_html);
130 }
131
132 return str_replace($block['innerHTML'], $new_block_html, $block_content);
133 }
134
135 /**
136 * Retrieves the block attributes
137 *
138 * @param array $block
139 *
140 * @return array
141 */
142 private function getBlockAttributes($block)
143 {
144 $atts = [];
145
146 $atts['enabled'] = isset($block['attrs']['dataFBoxEnabled']) ?: false;
147 $atts['box'] = isset($block['attrs']['dataFBox']) ? $block['attrs']['dataFBox'] : null;
148 $atts['cmd'] = isset($block['attrs']['dataFBoxCmd']) ? $block['attrs']['dataFBoxCmd'] : 'close';
149 $atts['class'] = isset($block['attrs']['dataFBoxClass']) ? $block['attrs']['dataFBoxClass'] : '';
150 $atts['preventDefault'] = isset($block['attrs']['dataFBoxPreventDefault']) ? $block['attrs']['dataFBoxPreventDefault'] : 1;
151
152 return $atts;
153 }
154 }