PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.27
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.27
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 / controllers / FrmUsageController.php

FrmUsageController.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 6.27, at classes/controllers/FrmUsageController.php

184 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 /**
7 * @since 3.06.04
8 */
9 class FrmUsageController {
10
11 /**
12 * Option name of flows data.
13 *
14 * @since 6.16.1
15 *
16 * @var string
17 */
18 const FLOWS_ACTION_NAME = 'frm_usage_tracking_flows';
19
20 /**
21 * Randomize the first send to prevent our servers from crashing.
22 *
23 * @since 3.06.04
24 *
25 * @return void
26 */
27 public static function schedule_send() {
28 $timestamp = wp_next_scheduled( 'formidable_send_usage' );
29
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 }
35
36 return;
37 }
38
39 if ( $timestamp ) {
40 return;
41 }
42
43 $tracking = array(
44 'day' => random_int( 0, 6 ) * DAY_IN_SECONDS,
45 'hour' => random_int( 0, 23 ) * HOUR_IN_SECONDS,
46 'minute' => random_int( 0, 59 ) * MINUTE_IN_SECONDS,
47 'second' => random_int( 0, 59 ),
48 );
49
50 $offset = array_sum( $tracking );
51 $init_send = strtotime( 'next sunday' ) + $offset;
52
53 wp_schedule_event( $init_send, 'weekly', 'formidable_send_usage' );
54 }
55
56 /**
57 * Adds once weekly to the existing schedules.
58 *
59 * @since 3.06.04
60 *
61 * @param array $schedules Schedules.
62 *
63 * @return array
64 */
65 public static function add_schedules( $schedules = array() ) {
66 $schedules['weekly'] = array(
67 'interval' => DAY_IN_SECONDS * 7,
68 'display' => __( 'Once Weekly', 'formidable' ),
69 );
70 return $schedules;
71 }
72
73 /**
74 * Checks if tracking is allowed.
75 *
76 * @since 6.16.3
77 *
78 * @return bool
79 */
80 public static function tracking_allowed() {
81 $settings = FrmAppHelper::get_settings();
82 return $settings->tracking;
83 }
84
85 /**
86 * @since 3.06.04
87 *
88 * @return void
89 */
90 public static function send_snapshot() {
91 $usage = new FrmUsage();
92 $usage->send_snapshot();
93 }
94
95 /**
96 * Loads scripts.
97 *
98 * @since 6.16.1
99 *
100 * @return void
101 */
102 public static function load_scripts() {
103 if ( self::is_forms_list_page() || FrmAppHelper::is_admin_page( 'formidable-form-templates' ) || FrmAppHelper::is_admin_page() ) {
104 wp_enqueue_script( 'frm-usage-tracking', FrmAppHelper::plugin_url() . '/js/admin/usage-tracking.js', array( 'formidable_dom' ), FrmAppHelper::$plug_version, true );
105 }
106 }
107
108 /**
109 * Checks if is forms list page.
110 *
111 * @since 6.16.1
112 *
113 * @return bool
114 */
115 private static function is_forms_list_page() {
116 if ( ! FrmAppHelper::on_form_listing_page() ) {
117 return false;
118 }
119
120 // Exclude Trash page.
121 $form_type = FrmAppHelper::simple_get( 'form_type' );
122 return 'published' === $form_type;
123 }
124
125 /**
126 * AJAX handler to track flows.
127 *
128 * @since 6.16.1
129 *
130 * @return void
131 */
132 public static function ajax_track_flows() {
133 FrmAppHelper::permission_check( 'frm_view_forms' );
134 check_ajax_referer( 'frm_ajax', 'nonce' );
135
136 $key = FrmAppHelper::get_post_param( 'key', '', 'sanitize_text_field' );
137 $value = FrmAppHelper::get_post_param( 'value', '', 'sanitize_text_field' );
138
139 self::update_flows_data( $key, $value );
140
141 wp_send_json_success();
142 }
143
144 /**
145 * Updates flows data.
146 *
147 * @since 6.16.1
148 *
149 * @param string $key Flow key.
150 * @param string $value Flow value.
151 *
152 * @return void
153 */
154 public static function update_flows_data( $key, $value ) {
155 if ( '' === $key || '' === $value ) {
156 return;
157 }
158
159 $flows_data = self::get_flows_data();
160
161 if ( ! isset( $flows_data[ $key ] ) ) {
162 $flows_data[ $key ] = array();
163 }
164
165 if ( ! isset( $flows_data[ $key ][ $value ] ) ) {
166 $flows_data[ $key ][ $value ] = 0;
167 }
168
169 $flows_data[ $key ][ $value ]++;
170 update_option( self::FLOWS_ACTION_NAME, $flows_data );
171 }
172
173 /**
174 * Get flows data.
175 *
176 * @since 6.16.1
177 *
178 * @return array
179 */
180 public static function get_flows_data() {
181 return get_option( self::FLOWS_ACTION_NAME, array() );
182 }
183 }
184