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 +70 -31 3.03.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':
@@ -138,10 +158,27 @@
138 158 case 'is_page':
139 159 $matched = is_page( $value );
140 160 break;
141 161
162 + case 'is_post_with_tag':
163 + $matched = is_singular( 'post' ) && has_tag( $value );
164 + break;
165 +
166 + case 'is_user_logged_in':
167 + $matched = is_user_logged_in();
168 + break;
142 169 }
143 170
171 + /**
172 + * Filters whether a given box rule matches the condition and expected value.
173 + *
174 + * The dynamic portion of the hook, `$condition`, refers to the condition being matched.
175 + *
176 + * @param boolean $matched
177 + * @param array $value
178 + */
179 + $matched = apply_filters( 'boxzilla_box_rule_matches_' . $condition, $matched, $value );
180 +
144 181 // if qualifier is set to false, we need to reverse this value here.
145 182 if( ! $qualifier ) {
146 183 $matched = ! $matched;
147 184 }
@@ -162,9 +199,9 @@
162 199 foreach( $rules as $box_id => $box_rules ) {
163 200
164 201 $matched = false;
165 202 $comparision = isset( $box_rules['comparision'] ) ? $box_rules['comparision'] : 'any';
166 -
203 +
167 204 // loop through all rules for all boxes
168 205 foreach ( $box_rules as $rule ) {
169 206
170 207 // skip faulty values (and comparision rule)
@@ -220,22 +257,35 @@
220 257 * Load plugin styles
221 258 */
222 259 public function load_assets() {
223 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 );
224 262
225 - // stylesheets
226 - 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();
227 266
228 - // scripts
229 - 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 + );
230 271
231 - // Finally, enqueue style.
232 - wp_enqueue_style( 'boxzilla' );
233 - wp_enqueue_script( 'boxzilla' );
272 + wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
234 273
235 - $this->pass_box_options();
274 + do_action( 'boxzilla_load_assets', $this );
275 + }
236 276
237 - 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>';
238 288 }
239 289
240 290 /**
241 291 * Get an array of Box objects. These are the boxes that will be loaded for the current request.
@@ -252,9 +302,9 @@
252 302 return $boxes;
253 303 }
254 304
255 305 // query Box posts
256 - $boxes = get_posts(
306 + $posts = get_posts(
257 307 array(
258 308 'post_type' => 'boxzilla-box',
259 309 'post_status' => 'publish',
260 310 'post__in' => $this->box_ids_to_load,
@@ -262,31 +312,20 @@
262 312 )
263 313 );
264 314
265 315 // create `Box` instances out of \WP_Post instances
266 - foreach ( $boxes as $key => $box ) {
267 - $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 );
268 324 }
269 325 }
270 326
271 327 return $boxes;
272 - }
273 -
274 - /**
275 - * Create array of Box options and pass it to JavaScript script.
276 - */
277 - public function pass_box_options() {
278 -
279 - // create boxzilla_Global_Options object
280 - $plugin_options = $this->options;
281 - $boxes = $this->get_matched_boxes();
282 -
283 - $data = array(
284 - 'testMode' => (boolean) $plugin_options['test_mode'],
285 - 'boxes' => array_map( function(Box $box) { return $box->get_client_options(); }, $boxes ),
286 - );
287 -
288 - wp_localize_script( 'boxzilla', 'boxzilla_options', $data );
289 328 }
290 329
291 330 }
292 331