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