PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.13
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.13
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 +21 -103 6.266.13 View file →
@@ -9,16 +9,10 @@
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 18 * @var array
@@ -24,9 +18,9 @@
24 18 * @var 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();
@@ -54,14 +48,11 @@
54 48 /**
55 49 * @since 4.05
56 50 *
57 51 * @param array|false $filter
58 - *
59 - * @return array
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'] ] ) ) {
@@ -166,14 +155,13 @@
166 155 * @return void
167 156 */
168 157 private function clean_messages() {
169 158 $removed = false;
170 -
171 159 foreach ( self::$messages as $t => $message ) {
172 160 $read = ! empty( $message['read'] ) && isset( $message['read'][ get_current_user_id() ] ) && $message['read'][ get_current_user_id() ] < strtotime( '-1 month' );
173 161 $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 ) ) {
162 + $expired = $this->is_expired( $message );
163 + if ( $read || $expired || $dismissed ) {
176 164 unset( self::$messages[ $t ] );
177 165 $removed = true;
178 166 }
179 167 }
@@ -185,62 +173,28 @@
185 173
186 174 /**
187 175 * @param array $messages
188 176 * @param string $type
189 - *
190 177 * @return void
191 178 */
192 179 public function filter_messages( &$messages, $type = 'unread' ) {
193 180 $user_id = get_current_user_id();
194 -
195 181 foreach ( $messages as $k => $message ) {
196 182 $dismissed = isset( $message['dismissed'] ) && isset( $message['dismissed'][ $user_id ] );
197 -
198 - if ( empty( $k ) || ! $this->within_valid_timeframe( $message ) || ( $type === 'dismissed' ) !== $dismissed ) {
183 + if ( empty( $k ) || $this->is_expired( $message ) || ( $type === 'dismissed' ) !== $dismissed ) {
199 184 unset( $messages[ $k ] );
200 185 } elseif ( ! $this->is_for_user( $message ) ) {
201 186 unset( $messages[ $k ] );
202 187 }
203 188 }
204 -
205 189 $messages = apply_filters( 'frm_filter_inbox', $messages );
206 190 }
207 191
208 192 /**
209 - * Check if a message has started and is not expired.
210 - *
211 - * @since 6.25
212 - *
213 193 * @param array $message
214 194 *
215 195 * @return bool
216 196 */
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 197 private function is_expired( $message ) {
244 198 return ! empty( $message['expires'] ) && $message['expires'] < time();
245 199 }
246 200
@@ -247,18 +201,21 @@
247 201 /**
248 202 * Show different messages for different accounts.
249 203 *
250 204 * @param array $message
251 - *
252 205 * @return bool
253 206 */
254 207 private function is_for_user( $message ) {
255 - if ( FrmApiHelper::is_for_user( $message ) ) {
208 + if ( ! isset( $message['who'] ) || $message['who'] === 'all' ) {
256 209 return true;
257 210 }
258 -
259 211 $who = (array) $message['who'];
260 -
212 + if ( in_array( 'all', $who, true ) || in_array( 'everyone', $who, true ) ) {
213 + return true;
214 + }
215 + if ( in_array( $this->get_user_type(), $who, true ) ) {
216 + return true;
217 + }
261 218 /**
262 219 * Allow for other special inbox cases in other add-ons.
263 220 *
264 221 * @since 6.8.1
@@ -269,8 +226,16 @@
269 226 */
270 227 return (bool) apply_filters( 'frm_inbox_message_is_for_user', false, $who, $message );
271 228 }
272 229
230 + private function get_user_type() {
231 + if ( ! FrmAppHelper::pro_is_installed() ) {
232 + return 'free';
233 + }
234 +
235 + return FrmAddonsController::license_type();
236 + }
237 +
273 238 /**
274 239 * @param string $key
275 240 *
276 241 * @return void
@@ -291,14 +256,12 @@
291 256 /**
292 257 * @since 4.05.02
293 258 *
294 259 * @param string $key
295 - *
296 260 * @return void
297 261 */
298 262 public function mark_unread( $key ) {
299 263 $is_read = isset( self::$messages[ $key ] ) && isset( self::$messages[ $key ]['read'] ) && isset( self::$messages[ $key ]['read'][ get_current_user_id() ] );
300 -
301 264 if ( $is_read ) {
302 265 unset( self::$messages[ $key ]['read'][ get_current_user_id() ] );
303 266 $this->update_list();
304 267 }
@@ -333,9 +296,8 @@
333 296 * @return void
334 297 */
335 298 private function dismiss_all() {
336 299 $user_id = get_current_user_id();
337 -
338 300 foreach ( self::$messages as $key => $message ) {
339 301 if ( ! isset( $message['dismissed'] ) ) {
340 302 self::$messages[ $key ]['dismissed'] = array();
341 303 }
@@ -346,15 +308,11 @@
346 308 }
347 309 $this->update_list();
348 310 }
349 311
350 - /**
351 - * @return array
352 - */
353 312 public function unread() {
354 313 $messages = $this->get_messages( 'filter' );
355 314 $user_id = get_current_user_id();
356 -
357 315 foreach ( $messages as $t => $message ) {
358 316 if ( isset( $message['read'] ) && isset( $message['read'][ $user_id ] ) ) {
359 317 unset( $messages[ $t ] );
360 318 }
@@ -365,14 +323,12 @@
365 323 /**
366 324 * @since 6.8.4 The $filtered parameter was added.
367 325 *
368 326 * @param bool $filtered
369 - *
370 327 * @return string
371 328 */
372 329 public function unread_html( $filtered = true ) {
373 330 $count = count( $this->unread() );
374 -
375 331 if ( ! $count ) {
376 332 return '';
377 333 }
378 334
@@ -393,9 +349,8 @@
393 349 /**
394 350 * @since 4.05.02
395 351 *
396 352 * @param string $key
397 - *
398 353 * @return void
399 354 */
400 355 public function remove( $key ) {
401 356 if ( isset( self::$messages[ $key ] ) ) {
@@ -419,9 +374,8 @@
419 374 public static function maybe_show_banner() {
420 375 if ( empty( self::$banner_messages ) ) {
421 376 return false;
422 377 }
423 -
424 378 $message = end( self::$banner_messages );
425 379 $cta = self::get_prepared_banner_cta( $message['cta'] );
426 380
427 381 require FrmAppHelper::plugin_path() . '/classes/views/inbox/banner.php';
@@ -433,9 +387,8 @@
433 387 *
434 388 * @since 6.8.4
435 389 *
436 390 * @param string $cta
437 - *
438 391 * @return string
439 392 */
440 393 private static function get_prepared_banner_cta( $cta ) {
441 394 $cta = str_replace( 'button-secondary', 'button-primary', $cta );
@@ -444,9 +397,8 @@
444 397 /**
445 398 * Replace a single href attribute in the CTA.
446 399 *
447 400 * @param array $matches The regex results for a single match.
448 - *
449 401 * @return string
450 402 */
451 403 function ( $matches ) {
452 404 $url = $matches[2];
@@ -456,9 +408,8 @@
456 408 return 'href="#"';
457 409 }
458 410
459 411 $query = array();
460 -
461 412 if ( isset( $parts['query'] ) ) {
462 413 parse_str( $parts['query'], $query );
463 414 }
464 415 $query['utm_medium'] = 'banner';
@@ -473,9 +424,8 @@
473 424 * @return void
474 425 */
475 426 public static function maybe_disable_screen_options() {
476 427 self::$banner_messages = self::get_banner_messages();
477 -
478 428 if ( self::$banner_messages ) {
479 429 // disable screen options tab when displaying banner messages because it gets in the way of the banner.
480 430 add_filter( 'screen_options_show_screen', '__return_false' );
481 431 }
@@ -506,9 +456,8 @@
506 456 *
507 457 * @since 6.8.4
508 458 *
509 459 * @param string $key The key we are checking for (ie. banner or slidein).
510 - *
511 460 * @return array
512 461 */
513 462 private static function get_messages_with_key( $key ) {
514 463 $inbox = new self();
@@ -539,9 +488,8 @@
539 488 * @return array|false
540 489 */
541 490 public static function get_inbox_slide_in_value_for_js() {
542 491 $messages = self::get_slidein_messages();
543 -
544 492 if ( ! $messages ) {
545 493 return false;
546 494 }
547 495
@@ -562,41 +510,11 @@
562 510
563 511 return array_reduce(
564 512 $keys_to_return,
565 513 function ( $total, $key ) use ( $message ) {
566 - $total[ $key ] = $message[ $key ] ?? '';
514 + $total[ $key ] = isset( $message[ $key ] ) ? $message[ $key ] : '';
567 515 return $total;
568 516 },
569 517 array()
570 518 );
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 519 }
602 520 }