MailChimp for WordPress - Version 2.3.15

Version Description

  • October 9, 2015 =

Fixes

  • Fixes JS error when form contains no submit button

Improvements

  • Only prefix url fields with http:// if it is filled.
  • Updated Spanish & Catalan translations, thanks to Xavier Gimeno Torrent.
  • Fix mc4wp_form_before_fields being applied twice.
  • Position honeypot field to the right for Right-To-Left sites.
  • _mc4wp_lists can now be a comma-separated string of MailChimp list ID's to subscribe to (or an array).
  • Minor other defensive coding improvements to prevent clashes with other plugins.

Additions

  • Added opt-in usage tracking to help us make the plugin better. No sensitive data is tracked.
Download this release

Release Info

Developer DvanKooten
Plugin Icon 128x128 MailChimp for WordPress
Version 2.3.15
Comparing to
See all releases

Code changes from version 2.3.14 to 2.3.15

assets/css/admin.css CHANGED
@@ -36,15 +36,27 @@
36
 
37
  #mc4wp-upgrade-box {
38
  background:#222;
39
- color:#ddd;
40
  padding:20px;
41
  }
42
 
 
 
 
 
43
  #mc4wp-upgrade-box h3{
44
  margin:0;
45
  color:white;
46
  }
47
 
 
 
 
 
 
 
 
 
48
  #mc4wp-fw h4{
49
  margin-top: 0;
50
  }
@@ -203,6 +215,7 @@ table.mc4wp-help tr:hover {
203
  margin: 0 !important;
204
  }
205
 
 
206
  @media(max-width: 1279px) {
207
 
208
  #mc4wp-sidebar,
36
 
37
  #mc4wp-upgrade-box {
38
  background:#222;
39
+ color: #ddd;
40
  padding:20px;
41
  }
42
 
43
+ #mc4wp-upgrade-box a {
44
+ color: #ccc;
45
+ }
46
+
47
  #mc4wp-upgrade-box h3{
48
  margin:0;
49
  color:white;
50
  }
51
 
52
+ #mc4wp-upgrade-box .mc4wp-upgrade-button {
53
+ box-shadow: none;
54
+ background: #FF8C00;
55
+ border-color: #b56200;
56
+ margin-right: 10px;
57
+ color: white;
58
+ }
59
+
60
  #mc4wp-fw h4{
61
  margin-top: 0;
62
  }
215
  margin: 0 !important;
216
  }
217
 
