PluginProbe
Boxzilla – WordPress Popup Builder / 3.2.6
Boxzilla – WordPress Popup Builder v3.2.6
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.2.6, at src/class-box.php

265 lines 5.8 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 'screen_size_condition' => array(
104 'condition' => 'larger',
105 'value' => 0,
106 ),
107 'closable' => 1,
108 'show_close_icon' => 1,
109 );
110 $box = $this;
111
112 $options = get_post_meta( $this->ID, 'boxzilla_options', true );
113 $options = is_array( $options ) ? $options : array();
114
115
116 // merge options with default options
117 $options = array_replace_recursive( $defaults, $options );
118
119 // allow others to filter the final array of options
120 /**
121 * Filter the options for a given box
122 *
123 * @param array $options
124 * @param Box $box
125 */
126 $options = apply_filters( 'boxzilla_box_options', $options, $box );
127
128 return $options;
129 }
130
131 /**
132 * @return bool
133 */
134 public function is_enabled() {
135 return $this->enabled;
136 }
137
138 /**
139 * Get the options for this box
140 *
141 * @return array
142 */
143 public function get_options() {
144 return $this->options;
145 }
146
147 /**
148 * Get the close / hide icon for this box
149 *
150 * @return string
151 */
152 public function get_close_icon() {
153
154 if( ! $this->options['show_close_icon'] ) {
155 return '';
156 }
157
158 $box = $this;
159 $html = '&times;';
160
161 /**
162 * Filters the HTML for the close icon.
163 *
164 * @param string $html
165 * @param Box $box
166 */
167 $close_icon = (string) apply_filters( 'boxzilla_box_close_icon', $html, $box );
168
169 return $close_icon;
170 }
171
172 /**
173 * Get the content of this box
174 *
175 * @return string
176 */
177 public function get_content() {
178 $content = $this->content;
179 $box = $this;
180
181 // replace boxzilla specific shortcodes
182 $close_link = sprintf('<a href="javascript:Boxzilla.dismiss(%d);">', $this->ID );
183
184 $replacements = array(
185 '[boxzilla_close]' => $close_link, // accept underscore and dash here for consistency with other shortcode
186 '[boxzilla-close]' => $close_link,
187 '[/boxzilla_close]' => '</a>',
188 '[/boxzilla-close]' => '</a>',
189 );
190
191 $content = str_replace( array_keys( $replacements ), array_values( $replacements ), $content );
192
193 /**
194 * Filters the HTML for the box content
195 *
196 * @param string $content
197 * @param Box $box
198 */
199 $content = apply_filters( 'boxzilla_box_content', $content, $box );
200 return $content;
201 }
202
203 /**
204 * Get options object for JS script.
205 *
206 * @return array
207 */
208 public function get_client_options() {
209 $box = $this;
210
211 $trigger = false;
212 if( $box->options['trigger'] ) {
213 $trigger = array(
214 'method' => $this->options['trigger']
215 );
216
217 if( isset( $this->options[ 'trigger_' . $this->options['trigger'] ] ) ) {
218 $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
219 }
220 }
221
222 // build screenWidthCondition object (or null)
223 $screen_width_condition = null;
224 if( $box->options['screen_size_condition']['value'] > 0 ) {
225 $screen_width_condition = array(
226 'condition' => $box->options['screen_size_condition']['condition'],
227 'value' => intval( $box->options['screen_size_condition']['value'] ),
228 );
229 }
230
231 $client_options = array(
232 'id' => $box->ID,
233 'icon' => $box->get_close_icon(),
234 'content' => '', // we grab this later from an HTML element
235 'css' => array_filter( $box->options['css'] ),
236 'trigger' => $trigger,
237 'animation' => $box->options['animation'],
238 'cookie' => array(
239 'triggered' => absint( $box->options['cookie']['triggered'] ),
240 'dismissed' => absint( $box->options['cookie']['dismissed'] ),
241 ),
242 'rehide' => (bool) $box->options['auto_hide'],
243 'position' => $box->options['css']['position'],
244 'screenWidthCondition' => $screen_width_condition,
245 'closable' => !!$box->options['closable'],
246 'post' => array(
247 'id' => $this->post->ID,
248 'title' => $this->post->post_title,
249 'slug' => $this->post->post_name,
250 ),
251 );
252
253 /**
254 * Filter the final options for the JS Boxzilla client.
255 *
256 * @param array $client_options
257 * @param Box $box
258 */
259 $client_options = apply_filters( 'boxzilla_box_client_options', $client_options, $box );
260
261 return $client_options;
262 }
263
264 }
265