PluginProbe
Boxzilla – WordPress Popup Builder / 3.1.4
Boxzilla – WordPress Popup Builder v3.1.4
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 +189 -230 trunk3.1.4 View file →
@@ -3,270 +3,229 @@
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
34 - /**
35 - * @var WP_Post
36 - */
37 - private $post;
29 + /**
30 + * @var bool
31 + */
32 + public $enabled = false;
38 33
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);
34 + /**
35 + * @param WP_Post|int $post
36 + */
37 + public function __construct( $post ) {
48 38
49 - if ($post === null) {
50 - throw new \InvalidArgumentException(sprintf('No post found with ID %d.', (int) $post_id));
51 - }
52 - }
39 + // fetch post if it hasn't been fetched yet
40 + if( ! $post instanceof WP_Post ) {
41 + $post = get_post( $post );
42 + }
53 43
54 - // store ref to post
55 - $this->post = $post;
44 + // store ID in property for quick access
45 + $this->ID = $post->ID;
56 46
57 - // store ID in property for quick access
58 - $this->ID = $post->ID;
47 + // store title in property
48 + $this->title = $post->post_title;
59 49
60 - // store title in property
61 - $this->title = $post->post_title;
50 + // store content in property
51 + $this->content = $post->post_content;
62 52
63 - // store content in property
64 - $this->content = $post->post_content;
53 + // is this box enabled?
54 + $this->enabled = ( $post->post_status === 'publish' );
65 55
66 - // is this box enabled?
67 - $this->enabled = $post->post_status === 'publish';
56 + // load and store options in property
57 + $this->options = $this->load_options();
58 + }
68 59
69 - // load and store options in property
70 - $this->options = $this->load_options();
71 - }
60 + /**
61 + * Get the options for this box.
62 + **
63 + * @return array Array of box options
64 + */
65 + protected function load_options() {
72 66
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;
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;
116 99
117 - $options = get_post_meta($this->ID, 'boxzilla_options', true);
118 - $options = is_array($options) ? $options : [];
100 + $options = get_post_meta( $this->ID, 'boxzilla_options', true );
101 + $options = is_array( $options ) ? $options : array();
119 102
120 - // merge options with default options
121 - $options = array_replace_recursive($defaults, $options);
103 + // merge options with default options
104 + $options = array_replace_recursive( $defaults, $options );
122 105
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);
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 );
131 114
132 - return $options;
133 - }
115 + return $options;
116 + }
134 117
135 - /**
136 - * @return bool
137 - */
138 - public function is_enabled()
139 - {
140 - return $this->enabled;
141 - }
118 + /**
119 + * @return bool
120 + */
121 + public function is_enabled() {
122 + return $this->enabled;
123 + }
142 124
143 - /**
144 - * Get the options for this box
145 - *
146 - * @return array
147 - */
148 - public function get_options()
149 - {
150 - return $this->options;
151 - }
125 + /**
126 + * Get the options for this box
127 + *
128 + * @return array
129 + */
130 + public function get_options() {
131 + return $this->options;
132 + }
152 133
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 + /**
135 + * Get the close / hide icon for this box
136 + *
137 + * @return string
138 + */
139 + public function get_close_icon() {
163 140
164 - $box = $this;
165 - $html = '×';
141 + $box = $this;
142 + $html = '×';
166 143
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);
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 );
174 151
175 - return $close_icon;
176 - }
152 + return $close_icon;
153 + }
177 154
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;
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;
187 163
188 - // replace boxzilla specific shortcodes
189 - $close_link = "<a href=\"javascript:Boxzilla.dismiss({$this->ID});\">";
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 + }
190 173
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 + /**
175 + * Get the minimum allowed screen size for this box
176 + *
177 + * @return int
178 + */
179 + public function get_minimum_screen_size() {
197 180
198 - $content = str_replace(array_keys($replacements), array_values($replacements), $content);
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 + }
199 186
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 - }
187 + return $minimum_screen_size;
188 + }
209 189
210 - /**
211 - * Get options object for JS script.
212 - *
213 - * @return array
214 - */
215 - public function get_client_options()
216 - {
217 - $box = $this;
190 + public function get_client_options() {
191 + $box = $this;
218 192
219 - $trigger = false;
220 - if ($box->options['trigger']) {
221 - $trigger = [
222 - 'method' => $this->options['trigger'],
223 - ];
193 + $trigger = false;
194 + if( $box->options['trigger'] ) {
224 195
225 - if (isset($this->options[ 'trigger_' . $this->options['trigger'] ])) {
226 - $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
227 - }
228 - }
196 + $trigger = array( 'method' => $this->options['trigger'] );
229 197
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 - }
198 + if( isset( $this->options[ 'trigger_' . $this->options['trigger'] ] ) ) {
199 + $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
200 + }
201 + }
238 202
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 - ];
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 + );
261 219
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);
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 );
269 227
270 - return $client_options;
271 - }
272 -}
228 + return $client_options;
229 + }
230 +
231 +}