PluginProbe
Boxzilla – WordPress Popup Builder / 3.2
Boxzilla – WordPress Popup Builder v3.2
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-loader.php +57 -31 3.0.13.2 View file →
@@ -38,8 +38,9 @@
38 38 $this->box_ids_to_load = $this->filter_boxes();
39 39
40 40 // Only add other hooks if necessary
41 41 if( count( $this->box_ids_to_load ) > 0 ) {
42 + add_action( 'wp_footer', array( $this, 'print_boxes_content' ) );
42 43 add_action( 'wp_enqueue_scripts', array( $this, 'load_assets' ), 90 );
43 44 }
44 45 }
45 46
@@ -71,8 +72,9 @@
71 72 $string = strtolower( $string );
72 73
73 74 foreach( $patterns as $pattern ) {
74 75
76 + $pattern = rtrim( $pattern, '/' );
75 77 $pattern = strtolower( $pattern );
76 78
77 79 if( function_exists( 'fnmatch' ) ) {
78 80 $match = fnmatch( $pattern, $string );
@@ -87,8 +89,24 @@
87 89
88 90 return false;
89 91 }
90 92
93 + /**
94 + * @return string
95 + */
96 + protected function get_request_url() {
97 + // strip trailing slashes
98 + $request_uri = rtrim( $_SERVER['REQUEST_URI'], '/' );
99 +
100 + // strip ? and query string
101 + $qpos = strpos( $request_uri, '?' );
102 + if( $qpos ) {
103 + $request_uri = substr( $request_uri, 0, $qpos );
104 + }
105 +
106 + return $request_uri;
107 + }
108 +
91 109 /**
92 110 * Check if this rule passes (conditional matches expected value)
93 111 *
94 112 * @param string $condition
@@ -109,9 +127,9 @@
109 127 $matched = true;
110 128 break;
111 129
112 130 case 'is_url':
113 - $matched = $this->match_patterns( $_SERVER['REQUEST_URI'], $value );
131 + $matched = $this->match_patterns( $this->get_request_url(), $value );
114 132 break;
115 133
116 134 case 'is_referer':
117 135 if( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
@@ -126,8 +144,10 @@
126 144 break;
127 145
128 146 case 'is_single':
129 147 case 'is_post':
148 + // convert to empty string if array with just empty string in it
149 + $value = ( $value === array( '' ) ) ? '' : $value;
130 150 $matched = is_single( $value );
131 151 break;
132 152
133 153 case 'is_post_in_category':
@@ -141,8 +161,12 @@
141 161
142 162 case 'is_post_with_tag':
143 163 $matched = is_singular( 'post' ) && has_tag( $value );
144 164 break;
165 +
166 + case 'is_user_logged_in':
167 + $matched = is_user_logged_in();
168 + break;
145 169 }
146 170
147 171 /**
148 172 * Filters whether a given box rule matches the condition and expected value.
@@ -175,9 +199,9 @@
175 199 foreach( $rules as $box_id => $box_rules ) {
176 200
177 201 $matched = false;
178 202 $comparision = isset( $box_rules['comparision'] ) ? $box_rules['comparision'] : 'any';
179 -
203 +
180 204 // loop through all rules for all boxes
181 205 foreach ( $box_rules as $rule ) {
182 206
183 207 // skip faulty values (and comparision rule)
@@ -233,22 +257,35 @@
233 257 * Load plugin styles
234 258 */
235 259 public function load_assets() {
236 260 $pre_suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
261 + wp_enqueue_script('boxzilla', $this->plugin->url('/assets/js/script' . $pre_suffix . '.js' ), array(), $this->plugin->version(), true );
237 262
238 - // stylesheets
239 - wp_register_style( 'boxzilla', $this->plugin->url( '/assets/css/styles' . $pre_suffix . '.css' ), array(), $this->plugin->version() );
263 + // create boxzilla_Global_Options object
264 + $plugin_options = $this->options;
265 + $boxes = $this->get_matched_boxes();
240 266
241 - // scripts
242 - wp_register_script( 'boxzilla',$this->plugin->url( '/assets/js/script' . $pre_suffix . '.js' ), array( 'jquery' ), $this->plugin->version(), true );
267 + $data = array(
268 + 'testMode' => (bool) $plugin_options['test_mode'],
269 + 'boxes' => array_map( function(Box $box) { return $box->get_client_options(); }, $boxes ),
270 + );
243 271
244 - // Finally, enqueue style.
245 - wp_enqueue_style( 'boxzilla' );
246 - wp_enqueue_script( 'boxzilla' );
272 + wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
247 273
248 - $this->pass_box_options();
274 + do_action( 'boxzilla_load_assets', $this );
275 + }
249 276
250 - do_action( 'boxzilla_load_assets', $this );
277 + public function print_boxes_content() {
278 + $boxes = $this->get_matched_boxes();
279 + if( empty( $boxes ) ) {
280 + return;
281 + }
282 +
283 + echo '<div style="display: none;">';
284 + foreach( $boxes as $box ) {
285 + echo sprintf( '<div id="boxzilla-box-%d-content">', $box->ID ) . $box->get_content() . '</div>';
286 + }
287 + echo '</div>';
251 288 }
252 289
253 290 /**
254 291 * Get an array of Box objects. These are the boxes that will be loaded for the current request.
@@ -265,9 +302,9 @@
265 302 return $boxes;
266 303 }
267 304
268 305 // query Box posts
269 - $boxes = get_posts(
306 + $posts = get_posts(
270 307 array(
271 308 'post_type' => 'boxzilla-box',
272 309 'post_status' => 'publish',
273 310 'post__in' => $this->box_ids_to_load,
@@ -275,31 +312,20 @@
275 312 )
276 313 );
277 314
278 315 // create `Box` instances out of \WP_Post instances
279 - foreach ( $boxes as $key => $box ) {
280 - $boxes[ $key ] = new Box( $box );
316 + $boxes = array();
317 + foreach ( $posts as $key => $post ) {
318 + // skip posts with no content
319 + if( empty( trim( $post->post_content ) ) ) {
320 + continue;
321 + }
322 +
323 + $boxes[ $key ] = new Box( $post );
281 324 }
282 325 }
283 326
284 327 return $boxes;
285 - }
286 -
287 - /**
288 - * Create array of Box options and pass it to JavaScript script.
289 - */
290 - public function pass_box_options() {
291 -
292 - // create boxzilla_Global_Options object
293 - $plugin_options = $this->options;
294 - $boxes = $this->get_matched_boxes();
295 -
296 - $data = array(
297 - 'testMode' => (boolean) $plugin_options['test_mode'],
298 - 'boxes' => array_map( function(Box $box) { return $box->get_client_options(); }, $boxes ),
299 - );
300 -
301 - wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
302 328 }
303 329
304 330 }
305 331