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 +57 -33 3.0.23.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,14 +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 = 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 + }
76 83
77 84 if( function_exists( 'fnmatch' ) ) {
78 85 $match = fnmatch( $pattern, $string );
79 86 } else {
@@ -87,8 +94,17 @@
87 94
88 95 return false;
89 96 }
90 97
98 + /**
99 + * @return string
100 + */
101 + protected function get_request_url() {
102 + // strip trailing slashes
103 + $request_uri = rtrim( $_SERVER['REQUEST_URI'], '/' );
104 + return $request_uri;
105 + }
106 +
91 107 /**
92 108 * Check if this rule passes (conditional matches expected value)
93 109 *
94 110 * @param string $condition
@@ -109,15 +125,16 @@
109 125 $matched = true;
110 126 break;
111 127
112 128 case 'is_url':
113 - $matched = $this->match_patterns( $_SERVER['REQUEST_URI'], $value );
129 + $url = $this->get_request_url();
130 + $matched = $this->match_patterns( $url, $value, $qualifier === 'contains' );
114 131 break;
115 132
116 133 case 'is_referer':
117 134 if( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
118 135 $referer = $_SERVER['HTTP_REFERER'];
119 - $matched = $this->match_patterns( $referer, $value );
136 + $matched = $this->match_patterns( $referer, $value, $qualifier === 'contains' );
120 137 }
121 138 break;
122 139
123 140 case 'is_post_type':
@@ -143,8 +160,12 @@
143 160
144 161 case 'is_post_with_tag':
145 162 $matched = is_singular( 'post' ) && has_tag( $value );
146 163 break;
164 +
165 + case 'is_user_logged_in':
166 + $matched = is_user_logged_in();
167 + break;
147 168 }
148 169
149 170 /**
150 171 * Filters whether a given box rule matches the condition and expected value.
@@ -235,22 +256,35 @@
235 256 * Load plugin styles
236 257 */
237 258 public function load_assets() {
238 259 $pre_suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
260 + wp_enqueue_script('boxzilla', $this->plugin->url('/assets/js/script' . $pre_suffix . '.js' ), array(), $this->plugin->version(), true );
239 261
240 - // stylesheets
241 - wp_register_style( 'boxzilla', $this->plugin->url( '/assets/css/styles' . $pre_suffix . '.css' ), array(), $this->plugin->version() );
262 + // create boxzilla_Global_Options object
263 + $plugin_options = $this->options;
264 + $boxes = $this->get_matched_boxes();
242 265
243 - // scripts
244 - wp_register_script( 'boxzilla',$this->plugin->url( '/assets/js/script' . $pre_suffix . '.js' ), array( 'jquery' ), $this->plugin->version(), true );
266 + $data = array(
267 + 'testMode' => (bool) $plugin_options['test_mode'],
268 + 'boxes' => array_map( function(Box $box) { return $box->get_client_options(); }, $boxes ),
269 + );
245 270
246 - // Finally, enqueue style.
247 - wp_enqueue_style( 'boxzilla' );
248 - wp_enqueue_script( 'boxzilla' );
271 + wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
249 272
250 - $this->pass_box_options();
273 + do_action( 'boxzilla_load_assets', $this );
274 + }
251 275
252 - do_action( 'boxzilla_load_assets', $this );
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>';
253 287 }
254 288
255 289 /**
256 290 * Get an array of Box objects. These are the boxes that will be loaded for the current request.
@@ -267,9 +301,9 @@
267 301 return $boxes;
268 302 }
269 303
270 304 // query Box posts
271 - $boxes = get_posts(
305 + $posts = get_posts(
272 306 array(
273 307 'post_type' => 'boxzilla-box',
274 308 'post_status' => 'publish',
275 309 'post__in' => $this->box_ids_to_load,
@@ -277,31 +311,21 @@
277 311 )
278 312 );
279 313
280 314 // create `Box` instances out of \WP_Post instances
281 - foreach ( $boxes as $key => $box ) {
282 - $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 );
283 324 }
284 325 }
285 326
286 327 return $boxes;
287 - }
288 -
289 - /**
290 - * Create array of Box options and pass it to JavaScript script.
291 - */
292 - public function pass_box_options() {
293 -
294 - // create boxzilla_Global_Options object
295 - $plugin_options = $this->options;
296 - $boxes = $this->get_matched_boxes();
297 -
298 - $data = array(
299 - 'testMode' => (boolean) $plugin_options['test_mode'],
300 - 'boxes' => array_map( function(Box $box) { return $box->get_client_options(); }, $boxes ),
301 - );
302 -
303 - wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
304 328 }
305 329
306 330 }
307 331