Constant Contact Forms - Version 1.3.6

Version Description

  • Fixed: Validate and potentially create full urls for values passed into custom "redirect to url" values. Prevents unintended destinations from partial urls.
  • Fixed: Error display for cron debugging was not showing correctly.
  • Fixed: Added required indicators to all appropriate fields in address fieldset on frontend.
  • Fixed: No form will be displayed if the form is not published.
  • Added: Address line 2 is no longer considered a required field.
  • Added: Plugin will now send email notifications if notifications are disabled but no Constant Contact list has been set for a form or opt-in is required but user does not opt in. Prevents possible lost submissions.
  • Updated: Wording for "Disable email" setting to clarify its purpose and intent.
  • Updated: Wording around some form builder fields.
  • Updated: Reworded emails and conditionally added messages regarding issues with form that required sending the email.
  • Updated: Adjusted plugin load order slightly to prevent conflicts with other plugins using GuzzleHTTP.
Download this release

Release Info

Developer constantcontact
Plugin Icon 128x128 Constant Contact Forms
Version 1.3.6
Comparing to
See all releases

Code changes from version 1.3.5 to 1.3.6

constant-contact-forms.php CHANGED
@@ -12,9 +12,9 @@
12
  * Plugin Name: Constant Contact Forms for WordPress
13
  * Plugin URI: https://www.constantcontact.com
14
  * Description: Be a better marketer. All it takes is Constant Contact email marketing.
15
- * Version: 1.3.5
16
  * Author: Constant Contact
17
- * Author URI: https://www.constantcontact.com
18
  * License: GPLv3
19
  * Text Domain: constant-contact-forms
20
  * Domain Path: /languages
