PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 3.06.06
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v3.06.06
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
formidable / classes / models / FrmReviews.php

FrmReviews.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 3.06.06, at classes/models/FrmReviews.php

134 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class FrmReviews {
4
5 private $option_name = 'frm_reviewed';
6
7 private $review_status = array();
8
9 /**
10 * Add admin notices as needed for reviews
11 *
12 * @since 3.04.03
13 */
14 public function review_request() {
15
16 // Only show the review request to high-level users on Formidable pages
17 if ( ! current_user_can( 'frm_change_settings' ) || ! FrmAppHelper::is_formidable_admin() ) {
18 return;
19 }
20
21 // Verify that we can do a check for reviews
22 $this->set_review_status();
23
24 // Check if it has been dismissed or if we can ask later
25 $dismissed = $this->review_status['dismissed'];
26 if ( $dismissed === 'later' && $this->review_status['asked'] < 3 ) {
27 $dismissed = false;
28 }
29
30 $week_ago = ( $this->review_status['time'] + WEEK_IN_SECONDS ) <= time();
31
32 if ( empty( $dismissed ) && $week_ago ) {
33 $this->review();
34 }
35 }
36
37 /**
38 * When was the review request last dismissed?
39 *
40 * @since 3.04.03
41 */
42 private function set_review_status() {
43 $user_id = get_current_user_id();
44 $review = get_user_meta( $user_id, $this->option_name, true );
45 $default = array(
46 'time' => time(),
47 'dismissed' => false,
48 'asked' => 0,
49 );
50
51 if ( empty( $review ) ) {
52 // Set the review request to show in a week
53 update_user_meta( $user_id, $this->option_name, $default );
54 }
55
56 $review = array_merge( $default, (array) $review );
57 $review['asked'] = (int) $review['asked'];
58 $this->review_status = $review;
59 }
60
61 /**
62 * Maybe show review request
63 *
64 * @since 3.04.03
65 * @param int $asked
66 */
67 private function review() {
68
69 // show the review request 3 times, depending on the number of entries
70 $show_intervals = array( 50, 200, 500 );
71 $asked = $this->review_status['asked'];
72
73 if ( ! isset( $show_intervals[ $asked ] ) ) {
74 return;
75 }
76
77 $entries = FrmEntry::getRecordCount();
78 $count = $show_intervals[ $asked ];
79 $user = wp_get_current_user();
80
81 // Only show review request if the site has collected enough entries
82 if ( $entries < $count ) {
83 // check the entry count again in a week
84 $this->review_status['time'] = time();
85 update_user_meta( $user->ID, $this->option_name, $this->review_status );
86 return;
87 }
88
89 if ( $entries <= 100 ) {
90 // round to the nearest 10
91 $entries = floor( $entries / 10 ) * 10;
92 } else {
93 // round to the nearest 50
94 $entries = floor( $entries / 50 ) * 50;
95 }
96 $name = $user->first_name;
97 if ( ! empty( $name ) ) {
98 $name = ' ' . $name;
99 }
100
101 // We have a candidate! Output a review message.
102 include( FrmAppHelper::plugin_path() . '/classes/views/shared/review.php' );
103 }
104
105 /**
106 * Save the request to hide the review
107 *
108 * @since 3.04.03
109 */
110 public function dismiss_review() {
111 FrmAppHelper::permission_check( 'frm_change_settings' );
112 check_ajax_referer( 'frm_ajax', 'nonce' );
113
114 $user_id = get_current_user_id();
115 $review = get_user_meta( $user_id, $this->option_name, true );
116 if ( empty( $review ) ) {
117 $review = array();
118 }
119
120 if ( isset( $review['dismissed'] ) && $review['dismissed'] === 'done' ) {
121 // if feedback was submitted, don't update it again when the review is dismissed
122 wp_die();
123 }
124
125 $dismissed = FrmAppHelper::get_post_param( 'link', 'no', 'sanitize_text_field' );
126 $review['time'] = time();
127 $review['dismissed'] = $dismissed === 'done' ? true : 'later';
128 $review['asked'] = isset( $review['asked'] ) ? $review['asked'] + 1 : 1;
129
130 update_user_meta( $user_id, $this->option_name, $review );
131 wp_die();
132 }
133 }
134