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

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