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 -180 3.03.4.11 View file →
@@ -3,220 +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('condition' => '', 'value' => '')
79 - ),
80 - 'rules_comparision' => 'any',
81 - 'cookie' => 0,
82 - 'trigger' => 'percentage',
83 - 'trigger_percentage' => 65,
84 - 'trigger_element' => '',
85 - 'trigger_time_on_site' => 0,
86 - 'trigger_time_on_page' => 0,
87 - 'animation' => 'fade',
88 - 'auto_hide' => 0,
89 - 'hide_on_screen_size' => '',
90 - 'closable' => true,
91 - );
92 - $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;
93 116
94 - $options = get_post_meta( $this->ID, 'boxzilla_options', true );
95 - $options = is_array( $options ) ? $options : array();
117 + $options = get_post_meta($this->ID, 'boxzilla_options', true);
118 + $options = is_array($options) ? $options : [];
96 119
97 - // merge options with default options
98 - $options = array_replace_recursive( $defaults, $options );
120 + // merge options with default options
121 + $options = array_replace_recursive($defaults, $options);
99 122
100 - // allow others to filter the final array of options
101 - /**
102 - * Filter the options for a given box
103 - *
104 - * @param array $options
105 - * @param Box $box
106 - */
107 - $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);
108 131
109 - return $options;
110 - }
132 + return $options;
133 + }
111 134
112 - /**
113 - * @return bool
114 - */
115 - public function is_enabled() {
116 - return $this->enabled;
117 - }
135 + /**
136 + * @return bool
137 + */
138 + public function is_enabled()
139 + {
140 + return $this->enabled;
141 + }
118 142
119 - /**
120 - * Get the options for this box
121 - *
122 - * @return array
123 - */
124 - public function get_options() {
125 - return $this->options;
126 - }
143 + /**
144 + * Get the options for this box
145 + *
146 + * @return array
147 + */
148 + public function get_options()
149 + {
150 + return $this->options;
151 + }
127 152
128 - /**
129 - * Get the close / hide icon for this box
130 - *
131 - * @return string
132 - */
133 - 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 + }
134 163
135 - $box = $this;
136 - $html = '×';
164 + $box = $this;
165 + $html = '×';
137 166
138 - /**
139 - * Filters the HTML for the close icon.
140 - *
141 - * @param string $html
142 - * @param Box $box
143 - */
144 - $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);
145 174
146 - return $close_icon;
147 - }
175 + return $close_icon;
176 + }
148 177
149 - /**
150 - * Get the content of this box
151 - *
152 - * @return mixed|void
153 - */
154 - public function get_content() {
155 - $content = $this->content;
156 - $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;
157 187
158 - /**
159 - * Filters the HTML for the box content
160 - *
161 - * @param string $content
162 - * @param Box $box
163 - */
164 - $content = apply_filters( 'boxzilla_box_content', $content, $box );
165 - return $content;
166 - }
188 + // replace boxzilla specific shortcodes
189 + $close_link = "<a href=\"javascript:Boxzilla.dismiss({$this->ID});\">";
167 190
168 - /**
169 - * Get the minimum allowed screen size for this box
170 - *
171 - * @return int
172 - */
173 - 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 + ];
174 197
175 - if( $this->options['hide_on_screen_size'] > 0 ) {
176 - $minimum_screen_size = absint( $this->options['hide_on_screen_size'] );
177 - } else {
178 - $minimum_screen_size = 0;
179 - }
198 + $content = str_replace(array_keys($replacements), array_values($replacements), $content);
180 199
181 - return $minimum_screen_size;
182 - }
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 + }
183 209
184 - public function get_client_options() {
185 - $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;
186 218
187 - $trigger = false;
188 - if( $box->options['trigger'] ) {
219 + $trigger = false;
220 + if ($box->options['trigger']) {
221 + $trigger = [
222 + 'method' => $this->options['trigger'],
223 + ];
189 224
190 - $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 + }
191 229
192 - if( isset( $this->options[ 'trigger_' . $this->options['trigger'] ] ) ) {
193 - $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
194 - }
195 - }
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 + }
196 238
197 - $client_options = array(
198 - 'id' => $box->ID,
199 - 'icon' => $box->get_close_icon(),
200 - 'content' => $box->get_content(),
201 - 'css' => array_filter( $box->options['css'] ),
202 - 'trigger' => $trigger,
203 - 'animation' => $box->options['animation'],
204 - 'cookieTime' => absint( $box->options['cookie'] ),
205 - 'rehide' => (bool) $box->options['auto_hide'],
206 - 'position' => $box->options['css']['position'],
207 - 'minimumScreenWidth' => $box->get_minimum_screen_size(),
208 - 'closable' => $box->options['closable'],
209 - );
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 + ];
210 261
211 - /**
212 - * Filter the final options for the JS Boxzilla client.
213 - *
214 - * @param array $client_options
215 - * @param Box $box
216 - */
217 - $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);
218 269
219 - return $client_options;
220 - }
221 -
222 -}
270 + return $client_options;
271 + }
272 +}