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 +60 -34 3.0.13.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':
@@ -126,8 +143,10 @@
126 143 break;
127 144
128 145 case 'is_single':
129 146 case 'is_post':
147 + // convert to empty string if array with just empty string in it
148 + $value = ( $value === array( '' ) ) ? '' : $value;
130 149 $matched = is_single( $value );
131 150 break;
132 151
133 152 case 'is_post_in_category':
@@ -141,8 +160,12 @@
141 160
142 161 case 'is_post_with_tag':
143 162 $matched = is_singular( 'post' ) && has_tag( $value );
144 163 break;
164 +
165 + case 'is_user_logged_in':
166 + $matched = is_user_logged_in();
167 + break;
145 168 }
146 169
147 170 /**
148 171 * Filters whether a given box rule matches the condition and expected value.
@@ -175,9 +198,9 @@
175 198 foreach( $rules as $box_id => $box_rules ) {
176 199
177 200 $matched = false;
178 201 $comparision = isset( $box_rules['comparision'] ) ? $box_rules['comparision'] : 'any';
179 -
202 +
180 203 // loop through all rules for all boxes
181 204 foreach ( $box_rules as $rule ) {
182 205
183 206 // skip faulty values (and comparision rule)
@@ -233,22 +256,35 @@
233 256 * Load plugin styles
234 257 */
235 258 public function load_assets() {
236 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 );
237 261
238 - // stylesheets
239 - 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();
240 265
241 - // scripts
242 - 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 + );
243 270
244 - // Finally, enqueue style.
245 - wp_enqueue_style( 'boxzilla' );
246 - wp_enqueue_script( 'boxzilla' );
271 + wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
247 272
248 - $this->pass_box_options();
273 + do_action( 'boxzilla_load_assets', $this );
274 + }
249 275
250 - 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>';
251 287 }
252 288
253 289 /**
254 290 * Get an array of Box objects. These are the boxes that will be loaded for the current request.
@@ -265,9 +301,9 @@
265 301 return $boxes;
266 302 }
267 303
268 304 // query Box posts
269 - $boxes = get_posts(
305 + $posts = get_posts(
270 306 array(
271 307 'post_type' => 'boxzilla-box',
272 308 'post_status' => 'publish',
273 309 'post__in' => $this->box_ids_to_load,
@@ -275,31 +311,21 @@
275 311 )
276 312 );
277 313
278 314 // create `Box` instances out of \WP_Post instances
279 - foreach ( $boxes as $key => $box ) {
280 - $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 );
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