@@ -77,7 +77,7 @@ class Constant_Contact {
77
  * @since 1.0.0
78
  * @var string
79
  */
80
- const VERSION = '1.3.5';
81
 
82
  /**
83
  * URL of plugin directory.
@@ -136,32 +136,187 @@ class Constant_Contact {
136
  protected static $single_instance = null;
137
 
138
  /**
139
- * All our class instances.
140
  *
141
  * @since 1.0.1
 
142
  */
143
- private $admin;
144
- private $admin_pages;
145
- private $auth_redirect;
146
  private $api;
 
 
 
 
 
 
 
147
  private $builder;
 
 
 
 
 
 
 
148
  private $builder_fields;
 
 
 
 
 
 
 
149
  private $check;
150
- private $connect;
 
 
 
 
 
 
151
  private $cpts;
 
 
 
 
 
 
 
152
  private $display;
 
 
 
 
 
 
 
153
  private $display_shortcode;
 
 
 
 
 
 
 
154
  private $lists;
 
 
 
 
 
 
 
155
  private $process_form;
 
 
 
 
 
 
 
156
  private $settings;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  private $mail;
 
 
 
 
 
 
 
158
  private $notifications;
 
 
 
 
 
 
 
159
  private $notification_content;
 
 
 
 
 
 
 
160
  private $authserver;
 
 
 
 
 
 
 
161
  private $updates;
 
 
 
 
 
 
 
162
  private $optin;
 
 
 
 
 
 
 
163
  private $customizations;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  private $shortcode;
 
 
 
 
 
 
 
165
  private $shortcode_admin;
166
 
167
  /**
@@ -209,7 +364,6 @@ class Constant_Contact {
209
 
210
  // Load our plugin and our libraries.
211
  $this->plugin_classes();
212
- $this->load_libs();
213
  $this->admin_plugin_classes();
214
 
215
  // Include our helper functions function for end-users.
@@ -278,6 +432,7 @@ class Constant_Contact {
278
  add_action( 'init', array( $this, 'includes' ), 5 );
279
  add_action( 'widgets_init', array( $this, 'widgets' ) );
280
  add_filter( 'body_class', array( $this, 'body_classes' ) );
 
281
 
282
  // Our vendor files will do a check for ISSSL, so we want to set it to be that.
283
  // See Guzzle for more info and usage of this.
12
  * Plugin Name: Constant Contact Forms for WordPress
13
  * Plugin URI: https://www.constantcontact.com
14
  * Description: Be a better marketer. All it takes is Constant Contact email marketing.
15
+ * Version: 1.3.6
16
  * Author: Constant Contact
17
+ * Author URI: https://www.constantcontact.com/index?pn=miwordpress
18
  * License: GPLv3
19
  * Text Domain: constant-contact-forms
20
  * Domain Path: /languages
77
  * @since 1.0.0
78
  * @var string
79
  */
80
+ const VERSION = '1.3.6';
81
 
82
  /**
83
  * URL of plugin directory.
136
  protected static $single_instance = null;
137
 
138
  /**
139
+ * An instance of the ConstantContact_API Class.
140
  *
141
  * @since 1.0.1
142
+ * @var ConstantContact_API
143
  */
 
 
 
144
  private $api;
145
+
146
+ /**
147
+ * An instance of the ConstantContact_Builder Class.
148
+ *
149
+ * @since 1.0.1
150
+ * @var ConstantContact_Builder
151
+ */
152
  private $builder;
153
+
154
+ /**
155
+ * An instance of the ConstantContact_Builder_Fields Class.
156
+ *
157
+ * @since 1.0.1
158
+ * @var ConstantContact_Builder_Fields
159
+ */
160
  private $builder_fields;
161
+
162
+ /**
163
+ * An instance of the ConstantContact_Check Class.
164
+ *
165
+ * @since 1.0.1
166
+ * @var ConstantContact_Check
167
+ */
168
  private $check;
169
+
170
+ /**
171
+ * An instance of the ConstantContact_CPTS Class.
172
+ *
173
+ * @since 1.0.1
174
+ * @var ConstantContact_CPTS
175
+ */
176
  private $cpts;
177
+
178
+ /**
179
+ * An instance of the ConstantContact_Display Class.
180
+ *
181
+ * @since 1.0.1
182
+ * @var ConstantContact_Display
183
+ */
184
  private $display;
185
+
186
+ /**
187
+ * An instance of the ConstantContact_Display_Shortcode Class.
188
+ *
189
+ * @since 1.0.1
190
+ * @var ConstantContact_Display_Shortcode
191
+ */
192
  private $display_shortcode;
193
+
194
+ /**
195
+ * An instance of the ConstantContact_Lists Class.
196
+ *
197
+ * @since 1.0.1
198
+ * @var ConstantContact_Lists
199
+ */
200
  private $lists;
201
+
202
+ /**
203
+ * An instance of the ConstantContact_Process_Form Class.
204
+ *
205
+ * @since 1.0.1
206
+ * @var ConstantContact_Process_Form
207
+ */
208
  private $process_form;
209
+
210
+ /**
211
+ * An instance of the ConstantContact_Settings Class.
212
+ *
213
+ * @since 1.0.1
214
+ * @var ConstantContact_Settings
215
+ */
216
  private $settings;
217
+
218
+ /**
219
+ * An instance of the ConstantContact_Auth_Redirect Class.
220
+ *
221
+ * @since 1.0.1
222
+ * @var ConstantContact_Auth_Redirect
223
+ */
224
+ private $auth_redirect;
225
+
226
+ /**
227
+ * An instance of the ConstantContact_Connect Class.
228
+ *
229
+ * @since 1.0.1
230
+ * @var ConstantContact_Connect
231
+ */
232
+ private $connect;
233
+
234
+ /**
235
+ * An instance of the ConstantContact_Mail Class.
236
+ *
237
+ * @since 1.0.1
238
+ * @var ConstantContact_Mail
239
+ */
240
  private $mail;
241
+
242
+ /**
243
+ * An instance of the ConstantContact_Notifications Class.
244
+ *
245
+ * @since 1.0.1
246
+ * @var ConstantContact_Notifications
247
+ */
248
  private $notifications;
249
+
250
+ /**
251
+ * An instance of the ConstantContact_Notification_Content Class.
252
+ *
253
+ * @since 1.0.1
254
+ * @var ConstantContact_Notification_Content
255
+ */
256
  private $notification_content;
257
+
258
+ /**
259
+ * An instance of the ConstantContact_Middleware Class.
260
+ *
261
+ * @since 1.0.1
262
+ * @var ConstantContact_Middleware
263
+ */
264
  private $authserver;
265
+
266
+ /**
267
+ * An instance of the ConstantContact_Updates Class.
268
+ *
269
+ * @since 1.0.1
270
+ * @var ConstantContact_Updates
271
+ */
272
  private $updates;
273
+
274
+ /**
275
+ * An instance of the ConstantContact_Optin Class.
276
+ *
277
+ * @since 1.0.1
278
+ * @var ConstantContact_Optin
279
+ */
280
  private $optin;
281
+
282
+ /**
283
+ * An instance of the ConstantContact_User_Customizations Class.
284
+ *
285
+ * @since 1.0.1
286
+ * @var ConstantContact_User_Customizations
287
+ */
288
  private $customizations;
289
+
290
+ /**
291
+ * An instance of the ConstantContact_Admin Class.
292
+ *
293
+ * @since 1.0.1
294
+ * @var ConstantContact_Admin
295
+ */
296
+ private $admin;
297
+
298
+ /**
299
+ * An instance of the ConstantContact_Admin_Pages class.
300
+ *
301
+ * @since 1.0.1
302
+ * @var ConstantContact_Admin_Pages
303
+ */
304
+ private $admin_pages;
305
+
306
+ /**
307
+ * An instance of the ConstantContact_Shortcode class.
308
+ *
309
+ * @since 1.0.1
310
+ * @var ConstantContact_Shortcode
311
+ */
312
  private $shortcode;
313
+
314
+ /**
315
+ * An instance of the ConstantContact_Shortcode_Admin class.
316
+ *
317
+ * @since 1.0.1
318
+ * @var ConstantContact_Shortcode_Admin
319
+ */
320
  private $shortcode_admin;
321
 
322
  /**
364
 
365
  // Load our plugin and our libraries.
366
  $this->plugin_classes();
 
367
  $this->admin_plugin_classes();
368
 
369
  // Include our helper functions function for end-users.
432
  add_action( 'init', array( $this, 'includes' ), 5 );
433
  add_action( 'widgets_init', array( $this, 'widgets' ) );
434
  add_filter( 'body_class', array( $this, 'body_classes' ) );
435
+ $this->load_libs();
436
 
437
  // Our vendor files will do a check for ISSSL, so we want to set it to be that.
438
  // See Guzzle for more info and usage of this.
includes/class-api.php CHANGED
@@ -442,7 +442,7 @@ class ConstantContact_API {
442
  * @param string $api_token Token.
443
  * @param string $list List name.
444
  * @param string $email Email address.
445
- * @param string $user_data User data.
446
  * @param string $form_id ID of the form being processed.
447
  * @return mixed Response from API.
448
  */
@@ -482,7 +482,7 @@ class ConstantContact_API {
482
  * @param array $response Response from api call.
483
  * @param string $api_token Token.
484
  * @param string $list List name.
485
- * @param string $user_data User data.
486
  * @param string $form_id Form ID being processed.
487
  * @return mixed Response from API.
488
  */
@@ -565,6 +565,7 @@ class ConstantContact_API {
565
  case 'g-recaptcha-response':
566
  case 'ctct_usage_field':
567
  case 'ctct_time':
 
568
  // Do nothing, as we already captured.
569
  break;
570
  case 'phone_number':
442
  * @param string $api_token Token.
443
  * @param string $list List name.
444
  * @param string $email Email address.
445
+ * @param array $user_data User data.
446
  * @param string $form_id ID of the form being processed.
447
  * @return mixed Response from API.
448
  */
482
  * @param array $response Response from api call.
483
  * @param string $api_token Token.
484
  * @param string $list List name.
485
+ * @param array $user_data User data.
486
  * @param string $form_id Form ID being processed.
487
  * @return mixed Response from API.
488
  */
565
  case 'g-recaptcha-response':
566
  case 'ctct_usage_field':
567
  case 'ctct_time':
568
+ case 'ctct_must_opt_in':
569
  // Do nothing, as we already captured.
570
  break;
571
  case 'phone_number':
includes/class-builder-fields.php CHANGED
@@ -184,17 +184,18 @@ class ConstantContact_Builder_Fields {
184
  ) );
185
 
186
  $options_metabox->add_field( array(
187
- 'name' => __( 'Redirect to URL', 'constant-contact-forms' ),
188
- 'id' => $this->prefix . 'redirect_uri',
189
- 'type' => 'text',
190
- 'description' => esc_html__( 'URL to send the user to, after successful submission.', 'constant-contact-forms' ),
 
191
  ) );
192
 
193
  $options_metabox->add_field( array(
194
- 'name' => __( 'Submit with no refresh', 'constant-contact-forms' ),
195
  'id' => $this->prefix . 'do_ajax',
196
  'type' => 'checkbox',
197
- 'description' => __( 'Enables form submissions without triggering a page refresh. This option overrides the redirect choice above.', 'constant-contact-forms' ),
198
  ) );
199
 
200
 
@@ -216,11 +217,11 @@ class ConstantContact_Builder_Fields {
216
  $overall_description = sprintf(
217
  '<hr/><p>%s %s</p>',
218
  esc_html__(
219
- 'Enabling this option will require visitors to check a box to be added to your list. If this option is not enabled, visitors will be added to your selected list automatically on submitting.',
220
  'constant-contact-forms'
221
  ),
222
  sprintf(
223
- '<a href="%s">%s</a>',
224
  'https://knowledgebase.constantcontact.com/articles/KnowledgeBase/18260-WordPress-Constant-Contact-Forms-Options',
225
  esc_html__( 'Learn more', 'constant-contact-forms' )
226
  )
@@ -272,7 +273,7 @@ class ConstantContact_Builder_Fields {
272
  */
273
  public function show_enable_show_checkbox_field( $options_metabox ) {
274
 
275
- $description = esc_html__( 'Add a checkbox so visitors can opt-in to your email list.', 'constant-contact-forms' );
276
  $description .= '<br>';
277
  $description .= esc_html__( '(For use with Contact Us form)', 'constant-contact-forms' );
278
 
184
  ) );
185
 
186
  $options_metabox->add_field( array(
187
+ 'name' => __( 'Redirect URL', 'constant-contact-forms' ),
188
+ 'id' => $this->prefix . 'redirect_uri',
189
+ 'type' => 'text',
190
+ 'description' => esc_html__( 'Leave blank to keep users on the current page.', 'constant-contact-forms' ),
191
+ 'sanitization_cb' => 'constant_contact_clean_url',
192
  ) );
193
 
194
  $options_metabox->add_field( array(
195
+ 'name' => __( 'No page refresh', 'constant-contact-forms' ),
196
  'id' => $this->prefix . 'do_ajax',
197
  'type' => 'checkbox',
198
+ 'description' => __( 'Enable form submission without a page refresh. This option overrides the Redirect URL choice above.', 'constant-contact-forms' ),
199
  ) );
200
 
201
 
217
  $overall_description = sprintf(
218
  '<hr/><p>%s %s</p>',
219
  esc_html__(
220
+ 'Enabling this option will require users to check a box to be added to your list.',
221
  'constant-contact-forms'
222
  ),
223
  sprintf(
224
+ '<a href="%s" target="_blank">%s</a>',
225
  'https://knowledgebase.constantcontact.com/articles/KnowledgeBase/18260-WordPress-Constant-Contact-Forms-Options',
226
  esc_html__( 'Learn more', 'constant-contact-forms' )
227
  )
273
  */
274
  public function show_enable_show_checkbox_field( $options_metabox ) {
275
 
276
+ $description = esc_html__( 'Add a checkbox so subscribers can opt-in to your email list.', 'constant-contact-forms' );
277
  $description .= '<br>';
278
  $description .= esc_html__( '(For use with Contact Us form)', 'constant-contact-forms' );
279
 
includes/class-check.php CHANGED
@@ -54,7 +54,7 @@ class ConstantContact_Check {
54
 
55
  <p><?php
56
  // Check our cron status.
57
- esc_html( $this->cron_spawn() ); ?>
58
  </p>
59
  </div>
60
  <?php
@@ -188,7 +188,7 @@ class ConstantContact_Check {
188
  $result = wp_remote_post( $cron_request['url'], $cron_request['args'] );
189
 
190
  if ( is_wp_error( $result ) ) {
191
- return $result;
192
  } elseif ( wp_remote_retrieve_response_code( $result ) >= 300 ) {
193
  return sprintf(
194
  // translators: placeholder iwll have an HTTP response code value.
54
 
55
  <p><?php
56
  // Check our cron status.
57
+ echo esc_html( $this->cron_spawn() ); ?>
58
  </p>
59
  </div>
60
  <?php
188
  $result = wp_remote_post( $cron_request['url'], $cron_request['args'] );
189
 
190
  if ( is_wp_error( $result ) ) {
191
+ return $result->get_error_message();
192
  } elseif ( wp_remote_retrieve_response_code( $result ) >= 300 ) {
193
  return sprintf(
194
  // translators: placeholder iwll have an HTTP response code value.
includes/class-display.php CHANGED
@@ -89,6 +89,10 @@ class ConstantContact_Display {
89
  */
90
  public function form( $form_data, $form_id = '', $skip_styles = false ) {
91
 
 
 
 
 
92
  // Enqueue some things.
93
  if ( ! $skip_styles ) {
94
  $this->styles( true );
@@ -186,6 +190,8 @@ class ConstantContact_Display {
186
  // Add our disclose notice maybe.
187
  $return .= wp_kses_post( $this->maybe_add_disclose_note( $form_data ) );
188
 
 
 
189
  $return .= '</form>';
190
 
191
  $return .= '<script type="text/javascript">';
@@ -356,6 +362,22 @@ class ConstantContact_Display {
356
  return '<input type="hidden" name="ctct_time" value="' . time() . '" />';
357
  }
358
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
359
  /**
360
  * Wrapper for single field display.
361
  *
@@ -970,14 +992,22 @@ class ConstantContact_Display {
970
  $v_state = isset( $value['state_address'] ) ? $value['state_address'] : '';
971
  $v_zip = isset( $value['zip_address'] ) ? $value['zip'] : '';
972
 
973
- $req = $req ? ' required ' : '';
 
 
 
 
 
 
 
974
  $req_class = $req ? ' ctct-form-field-required ' : '';
 
975
 
976
  // Build our field.
977
  $return = '<fieldset class="ctct-address">';
978
  $return .= ' <legend>' . esc_attr( $name ) . '</legend>';
979
  $return .= ' <div class="ctct-form-field ctct-field-full address-line-1' . $req_class . '">';
980
- $return .= ' <label for="street_' . esc_attr( $f_id ) . '">' . esc_attr( $street ) . '</label>';
981
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-street" name="street_' . esc_attr( $f_id ) . '" id="street_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_street ) . '">';
982
  $return .= ' </div>';
983
  // Address Line 2 is not required, note the missing $req inclusion.
@@ -986,15 +1016,15 @@ class ConstantContact_Display {
986
  $return .= ' <input type="text" class="ctct-text ctct-address-line-2" name="line_2_' . esc_attr( $f_id ) . '" id="line_2_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_line_2 ) . '">';
987
  $return .= ' </div>';
988
  $return .= ' <div class="ctct-form-field ctct-field-third address-city' . $req_class . '" id="input_2_1_3_container">';
989
- $return .= ' <label for="city_' . esc_attr( $f_id ) . '">' . esc_attr( $city ) . '</label>';
990
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-city" name="city_' . esc_attr( $f_id ) . '" id="city_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_city ) . '">';
991
  $return .= ' </div>';
992
  $return .= ' <div class="ctct-form-field ctct-field-third address-state' . $req_class . '" id="input_2_1_4_container">';
993
- $return .= ' <label for="state_' . esc_attr( $f_id ) . '">' . esc_attr( $state ) . '</label>';
994
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-state" name="state_' . esc_attr( $f_id ) . '" id="state_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_state ) . '">';
995
  $return .= ' </div>';
996
  $return .= ' <div class="ctct-form-field ctct-field-third address-zip' . $req_class . '" id="input_2_1_5_container">';
997
- $return .= ' <label for="zip_' . esc_attr( $f_id ) . '">' . esc_attr( $zip ) . '</label>';
998
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-zip" name="zip_' . esc_attr( $f_id ) . '" id="zip_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_zip ) . '">';
999
  $return .= ' </div>';
1000
  $return .= '</fieldset>';
89
  */
90
  public function form( $form_data, $form_id = '', $skip_styles = false ) {
91
 
92
+ if ( 'publish' !== get_post_status( $form_id ) ) {
93
+ return '';
94
+ }
95
+
96
  // Enqueue some things.
97
  if ( ! $skip_styles ) {
98
  $this->styles( true );
190
  // Add our disclose notice maybe.
191
  $return .= wp_kses_post( $this->maybe_add_disclose_note( $form_data ) );
192
 
193
+ $return .= $this->must_opt_in( $form_data );
194
+
195
  $return .= '</form>';
196
 
197
  $return .= '<script type="text/javascript">';
362
  return '<input type="hidden" name="ctct_time" value="' . time() . '" />';
363
  }
364
 
365
+ /**
366
+ * Use a hidden field to denote needing to opt in.
367
+ *
368
+ * @since 1.3.6
369
+ *
370
+ * @param array $form_data
371
+ * @return string
372
+ */
373
+ public function must_opt_in( array $form_data ) {
374
+ if ( empty( $form_data['options']['optin']['show'] ) ) {
375
+ return '';
376
+ }
377
+
378
+ return '<input type="hidden" name="ctct_must_opt_in" value="yes" />';
379
+ }
380
+
381
  /**
382
  * Wrapper for single field display.
383
  *
992
  $v_state = isset( $value['state_address'] ) ? $value['state_address'] : '';
993
  $v_zip = isset( $value['zip_address'] ) ? $value['zip'] : '';
994
 
995
+ /**
996
+ * Filters the markup used for the required indicator.
997
+ *
998
+ * @since 1.0.0
999
+ *
1000
+ * @param string $value An `<abbr>` tag with an asterisk indicating required status.
1001
+ */
1002
+ $req_label = $req ? ' ' . apply_filters( 'constant_contact_required_label', '<abbr title="required">*</abbr>' ) : '';
1003
  $req_class = $req ? ' ctct-form-field-required ' : '';
1004
+ $req = $req ? ' required ' : '';
1005
 
1006
  // Build our field.
1007
  $return = '<fieldset class="ctct-address">';
1008
  $return .= ' <legend>' . esc_attr( $name ) . '</legend>';
1009
  $return .= ' <div class="ctct-form-field ctct-field-full address-line-1' . $req_class . '">';
1010
+ $return .= ' <label for="street_' . esc_attr( $f_id ) . '">' . esc_attr( $street ) . $req_label . '</label>';
1011
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-street" name="street_' . esc_attr( $f_id ) . '" id="street_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_street ) . '">';
1012
  $return .= ' </div>';
1013
  // Address Line 2 is not required, note the missing $req inclusion.
1016
  $return .= ' <input type="text" class="ctct-text ctct-address-line-2" name="line_2_' . esc_attr( $f_id ) . '" id="line_2_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_line_2 ) . '">';
1017
  $return .= ' </div>';
1018
  $return .= ' <div class="ctct-form-field ctct-field-third address-city' . $req_class . '" id="input_2_1_3_container">';
1019
+ $return .= ' <label for="city_' . esc_attr( $f_id ) . '">' . esc_attr( $city ) . $req_label . '</label>';
1020
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-city" name="city_' . esc_attr( $f_id ) . '" id="city_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_city ) . '">';
1021
  $return .= ' </div>';
1022
  $return .= ' <div class="ctct-form-field ctct-field-third address-state' . $req_class . '" id="input_2_1_4_container">';
1023
+ $return .= ' <label for="state_' . esc_attr( $f_id ) . '">' . esc_attr( $state ) . $req_label . '</label>';
1024
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-state" name="state_' . esc_attr( $f_id ) . '" id="state_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_state ) . '">';
1025
  $return .= ' </div>';
1026
  $return .= ' <div class="ctct-form-field ctct-field-third address-zip' . $req_class . '" id="input_2_1_5_container">';
1027
+ $return .= ' <label for="zip_' . esc_attr( $f_id ) . '">' . esc_attr( $zip ) . $req_label . '</label>';
1028
  $return .= ' <input ' . $req . 'type="text" class="ctct-text ctct-address-zip" name="zip_' . esc_attr( $f_id ) . '" id="zip_' . esc_attr( $f_id ) . '" value="' . esc_attr( $v_zip ) . '">';
1029
  $return .= ' </div>';
1030
  $return .= '</fieldset>';
includes/class-mail.php CHANGED
@@ -69,6 +69,7 @@ class ConstantContact_Mail {
69
  if ( 'on' !== $maybe_bypass ) {
70
  /**
71
  * Filters the delay between scheduling of the opt-in e-mail event.
 
72
  * @since 1.0.2
73
  *
74
  * @param int $schedule_delay The time to add to `time()` for the event.
@@ -78,6 +79,8 @@ class ConstantContact_Mail {
78
  }
79
  }
80
 
 
 
81
  // Preserve form ID for mail() method. Lost in pretty_values() pass.
82
  $submission_details = array();
83
  $submission_details['form_id'] = $values['ctct-id']['value'];
@@ -88,17 +91,41 @@ class ConstantContact_Mail {
88
 
89
  // Format them.
90
  $email_values = $this->format_values_for_email( $values );
 
91
 
92
  // Increment our counter for processed form entries.
93
  constant_contact()->process_form->increment_processed_form_count();
94
 
95
- // Skip sending e-mail if we're connected and the user has opted out of notification emails.
96
- if ( constant_contact()->api->is_connected() && ( 'on' === ctct_get_settings_option( '_ctct_disable_email_notifications' ) ) ) {
97
  return true;
98
  }
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  // Send the mail.
101
- return $this->mail( $this->get_email(), $email_values, $submission_details );
102
  }
103
 
104
  /**
@@ -201,13 +228,15 @@ class ConstantContact_Mail {
201
  * Sends our mail out.
202
  *
203
  * @since 1.0.0
 
204
  *
205
  * @param string $destination_email Intended mail address.
206
  * @param string $content Data from clean values.
207
  * @param array $submission_details Details for submission to process.
 
208
  * @return bool Whether or not sent.
209
  */
210
- public function mail( $destination_email, $content, $submission_details ) {
211
 
212
  // Define a mail key for the cache.
213
  static $last_sent = false;
@@ -246,9 +275,24 @@ class ConstantContact_Mail {
246
  // Filter to allow sending HTML for our message body.
247
  add_filter( 'wp_mail_content_type', array( $this, 'set_email_type' ) );
248
 
249
- $content_before = __( 'Congratulations! Your Constant Contact Forms plugin has successfully captured new information:', 'constant-contact-forms' );
 
 
 
 
 
 
 
 
250
 
251
- $content_after = __( "Don't forget: Email marketing is a great way to stay connected and engage with visitors after they've left your site. When you connect to a Constant Contact account, all new subscribers are automatically synced so you can keep the interaction going through emails and more. Sign up for a Free Trial on the Connect page in the Plugin console view.", 'constant-contact-forms' );
 
 
 
 
 
 
 
252
 
253
  /**
254
  * Filters the final constructed email content to be sent to an admin.
@@ -280,8 +324,9 @@ class ConstantContact_Mail {
280
  * @since 1.3.0
281
  *
282
  * @param string $value Constructed email subject.
 
283
  */
284
- apply_filters( 'constant_contact_email_subject', __( 'Great News: You just captured a new visitor submission', 'constant-contact-forms' ) ),
285
  $content
286
  );
287
 
@@ -357,4 +402,63 @@ class ConstantContact_Mail {
357
  return $value['value'];
358
  }
359
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
  }
69
  if ( 'on' !== $maybe_bypass ) {
70
  /**
71
  * Filters the delay between scheduling of the opt-in e-mail event.
72
+ *
73
  * @since 1.0.2
74
  *
75
  * @param int $schedule_delay The time to add to `time()` for the event.
79
  }
80
  }
81
 
82
+ $opt_in_details = ( isset( $values['ctct-opt-in'] ) ) ? $values['ctct-opt-in'] : array();
83
+
84
  // Preserve form ID for mail() method. Lost in pretty_values() pass.
85
  $submission_details = array();
86
  $submission_details['form_id'] = $values['ctct-id']['value'];
91
 
92
  // Format them.
93
  $email_values = $this->format_values_for_email( $values );
94
+ $was_forced = false; // Set a value regardless of status.
95
 
96
  // Increment our counter for processed form entries.
97
  constant_contact()->process_form->increment_processed_form_count();
98
 
99
+ // Skip sending e-mail if we're connected, the site owner has opted out of notification emails, and the user has opted in
100
+ if ( constant_contact()->api->is_connected() && ( 'on' === ctct_get_settings_option( '_ctct_disable_email_notifications' ) ) && $add_to_opt_in ) { // If we have $add_to_opt_in, we should already have a list.
101
  return true;
102
  }
103
 
104
+ // This would allow for setting each sections error and also allow for returning early again for cases
105
+ // like having a list, but not needing to opt in.
106
+ $has_list = get_post_meta( $submission_details['form_id'], '_ctct_list', true );
107
+
108
+ // Checks if we have a list
109
+ if (
110
+ ( ! constant_contact()->api->is_connected() || empty( $has_list ) ) &&
111
+ ( 'on' === ctct_get_settings_option( '_ctct_disable_email_notifications' ) )
112
+ ) { // If we're not connected or have no list set AND we've disabled. Override.
113
+
114
+ $submission_details['list-available'] = 'no';
115
+ $was_forced = true;
116
+ }
117
+
118
+ if (
119
+ ! empty( $_POST['ctct_must_opt_in'] ) &&
120
+ empty( $opt_in_details ) &&
121
+ ( 'on' === ctct_get_settings_option( '_ctct_disable_email_notifications' ) )
122
+ ) {
123
+ $submission_details['opted-in'] = 'no';
124
+ $was_forced = true;
125
+ }
126
+
127
  // Send the mail.
128
+ return $this->mail( $this->get_email(), $email_values, $submission_details, $was_forced );
129
  }
130
 
131
  /**
228
  * Sends our mail out.
229
  *
230
  * @since 1.0.0
231
+ * @since 1.3.6 Added $was_forced.
232
  *
233
  * @param string $destination_email Intended mail address.
234
  * @param string $content Data from clean values.
235
  * @param array $submission_details Details for submission to process.
236
+ * @param bool $was_forced Whether or not we are force sending. Default false.
237
  * @return bool Whether or not sent.
238
  */
239
+ public function mail( $destination_email, $content, $submission_details, $was_forced = false ) {
240
 
241
  // Define a mail key for the cache.
242
  static $last_sent = false;
275
  // Filter to allow sending HTML for our message body.
276
  add_filter( 'wp_mail_content_type', array( $this, 'set_email_type' ) );
277
 
278
+ $content_notice_note = $this->maybe_append_forced_email_notice_note( $was_forced );
279
+ $content_notice_reasons = $this->maybe_append_forced_email_notice_reasons( $was_forced, $submission_details );
280
+
281
+ $content_before = esc_html__( 'Your Constant Contact Forms plugin has captured new information.', 'constant-contact-forms' );
282
+
283
+ $content_before = $content_notice_note . $content_before . $content_notice_reasons;
284
+
285
+ $content_title = '<p><strong>' . esc_html__( 'Form title: ', 'constant-contact-forms' ) . '</strong>' . get_the_title( $submission_details['form_id'] ) . '<br/>';
286
+ $content_title .= '<strong>' . esc_html__( 'Form information: ', 'constant-contact-forms' ) . '</strong></p>';
287
 
288
+ $content = $content_title . $content;
289
+
290
+
291
+ $content_after = sprintf(
292
+ esc_html__( "Email marketing is a great way to stay connected and engage with visitors after they've left your site. Visit %shttps://www.constantcontact.com/index?pn=miwordpress%s to sign up for a Free Trial.", 'constant-contact-forms' ),
293
+ '<a href="https://www.constantcontact.com/index?pn=miwordpress">',
294
+ '</a>'
295
+ );
296
 
297
  /**
298
  * Filters the final constructed email content to be sent to an admin.
324
  * @since 1.3.0
325
  *
326
  * @param string $value Constructed email subject.
327
+ * @param string $value Constant Contact Form ID.
328
  */
329
+ apply_filters( 'constant_contact_email_subject', __( 'Constant Contact Forms Notification', 'constant-contact-forms' ), $submission_details['form_id'] ),
330
  $content
331
  );
332
 
402
  return $value['value'];
403
  }
404
  }
405
+
406
+ /**
407
+ * Potentially add initial note for why we are emailing the site owner.
408
+ *
409
+ * @since 1.3.6
410
+ *
411
+ * @param bool $was_forced Whether or not we have to force send an email.
412
+ * @return string $value Message to explain why an email was received.
413
+ */
414
+ public function maybe_append_forced_email_notice_note( $was_forced = false ) {
415
+
416
+ if ( ! $was_forced ) {
417
+ return '';
418
+ }
419
+
420
+ return sprintf(
421
+ '<p>' . esc_html__( '%sNote:%s You have disabled admin email notifications under the plugin settings, but are receiving this email because of the following reason.', 'constant-contact-forms' ) . '</p>',
422
+ '<strong>*',
423
+ '</strong>'
424
+ );
425
+
426
+ }
427
+
428
+ /**
429
+ * Potentially add email content regarding reason we're emailing the site owner.
430
+ *
431
+ * @since 1.3.6
432
+ *
433
+ * @param bool $was_forced Whether or not we have to force send an email.
434
+ * @param array $submission_details Array of submission details that we tack reasons to send email in.
435
+ * @return string
436
+ */
437
+ public function maybe_append_forced_email_notice_reasons( $was_forced = false, $submission_details = array() ) {
438
+
439
+ if ( ! $was_forced ) {
440
+ return '';
441
+ }
442
+
443
+ $content_notice = '';
444
+ $template = '<p><strong>' . esc_html__( 'Submitted to Constant Contact:', 'constant-contact-forms' ) . '</strong> %s</p>';
445
+
446
+ if ( isset( $submission_details['list-available'] ) || isset( $submission_details['opted-in'] ) ) {
447
+ if ( isset( $submission_details['list-available'] ) && 'no' === $submission_details['list-available'] ) {
448
+ $content_notice .= sprintf(
449
+ $template,
450
+ esc_html__( 'NO (Constant Contact list not selected for this form)', 'constant-contact-forms' )
451
+ );
452
+ }
453
+ if ( isset( $submission_details['opted-in'] ) && 'no' === $submission_details['opted-in'] ) {
454
+ $content_notice .= sprintf(
455
+ $template,
456
+ esc_html__( 'NO (User did not select the Email Opt-in checkbox)', 'constant-contact-forms' ) . '<br/>' . esc_html__( "You can disable this under Form options. Email Opt-in isn't required to add subscribers into your account", 'constant-contact-forms' )
457
+
458
+ );
459
+ }
460
+ }
461
+
462
+ return $content_notice;
463
+ }
464
  }
includes/class-process-form.php CHANGED
@@ -721,6 +721,10 @@ class ConstantContact_Process_Form {
721
 
722
  $has_all = true;
723
  foreach( $original as $key => $value ) {
 
 
 
 
724
  if (
725
  isset( $form_data[ $key ] ) &&
726
  true === $value['required'] &&
721
 
722
  $has_all = true;
723
  foreach( $original as $key => $value ) {
724
+ if ( isset( $value['_ctct_map_select'] ) && 'line_2' === $value['_ctct_map_select'] ) {
725
+ continue;
726
+ }
727
+
728
  if (
729
  isset( $form_data[ $key ] ) &&
730
  true === $value['required'] &&
includes/class-settings.php CHANGED
@@ -161,8 +161,8 @@ class ConstantContact_Settings {
161
 
162
  $this->options_page = add_submenu_page(
163
  'edit.php?post_type=ctct_forms',
164
- __( 'Constant Contact Forms Settings', 'constant-contact-forms' ),
165
- __( 'Settings', 'constant-contact-forms' ),
166
  'manage_options',
167
  $this->key,
168
  array( $this, 'admin_page_display' )
@@ -248,7 +248,7 @@ class ConstantContact_Settings {
248
  public function do_lists_field( $cmb ) {
249
 
250
  $cmb->add_field( array(
251
- 'name' => __( 'Google Analytics&trade; tracking opt-in.', 'constant-contact-forms' ),
252
  'id' => '_ctct_data_tracking',
253
  'type' => 'checkbox',
254
  'desc' => __( 'Allow Constant Contact to use Google Analytics&trade; to track your usage across the Constant Contact Forms plugin.<br/> NOTE &mdash; Your website and users will not be tracked. See our <a href="https://www.constantcontact.com/legal/privacy-statement"> Privacy Statement</a> information about what is and is not tracked.', 'constant-contact-forms' ),
@@ -259,8 +259,8 @@ class ConstantContact_Settings {
259
 
260
  // Add field to disable e-mail notifications.
261
  $cmb->add_field( array(
262
- 'name' => __( 'Disable E-mail Notifications', 'constant-contact-forms' ),
263
- 'desc' => __( 'This option will disable e-mail notifications when someone submits a form and you have a connected Constant Contact account.', 'constant-contact-forms' ),
264
  'id' => '_ctct_disable_email_notifications',
265
  'type' => 'checkbox',
266
  'before_row' => '<hr/>',
@@ -268,8 +268,8 @@ class ConstantContact_Settings {
268
 
269
  // Make API contact requests immediately instead of via cron.
270
  $cmb->add_field( array(
271
- 'name' => __( 'Bypass Constant Contact cron scheduling', 'constant-contact-forms' ),
272
- 'desc' => __( 'This option will send form entries to Constant Contact right away instead of holding for one minute delay.', 'constant-contact-forms' ),
273
  'id' => '_ctct_bypass_cron',
274
  'type' => 'checkbox',
275
  'before_row' => '<hr/>',
@@ -287,7 +287,7 @@ class ConstantContact_Settings {
287
 
288
  // Set our CMB2 fields.
289
  $cmb->add_field( array(
290
- 'name' => __( 'Opt-in Location', 'constant-contact-forms' ),
291
  'id' => '_ctct_optin_forms',
292
  'type' => 'multicheck',
293
  'options' => $this->get_optin_show_options(),
@@ -295,19 +295,19 @@ class ConstantContact_Settings {
295
  ) );
296
 
297
  // Tack on 'select a list' to our lists array.
298
- $lists[0] = __( 'Select a list', 'constant-contact-forms' );
299
 
300
  $cmb->add_field( array(
301
- 'name' => __( 'Add subscribers to', 'constant-contact-forms' ),
302
  'id' => '_ctct_optin_list',
303
  'type' => 'select',
304
  'show_option_none' => false,
305
- 'default' => __( 'Select a list', 'constant-contact-forms' ),
306
  'options' => $lists,
307
  ) );
308
 
309
  // Get the business name and address.
310
- $business_name = get_bloginfo( 'name' ) ?: __( 'Business Name', 'constant-contact-forms' );
311
  $business_addr = '';
312
 
313
  // We might be able to get it from the API?
@@ -319,16 +319,16 @@ class ConstantContact_Settings {
319
  }
320
 
321
  $cmb->add_field( array(
322
- 'name' => __( 'Opt-in Affirmation', 'constant-contact-forms' ),
323
  'id' => '_ctct_optin_label',
324
  'type' => 'text',
325
  // translators: placeholder will hold site owner's business name.
326
- 'default' => sprintf( __( 'Yes, I would like to receive emails from %s. Sign me up!', 'constant-contact-forms' ), $business_name ),
327
  ) );
328
 
329
  if ( empty( $disclosure_info ) ) {
330
  $cmb->add_field( array(
331
- 'name' => __( 'Disclosure Name', 'constant-contact-forms' ),
332
  'id' => '_ctct_disclose_name',
333
  'type' => 'text',
334
  'default' => $business_name,
@@ -336,7 +336,7 @@ class ConstantContact_Settings {
336
  ) );
337
 
338
  $cmb->add_field( array(
339
- 'name' => __( 'Disclosure Address', 'constant-contact-forms' ),
340
  'id' => '_ctct_disclose_address',
341
  'type' => 'text',
342
  'default' => $business_addr,
@@ -352,14 +352,14 @@ class ConstantContact_Settings {
352
  '<div class="discover-recaptcha">' . __( 'Learn more and get an <a href="https://www.google.com/recaptcha/intro/" target="_blank">API site key</a>', 'constant-contact-forms' ) . '</div>'
353
  );
354
  $cmb->add_field( array(
355
- 'name' => __( 'Site Key', 'constant-contact-forms' ),
356
  'id' => '_ctct_recaptcha_site_key',
357
  'type' => 'text',
358
  'before_row' => $before_recaptcha,
359
  ) );
360
 
361
  $cmb->add_field( array(
362
- 'name' => __( 'Secret Key', 'constant-contact-forms' ),
363
  'id' => '_ctct_recaptcha_secret_key',
364
  'type' => 'text',
365
  ) );
@@ -376,13 +376,13 @@ class ConstantContact_Settings {
376
 
377
  // Set up our default options.
378
  $optin_options = array(
379
- 'comment_form' => __( 'Add a checkbox to the comment field in your posts', 'constant-contact-forms' ),
380
- 'login_form' => __( 'Add a checkbox to the main WordPress login page', 'constant-contact-forms' ),
381
  );
382
 
383
  // If users can register, then allow this option as well.
384
  if ( get_option( 'users_can_register' ) ) {
385
- $optin_options['reg_form'] = __( 'Add a checkbox to the WordPress user registration page', 'constant-contact-forms' );
386
  }
387
 
388
  // Send em back.
@@ -471,7 +471,7 @@ class ConstantContact_Settings {
471
  $list = ctct_get_settings_option( '_ctct_optin_list' );
472
 
473
  // Otherwise, use our default.
474
- $label = $saved_label ? $saved_label : __( 'Sign up to our newsletter.', 'constant-contact-forms' );
475
 
476
  ?><p class="ctct-optin-wrapper" style="padding: 0 0 1em 0;">
477
  <label for="ctct_optin">
@@ -682,7 +682,7 @@ class ConstantContact_Settings {
682
  }
683
 
684
  // Output any errors / notices we need.
685
- add_settings_error( $this->key . '-notices', '', __( 'Settings updated.', 'constant-contact-forms' ), 'updated' );
686
  settings_errors( $this->key . '-notices' );
687
  }
688
 
161
 
162
  $this->options_page = add_submenu_page(
163
  'edit.php?post_type=ctct_forms',
164
+ esc_html__( 'Constant Contact Forms Settings', 'constant-contact-forms' ),
165
+ esc_html__( 'Settings', 'constant-contact-forms' ),
166
  'manage_options',
167
  $this->key,
168
  array( $this, 'admin_page_display' )
248
  public function do_lists_field( $cmb ) {
249
 
250
  $cmb->add_field( array(
251
+ 'name' => esc_html__( 'Google Analytics&trade; tracking opt-in.', 'constant-contact-forms' ),
252
  'id' => '_ctct_data_tracking',
253
  'type' => 'checkbox',
254
  'desc' => __( 'Allow Constant Contact to use Google Analytics&trade; to track your usage across the Constant Contact Forms plugin.<br/> NOTE &mdash; Your website and users will not be tracked. See our <a href="https://www.constantcontact.com/legal/privacy-statement"> Privacy Statement</a> information about what is and is not tracked.', 'constant-contact-forms' ),
259
 
260
  // Add field to disable e-mail notifications.
261
  $cmb->add_field( array(
262
+ 'name' => esc_html__( 'Disable E-mail Notifications', 'constant-contact-forms' ),
263
+ 'desc' => sprintf( esc_html__( 'This option will disable e-mail notifications for forms with a selected list and successfully submit to Constant Contact.%s Notifications are sent to the email address listed under Wordpress "General Settings".', 'constant-contact-forms' ), '<br/>' ),
264
  'id' => '_ctct_disable_email_notifications',
265
  'type' => 'checkbox',
266
  'before_row' => '<hr/>',
268
 
269
  // Make API contact requests immediately instead of via cron.
270
  $cmb->add_field( array(
271
+ 'name' => esc_html__( 'Bypass Constant Contact cron scheduling', 'constant-contact-forms' ),
272
+ 'desc' => esc_html__( 'This option will send form entries to Constant Contact right away instead of holding for one minute delay.', 'constant-contact-forms' ),
273
  'id' => '_ctct_bypass_cron',
274
  'type' => 'checkbox',
275
  'before_row' => '<hr/>',
287
 
288
  // Set our CMB2 fields.
289
  $cmb->add_field( array(
290
+ 'name' => esc_html__( 'Opt-in Location', 'constant-contact-forms' ),
291
  'id' => '_ctct_optin_forms',
292
  'type' => 'multicheck',
293
  'options' => $this->get_optin_show_options(),
295
  ) );
296
 
297
  // Tack on 'select a list' to our lists array.
298
+ $lists[0] = esc_html__( 'Select a list', 'constant-contact-forms' );
299
 
300
  $cmb->add_field( array(
301
+ 'name' => esc_html__( 'Add subscribers to', 'constant-contact-forms' ),
302
  'id' => '_ctct_optin_list',
303
  'type' => 'select',
304
  'show_option_none' => false,
305
+ 'default' => esc_html__( 'Select a list', 'constant-contact-forms' ),
306
  'options' => $lists,
307
  ) );
308
 
309
  // Get the business name and address.
310
+ $business_name = get_bloginfo( 'name' ) ?: esc_html__( 'Business Name', 'constant-contact-forms' );
311
  $business_addr = '';
312
 
313
  // We might be able to get it from the API?
319
  }
320
 
321
  $cmb->add_field( array(
322
+ 'name' => esc_html__( 'Opt-in Affirmation', 'constant-contact-forms' ),
323
  'id' => '_ctct_optin_label',
324
  'type' => 'text',
325
  // translators: placeholder will hold site owner's business name.
326
+ 'default' => sprintf( esc_html__( 'Yes, I would like to receive emails from %s. Sign me up!', 'constant-contact-forms' ), $business_name ),
327
  ) );
328
 
329
  if ( empty( $disclosure_info ) ) {
330
  $cmb->add_field( array(
331
+ 'name' => esc_html__( 'Disclosure Name', 'constant-contact-forms' ),
332
  'id' => '_ctct_disclose_name',
333
  'type' => 'text',
334
  'default' => $business_name,
336
  ) );
337
 
338
  $cmb->add_field( array(
339
+ 'name' => esc_html__( 'Disclosure Address', 'constant-contact-forms' ),
340
  'id' => '_ctct_disclose_address',
341
  'type' => 'text',
342
  'default' => $business_addr,
352
  '<div class="discover-recaptcha">' . __( 'Learn more and get an <a href="https://www.google.com/recaptcha/intro/" target="_blank">API site key</a>', 'constant-contact-forms' ) . '</div>'
353
  );
354
  $cmb->add_field( array(
355
+ 'name' => esc_html__( 'Site Key', 'constant-contact-forms' ),
356
  'id' => '_ctct_recaptcha_site_key',
357
  'type' => 'text',
358
  'before_row' => $before_recaptcha,
359
  ) );
360
 
361
  $cmb->add_field( array(
362
+ 'name' => esc_html__( 'Secret Key', 'constant-contact-forms' ),
363
  'id' => '_ctct_recaptcha_secret_key',
364
  'type' => 'text',
365
  ) );
376
 
377
  // Set up our default options.
378
  $optin_options = array(
379
+ 'comment_form' => esc_html__( 'Add a checkbox to the comment field in your posts', 'constant-contact-forms' ),
380
+ 'login_form' => esc_html__( 'Add a checkbox to the main WordPress login page', 'constant-contact-forms' ),
381
  );
382
 
383
  // If users can register, then allow this option as well.
384
  if ( get_option( 'users_can_register' ) ) {
385
+ $optin_options['reg_form'] = esc_html__( 'Add a checkbox to the WordPress user registration page', 'constant-contact-forms' );
386
  }
387
 
388
  // Send em back.
471
  $list = ctct_get_settings_option( '_ctct_optin_list' );
472
 
473
  // Otherwise, use our default.
474
+ $label = $saved_label ? $saved_label : esc_html__( 'Sign up to our newsletter.', 'constant-contact-forms' );
475
 
476
  ?><p class="ctct-optin-wrapper" style="padding: 0 0 1em 0;">
477
  <label for="ctct_optin">
682
  }
683
 
684
  // Output any errors / notices we need.
685
+ add_settings_error( $this->key . '-notices', '', esc_html__( 'Settings updated.', 'constant-contact-forms' ), 'updated' );
686
  settings_errors( $this->key . '-notices' );
687
  }
688
 
includes/class-user-customizations.php CHANGED
@@ -73,6 +73,6 @@ class ConstantContact_User_Customizations {
73
  return $url;
74
  }
75
 
76
- return $custom;
77
  }
78
  }
73
  return $url;
74
  }
75
 
76
+ return constant_contact_clean_url( $custom );
77
  }
78
  }
includes/helper-functions.php CHANGED
@@ -318,3 +318,24 @@ function constant_contact_check_timestamps( $maybe_spam, $data ) {
318
  return $maybe_spam;
319
  }
320
  add_filter( 'constant_contact_maybe_spam', 'constant_contact_check_timestamps', 10, 2 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
318
  return $maybe_spam;
319
  }
320
  add_filter( 'constant_contact_maybe_spam', 'constant_contact_check_timestamps', 10, 2 );
321
+
322
+ /**
323
+ * Clean and correctly protocol an given URL.
324
+ *
325
+ * @since 1.3.6
326
+ *
327
+ * @param string $url
328
+ * @return string
329
+ */
330
+ function constant_contact_clean_url( $url = '' ) {
331
+ // Reject and return untouched if not provided a string.
332
+ if ( ! is_string( $url ) ) {
333
+ return $url;
334
+ }
335
+
336
+ $clean_url = esc_url( $url );
337
+ if ( is_ssl() && 'http' === parse_url( $clean_url, PHP_URL_SCHEME ) ) {
338
+ $clean_url = str_replace( 'http', 'https', $clean_url );
339
+ }
340
+ return $clean_url;
341
+ }
languages/constant-contact-forms.pot CHANGED
@@ -3,7 +3,7 @@ msgid ""
3
  msgstr ""
4
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
  "Project-Id-Version: Constant Contact Forms for WordPress\n"
6
- "POT-Creation-Date: 2017-10-30 12:30-0500\n"
7
  "PO-Revision-Date: 2017-01-12 14:46-0600\n"
8
  "Last-Translator: Michael Beckwith <michael.d.beckwith@gmail.com>\n"
9
  "Language-Team: Constant Contact\n"
@@ -24,18 +24,18 @@ msgstr ""
24
  "X-Poedit-SearchPathExcluded-3: node_modules\n"
25
 
26
  #. Author of the plugin/theme
27
- #: constant-contact-forms.php:198 includes/class-builder.php:347
28
  #: includes/class-cpts.php:87 includes/class-cpts.php:145
29
  msgid "Constant Contact"
30
  msgstr ""
31
 
32
- #: constant-contact-forms.php:225
33
  msgid ""
34
  "Constant Contact Forms requires PHP 5.4 or higher. Your hosting provider or "
35
  "website administrator should be able to assist in updating your PHP version."
36
  msgstr ""
37
 
38
- #: constant-contact-forms.php:549
39
  msgid "Error loading license."
40
  msgstr ""
41
 
@@ -274,7 +274,7 @@ msgstr ""
274
  msgid "Description"
275
  msgstr ""
276
 
277
- #: includes/class-admin.php:249 includes/class-builder-fields.php:495
278
  msgid "Shortcode"
279
  msgstr ""
280
 
@@ -314,7 +314,7 @@ msgstr ""
314
  msgid "Contact type not returned"
315
  msgstr ""
316
 
317
- #: includes/class-api.php:720
318
  msgid ""
319
  "Your API access token is invalid. Reconnect to Constant Contact to receive a "
320
  "new token."
@@ -369,212 +369,211 @@ msgid "Submission behavior"
369
  msgstr ""
370
 
371
  #: includes/class-builder-fields.php:187
372
- msgid "Redirect to URL"
373
  msgstr ""
374
 
375
  #: includes/class-builder-fields.php:190
376
- msgid "URL to send the user to, after successful submission."
377
  msgstr ""
378
 
379
- #: includes/class-builder-fields.php:194
380
- msgid "Submit with no refresh"
381
  msgstr ""
382
 
383
- #: includes/class-builder-fields.php:197
384
  msgid ""
385
- "Enables form submissions without triggering a page refresh. This option "
386
- "overrides the redirect choice above."
387
  msgstr ""
388
 
389
- #: includes/class-builder-fields.php:219
390
  msgid ""
391
- "Enabling this option will require visitors to check a box to be added to "
392
- "your list. If this option is not enabled, visitors will be added to your "
393
- "selected list automatically on submitting."
394
  msgstr ""
395
 
396
- #: includes/class-builder-fields.php:225
397
  msgid "Learn more"
398
  msgstr ""
399
 
400
- #: includes/class-builder-fields.php:230
401
  msgid "Email opt-in"
402
  msgstr ""
403
 
404
- #: includes/class-builder-fields.php:253
405
  msgid "Enable email subscriber opt-in"
406
  msgstr ""
407
 
408
- #: includes/class-builder-fields.php:255
409
  msgid "Adds an opt-in to the bottom of your form."
410
  msgstr ""
411
 
412
- #: includes/class-builder-fields.php:275
413
- msgid "Add a checkbox so visitors can opt-in to your email list."
414
  msgstr ""
415
 
416
- #: includes/class-builder-fields.php:277
417
  msgid "(For use with Contact Us form)"
418
  msgstr ""
419
 
420
- #: includes/class-builder-fields.php:280
421
  msgid "Opt-in checkbox"
422
  msgstr ""
423
 
424
- #: includes/class-builder-fields.php:298
425
  msgid "Your Business Name"
426
  msgstr ""
427
 
428
- #: includes/class-builder-fields.php:301 includes/class-settings.php:322
429
  msgid "Opt-in Affirmation"
430
  msgstr ""
431
 
432
- #: includes/class-builder-fields.php:305
433
  #, php-format
434
  msgid ""
435
  "Example: Yes, I would like to receive emails from %s. (You can unsubscribe "
436
  "anytime)"
437
  msgstr ""
438
 
439
- #: includes/class-builder-fields.php:321
440
  msgid "Form Fields"
441
  msgstr ""
442
 
443
- #: includes/class-builder-fields.php:330
444
  msgid "Add Fields"
445
  msgstr ""
446
 
447
- #: includes/class-builder-fields.php:336
448
  msgid ""
449
  "Create a field for each piece of information you want to collect. Good "
450
  "basics include email address, first name, and last name."
451
  msgstr ""
452
 
453
- #: includes/class-builder-fields.php:347
454
  msgid "Field {#}"
455
  msgstr ""
456
 
457
- #: includes/class-builder-fields.php:348
458
  msgid "Add Another Field"
459
  msgstr ""
460
 
461
- #: includes/class-builder-fields.php:349
462
  msgid "Remove Field"
463
  msgstr ""
464
 
465
- #: includes/class-builder-fields.php:361
466
  msgid "A brief description of this field (optional)"
467
  msgstr ""
468
 
469
- #: includes/class-builder-fields.php:366
470
  msgid "Email (required)"
471
  msgstr ""
472
 
473
- #: includes/class-builder-fields.php:367
474
  msgid "c.contact@example.com"
475
  msgstr ""
476
 
477
- #: includes/class-builder-fields.php:370
478
  msgid "First Name"
479
  msgstr ""
480
 
481
- #: includes/class-builder-fields.php:371
482
  msgid "John"
483
  msgstr ""
484
 
485
- #: includes/class-builder-fields.php:374
486
  msgid "Last Name"
487
  msgstr ""
488
 
489
- #: includes/class-builder-fields.php:375
490
  msgid "Smith"
491
  msgstr ""
492
 
493
- #: includes/class-builder-fields.php:378
494
  msgid "Phone Number"
495
  msgstr ""
496
 
497
- #: includes/class-builder-fields.php:379
498
  msgid "(555) 272-3342"
499
  msgstr ""
500
 
501
- #: includes/class-builder-fields.php:382
502
  msgid "Address"
503
  msgstr ""
504
 
505
- #: includes/class-builder-fields.php:383
506
  msgid "4115 S. Main Rd."
507
  msgstr ""
508
 
509
- #: includes/class-builder-fields.php:386
510
  msgid "Job Title"
511
  msgstr ""
512
 
513
- #: includes/class-builder-fields.php:387
514
  msgid "Project Manager"
515
  msgstr ""
516
 
517
- #: includes/class-builder-fields.php:390
518
  msgid "Company"
519
  msgstr ""
520
 
521
- #: includes/class-builder-fields.php:391
522
  msgid "Acme Manufacturing"
523
  msgstr ""
524
 
525
- #: includes/class-builder-fields.php:394
526
  msgid "Website"
527
  msgstr ""
528
 
529
- #: includes/class-builder-fields.php:395
530
  msgid "http://www.example.com"
531
  msgstr ""
532
 
533
- #: includes/class-builder-fields.php:410
534
  msgid "Custom Text Field"
535
  msgstr ""
536
 
537
- #: includes/class-builder-fields.php:411
538
  msgid "A custom text field"
539
  msgstr ""
540
 
541
- #: includes/class-builder-fields.php:414
542
  msgid "Custom Text Area"
543
  msgstr ""
544
 
545
- #: includes/class-builder-fields.php:415
546
  msgid "A large custom text field"
547
  msgstr ""
548
 
549
- #: includes/class-builder-fields.php:450
550
  msgid "Select a Field"
551
  msgstr ""
552
 
553
- #: includes/class-builder-fields.php:461
554
  msgid "Field Label"
555
  msgstr ""
556
 
557
- #: includes/class-builder-fields.php:464
558
  msgid "Email"
559
  msgstr ""
560
 
561
- #: includes/class-builder-fields.php:469
562
  msgid "Field Description"
563
  msgstr ""
564
 
565
- #: includes/class-builder-fields.php:473
566
  msgid "Ex: Enter email address"
567
  msgstr ""
568
 
569
- #: includes/class-builder-fields.php:479
570
  msgid "Required"
571
  msgstr ""
572
 
573
- #: includes/class-builder-fields.php:503
574
  msgid "Shortcode to use"
575
  msgstr ""
576
 
577
- #: includes/class-builder-fields.php:506
578
  msgid ""
579
  "Shortcode to embed - <em><small>You can copy and paste this in a post to "
580
  "display your form.</small></em>"
@@ -842,7 +841,7 @@ msgstr ""
842
  msgid "New Form"
843
  msgstr ""
844
 
845
- #: includes/class-cpts.php:70 includes/class-display.php:591
846
  msgid "Edit Form"
847
  msgstr ""
848
 
@@ -1073,103 +1072,103 @@ msgstr ""
1073
  msgid "%1$s (last modified %2$s ago)"
1074
  msgstr ""
1075
 
1076
- #: includes/class-display.php:323
1077
  msgid "Constant Contact Use."
1078
  msgstr ""
1079
 
1080
- #: includes/class-display.php:418 includes/class-display.php:1262
1081
  msgid "Error: Please correct your entry."
1082
  msgstr ""
1083
 
1084
- #: includes/class-display.php:420
1085
  msgid " Error: Please fill out this field."
1086
  msgstr ""
1087
 
1088
- #: includes/class-display.php:845
1089
  msgid "Send"
1090
  msgstr ""
1091
 
1092
- #: includes/class-display.php:960
1093
  msgid "Street Address"
1094
  msgstr ""
1095
 
1096
- #: includes/class-display.php:961
1097
  msgid "Address Line 2"
1098
  msgstr ""
1099
 
1100
- #: includes/class-display.php:962
1101
  msgid "City"
1102
  msgstr ""
1103
 
1104
- #: includes/class-display.php:963
1105
  msgid "State"
1106
  msgstr ""
1107
 
1108
- #: includes/class-display.php:964
1109
  msgid "ZIP Code"
1110
  msgstr ""
1111
 
1112
- #: includes/class-display.php:1021
1113
  msgid "Month"
1114
  msgstr ""
1115
 
1116
- #: includes/class-display.php:1022
1117
  msgid "Day"
1118
  msgstr ""
1119
 
1120
- #: includes/class-display.php:1023
1121
  msgid "Year"
1122
  msgstr ""
1123
 
1124
- #: includes/class-display.php:1147
1125
  msgid "January"
1126
  msgstr ""
1127
 
1128
- #: includes/class-display.php:1148
1129
  msgid "February"
1130
  msgstr ""
1131
 
1132
- #: includes/class-display.php:1149
1133
  msgid "March"
1134
  msgstr ""
1135
 
1136
- #: includes/class-display.php:1150
1137
  msgid "April"
1138
  msgstr ""
1139
 
1140
- #: includes/class-display.php:1151
1141
  msgid "May"
1142
  msgstr ""
1143
 
1144
- #: includes/class-display.php:1152
1145
  msgid "June"
1146
  msgstr ""
1147
 
1148
- #: includes/class-display.php:1153
1149
  msgid "July "
1150
  msgstr ""
1151
 
1152
- #: includes/class-display.php:1154
1153
  msgid "August"
1154
  msgstr ""
1155
 
1156
- #: includes/class-display.php:1155
1157
  msgid "September"
1158
  msgstr ""
1159
 
1160
- #: includes/class-display.php:1156
1161
  msgid "October"
1162
  msgstr ""
1163
 
1164
- #: includes/class-display.php:1157
1165
  msgid "November"
1166
  msgstr ""
1167
 
1168
- #: includes/class-display.php:1158
1169
  msgid "December"
1170
  msgstr ""
1171
 
1172
- #: includes/class-display.php:1327
1173
  #, php-format
1174
  msgid ""
1175
  "By submitting this form, you are granting: %s, permission to email you. You "
@@ -1194,28 +1193,58 @@ msgstr ""
1194
  msgid "Sync Lists with Constant Contact"
1195
  msgstr ""
1196
 
1197
- #: includes/class-mail.php:228
1198
  #, php-format
1199
  msgid "Duplicate send mail for: %1$s and: %2$s"
1200
  msgstr ""
1201
 
1202
- #: includes/class-mail.php:249
 
 
 
 
 
 
 
 
 
 
 
 
 
1203
  msgid ""
1204
- "Congratulations! Your Constant Contact Forms plugin has successfully "
1205
- "captured new information:"
 
 
 
 
 
1206
  msgstr ""
1207
 
1208
- #: includes/class-mail.php:251
 
1209
  msgid ""
1210
- "Don't forget: Email marketing is a great way to stay connected and engage "
1211
- "with visitors after they've left your site. When you connect to a Constant "
1212
- "Contact account, all new subscribers are automatically synced so you can "
1213
- "keep the interaction going through emails and more. Sign up for a Free Trial "
1214
- "on the Connect page in the Plugin console view."
1215
  msgstr ""
1216
 
1217
- #: includes/class-mail.php:284
1218
- msgid "Great News: You just captured a new visitor submission"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1219
  msgstr ""
1220
 
1221
  #: includes/class-notification-content.php:52
@@ -1357,9 +1386,11 @@ msgid "Disable E-mail Notifications"
1357
  msgstr ""
1358
 
1359
  #: includes/class-settings.php:263
 
1360
  msgid ""
1361
- "This option will disable e-mail notifications when someone submits a form "
1362
- "and you have a connected Constant Contact account."
 
1363
  msgstr ""
1364
 
1365
  #: includes/class-settings.php:271
@@ -1471,10 +1502,13 @@ msgid "Constant Contact Forms for WordPress"
1471
  msgstr ""
1472
 
1473
  #. Plugin URI of the plugin/theme
1474
- #. Author URI of the plugin/theme
1475
  msgid "https://www.constantcontact.com"
1476
  msgstr ""
1477
 
1478
  #. Description of the plugin/theme
1479
  msgid "Be a better marketer. All it takes is Constant Contact email marketing."
1480
  msgstr ""
 
 
 
 
3
  msgstr ""
4
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
  "Project-Id-Version: Constant Contact Forms for WordPress\n"
6
+ "POT-Creation-Date: 2018-02-27 17:35-0600\n"
7
  "PO-Revision-Date: 2017-01-12 14:46-0600\n"
8
  "Last-Translator: Michael Beckwith <michael.d.beckwith@gmail.com>\n"
9
  "Language-Team: Constant Contact\n"
24
  "X-Poedit-SearchPathExcluded-3: node_modules\n"
25
 
26
  #. Author of the plugin/theme
27
+ #: constant-contact-forms.php:353 includes/class-builder.php:347
28
  #: includes/class-cpts.php:87 includes/class-cpts.php:145
29
  msgid "Constant Contact"
30
  msgstr ""
31
 
32
+ #: constant-contact-forms.php:379
33
  msgid ""
34
  "Constant Contact Forms requires PHP 5.4 or higher. Your hosting provider or "
35
  "website administrator should be able to assist in updating your PHP version."
36
  msgstr ""
37
 
38
+ #: constant-contact-forms.php:704
39
  msgid "Error loading license."
40
  msgstr ""
41
 
274
  msgid "Description"
275
  msgstr ""
276
 
277
+ #: includes/class-admin.php:249 includes/class-builder-fields.php:496
278
  msgid "Shortcode"
279
  msgstr ""
280
 
314
  msgid "Contact type not returned"
315
  msgstr ""
316
 
317
+ #: includes/class-api.php:721
318
  msgid ""
319
  "Your API access token is invalid. Reconnect to Constant Contact to receive a "
320
  "new token."
369
  msgstr ""
370
 
371
  #: includes/class-builder-fields.php:187
372
+ msgid "Redirect URL"
373
  msgstr ""
374
 
375
  #: includes/class-builder-fields.php:190
376
+ msgid "Leave blank to keep users on the current page."
377
  msgstr ""
378
 
379
+ #: includes/class-builder-fields.php:195
380
+ msgid "No page refresh"
381
  msgstr ""
382
 
383
+ #: includes/class-builder-fields.php:198
384
  msgid ""
385
+ "Enable form submission without a page refresh. This option overrides the "
386
+ "Redirect URL choice above."
387
  msgstr ""
388
 
389
+ #: includes/class-builder-fields.php:220
390
  msgid ""
391
+ "Enabling this option will require users to check a box to be added to your "
392
+ "list."
 
393
  msgstr ""
394
 
395
+ #: includes/class-builder-fields.php:226
396
  msgid "Learn more"
397
  msgstr ""
398
 
399
+ #: includes/class-builder-fields.php:231
400
  msgid "Email opt-in"
401
  msgstr ""
402
 
403
+ #: includes/class-builder-fields.php:254
404
  msgid "Enable email subscriber opt-in"
405
  msgstr ""
406
 
407
+ #: includes/class-builder-fields.php:256
408
  msgid "Adds an opt-in to the bottom of your form."
409
  msgstr ""
410
 
411
+ #: includes/class-builder-fields.php:276
412
+ msgid "Add a checkbox so subscribers can opt-in to your email list."
413
  msgstr ""
414
 
415
+ #: includes/class-builder-fields.php:278
416
  msgid "(For use with Contact Us form)"
417
  msgstr ""
418
 
419
+ #: includes/class-builder-fields.php:281
420
  msgid "Opt-in checkbox"
421
  msgstr ""
422
 
423
+ #: includes/class-builder-fields.php:299
424
  msgid "Your Business Name"
425
  msgstr ""
426
 
427
+ #: includes/class-builder-fields.php:302 includes/class-settings.php:322
428
  msgid "Opt-in Affirmation"
429
  msgstr ""
430
 
431
+ #: includes/class-builder-fields.php:306
432
  #, php-format
433
  msgid ""
434
  "Example: Yes, I would like to receive emails from %s. (You can unsubscribe "
435
  "anytime)"
436
  msgstr ""
437
 
438
+ #: includes/class-builder-fields.php:322
439
  msgid "Form Fields"
440
  msgstr ""
441
 
442
+ #: includes/class-builder-fields.php:331
443
  msgid "Add Fields"
444
  msgstr ""
445
 
446
+ #: includes/class-builder-fields.php:337
447
  msgid ""
448
  "Create a field for each piece of information you want to collect. Good "
449
  "basics include email address, first name, and last name."
450
  msgstr ""
451
 
452
+ #: includes/class-builder-fields.php:348
453
  msgid "Field {#}"
454
  msgstr ""
455
 
456
+ #: includes/class-builder-fields.php:349
457
  msgid "Add Another Field"
458
  msgstr ""
459
 
460
+ #: includes/class-builder-fields.php:350
461
  msgid "Remove Field"
462
  msgstr ""
463
 
464
+ #: includes/class-builder-fields.php:362
465
  msgid "A brief description of this field (optional)"
466
  msgstr ""
467
 
468
+ #: includes/class-builder-fields.php:367
469
  msgid "Email (required)"
470
  msgstr ""
471
 
472
+ #: includes/class-builder-fields.php:368
473
  msgid "c.contact@example.com"
474
  msgstr ""
475
 
476
+ #: includes/class-builder-fields.php:371
477
  msgid "First Name"
478
  msgstr ""
479
 
480
+ #: includes/class-builder-fields.php:372
481
  msgid "John"
482
  msgstr ""
483
 
484
+ #: includes/class-builder-fields.php:375
485
  msgid "Last Name"
486
  msgstr ""
487
 
488
+ #: includes/class-builder-fields.php:376
489
  msgid "Smith"
490
  msgstr ""
491
 
492
+ #: includes/class-builder-fields.php:379
493
  msgid "Phone Number"
494
  msgstr ""
495
 
496
+ #: includes/class-builder-fields.php:380
497
  msgid "(555) 272-3342"
498
  msgstr ""
499
 
500
+ #: includes/class-builder-fields.php:383
501
  msgid "Address"
502
  msgstr ""
503
 
504
+ #: includes/class-builder-fields.php:384
505
  msgid "4115 S. Main Rd."
506
  msgstr ""
507
 
508
+ #: includes/class-builder-fields.php:387
509
  msgid "Job Title"
510
  msgstr ""
511
 
512
+ #: includes/class-builder-fields.php:388
513
  msgid "Project Manager"
514
  msgstr ""
515
 
516
+ #: includes/class-builder-fields.php:391
517
  msgid "Company"
518
  msgstr ""
519
 
520
+ #: includes/class-builder-fields.php:392
521
  msgid "Acme Manufacturing"
522
  msgstr ""
523
 
524
+ #: includes/class-builder-fields.php:395
525
  msgid "Website"
526
  msgstr ""
527
 
528
+ #: includes/class-builder-fields.php:396
529
  msgid "http://www.example.com"
530
  msgstr ""
531
 
532
+ #: includes/class-builder-fields.php:411
533
  msgid "Custom Text Field"
534
  msgstr ""
535
 
536
+ #: includes/class-builder-fields.php:412
537
  msgid "A custom text field"
538
  msgstr ""
539
 
540
+ #: includes/class-builder-fields.php:415
541
  msgid "Custom Text Area"
542
  msgstr ""
543
 
544
+ #: includes/class-builder-fields.php:416
545
  msgid "A large custom text field"
546
  msgstr ""
547
 
548
+ #: includes/class-builder-fields.php:451
549
  msgid "Select a Field"
550
  msgstr ""
551
 
552
+ #: includes/class-builder-fields.php:462
553
  msgid "Field Label"
554
  msgstr ""
555
 
556
+ #: includes/class-builder-fields.php:465
557
  msgid "Email"
558
  msgstr ""
559
 
560
+ #: includes/class-builder-fields.php:470
561
  msgid "Field Description"
562
  msgstr ""
563
 
564
+ #: includes/class-builder-fields.php:474
565
  msgid "Ex: Enter email address"
566
  msgstr ""
567
 
568
+ #: includes/class-builder-fields.php:480
569
  msgid "Required"
570
  msgstr ""
571
 
572
+ #: includes/class-builder-fields.php:504
573
  msgid "Shortcode to use"
574
  msgstr ""
575
 
576
+ #: includes/class-builder-fields.php:507
577
  msgid ""
578
  "Shortcode to embed - <em><small>You can copy and paste this in a post to "
579
  "display your form.</small></em>"
841
  msgid "New Form"
842
  msgstr ""
843
 
844
+ #: includes/class-cpts.php:70 includes/class-display.php:613
845
  msgid "Edit Form"
846
  msgstr ""
847
 
1072
  msgid "%1$s (last modified %2$s ago)"
1073
  msgstr ""
1074
 
1075
+ #: includes/class-display.php:329
1076
  msgid "Constant Contact Use."
1077
  msgstr ""
1078
 
1079
+ #: includes/class-display.php:440 includes/class-display.php:1292
1080
  msgid "Error: Please correct your entry."
1081
  msgstr ""
1082
 
1083
+ #: includes/class-display.php:442
1084
  msgid " Error: Please fill out this field."
1085
  msgstr ""
1086
 
1087
+ #: includes/class-display.php:867
1088
  msgid "Send"
1089
  msgstr ""
1090
 
1091
+ #: includes/class-display.php:982
1092
  msgid "Street Address"
1093
  msgstr ""
1094
 
1095
+ #: includes/class-display.php:983
1096
  msgid "Address Line 2"
1097
  msgstr ""
1098
 
1099
+ #: includes/class-display.php:984
1100
  msgid "City"
1101
  msgstr ""
1102
 
1103
+ #: includes/class-display.php:985
1104
  msgid "State"
1105
  msgstr ""
1106
 
1107
+ #: includes/class-display.php:986
1108
  msgid "ZIP Code"
1109
  msgstr ""
1110
 
1111
+ #: includes/class-display.php:1051
1112
  msgid "Month"
1113
  msgstr ""
1114
 
1115
+ #: includes/class-display.php:1052
1116
  msgid "Day"
1117
  msgstr ""
1118
 
1119
+ #: includes/class-display.php:1053
1120
  msgid "Year"
1121
  msgstr ""
1122
 
1123
+ #: includes/class-display.php:1177
1124
  msgid "January"
1125
  msgstr ""
1126
 
1127
+ #: includes/class-display.php:1178
1128
  msgid "February"
1129
  msgstr ""
1130
 
1131
+ #: includes/class-display.php:1179
1132
  msgid "March"
1133
  msgstr ""
1134
 
1135
+ #: includes/class-display.php:1180
1136
  msgid "April"
1137
  msgstr ""
1138
 
1139
+ #: includes/class-display.php:1181
1140
  msgid "May"
1141
  msgstr ""
1142
 
1143
+ #: includes/class-display.php:1182
1144
  msgid "June"
1145
  msgstr ""
1146
 
1147
+ #: includes/class-display.php:1183
1148
  msgid "July "
1149
  msgstr ""
1150
 
1151
+ #: includes/class-display.php:1184
1152
  msgid "August"
1153
  msgstr ""
1154
 
1155
+ #: includes/class-display.php:1185
1156
  msgid "September"
1157
  msgstr ""
1158
 
1159
+ #: includes/class-display.php:1186
1160
  msgid "October"
1161
  msgstr ""
1162
 
1163
+ #: includes/class-display.php:1187
1164
  msgid "November"
1165
  msgstr ""
1166
 
1167
+ #: includes/class-display.php:1188
1168
  msgid "December"
1169
  msgstr ""
1170
 
1171
+ #: includes/class-display.php:1357
1172
  #, php-format
1173
  msgid ""
1174
  "By submitting this form, you are granting: %s, permission to email you. You "
1193
  msgid "Sync Lists with Constant Contact"
1194
  msgstr ""
1195
 
1196
+ #: includes/class-mail.php:257
1197
  #, php-format
1198
  msgid "Duplicate send mail for: %1$s and: %2$s"
1199
  msgstr ""
1200
 
1201
+ #: includes/class-mail.php:281
1202
+ msgid "Your Constant Contact Forms plugin has captured new information."
1203
+ msgstr ""
1204
+
1205
+ #: includes/class-mail.php:285
1206
+ msgid "Form title: "
1207
+ msgstr ""
1208
+
1209
+ #: includes/class-mail.php:286
1210
+ msgid "Form information: "
1211
+ msgstr ""
1212
+
1213
+ #: includes/class-mail.php:292
1214
+ #, php-format
1215
  msgid ""
1216
+ "Email marketing is a great way to stay connected and engage with visitors "
1217
+ "after they've left your site. Visit %shttps://www.constantcontact.com/index?"
1218
+ "pn=miwordpress%s to sign up for a Free Trial."
1219
+ msgstr ""
1220
+
1221
+ #: includes/class-mail.php:329
1222
+ msgid "Constant Contact Forms Notification"
1223
  msgstr ""
1224
 
1225
+ #: includes/class-mail.php:421
1226
+ #, php-format
1227
  msgid ""
1228
+ "%sNote:%s You have disabled admin email notifications under the plugin "
1229
+ "settings, but are receiving this email because of the following reason."
 
 
 
1230
  msgstr ""
1231
 
1232
+ #: includes/class-mail.php:444
1233
+ msgid "Submitted to Constant Contact:"
1234
+ msgstr ""
1235
+
1236
+ #: includes/class-mail.php:450
1237
+ msgid "NO (Constant Contact list not selected for this form)"
1238
+ msgstr ""
1239
+
1240
+ #: includes/class-mail.php:456
1241
+ msgid "NO (User did not select the Email Opt-in checkbox)"
1242
+ msgstr ""
1243
+
1244
+ #: includes/class-mail.php:456
1245
+ msgid ""
1246
+ "You can disable this under Form options. Email Opt-in isn't required to add "
1247
+ "subscribers into your account"
1248
  msgstr ""
1249
 
1250
  #: includes/class-notification-content.php:52
1386
  msgstr ""
1387
 
1388
  #: includes/class-settings.php:263
1389
+ #, php-format
1390
  msgid ""
1391
+ "This option will disable e-mail notifications for forms with a selected list "
1392
+ "and successfully submit to Constant Contact.%s Notifications are sent to the "
1393
+ "email address listed under Wordpress \"General Settings\"."
1394
  msgstr ""
1395
 
1396
  #: includes/class-settings.php:271
1502
  msgstr ""
1503
 
1504
  #. Plugin URI of the plugin/theme
 
1505
  msgid "https://www.constantcontact.com"
1506
  msgstr ""
1507
 
1508
  #. Description of the plugin/theme
1509
  msgid "Be a better marketer. All it takes is Constant Contact email marketing."
1510
  msgstr ""
1511
+
1512
+ #. Author URI of the plugin/theme
1513
+ msgid "https://www.constantcontact.com/index?pn=miwordpress"
1514
+ msgstr ""
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: constantcontact
3
  Tags: capture, contacts, constant contact, constant contact form, constant contact newsletter, constant contact official, contact forms, email, form, forms, marketing, mobile, newsletter, opt-in, plugin, signup, subscribe, subscription, widget
4
  Requires at least: 4.0.0
5
- Tested up to: 4.8.2
6
- Stable tag: 1.3.5
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -21,7 +21,7 @@ https://www.youtube.com/watch?v=MhxtAlpZzJw
21
  * Choose forms that automatically select the theme and style of your WordPress site.
22
  * Customize data fields, so you can tailor the type of information you collect.
23
 
24
- BONUS: If you have a Constant Contact account, all new email addresses that you capture will be automatically added to the Constant Contact email lists of your choosing. Not a Constant Contact customer? Sign up for a Free Trial right from the plugin.
25
 
26
  **Constant Contact Forms** requires a PHP version of 5.4 or higher. You will not be able to use if on a lower version. Talk to your system administrator or hosting company if you are not sure what version you are on.
27
 
@@ -34,6 +34,18 @@ BONUS: If you have a Constant Contact account, all new email addresses that you
34
 
35
  == Changelog ==
36
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  = 1.3.5 =
38
  * Fixed: Prevent submission status message from displaying on all forms with multiple forms on same page.
39
  * Fixed: Properly prevent submission via AJAX when required fields are not met.
@@ -43,7 +55,7 @@ BONUS: If you have a Constant Contact account, all new email addresses that you
43
  * Fixed: Prevent possible issues with $_POST globals not being strings.
44
  * Fixed: Addressed issues with Google reCAPTCHA validation and verification of submitting users via allow_url_fopen.
45
  * Updated: Provided updated default values for button text, success message.
46
- * Updated: Rearranged and updated lables form builder fields to provide better clarity.
47
  * Updated: Added form's unique ID to form markup output for styling options and specific targeting.
48
 
49
  = 1.3.4 =
2
  Contributors: constantcontact
3
  Tags: capture, contacts, constant contact, constant contact form, constant contact newsletter, constant contact official, contact forms, email, form, forms, marketing, mobile, newsletter, opt-in, plugin, signup, subscribe, subscription, widget
4
  Requires at least: 4.0.0
5
+ Tested up to: 4.9.4
6
+ Stable tag: 1.3.6
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
21
  * Choose forms that automatically select the theme and style of your WordPress site.
22
  * Customize data fields, so you can tailor the type of information you collect.
23
 
24
+ BONUS: If you have a Constant Contact account, all new email addresses that you capture will be automatically added to the Constant Contact email lists of your choosing. Not a Constant Contact customer? Sign up for a [Free Trial](http://www.constantcontact.com/index?pn=miwordpress) right from the plugin.
25
 
26
  **Constant Contact Forms** requires a PHP version of 5.4 or higher. You will not be able to use if on a lower version. Talk to your system administrator or hosting company if you are not sure what version you are on.
27
 
34
 
35
  == Changelog ==
36
 
37
+ = 1.3.6 =
38
+ * Fixed: Validate and potentially create full urls for values passed into custom "redirect to url" values. Prevents unintended destinations from partial urls.
39
+ * Fixed: Error display for cron debugging was not showing correctly.
40
+ * Fixed: Added required indicators to all appropriate fields in address fieldset on frontend.
41
+ * Fixed: No form will be displayed if the form is not published.
42
+ * Added: Address line 2 is no longer considered a required field.
43
+ * Added: Plugin will now send email notifications if notifications are disabled but no Constant Contact list has been set for a form or opt-in is required but user does not opt in. Prevents possible lost submissions.
44
+ * Updated: Wording for "Disable email" setting to clarify its purpose and intent.
45
+ * Updated: Wording around some form builder fields.
46
+ * Updated: Reworded emails and conditionally added messages regarding issues with form that required sending the email.
47
+ * Updated: Adjusted plugin load order slightly to prevent conflicts with other plugins using GuzzleHTTP.
48
+
49
  = 1.3.5 =
50
  * Fixed: Prevent submission status message from displaying on all forms with multiple forms on same page.
51
  * Fixed: Properly prevent submission via AJAX when required fields are not met.
55
  * Fixed: Prevent possible issues with $_POST globals not being strings.
56
  * Fixed: Addressed issues with Google reCAPTCHA validation and verification of submitting users via allow_url_fopen.
57
  * Updated: Provided updated default values for button text, success message.
58
+ * Updated: Rearranged and updated labels form builder fields to provide better clarity.
59
  * Updated: Added form's unique ID to form markup output for styling options and specific targeting.
60
 
61
  = 1.3.4 =