PluginProbe
Boxzilla – WordPress Popup Builder / 3.4.11
Boxzilla – WordPress Popup Builder v3.4.11
3.4.11 3.4.10 3.4.9 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 trunk 3.0 3.0.1 3.0.2 3.0.3 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 All 72 releases
← All changes | src/class-box.php +230 -189 3.13.4.11 View file →
@@ -3,229 +3,270 @@
3 3 namespace Boxzilla;
4 4
5 5 use WP_Post;
6 6
7 -class Box {
7 +class Box
8 +{
9 + /**
10 + * @var int
11 + */
12 + public $ID;
8 13
9 - /**
10 - * @var int
11 - */
12 - public $ID;
14 + /**
15 + * @var array
16 + */
17 + public $options = [];
13 18
14 - /**
15 - * @var array
16 - */
17 - public $options = array();
19 + /**
20 + * @var string
21 + */
22 + public $title = '';
18 23
19 - /**
20 - * @var string
21 - */
22 - public $title = '';
24 + /**
25 + * @var string
26 + */
27 + protected $content = '';
23 28
24 - /**
25 - * @var string
26 - */
27 - protected $content = '';
29 + /**
30 + * @var bool
31 + */
32 + public $enabled = false;
28 33
29 - /**
30 - * @var bool
31 - */
32 - public $enabled = false;
34 + /**
35 + * @var WP_Post
36 + */
37 + private $post;
33 38
34 - /**
35 - * @param WP_Post|int $post
36 - */
37 - public function __construct( $post ) {
39 + /**
40 + * @param WP_Post|int $post
41 + */
42 + public function __construct($post)
43 + {
44 + // fetch post if it hasn't been fetched yet
45 + if (! $post instanceof WP_Post) {
46 + $post_id = $post;
47 + $post = get_post($post_id);
38 48
39 - // fetch post if it hasn't been fetched yet
40 - if( ! $post instanceof WP_Post ) {
41 - $post = get_post( $post );
42 - }
49 + if ($post === null) {
50 + throw new \InvalidArgumentException(sprintf('No post found with ID %d.', (int) $post_id));
51 + }
52 + }
43 53
44 - // store ID in property for quick access
45 - $this->ID = $post->ID;
54 + // store ref to post
55 + $this->post = $post;
46 56
47 - // store title in property
48 - $this->title = $post->post_title;
57 + // store ID in property for quick access
58 + $this->ID = $post->ID;
49 59
50 - // store content in property
51 - $this->content = $post->post_content;
60 + // store title in property
61 + $this->title = $post->post_title;
52 62
53 - // is this box enabled?
54 - $this->enabled = ( $post->post_status === 'publish' );
63 + // store content in property
64 + $this->content = $post->post_content;
55 65
56 - // load and store options in property
57 - $this->options = $this->load_options();
58 - }
66 + // is this box enabled?
67 + $this->enabled = $post->post_status === 'publish';
59 68
60 - /**
61 - * Get the options for this box.
62 - **
63 - * @return array Array of box options
64 - */
65 - protected function load_options() {
69 + // load and store options in property
70 + $this->options = $this->load_options();
71 + }
66 72
67 - static $defaults = array(
68 - 'css' => array(
69 - 'background_color' => '',
70 - 'color' => '',
71 - 'width' => '',
72 - 'border_color' => '',
73 - 'border_width' => '',
74 - 'border_style' => '',
75 - 'position' => 'bottom-right',
76 - ),
77 - 'rules' => array(
78 - 0 => array(
79 - 'condition' => '',
80 - 'value' => '',
81 - ),
82 - ),
83 - 'rules_comparision' => 'any',
84 - 'cookie' => array(
85 - 'triggered' => 0,
86 - 'dismissed' => 0,
87 - ),
88 - 'trigger' => 'percentage',
89 - 'trigger_percentage' => 65,
90 - 'trigger_element' => '',
91 - 'trigger_time_on_site' => 0,
92 - 'trigger_time_on_page' => 0,
93 - 'animation' => 'fade',
94 - 'auto_hide' => 0,
95 - 'hide_on_screen_size' => '',
96 - 'closable' => true,
97 - );
98 - $box = $this;
73 + /**
74 + * Get the options for this box.
75 + **
76 + * @return array Array of box options
77 + */
78 + protected function load_options()
79 + {
80 + $defaults = [
81 + 'css' => [
82 + 'background_color' => '',
83 + 'color' => '',
84 + 'width' => '',
85 + 'border_color' => '',
86 + 'border_width' => '',
87 + 'border_style' => '',
88 + 'position' => 'bottom-right',
89 + ],
90 + 'rules' => [
91 + 0 => [
92 + 'condition' => '',
93 + 'value' => '',
94 + ],
95 + ],
96 + 'rules_comparision' => 'any',
97 + 'cookie' => [
98 + 'triggered' => 0,
99 + 'dismissed' => 0,
100 + ],
101 + 'trigger' => 'percentage',
102 + 'trigger_percentage' => 65,
103 + 'trigger_element' => '',
104 + 'trigger_time_on_site' => 0,
105 + 'trigger_time_on_page' => 0,
106 + 'animation' => 'fade',
107 + 'auto_hide' => 0,
108 + 'screen_size_condition' => [
109 + 'condition' => 'larger',
110 + 'value' => 0,
111 + ],
112 + 'closable' => 1,
113 + 'show_close_icon' => 1,
114 + ];
115 + $box = $this;
99 116
100 - $options = get_post_meta( $this->ID, 'boxzilla_options', true );
101 - $options = is_array( $options ) ? $options : array();
117 + $options = get_post_meta($this->ID, 'boxzilla_options', true);
118 + $options = is_array($options) ? $options : [];
102 119
103 - // merge options with default options
104 - $options = array_replace_recursive( $defaults, $options );
120 + // merge options with default options
121 + $options = array_replace_recursive($defaults, $options);
105 122
106 - // allow others to filter the final array of options
107 - /**
108 - * Filter the options for a given box
109 - *
110 - * @param array $options
111 - * @param Box $box
112 - */
113 - $options = apply_filters( 'boxzilla_box_options', $options, $box );
123 + // allow others to filter the final array of options
124 + /**
125 + * Filter the options for a given box
126 + *
127 + * @param array $options
128 + * @param Box $box
129 + */
130 + $options = apply_filters('boxzilla_box_options', $options, $box);
114 131
115 - return $options;
116 - }
132 + return $options;
133 + }
117 134
118 - /**
119 - * @return bool
120 - */
121 - public function is_enabled() {
122 - return $this->enabled;
123 - }
135 + /**
136 + * @return bool
137 + */
138 + public function is_enabled()
139 + {
140 + return $this->enabled;
141 + }
124 142
125 - /**
126 - * Get the options for this box
127 - *
128 - * @return array
129 - */
130 - public function get_options() {
131 - return $this->options;
132 - }
143 + /**
144 + * Get the options for this box
145 + *
146 + * @return array
147 + */
148 + public function get_options()
149 + {
150 + return $this->options;
151 + }
133 152
134 - /**
135 - * Get the close / hide icon for this box
136 - *
137 - * @return string
138 - */
139 - public function get_close_icon() {
153 + /**
154 + * Get the close / hide icon for this box
155 + *
156 + * @return string
157 + */
158 + public function get_close_icon()
159 + {
160 + if (! $this->options['show_close_icon']) {
161 + return '';
162 + }
140 163
141 - $box = $this;
142 - $html = '×';
164 + $box = $this;
165 + $html = '×';
143 166
144 - /**
145 - * Filters the HTML for the close icon.
146 - *
147 - * @param string $html
148 - * @param Box $box
149 - */
150 - $close_icon = (string) apply_filters( 'boxzilla_box_close_icon', $html, $box );
167 + /**
168 + * Filters the HTML for the close icon.
169 + *
170 + * @param string $html
171 + * @param Box $box
172 + */
173 + $close_icon = (string) apply_filters('boxzilla_box_close_icon', $html, $box);
151 174
152 - return $close_icon;
153 - }
175 + return $close_icon;
176 + }
154 177
155 - /**
156 - * Get the content of this box
157 - *
158 - * @return mixed|void
159 - */
160 - public function get_content() {
161 - $content = $this->content;
162 - $box = $this;
178 + /**
179 + * Get the content of this box
180 + *
181 + * @return string
182 + */
183 + public function get_content()
184 + {
185 + $content = $this->content;
186 + $box = $this;
163 187
164 - /**
165 - * Filters the HTML for the box content
166 - *
167 - * @param string $content
168 - * @param Box $box
169 - */
170 - $content = apply_filters( 'boxzilla_box_content', $content, $box );
171 - return $content;
172 - }
188 + // replace boxzilla specific shortcodes
189 + $close_link = "<a href=\"javascript:Boxzilla.dismiss({$this->ID});\">";
173 190
174 - /**
175 - * Get the minimum allowed screen size for this box
176 - *
177 - * @return int
178 - */
179 - public function get_minimum_screen_size() {
191 + $replacements = [
192 + '[boxzilla_close]' => $close_link, // accept underscore and dash here for consistency with other shortcode
193 + '[boxzilla-close]' => $close_link,
194 + '[/boxzilla_close]' => '</a>',
195 + '[/boxzilla-close]' => '</a>',
196 + ];
180 197
181 - if( $this->options['hide_on_screen_size'] > 0 ) {
182 - $minimum_screen_size = absint( $this->options['hide_on_screen_size'] );
183 - } else {
184 - $minimum_screen_size = 0;
185 - }
198 + $content = str_replace(array_keys($replacements), array_values($replacements), $content);
186 199
187 - return $minimum_screen_size;
188 - }
200 + /**
201 + * Filters the HTML for the box content
202 + *
203 + * @param string $content
204 + * @param Box $box
205 + */
206 + $content = apply_filters('boxzilla_box_content', $content, $box);
207 + return $content;
208 + }
189 209
190 - public function get_client_options() {
191 - $box = $this;
210 + /**
211 + * Get options object for JS script.
212 + *
213 + * @return array
214 + */
215 + public function get_client_options()
216 + {
217 + $box = $this;
192 218
193 - $trigger = false;
194 - if( $box->options['trigger'] ) {
219 + $trigger = false;
220 + if ($box->options['trigger']) {
221 + $trigger = [
222 + 'method' => $this->options['trigger'],
223 + ];
195 224
196 - $trigger = array( 'method' => $this->options['trigger'] );
225 + if (isset($this->options[ 'trigger_' . $this->options['trigger'] ])) {
226 + $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
227 + }
228 + }
197 229
198 - if( isset( $this->options[ 'trigger_' . $this->options['trigger'] ] ) ) {
199 - $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
200 - }
201 - }
230 + // build screenWidthCondition object (or null)
231 + $screen_width_condition = null;
232 + if ($box->options['screen_size_condition']['value'] > 0) {
233 + $screen_width_condition = [
234 + 'condition' => $box->options['screen_size_condition']['condition'],
235 + 'value' => (int) ($box->options['screen_size_condition']['value']),
236 + ];
237 + }
202 238
203 - $client_options = array(
204 - 'id' => $box->ID,
205 - 'icon' => $box->get_close_icon(),
206 - 'content' => $box->get_content(),
207 - 'css' => array_filter( $box->options['css'] ),
208 - 'trigger' => $trigger,
209 - 'animation' => $box->options['animation'],
210 - 'cookie' => array(
211 - 'triggered' => absint( $box->options['cookie']['triggered'] ),
212 - 'dismissed' => absint( $box->options['cookie']['dismissed'] ),
213 - ),
214 - 'rehide' => (bool) $box->options['auto_hide'],
215 - 'position' => $box->options['css']['position'],
216 - 'minimumScreenWidth' => $box->get_minimum_screen_size(),
217 - 'closable' => $box->options['closable'],
218 - );
239 + $post = $this->post;
240 + $client_options = [
241 + 'id' => $box->ID,
242 + 'icon' => $box->get_close_icon(),
243 + 'content' => '', // we grab this later from an HTML element
244 + 'css' => array_filter($box->options['css']),
245 + 'trigger' => $trigger,
246 + 'animation' => $box->options['animation'],
247 + 'cookie' => [
248 + 'triggered' => absint($box->options['cookie']['triggered']),
249 + 'dismissed' => absint($box->options['cookie']['dismissed']),
250 + ],
251 + 'rehide' => (bool) $box->options['auto_hide'],
252 + 'position' => $box->options['css']['position'],
253 + 'screenWidthCondition' => $screen_width_condition,
254 + 'closable' => ! ! $box->options['closable'],
255 + 'post' => [
256 + 'id' => $post->ID,
257 + 'title' => $post->post_title,
258 + 'slug' => $post->post_name,
259 + ],
260 + ];
219 261
220 - /**
221 - * Filter the final options for the JS Boxzilla client.
222 - *
223 - * @param array $client_options
224 - * @param Box $box
225 - */
226 - $client_options = apply_filters( 'boxzilla_box_client_options', $client_options, $box );
262 + /**
263 + * Filter the final options for the JS Boxzilla client.
264 + *
265 + * @param array $client_options
266 + * @param Box $box
267 + */
268 + $client_options = apply_filters('boxzilla_box_client_options', $client_options, $box);
227 269
228 - return $client_options;
229 - }
230 -
231 -}
270 + return $client_options;
271 + }
272 +}