218
+
219
  @media(max-width: 1279px) {
220
 
221
  #mc4wp-sidebar,
assets/css/admin.min.css CHANGED
@@ -1 +1 @@
1
- #mc4wp-admin .page-title{background:url("../img/icon-large.png") left center no-repeat;padding-left:42px;line-height:32px;margin-bottom:20px}#mc4wp-content{float:left;width:65%}#mc4wp-sidebar{float:left;width:33%;margin-left:2%;border-left:1px solid #ccc;padding:0 0 0 2%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.valigntop{vertical-align:top!important}.mc4wp-box{margin-bottom:20px}.mc4wp-box label{font-weight:700}#mc4wp-upgrade-box{background:#222;color:#ddd;padding:20px}#mc4wp-upgrade-box h3{margin:0;color:#fff}#mc4wp-fw h4{margin-top:0}#mc4wp-fw p{margin-bottom:1em}#mc4wp-fw-fields{display:none}#mc4wp-fw-preview{font-family:"Courier New",Courier,monospace;min-height:200px;font-size:11px;background:#fff;z-index:99}#mc4wp-lists{margin:0}#mc4wp-lists input{margin-right:5px}.mc4wp-settings tr.pro-feature td,.mc4wp-settings tr.pro-feature th,.pro-feature{color:#aaa}#mc4wp-admin .status{display:inline-block;margin-left:1em;padding:3px 6px;color:#fff;font-size:12px;font-weight:700}#mc4wp-admin .positive{background-color:#32cd32}#mc4wp-admin .negative{background-color:red}#mc4wp-admin .neutral{background:gray}#mc4wp-admin table th{text-align:left}#mc4wp-admin table.form-table tr td:first-child,#mc4wp-admin table.form-table tr th:first-child{padding-left:0}#mc4wp-admin td.nowrap{white-space:nowrap}#mc4wp-admin td.desc{font-style:italic;font-size:11px}.mc4wp-notice{padding:6px 8px;color:#31708f;background:#d9edf7;border:1px solid #bce8f1;margin:1em 0!important}#mc4wp-admin .mc4wp-col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;padding:0 5px}#mc4wp-admin .mc4wp-first{padding-left:0}#mc4wp-admin .mc4wp-last{padding-right:0}.mc4wp-well{background:#fff;padding:10px;border:1px solid #ccc}.mc4wp-title{font-size:1.4em;margin:1.6em 0 1em;padding:0 0 6px;border-bottom:1px solid #ddd}table.mc4wp-help,table.mc4wp-help td,table.mc4wp-help th{border:1px solid #ddd;border-collapse:collapse;font-size:12px}table.mc4wp-help td,table.mc4wp-help th{vertical-align:text-top;text-align:left;padding:5px 10px}table.mc4wp-help tr:hover{background-color:#ddd}#mc4wp-admin .wp-list-table code{float:right}.mc4wp-lists-overview{border-collapse:collapse;background:#fff;padding:20px;max-height:500px;overflow-y:scroll}.mc4wp-lists-overview table{border:0}.mc4wp-lists-overview th{font-weight:700;vertical-align:top}.mc4wp-lists-overview td,.mc4wp-lists-overview th{border:1px solid #efefef}.mc4wp-lists-overview h3{margin:0!important}@media(max-width:1279px){#mc4wp-content,#mc4wp-sidebar{float:none;width:100%;padding:0;margin:0}#mc4wp-sidebar{border-left:0;border-top:1px solid #ccc;margin-top:25px;padding-top:25px}#mc4wp-admin .wp-list-table code{float:none}}@media(max-width:860px){.mc4wp-hide-smallscreens{display:none}}
1
+ #mc4wp-admin .page-title{background:url("../img/icon-large.png") left center no-repeat;padding-left:42px;line-height:32px;margin-bottom:20px}#mc4wp-content{float:left;width:65%}#mc4wp-sidebar{float:left;width:33%;margin-left:2%;border-left:1px solid #ccc;padding:0 0 0 2%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.valigntop{vertical-align:top!important}.mc4wp-box{margin-bottom:20px}.mc4wp-box label{font-weight:700}#mc4wp-upgrade-box{background:#222;color:#ddd;padding:20px}#mc4wp-upgrade-box a{color:#ccc}#mc4wp-upgrade-box h3{margin:0;color:#fff}#mc4wp-upgrade-box .mc4wp-upgrade-button{box-shadow:none;background:#FF8C00;border-color:#b56200;margin-right:10px;color:#fff}#mc4wp-fw h4{margin-top:0}#mc4wp-fw p{margin-bottom:1em}#mc4wp-fw-fields{display:none}#mc4wp-fw-preview{font-family:"Courier New",Courier,monospace;min-height:200px;font-size:11px;background:#fff;z-index:99}#mc4wp-lists{margin:0}#mc4wp-lists input{margin-right:5px}.mc4wp-settings tr.pro-feature td,.mc4wp-settings tr.pro-feature th,.pro-feature{color:#aaa}#mc4wp-admin .status{display:inline-block;margin-left:1em;padding:3px 6px;color:#fff;font-size:12px;font-weight:700}#mc4wp-admin .positive{background-color:#32cd32}#mc4wp-admin .negative{background-color:red}#mc4wp-admin .neutral{background:gray}#mc4wp-admin table th{text-align:left}#mc4wp-admin table.form-table tr td:first-child,#mc4wp-admin table.form-table tr th:first-child{padding-left:0}#mc4wp-admin td.nowrap{white-space:nowrap}#mc4wp-admin td.desc{font-style:italic;font-size:11px}.mc4wp-notice{padding:6px 8px;color:#31708f;background:#d9edf7;border:1px solid #bce8f1;margin:1em 0!important}#mc4wp-admin .mc4wp-col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;padding:0 5px}#mc4wp-admin .mc4wp-first{padding-left:0}#mc4wp-admin .mc4wp-last{padding-right:0}.mc4wp-well{background:#fff;padding:10px;border:1px solid #ccc}.mc4wp-title{font-size:1.4em;margin:1.6em 0 1em;padding:0 0 6px;border-bottom:1px solid #ddd}table.mc4wp-help,table.mc4wp-help td,table.mc4wp-help th{border:1px solid #ddd;border-collapse:collapse;font-size:12px}table.mc4wp-help td,table.mc4wp-help th{vertical-align:text-top;text-align:left;padding:5px 10px}table.mc4wp-help tr:hover{background-color:#ddd}#mc4wp-admin .wp-list-table code{float:right}.mc4wp-lists-overview{border-collapse:collapse;background:#fff;padding:20px;max-height:500px;overflow-y:scroll}.mc4wp-lists-overview table{border:0}.mc4wp-lists-overview th{font-weight:700;vertical-align:top}.mc4wp-lists-overview td,.mc4wp-lists-overview th{border:1px solid #efefef}.mc4wp-lists-overview h3{margin:0!important}@media(max-width:1279px){#mc4wp-content,#mc4wp-sidebar{float:none;width:100%;padding:0;margin:0}#mc4wp-sidebar{border-left:0;border-top:1px solid #ccc;margin-top:25px;padding-top:25px}#mc4wp-admin .wp-list-table code{float:none}}@media(max-width:860px){.mc4wp-hide-smallscreens{display:none}}
includes/admin/class-admin.php CHANGED
@@ -23,11 +23,19 @@ class MC4WP_Lite_Admin
23
  */
24
  public function __construct() {
25
 
 
26
  $this->plugin_file = plugin_basename( MC4WP_LITE_PLUGIN_FILE );
27
  $this->mailchimp = new MC4WP_MailChimp();
28
  $this->load_translations();
29
  $this->setup_hooks();
30
  $this->listen();
 
 
 
 
 
 
 
31
  }
32
 
33
  /**
@@ -188,9 +196,9 @@ class MC4WP_Lite_Admin
188
  }
189
 
190
  /**
191
- * Register the setting pages and their menu items
192
- */
193
- public function build_menu() {
194
 
195
  /**
196
  * @filter mc4wp_settings_cap
@@ -198,7 +206,17 @@ class MC4WP_Lite_Admin
198
  *
199
  * Use to customize the required user capability to access the MC4WP settings pages
200
  */
201
- $required_cap = apply_filters( 'mc4wp_settings_cap', 'manage_options' );
 
 
 
 
 
 
 
 
 
 
202
 
203
  $menu_items = array(
204
  array(
@@ -251,6 +269,11 @@ class MC4WP_Lite_Admin
251
 
252
  $current = mc4wp_get_options();
253
 
 
 
 
 
 
254
  // sanitize simple text fields (no HTML, just chars & numbers)
255
  $simple_text_fields = array( 'api_key', 'redirect', 'css' );
256
  foreach( $simple_text_fields as $field ) {
23
  */
24
  public function __construct() {
25
 
26
+
27
  $this->plugin_file = plugin_basename( MC4WP_LITE_PLUGIN_FILE );
28
  $this->mailchimp = new MC4WP_MailChimp();
29
  $this->load_translations();
30
  $this->setup_hooks();
31
  $this->listen();
32
+
33
+ // Instantiate Usage Tracking nag
34
+ $options = mc4wp_get_options( 'general' );
35
+ if( ! $options['allow_usage_tracking'] ) {
36
+ $usage_tracking_nag = new MC4WP_Usage_Tracking_Nag( $this->get_required_capability() );
37
+ $usage_tracking_nag->add_hooks();
38
+ }
39
  }
40
 
41
  /**
196
  }
197
 
198
  /**
199
+ * @return string
200
+ */
201
+ public function get_required_capability() {
202
 
203
  /**
204
  * @filter mc4wp_settings_cap
206
  *
207
  * Use to customize the required user capability to access the MC4WP settings pages
208
  */
209
+ $required_cap = (string) apply_filters( 'mc4wp_settings_cap', 'manage_options' );
210
+
211
+ return $required_cap;
212
+ }
213
+
214
+ /**
215
+ * Register the setting pages and their menu items
216
+ */
217
+ public function build_menu() {
218
+
219
+ $required_cap = $this->get_required_capability();
220
 
221
  $menu_items = array(
222
  array(
269
 
270
  $current = mc4wp_get_options();
271
 
272
+ // Toggle usage tracking
273
+ if( isset( $settings['allow_usage_tracking'] ) ) {
274
+ MC4WP_Usage_Tracking::instance()->toggle( (bool) $settings['allow_usage_tracking'] );
275
+ }
276
+
277
  // sanitize simple text fields (no HTML, just chars & numbers)
278
  $simple_text_fields = array( 'api_key', 'redirect', 'css' );
279
  foreach( $simple_text_fields as $field ) {
includes/admin/class-usage-tracking-nag.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MC4WP_Usage_Tracking_Nag {
4
+
5
+ /**
6
+ * @var int
7
+ */
8
+ public $shown = 0;
9
+
10
+ /**
11
+ * @var string
12
+ */
13
+ protected $required_capability = 'manage_options';
14
+
15
+ /**
16
+ * The name of the option to store whether this nag was shown in
17
+ */
18
+ const OPTION_NAME = 'mc4wp_usage_tracking_nag_shown';
19
+
20
+ /**
21
+ * @param string $required_capability
22
+ */
23
+ public function __construct( $required_capability = '' ) {
24
+ $this->shown = get_option( self::OPTION_NAME, 0 );
25
+
26
+ if( ! empty( $required_capability ) ) {
27
+ $this->required_capability = $required_capability;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Add hooks
33
+ */
34
+ public function add_hooks() {
35
+
36
+ // Don't add unneeded hooks
37
+ if( $this->shown ) {
38
+ return;
39
+ }
40
+
41
+ add_action( 'admin_notices', array( $this, 'show' ) );
42
+ add_action( 'admin_init', array( $this, 'listen' ) );
43
+ }
44
+
45
+ /**
46
+ *
47
+ */
48
+ public function show() {
49
+
50
+ // only show this nag if tracking is not already enabled or notice was shown before
51
+ if( $this->shown ) {
52
+ return;
53
+ }
54
+
55
+ ?>
56
+ <div class="updated notice">
57
+ <p>
58
+ <strong>Help us improve the MailChimp for WordPress plugin.</strong><br />
59
+ Allow us to anonymously track how this plugin is used to help us make it better fit your needs. No sensitive data is tracked.
60
+ </p>
61
+ <form method="post">
62
+ <p>
63
+ <button type="submit" class="button button-primary" name="allow" value="1">Allow usage tracking</button> &nbsp;
64
+ <button type="submit" class="button" name="allow" value="0">Dismiss</button>
65
+ </p>
66
+
67
+ <input type="hidden" name="mc4wp-usage-tracking-nag" value="1" />
68
+ </form>
69
+
70
+ </div>
71
+ <?php
72
+ }
73
+
74
+ /**
75
+ * Listen for uses of the form in the nag notice.
76
+ */
77
+ public function listen() {
78
+
79
+ if ( ! isset( $_POST['mc4wp-usage-tracking-nag'] ) ) {
80
+ return;
81
+ }
82
+
83
+ if ( ! current_user_can( $this->required_capability ) ) {
84
+ return;
85
+ }
86
+
87
+ $allow = ( isset( $_POST['allow'] ) ) ? (bool) $_POST['allow'] : false;
88
+
89
+
90
+ if ( $allow ) {
91
+ // update plugin options
92
+ $options = (array) get_option( 'mc4wp_lite', array() );
93
+ $options['allow_usage_tracking'] = 1;
94
+ update_option( 'mc4wp_lite', $options );
95
+
96
+ // toggle tracking
97
+ MC4WP_Usage_Tracking::instance()->toggle( true );
98
+ }
99
+
100
+ // make sure notice never appears again
101
+ update_option( self::OPTION_NAME, 1 );
102
+ $this->shown = 1;
103
+ }
104
+ }
includes/admin/class-usage-tracking.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MC4WP_Usage_Tracking {
4
+
5
+ /**
6
+ * @var string
7
+ */
8
+ protected $tracking_url = 'https://mc4wp.com/api/usage-tracking';
9
+
10
+ /**
11
+ * @var MC4WP_Usage_Tracking The One True Instance
12
+ */
13
+ protected static $instance;
14
+
15
+ /**
16
+ * @return MC4WP_Usage_Tracking
17
+ */
18
+ public static function instance() {
19
+
20
+ if( ! self::$instance instanceof MC4WP_Usage_Tracking ) {
21
+ self::$instance = new MC4WP_Usage_Tracking();
22
+ }
23
+
24
+ return self::$instance;
25
+ }
26
+
27
+ /**
28
+ * Constructor
29
+ */
30
+ public function __construct() {}
31
+
32
+ /**
33
+ * Add hooks
34
+ */
35
+ public function add_hooks() {
36
+ add_action( 'mc4wp_usage_tracking', array( $this, 'track' ) );
37
+ }
38
+
39
+ /**
40
+ * Toggle tracking (clears & sets the scheduled tracking event)
41
+ *
42
+ * @param bool $enabled
43
+ */
44
+ public function toggle( $enabled ) {
45
+
46
+ if( ! $enabled ) {
47
+ wp_clear_scheduled_hook( 'mc4wp_usage_tracking' );
48
+ return;
49
+ }
50
+
51
+ wp_schedule_event( time(), 'daily', 'mc4wp_usage_tracking' );
52
+ }
53
+
54
+ /**
55
+ * Sends the tracking request. Non-blocking.
56
+ */
57
+ public function track() {
58
+ $data = $this->get_tracking_data();
59
+
60
+ // send non-blocking request and be done with it
61
+ $response = wp_remote_post( $this->tracking_url, array(
62
+ 'body' => json_encode( $data ),
63
+ 'headers' => array(
64
+ 'Content-Type' => 'application/json',
65
+ 'Accept' => 'application/json'
66
+ ),
67
+ 'blocking' => false,
68
+ )
69
+ );
70
+ }
71
+
72
+ /**
73
+ * @return array
74
+ */
75
+ protected function get_tracking_data() {
76
+
77
+ $data = array(
78
+ // use md5 hash of home_url, we don't need/want to know the actual site url
79
+ 'site' => md5( home_url() ),
80
+ 'options' => $this->get_tracked_options(),
81
+ 'number_of_mailchimp_lists' => $this->get_mailchimp_lists_count(),
82
+ 'mc4wp_version' => MC4WP_LITE_VERSION,
83
+ 'plugins' => (array) get_option( 'active_plugins', array() ),
84
+ 'php_version' => PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION,
85
+ 'curl_version' => $this->get_curl_version(),
86
+ 'wp_version' => $GLOBALS['wp_version']
87
+ );
88
+
89
+ return $data;
90
+ }
91
+
92
+ /**
93
+ * @return int
94
+ */
95
+ protected function get_mailchimp_lists_count() {
96
+ $mailchimp = new MC4WP_MailChimp();
97
+ $lists = $mailchimp->get_lists( false, true );
98
+ return count( $lists );
99
+ }
100
+
101
+ /**
102
+ * @return array
103
+ */
104
+ public function get_tracked_options( ) {
105
+
106
+ $checkbox_options = mc4wp_get_options( 'checkbox' );
107
+ $form_options = mc4wp_get_options( 'form' );
108
+
109
+ // make sure these keys are always stripped
110
+ $ignored_options = array( 'api_key', 'license_key', 'lists' );
111
+
112
+ // filter options
113
+ $checkbox_options = array_diff_key( $checkbox_options, array_flip( $ignored_options ) );
114
+ $form_options = array_diff_key( $form_options, array_flip( $ignored_options ) );
115
+
116
+ // merge options
117
+ $options = array(
118
+ 'checkbox' => $checkbox_options,
119
+ 'form' => $form_options
120
+ );
121
+
122
+ return $options;
123
+ }
124
+
125
+ /**
126
+ * @return string
127
+ */
128
+ protected function get_curl_version() {
129
+
130
+ if( ! function_exists( 'curl_version' ) ) {
131
+ return 0;
132
+ }
133
+
134
+ $curl_version_info = curl_version();
135
+ return $curl_version_info['version'];
136
+ }
137
+ }
includes/class-field-map.php ADDED
@@ -0,0 +1,313 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MC4WP_Field_Map {
4
+
5
+ /**
6
+ * @var array
7
+ */
8
+ protected $form_data = array();
9
+
10
+ /**
11
+ * @var array
12
+ */
13
+ protected $lists = array();
14
+
15
+ /**
16
+ * @var MC4WP_MailChimp
17
+ */
18
+ protected $mailchimp;
19
+
20
+ /**
21
+ * @var array
22
+ */
23
+ protected $mapped_fields = array( 'EMAIL' );
24
+
25
+ /**
26
+ * @var string
27
+ */
28
+ public $error_code = '';
29
+
30
+ /**
31
+ * @var array|bool
32
+ */
33
+ public $list_fields;
34
+
35
+ /**
36
+ * @var array
37
+ */
38
+ public $custom_fields = array();
39
+
40
+ /**
41
+ * @var array
42
+ */
43
+ public $global_fields = array();
44
+
45
+ /**
46
+ * @var bool
47
+ */
48
+ public $success = false;
49
+
50
+
51
+ /**
52
+ * @param array $form_data
53
+ * @param array $lists
54
+ */
55
+ public function __construct( array $form_data, array $lists ) {
56
+ $this->form_data = $form_data;
57
+ $this->lists = $lists;
58
+ $this->mailchimp = new MC4WP_MailChimp();
59
+
60
+ $this->list_fields = $this->map_list_fields();
61
+
62
+ // only proceed if successful
63
+ if( $this->list_fields ) {
64
+ $this->success = true;
65
+ $this->global_fields = $this->map_global_fields();
66
+ $this->custom_fields = $this->find_custom_fields();
67
+ }
68
+
69
+ }
70
+
71
+ /**
72
+ * @return array|bool
73
+ */
74
+ public function map_list_fields() {
75
+
76
+ $map = array();
77
+
78
+ // loop through selected lists
79
+ foreach( $this->lists as $list_id ) {
80
+
81
+ $list = $this->mailchimp->get_list( $list_id, false, true );
82
+
83
+ // skip this list if it's unexisting
84
+ if( ! is_object( $list ) || ! isset( $list->merge_vars ) ) {
85
+ continue;
86
+ }
87
+
88
+ // generate map for this given list
89
+ $list_map = $this->map_data_to_list( $list );
90
+ if( $list_map === false ) {
91
+ return false;
92
+ }
93
+
94
+ $map[ $list_id ] = $list_map;
95
+ }
96
+
97
+ return $map;
98
+ }
99
+
100
+ /**
101
+ * @return array
102
+ */
103
+ public function find_custom_fields() {
104
+
105
+ $unmapped_fields = array();
106
+
107
+ // is there still unmapped data left?
108
+ $total_fields_mapped = count( $this->mapped_fields ) + count( $this->global_fields );
109
+
110
+ if( $total_fields_mapped < count( $this->form_data ) ) {
111
+ foreach( $this->form_data as $field_key => $field_value ) {
112
+
113
+ if( $this->is_internal_var( $field_key ) ) {
114
+ continue;
115
+ }
116
+
117
+ if( ! in_array( $field_key, $this->mapped_fields ) ) {
118
+ $unmapped_fields[ $field_key ] = $field_value;
119
+ }
120
+ }
121
+ }
122
+
123
+ return $unmapped_fields;
124
+ }
125
+
126
+ /**
127
+ * @return array
128
+ */
129
+ private function map_global_fields() {
130
+ $global_fields = array();
131
+
132
+ // map global fields
133
+ $global_field_names = array( 'MC_LOCATION', 'MC_NOTES', 'MC_LANGUAGE' );
134
+ foreach( $global_field_names as $field_name ) {
135
+ if( isset( $this->form_data[ $field_name ] ) ) {
136
+ $global_fields[ $field_name ] = $this->form_data[ $field_name ];
137
+ }
138
+ }
139
+
140
+ return $global_fields;
141
+ }
142
+
143
+ /**
144
+ * @param $list
145
+ *
146
+ * @return array
147
+ */
148
+ private function map_data_to_list( $list ) {
149
+
150
+ // start with empty list map
151
+ $list_map = array();
152
+
153
+ // loop through other list fields
154
+ foreach( $list->merge_vars as $field ) {
155
+
156
+ // skip EMAIL field
157
+ if( $field->tag === 'EMAIL' ) {
158
+ continue;
159
+ }
160
+
161
+ // check if field is required
162
+ if( $field->req ) {
163
+ if( ! isset( $this->form_data[ $field->tag ] ) || '' === $this->form_data[ $field->tag ] ) {
164
+ $this->error_code = 'required_field_missing';
165
+ return false;
166
+ }
167
+ }
168
+
169
+ // if field is not set, continue.
170
+ if( ! isset( $this->form_data[ $field->tag ] ) ) {
171
+ continue;
172
+ }
173
+
174
+ // grab field value from data
175
+ $field_value = $this->form_data[ $field->tag ];
176
+
177
+ // format field value according to its type
178
+ $field_value = $this->format_field_value( $field_value, $field->field_type );
179
+
180
+ // add to mapped fields
181
+ $this->mapped_fields[] = $field->tag;
182
+
183
+ // add field value to map
184
+ $list_map[ $field->tag ] = $field_value;
185
+ }
186
+
187
+ // loop through list groupings if GROUPINGS data was sent
188
+ if( isset( $this->form_data['GROUPINGS'] ) && is_array( $this->form_data['GROUPINGS'] ) && ! empty( $list->interest_groupings ) ) {
189
+
190
+ $list_map['GROUPINGS'] = array();
191
+
192
+ foreach( $list->interest_groupings as $grouping ) {
193
+
194
+ // check if data for this group was sent
195
+ if( isset( $this->form_data['GROUPINGS'][$grouping->id] ) ) {
196
+ $group_data = $this->form_data['GROUPINGS'][$grouping->id];
197
+ } elseif( isset( $this->form_data['GROUPINGS'][$grouping->name] ) ) {
198
+ $group_data = $this->form_data['GROUPINGS'][$grouping->name];
199
+ } else {
200
+ // no data for this grouping was sent, just continue.
201
+ continue;
202
+ }
203
+
204
+ // format new grouping
205
+ $grouping = array(
206
+ 'id' => $grouping->id,
207
+ 'groups' => $group_data,
208
+ );
209
+
210
+ // make sure groups is an array
211
+ if( ! is_array( $grouping['groups'] ) ) {
212
+ $grouping['groups'] = sanitize_text_field( $grouping['groups'] );
213
+ $grouping['groups'] = array_map( 'trim', explode( ',', $grouping['groups'] ) );
214
+ }
215
+
216
+ $this->mapped_fields[] = 'GROUPINGS';
217
+ $list_map['GROUPINGS'][] = $grouping;
218
+ }
219
+
220
+ // unset GROUPINGS if no grouping data was found for this list
221
+ if( 0 === count( $list_map['GROUPINGS'] ) ) {
222
+ unset( $list_map['GROUPINGS'] );
223
+ }
224
+ }
225
+
226
+ // add to total map
227
+ return $list_map;
228
+ }
229
+
230
+ /**
231
+ * Format field value according to its type
232
+ *
233
+ * @param $field_type
234
+ * @param $field_value
235
+ *
236
+ * @return array|string
237
+ */
238
+ protected function format_field_value( $field_value, $field_type ) {
239
+
240
+ $field_type = strtolower( $field_type );
241
+
242
+ switch( $field_type ) {
243
+
244
+ // birthday fields need to be MM/DD for the MailChimp API
245
+ case 'birthday':
246
+ $field_value = (string) date( 'm/d', strtotime( $field_value ) );
247
+ break;
248
+
249
+ case 'address':
250
+
251
+ // auto-format if this is a string
252
+ if( is_string( $field_value ) ) {
253
+
254
+ // addr1, addr2, city, state, zip, country
255
+ $address_pieces = explode( ',', $field_value );
256
+
257
+ // try to fill it.... this is a long shot
258
+ $field_value = array(
259
+ 'addr1' => $address_pieces[0],
260
+ 'city' => ( isset( $address_pieces[1] ) ) ? $address_pieces[1] : '',
261
+ 'state' => ( isset( $address_pieces[2] ) ) ? $address_pieces[2] : '',
262
+ 'zip' => ( isset( $address_pieces[3] ) ) ? $address_pieces[3] : ''
263
+ );
264
+ } elseif( is_array( $field_value ) ) {
265
+
266
+ // merge with array of empty defaults to allow skipping certain fields
267
+ $default_address = array(
268
+ 'addr1' => '',
269
+ 'city' => '',
270
+ 'state' => '',
271
+ 'zip' => ''
272
+ );
273
+
274
+ $field_value = array_merge( $default_address, $field_value );
275
+ }
276
+
277
+ break;
278
+ }
279
+
280
+ /**
281
+ * @filter `mc4wp_format_field_value`
282
+ * @param mixed $field_value
283
+ * @param string $field_type
284
+ * @expects mixed
285
+ *
286
+ * Format a field value according to its MailChimp field type
287
+ */
288
+ $field_value = apply_filters( 'mc4wp_format_field_value', $field_value, $field_type );
289
+
290
+ return $field_value;
291
+ }
292
+
293
+ /**
294
+ * @param $var
295
+ *
296
+ * @return bool
297
+ */
298
+ protected function is_internal_var( $var ) {
299
+
300
+ if( $var[0] === '_' ) {
301
+ return true;
302
+ }
303
+
304
+ // Ignore those fields, we don't need them
305
+ $ignored_vars = array( 'CPTCH_NUMBER', 'CNTCTFRM_CONTACT_ACTION', 'CPTCH_RESULT', 'CPTCH_TIME', 'MC4WP_ACTION' );
306
+ if( in_array( $var, $ignored_vars ) ) {
307
+ return true;
308
+ }
309
+
310
+ return false;
311
+ }
312
+
313
+ }
includes/class-form-validator.php CHANGED
@@ -54,6 +54,7 @@ class MC4WP_Form_Validator {
54
  * @return bool
55
  */
56
  public function validate_honeypot() {
 
57
  // ensure honeypot was given but not filled
58
  if ( ! isset( $this->internal_data['honeypot'] ) || '' !== $this->internal_data['honeypot'] ) {
59
  return false;
54
  * @return bool
55
  */
56
  public function validate_honeypot() {
57
+
58
  // ensure honeypot was given but not filled
59
  if ( ! isset( $this->internal_data['honeypot'] ) || '' !== $this->internal_data['honeypot'] ) {
60
  return false;
includes/class-form.php CHANGED
@@ -71,7 +71,7 @@ class MC4WP_Form {
71
  */
72
  public function contains_field_type( $field_type ) {
73
  $html = sprintf( ' type="%s" ', $field_type );
74
- return stristr( $this->content, $html ) !== false;
75
  }
76
 
77
 
@@ -116,9 +116,9 @@ class MC4WP_Form {
116
  public function get_hidden_fields( $element_id, $attributes = array() ) {
117
 
118
  // hidden fields
119
- $hidden_fields = '<div style="position: absolute; ' . ( is_rtl() ? 'right' : 'left' ) . ': -5000px;"><input type="text" name="_mc4wp_h_'. md5( time() ).'" value="" tabindex="-1" autocomplete="off" /></div>';
120
  $hidden_fields .= '<input type="hidden" name="_mc4wp_timestamp" value="'. time() . '" />';
121
- $hidden_fields .= '<input type="hidden" name="_mc4wp_form_id" value="'. $this->ID .'" />';
122
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_element_id" value="'. esc_attr( $element_id ) .'" />';
123
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_submit" value="1" />';
124
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_nonce" value="'. wp_create_nonce( '_mc4wp_form_nonce' ) .'" />';
@@ -127,7 +127,7 @@ class MC4WP_Form {
127
  // was "lists" parameter passed in shortcode arguments?
128
  if( isset( $attributes['lists'] ) && ! empty( $attributes['lists'] ) ) {
129
  $lists_string = ( is_array( $attributes['lists'] ) ) ? join( ',', $attributes['lists'] ) : $attributes['lists'];
130
- $hidden_fields .= '<input type="hidden" name="_mc4wp_lists" value="'. $lists_string . '" />';
131
  }
132
 
133
  return (string) $hidden_fields;
@@ -183,28 +183,28 @@ class MC4WP_Form {
183
  * @param string $response_html
184
  * @return string
185
  */
186
- protected function get_html_before_fields( $response_html = '' ) {
187
- $before_fields = (string) apply_filters( 'mc4wp_form_before_fields', '' );
188
 
189
  if( $this->get_response_position() === 'before' ) {
190
- $before_fields = $response_html . $response_html;
191
  }
192
 
193
- return $before_fields;
194
  }
195
 
196
  /**
197
  * @param string $response_html
198
  * @return string
199
  */
200
- protected function get_html_after_fields( $response_html = '' ) {
201
- $after_fields = (string) apply_filters( 'mc4wp_form_after_fields', '' );
202
 
203
  if( $this->get_response_position() === 'after' ) {
204
- $after_fields = $response_html . $after_fields;
205
  }
206
 
207
- return $after_fields;
208
  }
209
 
210
  /**
@@ -251,8 +251,8 @@ class MC4WP_Form {
251
  $opening_html .= '<div id="' . esc_attr( $element_id ) . '" class="' . esc_attr( $this->get_css_classes( $element_id ) ) . '">';
252
  $before_fields = apply_filters( 'mc4wp_form_before_fields', '' );
253
  $after_fields = apply_filters( 'mc4wp_form_after_fields', '' );
254
- $before_form = $this->get_html_before_fields( $response_html );
255
- $after_form = $this->get_html_after_fields( $response_html );
256
  $closing_html = '</div><!-- / MailChimp for WordPress Plugin -->';
257
 
258
  // only generate form & fields HTML if necessary
71
  */
72
  public function contains_field_type( $field_type ) {
73
  $html = sprintf( ' type="%s" ', $field_type );
74
+ return stripos( $this->content, $html ) !== false;
75
  }
76
 
77
 
116
  public function get_hidden_fields( $element_id, $attributes = array() ) {
117
 
118
  // hidden fields
119
+ $hidden_fields = '<div style="position: absolute; ' . ( is_rtl() ? 'right' : 'left' ) . ': -5000px;"><input type="text" name="_mc4wp_ho_'. md5( time() ).'" value="" tabindex="-1" autocomplete="off" /></div>';
120
  $hidden_fields .= '<input type="hidden" name="_mc4wp_timestamp" value="'. time() . '" />';
121
+ $hidden_fields .= '<input type="hidden" name="_mc4wp_form_id" value="'. esc_attr( $this->ID ) .'" />';
122
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_element_id" value="'. esc_attr( $element_id ) .'" />';
123
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_submit" value="1" />';
124
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_nonce" value="'. wp_create_nonce( '_mc4wp_form_nonce' ) .'" />';
127
  // was "lists" parameter passed in shortcode arguments?
128
  if( isset( $attributes['lists'] ) && ! empty( $attributes['lists'] ) ) {
129
  $lists_string = ( is_array( $attributes['lists'] ) ) ? join( ',', $attributes['lists'] ) : $attributes['lists'];
130
+ $hidden_fields .= '<input type="hidden" name="_mc4wp_lists" value="'. esc_attr( $lists_string ) . '" />';
131
  }
132
 
133
  return (string) $hidden_fields;
183
  * @param string $response_html
184
  * @return string
185
  */
186
+ protected function get_html_before_form( $response_html = '' ) {
187
+ $html = (string) apply_filters( 'mc4wp_form_before_form', '', $this );
188
 
189
  if( $this->get_response_position() === 'before' ) {
190
+ $html = $html . $response_html;
191
  }
192
 
193
+ return $html;
194
  }
195
 
196
  /**
197
  * @param string $response_html
198
  * @return string
199
  */
200
+ protected function get_html_after_form( $response_html = '' ) {
201
+ $html = (string) apply_filters( 'mc4wp_form_after_form', '', $this );
202
 
203
  if( $this->get_response_position() === 'after' ) {
204
+ $html = $response_html . $html;
205
  }
206
 
207
+ return $html;
208
  }
209
 
210
  /**
251
  $opening_html .= '<div id="' . esc_attr( $element_id ) . '" class="' . esc_attr( $this->get_css_classes( $element_id ) ) . '">';
252
  $before_fields = apply_filters( 'mc4wp_form_before_fields', '' );
253
  $after_fields = apply_filters( 'mc4wp_form_after_fields', '' );
254
+ $before_form = $this->get_html_before_form( $response_html );
255
+ $after_form = $this->get_html_after_form( $response_html );
256
  $closing_html = '</div><!-- / MailChimp for WordPress Plugin -->';
257
 
258
  // only generate form & fields HTML if necessary
includes/class-mailchimp.php CHANGED
@@ -85,11 +85,7 @@ class MC4WP_MailChimp {
85
  return $lists;
86
  } else {
87
  // api request failed, get fallback data (with longer lifetime)
88
- $cached_lists = get_transient( $this->transient_name . '_fallback' );
89
-
90
- if ( ! is_array( $cached_lists ) ) {
91
- return false;
92
- }
93
  }
94
 
95
  }
85
  return $lists;
86
  } else {
87
  // api request failed, get fallback data (with longer lifetime)
88
+ $cached_lists = (array) get_transient( $this->transient_name . '_fallback' );
 
 
 
 
89
  }
90
 
91
  }
includes/class-plugin.php CHANGED
@@ -23,6 +23,11 @@ class MC4WP_Lite {
23
  */
24
  private $api;
25
 
 
 
 
 
 
26
  /**
27
  * @var MC4WP_Lite The one and only true plugin instance
28
  */
@@ -56,6 +61,10 @@ class MC4WP_Lite {
56
  */
57
  private function __construct() {
58
 
 
 
 
 
59
  // checkboxes
60
  $this->checkbox_manager = new MC4WP_Lite_Checkbox_Manager();
61
 
@@ -73,7 +82,7 @@ class MC4WP_Lite {
73
  */
74
  public function init_form_listener() {
75
  $listener = new MC4WP_Form_Listener();
76
- $listener->listen( $_REQUEST );
77
  }
78
 
79
  /**
23
  */
24
  private $api;
25
 
26
+ /**
27
+ * @var array
28
+ */
29
+ private $untinkered_request_global;
30
+
31
  /**
32
  * @var MC4WP_Lite The one and only true plugin instance
33
  */
61
  */
62
  private function __construct() {
63
 
64
+ // store global `$_REQUEST` array locally, to prevent other plugins from messing with it (yes it happens....)
65
+ // todo: fix this properly (move to more specific $_POST?)
66
+ $this->untinkered_request_global = $_REQUEST;
67
+
68
  // checkboxes
69
  $this->checkbox_manager = new MC4WP_Lite_Checkbox_Manager();
70
 
82
  */
83
  public function init_form_listener() {
84
  $listener = new MC4WP_Form_Listener();
85
+ $listener->listen( $this->untinkered_request_global );
86
  }
87
 
88
  /**
includes/class-request.php CHANGED
@@ -13,7 +13,7 @@ abstract class MC4WP_Request implements iMC4WP_Request {
13
  /**
14
  * @var MC4WP_Form
15
  */
16
- protected $form;
17
 
18
  /**
19
  * @var string
@@ -40,6 +40,11 @@ abstract class MC4WP_Request implements iMC4WP_Request {
40
  */
41
  public $user_data = array();
42
 
 
 
 
 
 
43
 
44
  /**
45
  * Constructor
@@ -59,6 +64,11 @@ abstract class MC4WP_Request implements iMC4WP_Request {
59
 
60
  // get form
61
  $this->form = MC4WP_Form::get( $this );
 
 
 
 
 
62
  }
63
 
64
  /**
@@ -79,7 +89,7 @@ abstract class MC4WP_Request implements iMC4WP_Request {
79
  $key = substr( $key, 7 );
80
 
81
  // if key starts with h_, change it to say "honeypot" (because field has dynamic name attribute)
82
- if( strpos( $key, 'h_' ) === 0 ){
83
  $key = 'honeypot';
84
  }
85
 
@@ -128,7 +138,7 @@ abstract class MC4WP_Request implements iMC4WP_Request {
128
  $value = array_map( array( $this, 'sanitize_deep' ), $value );
129
  } elseif ( is_object($value) ) {
130
  $vars = get_object_vars( $value );
131
- foreach ($vars as $key=>$data) {
132
  $value->{$key} = $this->sanitize_deep( $data );
133
  }
134
  }
@@ -271,23 +281,23 @@ abstract class MC4WP_Request implements iMC4WP_Request {
271
 
272
  $lists = $this->form->settings['lists'];
273
 
274
- // get lists from form, if set.
275
- if( isset( $this->internal_data['lists'] ) && ! empty( $this->internal_data['lists'] ) ) {
276
 
277
  $lists = $this->internal_data['lists'];
278
 
279
  // make sure lists is an array
280
  if( ! is_array( $lists ) ) {
281
  $lists = sanitize_text_field( $lists );
282
- $lists = array( $lists );
283
  }
284
 
285
  }
286
 
287
  // allow plugins to alter the lists to subscribe to
288
- $lists = apply_filters( 'mc4wp_lists', $lists );
289
 
290
- return (array) $lists;
291
  }
292
 
293
  /**
13
  /**
14
  * @var MC4WP_Form
15
  */
16
+ public $form;
17
 
18
  /**
19
  * @var string
40
  */
41
  public $user_data = array();
42
 
43
+ /**
44
+ * @var string
45
+ */
46
+ public $http_referer = '';
47
+
48
 
49
  /**
50
  * Constructor
64
 
65
  // get form
66
  $this->form = MC4WP_Form::get( $this );
67
+
68
+ // get referer
69
+ if( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
70
+ $this->http_referer = strip_tags( $_SERVER['HTTP_REFERER'] );
71
+ }
72
  }
73
 
74
  /**
89
  $key = substr( $key, 7 );
90
 
91
  // if key starts with h_, change it to say "honeypot" (because field has dynamic name attribute)
92
+ if( strpos( $key, 'ho_' ) === 0 ){
93
  $key = 'honeypot';
94
  }
95
 
138
  $value = array_map( array( $this, 'sanitize_deep' ), $value );
139
  } elseif ( is_object($value) ) {
140
  $vars = get_object_vars( $value );
141
+ foreach ( $vars as $key => $data ) {
142
  $value->{$key} = $this->sanitize_deep( $data );
143
  }
144
  }
281
 
282
  $lists = $this->form->settings['lists'];
283
 
284
+ // get lists from request, if set.
285
+ if( ! empty( $this->internal_data['lists'] ) ) {
286
 
287
  $lists = $this->internal_data['lists'];
288
 
289
  // make sure lists is an array
290
  if( ! is_array( $lists ) ) {
291
  $lists = sanitize_text_field( $lists );
292
+ $lists = array_map( 'trim', explode( ',', $lists ) );
293
  }
294
 
295
  }
296
 
297
  // allow plugins to alter the lists to subscribe to
298
+ $lists = (array) apply_filters( 'mc4wp_lists', $lists );
299
 
300
+ return $lists;
301
  }
302
 
303
  /**
includes/class-subscribe-request.php CHANGED
@@ -10,56 +10,30 @@ if( ! defined( 'ABSPATH' ) ) {
10
  class MC4WP_Subscribe_Request extends MC4WP_Request {
11
 
12
  /**
13
- * @var array
14
  */
15
- private $list_fields_map = array();
16
-
17
- /**
18
- * @var array
19
- */
20
- private $unmapped_fields = array();
21
-
22
- /**
23
- * @var array
24
- */
25
- private $global_fields = array();
26
 
27
  /**
28
  * Prepare data for MailChimp API request
29
  * @return bool
30
  */
31
  public function prepare() {
32
- $this->guess_fields();
33
- $mapped = $this->map_data();
34
- return $mapped;
 
 
 
 
 
35
  }
36
 
37
  /**
38
  * Try to guess the values of various fields, if not given.
39
  */
40
  protected function guess_fields() {
41
- // add some data to the posted data, like FNAME and LNAME
42
- $this->user_data = MC4WP_Tools::guess_merge_vars( $this->user_data );
43
- }
44
-
45
- /**
46
- * Maps the received data to MailChimp lists
47
- *
48
- * @return array
49
- */
50
- protected function map_data() {
51
-
52
- $mapper = new MC4WP_Field_Mapper( $this->user_data, $this->get_lists() );
53
-
54
- if( $mapper->success ) {
55
- $this->list_fields_map = $mapper->get_list_fields_map();
56
- $this->global_fields = $mapper->get_global_fields();
57
- $this->unmapped_fields = $mapper->get_unmapped_fields();
58
- } else {
59
- $this->message_type = $mapper->get_error_code();
60
- }
61
-
62
- return $mapper->success;
63
  }
64
 
65
  /**
@@ -74,7 +48,7 @@ class MC4WP_Subscribe_Request extends MC4WP_Request {
74
  $email_type = $this->get_email_type();
75
 
76
  // loop through selected lists
77
- foreach ( $this->list_fields_map as $list_id => $list_field_data ) {
78
 
79
  // allow plugins to alter merge vars for each individual list
80
  $list_merge_vars = $this->get_list_merge_vars( $list_id, $list_field_data );
@@ -88,13 +62,8 @@ class MC4WP_Subscribe_Request extends MC4WP_Request {
88
 
89
  // did we succeed in subscribing with the parsed data?
90
  if( ! $result ) {
91
- // don't grab mailchimp error if status code is "already_subscribed"
92
- if( $api->get_error_code() === 214 ) {
93
- $this->message_type = 'already_subscribed';
94
- } else {
95
- $this->message_type = 'error';
96
- $this->mailchimp_error = $api->get_error_message();
97
- }
98
  } else {
99
  $this->message_type = 'subscribed';
100
 
@@ -120,11 +89,11 @@ class MC4WP_Subscribe_Request extends MC4WP_Request {
120
  $merge_vars = array();
121
 
122
  // add OPTIN_IP, we do this here as the user shouldn't be allowed to set this
123
- $merge_vars['OPTIN_IP'] = MC4WP_tools::get_client_ip();
124
 
125
  // make sure MC_LANGUAGE matches the requested format. Useful when getting the language from WPML etc.
126
- if( isset( $this->global_fields['MC_LANGUAGE'] ) ) {
127
- $merge_vars['MC_LANGUAGE'] = strtolower( substr( $this->global_fields['MC_LANGUAGE'], 0, 2 ) );
128
  }
129
 
130
  $merge_vars = array_merge( $merge_vars, $list_field_data );
@@ -137,9 +106,9 @@ class MC4WP_Subscribe_Request extends MC4WP_Request {
137
  *
138
  * Can be used to filter the merge variables sent to a given list
139
  */
140
- $merge_vars = apply_filters( 'mc4wp_merge_vars', $merge_vars, 0, $list_id );
141
 
142
- return (array) $merge_vars;
143
  }
144
 
145
 
@@ -153,14 +122,14 @@ class MC4WP_Subscribe_Request extends MC4WP_Request {
153
  $email_type = 'html';
154
 
155
  // get email type from form
156
- if( isset( $this->user_data['_MC4WP_EMAIL_TYPE'] ) ) {
157
- $email_type = sanitize_text_field( $this->user_data['_MC4WP_EMAIL_TYPE'] );
158
  }
159
 
160
  // allow plugins to override this email type
161
- $email_type = apply_filters( 'mc4wp_email_type', $email_type );
162
 
163
- return (string) $email_type;
164
  }
165
 
166
  }
10
  class MC4WP_Subscribe_Request extends MC4WP_Request {
11
 
12
  /**
13
+ * @var MC4WP_Field_Map
14
  */
15
+ public $map;
 
 
 
 
 
 
 
 
 
 
16
 
17
  /**
18
  * Prepare data for MailChimp API request
19
  * @return bool
20
  */
21
  public function prepare() {
22
+ $this->user_data = $this->guess_fields( $this->user_data );
23
+ $this->map = new MC4WP_Field_Map( $this->user_data, $this->get_lists() );
24
+
25
+ if( ! $this->map->success ) {
26
+ $this->message_type = $this->map->error_code;
27
+ }
28
+
29
+ return $this->map->success;
30
  }
31
 
32
  /**
33
  * Try to guess the values of various fields, if not given.
34
  */
35
  protected function guess_fields() {
36
+ return MC4WP_Tools::guess_merge_vars( $this->user_data );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  }
38
 
39
  /**
48
  $email_type = $this->get_email_type();
49
 
50
  // loop through selected lists
51
+ foreach ( $this->map->list_fields as $list_id => $list_field_data ) {
52
 
53
  // allow plugins to alter merge vars for each individual list
54
  $list_merge_vars = $this->get_list_merge_vars( $list_id, $list_field_data );
62
 
63
  // did we succeed in subscribing with the parsed data?
64
  if( ! $result ) {
65
+ $this->message_type = ( $api->get_error_code() === 214 ) ? 'already_subscribed' : 'error';
66
+ $this->mailchimp_error = $api->get_error_message();
 
 
 
 
 
67
  } else {
68
  $this->message_type = 'subscribed';
69
 
89
  $merge_vars = array();
90
 
91
  // add OPTIN_IP, we do this here as the user shouldn't be allowed to set this
92
+ $merge_vars['OPTIN_IP'] = MC4WP_Tools::get_client_ip();
93
 
94
  // make sure MC_LANGUAGE matches the requested format. Useful when getting the language from WPML etc.
95
+ if( isset( $this->map->global_fields['MC_LANGUAGE'] ) ) {
96
+ $merge_vars['MC_LANGUAGE'] = strtolower( substr( $this->map->global_fields['MC_LANGUAGE'], 0, 2 ) );
97
  }
98
 
99
  $merge_vars = array_merge( $merge_vars, $list_field_data );
106
  *
107
  * Can be used to filter the merge variables sent to a given list
108
  */
109
+ $merge_vars = (array) apply_filters( 'mc4wp_merge_vars', $merge_vars, 0, $list_id );
110
 
111
+ return $merge_vars;
112
  }
113
 
114
 
122
  $email_type = 'html';
123
 
124
  // get email type from form
125
+ if( ! empty( $this->internal_data['email_type'] ) ) {
126
+ $email_type = sanitize_text_field( $this->internal_data['email_type'] );
127
  }
128
 
129
  // allow plugins to override this email type
130
+ $email_type = (string) apply_filters( 'mc4wp_email_type', $email_type );
131
 
132
+ return $email_type;
133
  }
134
 
135
  }
includes/functions/general.php CHANGED
@@ -17,6 +17,7 @@ function mc4wp_get_options( $key = '' ) {
17
  $defaults = array(
18
  'general' => array(
19
  'api_key' => '',
 
20
  ),
21
  'checkbox' => array(
22
  'label' => __( 'Sign me up for the newsletter!', 'mailchimp-for-wp' ),
17
  $defaults = array(
18
  'general' => array(
19
  'api_key' => '',
20
+ 'allow_usage_tracking' => 0,
21
  ),
22
  'checkbox' => array(
23
  'label' => __( 'Sign me up for the newsletter!', 'mailchimp-for-wp' ),
includes/integrations/class-integration.php CHANGED
@@ -183,8 +183,8 @@ abstract class MC4WP_Integration {
183
  $opts = $this->get_options();
184
  $lists = $opts['lists'];
185
 
186
- // get lists from form, if set.
187
- if( isset( $_POST['_mc4wp_lists'] ) && ! empty( $_POST['_mc4wp_lists'] ) ) {
188
 
189
  $lists = $_POST['_mc4wp_lists'];
190
 
@@ -193,13 +193,13 @@ abstract class MC4WP_Integration {
193
 
194
  // sanitize value
195
  $lists = sanitize_text_field( $lists );
196
- $lists = array( $lists );
197
  }
198
 
199
  }
200
 
201
- // allow plugins to filter final
202
- $lists = apply_filters( 'mc4wp_lists', $lists );
203
 
204
  return $lists;
205
  }
@@ -241,7 +241,7 @@ abstract class MC4WP_Integration {
241
 
242
  // set ip address
243
  if( ! isset( $merge_vars['OPTIN_IP'] ) ) {
244
- $merge_vars['OPTIN_IP'] = MC4WP_tools::get_client_ip();
245
  }
246
 
247
  $result = false;
183
  $opts = $this->get_options();
184
  $lists = $opts['lists'];
185
 
186
+ // get lists from request, if set.
187
+ if( ! empty( $_POST['_mc4wp_lists'] ) ) {
188
 
189
  $lists = $_POST['_mc4wp_lists'];
190
 
193
 
194
  // sanitize value
195
  $lists = sanitize_text_field( $lists );
196
+ $lists = array_map( 'trim', explode( ',', $lists ) );
197
  }
198
 
199
  }
200
 
201
+ // allow plugins to filter final lists value
202
+ $lists = (array) apply_filters( 'mc4wp_lists', $lists );
203
 
204
  return $lists;
205
  }
241
 
242
  // set ip address
243
  if( ! isset( $merge_vars['OPTIN_IP'] ) ) {
244
+ $merge_vars['OPTIN_IP'] = MC4WP_Tools::get_client_ip();
245
  }
246
 
247
  $result = false;
includes/views/api-settings.php CHANGED
@@ -42,8 +42,24 @@ if( ! defined( 'MC4WP_LITE_VERSION' ) ) {
42
  </table>
43
 
44
  <?php submit_button(); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  </form>
46
 
 
 
47
  <?php if($connected) { ?>
48
 
49
  <h3 class="mc4wp-title"><?php _e( 'MailChimp Data' ,'mailchimp-for-wp' ); ?></h3>
42
  </table>
43
 
44
  <?php submit_button(); ?>
45
+
46
+ <hr />
47
+
48
+ <h3><?php _e( 'Usage Tracking', 'mailchimp-for-wp' ); ?></h3>
49
+ <p>
50
+ <label>
51
+ <?php /* hidden input field to send `0` when checkbox is not checked */ ?>
52
+ <input type="hidden" name="mc4wp_lite[allow_usage_tracking]" value="0" />
53
+ <input type="checkbox" name="mc4wp_lite[allow_usage_tracking]" value="1" <?php checked( $opts['allow_usage_tracking'], 1 ); ?>> <?php _e( ' Allow us to anonymously track how this plugin is used to help us make it better fit your needs. No sensitive data is tracked.', 'mailchimp-for-wp' ); ?>
54
+ </label>
55
+ </p>
56
+
57
+ <?php submit_button(); ?>
58
+
59
  </form>
60
 
61
+ <hr />
62
+
63
  <?php if($connected) { ?>
64
 
65
  <h3 class="mc4wp-title"><?php _e( 'MailChimp Data' ,'mailchimp-for-wp' ); ?></h3>
includes/views/parts/admin-upgrade-to-pro.php CHANGED
@@ -28,8 +28,11 @@ if( ! defined( 'MC4WP_LITE_VERSION' ) ) {
28
  </li>
29
  </ul>
30
  <p>
31
- <a class="button button-primary button-large" href="https://mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=upgrade-box"><?php _e( 'Upgrade Now', 'mailchimp-for-wp' ); ?></a>
32
- <a class="button" href="https://mc4wp.com/demo/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=upgrade-box"><?php _e( 'View Demo', 'mailchimp-for-wp' ); ?></a>
 
 
 
33
  </p>
34
  </div>
35
  <div class="mc4wp-box" id="mc4wp-optin-box">
28
  </li>
29
  </ul>
30
  <p>
31
+ <a class="button button-primary button-large mc4wp-upgrade-button" href="https://mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=upgrade-box"><?php _e( 'Show me more', 'mailchimp-for-wp' ); ?></a>
32
+ <a class="" href="https://mc4wp.com/demo/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=upgrade-box"><?php _e( 'View Demo', 'mailchimp-for-wp' ); ?></a>
33
+ </p>
34
+ <p style="text-align: center; margin-bottom: 0;">
35
+ <small><?php _e( 'You can <strong>try with absolutely 0 risk</strong> using our refund policy.', 'mailchimp-for-wp' ); ?></small>
36
  </p>
37
  </div>
38
  <div class="mc4wp-box" id="mc4wp-optin-box">
includes/views/parts/form-enhancements.js CHANGED
@@ -6,7 +6,7 @@
6
  }
7
 
8
  function maybePrefixUrlField() {
9
- if(this.value.indexOf('http') !== 0) {
10
  this.value = "http://" + this.value;
11
  }
12
  }
@@ -17,7 +17,7 @@
17
 
18
  /* add class on submit */
19
  var b = f.querySelector('[type="submit"], [type="image"]');
20
- if(b.length > 0 ) {
21
  if(b.addEventListener) {
22
  b.addEventListener('click', addSubmittedClassToFormContainer);
23
  } else {
@@ -27,7 +27,7 @@
27
 
28
  /* better URL fields */
29
  var urlFields = f.querySelectorAll('input[type="url"]');
30
- if( urlFields.length ) {
31
  for( var j=0; j < urlFields.length; j++ ) {
32
  if(urlFields[j].addEventListener) {
33
  urlFields[j].addEventListener('blur', maybePrefixUrlField);
6
  }
7
 
8
  function maybePrefixUrlField() {
9
+ if(this.value.trim() !== '' && this.value.indexOf('http') !== 0) {
10
  this.value = "http://" + this.value;
11
  }
12
  }
17
 
18
  /* add class on submit */
19
  var b = f.querySelector('[type="submit"], [type="image"]');
20
+ if( b ) {
21
  if(b.addEventListener) {
22
  b.addEventListener('click', addSubmittedClassToFormContainer);
23
  } else {
27
 
28
  /* better URL fields */
29
  var urlFields = f.querySelectorAll('input[type="url"]');
30
+ if( urlFields && urlFields.length > 0 ) {
31
  for( var j=0; j < urlFields.length; j++ ) {
32
  if(urlFields[j].addEventListener) {
33
  urlFields[j].addEventListener('blur', maybePrefixUrlField);
languages/mailchimp-for-wp-ca_ES.mo CHANGED
Binary file
languages/mailchimp-for-wp-ca_ES.po CHANGED
@@ -7,7 +7,7 @@ msgstr ""
7
  "Project-Id-Version: MailChimp for WordPress\n"
8
  "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/mailchimp-for-wp\n"
9
  "POT-Creation-Date: 2015-05-26 14:41:46+00:00\n"
10
- "PO-Revision-Date: 2015-09-25 18:43+0000\n"
11
  "Last-Translator: Xavier Gimeno Torrent\n"
12
  "Language-Team: Catalan (Spain) (http://www.transifex.com/ibericode/mailchimp-for-wordpress/language/ca_ES/)\n"
13
  "MIME-Version: 1.0\n"
@@ -61,7 +61,7 @@ msgstr "Caselles de verificació"
61
  #: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:512
62
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:91
63
  msgid "Form Settings"
64
- msgstr "Propietats del formulari"
65
 
66
  #: mailchimp-for-wordpress/includes/admin/class-admin.php:192
67
  #: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:513
@@ -72,7 +72,7 @@ msgstr "Formularis"
72
  #: mailchimp-for-wordpress/includes/admin/class-admin.php:196
73
  #: mailchimp-for-wordpress/includes/admin/class-admin.php:197
74
  msgid "Upgrade to Pro"
75
- msgstr "Actualitza't a Pro"
76
 
77
  #: mailchimp-for-wordpress/includes/admin/class-admin.php:283
78
  msgid "This option is only available in MailChimp for WordPress Pro."
@@ -160,7 +160,7 @@ msgstr "Verificació de %s"
160
  msgid ""
161
  "The plugin can only fetch a maximum of 100 lists from MailChimp, only your "
162
  "first 100 lists are shown."
163
- msgstr "Aquest plugin pot obtenir un màxim de 100 llistes de Mailchimp. Només es mostren les teves 100 primeres llistes."
164
 
165
  #: mailchimp-for-wordpress/includes/admin/class-admin.php:370
166
  #: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:719
@@ -194,7 +194,7 @@ msgstr "Títol:"
194
  msgid ""
195
  "You can edit your sign-up form in the <a href=\"%s\">MailChimp for WordPress"
196
  " form settings</a>."
197
- msgstr "Pots editar el teu formulari de subscripció a la <a href=\"%s\"> configuració dels formularis de MailChimp per a Wordpress </a>."
198
 
199
  #: mailchimp-for-wordpress/includes/functions/general.php:15
200
  #: mailchimp-for-wordpress-pro/includes/class-mailchimp.php:135
@@ -223,7 +223,7 @@ msgstr "Subscriu-me a la llista de correu!"
223
  msgid ""
224
  "Thank you, your sign-up request was successful! Please check your e-mail "
225
  "inbox."
226
- msgstr "Gràcies, la teva sol·licitud de subscripció s'ha completat! Sisplau, vés a la safata d'entrada del teu correu electrònic."
227
 
228
  #: mailchimp-for-wordpress/includes/functions/general.php:45
229
  #: mailchimp-for-wordpress-pro/includes/config/default-options.php:35
@@ -238,7 +238,7 @@ msgstr "Sisplau, introdueix una adreça de correu electrònic vàlida."
238
  #: mailchimp-for-wordpress/includes/functions/general.php:47
239
  #: mailchimp-for-wordpress-pro/includes/config/default-options.php:37
240
  msgid "Given email address is already subscribed, thank you!"
241
- msgstr "Gràcies, però l'adreça de correu electrònic facilitada ja aquesta subscrita."
242
 
243
  #: mailchimp-for-wordpress/includes/functions/general.php:48
244
  #: mailchimp-for-wordpress-pro/includes/config/default-options.php:38
@@ -253,7 +253,7 @@ msgstr "Sisplau omple els camps sol·licitats."
253
  #: mailchimp-for-wordpress/includes/functions/general.php:50
254
  #: mailchimp-for-wordpress-pro/includes/config/default-options.php:40
255
  msgid "You were successfully unsubscribed."
256
- msgstr "Has estat esborrat correctament."
257
 
258
  #: mailchimp-for-wordpress/includes/functions/general.php:51
259
  #: mailchimp-for-wordpress-pro/includes/config/default-options.php:41
@@ -342,7 +342,7 @@ msgstr "MailChimp per a WordPress - Error"
342
  msgid ""
343
  "Please select a list to subscribe to in the <a href=\"%s\">checkbox "
344
  "settings</a>."
345
- msgstr "Sisplau selecciona una llista de subscripció a la <a href=\"%s\"> configuració de caselles de verificació </a>."
346
 
347
  #: mailchimp-for-wordpress/includes/integrations/class-integration.php:237
348
  #: mailchimp-for-wordpress/includes/integrations/class-integration.php:308
@@ -356,7 +356,7 @@ msgstr "Aquest missatge només és visible als administradors per a fins de corr
356
  msgid ""
357
  "The MailChimp server returned the following error message as a response to "
358
  "our sign-up request:"
359
- msgstr "El servidor de MailChimp retorna el següent missatge d'error com a resposta a la teva sol·licitud de subscripció:"
360
 
361
  #: mailchimp-for-wordpress/includes/integrations/class-integration.php:303
362
  #: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:303
@@ -425,7 +425,7 @@ msgid ""
425
  "The table below shows your MailChimp lists data. If you applied changes to "
426
  "your MailChimp lists, please use the following button to renew your cached "
427
  "data."
428
- msgstr "La següent taula mostra les dades de les teves llistes de MailChimp. Si has efectuat algun canvi en les llistes de MailChimp, sisplau utilitza el botó següent per renovar les seves dades a la memòria cau."
429
 
430
  #: mailchimp-for-wordpress/includes/views/api-settings.php:54
431
  #: mailchimp-for-wordpress/includes/views/api-settings.php:125
@@ -436,7 +436,7 @@ msgstr "Actualitzar les llistes de MailChimp"
436
 
437
  #: mailchimp-for-wordpress/includes/views/api-settings.php:112
438
  msgid "No lists were found in your MailChimp account"
439
- msgstr "No s'ha trobat cap llista al seu compte de MailChimp"
440
 
441
  #: mailchimp-for-wordpress/includes/views/checkbox-settings.php:16
442
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:14
@@ -448,14 +448,14 @@ msgstr "Per emprar caselles de verificació en el registre, selecciona com a mí
448
  #: mailchimp-for-wordpress/includes/views/checkbox-settings.php:21
449
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:21
450
  msgid "MailChimp settings for checkboxes"
451
- msgstr "Ajustos de MailChimp per a caselles de verificació"
452
 
453
  #: mailchimp-for-wordpress/includes/views/checkbox-settings.php:25
454
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:26
455
  msgid ""
456
  "If you want to use sign-up checkboxes, select at least one MailChimp list to"
457
  " subscribe people to."
458
- msgstr "Si vols emprar caselles de verificació en el registre, selecciona com a mínim una llista de MailChimp a què subscriure't."
459
 
460
  #: mailchimp-for-wordpress/includes/views/checkbox-settings.php:31
461
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:34
@@ -467,7 +467,7 @@ msgstr "Llistes de MailChimp"
467
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:17
468
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:38
469
  msgid "No lists found, <a href=\"%s\">are you connected to MailChimp</a>?"
470
- msgstr "No s'han trobat llistes, ¿<a href=\"%s\"> estàs connectat a MailChimp </a>?"
471
 
472
  #: mailchimp-for-wordpress/includes/views/checkbox-settings.php:42
473
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:45
@@ -507,7 +507,7 @@ msgstr "Afegir caselles de verificació en aquests formularis"
507
  #: mailchimp-for-wordpress/includes/views/checkbox-settings.php:79
508
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:92
509
  msgid "Selecting a form will automatically add the sign-up checkbox to it."
510
- msgstr "Al seleccionar un formulari s'afegirà automàticament la casella de verificació d'alta a aquest."
511
 
512
  #: mailchimp-for-wordpress/includes/views/checkbox-settings.php:83
513
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:105
@@ -554,7 +554,7 @@ msgstr "Després de la informació extra"
554
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:129
555
  msgid ""
556
  "Choose the position for the checkbox in your WooCommerce checkout form."
557
- msgstr "Escull la posició de les caselles de verificació en el seu formulari de pagament de WooCommerce."
558
 
559
  #: mailchimp-for-wordpress/includes/views/form-settings.php:15
560
  msgid ""
@@ -625,7 +625,7 @@ msgstr "Si vols carregar els fulls d'estils CSS per defecte, selecciona \"Estils
625
  #: mailchimp-for-wordpress/includes/views/form-settings.php:45
626
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:14
627
  msgid "Lists this form subscribes to"
628
- msgstr "Les llistes d'aquest formulari et subscriuen a"
629
 
630
  #: mailchimp-for-wordpress/includes/views/form-settings.php:63
631
  msgid ""
@@ -862,7 +862,7 @@ msgstr "Pots afegir regles CSS al full d'estils del teu tema emprant l'<a href=\
862
  msgid ""
863
  "The <a href=\"%s\" target=\"_blank\">plugin FAQ</a> lists the various CSS "
864
  "selectors you can use to target the different form elements."
865
- msgstr "A les <a href=\"%s\" target=\"_blank\"> preguntes més freqüents del plugin</a> hi ha una llista dels diversos selectors CSS que pots emprar per modificar els diferents elements del formulari."
866
 
867
  #: mailchimp-for-wordpress/includes/views/form-settings.php:270
868
  msgid ""
@@ -933,7 +933,7 @@ msgstr "Es substitueix per l'hora actual (hh:mm:ss per exemple: %s)"
933
  msgid ""
934
  "Replaced with the logged in user's email (or nothing, if there is no logged "
935
  "in user)"
936
- msgstr "Es substitueix per l'adreça de correu electrònic de l'usuari que ha iniciat sessió (o per res, si cap usuari ha iniciat sessió)"
937
 
938
  #: mailchimp-for-wordpress/includes/views/form-settings.php:320
939
  #: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:54
@@ -967,7 +967,7 @@ msgstr "Afegir un nou camp"
967
 
968
  #: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:12
969
  msgid "Use the tool below to generate the HTML for your form fields."
970
- msgstr "Utilitza la següent eina per a generar el codi HTML per al teu formulari."
971
 
972
  #: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:15
973
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:35
@@ -976,7 +976,7 @@ msgstr "Selecciona el camp de MailChimp ..."
976
 
977
  #: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:19
978
  msgid "Submit Button"
979
- msgstr "Botón de alta"
980
 
981
  #: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:20
982
  msgid "Subscribe / unsubscribe choice"
@@ -995,7 +995,7 @@ msgstr "Etiqueta"
995
  #: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:34
996
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:54
997
  msgid "Placeholder"
998
- msgstr "Marcador de posició"
999
 
1000
  #: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:44
1001
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:64
@@ -1086,7 +1086,7 @@ msgstr "Valora el plugin al teu bloc i enllaça'ns a <a href=\"%s\">la pàgina d
1086
 
1087
  #: mailchimp-for-wordpress/includes/views/parts/admin-need-support.php:19
1088
  msgid "There is an <a href=\"%s\">affiliate program</a> as well."
1089
- msgstr "També tenim un <a href=\"%s\">programa d'afiliats </a>."
1090
 
1091
  #: mailchimp-for-wordpress/includes/views/parts/admin-need-support.php:20
1092
  msgid "Vote \"works\" on the WordPress.org plugin page"
@@ -1168,7 +1168,7 @@ msgstr "Formulari guardat."
1168
 
1169
  #: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:365
1170
  msgid "Optional Settings"
1171
- msgstr "Propietats Opcionals"
1172
 
1173
  #: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:500
1174
  msgid "MailChimp & Plugin License Settings"
@@ -1194,7 +1194,7 @@ msgstr "Sisplau, assegura't que el plugin està connectat a MailChimp. <a href=\
1194
  msgid ""
1195
  "You disabled logging using the %s filter. Re-enable it to use the Reports "
1196
  "page."
1197
- msgstr "Has deshabilitat l'entrada utilitzant el filtre %s. Si vols fer servir la pàgina d'informes, l'hauràs de re-habilitar."
1198
 
1199
  #: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:840
1200
  msgid ""
@@ -1211,7 +1211,7 @@ msgstr "La data final no pot ser anterior a la data inicial"
1211
  msgid ""
1212
  "Couldn't create the stylesheet. Manually add the generated CSS to your theme"
1213
  " stylesheet or use a plugin like <em>%s</em>."
1214
- msgstr "No s'ha pogut crear el full d'estils. Afegeix manualment el CSS generat al full d'estil del teu tema o fes servir plugins com ara <em>%s</em>."
1215
 
1216
  #: mailchimp-for-wordpress-pro/includes/admin/class-styles-builder.php:437
1217
  msgid "%sShow generated CSS%s"
@@ -1223,13 +1223,13 @@ msgstr "S'ha creat el %full d'estils CSS%s."
1223
 
1224
  #: mailchimp-for-wordpress-pro/includes/class-form-manager.php:263
1225
  msgid "<strong>Error:</strong> Please specify a form ID. Example: %s."
1226
- msgstr "<strong>Error:</ strong> Sisplau, especifica un identificador de formulari. Exemple: %s."
1227
 
1228
  #: mailchimp-for-wordpress-pro/includes/class-form-manager.php:278
1229
  msgid ""
1230
  "<strong>Error:</strong> Sign-up form not found. Please check if you used the"
1231
  " correct form ID."
1232
- msgstr "<strong>Error:</ strong> formulari de registre no trobat. Sisplau, comprova si has utilitzat l'identificador de formulari correcte."
1233
 
1234
  #: mailchimp-for-wordpress-pro/includes/class-mailchimp.php:140
1235
  msgid "IP Address"
@@ -1273,13 +1273,13 @@ msgstr "Formulari MailChimp per a WordPress"
1273
 
1274
  #: mailchimp-for-wordpress-pro/includes/class-widget.php:21
1275
  msgid "Displays one of your MailChimp for WordPress sign-up forms"
1276
- msgstr "Mostra un dels teus formularis MailChimp per a WordPress"
1277
 
1278
  #: mailchimp-for-wordpress-pro/includes/class-widget.php:43
1279
  msgid ""
1280
  "Please select the sign-up form you'd like to show here in the <a "
1281
  "href=\"%s\">widget settings</a>."
1282
- msgstr "Selecciona el formulari de registre que vols mostrar aquí a la <a href=\"%s\"> configuració de ginys </ a>."
1283
 
1284
  #: mailchimp-for-wordpress-pro/includes/class-widget.php:86
1285
  msgid "Form:"
@@ -1291,7 +1291,7 @@ msgstr "Selecciona el formulari a mostrar"
1291
 
1292
  #: mailchimp-for-wordpress-pro/includes/class-widget.php:96
1293
  msgid "You don't have any sign-up forms. <a href=\"%s\">Create one now.</a>"
1294
- msgstr "No tens cap formulari de registre. <a href=\"%s\"> Crea'n un ara.</a>"
1295
 
1296
  #: mailchimp-for-wordpress-pro/includes/config/default-options.php:34
1297
  msgid ""
@@ -1337,11 +1337,11 @@ msgstr "Has arribat al límit de les teves activacions. Has de <a href=\"%s\">re
1337
  msgid ""
1338
  "Your license has expired. You must <a href=\"%s\">renew your license</a> if "
1339
  "you want to use it again."
1340
- msgstr "La teva llicència ha caducat. Has de <a href=\"%s\">renovar la teva llicència</a> si la vols tornar a usar."
1341
 
1342
  #: mailchimp-for-wordpress-pro/includes/license/class-license-manager.php:232
1343
  msgid "Failed to activate your license, your license key seems to be invalid."
1344
- msgstr "No s'ha pogut activar la llicència, la clau de llicència sembla que no és vàlida."
1345
 
1346
  #: mailchimp-for-wordpress-pro/includes/license/class-license-manager.php:257
1347
  msgid "Your %s license has been deactivated."
@@ -1371,7 +1371,7 @@ msgstr "%s: Configuració de llicència"
1371
  msgid ""
1372
  "%s is network activated, please contact your site administrator to manage "
1373
  "the license."
1374
- msgstr "%s si la xarxa està activada, sisplau contacta amb l'administrador del lloc per gestionar la llicència."
1375
 
1376
  #: mailchimp-for-wordpress-pro/includes/license/class-update-manager.php:64
1377
  msgid ""
@@ -1506,89 +1506,89 @@ msgstr "Data"
1506
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:79
1507
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:153
1508
  msgid "Success"
1509
- msgstr ""
1510
 
1511
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:80
1512
  msgid "Type"
1513
- msgstr ""
1514
 
1515
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:81
1516
  msgid "Source"
1517
- msgstr ""
1518
 
1519
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:82
1520
  msgid "Subscribed"
1521
- msgstr ""
1522
 
1523
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:150
1524
  msgid "Log items deleted."
1525
- msgstr ""
1526
 
1527
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:324
1528
  msgid "Registration"
1529
- msgstr ""
1530
 
1531
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:333
1532
  msgid "Top Bar"
1533
- msgstr ""
1534
 
1535
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:341
1536
  msgid "MultiSite registration"
1537
- msgstr ""
1538
 
1539
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:354
1540
  msgid "Contact Form 7"
1541
- msgstr ""
1542
 
1543
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:358
1544
  msgid "bbPress: New Topic"
1545
- msgstr ""
1546
 
1547
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:362
1548
  msgid "bbPress: New Reply"
1549
- msgstr ""
1550
 
1551
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:368
1552
  msgid "Other Form"
1553
- msgstr ""
1554
 
1555
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:434
1556
  msgid "No subscribe requests found."
1557
- msgstr ""
1558
 
1559
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:456
1560
  msgid "All"
1561
- msgstr ""
1562
 
1563
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:468
1564
  msgid "Checkbox"
1565
- msgstr ""
1566
 
1567
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:529
1568
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:543
1569
  msgid "Order"
1570
- msgstr ""
1571
 
1572
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:532
1573
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:546
1574
  msgid "Checkout"
1575
- msgstr ""
1576
 
1577
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:558
1578
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:565
1579
  msgid "Comment"
1580
- msgstr ""
1581
 
1582
  #: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:558
1583
  msgid "deleted"
1584
- msgstr ""
1585
 
1586
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:8
1587
  msgid ""
1588
  "Any settings you specify here will override the <a href=\"%s\">general form "
1589
  "settings</a>. If no setting is specified, the corresponding general setting "
1590
  "value will be used."
1591
- msgstr ""
1592
 
1593
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:25
1594
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:45
@@ -1597,503 +1597,503 @@ msgstr ""
1597
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:106
1598
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:124
1599
  msgid "Inherit"
1600
- msgstr ""
1601
 
1602
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:137
1603
  msgid "Send an email copy of the form data?"
1604
- msgstr ""
1605
 
1606
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:141
1607
  msgid ""
1608
  "Tick \"yes\" if you want to receive an email with the form data for every "
1609
  "sign-up request."
1610
- msgstr ""
1611
 
1612
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:144
1613
  msgid "Send the copy to this email:"
1614
- msgstr ""
1615
 
1616
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:150
1617
  msgid "Messages"
1618
- msgstr ""
1619
 
1620
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:190
1621
  msgid "Other errors"
1622
- msgstr ""
1623
 
1624
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:39
1625
  msgid "Submit button"
1626
- msgstr ""
1627
 
1628
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:41
1629
  msgid "Subscribe / unsubscribe action"
1630
- msgstr ""
1631
 
1632
  #: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:90
1633
  msgid "Form usage"
1634
- msgstr ""
1635
 
1636
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:78
1637
  msgid ""
1638
  "Select \"yes\" if you want to update existing subscribers with the data that"
1639
  " is sent."
1640
- msgstr ""
1641
 
1642
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:100
1643
  msgid ""
1644
  "Use %s in your Contact Form 7 mark-up to add a sign-up checkbox to your CF7 "
1645
  "forms."
1646
- msgstr ""
1647
 
1648
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:136
1649
  msgid "Custom label texts"
1650
- msgstr ""
1651
 
1652
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:137
1653
  msgid ""
1654
  "Override the default checkbox label text for any given checkbox using the "
1655
  "fields below."
1656
- msgstr ""
1657
 
1658
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-form-settings.php:13
1659
  msgid "Forms & Settings"
1660
- msgstr ""
1661
 
1662
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-form-settings.php:14
1663
  msgid "CSS Styles Builder"
1664
- msgstr ""
1665
 
1666
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:10
1667
  msgid "License & API Settings"
1668
- msgstr ""
1669
 
1670
  #: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:113
1671
  msgid "No lists were found in your MailChimp account."
1672
- msgstr ""
1673
 
1674
  #: mailchimp-for-wordpress-pro/includes/views/parts/admin-footer.php:10
1675
  msgid ""
1676
  "Need help? Have a look at the <a href=\"%s\">plugin documentation</a> or "
1677
  "email us directly at <a href=\"%s\">support@mc4wp.com</a>."
1678
- msgstr ""
1679
 
1680
  #: mailchimp-for-wordpress-pro/includes/views/parts/admin-footer.php:11
1681
  msgid ""
1682
  "Please use the same email address as you used when purchasing the plugin."
1683
- msgstr ""
1684
 
1685
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:11
1686
  msgid "Use the fields below to create custom styling rules for your forms."
1687
- msgstr ""
1688
 
1689
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:16
1690
  msgid ""
1691
  "Tip: have a look at our <a href=\"%s\">knowledge base</a> articles on <a "
1692
  "href=\"%s\">creating an inline form</a> or <a href=\"%s\">styling your "
1693
  "form</a> in general."
1694
- msgstr ""
1695
 
1696
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:22
1697
  msgid ""
1698
  "You are not loading your custom stylesheet at this moment. To apply these "
1699
  "styles on your site, select \"load custom form styles\" in the <a "
1700
  "href=\"%s\">MailChimp for WordPress form settings</a>."
1701
- msgstr ""
1702
 
1703
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:30
1704
  msgid "Select form to build styles for:"
1705
- msgstr ""
1706
 
1707
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:41
1708
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:285
1709
  msgid "Create at least one form first."
1710
- msgstr ""
1711
 
1712
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:57
1713
  msgid "You need to have JavaScript enabled to see a preview of your form."
1714
- msgstr ""
1715
 
1716
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:62
1717
  msgid "Form container style"
1718
- msgstr ""
1719
 
1720
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:66
1721
  msgid "Form width"
1722
- msgstr ""
1723
 
1724
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:66
1725
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:118
1726
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:160
1727
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:202
1728
  msgid "px or %"
1729
- msgstr ""
1730
 
1731
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:70
1732
  msgid "Text alignment"
1733
- msgstr ""
1734
 
1735
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:73
1736
  msgid "Choose alignment"
1737
- msgstr ""
1738
 
1739
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:74
1740
  msgid "Left"
1741
- msgstr ""
1742
 
1743
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:75
1744
  msgid "Center"
1745
- msgstr ""
1746
 
1747
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:76
1748
  msgid "Right"
1749
- msgstr ""
1750
 
1751
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:81
1752
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:210
1753
  msgid "Background color"
1754
- msgstr ""
1755
 
1756
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:83
1757
  msgid "Padding"
1758
- msgstr ""
1759
 
1760
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:89
1761
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:168
1762
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:219
1763
  msgid "Border color"
1764
- msgstr ""
1765
 
1766
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:91
1767
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:170
1768
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:215
1769
  msgid "Border width"
1770
- msgstr ""
1771
 
1772
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:95
1773
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:126
1774
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:228
1775
  msgid "Text color"
1776
- msgstr ""
1777
 
1778
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:97
1779
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:128
1780
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:230
1781
  msgid "Text size"
1782
- msgstr ""
1783
 
1784
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:101
1785
  msgid "Background image"
1786
- msgstr ""
1787
 
1788
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:114
1789
  msgid "Label styles"
1790
- msgstr ""
1791
 
1792
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:118
1793
  msgid "Label width"
1794
- msgstr ""
1795
 
1796
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:132
1797
  msgid "Text style"
1798
- msgstr ""
1799
 
1800
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:135
1801
  msgid "Choose text style.."
1802
- msgstr ""
1803
 
1804
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:136
1805
  msgid "Normal"
1806
- msgstr ""
1807
 
1808
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:137
1809
  msgid "Bold"
1810
- msgstr ""
1811
 
1812
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:138
1813
  msgid "Italic"
1814
- msgstr ""
1815
 
1816
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:139
1817
  msgid "Bold & Italic"
1818
- msgstr ""
1819
 
1820
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:142
1821
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:174
1822
  msgid "Display"
1823
- msgstr ""
1824
 
1825
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:146
1826
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:178
1827
  msgid "Inline"
1828
- msgstr ""
1829
 
1830
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:147
1831
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:179
1832
  msgid "New line"
1833
- msgstr ""
1834
 
1835
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:156
1836
  msgid "Field styles"
1837
- msgstr ""
1838
 
1839
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:160
1840
  msgid "Field width"
1841
- msgstr ""
1842
 
1843
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:164
1844
  msgid "Field height"
1845
- msgstr ""
1846
 
1847
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:182
1848
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:224
1849
  msgid "Border radius"
1850
- msgstr ""
1851
 
1852
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:186
1853
  msgid "Focus outline"
1854
- msgstr ""
1855
 
1856
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:198
1857
  msgid "Button styles"
1858
- msgstr ""
1859
 
1860
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:202
1861
  msgid "Button width"
1862
- msgstr ""
1863
 
1864
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:206
1865
  msgid "Button height"
1866
- msgstr ""
1867
 
1868
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:238
1869
  msgid "Error and success messages"
1870
- msgstr ""
1871
 
1872
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:242
1873
  msgid "Success text color"
1874
- msgstr ""
1875
 
1876
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:244
1877
  msgid "Error text color"
1878
- msgstr ""
1879
 
1880
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:252
1881
  msgid "Advanced"
1882
- msgstr ""
1883
 
1884
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:256
1885
  msgid "CSS Selector Prefix"
1886
- msgstr ""
1887
 
1888
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:258
1889
  msgid ""
1890
  "Use this to create a more specific (and thus more \"important\") CSS "
1891
  "selector."
1892
- msgstr ""
1893
 
1894
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:261
1895
  msgid "Manual CSS"
1896
- msgstr ""
1897
 
1898
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:261
1899
  msgid ""
1900
  "The CSS rules you enter here will be appended to the custom stylesheet."
1901
- msgstr ""
1902
 
1903
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:269
1904
  msgid "Copy styles from other form"
1905
- msgstr ""
1906
 
1907
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:283
1908
  msgid "Copy Styles"
1909
- msgstr ""
1910
 
1911
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:283
1912
  msgid ""
1913
  "Are you sure you want to copy form styles from another form? This will "
1914
  "overwrite current styles for this form."
1915
- msgstr ""
1916
 
1917
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:298
1918
  msgid "Are you sure you want to delete all custom styles for this form?"
1919
- msgstr ""
1920
 
1921
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:298
1922
  msgid "Delete Form Styles"
1923
- msgstr ""
1924
 
1925
  #: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:305
1926
  msgid "Form preview"
1927
- msgstr ""
1928
 
1929
  #: mailchimp-for-wo