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

262 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 /**
11 * @var int
12 */
13 public $ID;
14
15 /**
16 * @var array
17 */
18 public $options = array();
19
20 /**
21 * @var string
22 */
23 public $title = '';
24
25 /**
26 * @var string
27 */
28 protected $content = '';
29
30 /**
31 * @var bool
32 */
33 public $enabled = false;
34
35 /**
36 * @var WP_Post
37 */
38 private $post;
39
40 /**
41 * @param WP_Post|int $post
42 */
43 public function __construct( $post ) {
44
45 // fetch post if it hasn't been fetched yet
46 if ( ! $post instanceof WP_Post ) {
47 $post = get_post( $post );
48 }
49
50 // store ref to post
51 $this->post = $post;
52
53 // store ID in property for quick access
54 $this->ID = $post->ID;
55
56 // store title in property
57 $this->title = $post->post_title;
58
59 // store content in property
60 $this->content = $post->post_content;
61
62 // is this box enabled?
63 $this->enabled = ( $post->post_status === 'publish' );
64
65 // load and store options in property
66 $this->options = $this->load_options();
67 }
68
69 /**
70 * Get the options for this box.
71 **
72 * @return array Array of box options
73 */
74 protected function load_options() {
75 $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 // merge options with default options
116 $options = array_replace_recursive( $defaults, $options );
117
118 // allow others to filter the final array of options
119 /**
120 * Filter the options for a given box
121 *
122 * @param array $options
123 * @param Box $box
124 */
125 $options = apply_filters( 'boxzilla_box_options', $options, $box );
126
127 return $options;
128 }
129
130 /**
131 * @return bool
132 */
133 public function is_enabled() {
134 return $this->enabled;
135 }
136
137 /**
138 * Get the options for this box
139 *
140 * @return array
141 */
142 public function get_options() {
143 return $this->options;
144 }
145
146 /**
147 * Get the close / hide icon for this box
148 *
149 * @return string
150 */
151 public function get_close_icon() {
152 if ( ! $this->options['show_close_icon'] ) {
153 return '';
154 }
155
156 $box = $this;
157 $html = '&times;';
158
159 /**
160 * Filters the HTML for the close icon.
161 *
162 * @param string $html
163 * @param Box $box
164 */
165 $close_icon = (string) apply_filters( 'boxzilla_box_close_icon', $html, $box );
166
167 return $close_icon;
168 }
169
170 /**
171 * Get the content of this box
172 *
173 * @return string
174 */
175 public function get_content() {
176 $content = $this->content;
177 $box = $this;
178
179 // replace boxzilla specific shortcodes
180 $close_link = sprintf( '<a href="javascript:Boxzilla.dismiss(%d);">', $this->ID );
181
182 $replacements = array(
183 '[boxzilla_close]' => $close_link, // accept underscore and dash here for consistency with other shortcode
184 '[boxzilla-close]' => $close_link,
185 '[/boxzilla_close]' => '</a>',
186 '[/boxzilla-close]' => '</a>',
187 );
188
189 $content = str_replace( array_keys( $replacements ), array_values( $replacements ), $content );
190
191 /**
192 * Filters the HTML for the box content
193 *
194 * @param string $content
195 * @param Box $box
196 */
197 $content = apply_filters( 'boxzilla_box_content', $content, $box );
198 return $content;
199 }
200
201 /**
202 * Get options object for JS script.
203 *
204 * @return array
205 */
206 public function get_client_options() {
207 $box = $this;
208
209 $trigger = false;
210 if ( $box->options['trigger'] ) {
211 $trigger = array(
212 'method' => $this->options['trigger'],
213 );
214
215 if ( isset( $this->options[ 'trigger_' . $this->options['trigger'] ] ) ) {
216 $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
217 }
218 }
219
220 // build screenWidthCondition object (or null)
221 $screen_width_condition = null;
222 if ( $box->options['screen_size_condition']['value'] > 0 ) {
223 $screen_width_condition = array(
224 'condition' => $box->options['screen_size_condition']['condition'],
225 'value' => intval( $box->options['screen_size_condition']['value'] ),
226 );
227 }
228
229 $client_options = array(
230 'id' => $box->ID,
231 'icon' => $box->get_close_icon(),
232 'content' => '', // we grab this later from an HTML element
233 'css' => array_filter( $box->options['css'] ),
234 'trigger' => $trigger,
235 'animation' => $box->options['animation'],
236 'cookie' => array(
237 'triggered' => absint( $box->options['cookie']['triggered'] ),
238 'dismissed' => absint( $box->options['cookie']['dismissed'] ),
239 ),
240 'rehide' => (bool) $box->options['auto_hide'],
241 'position' => $box->options['css']['position'],
242 'screenWidthCondition' => $screen_width_condition,
243 'closable' => ! ! $box->options['closable'],
244 'post' => array(
245 'id' => $this->post->ID,
246 'title' => $this->post->post_title,
247 'slug' => $this->post->post_name,
248 ),
249 );
250
251 /**
252 * Filter the final options for the JS Boxzilla client.
253 *
254 * @param array $client_options
255 * @param Box $box
256 */
257 $client_options = apply_filters( 'boxzilla_box_client_options', $client_options, $box );
258
259 return $client_options;
260 }
261 }
262