PluginProbe
Boxzilla – WordPress Popup Builder / 3.1.10
Boxzilla – WordPress Popup Builder v3.1.10
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
boxzilla / src / class-box.php

class-box.php in Boxzilla – WordPress Popup Builder 3.1.10, at src/class-box.php

250 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Boxzilla;
4
5 use WP_Post;
6
7 class Box {
8
9 /**
10 * @var int
11 */
12 public $ID;
13
14 /**
15 * @var array
16 */
17 public $options = array();
18
19 /**
20 * @var string
21 */
22 public $title = '';
23
24 /**
25 * @var string
26 */
27 protected $content = '';
28
29 /**
30 * @var bool
31 */
32 public $enabled = false;
33
34 /**
35 * @var WP_Post
36 */
37 private $post;
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 = get_post( $post );
47 }
48
49 // store ref to post
50 $this->post = $post;
51
52 // store ID in property for quick access
53 $this->ID = $post->ID;
54
55 // store title in property
56 $this->title = $post->post_title;
57
58 // store content in property
59 $this->content = $post->post_content;
60
61 // is this box enabled?
62 $this->enabled = ( $post->post_status === 'publish' );
63
64 // load and store options in property
65 $this->options = $this->load_options();
66 }
67
68 /**
69 * Get the options for this box.
70 **
71 * @return array Array of box options
72 */
73 protected function load_options() {
74
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;
107
108 $options = get_post_meta( $this->ID, 'boxzilla_options', true );
109 $options = is_array( $options ) ? $options : array();
110
111 // merge options with default options
112 $options = array_replace_recursive( $defaults, $options );
113
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 );
122
123 return $options;
124 }
125
126 /**
127 * @return bool
128 */
129 public function is_enabled() {
130 return $this->enabled;
131 }
132
133 /**
134 * Get the options for this box
135 *
136 * @return array
137 */
138 public function get_options() {
139 return $this->options;
140 }
141
142 /**
143 * Get the close / hide icon for this box
144 *
145 * @return string
146 */
147 public function get_close_icon() {
148
149 $box = $this;
150 $html = '&times;';
151
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 );
159
160 return $close_icon;
161 }
162
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;
171
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 }
181
182 /**
183 * Get the minimum allowed screen size for this box
184 *
185 * @return int
186 */
187 public function get_minimum_screen_size() {
188
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 }
194
195 return $minimum_screen_size;
196 }
197
198 /**
199 * Get options object for JS script.
200 *
201 * @return array
202 */
203 public function get_client_options() {
204 $box = $this;
205
206 $trigger = false;
207 if( $box->options['trigger'] ) {
208 $trigger = array(
209 'method' => $this->options['trigger']
210 );
211
212 if( isset( $this->options[ 'trigger_' . $this->options['trigger'] ] ) ) {
213 $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
214 }
215 }
216
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
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 );
246
247 return $client_options;
248 }
249
250 }