PluginProbe
Boxzilla – WordPress Popup Builder / 3.2.4
Boxzilla – WordPress Popup Builder v3.2.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
← All changes | src/class-loader.php +52 -36 3.1.123.2.4 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' ), 1 );
42 43 add_action( 'wp_enqueue_scripts', array( $this, 'load_assets' ), 90 );
43 44 }
44 45 }
45 46
@@ -66,15 +67,20 @@
66 67 * @param array $patterns
67 68 *
68 69 * @return boolean
69 70 */
70 - protected function match_patterns( $string, $patterns ) {
71 + protected function match_patterns( $string, $patterns, $contains = false ) {
71 72 $string = strtolower( $string );
72 73
73 74 foreach( $patterns as $pattern ) {
75 + $pattern = rtrim( $pattern, '/' );
76 + $pattern = strtolower( $pattern );
74 77
75 - $pattern = rtrim( $pattern, '/' );
76 - $pattern = strtolower( $pattern );
78 + // contains means we should do a simple occurence check
79 + // does not support wildcards
80 + if( $contains ) {
81 + return strpos( $string, $pattern ) !== false;
82 + }
77 83
78 84 if( function_exists( 'fnmatch' ) ) {
79 85 $match = fnmatch( $pattern, $string );
80 86 } else {
@@ -92,18 +98,11 @@
92 98 /**
93 99 * @return string
94 100 */
95 101 protected function get_request_url() {
96 - // strip trailing slashes
97 - $request_uri = rtrim( $_SERVER['REQUEST_URI'], '/' );
98 -
99 - // strip ? and query string
100 - $qpos = strpos( $request_uri, '?' );
101 - if( $qpos ) {
102 - $request_uri = substr( $request_uri, 0, $qpos );
103 - }
104 -
105 - return $request_uri;
102 + // strip trailing slashes
103 + $request_uri = rtrim( $_SERVER['REQUEST_URI'], '/' );
104 + return $request_uri;
106 105 }
107 106
108 107 /**
109 108 * Check if this rule passes (conditional matches expected value)
@@ -126,15 +125,16 @@
126 125 $matched = true;
127 126 break;
128 127
129 128 case 'is_url':
130 - $matched = $this->match_patterns( $this->get_request_url(), $value );
129 + $url = $this->get_request_url();
130 + $matched = $this->match_patterns( $url, $value, $qualifier === 'contains' );
131 131 break;
132 132
133 133 case 'is_referer':
134 134 if( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
135 135 $referer = $_SERVER['HTTP_REFERER'];
136 - $matched = $this->match_patterns( $referer, $value );
136 + $matched = $this->match_patterns( $referer, $value, $qualifier === 'contains' );
137 137 }
138 138 break;
139 139
140 140 case 'is_post_type':
@@ -160,8 +160,12 @@
160 160
161 161 case 'is_post_with_tag':
162 162 $matched = is_singular( 'post' ) && has_tag( $value );
163 163 break;
164 +
165 + case 'is_user_logged_in':
166 + $matched = is_user_logged_in();
167 + break;
164 168 }
165 169
166 170 /**
167 171 * Filters whether a given box rule matches the condition and expected value.
@@ -254,13 +258,35 @@
254 258 public function load_assets() {
255 259 $pre_suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
256 260 wp_enqueue_script('boxzilla', $this->plugin->url('/assets/js/script' . $pre_suffix . '.js' ), array(), $this->plugin->version(), true );
257 261
258 - $this->pass_box_options();
262 + // create boxzilla_Global_Options object
263 + $plugin_options = $this->options;
264 + $boxes = $this->get_matched_boxes();
259 265
266 + $data = array(
267 + 'testMode' => (bool) $plugin_options['test_mode'],
268 + 'boxes' => array_map( function(Box $box) { return $box->get_client_options(); }, $boxes ),
269 + );
270 +
271 + wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
272 +
260 273 do_action( 'boxzilla_load_assets', $this );
261 274 }
262 275
276 + public function print_boxes_content() {
277 + $boxes = $this->get_matched_boxes();
278 + if( empty( $boxes ) ) {
279 + return;
280 + }
281 +
282 + echo '<div style="display: none;">';
283 + foreach( $boxes as $box ) {
284 + echo sprintf( '<div id="boxzilla-box-%d-content">', $box->ID ) . $box->get_content() . '</div>';
285 + }
286 + echo '</div>';
287 + }
288 +
263 289 /**
264 290 * Get an array of Box objects. These are the boxes that will be loaded for the current request.
265 291 *
266 292 * @return Box[]
@@ -275,9 +301,9 @@
275 301 return $boxes;
276 302 }
277 303
278 304 // query Box posts
279 - $boxes = get_posts(
305 + $posts = get_posts(
280 306 array(
281 307 'post_type' => 'boxzilla-box',
282 308 'post_status' => 'publish',
283 309 'post__in' => $this->box_ids_to_load,
@@ -285,31 +311,21 @@
285 311 )
286 312 );
287 313
288 314 // create `Box` instances out of \WP_Post instances
289 - foreach ( $boxes as $key => $box ) {
290 - $boxes[ $key ] = new Box( $box );
315 + $boxes = array();
316 + foreach ( $posts as $key => $post ) {
317 + // skip posts with no content
318 + $post_content = trim( strip_tags( nl2br( $post->post_content ) ) );
319 + if( empty( $post_content ) ) {
320 + continue;
321 + }
322 +
323 + $boxes[ $key ] = new Box( $post );
291 324 }
292 325 }
293 326
294 327 return $boxes;
295 - }
296 -
297 - /**
298 - * Create array of Box options and pass it to JavaScript script.
299 - */
300 - public function pass_box_options() {
301 -
302 - // create boxzilla_Global_Options object
303 - $plugin_options = $this->options;
304 - $boxes = $this->get_matched_boxes();
305 -
306 - $data = array(
307 - 'testMode' => (bool) $plugin_options['test_mode'],
308 - 'boxes' => array_map( function(Box $box) { return $box->get_client_options(); }, $boxes ),
309 - );
310 -
311 - wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
312 328 }
313 329
314 330 }
315 331