PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.23
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.23
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/controllers/FrmUsageController.php +120 -5 6.56.23 View file →
@@ -9,8 +9,17 @@
9 9 */
10 10 class FrmUsageController {
11 11
12 12 /**
13 + * Option name of flows data.
14 + *
15 + * @since 6.16.1
16 + *
17 + * @var string
18 + */
19 + const FLOWS_ACTION_NAME = 'frm_usage_tracking_flows';
20 +
21 + /**
13 22 * Randomize the first send to prevent our servers from crashing.
14 23 *
15 24 * @since 3.06.04
16 25 *
@@ -16,17 +25,26 @@
16 25 *
17 26 * @return void
18 27 */
19 28 public static function schedule_send() {
20 - if ( wp_next_scheduled( 'formidable_send_usage' ) ) {
29 + $timestamp = wp_next_scheduled( 'formidable_send_usage' );
30 + if ( ! self::tracking_allowed() ) {
31 + if ( $timestamp ) {
32 + // Remove the scheduled event if it's not allowed and it's scheduled.
33 + wp_unschedule_event( $timestamp, 'formidable_send_usage' );
34 + }
21 35 return;
22 36 }
23 37
38 + if ( $timestamp ) {
39 + return;
40 + }
41 +
24 42 $tracking = array(
25 - 'day' => rand( 0, 6 ) * DAY_IN_SECONDS,
26 - 'hour' => rand( 0, 23 ) * HOUR_IN_SECONDS,
27 - 'minute' => rand( 0, 59 ) * MINUTE_IN_SECONDS,
28 - 'second' => rand( 0, 59 ),
43 + 'day' => rand( 0, 6 ) * DAY_IN_SECONDS,
44 + 'hour' => rand( 0, 23 ) * HOUR_IN_SECONDS,
45 + 'minute' => rand( 0, 59 ) * MINUTE_IN_SECONDS,
46 + 'second' => rand( 0, 59 ),
29 47 );
30 48
31 49 $offset = array_sum( $tracking );
32 50 $init_send = strtotime( 'next sunday' ) + $offset;
@@ -47,8 +65,20 @@
47 65 return $schedules;
48 66 }
49 67
50 68 /**
69 + * Checks if tracking is allowed.
70 + *
71 + * @since 6.16.3
72 + *
73 + * @return bool
74 + */
75 + public static function tracking_allowed() {
76 + $settings = FrmAppHelper::get_settings();
77 + return $settings->tracking;
78 + }
79 +
80 + /**
51 81 * @since 3.06.04
52 82 *
53 83 * @return void
54 84 */
@@ -54,6 +84,91 @@
54 84 */
55 85 public static function send_snapshot() {
56 86 $usage = new FrmUsage();
57 87 $usage->send_snapshot();
88 + }
89 +
90 + /**
91 + * Loads scripts.
92 + *
93 + * @since 6.16.1
94 + */
95 + public static function load_scripts() {
96 + if ( self::is_forms_list_page() || FrmAppHelper::is_admin_page( 'formidable-form-templates' ) ) {
97 + wp_enqueue_script( 'frm-usage-tracking', FrmAppHelper::plugin_url() . '/js/admin/usage-tracking.js', array( 'formidable_dom' ), FrmAppHelper::$plug_version, true );
98 + }
99 + }
100 +
101 + /**
102 + * Checks if is forms list page.
103 + *
104 + * @since 6.16.1
105 + *
106 + * @return bool
107 + */
108 + private static function is_forms_list_page() {
109 + if ( ! FrmAppHelper::on_form_listing_page() ) {
110 + return false;
111 + }
112 +
113 + // Exclude Trash page.
114 + $form_type = FrmAppHelper::simple_get( 'form_type' );
115 + return $form_type && 'published' === $form_type;
116 + }
117 +
118 + /**
119 + * AJAX handler to track flows.
120 + *
121 + * @since 6.16.1
122 + */
123 + public static function ajax_track_flows() {
124 + FrmAppHelper::permission_check( 'frm_view_forms' );
125 + check_ajax_referer( 'frm_ajax', 'nonce' );
126 +
127 + $key = FrmAppHelper::get_post_param( 'key', '', 'sanitize_text_field' );
128 + $value = FrmAppHelper::get_post_param( 'value', '', 'sanitize_text_field' );
129 +
130 + self::update_flows_data( $key, $value );
131 +
132 + wp_send_json_success();
133 + }
134 +
135 + /**
136 + * Updates flows data.
137 + *
138 + * @since 6.16.1
139 + *
140 + * @param string $key Flow key.
141 + * @param string $value Flow value.
142 + *
143 + * @return void
144 + */
145 + public static function update_flows_data( $key, $value ) {
146 + $flows_data = self::get_flows_data();
147 +
148 + if ( '' === $key || '' === $value ) {
149 + return;
150 + }
151 +
152 + if ( ! isset( $flows_data[ $key ] ) ) {
153 + $flows_data[ $key ] = array();
154 + }
155 +
156 + if ( ! isset( $flows_data[ $key ][ $value ] ) ) {
157 + $flows_data[ $key ][ $value ] = 0;
158 + }
159 +
160 + $flows_data[ $key ][ $value ]++;
161 + update_option( self::FLOWS_ACTION_NAME, $flows_data );
162 + }
163 +
164 + /**
165 + * Get flows data.
166 + *
167 + * @since 6.16.1
168 + *
169 + * @return array
170 + */
171 + public static function get_flows_data() {
172 + return get_option( self::FLOWS_ACTION_NAME, array() );
58 173 }
59 174 }