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
boxzilla / src / class-box.php

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

231 lines 4.6 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 * @param WP_Post|int $post
36 */
37 public function __construct( $post ) {
38
39 // fetch post if it hasn't been fetched yet
40 if( ! $post instanceof WP_Post ) {
41 $post = get_post( $post );
42 }
43
44 // store ID in property for quick access
45 $this->ID = $post->ID;
46
47 // store title in property
48 $this->title = $post->post_title;
49
50 // store content in property
51 $this->content = $post->post_content;
52
53 // is this box enabled?
54 $this->enabled = ( $post->post_status === 'publish' );
55
56 // load and store options in property
57 $this->options = $this->load_options();
58 }
59
60 /**
61 * Get the options for this box.
62 **
63 * @return array Array of box options
64 */
65 protected function load_options() {
66
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;
99
100 $options = get_post_meta( $this->ID, 'boxzilla_options', true );
101 $options = is_array( $options ) ? $options : array();
102
103 // merge options with default options
104 $options = array_replace_recursive( $defaults, $options );
105
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 );
114
115 return $options;
116 }
117
118 /**
119 * @return bool
120 */
121 public function is_enabled() {
122 return $this->enabled;
123 }
124
125 /**
126 * Get the options for this box
127 *
128 * @return array
129 */
130 public function get_options() {
131 return $this->options;
132 }
133
134 /**
135 * Get the close / hide icon for this box
136 *
137 * @return string
138 */
139 public function get_close_icon() {
140
141 $box = $this;
142 $html = '&times;';
143
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 );
151
152 return $close_icon;
153 }
154
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;
163
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 }
173
174 /**
175 * Get the minimum allowed screen size for this box
176 *
177 * @return int
178 */
179 public function get_minimum_screen_size() {
180
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 }
186
187 return $minimum_screen_size;
188 }
189
190 public function get_client_options() {
191 $box = $this;
192
193 $trigger = false;
194 if( $box->options['trigger'] ) {
195
196 $trigger = array( 'method' => $this->options['trigger'] );
197
198 if( isset( $this->options[ 'trigger_' . $this->options['trigger'] ] ) ) {
199 $trigger['value'] = $this->options[ 'trigger_' . $this->options['trigger'] ];
200 }
201 }
202
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 );
219
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 );
227
228 return $client_options;
229 }
230
231 }