PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.7
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.7
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/models/FrmInbox.php +37 -258 6.266.7 View file →
@@ -9,24 +9,18 @@
9 9 class FrmInbox extends FrmFormApi {
10 10
11 11 protected $cache_key;
12 12
13 - /**
14 - * @var string
15 - */
16 13 private $option = 'frm_inbox';
17 14
18 - /**
19 - * @var array|false
20 - */
21 15 private static $messages = false;
22 16
23 17 /**
24 - * @var array
18 + * @param array
25 19 */
26 20 private static $banner_messages;
27 21
28 - public function __construct() {
22 + public function __construct( $for_parent = null ) {
29 23 $this->set_cache_key();
30 24
31 25 if ( false === self::$messages ) {
32 26 $this->set_messages();
@@ -53,15 +47,12 @@
53 47
54 48 /**
55 49 * @since 4.05
56 50 *
57 - * @param array|false $filter
58 - *
59 - * @return array
51 + * @param false|array $filter
60 52 */
61 53 public function get_messages( $filter = false ) {
62 54 $messages = self::$messages;
63 -
64 55 if ( $filter === 'filter' ) {
65 56 $this->filter_messages( $messages );
66 57 }
67 58 return $messages;
@@ -73,9 +64,8 @@
73 64 * @return void
74 65 */
75 66 public function set_messages() {
76 67 self::$messages = get_option( $this->option );
77 -
78 68 if ( ! is_array( self::$messages ) ) {
79 69 self::$messages = array();
80 70 }
81 71
@@ -93,9 +83,8 @@
93 83 * @return void
94 84 */
95 85 private function add_api_messages() {
96 86 $api = $this->get_api_info();
97 -
98 87 if ( empty( $api ) ) {
99 88 return;
100 89 }
101 90
@@ -120,9 +109,9 @@
120 109 // Don't replace messages unless required.
121 110 return;
122 111 }
123 112
124 - if ( ! $this->within_valid_timeframe( $message ) ) {
113 + if ( $this->is_expired( $message ) ) {
125 114 return;
126 115 }
127 116
128 117 if ( isset( self::$messages[ $message['key'] ] ) ) {
@@ -150,10 +139,9 @@
150 139 'subject' => '',
151 140 'icon' => 'frm_tooltip_icon',
152 141 'cta' => '',
153 142 'expires' => false,
154 - // Use 'free', 'personal', 'business', 'elite', 'grandfathered'.
155 - 'who' => 'all',
143 + 'who' => 'all', // use 'free', 'personal', 'business', 'elite', 'grandfathered'
156 144 'type' => '',
157 145 );
158 146
159 147 $message = array_merge( $defaults, $message );
@@ -166,14 +154,13 @@
166 154 * @return void
167 155 */
168 156 private function clean_messages() {
169 157 $removed = false;
170 -
171 158 foreach ( self::$messages as $t => $message ) {
172 - $read = ! empty( $message['read'] ) && isset( $message['read'][ get_current_user_id() ] ) && $message['read'][ get_current_user_id() ] < strtotime( '-1 month' );
173 - $dismissed = ! empty( $message['dismissed'] ) && isset( $message['dismissed'][ get_current_user_id() ] ) && $message['dismissed'][ get_current_user_id() ] < strtotime( '-1 week' );
174 -
175 - if ( $read || $dismissed || ! $this->within_valid_timeframe( $message ) ) {
159 + $read = isset( $message['read'] ) && ! empty( $message['read'] ) && isset( $message['read'][ get_current_user_id() ] ) && $message['read'][ get_current_user_id() ] < strtotime( '-1 month' );
160 + $dismissed = isset( $message['dismissed'] ) && ! empty( $message['dismissed'] ) && isset( $message['dismissed'][ get_current_user_id() ] ) && $message['dismissed'][ get_current_user_id() ] < strtotime( '-1 week' );
161 + $expired = $this->is_expired( $message );
162 + if ( $read || $expired || $dismissed ) {
176 163 unset( self::$messages[ $t ] );
177 164 $removed = true;
178 165 }
179 166 }
@@ -183,66 +170,30 @@
183 170 }
184 171 }
185 172
186 173 /**
187 - * @param array $messages
188 - * @param string $type
189 - *
190 174 * @return void
191 175 */
192 - public function filter_messages( &$messages, $type = 'unread' ) {
176 + private function filter_messages( &$messages ) {
193 177 $user_id = get_current_user_id();
194 -
195 178 foreach ( $messages as $k => $message ) {
196 179 $dismissed = isset( $message['dismissed'] ) && isset( $message['dismissed'][ $user_id ] );
197 -
198 - if ( empty( $k ) || ! $this->within_valid_timeframe( $message ) || ( $type === 'dismissed' ) !== $dismissed ) {
180 + if ( empty( $k ) || $this->is_expired( $message ) || $dismissed ) {
199 181 unset( $messages[ $k ] );
200 182 } elseif ( ! $this->is_for_user( $message ) ) {
201 183 unset( $messages[ $k ] );
202 184 }
203 185 }
204 -
205 186 $messages = apply_filters( 'frm_filter_inbox', $messages );
206 187 }
207 188
208 189 /**
209 - * Check if a message has started and is not expired.
210 - *
211 - * @since 6.25
212 - *
213 190 * @param array $message
214 191 *
215 192 * @return bool
216 193 */
217 - private function within_valid_timeframe( $message ) {
218 - return $this->has_started( $message ) && ! $this->is_expired( $message );
219 - }
220 -
221 - /**
222 - * Check if a message has actually started, so we can prevent showing something that is queued up early.
223 - *
224 - * @since 6.25
225 - *
226 - * @param array $message
227 - *
228 - * @return bool
229 - */
230 - private function has_started( $message ) {
231 - if ( empty( $message['starts'] ) ) {
232 - return true;
233 - }
234 -
235 - return $message['starts'] <= time();
236 - }
237 -
238 - /**
239 - * @param array $message
240 - *
241 - * @return bool
242 - */
243 194 private function is_expired( $message ) {
244 - return ! empty( $message['expires'] ) && $message['expires'] < time();
195 + return isset( $message['expires'] ) && ! empty( $message['expires'] ) && $message['expires'] < time();
245 196 }
246 197
247 198 /**
248 199 * Show different messages for different accounts.
@@ -247,28 +198,27 @@
247 198 /**
248 199 * Show different messages for different accounts.
249 200 *
250 201 * @param array $message
251 - *
252 202 * @return bool
253 203 */
254 204 private function is_for_user( $message ) {
255 - if ( FrmApiHelper::is_for_user( $message ) ) {
205 + if ( ! isset( $message['who'] ) || $message['who'] === 'all' ) {
256 206 return true;
257 207 }
208 + $who = (array) $message['who'];
209 + if ( in_array( 'all', $who, true ) || in_array( 'everyone', $who, true ) ) {
210 + return true;
211 + }
212 + return in_array( $this->get_user_type(), $who, true );
213 + }
258 214
259 - $who = (array) $message['who'];
215 + private function get_user_type() {
216 + if ( ! FrmAppHelper::pro_is_installed() ) {
217 + return 'free';
218 + }
260 219
261 - /**
262 - * Allow for other special inbox cases in other add-ons.
263 - *
264 - * @since 6.8.1
265 - *
266 - * @param bool $is_for_user
267 - * @param array $who
268 - * @param array $message
269 - */
270 - return (bool) apply_filters( 'frm_inbox_message_is_for_user', false, $who, $message );
220 + return FrmAddonsController::license_type();
271 221 }
272 222
273 223 /**
274 224 * @param string $key
@@ -288,17 +238,16 @@
288 238 $this->update_list();
289 239 }
290 240
291 241 /**
242 + * @param string $key
243 + *
292 244 * @since 4.05.02
293 245 *
294 - * @param string $key
295 - *
296 246 * @return void
297 247 */
298 248 public function mark_unread( $key ) {
299 249 $is_read = isset( self::$messages[ $key ] ) && isset( self::$messages[ $key ]['read'] ) && isset( self::$messages[ $key ]['read'][ get_current_user_id() ] );
300 -
301 250 if ( $is_read ) {
302 251 unset( self::$messages[ $key ]['read'][ get_current_user_id() ] );
303 252 $this->update_list();
304 253 }
@@ -333,9 +282,8 @@
333 282 * @return void
334 283 */
335 284 private function dismiss_all() {
336 285 $user_id = get_current_user_id();
337 -
338 286 foreach ( self::$messages as $key => $message ) {
339 287 if ( ! isset( $message['dismissed'] ) ) {
340 288 self::$messages[ $key ]['dismissed'] = array();
341 289 }
@@ -346,15 +294,11 @@
346 294 }
347 295 $this->update_list();
348 296 }
349 297
350 - /**
351 - * @return array
352 - */
353 298 public function unread() {
354 299 $messages = $this->get_messages( 'filter' );
355 300 $user_id = get_current_user_id();
356 -
357 301 foreach ( $messages as $t => $message ) {
358 302 if ( isset( $message['read'] ) && isset( $message['read'][ $user_id ] ) ) {
359 303 unset( $messages[ $t ] );
360 304 }
@@ -361,34 +305,20 @@
361 305 }
362 306 return $messages;
363 307 }
364 308
365 - /**
366 - * @since 6.8.4 The $filtered parameter was added.
367 - *
368 - * @param bool $filtered
369 - *
370 - * @return string
371 - */
372 - public function unread_html( $filtered = true ) {
309 + public function unread_html() {
310 + $html = '';
373 311 $count = count( $this->unread() );
312 + if ( $count ) {
313 + $html = ' <span class="update-plugins frm_inbox_count"><span class="plugin-count">' . absint( $count ) . '</span></span>';
374 314
375 - if ( ! $count ) {
376 - return '';
315 + /**
316 + * @since 4.06.01
317 + */
318 + $html = apply_filters( 'frm_inbox_badge', $html );
377 319 }
378 -
379 - $html = ' <span class="update-plugins frm_inbox_count"><span class="plugin-count">' . absint( $count ) . '</span></span>';
380 -
381 - if ( ! $filtered ) {
382 - return $html;
383 - }
384 -
385 - /**
386 - * @since 4.06.01
387 - *
388 - * @param string $html
389 - */
390 - return (string) apply_filters( 'frm_inbox_badge', $html );
320 + return $html;
391 321 }
392 322
393 323 /**
394 324 * @since 4.05.02
@@ -419,63 +349,18 @@
419 349 public static function maybe_show_banner() {
420 350 if ( empty( self::$banner_messages ) ) {
421 351 return false;
422 352 }
423 -
424 353 $message = end( self::$banner_messages );
425 - $cta = self::get_prepared_banner_cta( $message['cta'] );
426 -
427 354 require FrmAppHelper::plugin_path() . '/classes/views/inbox/banner.php';
428 355 return true;
429 356 }
430 357
431 358 /**
432 - * Make sure that the CTA uses utm_medium=banner.
433 - *
434 - * @since 6.8.4
435 - *
436 - * @param string $cta
437 - *
438 - * @return string
439 - */
440 - private static function get_prepared_banner_cta( $cta ) {
441 - $cta = str_replace( 'button-secondary', 'button-primary', $cta );
442 - return preg_replace_callback(
443 - '/href=("|\')(.*?)("|\')/',
444 - /**
445 - * Replace a single href attribute in the CTA.
446 - *
447 - * @param array $matches The regex results for a single match.
448 - *
449 - * @return string
450 - */
451 - function ( $matches ) {
452 - $url = $matches[2];
453 - $parts = parse_url( $url );
454 -
455 - if ( '#' === $url ) {
456 - return 'href="#"';
457 - }
458 -
459 - $query = array();
460 -
461 - if ( isset( $parts['query'] ) ) {
462 - parse_str( $parts['query'], $query );
463 - }
464 - $query['utm_medium'] = 'banner';
465 - $parts['query'] = http_build_query( $query );
466 - return 'href="' . $parts['scheme'] . '://' . $parts['host'] . $parts['path'] . '?' . $parts['query'] . '"';
467 - },
468 - $cta
469 - );
470 - }
471 -
472 - /**
473 359 * @return void
474 360 */
475 361 public static function maybe_disable_screen_options() {
476 362 self::$banner_messages = self::get_banner_messages();
477 -
478 363 if ( self::$banner_messages ) {
479 364 // disable screen options tab when displaying banner messages because it gets in the way of the banner.
480 365 add_filter( 'screen_options_show_screen', '__return_false' );
481 366 }
@@ -481,122 +366,16 @@
481 366 }
482 367 }
483 368
484 369 /**
485 - * Get all message with a "banner" message key defined.
486 - *
487 370 * @return array
488 371 */
489 372 private static function get_banner_messages() {
490 - return self::get_messages_with_key( 'banner' );
491 - }
492 -
493 - /**
494 - * Get all messages with a "slidein" message key defined.
495 - *
496 - * @since 6.8.4
497 - *
498 - * @return array
499 - */
500 - private static function get_slidein_messages() {
501 - return self::get_messages_with_key( 'slidein' );
502 - }
503 -
504 - /**
505 - * Get all messages with a $key message key defined.
506 - *
507 - * @since 6.8.4
508 - *
509 - * @param string $key The key we are checking for (ie. banner or slidein).
510 - *
511 - * @return array
512 - */
513 - private static function get_messages_with_key( $key ) {
514 373 $inbox = new self();
515 374 return array_filter(
516 375 $inbox->get_messages( 'filter' ),
517 - function ( $message ) use ( $key ) {
518 - return ! empty( $message[ $key ] );
376 + function( $message ) {
377 + return ! empty( $message['banner'] );
519 378 }
520 379 );
521 - }
522 -
523 - /**
524 - * Check if there is at least one slidein message.
525 - *
526 - * @since 6.8.4
527 - *
528 - * @return bool
529 - */
530 - public static function has_a_slidein_message() {
531 - return (bool) self::get_slidein_messages();
532 - }
533 -
534 - /**
535 - * Get the array used for frmGlobal.inboxSlideIn
536 - *
537 - * @since 6.8.4
538 - *
539 - * @return array|false
540 - */
541 - public static function get_inbox_slide_in_value_for_js() {
542 - $messages = self::get_slidein_messages();
543 -
544 - if ( ! $messages ) {
545 - return false;
546 - }
547 -
548 - $message = reset( $messages );
549 -
550 - /**
551 - * Extend the keys in the global JS object.
552 - * This is used in Pro to include images.
553 - *
554 - * @since 6.8.4
555 - *
556 - * @param array $keys
557 - */
558 - $keys_to_return = apply_filters(
559 - 'frm_inbox_slidein_js_vars',
560 - array( 'key', 'slidein', 'subject', 'cta' )
561 - );
562 -
563 - return array_reduce(
564 - $keys_to_return,
565 - function ( $total, $key ) use ( $message ) {
566 - $total[ $key ] = $message[ $key ] ?? '';
567 - return $total;
568 - },
569 - array()
570 - );
571 - }
572 -
573 - /**
574 - * Clear the inbox cache by deleting the associated option from the database.
575 - *
576 - * @since 6.17
577 - *
578 - * @return void
579 - */
580 - public static function clear_cache() {
581 - delete_option( 'frm_inbox' );
582 - }
583 -
584 - /**
585 - * Check inbox for an "error" type. This is displayed on the form list page if one exists.
586 - *
587 - * @since 6.19
588 - *
589 - * @return array|false
590 - */
591 - public static function check_for_error() {
592 - $inbox = new self();
593 - $messages = $inbox->get_messages( 'filter' );
594 -
595 - foreach ( $messages as $message ) {
596 - if ( is_array( $message ) && isset( $message['type'] ) && 'error' === $message['type'] ) {
597 - return $message;
598 - }
599 - }
600 - return false;
601 380 }
602 381 }