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