Formidable Forms – Form Builder for WordPress - Version 3.06.04

Version Description

  • New: Added an option to opt into usage tracking. This will allow us to simplify settings in a future release and better cater to the majority of use cases.
  • Fix: Replace old field ids in the field description and HTML field after duplication or import.
Download this release

Release Info

Developer sswells
Plugin Icon 128x128 Formidable Forms – Form Builder for WordPress
Version 3.06.04
Comparing to
See all releases

Code changes from version 3.06.03 to 3.06.04

classes/controllers/FrmFormActionsController.php CHANGED
@@ -139,6 +139,9 @@ class FrmFormActionsController {
139
 
140
  public static function action_control( $form_action, $form, $action_key, $action_control, $values ) {
141
  $action_control->_set( $action_key );
 
 
 
142
  include( FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/form_action.php' );
143
  }
144
 
@@ -157,6 +160,7 @@ class FrmFormActionsController {
157
  $form_id = absint( $_POST['form_id'] );
158
 
159
  $form_action = $action_control->prepare_new( $form_id );
 
160
 
161
  $values = array();
162
  $form = self::fields_to_values( $form_id, $values );
@@ -182,10 +186,21 @@ class FrmFormActionsController {
182
  $values = array();
183
  $form = self::fields_to_values( $form_action->menu_order, $values );
184
 
 
 
185
  include( FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/_action_inside.php' );
186
  wp_die();
187
  }
188
 
 
 
 
 
 
 
 
 
 
189
  private static function fields_to_values( $form_id, array &$values ) {
190
  $form = FrmForm::getOne( $form_id );
191
 
139
 
140
  public static function action_control( $form_action, $form, $action_key, $action_control, $values ) {
141
  $action_control->_set( $action_key );
142
+
143
+ $use_logging = self::should_show_log_message( $form_action->post_excerpt );
144
+
145
  include( FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/form_action.php' );
146
  }
147
 
160
  $form_id = absint( $_POST['form_id'] );
161
 
162
  $form_action = $action_control->prepare_new( $form_id );
163
+ $use_logging = self::should_show_log_message( $action_type );
164
 
165
  $values = array();
166
  $form = self::fields_to_values( $form_id, $values );
186
  $values = array();
187
  $form = self::fields_to_values( $form_action->menu_order, $values );
188
 
189
+ $use_logging = self::should_show_log_message( $action_type );
190
+
191
  include( FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/_action_inside.php' );
192
  wp_die();
193
  }
194
 
195
+ /**
196
+ * @since 3.06.04
197
+ * @return bool
198
+ */
199
+ private static function should_show_log_message( $action_type ) {
200
+ $logging = array( 'api', 'salesforce', 'constantcontact', 'activecampaign' );
201
+ return in_array( $action_type, $logging ) && ! function_exists( 'frm_log_autoloader' );
202
+ }
203
+
204
  private static function fields_to_values( $form_id, array &$values ) {
205
  $form = FrmForm::getOne( $form_id );
206
 
classes/controllers/FrmFormsController.php CHANGED
@@ -899,6 +899,8 @@ class FrmFormsController {
899
 
900
  $first_h3 = 'frm_first_h3';
901
 
 
 
902
  require( FrmAppHelper::plugin_path() . '/classes/views/frm-forms/settings.php' );
903
  }
904
 
899
 
900
  $first_h3 = 'frm_first_h3';
901
 
902
+ FrmAppController::include_upgrade_overlay();
903
+
904
  require( FrmAppHelper::plugin_path() . '/classes/views/frm-forms/settings.php' );
905
  }
906
 
classes/controllers/FrmHooksController.php CHANGED
@@ -78,6 +78,9 @@ class FrmHooksController {
78
 
79
  //Simple Blocks Controller
80
  add_action( 'init', 'FrmSimpleBlocksController::register_simple_form_block' );
 
 
 
81
  }
82
 
83
  public static function load_admin_hooks() {
@@ -135,6 +138,8 @@ class FrmHooksController {
135
 
136
  // Simple Blocks Controller
137
  add_action( 'enqueue_block_editor_assets', 'FrmSimpleBlocksController::block_editor_assets' );
 
 
138
  }
139
 
140
  public static function load_ajax_hooks() {
78
 
79
  //Simple Blocks Controller
80
  add_action( 'init', 'FrmSimpleBlocksController::register_simple_form_block' );
81
+
82
+ add_filter( 'cron_schedules', 'FrmUsageController::add_schedules' );
83
+ add_action( 'formidable_send_usage', 'FrmUsageController::send_snapshot' );
84
  }
85
 
86
  public static function load_admin_hooks() {
138
 
139
  // Simple Blocks Controller
140
  add_action( 'enqueue_block_editor_assets', 'FrmSimpleBlocksController::block_editor_assets' );
141
+
142
+ add_action( 'admin_init', 'FrmUsageController::schedule_send' );
143
  }
144
 
145
  public static function load_ajax_hooks() {
classes/controllers/FrmUsageController.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ die( 'You are not allowed to call this page directly.' );
4
+ }
5
+
6
+ /**
7
+ * @todo Show opt-in popup after plugin activation.
8
+ * @since 3.06.04
9
+ */
10
+ class FrmUsageController {
11
+
12
+ /**
13
+ * Randomize the first send to prevent our servers from crashing.
14
+ *
15
+ * @since 3.06.04
16
+ */
17
+ public static function schedule_send() {
18
+ if ( wp_next_scheduled( 'formidable_send_usage' ) ) {
19
+ return;
20
+ }
21
+
22
+ $tracking = array(
23
+ 'day' => rand( 0, 6 ) * DAY_IN_SECONDS,
24
+ 'hour' => rand( 0, 23 ) * HOUR_IN_SECONDS,
25
+ 'minute' => rand( 0, 59 ) * MINUTE_IN_SECONDS,
26
+ 'second' => rand( 0, 59 ),
27
+ );
28
+
29
+ $offset = array_sum( $tracking );
30
+ $init_send = strtotime( 'next sunday' ) + $offset;
31
+
32
+ wp_schedule_event( $init_send, 'weekly', 'formidable_send_usage' );
33
+ }
34
+
35
+ /**
36
+ * Adds once weekly to the existing schedules.
37
+ *
38
+ * @since 3.06.04
39
+ */
40
+ public static function add_schedules( $schedules = array() ) {
41
+ $schedules['weekly'] = array(
42
+ 'interval' => DAY_IN_SECONDS * 7,
43
+ 'display' => __( 'Once Weekly', 'formidable' ),
44
+ );
45
+ return $schedules;
46
+ }
47
+
48
+ /**
49
+ * @since 3.06.04
50
+ */
51
+ public static function send_snapshot() {
52
+ $usage = new FrmUsage();
53
+ $usage->send_snapshot();
54
+ }
55
+ }
classes/helpers/FrmAppHelper.php CHANGED
@@ -11,7 +11,7 @@ class FrmAppHelper {
11
  /**
12
  * @since 2.0
13
  */
14
- public static $plug_version = '3.06.03';
15
 
16
  /**
17
  * @since 1.07.02
11
  /**
12
  * @since 2.0
13
  */
14
+ public static $plug_version = '3.06.04';
15
 
16
  /**
17
  * @since 1.07.02
classes/models/FrmAddon.php CHANGED
@@ -328,7 +328,6 @@ class FrmAddon {
328
  $transient = false;
329
  } else {
330
  $this->maybe_use_beta_url( $version_info );
331
- $version_info->new_version = trim( $version_info->new_version, 'p' );
332
 
333
  if ( version_compare( $version_info->new_version, $this->version, '>' ) ) {
334
  $transient = $version_info;
328
  $transient = false;
329
  } else {
330
  $this->maybe_use_beta_url( $version_info );
 
331
 
332
  if ( version_compare( $version_info->new_version, $this->version, '>' ) ) {
333
  $transient = $version_info;
classes/models/FrmEntry.php CHANGED
@@ -458,6 +458,9 @@ class FrmEntry {
458
  }
459
 
460
  // Pagination Methods
 
 
 
461
  public static function getRecordCount( $where = '' ) {
462
  global $wpdb;
463
  $table_join = $wpdb->prefix . 'frm_items it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_forms fr ON it.form_id=fr.id';
458
  }
459
 
460
  // Pagination Methods
461
+ /**
462
+ * @param int|array|string If int, use the form id.
463
+ */
464
  public static function getRecordCount( $where = '' ) {
465
  global $wpdb;
466
  $table_join = $wpdb->prefix . 'frm_items it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_forms fr ON it.form_id=fr.id';
classes/models/FrmField.php CHANGED
@@ -269,6 +269,8 @@ class FrmField {
269
  $values['form_id'] = $new_repeat_form_id;
270
  }
271
 
 
 
272
  $values = apply_filters( 'frm_duplicated_field', $values );
273
  $new_id = self::create( $values );
274
  $frm_duplicate_ids[ $field->id ] = $new_id;
269
  $values['form_id'] = $new_repeat_form_id;
270
  }
271
 
272
+ $values['description'] = FrmFieldsHelper::switch_field_ids( $values['description'] );
273
+
274
  $values = apply_filters( 'frm_duplicated_field', $values );
275
  $new_id = self::create( $values );
276
  $frm_duplicate_ids[ $field->id ] = $new_id;
classes/models/FrmForm.php CHANGED
@@ -626,7 +626,7 @@ class FrmForm {
626
  }
627
 
628
  /**
629
- * @return int count of forms
630
  */
631
  public static function get_count() {
632
  global $wpdb;
626
  }
627
 
628
  /**
629
+ * @return object count of forms
630
  */
631
  public static function get_count() {
632
  global $wpdb;
classes/models/FrmMigrate.php CHANGED
@@ -232,6 +232,7 @@ class FrmMigrate {
232
  delete_option( 'frm_db_version' );
233
  delete_option( 'frm_install_running' );
234
  delete_option( 'frm_lite_settings_upgrade' );
 
235
 
236
  //delete roles
237
  $frm_roles = FrmAppHelper::frm_capabilities();
232
  delete_option( 'frm_db_version' );
233
  delete_option( 'frm_install_running' );
234
  delete_option( 'frm_lite_settings_upgrade' );
235
+ delete_option( 'frm-usage-uuid' );
236
 
237
  //delete roles
238
  $frm_roles = FrmAppHelper::frm_capabilities();
classes/models/FrmSettings.php CHANGED
@@ -32,6 +32,7 @@ class FrmSettings {
32
 
33
  public $no_ips;
34
  public $current_form = 0;
 
35
 
36
  public function __construct( $args = array() ) {
37
  if ( ! defined( 'ABSPATH' ) ) {
@@ -104,6 +105,7 @@ class FrmSettings {
104
 
105
  'email_to' => '[admin_email]',
106
  'no_ips' => 0,
 
107
  );
108
  }
109
 
@@ -237,22 +239,17 @@ class FrmSettings {
237
  }
238
 
239
  private function update_settings( $params ) {
240
- $this->mu_menu = isset( $params['frm_mu_menu'] ) ? $params['frm_mu_menu'] : 0;
241
-
242
  $this->pubkey = trim( $params['frm_pubkey'] );
243
  $this->privkey = $params['frm_privkey'];
244
  $this->re_type = $params['frm_re_type'];
245
  $this->re_lang = $params['frm_re_lang'];
246
- $this->re_multi = isset( $params['frm_re_multi'] ) ? $params['frm_re_multi'] : 0;
247
 
248
  $this->load_style = $params['frm_load_style'];
249
 
250
- $this->use_html = isset( $params['frm_use_html'] ) ? $params['frm_use_html'] : 0;
251
- $this->jquery_css = isset( $params['frm_jquery_css'] ) ? absint( $params['frm_jquery_css'] ) : 0;
252
- $this->accordion_js = isset( $params['frm_accordion_js'] ) ? absint( $params['frm_accordion_js'] ) : 0;
253
- $this->fade_form = isset( $params['frm_fade_form'] ) ? absint( $params['frm_fade_form'] ) : 0;
254
- $this->old_css = isset( $params['frm_old_css'] ) ? absint( $params['frm_old_css'] ) : 0;
255
- $this->no_ips = isset( $params['frm_no_ips'] ) ? absint( $params['frm_no_ips'] ) : 0;
256
  }
257
 
258
  private function update_roles( $params ) {
32
 
33
  public $no_ips;
34
  public $current_form = 0;
35
+ public $tracking;
36
 
37
  public function __construct( $args = array() ) {
38
  if ( ! defined( 'ABSPATH' ) ) {
105
 
106
  'email_to' => '[admin_email]',
107
  'no_ips' => 0,
108
+ 'tracking' => FrmAppHelper::pro_is_installed(),
109
  );
110
  }
111
 
239
  }
240
 
241
  private function update_settings( $params ) {
 
 
242
  $this->pubkey = trim( $params['frm_pubkey'] );
243
  $this->privkey = $params['frm_privkey'];
244
  $this->re_type = $params['frm_re_type'];
245
  $this->re_lang = $params['frm_re_lang'];
 
246
 
247
  $this->load_style = $params['frm_load_style'];
248
 
249
+ $checkboxes = array( 'mu_menu', 're_multi', 'use_html', 'jquery_css', 'accordion_js', 'fade_form', 'old_css', 'no_ips', 'tracking' );
250
+ foreach ( $checkboxes as $set ) {
251
+ $this->$set = isset( $params[ 'frm_' . $set ] ) ? $params[ 'frm_' . $set ] : 0;
252
+ }
 
 
253
  }
254
 
255
  private function update_roles( $params ) {
classes/models/FrmUsage.php ADDED
@@ -0,0 +1,360 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 FrmUsage {
10
+
11
+ /**
12
+ * @since 3.06.04
13
+ */
14
+ public function send_snapshot() {
15
+ if ( ! $this->tracking_allowed() ) {
16
+ return;
17
+ }
18
+
19
+ $ep = 'aHR0cHM6Ly9mcm0tdXNlci10cmFja2luZy5oZXJva3VhcHAuY29tL3NuYXBzaG90';
20
+ $body = json_encode( $this->snapshot() );
21
+
22
+ // Setup variable for wp_remote_request.
23
+ $post = array(
24
+ 'method' => 'POST',
25
+ 'headers' => array(
26
+ 'Accept' => 'application/json',
27
+ 'Content-Type' => 'application/json',
28
+ 'Content-Length' => strlen( $body ),
29
+ ),
30
+ 'body' => $body,
31
+ );
32
+
33
+ wp_remote_request( base64_decode( $ep ), $post );
34
+ }
35
+
36
+ /**
37
+ * @since 3.06.04
38
+ * @return string
39
+ */
40
+ public function uuid( $regenerate = false ) {
41
+ $uuid_key = 'frm-usage-uuid';
42
+ $uuid = get_option( $uuid_key );
43
+
44
+ if ( $regenerate || empty( $uuid ) ) {
45
+ // Definitely not cryptographically secure but
46
+ // close enough to provide an unique id
47
+ $uuid = md5( uniqid() . site_url() );
48
+ update_option( $uuid_key, $uuid, 'no' );
49
+ }
50
+
51
+ return $uuid;
52
+ }
53
+
54
+ /**
55
+ * @since 3.06.04
56
+ * @return array
57
+ */
58
+ public function snapshot() {
59
+ global $wpdb, $wp_version;
60
+
61
+ $theme_data = wp_get_theme();
62
+ $form_counts = FrmForm::get_count();
63
+
64
+ $snap = array(
65
+ 'uuid' => $this->uuid(),
66
+ 'admin_email' => get_option( 'admin_email' ),
67
+ 'wp_version' => $wp_version,
68
+ 'php_version' => phpversion(),
69
+ 'mysql_version' => $wpdb->db_version(),
70
+ 'os' => php_uname( 's' ),
71
+ 'locale' => get_locale(),
72
+
73
+ 'active_license' => FrmAppHelper::pro_is_installed(),
74
+ 'form_count' => $form_counts->published,
75
+ 'entry_count' => FrmEntry::getRecordCount(),
76
+ 'timestamp' => gmdate( 'c' ),
77
+
78
+ 'theme_name' => $theme_data->Name, // phpcs:ignore WordPress.NamingConventions
79
+ 'plugins' => $this->plugins(),
80
+ 'settings' => array(
81
+ $this->settings(),
82
+ ),
83
+ 'forms' => $this->forms(),
84
+ 'fields' => $this->fields(),
85
+ 'actions' => $this->actions(),
86
+ );
87
+
88
+ return apply_filters( 'frm_usage_snapshot', $snap );
89
+ }
90
+
91
+ /**
92
+ * @since 3.06.04
93
+ * @return array
94
+ */
95
+ private function plugins() {
96
+ $plugin_list = get_plugins();
97
+
98
+ $plugins = array();
99
+ foreach ( $plugin_list as $slug => $info ) {
100
+ $plugins[] = array(
101
+ 'name' => $info['Name'],
102
+ 'slug' => $slug,
103
+ 'version' => $info['Version'],
104
+ 'active' => is_plugin_active( $slug ),
105
+ );
106
+ }
107
+
108
+ return $plugins;
109
+ }
110
+
111
+ /**
112
+ * Add global settings to tracking data.
113
+ *
114
+ * @since 3.06.04
115
+ * @return array
116
+ */
117
+ private function settings() {
118
+ $settings_list = FrmAppHelper::get_settings();
119
+ $settings = array(
120
+ 'messages' => $this->messages( $settings_list ),
121
+ 'permissions' => $this->permissions( $settings_list ),
122
+ );
123
+ $pass_settings = array(
124
+ 'load_style',
125
+ 'use_html',
126
+ 'old_css',
127
+ 'fade_form',
128
+ 'jquery_css',
129
+ 're_type',
130
+ 're_lang',
131
+ 're_multi',
132
+ 'menu',
133
+ 'mu_menu',
134
+ 'no_ips',
135
+ 'btsp_css',
136
+ 'btsp_errors',
137
+ );
138
+
139
+ foreach ( $pass_settings as $setting ) {
140
+ if ( isset( $settings_list->$setting ) ) {
141
+ $settings[ $setting ] = $this->maybe_json( $settings_list->$setting );
142
+ }
143
+ }
144
+
145
+ $settings = apply_filters( 'frm_usage_settings', $settings );
146
+
147
+ $settings['messages'] = $this->maybe_json( $settings['messages'] );
148
+ $settings['permissions'] = $this->maybe_json( $settings['permissions'] );
149
+
150
+ return $settings;
151
+ }
152
+
153
+ /**
154
+ * Include the permissions settings for each capability.
155
+ *
156
+ * @since 3.06.04
157
+ * @return array
158
+ */
159
+ private function messages( $settings_list ) {
160
+ $messages = array(
161
+ 'success_msg',
162
+ 'blank_msg',
163
+ 'unique_msg',
164
+ 'invalid_msg',
165
+ 'failed_msg',
166
+ 'submit_value',
167
+ 'login_msg',
168
+ 'admin_permission',
169
+ );
170
+
171
+ $message_settings = array();
172
+ foreach ( $messages as $message ) {
173
+ $message_settings[ $message ] = $settings_list->$message;
174
+ }
175
+
176
+ return $message_settings;
177
+ }
178
+
179
+ /**
180
+ * Include the permissions settings for each capability.
181
+ *
182
+ * @since 3.06.04
183
+ * @return array
184
+ */
185
+ private function permissions( $settings_list ) {
186
+ $permissions = array();
187
+ $frm_roles = FrmAppHelper::frm_capabilities();
188
+
189
+ foreach ( $frm_roles as $frm_role => $frm_role_description ) {
190
+ if ( isset( $settings_list->$frm_role ) ) {
191
+ $permissions[ $frm_role ] = $settings_list->$frm_role;
192
+ }
193
+ }
194
+
195
+ return $permissions;
196
+ }
197
+
198
+ /**
199
+ * @since 3.06.04
200
+ * @return array
201
+ */
202
+ private function forms() {
203
+ $s_query = array(
204
+ array(
205
+ 'or' => 1,
206
+ 'parent_form_id' => null,
207
+ 'parent_form_id <' => 1,
208
+ ),
209
+ );
210
+
211
+ $saved_forms = FrmForm::getAll( $s_query );
212
+ $forms = array();
213
+ $settings = array(
214
+ 'form_class',
215
+ 'akismet',
216
+ 'custom_style',
217
+ 'success_action',
218
+ 'show_form',
219
+ 'no_save',
220
+ 'ajax_load',
221
+ 'ajax_submit',
222
+ 'js_validate',
223
+ 'logged_in_role',
224
+ 'single_entry',
225
+ 'single_entry_type',
226
+ 'editable_role',
227
+ 'open_editable_role',
228
+ 'edit_action',
229
+ 'edit_value',
230
+ 'edit_msg',
231
+ 'save_draft',
232
+ 'draft_msg',
233
+ 'submit_align',
234
+ 'protect_files',
235
+ 'max_entries',
236
+ 'open_status',
237
+ 'closed_msg',
238
+ 'open_date',
239
+ 'close_date',
240
+ 'copy',
241
+ 'prev_value',
242
+ 'submit_conditions',
243
+ );
244
+
245
+ foreach ( $saved_forms as $form ) {
246
+ $new_form = array(
247
+ 'form_id' => $form->id,
248
+ 'description' => $form->description,
249
+ 'logged_in' => $form->logged_in,
250
+ 'editable' => $form->editable,
251
+ 'is_template' => $form->is_template,
252
+ 'entry_count' => FrmEntry::getRecordCount( $form->id ),
253
+ 'field_count' => $this->form_field_count( $form->id ),
254
+ 'form_action_count' => $this->form_action_count( $form->id ),
255
+ );
256
+
257
+ foreach ( $settings as $setting ) {
258
+ if ( isset( $form->options[ $setting ] ) ) {
259
+ $new_form[ $setting ] = $this->maybe_json( $form->options[ $setting ] );
260
+ }
261
+ }
262
+
263
+ $forms[] = apply_filters( 'frm_usage_form', $new_form, compact( 'form' ) );
264
+ }
265
+
266
+ // If the array uses numeric keys, reset them.
267
+ return $forms;
268
+ }
269
+
270
+ /**
271
+ * @since 3.06.04
272
+ * @return int
273
+ */
274
+ private function form_field_count( $form_id ) {
275
+ global $wpdb;
276
+
277
+ $join = $wpdb->prefix . 'frm_fields fi LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_forms fo ON (fi.form_id=fo.id)';
278
+
279
+ $field_query = array(
280
+ 'or' => 1,
281
+ 'form_id' => $form_id,
282
+ 'parent_form_id' => $form_id,
283
+ );
284
+
285
+ return FrmDb::get_count( $join, $field_query );
286
+ }
287
+
288
+ /**
289
+ * @since 3.06.04
290
+ * @return int
291
+ */
292
+ private function form_action_count( $form_id ) {
293
+ $args = array(
294
+ 'post_type' => FrmFormActionsController::$action_post_type,
295
+ 'menu_order' => $form_id,
296
+ 'fields' => 'ids',
297
+ );
298
+
299
+ $actions = FrmDb::check_cache( serialize( $args ), 'frm_actions', $args, 'get_posts' );
300
+ return count( $actions );
301
+ }
302
+
303
+ /**
304
+ * Get the last 100 fields created.
305
+ *
306
+ * @since 3.06.04
307
+ * @return array
308
+ */
309
+ private function fields() {
310
+ $args = array(
311
+ 'limit' => 100,
312
+ 'order_by' => 'id DESC',
313
+ );
314
+
315
+ return FrmDb::get_results( 'frm_fields', array(), 'form_id, name, type', $args );
316
+ }
317
+
318
+ /**
319
+ * @since 3.06.04
320
+ * @return array
321
+ */
322
+ private function actions() {
323
+ $args = array(
324
+ 'post_type' => FrmFormActionsController::$action_post_type,
325
+ 'numberposts' => 100,
326
+ );
327
+
328
+ $actions = array();
329
+
330
+ $saved_actions = FrmDb::check_cache( serialize( $args ), 'frm_actions', $args, 'get_posts' );
331
+ foreach ( $saved_actions as $action ) {
332
+ $actions[] = array(
333
+ 'form_id' => $action->menu_order,
334
+ 'type' => $action->post_excerpt,
335
+ 'status' => $action->post_status,
336
+ 'settings' => $action->post_content,
337
+ );
338
+ }
339
+
340
+ return $actions;
341
+ }
342
+
343
+ /**
344
+ * @since 3.06.04
345
+ * @return bool
346
+ */
347
+ private function tracking_allowed() {
348
+ $settings = FrmAppHelper::get_settings();
349
+ return $settings->tracking;
350
+ }
351
+
352
+ /**
353
+ * @since 3.06.04
354
+ * @return string
355
+ */
356
+ private function maybe_json( $value ) {
357
+ return is_array( $value ) ? json_encode( $value ) : $value;
358
+ }
359
+ }
360
+
classes/views/frm-form-actions/_action_inside.php CHANGED
@@ -82,6 +82,21 @@ if ( ! function_exists( 'load_frm_autoresponder' ) ) {
82
  </h3>
83
  <?php
84
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  ?>
86
  <span class="alignright frm_action_id <?php echo esc_attr( empty( $form_action->ID ) ? 'frm_hidden' : '' ); ?>">
87
  <?php printf( esc_html__( 'Action ID: %1$s', 'formidable' ), esc_attr( $form_action->ID ) ); ?>
82
  </h3>
83
  <?php
84
  }
85
+
86
+ // Show link to install logs.
87
+ if ( $use_logging ) {
88
+ $upgrading = FrmAddonsController::install_link( 'logs' );
89
+ if ( isset( $upgrading['url'] ) ) {
90
+ ?>
91
+ <p>
92
+ <a href="javascript:void(0)" class="frm_show_upgrade" data-upgrade="<?php esc_attr_e( 'Form action logs', 'formidable' ); ?>" data-medium="action-logs" data-oneclick="<?php echo esc_attr( json_encode( $upgrading ) ); ?>">
93
+ <i class="dashicons dashicons-info"></i>
94
+ <?php esc_html_e( 'Install logging to get more information on API requests.', 'formidable' ); ?>
95
+ </a>
96
+ </p>
97
+ <?php
98
+ }
99
+ }
100
  ?>
101
  <span class="alignright frm_action_id <?php echo esc_attr( empty( $form_action->ID ) ? 'frm_hidden' : '' ); ?>">
102
  <?php printf( esc_html__( 'Action ID: %1$s', 'formidable' ), esc_attr( $form_action->ID ) ); ?>
classes/views/frm-forms/settings.php CHANGED
@@ -265,16 +265,10 @@
265
 
266
  //For each add-on, add an li, class, and javascript function. If active, add an additional class.
267
  $included = false;
268
- $use_logging = false;
269
- $logging = array( 'api', 'salesforce', 'constantcontact', 'activecampaign' );
270
  foreach ( $action_controls as $action_control ) {
271
  $classes = ( isset( $action_control->action_options['active'] ) && $action_control->action_options['active'] ) ? 'frm_active_action ' : 'frm_inactive_action ';
272
  $classes .= $action_control->action_options['classes'];
273
 
274
- if ( ! $use_logging && in_array( $action_control->id_base, $logging ) ) {
275
- $use_logging = true;
276
- }
277
-
278
  if ( ! $included && strpos( $classes, 'frm_show_upgrade' ) ) {
279
  $included = true;
280
  FrmAppController::include_upgrade_overlay();
@@ -307,23 +301,6 @@
307
  </div>
308
  <?php FrmFormActionsController::list_actions( $form, $values ); ?>
309
 
310
- <?php
311
- // Show link to install logs.
312
- if ( $use_logging && ! function_exists( 'frm_log_autoloader' ) ) {
313
- $upgrading = FrmAddonsController::install_link( 'logs' );
314
- if ( isset( $upgrading['url'] ) ) {
315
- FrmAppController::include_upgrade_overlay();
316
- ?>
317
- <p>
318
- <a href="javascript:void(0)" class="frm_show_upgrade" data-upgrade="<?php esc_attr_e( 'Form action logs', 'formidable' ); ?>" data-medium="action-logs" data-oneclick="<?php echo esc_attr( json_encode( $upgrading ) ); ?>">
319
- <i class="dashicons dashicons-info"></i>
320
- <?php esc_html_e( 'Install logging to get more information on API requests.', 'formidable' ); ?>
321
- </a>
322
- </p>
323
- <?php
324
- }
325
- }
326
- ?>
327
  </div>
328
 
329
  <div id="html_settings" class="tabs-panel <?php echo esc_attr( $a === 'html_settings' ) ? ' frm_block' : ' frm_hidden'; ?>">
265
 
266
  //For each add-on, add an li, class, and javascript function. If active, add an additional class.
267
  $included = false;
 
 
268
  foreach ( $action_controls as $action_control ) {
269
  $classes = ( isset( $action_control->action_options['active'] ) && $action_control->action_options['active'] ) ? 'frm_active_action ' : 'frm_inactive_action ';
270
  $classes .= $action_control->action_options['classes'];
271
 
 
 
 
 
272
  if ( ! $included && strpos( $classes, 'frm_show_upgrade' ) ) {
273
  $included = true;
274
  FrmAppController::include_upgrade_overlay();
301
  </div>
302
  <?php FrmFormActionsController::list_actions( $form, $values ); ?>
303
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
  </div>
305
 
306
  <div id="html_settings" class="tabs-panel <?php echo esc_attr( $a === 'html_settings' ) ? ' frm_block' : ' frm_hidden'; ?>">
classes/views/frm-settings/form.php CHANGED
@@ -203,6 +203,16 @@
203
 
204
  </p>
205
 
 
 
 
 
 
 
 
 
 
 
206
  </div>
207
 
208
  <?php
203
 
204
  </p>
205
 
206
+ <p>
207
+ <label class="frm_left_label">
208
+ <?php esc_html_e( 'Usage Tracking', 'formidable' ); ?>
209
+ </label>
210
+ <label for="frm_tracking">
211
+ <input type="checkbox" name="frm_tracking" id="frm_tracking" value="1" <?php checked( $frm_settings->tracking, 1 ); ?> />
212
+ <?php esc_html_e( 'Allow Formidable Forms to track plugin usage? Opt-in to tracking to help us ensure compatibility and simplify our settings.', 'formidable' ); ?>
213
+ </label>
214
+ </p>
215
+
216
  </div>
217
 
218
  <?php
formidable.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Formidable Forms
4
  Description: Quickly and easily create drag-and-drop forms
5
- Version: 3.06.03
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
2
  /*
3
  Plugin Name: Formidable Forms
4
  Description: Quickly and easily create drag-and-drop forms
5
+ Version: 3.06.04
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
js/formidable_admin.js CHANGED
@@ -1697,7 +1697,7 @@ function frmAdminBuildJS(){
1697
  return;
1698
  }
1699
 
1700
- jQuery('.frm_show_upgrade').click( function( event ) {
1701
  event.preventDefault();
1702
  jQuery('.frm_feature_label').html( this.dataset.upgrade );
1703
  jQuery( '#frm_upgrade_modal h2' ).show();
1697
  return;
1698
  }
1699
 
1700
+ jQuery( document ).on( 'click', '.frm_show_upgrade', function( event ) {
1701
  event.preventDefault();
1702
  jQuery('.frm_feature_label').html( this.dataset.upgrade );
1703
  jQuery( '#frm_upgrade_modal h2' ).show();
languages/formidable.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Formidable Forms plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Formidable Forms 3.06.03\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2019-03-19T20:32:32+01:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.1.0\n"
15
  "X-Domain: formidable\n"
@@ -103,7 +103,7 @@ msgstr ""
103
  msgid "Strategy11"
104
  msgstr ""
105
 
106
- #: classes/models/FrmMigrate.php:506
107
  msgid "Sending"
108
  msgstr ""
109
 
@@ -112,58 +112,58 @@ msgstr ""
112
  msgid "Your %1$s license key is missing. Please add it on the %2$slicenses page%3$s."
113
  msgstr ""
114
 
115
- #: classes/models/FrmAddon.php:454
116
  msgid "Oops! You forgot to enter your license number."
117
  msgstr ""
118
 
119
- #: classes/models/FrmAddon.php:530
120
  msgid "Your license has been activated. Enjoy!"
121
  msgstr ""
122
 
123
- #: classes/models/FrmAddon.php:531
124
- #: classes/models/FrmAddon.php:536
125
  msgid "That license key is invalid"
126
  msgstr ""
127
 
128
- #: classes/models/FrmAddon.php:532
129
  msgid "That license is expired"
130
  msgstr ""
131
 
132
- #: classes/models/FrmAddon.php:533
133
  msgid "That license has been refunded"
134
  msgstr ""
135
 
136
- #: classes/models/FrmAddon.php:534
137
  msgid "That license has been used on too many sites"
138
  msgstr ""
139
 
140
- #: classes/models/FrmAddon.php:535
141
  msgid "Oops! That is the wrong license key for this plugin."
142
  msgstr ""
143
 
144
- #: classes/models/FrmAddon.php:558
145
  msgid "That license was removed successfully"
146
  msgstr ""
147
 
148
- #: classes/models/FrmAddon.php:560
149
  msgid "There was an error deactivating your license."
150
  msgstr ""
151
 
152
- #: classes/models/FrmAddon.php:593
153
  msgid "Your License Key was invalid"
154
  msgstr ""
155
 
156
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
157
- #: classes/models/FrmAddon.php:597
158
  msgid "You had an error communicating with the Formidable API. %1$sClick here%2$s for more information."
159
  msgstr ""
160
 
161
- #: classes/models/FrmAddon.php:600
162
  msgid "You had an HTTP error connecting to the Formidable API"
163
  msgstr ""
164
 
165
  #. translators: %1$s: Error code, %2$s: Error message
166
- #: classes/models/FrmAddon.php:611
167
  msgid "There was a %1$s error: %2$s"
168
  msgstr ""
169
 
@@ -239,7 +239,7 @@ msgid "Dropdown"
239
  msgstr ""
240
 
241
  #: classes/models/FrmField.php:34
242
- #: classes/controllers/FrmFormsController.php:1001
243
  msgid "Email"
244
  msgstr ""
245
 
@@ -264,7 +264,7 @@ msgid "Hidden Field"
264
  msgstr ""
265
 
266
  #: classes/models/FrmField.php:58
267
- #: classes/controllers/FrmFormsController.php:996
268
  msgid "User ID"
269
  msgstr ""
270
 
@@ -367,8 +367,8 @@ msgid "There was a problem with your submission. Please try again."
367
  msgstr ""
368
 
369
  #: classes/models/FrmEntryValidate.php:14
370
- #: classes/models/FrmSettings.php:103
371
- #: classes/controllers/FrmFormActionsController.php:215
372
  msgid "You do not have permission to do that"
373
  msgstr ""
374
 
@@ -381,36 +381,36 @@ msgstr ""
381
  msgid "Your entry appears to be blacklist spam!"
382
  msgstr ""
383
 
384
- #: classes/models/FrmSettings.php:96
385
  msgid "Your responses were successfully submitted. Thank you!"
386
  msgstr ""
387
 
388
- #: classes/models/FrmSettings.php:97
389
  msgid "This field cannot be blank."
390
  msgstr ""
391
 
392
- #: classes/models/FrmSettings.php:98
393
  msgid "This value must be unique."
394
  msgstr ""
395
 
396
- #: classes/models/FrmSettings.php:99
397
  msgid "There was a problem with your submission. Errors are marked below."
398
  msgstr ""
399
 
400
- #: classes/models/FrmSettings.php:100
401
  msgid "We're sorry. It looks like you've already submitted that."
402
  msgstr ""
403
 
404
- #: classes/models/FrmSettings.php:101
405
  #: classes/views/styles/_sample_form.php:77
406
  msgid "Submit"
407
  msgstr ""
408
 
409
- #: classes/models/FrmSettings.php:102
410
  msgid "You do not have permission to view this form."
411
  msgstr ""
412
 
413
- #: classes/models/FrmSettings.php:170
414
  msgid "The reCAPTCHA was not entered correctly"
415
  msgstr ""
416
 
@@ -485,7 +485,7 @@ msgstr ""
485
  #: classes/models/FrmFormAction.php:748
486
  #: classes/views/frm-forms/_publish_box.php:16
487
  #: classes/views/frm-forms/_publish_box.php:20
488
- #: classes/views/frm-forms/settings.php:400
489
  #: classes/views/frm-forms/edit.php:25
490
  #: classes/views/frm-forms/add_field_links.php:7
491
  #: classes/helpers/FrmFormsHelper.php:129
@@ -835,6 +835,10 @@ msgstr ""
835
  msgid "Click to toggle"
836
  msgstr ""
837
 
 
 
 
 
838
  #: classes/controllers/FrmFormsController.php:187
839
  msgid "Settings Successfully Updated"
840
  msgstr ""
@@ -947,119 +951,119 @@ msgstr ""
947
  msgid "Template was Successfully Updated"
948
  msgstr ""
949
 
950
- #: classes/controllers/FrmFormsController.php:938
951
  msgid "Customize the field values with the following parameters. Click to see a sample."
952
  msgstr ""
953
 
954
- #: classes/controllers/FrmFormsController.php:952
955
  msgid "Insert user information"
956
  msgstr ""
957
 
958
- #: classes/controllers/FrmFormsController.php:975
959
  msgid "Separator"
960
  msgstr ""
961
 
962
- #: classes/controllers/FrmFormsController.php:976
963
  msgid "Use a different separator for checkbox fields"
964
  msgstr ""
965
 
966
- #: classes/controllers/FrmFormsController.php:978
967
  msgid "Date Format"
968
  msgstr ""
969
 
970
- #: classes/controllers/FrmFormsController.php:979
971
  msgid "Field Label"
972
  msgstr ""
973
 
974
- #: classes/controllers/FrmFormsController.php:981
975
  msgid "No Auto P"
976
  msgstr ""
977
 
978
- #: classes/controllers/FrmFormsController.php:982
979
  msgid "Do not automatically add any paragraphs or line breaks"
980
  msgstr ""
981
 
982
- #: classes/controllers/FrmFormsController.php:997
983
  msgid "First Name"
984
  msgstr ""
985
 
986
- #: classes/controllers/FrmFormsController.php:998
987
  msgid "Last Name"
988
  msgstr ""
989
 
990
- #: classes/controllers/FrmFormsController.php:999
991
  msgid "Display Name"
992
  msgstr ""
993
 
994
- #: classes/controllers/FrmFormsController.php:1000
995
  msgid "User Login"
996
  msgstr ""
997
 
998
- #: classes/controllers/FrmFormsController.php:1002
999
  msgid "Avatar"
1000
  msgstr ""
1001
 
1002
- #: classes/controllers/FrmFormsController.php:1003
1003
  msgid "Author Link"
1004
  msgstr ""
1005
 
1006
- #: classes/controllers/FrmFormsController.php:1015
1007
  #: classes/views/frm-entries/sidebar-shared.php:32
1008
  msgid "Entry ID"
1009
  msgstr ""
1010
 
1011
- #: classes/controllers/FrmFormsController.php:1016
1012
  #: classes/controllers/FrmEntriesController.php:105
1013
  #: classes/views/frm-entries/sidebar-shared.php:38
1014
  #: classes/views/frm-entries/form.php:43
1015
  msgid "Entry Key"
1016
  msgstr ""
1017
 
1018
- #: classes/controllers/FrmFormsController.php:1017
1019
  msgid "Post ID"
1020
  msgstr ""
1021
 
1022
- #: classes/controllers/FrmFormsController.php:1018
1023
  msgid "User IP"
1024
  msgstr ""
1025
 
1026
- #: classes/controllers/FrmFormsController.php:1019
1027
  msgid "Entry created"
1028
  msgstr ""
1029
 
1030
- #: classes/controllers/FrmFormsController.php:1020
1031
  msgid "Entry updated"
1032
  msgstr ""
1033
 
1034
- #: classes/controllers/FrmFormsController.php:1022
1035
  msgid "Site URL"
1036
  msgstr ""
1037
 
1038
- #: classes/controllers/FrmFormsController.php:1023
1039
  msgid "Site Name"
1040
  msgstr ""
1041
 
1042
- #: classes/controllers/FrmFormsController.php:1031
1043
  msgid "Default Msg"
1044
  msgstr ""
1045
 
1046
- #: classes/controllers/FrmFormsController.php:1032
1047
  msgid "Default HTML"
1048
  msgstr ""
1049
 
1050
- #: classes/controllers/FrmFormsController.php:1033
1051
  msgid "Default Plain"
1052
  msgstr ""
1053
 
1054
- #: classes/controllers/FrmFormsController.php:1122
1055
  msgid "No forms were specified"
1056
  msgstr ""
1057
 
1058
- #: classes/controllers/FrmFormsController.php:1225
1059
  msgid "Abnormal HTML characters prevented your form from saving correctly"
1060
  msgstr ""
1061
 
1062
- #: classes/controllers/FrmFormsController.php:1294
1063
  #: classes/views/frm-forms/list-templates.php:56
1064
  #: classes/views/shared/admin-header.php:29
1065
  #: classes/views/shared/form-nav.php:32
@@ -1072,16 +1076,16 @@ msgstr ""
1072
  msgid "(no title)"
1073
  msgstr ""
1074
 
1075
- #: classes/controllers/FrmFormsController.php:1340
1076
- #: classes/controllers/FrmFormsController.php:1354
1077
  msgid "Please select a valid form"
1078
  msgstr ""
1079
 
1080
- #: classes/controllers/FrmFormsController.php:1585
1081
  msgid "Please wait while you are redirected."
1082
  msgstr ""
1083
 
1084
- #: classes/controllers/FrmFormsController.php:1619
1085
  msgid "%1$sClick here%2$s if you are not automatically redirected."
1086
  msgstr ""
1087
 
@@ -1334,35 +1338,27 @@ msgstr ""
1334
  msgid "Add New Action"
1335
  msgstr ""
1336
 
1337
- #: classes/views/frm-forms/settings.php:282
1338
  msgid "%s form actions"
1339
  msgstr ""
1340
 
1341
- #: classes/views/frm-forms/settings.php:305
1342
  msgid "Click an action to add it to this form"
1343
  msgstr ""
1344
 
1345
- #: classes/views/frm-forms/settings.php:318
1346
- msgid "Form action logs"
1347
- msgstr ""
1348
-
1349
- #: classes/views/frm-forms/settings.php:320
1350
- msgid "Install logging to get more information on API requests."
1351
- msgstr ""
1352
-
1353
- #: classes/views/frm-forms/settings.php:333
1354
  msgid "Form Classes"
1355
  msgstr ""
1356
 
1357
- #: classes/views/frm-forms/settings.php:339
1358
  msgid "Before Fields"
1359
  msgstr ""
1360
 
1361
- #: classes/views/frm-forms/settings.php:361
1362
  msgid "After Fields"
1363
  msgstr ""
1364
 
1365
- #: classes/views/frm-forms/settings.php:365
1366
  msgid "Submit Button"
1367
  msgstr ""
1368
 
@@ -1905,7 +1901,15 @@ msgstr ""
1905
  msgid "Setup Automation"
1906
  msgstr ""
1907
 
1908
- #: classes/views/frm-form-actions/_action_inside.php:87
 
 
 
 
 
 
 
 
1909
  msgid "Action ID: %1$s"
1910
  msgstr ""
1911
 
@@ -2630,7 +2634,7 @@ msgid "Your license key provides access to automatic updates."
2630
  msgstr ""
2631
 
2632
  #: classes/views/frm-settings/form.php:48
2633
- #: classes/views/frm-settings/form.php:235
2634
  msgid "Update Options"
2635
  msgstr ""
2636
 
@@ -2783,7 +2787,15 @@ msgstr ""
2783
  msgid "Do not store IPs with form submissions. Check this box if you are in the UK."
2784
  msgstr ""
2785
 
2786
- #: classes/views/frm-settings/form.php:231
 
 
 
 
 
 
 
 
2787
  msgid "Uninstall Formidable"
2788
  msgstr ""
2789
 
2
  # This file is distributed under the same license as the Formidable Forms plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Formidable Forms 3.06.04\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2019-04-03T22:46:25+02:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.1.0\n"
15
  "X-Domain: formidable\n"
103
  msgid "Strategy11"
104
  msgstr ""
105
 
106
+ #: classes/models/FrmMigrate.php:507
107
  msgid "Sending"
108
  msgstr ""
109
 
112
  msgid "Your %1$s license key is missing. Please add it on the %2$slicenses page%3$s."
113
  msgstr ""
114
 
115
+ #: classes/models/FrmAddon.php:453
116
  msgid "Oops! You forgot to enter your license number."
117
  msgstr ""
118
 
119
+ #: classes/models/FrmAddon.php:529
120
  msgid "Your license has been activated. Enjoy!"
121
  msgstr ""
122
 
123
+ #: classes/models/FrmAddon.php:530
124
+ #: classes/models/FrmAddon.php:535
125
  msgid "That license key is invalid"
126
  msgstr ""
127
 
128
+ #: classes/models/FrmAddon.php:531
129
  msgid "That license is expired"
130
  msgstr ""
131
 
132
+ #: classes/models/FrmAddon.php:532
133
  msgid "That license has been refunded"
134
  msgstr ""
135
 
136
+ #: classes/models/FrmAddon.php:533
137
  msgid "That license has been used on too many sites"
138
  msgstr ""
139
 
140
+ #: classes/models/FrmAddon.php:534
141
  msgid "Oops! That is the wrong license key for this plugin."
142
  msgstr ""
143
 
144
+ #: classes/models/FrmAddon.php:557
145
  msgid "That license was removed successfully"
146
  msgstr ""
147
 
148
+ #: classes/models/FrmAddon.php:559
149
  msgid "There was an error deactivating your license."
150
  msgstr ""
151
 
152
+ #: classes/models/FrmAddon.php:592
153
  msgid "Your License Key was invalid"
154
  msgstr ""
155
 
156
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
157
+ #: classes/models/FrmAddon.php:596
158
  msgid "You had an error communicating with the Formidable API. %1$sClick here%2$s for more information."
159
  msgstr ""
160
 
161
+ #: classes/models/FrmAddon.php:599
162
  msgid "You had an HTTP error connecting to the Formidable API"
163
  msgstr ""
164
 
165
  #. translators: %1$s: Error code, %2$s: Error message
166
+ #: classes/models/FrmAddon.php:610
167
  msgid "There was a %1$s error: %2$s"
168
  msgstr ""
169
 
239
  msgstr ""
240
 
241
  #: classes/models/FrmField.php:34
242
+ #: classes/controllers/FrmFormsController.php:1003
243
  msgid "Email"
244
  msgstr ""
245
 
264
  msgstr ""
265
 
266
  #: classes/models/FrmField.php:58
267
+ #: classes/controllers/FrmFormsController.php:998
268
  msgid "User ID"
269
  msgstr ""
270
 
367
  msgstr ""
368
 
369
  #: classes/models/FrmEntryValidate.php:14
370
+ #: classes/models/FrmSettings.php:104
371
+ #: classes/controllers/FrmFormActionsController.php:230
372
  msgid "You do not have permission to do that"
373
  msgstr ""
374
 
381
  msgid "Your entry appears to be blacklist spam!"
382
  msgstr ""
383
 
384
+ #: classes/models/FrmSettings.php:97
385
  msgid "Your responses were successfully submitted. Thank you!"
386
  msgstr ""
387
 
388
+ #: classes/models/FrmSettings.php:98
389
  msgid "This field cannot be blank."
390
  msgstr ""
391
 
392
+ #: classes/models/FrmSettings.php:99
393
  msgid "This value must be unique."
394
  msgstr ""
395
 
396
+ #: classes/models/FrmSettings.php:100
397
  msgid "There was a problem with your submission. Errors are marked below."
398
  msgstr ""
399
 
400
+ #: classes/models/FrmSettings.php:101
401
  msgid "We're sorry. It looks like you've already submitted that."
402
  msgstr ""
403
 
404
+ #: classes/models/FrmSettings.php:102
405
  #: classes/views/styles/_sample_form.php:77
406
  msgid "Submit"
407
  msgstr ""
408
 
409
+ #: classes/models/FrmSettings.php:103
410
  msgid "You do not have permission to view this form."
411
  msgstr ""
412
 
413
+ #: classes/models/FrmSettings.php:172
414
  msgid "The reCAPTCHA was not entered correctly"
415
  msgstr ""
416
 
485
  #: classes/models/FrmFormAction.php:748
486
  #: classes/views/frm-forms/_publish_box.php:16
487
  #: classes/views/frm-forms/_publish_box.php:20
488
+ #: classes/views/frm-forms/settings.php:377
489
  #: classes/views/frm-forms/edit.php:25
490
  #: classes/views/frm-forms/add_field_links.php:7
491
  #: classes/helpers/FrmFormsHelper.php:129
835
  msgid "Click to toggle"
836
  msgstr ""
837
 
838
+ #: classes/controllers/FrmUsageController.php:43
839
+ msgid "Once Weekly"
840
+ msgstr ""
841
+
842
  #: classes/controllers/FrmFormsController.php:187
843
  msgid "Settings Successfully Updated"
844
  msgstr ""
951
  msgid "Template was Successfully Updated"
952
  msgstr ""
953
 
954
+ #: classes/controllers/FrmFormsController.php:940
955
  msgid "Customize the field values with the following parameters. Click to see a sample."
956
  msgstr ""
957
 
958
+ #: classes/controllers/FrmFormsController.php:954
959
  msgid "Insert user information"
960
  msgstr ""
961
 
962
+ #: classes/controllers/FrmFormsController.php:977
963
  msgid "Separator"
964
  msgstr ""
965
 
966
+ #: classes/controllers/FrmFormsController.php:978
967
  msgid "Use a different separator for checkbox fields"
968
  msgstr ""
969
 
970
+ #: classes/controllers/FrmFormsController.php:980
971
  msgid "Date Format"
972
  msgstr ""
973
 
974
+ #: classes/controllers/FrmFormsController.php:981
975
  msgid "Field Label"
976
  msgstr ""
977
 
978
+ #: classes/controllers/FrmFormsController.php:983
979
  msgid "No Auto P"
980
  msgstr ""
981
 
982
+ #: classes/controllers/FrmFormsController.php:984
983
  msgid "Do not automatically add any paragraphs or line breaks"
984
  msgstr ""
985
 
986
+ #: classes/controllers/FrmFormsController.php:999
987
  msgid "First Name"
988
  msgstr ""
989
 
990
+ #: classes/controllers/FrmFormsController.php:1000
991
  msgid "Last Name"
992
  msgstr ""
993
 
994
+ #: classes/controllers/FrmFormsController.php:1001
995
  msgid "Display Name"
996
  msgstr ""
997
 
998
+ #: classes/controllers/FrmFormsController.php:1002
999
  msgid "User Login"
1000
  msgstr ""
1001
 
1002
+ #: classes/controllers/FrmFormsController.php:1004
1003
  msgid "Avatar"
1004
  msgstr ""
1005
 
1006
+ #: classes/controllers/FrmFormsController.php:1005
1007
  msgid "Author Link"
1008
  msgstr ""
1009
 
1010
+ #: classes/controllers/FrmFormsController.php:1017
1011
  #: classes/views/frm-entries/sidebar-shared.php:32
1012
  msgid "Entry ID"
1013
  msgstr ""
1014
 
1015
+ #: classes/controllers/FrmFormsController.php:1018
1016
  #: classes/controllers/FrmEntriesController.php:105
1017
  #: classes/views/frm-entries/sidebar-shared.php:38
1018
  #: classes/views/frm-entries/form.php:43
1019
  msgid "Entry Key"
1020
  msgstr ""
1021
 
1022
+ #: classes/controllers/FrmFormsController.php:1019
1023
  msgid "Post ID"
1024
  msgstr ""
1025
 
1026
+ #: classes/controllers/FrmFormsController.php:1020
1027
  msgid "User IP"
1028
  msgstr ""
1029
 
1030
+ #: classes/controllers/FrmFormsController.php:1021
1031
  msgid "Entry created"
1032
  msgstr ""
1033
 
1034
+ #: classes/controllers/FrmFormsController.php:1022
1035
  msgid "Entry updated"
1036
  msgstr ""
1037
 
1038
+ #: classes/controllers/FrmFormsController.php:1024
1039
  msgid "Site URL"
1040
  msgstr ""
1041
 
1042
+ #: classes/controllers/FrmFormsController.php:1025
1043
  msgid "Site Name"
1044
  msgstr ""
1045
 
1046
+ #: classes/controllers/FrmFormsController.php:1033
1047
  msgid "Default Msg"
1048
  msgstr ""
1049
 
1050
+ #: classes/controllers/FrmFormsController.php:1034
1051
  msgid "Default HTML"
1052
  msgstr ""
1053
 
1054
+ #: classes/controllers/FrmFormsController.php:1035
1055
  msgid "Default Plain"
1056
  msgstr ""
1057
 
1058
+ #: classes/controllers/FrmFormsController.php:1124
1059
  msgid "No forms were specified"
1060
  msgstr ""
1061
 
1062
+ #: classes/controllers/FrmFormsController.php:1227
1063
  msgid "Abnormal HTML characters prevented your form from saving correctly"
1064
  msgstr ""
1065
 
1066
+ #: classes/controllers/FrmFormsController.php:1296
1067
  #: classes/views/frm-forms/list-templates.php:56
1068
  #: classes/views/shared/admin-header.php:29
1069
  #: classes/views/shared/form-nav.php:32
1076
  msgid "(no title)"
1077
  msgstr ""
1078
 
1079
+ #: classes/controllers/FrmFormsController.php:1342
1080
+ #: classes/controllers/FrmFormsController.php:1356
1081
  msgid "Please select a valid form"
1082
  msgstr ""
1083
 
1084
+ #: classes/controllers/FrmFormsController.php:1587
1085
  msgid "Please wait while you are redirected."
1086
  msgstr ""
1087
 
1088
+ #: classes/controllers/FrmFormsController.php:1621
1089
  msgid "%1$sClick here%2$s if you are not automatically redirected."
1090
  msgstr ""
1091
 
1338
  msgid "Add New Action"
1339
  msgstr ""
1340
 
1341
+ #: classes/views/frm-forms/settings.php:276
1342
  msgid "%s form actions"
1343
  msgstr ""
1344
 
1345
+ #: classes/views/frm-forms/settings.php:299
1346
  msgid "Click an action to add it to this form"
1347
  msgstr ""
1348
 
1349
+ #: classes/views/frm-forms/settings.php:310
 
 
 
 
 
 
 
 
1350
  msgid "Form Classes"
1351
  msgstr ""
1352
 
1353
+ #: classes/views/frm-forms/settings.php:316
1354
  msgid "Before Fields"
1355
  msgstr ""
1356
 
1357
+ #: classes/views/frm-forms/settings.php:338
1358
  msgid "After Fields"
1359
  msgstr ""
1360
 
1361
+ #: classes/views/frm-forms/settings.php:342
1362
  msgid "Submit Button"
1363
  msgstr ""
1364
 
1901
  msgid "Setup Automation"
1902
  msgstr ""
1903
 
1904
+ #: classes/views/frm-form-actions/_action_inside.php:92
1905
+ msgid "Form action logs"
1906
+ msgstr ""
1907
+
1908
+ #: classes/views/frm-form-actions/_action_inside.php:94
1909
+ msgid "Install logging to get more information on API requests."
1910
+ msgstr ""
1911
+
1912
+ #: classes/views/frm-form-actions/_action_inside.php:102
1913
  msgid "Action ID: %1$s"
1914
  msgstr ""
1915
 
2634
  msgstr ""
2635
 
2636
  #: classes/views/frm-settings/form.php:48
2637
+ #: classes/views/frm-settings/form.php:245
2638
  msgid "Update Options"
2639
  msgstr ""
2640
 
2787
  msgid "Do not store IPs with form submissions. Check this box if you are in the UK."
2788
  msgstr ""
2789
 
2790
+ #: classes/views/frm-settings/form.php:208
2791
+ msgid "Usage Tracking"
2792
+ msgstr ""
2793
+
2794
+ #: classes/views/frm-settings/form.php:212
2795
+ msgid "Allow Formidable Forms to track plugin usage? Opt-in to tracking to help us ensure compatibility and simplify our settings."
2796
+ msgstr ""
2797
+
2798
+ #: classes/views/frm-settings/form.php:241
2799
  msgid "Uninstall Formidable"
2800
  msgstr ""
2801
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: forms, contact form, form builder, survey, form maker, form, form creator
4
  Requires at least: 4.5
5
  Tested up to: 5.1.1
6
  Requires PHP: 5.3
7
- Stable tag: 3.06.03
8
 
9
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quiz forms, and more.
10
 
@@ -374,16 +374,13 @@ Formidable Forms drag & drop form builder combined with our add-ons is the most
374
  To get access to more features, integrations, and support, <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">upgrade to Formidable Forms Pro</a>. A Pro license gives you access to the full version of Formidable Forms for more advanced contact forms, Formidable Views, graphs and stats, priority support, and Formidable Forms Add-ons!
375
 
376
  == Changelog ==
 
 
 
 
377
  = 3.06.03 =
378
  * Fix: The required indicator for a field was blank after importing a form.
379
  * Fix: Only include the id of the error message once in aria-describedby for linking the error message for screen readers.
380
  * Fix: Prevent a couple PHP warning messages with certain settings.
381
 
382
- = 3.06.02 =
383
- * New: More WCAG improvements. Link the error messages to the field for screenreaders.
384
- * Fix: When resending emails, don't send emails that are toggled off.
385
- * Fix: Prevent other plugins from adding messages on the form templates and new form pages.
386
- * Fix: Prevent front-end styles from loading on back-end pages.
387
- * Fix: When the screen settings are changed after filtering the entry list, stay on the filtered list.
388
-
389
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>
4
  Requires at least: 4.5
5
  Tested up to: 5.1.1
6
  Requires PHP: 5.3
7
+ Stable tag: 3.06.04
8
 
9
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quiz forms, and more.
10
 
374
  To get access to more features, integrations, and support, <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">upgrade to Formidable Forms Pro</a>. A Pro license gives you access to the full version of Formidable Forms for more advanced contact forms, Formidable Views, graphs and stats, priority support, and Formidable Forms Add-ons!
375
 
376
  == Changelog ==
377
+ = 3.06.04 =
378
+ * New: Added an option to opt into usage tracking. This will allow us to simplify settings in a future release and better cater to the majority of use cases.
379
+ * Fix: Replace old field ids in the field description and HTML field after duplication or import.
380
+
381
  = 3.06.03 =
382
  * Fix: The required indicator for a field was blank after importing a form.
383
  * Fix: Only include the id of the error message once in aria-describedby for linking the error message for screen readers.
384
  * Fix: Prevent a couple PHP warning messages with certain settings.
385
 
 
 
 
 
 
 
 
386
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>