Version Description
- Added: Ability for site owners to multiple lists for users to choose which to sign up for.
- Fixed: Issues around enabling list signup on user registration.
- Fixed: Unintended markup in email notification text.
- Fixed: Inappropriate or unneeded markup around hidden fields.
- Updated: Max length values for first/last name fields.
- Updated: Deprecated some functions in order to get consistent naming across all our code.
Download this release
Release Info
Developer | constantcontact |
Plugin | Constant Contact Forms |
Version | 1.9.0 |
Comparing to | |
See all releases |
Code changes from version 1.8.8 to 1.9.0
- assets/css/admin-style.css +10 -0
- assets/css/style.css +16 -1
- assets/css/style.min.css +2 -2
- assets/images/check_circle.svg +0 -0
- assets/images/error.svg +0 -0
- assets/js/ctct-plugin-admin.js +1 -1
- assets/js/ctct-plugin-admin.min.js +1 -1
- assets/js/ctct-plugin-admin.min.js.map +1 -1
- assets/js/ctct-plugin-admin/optins.js +1 -1
- assets/sass/_admin-forms.scss +17 -0
- assets/sass/_forms.scss +13 -0
- assets/sass/_inputs.scss +4 -0
- assets/sass/_variables.scss +1 -0
- constant-contact-forms.php +12 -10
- includes/class-admin.php +21 -10
- includes/class-api.php +71 -49
- includes/class-builder-fields.php +6 -8
- includes/class-check.php +3 -0
- includes/class-connect.php +5 -5
- includes/class-cpts.php +17 -4
- includes/class-display-shortcode.php +1 -1
- includes/class-display.php +199 -73
- includes/class-gutenberg.php +1 -1
- includes/class-lists.php +47 -12
- includes/class-logging.php +9 -3
- includes/class-mail.php +26 -24
- includes/class-middleware.php +15 -8
- includes/class-notification-content.php +4 -4
- includes/class-notifications.php +1 -1
- includes/class-process-form.php +136 -49
- includes/class-recaptcha-v2.php +12 -2
- includes/class-recaptcha-v3.php +2 -0
- includes/class-recaptcha.php +7 -5
- includes/class-settings.php +97 -40
- includes/class-shortcode.php +1 -0
- includes/class-uninstall.php +39 -3
- includes/class-user-customizations.php +1 -1
- includes/compatibility.php +1 -1
- includes/deprecated.php +60 -0
- includes/helper-functions.php +26 -25
- includes/widgets/contact-form-select.php +8 -6
- languages/constant-contact-forms.pot +235 -208
- readme.txt +10 -2
- vendor/constantcontact/constantcontact/.gitignore +0 -25
- vendor/defuse/php-encryption/.gitignore +0 -11
- vendor/google/recaptcha/.gitignore +0 -7
- vendor/guzzlehttp/ringphp/.gitignore +0 -4
- vendor/guzzlehttp/streams/.gitignore +0 -6
- vendor/psr/log/.gitignore +0 -1
- vendor/react/promise/.gitignore +0 -5
assets/css/admin-style.css
CHANGED
@@ -522,6 +522,16 @@ body.post-type-ctct_forms #titlediv #title {
|
|
522 |
display: none;
|
523 |
}
|
524 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
525 |
.ui-dialog .cmb-type-checkbox.cmb2-id--ctct-show-title .cmb-th {
|
526 |
width: 90px;
|
527 |
}
|
522 |
display: none;
|
523 |
}
|
524 |
|
525 |
+
.cmb2-id--ctct-list .cmb2-list {
|
526 |
+
background: linear-gradient(#fff 33%, transparent), linear-gradient(transparent, #fff 66%) 0 100%, radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.5), transparent), radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.5), transparent) 0 100%;
|
527 |
+
background-attachment: local, local, scroll, scroll;
|
528 |
+
background-color: #fff;
|
529 |
+
background-repeat: no-repeat;
|
530 |
+
background-size: 100% 30px, 100% 30px, 100% 10px, 100% 10px;
|
531 |
+
max-height: 10rem;
|
532 |
+
overflow-y: auto;
|
533 |
+
}
|
534 |
+
|
535 |
.ui-dialog .cmb-type-checkbox.cmb2-id--ctct-show-title .cmb-th {
|
536 |
width: 90px;
|
537 |
}
|
assets/css/style.css
CHANGED
@@ -86,6 +86,11 @@
|
|
86 |
width: 75%;
|
87 |
}
|
88 |
|
|
|
|
|
|
|
|
|
|
|
89 |
.ctct-form-wrapper span.ctct-label-right {
|
90 |
display: inline-block;
|
91 |
width: 20%;
|
@@ -156,6 +161,16 @@
|
|
156 |
cursor: pointer;
|
157 |
}
|
158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
.ctct-twentyfourteen .ctct-form-field input {
|
160 |
width: 100%;
|
161 |
}
|
@@ -187,4 +202,4 @@
|
|
187 |
}
|
188 |
}
|
189 |
|
190 |
-
/*# sourceMappingURL=data:application/json;charset=utf8;base64,
|
86 |
width: 75%;
|
87 |
}
|
88 |
|
89 |
+
.ctct-form-wrapper input.ctct-label-right[type="checkbox"],
|
90 |
+
.ctct-form-wrapper textarea.ctct-label-right[type="checkbox"] {
|
91 |
+
width: auto;
|
92 |
+
}
|
93 |
+
|
94 |
.ctct-form-wrapper span.ctct-label-right {
|
95 |
display: inline-block;
|
96 |
width: 20%;
|
161 |
cursor: pointer;
|
162 |
}
|
163 |
|
164 |
+
.ctct-form-wrapper .ctct-form-field-checkbox fieldset {
|
165 |
+
border: none;
|
166 |
+
padding: 0;
|
167 |
+
}
|
168 |
+
|
169 |
+
.ctct-form-wrapper .ctct-form-field-checkbox fieldset legend {
|
170 |
+
font-weight: normal;
|
171 |
+
padding: 0;
|
172 |
+
}
|
173 |
+
|
174 |
.ctct-twentyfourteen .ctct-form-field input {
|
175 |
width: 100%;
|
176 |
}
|
202 |
}
|
203 |
}
|
204 |
|
205 |
+
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMscUJBQXFCO0VBQ3JCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMscUJBQXFCO0VBQ3JCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsWUFBWTtFQUNaLGNBQWM7RUFDZCxxQkFBcUI7RUFDckIscUJBQXFCO0FBQ3ZCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCOztBQW1DQTtFQUNFLG1EQUFtRDtFQUNuRCw0QkFBNEI7RUFDNUIsNEJBQTRCO0VBQzVCLHFCQUFxQjtFQUNyQixxQkFBcUI7RUFDckIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UscURBQXFEO0VBQ3JELHlDQUF5QztFQUN6Qyw0QkFBNEI7RUFDNUIscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUNyQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UscURBQXFEO0VBQ3JELHlDQUF5QztFQUN6Qyw0QkFBNEI7RUFDNUIscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUNyQixrQkFBa0I7QUFDcEI7O0FBRUE7O0VBRUUscUJBQXFCO0VBQ3JCLFVBQVU7QUFDWjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQixnQkFBZ0I7RUFDaEIsVUFBVTtBQUNaOztBQUVBOztFQUVFLHFCQUFxQjtFQUNyQixnQkFBZ0I7RUFDaEIsVUFBVTtBQUNaOztBQUVBOztFQUVFLFdBQVc7QUFDYjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSx3QkFBd0I7RUFDeEIsNkJBQTZCO0VBQzdCLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFLGNBQWM7RUFDZCxzQkFBc0I7RUFDdEIsV0FBVztFQUNYLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsVUFBVTtFQUNWLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSwrQ0FBK0M7RUFDL0MsMkJBQTJCO0VBQzNCLDRCQUE0QjtFQUM1QixrQkFBa0I7RUFDbEIsWUFBWTtFQUNaLFlBQVk7QUFDZDs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxXQUFXO0VBQ1gsY0FBYztBQUNoQjs7QUFFQTs7RUFFRSxjQUFjO0FBQ2hCOztBQUVBOztFQUVFLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLFlBQVk7RUFDWixjQUFjO0VBQ2QsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsV0FBVztFQUNYLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsWUFBWTtFQUNaLFVBQVU7QUFDWjs7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxXQUFXO0FBQ2I7O0FBM0tBO0VBQ0U7SUFDRSxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLFVBQVU7RUFDWjtFQUNBO0lBQ0UsZUFBZTtFQUNqQjtFQUlBO0lBQ0UsV0FBVztJQUNYLGdCQUFnQjtJQUNoQixVQUFVO0VBQ1o7RUFDQTtJQUNFLGVBQWU7RUFDakI7RUFJQTtJQUNFLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsVUFBVTtFQUNaO0VBQ0E7SUFDRSxlQUFlO0VBQ2pCO0FBckJGIiwiZmlsZSI6InN0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1idXR0b24ge1xuICBmb250LXNpemU6IDAuOXJlbTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LW1lc3NhZ2Uge1xuICBib3JkZXI6IDFweCBzb2xpZDtcbiAgcGFkZGluZzogMWVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZS5jdGN0LWVycm9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDY1LCA1NCwgMC4wMik7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgY29sb3I6ICNjZjBiMDA7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1tZXNzYWdlLmN0Y3Qtc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDYsIDIwNCwgNjQsIDAuMDIpO1xuICBib3JkZXItY29sb3I6ICMyZWNjNDA7XG4gIGNvbG9yOiAjMWI3OTI2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZSAuY3RjdC1kaXNtaXNzLWFqYXgtbm90aWNlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBmbG9hdDogcmlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBwYWRkaW5nOiAwLjg1cmVtIDFyZW07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0tZmllbGQge1xuICBtYXJnaW46IDAgMCAxcmVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtaW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWhhbGYge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogMiU7XG4gICAgd2lkdGg6IDQ4JTtcbiAgfVxuICAuY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtaGFsZjpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLXRoaXJkIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiAzMiU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLXRoaXJkOmxhc3Qtb2YtdHlwZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtZm91cnRoIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiAyNCU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWZvdXJ0aDpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddOnJlcXVpcmVkOnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nZW1haWwnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3Bhc3N3b3JkJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSd0ZWwnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddOnJlcXVpcmVkOnZhbGlkIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1hZ2VzL2NoZWNrX2NpcmNsZS5zdmdcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDhweCA1MCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogMThweDtcbiAgYm9yZGVyLWNvbG9yOiAjMmVjYzQwO1xuICBwYWRkaW5nLWxlZnQ6IDMycHg7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSd0ZXh0J106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nZW1haWwnXS5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3Bhc3N3b3JkJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nbnVtYmVyJ106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nbnVtYmVyJ10uY3RjdC1pbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogI2ZmZiB1cmwoXCIuLi9pbWFnZXMvZXJyb3Iuc3ZnXCIpIG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDY1LCA1NCwgMC4wMik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDhweCA1MCU7XG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1pbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogI2ZmZiB1cmwoXCIuLi9pbWFnZXMvZXJyb3Iuc3ZnXCIpIG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDY1LCA1NCwgMC4wMik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDhweCA1MCU7XG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dC5jdGN0LWxhYmVsLWxlZnQsXG4uY3RjdC1mb3JtLXdyYXBwZXIgdGV4dGFyZWEuY3RjdC1sYWJlbC1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogNzUlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWxlZnQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1yaWdodDogNSU7XG4gIHdpZHRoOiAyMCU7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dC5jdGN0LWxhYmVsLXJpZ2h0LFxuLmN0Y3QtZm9ybS13cmFwcGVyIHRleHRhcmVhLmN0Y3QtbGFiZWwtcmlnaHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1yaWdodDogNSU7XG4gIHdpZHRoOiA3NSU7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dC5jdGN0LWxhYmVsLXJpZ2h0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jdGN0LWZvcm0td3JhcHBlciB0ZXh0YXJlYS5jdGN0LWxhYmVsLXJpZ2h0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIHdpZHRoOiBhdXRvO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWhpZGRlbiB7XG4gIGxlZnQ6IC05OTk5cHggIWltcG9ydGFudDtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogLTk5OTlweCAhaW1wb3J0YW50O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3RfdXNhZ2Uge1xuICBib3JkZXI6IDAgbm9uZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLm5vLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvb3ZhbC5taW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiB3YWl0O1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuaGFzLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybTo6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC10b3AgbGFiZWwsXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC1ib3R0b20gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0gLmN0Y3QtbGFiZWwtbGVmdCBsYWJlbCxcbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtIC5jdGN0LWxhYmVsLXJpZ2h0IGxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSBhYmJyIHtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogI2ZmNDEzNjtcbiAgZm9udC1zaXplOiAwLjlyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1pbnB1dC1jb250YWluZXIgbGFiZWwge1xuICBjb2xvcjogI2FhYTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGNvbG9yOiAjZmY0MTM2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3Qtc3VibWl0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybS1maWVsZC1jaGVja2JveCBmaWVsZHNldCB7XG4gIGJvcmRlcjogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0tZmllbGQtY2hlY2tib3ggZmllbGRzZXQgbGVnZW5kIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZzogMDtcbn1cblxuLmN0Y3QtdHdlbnR5Zm91cnRlZW4gLmN0Y3QtZm9ybS1maWVsZCBpbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuIl19 */
|
assets/css/style.min.css
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
.ctct-form-wrapper .ctct-button{font-size:.9rem}.ctct-form-wrapper .ctct-message{border:1px solid;padding:1em}.ctct-form-wrapper .ctct-message.ctct-error{background-color:rgba(255,65,54,.02);border-color:#ff4136;color:#cf0b00}.ctct-form-wrapper .ctct-message.ctct-success{background-color:rgba(46,204,64,.02);border-color:#2ecc40;color:#1b7926}.ctct-form-wrapper .ctct-message .ctct-dismiss-ajax-notice{border-radius:50%;float:right;line-height:1;padding:.85rem 1rem;text-decoration:none}.ctct-form-wrapper .ctct-form-field{margin:0 0 1rem}.ctct-form-wrapper .ctct-field-inline{display:inline-block}.ctct-form-wrapper input[type=email]:required:valid,.ctct-form-wrapper input[type=number]:required:valid,.ctct-form-wrapper input[type=password]:required:valid,.ctct-form-wrapper input[type=tel]:required:valid,.ctct-form-wrapper input[type=text]:required:valid{background-image:url(../images/check_circle.svg);background-position:8px 50%;background-repeat:no-repeat;background-size:18px;border-color:#2ecc40;padding-left:32px}.ctct-form-wrapper input[type=email].ctct-invalid,.ctct-form-wrapper input[type=email]:required.ctct-invalid,.ctct-form-wrapper input[type=number].ctct-invalid,.ctct-form-wrapper input[type=number]:required.ctct-invalid,.ctct-form-wrapper input[type=password].ctct-invalid,.ctct-form-wrapper input[type=password]:required.ctct-invalid,.ctct-form-wrapper input[type=tel].ctct-invalid,.ctct-form-wrapper input[type=tel]:required.ctct-invalid,.ctct-form-wrapper input[type=text].ctct-invalid,.ctct-form-wrapper input[type=text]:required.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper .ctct-field-error{font-size:.85rem;font-style:italic}.ctct-form-wrapper input.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper input.ctct-label-left,.ctct-form-wrapper textarea.ctct-label-left{display:inline-block;width:75%}.ctct-form-wrapper span.ctct-label-left{display:inline-block;margin-right:5%;width:20%}.ctct-form-wrapper input.ctct-label-right,.ctct-form-wrapper textarea.ctct-label-right{display:inline-block;margin-right:5%;width:75%}.ctct-form-wrapper span.ctct-label-right{display:inline-block;width:20%}.ctct-form-wrapper span.ctct-label-hidden{left:-9999px!important;position:absolute!important;top:-9999px!important}.ctct-form-wrapper .ctct_usage{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ctct-form-wrapper .no-recaptcha .ctct-submitted:disabled{background-image:url(../images/oval.min.svg);background-position:50%;background-repeat:no-repeat;color:transparent;cursor:wait;opacity:.3}.ctct-form-wrapper .has-recaptcha .ctct-submitted:disabled{cursor:not-allowed}.ctct-form-wrapper .ctct-form:after{clear:both;content:"";display:table}.ctct-form-wrapper .ctct-form .ctct-label-bottom label,.ctct-form-wrapper .ctct-form .ctct-label-top label{display:block}.ctct-form-wrapper .ctct-form .ctct-label-left label,.ctct-form-wrapper .ctct-form .ctct-label-right label{display:inline-block}.ctct-form-wrapper .ctct-form abbr{border:none;color:#ff4136;font-size:.9rem}.ctct-form-wrapper .ctct-input-container label{color:#aaa;font-size:.8rem}.ctct-form-wrapper .ctct-field-error{color:#ff4136}.ctct-form-wrapper .ctct-submit{cursor:pointer}.ctct-twentyfourteen .ctct-form-field input{width:100%}@media (min-width:992px){.ctct-form-wrapper .ctct-field-half{float:left;margin-right:2%;width:48%}.ctct-form-wrapper .ctct-field-half:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-third{float:left;margin-right:2%;width:32%}.ctct-form-wrapper .ctct-field-third:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-fourth{float:left;margin-right:2%;width:24%}.ctct-form-wrapper .ctct-field-fourth:last-of-type{margin-right:0}}
|
2 |
-
/*# sourceMappingURL=data:application/json;charset=utf8;base64,
|
1 |
+
.ctct-form-wrapper .ctct-button{font-size:.9rem}.ctct-form-wrapper .ctct-message{border:1px solid;padding:1em}.ctct-form-wrapper .ctct-message.ctct-error{background-color:rgba(255,65,54,.02);border-color:#ff4136;color:#cf0b00}.ctct-form-wrapper .ctct-message.ctct-success{background-color:rgba(46,204,64,.02);border-color:#2ecc40;color:#1b7926}.ctct-form-wrapper .ctct-message .ctct-dismiss-ajax-notice{border-radius:50%;float:right;line-height:1;padding:.85rem 1rem;text-decoration:none}.ctct-form-wrapper .ctct-form-field{margin:0 0 1rem}.ctct-form-wrapper .ctct-field-inline{display:inline-block}.ctct-form-wrapper input[type=email]:required:valid,.ctct-form-wrapper input[type=number]:required:valid,.ctct-form-wrapper input[type=password]:required:valid,.ctct-form-wrapper input[type=tel]:required:valid,.ctct-form-wrapper input[type=text]:required:valid{background-image:url(../images/check_circle.svg);background-position:8px 50%;background-repeat:no-repeat;background-size:18px;border-color:#2ecc40;padding-left:32px}.ctct-form-wrapper input[type=email].ctct-invalid,.ctct-form-wrapper input[type=email]:required.ctct-invalid,.ctct-form-wrapper input[type=number].ctct-invalid,.ctct-form-wrapper input[type=number]:required.ctct-invalid,.ctct-form-wrapper input[type=password].ctct-invalid,.ctct-form-wrapper input[type=password]:required.ctct-invalid,.ctct-form-wrapper input[type=tel].ctct-invalid,.ctct-form-wrapper input[type=tel]:required.ctct-invalid,.ctct-form-wrapper input[type=text].ctct-invalid,.ctct-form-wrapper input[type=text]:required.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper .ctct-field-error{font-size:.85rem;font-style:italic}.ctct-form-wrapper input.ctct-invalid{background:#fff url(../images/error.svg) no-repeat;background-color:rgba(255,65,54,.02);background-position:8px 50%;background-size:24px;border-color:#ff4136;padding-left:40px}.ctct-form-wrapper input.ctct-label-left,.ctct-form-wrapper textarea.ctct-label-left{display:inline-block;width:75%}.ctct-form-wrapper span.ctct-label-left{display:inline-block;margin-right:5%;width:20%}.ctct-form-wrapper input.ctct-label-right,.ctct-form-wrapper textarea.ctct-label-right{display:inline-block;margin-right:5%;width:75%}.ctct-form-wrapper input.ctct-label-right[type=checkbox],.ctct-form-wrapper textarea.ctct-label-right[type=checkbox]{width:auto}.ctct-form-wrapper span.ctct-label-right{display:inline-block;width:20%}.ctct-form-wrapper span.ctct-label-hidden{left:-9999px!important;position:absolute!important;top:-9999px!important}.ctct-form-wrapper .ctct_usage{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ctct-form-wrapper .no-recaptcha .ctct-submitted:disabled{background-image:url(../images/oval.min.svg);background-position:50%;background-repeat:no-repeat;color:transparent;cursor:wait;opacity:.3}.ctct-form-wrapper .has-recaptcha .ctct-submitted:disabled{cursor:not-allowed}.ctct-form-wrapper .ctct-form:after{clear:both;content:"";display:table}.ctct-form-wrapper .ctct-form .ctct-label-bottom label,.ctct-form-wrapper .ctct-form .ctct-label-top label{display:block}.ctct-form-wrapper .ctct-form .ctct-label-left label,.ctct-form-wrapper .ctct-form .ctct-label-right label{display:inline-block}.ctct-form-wrapper .ctct-form abbr{border:none;color:#ff4136;font-size:.9rem}.ctct-form-wrapper .ctct-input-container label{color:#aaa;font-size:.8rem}.ctct-form-wrapper .ctct-field-error{color:#ff4136}.ctct-form-wrapper .ctct-submit{cursor:pointer}.ctct-form-wrapper .ctct-form-field-checkbox fieldset{border:none;padding:0}.ctct-form-wrapper .ctct-form-field-checkbox fieldset legend{font-weight:400;padding:0}.ctct-twentyfourteen .ctct-form-field input{width:100%}@media (min-width:992px){.ctct-form-wrapper .ctct-field-half{float:left;margin-right:2%;width:48%}.ctct-form-wrapper .ctct-field-half:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-third{float:left;margin-right:2%;width:32%}.ctct-form-wrapper .ctct-field-third:last-of-type{margin-right:0}.ctct-form-wrapper .ctct-field-fourth{float:left;margin-right:2%;width:24%}.ctct-form-wrapper .ctct-field-fourth:last-of-type{margin-right:0}}
|
2 |
+
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FDRSxlQUNGLENBRUEsaUNBQ0UsZ0JBQWlCLENBQ2pCLFdBQ0YsQ0FFQSw0Q0FDRSxvQ0FBeUMsQ0FDekMsb0JBQXFCLENBQ3JCLGFBQ0YsQ0FFQSw4Q0FDRSxvQ0FBeUMsQ0FDekMsb0JBQXFCLENBQ3JCLGFBQ0YsQ0FFQSwyREFDRSxpQkFBa0IsQ0FDbEIsV0FBWSxDQUNaLGFBQWMsQ0FDZCxtQkFBcUIsQ0FDckIsb0JBQ0YsQ0FFQSxvQ0FDRSxlQUNGLENBRUEsc0NBQ0Usb0JBQ0YsQ0FtQ0EscVFBQ0UsZ0RBQW1ELENBQ25ELDJCQUE0QixDQUM1QiwyQkFBNEIsQ0FDNUIsb0JBQXFCLENBQ3JCLG9CQUFxQixDQUNyQixpQkFDRixDQUVBLG1pQkFDRSxrREFBcUQsQ0FDckQsb0NBQXlDLENBQ3pDLDJCQUE0QixDQUM1QixvQkFBcUIsQ0FDckIsb0JBQXFCLENBQ3JCLGlCQUNGLENBRUEscUNBQ0UsZ0JBQWtCLENBQ2xCLGlCQUNGLENBRUEsc0NBQ0Usa0RBQXFELENBQ3JELG9DQUF5QyxDQUN6QywyQkFBNEIsQ0FDNUIsb0JBQXFCLENBQ3JCLG9CQUFxQixDQUNyQixpQkFDRixDQUVBLHFGQUVFLG9CQUFxQixDQUNyQixTQUNGLENBRUEsd0NBQ0Usb0JBQXFCLENBQ3JCLGVBQWdCLENBQ2hCLFNBQ0YsQ0FFQSx1RkFFRSxvQkFBcUIsQ0FDckIsZUFBZ0IsQ0FDaEIsU0FDRixDQUVBLHFIQUVFLFVBQ0YsQ0FFQSx5Q0FDRSxvQkFBcUIsQ0FDckIsU0FDRixDQUVBLDBDQUNFLHNCQUF3QixDQUN4QiwyQkFBNkIsQ0FDN0IscUJBQ0YsQ0FFQSwrQkFDRSxRQUFjLENBQ2Qsa0JBQXNCLENBQ3RCLFVBQVcsQ0FDWCxXQUFZLENBQ1osZUFBZ0IsQ0FDaEIsU0FBVSxDQUNWLGlCQUFrQixDQUNsQixTQUNGLENBRUEsMERBQ0UsNENBQStDLENBQy9DLHVCQUEyQixDQUMzQiwyQkFBNEIsQ0FDNUIsaUJBQWtCLENBQ2xCLFdBQVksQ0FDWixVQUNGLENBRUEsMkRBQ0Usa0JBQ0YsQ0FFQSxvQ0FDRSxVQUFXLENBQ1gsVUFBVyxDQUNYLGFBQ0YsQ0FFQSwyR0FFRSxhQUNGLENBRUEsMkdBRUUsb0JBQ0YsQ0FFQSxtQ0FDRSxXQUFZLENBQ1osYUFBYyxDQUNkLGVBQ0YsQ0FFQSwrQ0FDRSxVQUFXLENBQ1gsZUFDRixDQUVBLHFDQUNFLGFBQ0YsQ0FFQSxnQ0FDRSxjQUNGLENBRUEsc0RBQ0UsV0FBWSxDQUNaLFNBQ0YsQ0FFQSw2REFDRSxlQUFtQixDQUNuQixTQUNGLENBRUEsNENBQ0UsVUFDRixDQTNLQSx5QkFDRSxvQ0FDRSxVQUFXLENBQ1gsZUFBZ0IsQ0FDaEIsU0FDRixDQUNBLGlEQUNFLGNBQ0YsQ0FJQSxxQ0FDRSxVQUFXLENBQ1gsZUFBZ0IsQ0FDaEIsU0FDRixDQUNBLGtEQUNFLGNBQ0YsQ0FJQSxzQ0FDRSxVQUFXLENBQ1gsZUFBZ0IsQ0FDaEIsU0FDRixDQUNBLG1EQUNFLGNBQ0YsQ0FyQkYiLCJmaWxlIjoic3R5bGUubWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1idXR0b24ge1xuICBmb250LXNpemU6IDAuOXJlbTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LW1lc3NhZ2Uge1xuICBib3JkZXI6IDFweCBzb2xpZDtcbiAgcGFkZGluZzogMWVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZS5jdGN0LWVycm9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDY1LCA1NCwgMC4wMik7XG4gIGJvcmRlci1jb2xvcjogI2ZmNDEzNjtcbiAgY29sb3I6ICNjZjBiMDA7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1tZXNzYWdlLmN0Y3Qtc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDYsIDIwNCwgNjQsIDAuMDIpO1xuICBib3JkZXItY29sb3I6ICMyZWNjNDA7XG4gIGNvbG9yOiAjMWI3OTI2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtbWVzc2FnZSAuY3RjdC1kaXNtaXNzLWFqYXgtbm90aWNlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBmbG9hdDogcmlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBwYWRkaW5nOiAwLjg1cmVtIDFyZW07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0tZmllbGQge1xuICBtYXJnaW46IDAgMCAxcmVtO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtaW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWhhbGYge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogMiU7XG4gICAgd2lkdGg6IDQ4JTtcbiAgfVxuICAuY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtaGFsZjpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLXRoaXJkIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiAzMiU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLXRoaXJkOmxhc3Qtb2YtdHlwZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZmllbGQtZm91cnRoIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgIHdpZHRoOiAyNCU7XG4gIH1cbiAgLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZpZWxkLWZvdXJ0aDpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddOnJlcXVpcmVkOnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nZW1haWwnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3Bhc3N3b3JkJ106cmVxdWlyZWQ6dmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSd0ZWwnXTpyZXF1aXJlZDp2YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J251bWJlciddOnJlcXVpcmVkOnZhbGlkIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1hZ2VzL2NoZWNrX2NpcmNsZS5zdmdcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDhweCA1MCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogMThweDtcbiAgYm9yZGVyLWNvbG9yOiAjMmVjYzQwO1xuICBwYWRkaW5nLWxlZnQ6IDMycHg7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSd0ZXh0J106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGV4dCddLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J2VtYWlsJ106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nZW1haWwnXS5jdGN0LWludmFsaWQsIC5jdGN0LWZvcm0td3JhcHBlciBpbnB1dFt0eXBlPSdwYXNzd29yZCddOnJlcXVpcmVkLmN0Y3QtaW52YWxpZCwgLmN0Y3QtZm9ybS13cmFwcGVyIGlucHV0W3R5cGU9J3Bhc3N3b3JkJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0ndGVsJ10uY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nbnVtYmVyJ106cmVxdWlyZWQuY3RjdC1pbnZhbGlkLCAuY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXRbdHlwZT0nbnVtYmVyJ10uY3RjdC1pbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogI2ZmZiB1cmwoXCIuLi9pbWFnZXMvZXJyb3Iuc3ZnXCIpIG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDY1LCA1NCwgMC4wMik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDhweCA1MCU7XG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgaW5wdXQuY3RjdC1pbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogI2ZmZiB1cmwoXCIuLi9pbWFnZXMvZXJyb3Iuc3ZnXCIpIG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDY1LCA1NCwgMC4wMik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDhweCA1MCU7XG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcbiAgYm9yZGVyLWNvbG9yOiAjZmY0MTM2O1xuICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dC5jdGN0LWxhYmVsLWxlZnQsXG4uY3RjdC1mb3JtLXdyYXBwZXIgdGV4dGFyZWEuY3RjdC1sYWJlbC1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogNzUlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWxlZnQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1yaWdodDogNSU7XG4gIHdpZHRoOiAyMCU7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dC5jdGN0LWxhYmVsLXJpZ2h0LFxuLmN0Y3QtZm9ybS13cmFwcGVyIHRleHRhcmVhLmN0Y3QtbGFiZWwtcmlnaHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1yaWdodDogNSU7XG4gIHdpZHRoOiA3NSU7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciBpbnB1dC5jdGN0LWxhYmVsLXJpZ2h0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jdGN0LWZvcm0td3JhcHBlciB0ZXh0YXJlYS5jdGN0LWxhYmVsLXJpZ2h0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIHdpZHRoOiBhdXRvO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLXJpZ2h0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMjAlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgc3Bhbi5jdGN0LWxhYmVsLWhpZGRlbiB7XG4gIGxlZnQ6IC05OTk5cHggIWltcG9ydGFudDtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogLTk5OTlweCAhaW1wb3J0YW50O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3RfdXNhZ2Uge1xuICBib3JkZXI6IDAgbm9uZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLm5vLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvb3ZhbC5taW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiB3YWl0O1xuICBvcGFjaXR5OiAwLjM7XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuaGFzLXJlY2FwdGNoYSAuY3RjdC1zdWJtaXR0ZWQ6ZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybTo6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC10b3AgbGFiZWwsXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSAuY3RjdC1sYWJlbC1ib3R0b20gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0gLmN0Y3QtbGFiZWwtbGVmdCBsYWJlbCxcbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1mb3JtIC5jdGN0LWxhYmVsLXJpZ2h0IGxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybSBhYmJyIHtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogI2ZmNDEzNjtcbiAgZm9udC1zaXplOiAwLjlyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1pbnB1dC1jb250YWluZXIgbGFiZWwge1xuICBjb2xvcjogI2FhYTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5cbi5jdGN0LWZvcm0td3JhcHBlciAuY3RjdC1maWVsZC1lcnJvciB7XG4gIGNvbG9yOiAjZmY0MTM2O1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3Qtc3VibWl0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY3RjdC1mb3JtLXdyYXBwZXIgLmN0Y3QtZm9ybS1maWVsZC1jaGVja2JveCBmaWVsZHNldCB7XG4gIGJvcmRlcjogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cblxuLmN0Y3QtZm9ybS13cmFwcGVyIC5jdGN0LWZvcm0tZmllbGQtY2hlY2tib3ggZmllbGRzZXQgbGVnZW5kIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZzogMDtcbn1cblxuLmN0Y3QtdHdlbnR5Zm91cnRlZW4gLmN0Y3QtZm9ybS1maWVsZCBpbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuIl19 */
|
assets/images/check_circle.svg
CHANGED
File without changes
|
assets/images/error.svg
CHANGED
File without changes
|
assets/js/ctct-plugin-admin.js
CHANGED
@@ -160,7 +160,7 @@ eval("window.CTCTNewsletter = {};\n\n(function (window, $, app) {\n /**\n * @
|
|
160 |
/*! no static exports found */
|
161 |
/***/ (function(module, exports) {
|
162 |
|
163 |
-
eval("window.CTCT_OptIns = {};\n\n(function (window, $, app) {\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n optinNoConn: $('#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected'),\n list: $('#cmb2-metabox-ctct_0_list_metabox
|
164 |
|
165 |
/***/ }),
|
166 |
|
160 |
/*! no static exports found */
|
161 |
/***/ (function(module, exports) {
|
162 |
|
163 |
+
eval("window.CTCT_OptIns = {};\n\n(function (window, $, app) {\n /**\n * @constructor\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n app.init = function () {\n app.cache();\n app.bindEvents();\n };\n /**\n * Cache DOM elements.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.cache = function () {\n app.$c = {\n optinNoConn: $('#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected'),\n list: $('#cmb2-metabox-ctct_0_list_metabox [name=\"_ctct_list[]\"]'),\n title: $('#cmb2-metabox-ctct_1_optin_metabox .cmb2-id-email-optin-title'),\n optin: $('#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in'),\n instruct: $('#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in-instructions')\n };\n };\n /**\n * Attach callbacks to events.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.bindEvents = function () {\n // Only fire show/hide if we have the normal checkbox.\n if (app.$c.optinNoConn.length) {\n // Fire once to get our loaded state set up.\n app.toggleNoConnectionFields(); // Bind to fire when needed.\n\n app.$c.optinNoConn.change(function () {\n app.toggleNoConnectionFields();\n });\n } // Only fire show/hide if we have the normal checkbox.\n\n\n if (app.$c.list.length) {\n // Fire once to get our loaded state set up.\n app.toggleConnectionFields(); // Bind to fire when needed.\n\n app.$c.list.change(function () {\n app.toggleConnectionFields();\n });\n }\n };\n /**\n * Toggle unnecessary, unconnected optin fields if we're not showing the opt-in.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.toggleNoConnectionFields = function () {\n if (app.$c.optinNoConn.prop('checked')) {\n app.$c.instruct.slideDown();\n } else {\n app.$c.instruct.slideUp();\n }\n };\n /**\n * Toggle unnecessary, *connected* optin fields if we're not showing the opt-in.\n *\n * @author Constant Contact\n * @since 1.0.0\n */\n\n\n app.toggleConnectionFields = function () {\n // If checked, show them, else hide it.\n if ('' !== app.$c.list.val()) {\n app.$c.title.slideDown();\n app.$c.optin.slideDown();\n app.$c.instruct.slideDown();\n } else {\n app.$c.title.slideUp();\n app.$c.optin.slideUp();\n app.$c.instruct.slideUp();\n }\n };\n\n $(app.init);\n})(window, jQuery, window.CTCT_OptIns);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvY3RjdC1wbHVnaW4tYWRtaW4vb3B0aW5zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2N0Y3QtcGx1Z2luLWFkbWluL29wdGlucy5qcz9jNGM5Il0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5DVENUX09wdElucyA9IHt9O1xuXG4oIGZ1bmN0aW9uKCB3aW5kb3csICQsIGFwcCApIHtcblxuXHQvKipcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5pbml0ID0gKCkgPT4ge1xuXHRcdGFwcC5jYWNoZSgpO1xuXHRcdGFwcC5iaW5kRXZlbnRzKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIENhY2hlIERPTSBlbGVtZW50cy5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLmNhY2hlID0gKCkgPT4ge1xuXHRcdGFwcC4kYyA9IHtcblx0XHRcdG9wdGluTm9Db25uOiAkKCAnI2NtYjItbWV0YWJveC1jdGN0XzFfb3B0aW5fbWV0YWJveCAjX2N0Y3Rfb3B0X2luX25vdF9jb25uZWN0ZWQnICksXG5cdFx0XHRsaXN0OiAkKCAnI2NtYjItbWV0YWJveC1jdGN0XzBfbGlzdF9tZXRhYm94IFtuYW1lPVwiX2N0Y3RfbGlzdFtdXCJdJyApLFxuXHRcdFx0dGl0bGU6ICQoICcjY21iMi1tZXRhYm94LWN0Y3RfMV9vcHRpbl9tZXRhYm94IC5jbWIyLWlkLWVtYWlsLW9wdGluLXRpdGxlJyApLFxuXHRcdFx0b3B0aW46ICQoICcjY21iMi1tZXRhYm94LWN0Y3RfMV9vcHRpbl9tZXRhYm94IC5jbWIyLWlkLS1jdGN0LW9wdC1pbicgKSxcblx0XHRcdGluc3RydWN0OiAkKCAnI2NtYjItbWV0YWJveC1jdGN0XzFfb3B0aW5fbWV0YWJveCAuY21iMi1pZC0tY3RjdC1vcHQtaW4taW5zdHJ1Y3Rpb25zJyApXG5cdFx0fTtcblx0fTtcblxuXHQvKipcblx0ICogQXR0YWNoIGNhbGxiYWNrcyB0byBldmVudHMuXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC5iaW5kRXZlbnRzID0gKCkgPT4ge1xuXG5cdFx0Ly8gT25seSBmaXJlIHNob3cvaGlkZSBpZiB3ZSBoYXZlIHRoZSBub3JtYWwgY2hlY2tib3guXG5cdFx0aWYgKCBhcHAuJGMub3B0aW5Ob0Nvbm4ubGVuZ3RoICkge1xuXG5cdFx0XHQvLyBGaXJlIG9uY2UgdG8gZ2V0IG91ciBsb2FkZWQgc3RhdGUgc2V0IHVwLlxuXHRcdFx0YXBwLnRvZ2dsZU5vQ29ubmVjdGlvbkZpZWxkcygpO1xuXG5cdFx0XHQvLyBCaW5kIHRvIGZpcmUgd2hlbiBuZWVkZWQuXG5cdFx0XHRhcHAuJGMub3B0aW5Ob0Nvbm4uY2hhbmdlKCAoKSA9PiB7XG5cdFx0XHRcdGFwcC50b2dnbGVOb0Nvbm5lY3Rpb25GaWVsZHMoKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBPbmx5IGZpcmUgc2hvdy9oaWRlIGlmIHdlIGhhdmUgdGhlIG5vcm1hbCBjaGVja2JveC5cblx0XHRpZiAoIGFwcC4kYy5saXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0Ly8gRmlyZSBvbmNlIHRvIGdldCBvdXIgbG9hZGVkIHN0YXRlIHNldCB1cC5cblx0XHRcdGFwcC50b2dnbGVDb25uZWN0aW9uRmllbGRzKCk7XG5cblx0XHRcdC8vIEJpbmQgdG8gZmlyZSB3aGVuIG5lZWRlZC5cblx0XHRcdGFwcC4kYy5saXN0LmNoYW5nZSggKCkgPT4ge1xuXHRcdFx0XHRhcHAudG9nZ2xlQ29ubmVjdGlvbkZpZWxkcygpO1xuXHRcdFx0fSApO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogVG9nZ2xlIHVubmVjZXNzYXJ5LCB1bmNvbm5lY3RlZCBvcHRpbiBmaWVsZHMgaWYgd2UncmUgbm90IHNob3dpbmcgdGhlIG9wdC1pbi5cblx0ICpcblx0ICogQGF1dGhvciBDb25zdGFudCBDb250YWN0XG5cdCAqIEBzaW5jZSAxLjAuMFxuXHQgKi9cblx0YXBwLnRvZ2dsZU5vQ29ubmVjdGlvbkZpZWxkcyA9ICgpID0+IHtcblxuXHRcdGlmICggYXBwLiRjLm9wdGluTm9Db25uLnByb3AoICdjaGVja2VkJyApICkge1xuXHRcdFx0YXBwLiRjLmluc3RydWN0LnNsaWRlRG93bigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhcHAuJGMuaW5zdHJ1Y3Quc2xpZGVVcCgpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogIFRvZ2dsZSB1bm5lY2Vzc2FyeSwgKmNvbm5lY3RlZCogb3B0aW4gZmllbGRzIGlmIHdlJ3JlIG5vdCBzaG93aW5nIHRoZSBvcHQtaW4uXG5cdCAqXG5cdCAqIEBhdXRob3IgQ29uc3RhbnQgQ29udGFjdFxuXHQgKiBAc2luY2UgMS4wLjBcblx0ICovXG5cdGFwcC50b2dnbGVDb25uZWN0aW9uRmllbGRzID0gKCkgPT4ge1xuXG5cdFx0Ly8gSWYgY2hlY2tlZCwgc2hvdyB0aGVtLCBlbHNlIGhpZGUgaXQuXG5cdFx0aWYgKCAnJyAhPT0gYXBwLiRjLmxpc3QudmFsKCkgKSB7XG5cdFx0XHRhcHAuJGMudGl0bGUuc2xpZGVEb3duKCk7XG5cdFx0XHRhcHAuJGMub3B0aW4uc2xpZGVEb3duKCk7XG5cdFx0XHRhcHAuJGMuaW5zdHJ1Y3Quc2xpZGVEb3duKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFwcC4kYy50aXRsZS5zbGlkZVVwKCk7XG5cdFx0XHRhcHAuJGMub3B0aW4uc2xpZGVVcCgpO1xuXHRcdFx0YXBwLiRjLmluc3RydWN0LnNsaWRlVXAoKTtcblx0XHR9XG5cdH07XG5cblx0JCggYXBwLmluaXQgKTtcblxufSAoIHdpbmRvdywgalF1ZXJ5LCB3aW5kb3cuQ1RDVF9PcHRJbnMgKSApO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/js/ctct-plugin-admin/optins.js\n");
|
164 |
|
165 |
/***/ }),
|
166 |
|
assets/js/ctct-plugin-admin.min.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
!function(t){var e={};function n(c){if(e[c])return e[c].exports;var o=e[c]={i:c,l:!1,exports:{}};return t[c].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,c){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:c})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var c=Object.create(null);if(n.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(c,o,function(e){return t[e]}.bind(null,o));return c},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="https://testing.test/wp-content/plugins/constant-contact-forms/assets/js/",n(n.s=0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";n.r(e);n(2),n(3),n(4),n(5),n(6),n(7)},function(t,e){window.CTCTAJAX={},function(t,e,n){var c=this;n.init=function(){n.handleOptinAJAX(),n.handleReviewAJAX()},n.handleOptinAJAX=function(){e("#ctct_admin_notice_tracking_optin").on("click",(function(n){var o={action:"constant_contact_optin_ajax_handler",optin:e(c).is(":checked")?"on":"off"};e.ajax({url:t.ajaxurl,data:o,dataType:"json",success:function(t){e(document.getElementById("ctct-admin-notice-optin_admin_notice")).remove()},error:function(e,n,c){t.console&&console.log([n,c])}}),e("#ctct-privacy-modal").toggleClass("ctct-modal-open")})),e("#ctct-connect-ga-optin a").on("click",(function(n){var o={action:"constant_contact_optin_ajax_handler",optin:e(c).attr("data-allow")};e.ajax({url:t.ajaxurl,data:o,dataType:"json",success:function(t){e(".ctct-connected-opt-in").hide()},error:function(e,n,c){t.console&&console.log([n,c])}})})),e("#_ctct_data_tracking").on("click",(function(t){e("#ctct-privacy-modal").toggleClass("ctct-modal-open")})),e(".ctct-modal-close").on("click",(function(t){var n=e("#_ctct_data_tracking");n.is(":checked")&&n.attr("checked",!1)})),e("#ctct-modal-footer-privacy a").on("click",(function(n){var o={action:"constant_contact_privacy_ajax_handler",privacy_agree:e(c).attr("data-agree")};e.ajax({url:t.ajaxurl,data:o,dataType:"json",success:function(t){if(e("#ctct-privacy-modal").toggleClass("ctct-modal-open"),"false"===o.privacy_agree){var n=e("#_ctct_data_tracking");n.is(":checked")&&n.attr("checked",!1)}},error:function(e,n,c){t.console&&console.log([n,c])}})}))},n.handleReviewAJAX=function(){e("#ctct-admin-notice-review_request").on("click","a",(function(n){var o="dismissed";e(c).hasClass("ctct-review")&&(o="reviewed");var i={action:"constant_contact_review_ajax_handler","ctct-review-action":o};e.ajax({url:t.ajaxurl,data:i,dataType:"json",success:function(c){t.console&&console.log(c),n.preventDefault(),e("#ctct-admin-notice-review_request").hide()},error:function(e,n,c){t.console&&console.log([n,c])}})}))},e(n.init)}(window,jQuery,window.CTCTAJAX)},function(t,e){window.CTCTBuilder={},function(t,e,n){n.init=function(){e('#cmb2-metabox-ctct_2_fields_metabox option[value="email"]:selected').length&&e("#ctct-no-email-error").remove(),n.cache(),n.bindEvents(),n.selectBinds(),n.modifyFields(),e("#ctct_0_description_metabox h2.hndle").removeClass("ui-sortable-handle, hndle"),e("head").append('<style> #cmb2-metabox-ctct_2_fields_metabox a.move-up::after { content: "'+t.ctctTexts.move_up+'" } #cmb2-metabox-ctct_2_fields_metabox a.move-down::after { content: "'+t.ctctTexts.move_down+'" }</style>')},n.cache=function(){n.$c={window:e(t),body:e("body")},n.isLeaveWarningBound=!1},n.bindLeaveWarning=function(){n.isLeaveWarningBound||(e(t).bind("beforeunload",(function(){return t.ctctTexts.leavewarning})),n.isLeaveWarningBound=!0)},n.unbindLeaveWarning=function(){e(t).unbind("beforeunload")},n.bindEvents=function(){e("#post").submit((function(){e(".ctct-email-disabled").removeClass("disabled").prop("disabled",!1),n.unbindLeaveWarning()})),e(".cmb2-wrap input, .cmb2-wrap textarea").on("input",(function(){"undefined"!=typeof tinyMCE&&n.bindLeaveWarning()})),e(document).on("cmb2_shift_rows_complete",(function(){n.modifyFields(),n.bindLeaveWarning(),n.removeDuplicateMappings()})),e(document).on("cmb2_add_row",(function(t){e("#custom_fields_group_repeat .postbox").last().find(".map select").val("none"),n.modifyFields(),n.selectBinds(),n.removeDuplicateMappings()})),n.removeDuplicateMappings(),e("#ctct-reset-css").on("click",(function(t){t.preventDefault();var n=["#_ctct_form_description_font_size","#_ctct_form_submit_button_font_size","#_ctct_form_label_placement"],c=["#_ctct_form_padding_top","#_ctct_form_padding_bottom","#_ctct_form_padding_left","#_ctct_form_padding_right","#_ctct_input_custom_classes"];e(".wp-picker-clear").each((function(){e(this).click()}));for(var o=n.length;o--;){var i=e(n[o]).children("option").first();e(n[o]).val(i.val())}for(o=c.length;o--;)e(c[o]).val("")}))},n.selectBinds=function(){e("#cmb2-metabox-ctct_2_fields_metabox .cmb2_select").change((function(){n.modifyFields(),n.removeDuplicateMappings(),n.bindLeaveWarning()}))},n.modifyFields=function(){var n=!1;e("#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping").each((function(c,o){var i=e(this).find(".cmb-field-list"),a=e(i).find(".cmb-remove-group-row"),l=e(i).find(".required input[type=checkbox]"),s=l.closest(".cmb-row"),r=e(i).find(".map select option:selected"),d=r.text(),u=e(this).find("h3"),f=e(this).find('input[name*="_ctct_field_label"]'),p=e(this).find('input[name*="_ctct_field_desc"]');if(u.text(d),0===f.val().length?f.val(d).addClass("ctct-label-filled"):f.addClass("ctct-label-filled"),n||"email"!==e(r).val()?(e(o).find("select").removeClass("disabled ctct-email-disabled").prop("disabled",!1),s.show(),a.show()):(n=!0,l.prop("checked",!0),e(o).find("select").addClass("disabled ctct-email-disabled").prop("disabled",!0),s.hide(),a.hide()),t.ctct_admin_placeholders){var _=t.ctct_admin_placeholders[e(o).find("select").val()];_&&_.length&&p.length?p.attr("placeholder","Example: "+_):t.ctct_admin_placeholders.default&&p.attr("placeholder",t.ctct_admin_placeholders.default)}}))},n.removeDuplicateMappings=function(){var t=[],n="#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping select",c=e(n);c.each((function(n,c){t.push(e(c).val())})),c.children().show(),t.forEach((function(t){"custom_text_area"!==t&&"custom"!==t&&e(n+" option[value="+t+"]:not( :selected )").hide()}))},e(n.init)}(window,jQuery,window.CTCTBuilder)},function(t,e){window.CTCTForms={},function(t,e,n){n.init=function(){n.cache(),n.bindEvents()},n.cache=function(){n.$c={window:e(t),body:e("body"),disconnect:".ctct-disconnect"}},n.bindEvents=function(){e(n.$c.disconnect).on("click",(function(e){confirm(t.ctctTexts.disconnectconfirm)}))},e(n.init)}(window,jQuery,window.CTCTForms)},function(t,e){window.CTCTModal={},function(t,e,n){n.init=function(){n.cache(),n.bindEvents()},n.cache=function(){n.$c={window:e(t),modalSelector:e(".ctct-modal"),modalClose:e(".ctct-modal-close"),textareaModal:e("#ctct-custom-textarea-modal"),textareaLink:e("#ctct-open-textarea-info"),deleteLogLink:e("#deletelog")}},n.bindEvents=function(){n.$c.modalClose.on("click",(function(){n.$c.modalSelector.removeClass("ctct-modal-open"),n.$c.modalSelector.hasClass("ctct-custom-textarea-modal")||e.ajax({type:"post",dataType:"json",url:t.ajaxurl,data:{action:"ctct_dismiss_first_modal",ctct_is_dismissed:"true"}})})),n.$c.textareaLink.on("click",(function(){n.$c.textareaModal.addClass("ctct-modal-open")})),n.$c.deleteLogLink.on("click",(function(n){n.preventDefault();var c=e(n.currentTarget).attr("href");e("#confirmdelete").dialog({resizable:!1,height:"auto",width:400,modal:!0,buttons:{Yes:function(){t.location.replace(c)},Cancel:function(){e("#confirmdelete").closest(".ui-dialog-content").dialog("close")}}})}))},e(n.init)}(window,jQuery,window.CTCTModal)},function(t,e){var n,c;window.CTCTNewsletter={},window,n=jQuery,(c=window.CTCTNewsletter).init=function(){c.submitNewsletter()},c.submitNewsletter=function(){n(".ctct-body #subscribe").on("submit",(function(t){t.preventDefault();var e=n("#subscribe .ctct-call-to-action"),c=n(".ctct-body #subscribe")[0],o=n('.ctct-call-to-action input[type="text"]')[0],i=t.target.action;!0===o.validity.valid?(n("<iframe>",{src:i+"?"+n(c).serialize(),height:0,width:0,style:"display: none;"}).appendTo(e),n("#subbutton").val("Thanks for signing up").css({"background-color":"rgb(1, 128, 0)",color:"rgb(255,255,255)"}),n("#subscribe .ctct-call-to-action-text").css({width:"70%"})):n("#subbutton").val("Error occurred")})),n(".ctct-section #subscribe").on("submit",(function(t){t.preventDefault();var e=n(".section-marketing-tips"),c=n(".ctct-section #subscribe")[0],o=n('.ctct-section #subscribe input[type="text"]')[0],i=t.target.action;!0===o.validity.valid?(n("<iframe>",{src:i+"?"+n(c).serialize(),height:0,width:0,style:"display: none;"}).appendTo(e),n("#subbutton").val("Thanks for signing up").css({"background-color":"rgb(1, 128, 0)"})):n("#subbutton").val("Error occurred")}))},n(c.init)},function(t,e){var n,c;window.CTCT_OptIns={},window,n=jQuery,(c=window.CTCT_OptIns).init=function(){c.cache(),c.bindEvents()},c.cache=function(){c.$c={optinNoConn:n("#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected"),list:n("#cmb2-metabox-ctct_0_list_metabox #_ctct_list"),title:n("#cmb2-metabox-ctct_1_optin_metabox .cmb2-id-email-optin-title"),optin:n("#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in"),instruct:n("#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in-instructions")}},c.bindEvents=function(){c.$c.optinNoConn.length&&(c.toggleNoConnectionFields(),c.$c.optinNoConn.change((function(){c.toggleNoConnectionFields()}))),c.$c.list.length&&(c.toggleConnectionFields(),c.$c.list.change((function(){c.toggleConnectionFields()})))},c.toggleNoConnectionFields=function(){c.$c.optinNoConn.prop("checked")?c.$c.instruct.slideDown():c.$c.instruct.slideUp()},c.toggleConnectionFields=function(){""!==c.$c.list.val()?(c.$c.title.slideDown(),c.$c.optin.slideDown(),c.$c.instruct.slideDown()):(c.$c.title.slideUp(),c.$c.optin.slideUp(),c.$c.instruct.slideUp())},n(c.init)}]);
|
2 |
//# sourceMappingURL=ctct-plugin-admin.min.js.map
|
1 |
+
!function(t){var e={};function n(c){if(e[c])return e[c].exports;var o=e[c]={i:c,l:!1,exports:{}};return t[c].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,c){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:c})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var c=Object.create(null);if(n.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(c,o,function(e){return t[e]}.bind(null,o));return c},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="https://testing.test/wp-content/plugins/constant-contact-forms/assets/js/",n(n.s=0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";n.r(e);n(2),n(3),n(4),n(5),n(6),n(7)},function(t,e){window.CTCTAJAX={},function(t,e,n){var c=this;n.init=function(){n.handleOptinAJAX(),n.handleReviewAJAX()},n.handleOptinAJAX=function(){e("#ctct_admin_notice_tracking_optin").on("click",(function(n){var o={action:"constant_contact_optin_ajax_handler",optin:e(c).is(":checked")?"on":"off"};e.ajax({url:t.ajaxurl,data:o,dataType:"json",success:function(t){e(document.getElementById("ctct-admin-notice-optin_admin_notice")).remove()},error:function(e,n,c){t.console&&console.log([n,c])}}),e("#ctct-privacy-modal").toggleClass("ctct-modal-open")})),e("#ctct-connect-ga-optin a").on("click",(function(n){var o={action:"constant_contact_optin_ajax_handler",optin:e(c).attr("data-allow")};e.ajax({url:t.ajaxurl,data:o,dataType:"json",success:function(t){e(".ctct-connected-opt-in").hide()},error:function(e,n,c){t.console&&console.log([n,c])}})})),e("#_ctct_data_tracking").on("click",(function(t){e("#ctct-privacy-modal").toggleClass("ctct-modal-open")})),e(".ctct-modal-close").on("click",(function(t){var n=e("#_ctct_data_tracking");n.is(":checked")&&n.attr("checked",!1)})),e("#ctct-modal-footer-privacy a").on("click",(function(n){var o={action:"constant_contact_privacy_ajax_handler",privacy_agree:e(c).attr("data-agree")};e.ajax({url:t.ajaxurl,data:o,dataType:"json",success:function(t){if(e("#ctct-privacy-modal").toggleClass("ctct-modal-open"),"false"===o.privacy_agree){var n=e("#_ctct_data_tracking");n.is(":checked")&&n.attr("checked",!1)}},error:function(e,n,c){t.console&&console.log([n,c])}})}))},n.handleReviewAJAX=function(){e("#ctct-admin-notice-review_request").on("click","a",(function(n){var o="dismissed";e(c).hasClass("ctct-review")&&(o="reviewed");var i={action:"constant_contact_review_ajax_handler","ctct-review-action":o};e.ajax({url:t.ajaxurl,data:i,dataType:"json",success:function(c){t.console&&console.log(c),n.preventDefault(),e("#ctct-admin-notice-review_request").hide()},error:function(e,n,c){t.console&&console.log([n,c])}})}))},e(n.init)}(window,jQuery,window.CTCTAJAX)},function(t,e){window.CTCTBuilder={},function(t,e,n){n.init=function(){e('#cmb2-metabox-ctct_2_fields_metabox option[value="email"]:selected').length&&e("#ctct-no-email-error").remove(),n.cache(),n.bindEvents(),n.selectBinds(),n.modifyFields(),e("#ctct_0_description_metabox h2.hndle").removeClass("ui-sortable-handle, hndle"),e("head").append('<style> #cmb2-metabox-ctct_2_fields_metabox a.move-up::after { content: "'+t.ctctTexts.move_up+'" } #cmb2-metabox-ctct_2_fields_metabox a.move-down::after { content: "'+t.ctctTexts.move_down+'" }</style>')},n.cache=function(){n.$c={window:e(t),body:e("body")},n.isLeaveWarningBound=!1},n.bindLeaveWarning=function(){n.isLeaveWarningBound||(e(t).bind("beforeunload",(function(){return t.ctctTexts.leavewarning})),n.isLeaveWarningBound=!0)},n.unbindLeaveWarning=function(){e(t).unbind("beforeunload")},n.bindEvents=function(){e("#post").submit((function(){e(".ctct-email-disabled").removeClass("disabled").prop("disabled",!1),n.unbindLeaveWarning()})),e(".cmb2-wrap input, .cmb2-wrap textarea").on("input",(function(){"undefined"!=typeof tinyMCE&&n.bindLeaveWarning()})),e(document).on("cmb2_shift_rows_complete",(function(){n.modifyFields(),n.bindLeaveWarning(),n.removeDuplicateMappings()})),e(document).on("cmb2_add_row",(function(t){e("#custom_fields_group_repeat .postbox").last().find(".map select").val("none"),n.modifyFields(),n.selectBinds(),n.removeDuplicateMappings()})),n.removeDuplicateMappings(),e("#ctct-reset-css").on("click",(function(t){t.preventDefault();var n=["#_ctct_form_description_font_size","#_ctct_form_submit_button_font_size","#_ctct_form_label_placement"],c=["#_ctct_form_padding_top","#_ctct_form_padding_bottom","#_ctct_form_padding_left","#_ctct_form_padding_right","#_ctct_input_custom_classes"];e(".wp-picker-clear").each((function(){e(this).click()}));for(var o=n.length;o--;){var i=e(n[o]).children("option").first();e(n[o]).val(i.val())}for(o=c.length;o--;)e(c[o]).val("")}))},n.selectBinds=function(){e("#cmb2-metabox-ctct_2_fields_metabox .cmb2_select").change((function(){n.modifyFields(),n.removeDuplicateMappings(),n.bindLeaveWarning()}))},n.modifyFields=function(){var n=!1;e("#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping").each((function(c,o){var i=e(this).find(".cmb-field-list"),a=e(i).find(".cmb-remove-group-row"),l=e(i).find(".required input[type=checkbox]"),s=l.closest(".cmb-row"),r=e(i).find(".map select option:selected"),d=r.text(),u=e(this).find("h3"),f=e(this).find('input[name*="_ctct_field_label"]'),p=e(this).find('input[name*="_ctct_field_desc"]');if(u.text(d),0===f.val().length?f.val(d).addClass("ctct-label-filled"):f.addClass("ctct-label-filled"),n||"email"!==e(r).val()?(e(o).find("select").removeClass("disabled ctct-email-disabled").prop("disabled",!1),s.show(),a.show()):(n=!0,l.prop("checked",!0),e(o).find("select").addClass("disabled ctct-email-disabled").prop("disabled",!0),s.hide(),a.hide()),t.ctct_admin_placeholders){var _=t.ctct_admin_placeholders[e(o).find("select").val()];_&&_.length&&p.length?p.attr("placeholder","Example: "+_):t.ctct_admin_placeholders.default&&p.attr("placeholder",t.ctct_admin_placeholders.default)}}))},n.removeDuplicateMappings=function(){var t=[],n="#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping select",c=e(n);c.each((function(n,c){t.push(e(c).val())})),c.children().show(),t.forEach((function(t){"custom_text_area"!==t&&"custom"!==t&&e(n+" option[value="+t+"]:not( :selected )").hide()}))},e(n.init)}(window,jQuery,window.CTCTBuilder)},function(t,e){window.CTCTForms={},function(t,e,n){n.init=function(){n.cache(),n.bindEvents()},n.cache=function(){n.$c={window:e(t),body:e("body"),disconnect:".ctct-disconnect"}},n.bindEvents=function(){e(n.$c.disconnect).on("click",(function(e){confirm(t.ctctTexts.disconnectconfirm)}))},e(n.init)}(window,jQuery,window.CTCTForms)},function(t,e){window.CTCTModal={},function(t,e,n){n.init=function(){n.cache(),n.bindEvents()},n.cache=function(){n.$c={window:e(t),modalSelector:e(".ctct-modal"),modalClose:e(".ctct-modal-close"),textareaModal:e("#ctct-custom-textarea-modal"),textareaLink:e("#ctct-open-textarea-info"),deleteLogLink:e("#deletelog")}},n.bindEvents=function(){n.$c.modalClose.on("click",(function(){n.$c.modalSelector.removeClass("ctct-modal-open"),n.$c.modalSelector.hasClass("ctct-custom-textarea-modal")||e.ajax({type:"post",dataType:"json",url:t.ajaxurl,data:{action:"ctct_dismiss_first_modal",ctct_is_dismissed:"true"}})})),n.$c.textareaLink.on("click",(function(){n.$c.textareaModal.addClass("ctct-modal-open")})),n.$c.deleteLogLink.on("click",(function(n){n.preventDefault();var c=e(n.currentTarget).attr("href");e("#confirmdelete").dialog({resizable:!1,height:"auto",width:400,modal:!0,buttons:{Yes:function(){t.location.replace(c)},Cancel:function(){e("#confirmdelete").closest(".ui-dialog-content").dialog("close")}}})}))},e(n.init)}(window,jQuery,window.CTCTModal)},function(t,e){var n,c;window.CTCTNewsletter={},window,n=jQuery,(c=window.CTCTNewsletter).init=function(){c.submitNewsletter()},c.submitNewsletter=function(){n(".ctct-body #subscribe").on("submit",(function(t){t.preventDefault();var e=n("#subscribe .ctct-call-to-action"),c=n(".ctct-body #subscribe")[0],o=n('.ctct-call-to-action input[type="text"]')[0],i=t.target.action;!0===o.validity.valid?(n("<iframe>",{src:i+"?"+n(c).serialize(),height:0,width:0,style:"display: none;"}).appendTo(e),n("#subbutton").val("Thanks for signing up").css({"background-color":"rgb(1, 128, 0)",color:"rgb(255,255,255)"}),n("#subscribe .ctct-call-to-action-text").css({width:"70%"})):n("#subbutton").val("Error occurred")})),n(".ctct-section #subscribe").on("submit",(function(t){t.preventDefault();var e=n(".section-marketing-tips"),c=n(".ctct-section #subscribe")[0],o=n('.ctct-section #subscribe input[type="text"]')[0],i=t.target.action;!0===o.validity.valid?(n("<iframe>",{src:i+"?"+n(c).serialize(),height:0,width:0,style:"display: none;"}).appendTo(e),n("#subbutton").val("Thanks for signing up").css({"background-color":"rgb(1, 128, 0)"})):n("#subbutton").val("Error occurred")}))},n(c.init)},function(t,e){var n,c;window.CTCT_OptIns={},window,n=jQuery,(c=window.CTCT_OptIns).init=function(){c.cache(),c.bindEvents()},c.cache=function(){c.$c={optinNoConn:n("#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected"),list:n('#cmb2-metabox-ctct_0_list_metabox [name="_ctct_list[]"]'),title:n("#cmb2-metabox-ctct_1_optin_metabox .cmb2-id-email-optin-title"),optin:n("#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in"),instruct:n("#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in-instructions")}},c.bindEvents=function(){c.$c.optinNoConn.length&&(c.toggleNoConnectionFields(),c.$c.optinNoConn.change((function(){c.toggleNoConnectionFields()}))),c.$c.list.length&&(c.toggleConnectionFields(),c.$c.list.change((function(){c.toggleConnectionFields()})))},c.toggleNoConnectionFields=function(){c.$c.optinNoConn.prop("checked")?c.$c.instruct.slideDown():c.$c.instruct.slideUp()},c.toggleConnectionFields=function(){""!==c.$c.list.val()?(c.$c.title.slideDown(),c.$c.optin.slideDown(),c.$c.instruct.slideDown()):(c.$c.title.slideUp(),c.$c.optin.slideUp(),c.$c.instruct.slideUp())},n(c.init)}]);
|
2 |
//# sourceMappingURL=ctct-plugin-admin.min.js.map
|
assets/js/ctct-plugin-admin.min.js.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/js/ctct-plugin-admin/index.js","webpack:///./assets/js/ctct-plugin-admin/ajax.js","webpack:///./assets/js/ctct-plugin-admin/builder.js","webpack:///./assets/js/ctct-plugin-admin/forms.js","webpack:///./assets/js/ctct-plugin-admin/modal.js","webpack:///./assets/js/ctct-plugin-admin/newsletter.js","webpack:///./assets/js/ctct-plugin-admin/optins.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","CTCTAJAX","$","that","init","handleOptinAJAX","handleReviewAJAX","on","e","ctctOptinAjax","is","ajax","url","ajaxurl","data","dataType","success","response","document","getElementById","remove","error","x","console","log","toggleClass","attr","hide","$checkbox","ctctPrivacyAjax","privacy_agree","ctctAction","hasClass","ctctReviewAjax","resp","preventDefault","jQuery","CTCTBuilder","length","cache","bindEvents","selectBinds","modifyFields","removeClass","append","ctctTexts","move_up","move_down","$c","body","isLeaveWarningBound","bindLeaveWarning","leavewarning","unbindLeaveWarning","unbind","submit","prop","tinyMCE","removeDuplicateMappings","newRow","last","find","val","event","selectFields","textFields","each","this","click","firstOption","children","first","change","foundEmail","$fieldParent","$button","$required","$requiredRow","closest","$map","$mapName","text","$fieldTitle","$labelField","$descField","addClass","show","ctct_admin_placeholders","placeholder","default","usedMappings","dropdowns","$dropdowns","push","forEach","CTCTForms","disconnect","confirm","disconnectconfirm","CTCTModal","app","modalSelector","modalClose","textareaModal","textareaLink","deleteLogLink","type","action","currentTarget","dialog","resizable","height","width","modal","buttons","location","replace","CTCTNewsletter","submitNewsletter","$ctctNewsWrapper","ctctNewsForm","ctctEmailField","subscribeEndpoint","target","validity","valid","serialize","appendTo","css","CTCT_OptIns","optinNoConn","list","title","optin","instruct","toggleNoConnectionFields","toggleConnectionFields","slideDown","slideUp"],"mappings":"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","file":"ctct-plugin-admin.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://testing.test/wp-content/plugins/constant-contact-forms/assets/js/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import './ajax';\nimport './builder';\nimport './forms';\nimport './modal';\nimport './newsletter';\nimport './optins';\n","window.CTCTAJAX = {};\n\n( function( window, $, that ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.init = () => {\n\n\t\t// Trigger any field modifications we need to do.\n\t\tthat.handleOptinAJAX();\n\t\tthat.handleReviewAJAX();\n\t};\n\n\t/**\n\t * We need to manipulate our form builder a bit. We do this here.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.handleOptinAJAX = () => {\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#ctct_admin_notice_tracking_optin' ).on( 'click', ( e ) => {\n\n\t\t\tvar ctctOptinAjax = {\n\t\t\t\t'action': 'constant_contact_optin_ajax_handler',\n\t\t\t\t'optin': ( $( this ).is( ':checked' ) ) ? 'on' : 'off'\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctOptinAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( response ) => {\n\t\t\t\t\t$( document.getElementById( 'ctct-admin-notice-optin_admin_notice' ) ).remove();\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t$( '#ctct-privacy-modal' ).toggleClass( 'ctct-modal-open' );\n\t\t} );\n\n\t\t// Opens the privacy modal once clicking on the checkbox to opt in via the admin notice.\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#ctct-connect-ga-optin a' ).on( 'click', ( e ) => {\n\t\t\tvar ctctOptinAjax = {\n\t\t\t\t'action': 'constant_contact_optin_ajax_handler',\n\t\t\t\t'optin': $( this ).attr( 'data-allow' )\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctOptinAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( response ) => { // eslint-disable-line no-unused-vars\n\t\t\t\t\t$( '.ctct-connected-opt-in' ).hide();\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#_ctct_data_tracking' ).on( 'click', ( e ) => {\n\t\t\t$( '#ctct-privacy-modal' ).toggleClass( 'ctct-modal-open' );\n\t\t} );\n\n\t\t// Unchecks the value if they have closed the privacy modal without agreeing/disagreeing.\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '.ctct-modal-close' ).on( 'click', ( e ) => {\n\t\t\tvar $checkbox = $( '#_ctct_data_tracking' );\n\t\t\tif ( $checkbox.is( ':checked' ) ) {\n\t\t\t\t$checkbox.attr( 'checked', false );\n\t\t\t}\n\t\t} );\n\n\t\t// Handle the agreeing or disagreeing regarding privacy modal.\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#ctct-modal-footer-privacy a' ).on( 'click', ( e ) => {\n\t\t\tvar ctctPrivacyAjax = {\n\t\t\t\t'action': 'constant_contact_privacy_ajax_handler',\n\t\t\t\t'privacy_agree': $( this ).attr( 'data-agree' )\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctPrivacyAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( response ) => { // eslint-disable-line no-unused-vars\n\t\t\t\t\t$( '#ctct-privacy-modal' ).toggleClass( 'ctct-modal-open' );\n\t\t\t\t\tif ( 'false' === ctctPrivacyAjax.privacy_agree ) {\n\t\t\t\t\t\tvar $checkbox = $( '#_ctct_data_tracking' );\n\t\t\t\t\t\tif ( $checkbox.is( ':checked' ) ) {\n\t\t\t\t\t\t\t$checkbox.attr( 'checked', false );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t};\n\n\t// Handle saving the decision regarding the review prompt admin notice.\n\tthat.handleReviewAJAX = () => {\n\t\t$( '#ctct-admin-notice-review_request' ).on( 'click', 'a', ( e ) => {\n\n\t\t\tvar ctctAction = 'dismissed';\n\n\t\t\tif ( $( this ).hasClass( 'ctct-review' ) ) {\n\t\t\t\tctctAction = 'reviewed';\n\t\t\t}\n\n\t\t\tvar ctctReviewAjax = {\n\t\t\t\t'action': 'constant_contact_review_ajax_handler',\n\t\t\t\t'ctct-review-action': ctctAction\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctReviewAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( resp ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( resp ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t$( '#ctct-admin-notice-review_request' ).hide();\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t};\n\n\t$( that.init );\n\n} ( window, jQuery, window.CTCTAJAX ) );\n","window.CTCTBuilder = {};\n\n( function( window, $, that ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.init = () => {\n\n\t\t// If we do actually have an email field set, then remove our error.\n\t\tif ( $( '#cmb2-metabox-ctct_2_fields_metabox option[value=\"email\"]:selected' ).length ) {\n\t\t\t$( '#ctct-no-email-error' ).remove();\n\t\t}\n\n\t\t// Cache it all.\n\t\tthat.cache();\n\n\t\t// Bind our events.\n\t\tthat.bindEvents();\n\n\t\t// Bind our select dropdown events.\n\t\tthat.selectBinds();\n\n\t\t// Trigger any field modifications we need to do.\n\t\tthat.modifyFields();\n\n\t\t// Make description non-draggable, so we don't run into weird cmb2 issues.\n\t\t$( '#ctct_0_description_metabox h2.hndle' ).removeClass( 'ui-sortable-handle, hndle' );\n\n\t\t// Inject our new labels for the up/down CMB2 buttons, so they can be properly localized.\n\t\t// Because we're using :after, we can't use .css() to do this, we need to inject a style tag.\n\t\t$( 'head' ).append( '<style> #cmb2-metabox-ctct_2_fields_metabox a.move-up::after { content: \"' + window.ctctTexts.move_up + '\" } #cmb2-metabox-ctct_2_fields_metabox a.move-down::after { content: \"' + window.ctctTexts.move_down + '\" }</style>' );\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.cache = () => {\n\n\t\tthat.$c = {\n\t\t\twindow: $( window ),\n\t\t\tbody: $( 'body' )\n\t\t};\n\n\t\tthat.isLeaveWarningBound = false;\n\t};\n\n\t// Triggers our leave warning if we modify things in the form.\n\tthat.bindLeaveWarning = () => {\n\n\t\t// Don't double-bind it.\n\t\tif ( ! that.isLeaveWarningBound ) {\n\n\t\t\t// Bind our error that displays before leaving page.\n\t\t\t$( window ).bind( 'beforeunload', () => {\n\t\t\t\treturn window.ctctTexts.leavewarning;\n\t\t\t} );\n\n\t\t\t// Save our state.\n\t\t\tthat.isLeaveWarningBound = true;\n\t\t}\n\t};\n\n\t/**\n\t * Removes our binding of our leave warning.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.unbindLeaveWarning = () => {\n\t\t$( window ).unbind( 'beforeunload' );\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.bindEvents = () => {\n\n\t\t$( '#post' ).submit( () => {\n\n\t\t\t// Make sure our email dropdown reverts from disbled, as CMB2 doesn't save those values.\n\t\t\t$( '.ctct-email-disabled' ).removeClass( 'disabled' ).prop( 'disabled', false );\n\n\t\t\tthat.unbindLeaveWarning();\n\t\t} );\n\n\t\t$( '.cmb2-wrap input, .cmb2-wrap textarea' ).on( 'input', () => {\n\t\t\tif ( 'undefined' !== typeof( tinyMCE ) ) {\n\t\t\t\tthat.bindLeaveWarning();\n\t\t\t}\n\t\t} );\n\n\t\t// Disable email options on row change trigger.\n\t\t$( document ).on( 'cmb2_shift_rows_complete', () => {\n\t\t\tthat.modifyFields();\n\t\t\tthat.bindLeaveWarning();\n\t\t\tthat.removeDuplicateMappings();\n\t\t} );\n\n\t\t// If we get a row added, then do our stuff.\n\t\t$( document ).on( 'cmb2_add_row', ( newRow ) => { // eslint-disable-line no-unused-vars\n\n\t\t\t// Automatically set new rows to be 'custom' field type.\n\t\t\t$( '#custom_fields_group_repeat .postbox' ).last().find( '.map select' ).val( 'none' );\n\n\t\t\tthat.modifyFields();\n\t\t\tthat.selectBinds();\n\t\t\tthat.removeDuplicateMappings();\n\t\t} );\n\n\t\tthat.removeDuplicateMappings();\n\n\t\t$( '#ctct-reset-css' ).on( 'click', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar selectFields = [\n\t\t\t\t'#_ctct_form_description_font_size',\n\t\t\t\t'#_ctct_form_submit_button_font_size',\n\t\t\t\t'#_ctct_form_label_placement'\n\t\t\t];\n\n\t\t\tvar textFields = [\n\t\t\t\t'#_ctct_form_padding_top',\n\t\t\t\t'#_ctct_form_padding_bottom',\n\t\t\t\t'#_ctct_form_padding_left',\n\t\t\t\t'#_ctct_form_padding_right',\n\t\t\t\t'#_ctct_input_custom_classes'\n\t\t\t];\n\n\t\t\t// Reset color pickers.\n\t\t\t$( '.wp-picker-clear' ).each( function() {\n\t\t\t\t$( this ).click();\n\t\t\t} );\n\n\t\t\tfor ( var i = selectFields.length; i--; ) {\n\t\t\t\tvar firstOption = $( selectFields[i] ).children( 'option' ).first();\n\t\t\t\t$( selectFields[i] ).val( firstOption.val() );\n\t\t\t}\n\n\t\t\tfor ( var i = textFields.length; i--; ) {\n\t\t\t\t$( textFields[i] ).val( '' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * When .cmb2_select <selects> get changed, do some actions.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.selectBinds = () => {\n\n\t\t// For each fields select.\n\t\t$( '#cmb2-metabox-ctct_2_fields_metabox .cmb2_select' ).change( () => {\n\n\t\t\t// Modify our fields.\n\t\t\tthat.modifyFields();\n\n\t\t\t// Don't allow duplicate mappings in form.\n\t\t\tthat.removeDuplicateMappings();\n\n\t\t\t// Bind our leave warning.\n\t\t\tthat.bindLeaveWarning();\n\t\t} );\n\t};\n\n\t/**\n\t * We need to manipulate our form builder a bit. We do this here.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.modifyFields = () => {\n\n\t\t// Set that we haven't found an email.\n\t\tvar foundEmail = false;\n\n\t\t// Loop through all fields to modify them.\n\t\t$( '#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping' ).each( function( key, value ) {\n\n\t\t\t// Set some of our helper paramaters.\n\t\t\tvar $fieldParent = $( this ).find( '.cmb-field-list' );\n\t\t\tvar $button = $( $fieldParent ).find( '.cmb-remove-group-row' );\n\t\t\tvar $required = $( $fieldParent ).find( '.required input[type=checkbox]' );\n\t\t\tvar $requiredRow = $required.closest( '.cmb-row' );\n\t\t\tvar $map = $( $fieldParent ).find( '.map select option:selected' );\n\t\t\tvar $mapName = $map.text();\n\t\t\tvar $fieldTitle = $( this ).find( 'h3' );\n\t\t\tvar $labelField = $( this ).find( 'input[name*=\"_ctct_field_label\"]' );\n\t\t\tvar $descField = $( this ).find( 'input[name*=\"_ctct_field_desc\"]' );\n\n\t\t\t// Set our field row to be the name of the selected option.\n\t\t\t$fieldTitle.text( $mapName );\n\n\t\t\t// If we have a blank field label, then use the name of the field to fill it in.\n\t\t\tif ( 0 === $labelField.val().length ) {\n\t\t\t\t$labelField.val( $mapName ).addClass( 'ctct-label-filled' );\n\t\t\t} else {\n\t\t\t\t$labelField.addClass( 'ctct-label-filled' );\n\t\t\t}\n\n\t\t\t// If we haven't yet found an email field, and this is our email field.\n\t\t\tif ( ! foundEmail && ( 'email' === $( $map ).val() ) ) {\n\n\t\t\t\t// Set that we found an email field.\n\t\t\t\tfoundEmail = true;\n\n\t\t\t\t// Make it required.\n\t\t\t\t$required.prop( 'checked', true );\n\n\t\t\t\t// Set it to be 'disabled'.\n\t\t\t\t$( value ).find( 'select' ).addClass( 'disabled ctct-email-disabled' ).prop( 'disabled', true );\n\n\t\t\t\t// Hide the required row.\n\t\t\t\t$requiredRow.hide();\n\n\t\t\t\t// Hide the remove row button.\n\t\t\t\t$button.hide();\n\n\t\t\t} else {\n\n\t\t\t\t// Verify its not disabled.\n\t\t\t\t$( value ).find( 'select' ).removeClass( 'disabled ctct-email-disabled' ).prop( 'disabled', false );\n\n\t\t\t\t// If we're not an email field, reshow the required field.\n\t\t\t\t$requiredRow.show();\n\n\t\t\t\t// and the remove button.\n\t\t\t\t$button.show();\n\t\t\t}\n\n\t\t\t// Set the placeholder text if there's something to set.\n\t\t\tif ( window.ctct_admin_placeholders ) {\n\t\t\t\tvar placeholder = window.ctct_admin_placeholders[ $( value ).find( 'select' ).val() ];\n\n\t\t\t\t// If we have a valid placeholder, display it or try the fallback.\n\t\t\t\tif ( placeholder && placeholder.length && $descField.length ) {\n\t\t\t\t\t$descField.attr( 'placeholder', 'Example: ' + placeholder );\n\t\t\t\t} else if ( window.ctct_admin_placeholders.default ) {\n\t\t\t\t\t$descField.attr( 'placeholder', window.ctct_admin_placeholders.default );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Go through all dropdowns, and remove used options.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.removeDuplicateMappings = () => {\n\n\t\tvar usedMappings = [];\n\t\tvar dropdowns = '#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping select';\n\t\tvar $dropdowns = $( dropdowns );\n\n\t\t// For each dropdown, build up our array of used values.\n\t\t$dropdowns.each( function( key, value ) {\n\t\t\tusedMappings.push( $( value ).val() );\n\t\t} );\n\n\t\t// Re-show all the children options we may have hidden.\n\t\t$dropdowns.children().show();\n\n\t\t// For each of our mappings that we already have, remove them from all selects.\n\t\tusedMappings.forEach( function( value ) {\n\n\t\t\t// But only do it if the value isn't one of our custom ones.\n\t\t\tif ( ( 'custom_text_area' !== value ) && ( 'custom' !== value ) ) {\n\n\t\t\t\t// Remove all options from our dropdowns with the value.\n\t\t\t\t$( dropdowns + ' option[value=' + value + ']:not( :selected )' ).hide();\n\t\t\t}\n\t\t} );\n\t};\n\n\t$( that.init );\n\n} ( window, jQuery, window.CTCTBuilder ) );\n","window.CTCTForms = {};\n\n( function( window, $, that ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.init = () => {\n\t\tthat.cache();\n\t\tthat.bindEvents();\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.cache = () => {\n\t\tthat.$c = {\n\t\t\twindow: $( window ),\n\t\t\tbody: $( 'body' ),\n\t\t\tdisconnect: '.ctct-disconnect'\n\t\t};\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.bindEvents = () => {\n\n\t\t$( that.$c.disconnect ).on( 'click', ( e ) => { // eslint-disable-line no-unused-vars\n\t\t\tconfirm( window.ctctTexts.disconnectconfirm );\n\t\t} );\n\t};\n\n\t$( that.init );\n\n} ( window, jQuery, window.CTCTForms ) );\n","window.CTCTModal = {};\n\n( function( window, $, app ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.init = () => {\n\t\tapp.cache();\n\t\tapp.bindEvents();\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.cache = () => {\n\t\tapp.$c = {\n\t\t\twindow: $( window ),\n\t\t\tmodalSelector: $( '.ctct-modal' ),\n\t\t\tmodalClose: $( '.ctct-modal-close' ),\n\t\t\ttextareaModal: $( '#ctct-custom-textarea-modal' ),\n\t\t\ttextareaLink: $( '#ctct-open-textarea-info' ),\n\t\t\tdeleteLogLink: $( '#deletelog' )\n\t\t};\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.bindEvents = () => {\n\n\t\tapp.$c.modalClose.on( 'click', () => {\n\n\t\t\tapp.$c.modalSelector.removeClass( 'ctct-modal-open' );\n\n\t\t\tif ( app.$c.modalSelector.hasClass( 'ctct-custom-textarea-modal' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.ajax( {\n\t\t\t\ttype: 'post',\n\t\t\t\tdataType: 'json',\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'ctct_dismiss_first_modal',\n\t\t\t\t\t'ctct_is_dismissed': 'true'\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\tapp.$c.textareaLink.on( 'click', () => {\n\t\t\tapp.$c.textareaModal.addClass( 'ctct-modal-open' );\n\t\t} );\n\n\t\tapp.$c.deleteLogLink.on( 'click', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\t// Get the link that was clicked on so we can redirect to it if the user confirms.\n\t\t\tvar deleteLogLink = $( event.currentTarget ).attr( 'href' );\n\n\t\t\t$( '#confirmdelete' ).dialog( {\n\t\t\t\tresizable: false,\n\t\t\t\theight: 'auto',\n\t\t\t\twidth: 400,\n\t\t\t\tmodal: true,\n\t\t\t\tbuttons: {\n\t\t\t\t\t'Yes': () => {\n\n\t\t\t\t\t\t// If the user confirms the action, redirect them to the deletion page.\n\t\t\t\t\t\twindow.location.replace( deleteLogLink );\n\t\t\t\t\t},\n\t\t\t\t\t'Cancel': () => {\n\t\t\t\t\t\t$( '#confirmdelete' ).closest( '.ui-dialog-content' ).dialog( 'close' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t};\n\n\t$( app.init );\n\n} ( window, jQuery, window.CTCTModal ) );\n","window.CTCTNewsletter = {};\n\n( function( window, $, app ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.init = () => {\n\t\tapp.submitNewsletter();\n\t};\n\n\t/**\n\t * Handle newsletter signups on the \"Connect\" and \"About\" pages.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.submitNewsletter = () => {\n\n\t\t// Connect page.\n\t\t$( '.ctct-body #subscribe' ).on( 'submit', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar $ctctNewsWrapper = $( '#subscribe .ctct-call-to-action' );\n\t\t\tvar ctctNewsForm = $( '.ctct-body #subscribe' )[0];\n\t\t\tvar ctctEmailField = $( '.ctct-call-to-action input[type=\"text\"]' )[0];\n\t\t\tvar subscribeEndpoint = event.target.action;\n\n\t\t\tif ( true === ctctEmailField.validity.valid ) {\n\t\t\t\t$( '<iframe>', {\n\t\t\t\t\t'src': subscribeEndpoint + '?' + $( ctctNewsForm ).serialize(),\n\t\t\t\t\t'height': 0,\n\t\t\t\t\t'width': 0,\n\t\t\t\t\t'style': 'display: none;'\n\t\t\t\t} ).appendTo( $ctctNewsWrapper );\n\n\t\t\t\t$( '#subbutton' ).val( 'Thanks for signing up' ).css( { 'background-color': 'rgb(1, 128, 0)', 'color': 'rgb(255,255,255)' } );\n\t\t\t\t$( '#subscribe .ctct-call-to-action-text' ).css( { 'width': '70%' } );\n\t\t\t} else {\n\t\t\t\t$( '#subbutton' ).val( 'Error occurred' );\n\t\t\t}\n\t\t} );\n\n\t\t// About page.\n\t\t$( '.ctct-section #subscribe' ).on( 'submit', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar $ctctNewsWrapper = $( '.section-marketing-tips' );\n\t\t\tvar ctctNewsForm = $( '.ctct-section #subscribe' )[0];\n\t\t\tvar ctctEmailField = $( '.ctct-section #subscribe input[type=\"text\"]' )[0];\n\t\t\tvar subscribeEndpoint = event.target.action;\n\n\t\t\tif ( true === ctctEmailField.validity.valid ) {\n\t\t\t\t$( '<iframe>', {\n\t\t\t\t\t'src': subscribeEndpoint + '?' + $( ctctNewsForm ).serialize(),\n\t\t\t\t\t'height': 0,\n\t\t\t\t\t'width': 0,\n\t\t\t\t\t'style': 'display: none;'\n\t\t\t\t} ).appendTo( $ctctNewsWrapper );\n\t\t\t\t$( '#subbutton' ).val( 'Thanks for signing up' ).css( { 'background-color': 'rgb(1, 128, 0)' } );\n\t\t\t} else {\n\t\t\t\t$( '#subbutton' ).val( 'Error occurred' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t$( app.init );\n\n} ( window, jQuery, window.CTCTNewsletter ) );\n","window.CTCT_OptIns = {};\n\n( function( window, $, app ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.init = () => {\n\t\tapp.cache();\n\t\tapp.bindEvents();\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.cache = () => {\n\t\tapp.$c = {\n\t\t\toptinNoConn: $( '#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected' ),\n\t\t\tlist: $( '#cmb2-metabox-ctct_0_list_metabox #_ctct_list' ),\n\t\t\ttitle: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id-email-optin-title' ),\n\t\t\toptin: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in' ),\n\t\t\tinstruct: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in-instructions' )\n\t\t};\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.bindEvents = () => {\n\n\t\t// Only fire show/hide if we have the normal checkbox.\n\t\tif ( app.$c.optinNoConn.length ) {\n\n\t\t\t// Fire once to get our loaded state set up.\n\t\t\tapp.toggleNoConnectionFields();\n\n\t\t\t// Bind to fire when needed.\n\t\t\tapp.$c.optinNoConn.change( () => {\n\t\t\t\tapp.toggleNoConnectionFields();\n\t\t\t} );\n\t\t}\n\n\t\t// Only fire show/hide if we have the normal checkbox.\n\t\tif ( app.$c.list.length ) {\n\n\t\t\t// Fire once to get our loaded state set up.\n\t\t\tapp.toggleConnectionFields();\n\n\t\t\t// Bind to fire when needed.\n\t\t\tapp.$c.list.change( () => {\n\t\t\t\tapp.toggleConnectionFields();\n\t\t\t} );\n\t\t}\n\t};\n\n\t/**\n\t * Toggle unnecessary, unconnected optin fields if we're not showing the opt-in.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.toggleNoConnectionFields = () => {\n\n\t\tif ( app.$c.optinNoConn.prop( 'checked' ) ) {\n\t\t\tapp.$c.instruct.slideDown();\n\t\t} else {\n\t\t\tapp.$c.instruct.slideUp();\n\t\t}\n\t};\n\n\t/**\n\t * Toggle unnecessary, *connected* optin fields if we're not showing the opt-in.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.toggleConnectionFields = () => {\n\n\t\t// If checked, show them, else hide it.\n\t\tif ( '' !== app.$c.list.val() ) {\n\t\t\tapp.$c.title.slideDown();\n\t\t\tapp.$c.optin.slideDown();\n\t\t\tapp.$c.instruct.slideDown();\n\t\t} else {\n\t\t\tapp.$c.title.slideUp();\n\t\t\tapp.$c.optin.slideUp();\n\t\t\tapp.$c.instruct.slideUp();\n\t\t}\n\t};\n\n\t$( app.init );\n\n} ( window, jQuery, window.CTCT_OptIns ) );\n"],"sourceRoot":""}
|
1 |
+
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/js/ctct-plugin-admin/index.js","webpack:///./assets/js/ctct-plugin-admin/ajax.js","webpack:///./assets/js/ctct-plugin-admin/builder.js","webpack:///./assets/js/ctct-plugin-admin/forms.js","webpack:///./assets/js/ctct-plugin-admin/modal.js","webpack:///./assets/js/ctct-plugin-admin/newsletter.js","webpack:///./assets/js/ctct-plugin-admin/optins.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","CTCTAJAX","$","that","init","handleOptinAJAX","handleReviewAJAX","on","e","ctctOptinAjax","is","ajax","url","ajaxurl","data","dataType","success","response","document","getElementById","remove","error","x","console","log","toggleClass","attr","hide","$checkbox","ctctPrivacyAjax","privacy_agree","ctctAction","hasClass","ctctReviewAjax","resp","preventDefault","jQuery","CTCTBuilder","length","cache","bindEvents","selectBinds","modifyFields","removeClass","append","ctctTexts","move_up","move_down","$c","body","isLeaveWarningBound","bindLeaveWarning","leavewarning","unbindLeaveWarning","unbind","submit","prop","tinyMCE","removeDuplicateMappings","newRow","last","find","val","event","selectFields","textFields","each","this","click","firstOption","children","first","change","foundEmail","$fieldParent","$button","$required","$requiredRow","closest","$map","$mapName","text","$fieldTitle","$labelField","$descField","addClass","show","ctct_admin_placeholders","placeholder","default","usedMappings","dropdowns","$dropdowns","push","forEach","CTCTForms","disconnect","confirm","disconnectconfirm","CTCTModal","app","modalSelector","modalClose","textareaModal","textareaLink","deleteLogLink","type","action","currentTarget","dialog","resizable","height","width","modal","buttons","location","replace","CTCTNewsletter","submitNewsletter","$ctctNewsWrapper","ctctNewsForm","ctctEmailField","subscribeEndpoint","target","validity","valid","serialize","appendTo","css","CTCT_OptIns","optinNoConn","list","title","optin","instruct","toggleNoConnectionFields","toggleConnectionFields","slideDown","slideUp"],"mappings":"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","file":"ctct-plugin-admin.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://testing.test/wp-content/plugins/constant-contact-forms/assets/js/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import './ajax';\nimport './builder';\nimport './forms';\nimport './modal';\nimport './newsletter';\nimport './optins';\n","window.CTCTAJAX = {};\n\n( function( window, $, that ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.init = () => {\n\n\t\t// Trigger any field modifications we need to do.\n\t\tthat.handleOptinAJAX();\n\t\tthat.handleReviewAJAX();\n\t};\n\n\t/**\n\t * We need to manipulate our form builder a bit. We do this here.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.handleOptinAJAX = () => {\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#ctct_admin_notice_tracking_optin' ).on( 'click', ( e ) => {\n\n\t\t\tvar ctctOptinAjax = {\n\t\t\t\t'action': 'constant_contact_optin_ajax_handler',\n\t\t\t\t'optin': ( $( this ).is( ':checked' ) ) ? 'on' : 'off'\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctOptinAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( response ) => {\n\t\t\t\t\t$( document.getElementById( 'ctct-admin-notice-optin_admin_notice' ) ).remove();\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t$( '#ctct-privacy-modal' ).toggleClass( 'ctct-modal-open' );\n\t\t} );\n\n\t\t// Opens the privacy modal once clicking on the checkbox to opt in via the admin notice.\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#ctct-connect-ga-optin a' ).on( 'click', ( e ) => {\n\t\t\tvar ctctOptinAjax = {\n\t\t\t\t'action': 'constant_contact_optin_ajax_handler',\n\t\t\t\t'optin': $( this ).attr( 'data-allow' )\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctOptinAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( response ) => { // eslint-disable-line no-unused-vars\n\t\t\t\t\t$( '.ctct-connected-opt-in' ).hide();\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#_ctct_data_tracking' ).on( 'click', ( e ) => {\n\t\t\t$( '#ctct-privacy-modal' ).toggleClass( 'ctct-modal-open' );\n\t\t} );\n\n\t\t// Unchecks the value if they have closed the privacy modal without agreeing/disagreeing.\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '.ctct-modal-close' ).on( 'click', ( e ) => {\n\t\t\tvar $checkbox = $( '#_ctct_data_tracking' );\n\t\t\tif ( $checkbox.is( ':checked' ) ) {\n\t\t\t\t$checkbox.attr( 'checked', false );\n\t\t\t}\n\t\t} );\n\n\t\t// Handle the agreeing or disagreeing regarding privacy modal.\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t$( '#ctct-modal-footer-privacy a' ).on( 'click', ( e ) => {\n\t\t\tvar ctctPrivacyAjax = {\n\t\t\t\t'action': 'constant_contact_privacy_ajax_handler',\n\t\t\t\t'privacy_agree': $( this ).attr( 'data-agree' )\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctPrivacyAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( response ) => { // eslint-disable-line no-unused-vars\n\t\t\t\t\t$( '#ctct-privacy-modal' ).toggleClass( 'ctct-modal-open' );\n\t\t\t\t\tif ( 'false' === ctctPrivacyAjax.privacy_agree ) {\n\t\t\t\t\t\tvar $checkbox = $( '#_ctct_data_tracking' );\n\t\t\t\t\t\tif ( $checkbox.is( ':checked' ) ) {\n\t\t\t\t\t\t\t$checkbox.attr( 'checked', false );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t};\n\n\t// Handle saving the decision regarding the review prompt admin notice.\n\tthat.handleReviewAJAX = () => {\n\t\t$( '#ctct-admin-notice-review_request' ).on( 'click', 'a', ( e ) => {\n\n\t\t\tvar ctctAction = 'dismissed';\n\n\t\t\tif ( $( this ).hasClass( 'ctct-review' ) ) {\n\t\t\t\tctctAction = 'reviewed';\n\t\t\t}\n\n\t\t\tvar ctctReviewAjax = {\n\t\t\t\t'action': 'constant_contact_review_ajax_handler',\n\t\t\t\t'ctct-review-action': ctctAction\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: ctctReviewAjax,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: ( resp ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( resp ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t$( '#ctct-admin-notice-review_request' ).hide();\n\t\t\t\t},\n\t\t\t\terror: ( x, t, m ) => {\n\t\t\t\t\tif ( window.console ) {\n\t\t\t\t\t\tconsole.log( [ t, m ] ); // eslint-disable-line no-console\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t};\n\n\t$( that.init );\n\n} ( window, jQuery, window.CTCTAJAX ) );\n","window.CTCTBuilder = {};\n\n( function( window, $, that ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.init = () => {\n\n\t\t// If we do actually have an email field set, then remove our error.\n\t\tif ( $( '#cmb2-metabox-ctct_2_fields_metabox option[value=\"email\"]:selected' ).length ) {\n\t\t\t$( '#ctct-no-email-error' ).remove();\n\t\t}\n\n\t\t// Cache it all.\n\t\tthat.cache();\n\n\t\t// Bind our events.\n\t\tthat.bindEvents();\n\n\t\t// Bind our select dropdown events.\n\t\tthat.selectBinds();\n\n\t\t// Trigger any field modifications we need to do.\n\t\tthat.modifyFields();\n\n\t\t// Make description non-draggable, so we don't run into weird cmb2 issues.\n\t\t$( '#ctct_0_description_metabox h2.hndle' ).removeClass( 'ui-sortable-handle, hndle' );\n\n\t\t// Inject our new labels for the up/down CMB2 buttons, so they can be properly localized.\n\t\t// Because we're using :after, we can't use .css() to do this, we need to inject a style tag.\n\t\t$( 'head' ).append( '<style> #cmb2-metabox-ctct_2_fields_metabox a.move-up::after { content: \"' + window.ctctTexts.move_up + '\" } #cmb2-metabox-ctct_2_fields_metabox a.move-down::after { content: \"' + window.ctctTexts.move_down + '\" }</style>' );\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.cache = () => {\n\n\t\tthat.$c = {\n\t\t\twindow: $( window ),\n\t\t\tbody: $( 'body' )\n\t\t};\n\n\t\tthat.isLeaveWarningBound = false;\n\t};\n\n\t// Triggers our leave warning if we modify things in the form.\n\tthat.bindLeaveWarning = () => {\n\n\t\t// Don't double-bind it.\n\t\tif ( ! that.isLeaveWarningBound ) {\n\n\t\t\t// Bind our error that displays before leaving page.\n\t\t\t$( window ).bind( 'beforeunload', () => {\n\t\t\t\treturn window.ctctTexts.leavewarning;\n\t\t\t} );\n\n\t\t\t// Save our state.\n\t\t\tthat.isLeaveWarningBound = true;\n\t\t}\n\t};\n\n\t/**\n\t * Removes our binding of our leave warning.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.unbindLeaveWarning = () => {\n\t\t$( window ).unbind( 'beforeunload' );\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.bindEvents = () => {\n\n\t\t$( '#post' ).submit( () => {\n\n\t\t\t// Make sure our email dropdown reverts from disbled, as CMB2 doesn't save those values.\n\t\t\t$( '.ctct-email-disabled' ).removeClass( 'disabled' ).prop( 'disabled', false );\n\n\t\t\tthat.unbindLeaveWarning();\n\t\t} );\n\n\t\t$( '.cmb2-wrap input, .cmb2-wrap textarea' ).on( 'input', () => {\n\t\t\tif ( 'undefined' !== typeof( tinyMCE ) ) {\n\t\t\t\tthat.bindLeaveWarning();\n\t\t\t}\n\t\t} );\n\n\t\t// Disable email options on row change trigger.\n\t\t$( document ).on( 'cmb2_shift_rows_complete', () => {\n\t\t\tthat.modifyFields();\n\t\t\tthat.bindLeaveWarning();\n\t\t\tthat.removeDuplicateMappings();\n\t\t} );\n\n\t\t// If we get a row added, then do our stuff.\n\t\t$( document ).on( 'cmb2_add_row', ( newRow ) => { // eslint-disable-line no-unused-vars\n\n\t\t\t// Automatically set new rows to be 'custom' field type.\n\t\t\t$( '#custom_fields_group_repeat .postbox' ).last().find( '.map select' ).val( 'none' );\n\n\t\t\tthat.modifyFields();\n\t\t\tthat.selectBinds();\n\t\t\tthat.removeDuplicateMappings();\n\t\t} );\n\n\t\tthat.removeDuplicateMappings();\n\n\t\t$( '#ctct-reset-css' ).on( 'click', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar selectFields = [\n\t\t\t\t'#_ctct_form_description_font_size',\n\t\t\t\t'#_ctct_form_submit_button_font_size',\n\t\t\t\t'#_ctct_form_label_placement'\n\t\t\t];\n\n\t\t\tvar textFields = [\n\t\t\t\t'#_ctct_form_padding_top',\n\t\t\t\t'#_ctct_form_padding_bottom',\n\t\t\t\t'#_ctct_form_padding_left',\n\t\t\t\t'#_ctct_form_padding_right',\n\t\t\t\t'#_ctct_input_custom_classes'\n\t\t\t];\n\n\t\t\t// Reset color pickers.\n\t\t\t$( '.wp-picker-clear' ).each( function() {\n\t\t\t\t$( this ).click();\n\t\t\t} );\n\n\t\t\tfor ( var i = selectFields.length; i--; ) {\n\t\t\t\tvar firstOption = $( selectFields[i] ).children( 'option' ).first();\n\t\t\t\t$( selectFields[i] ).val( firstOption.val() );\n\t\t\t}\n\n\t\t\tfor ( var i = textFields.length; i--; ) {\n\t\t\t\t$( textFields[i] ).val( '' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * When .cmb2_select <selects> get changed, do some actions.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.selectBinds = () => {\n\n\t\t// For each fields select.\n\t\t$( '#cmb2-metabox-ctct_2_fields_metabox .cmb2_select' ).change( () => {\n\n\t\t\t// Modify our fields.\n\t\t\tthat.modifyFields();\n\n\t\t\t// Don't allow duplicate mappings in form.\n\t\t\tthat.removeDuplicateMappings();\n\n\t\t\t// Bind our leave warning.\n\t\t\tthat.bindLeaveWarning();\n\t\t} );\n\t};\n\n\t/**\n\t * We need to manipulate our form builder a bit. We do this here.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.modifyFields = () => {\n\n\t\t// Set that we haven't found an email.\n\t\tvar foundEmail = false;\n\n\t\t// Loop through all fields to modify them.\n\t\t$( '#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping' ).each( function( key, value ) {\n\n\t\t\t// Set some of our helper paramaters.\n\t\t\tvar $fieldParent = $( this ).find( '.cmb-field-list' );\n\t\t\tvar $button = $( $fieldParent ).find( '.cmb-remove-group-row' );\n\t\t\tvar $required = $( $fieldParent ).find( '.required input[type=checkbox]' );\n\t\t\tvar $requiredRow = $required.closest( '.cmb-row' );\n\t\t\tvar $map = $( $fieldParent ).find( '.map select option:selected' );\n\t\t\tvar $mapName = $map.text();\n\t\t\tvar $fieldTitle = $( this ).find( 'h3' );\n\t\t\tvar $labelField = $( this ).find( 'input[name*=\"_ctct_field_label\"]' );\n\t\t\tvar $descField = $( this ).find( 'input[name*=\"_ctct_field_desc\"]' );\n\n\t\t\t// Set our field row to be the name of the selected option.\n\t\t\t$fieldTitle.text( $mapName );\n\n\t\t\t// If we have a blank field label, then use the name of the field to fill it in.\n\t\t\tif ( 0 === $labelField.val().length ) {\n\t\t\t\t$labelField.val( $mapName ).addClass( 'ctct-label-filled' );\n\t\t\t} else {\n\t\t\t\t$labelField.addClass( 'ctct-label-filled' );\n\t\t\t}\n\n\t\t\t// If we haven't yet found an email field, and this is our email field.\n\t\t\tif ( ! foundEmail && ( 'email' === $( $map ).val() ) ) {\n\n\t\t\t\t// Set that we found an email field.\n\t\t\t\tfoundEmail = true;\n\n\t\t\t\t// Make it required.\n\t\t\t\t$required.prop( 'checked', true );\n\n\t\t\t\t// Set it to be 'disabled'.\n\t\t\t\t$( value ).find( 'select' ).addClass( 'disabled ctct-email-disabled' ).prop( 'disabled', true );\n\n\t\t\t\t// Hide the required row.\n\t\t\t\t$requiredRow.hide();\n\n\t\t\t\t// Hide the remove row button.\n\t\t\t\t$button.hide();\n\n\t\t\t} else {\n\n\t\t\t\t// Verify its not disabled.\n\t\t\t\t$( value ).find( 'select' ).removeClass( 'disabled ctct-email-disabled' ).prop( 'disabled', false );\n\n\t\t\t\t// If we're not an email field, reshow the required field.\n\t\t\t\t$requiredRow.show();\n\n\t\t\t\t// and the remove button.\n\t\t\t\t$button.show();\n\t\t\t}\n\n\t\t\t// Set the placeholder text if there's something to set.\n\t\t\tif ( window.ctct_admin_placeholders ) {\n\t\t\t\tvar placeholder = window.ctct_admin_placeholders[ $( value ).find( 'select' ).val() ];\n\n\t\t\t\t// If we have a valid placeholder, display it or try the fallback.\n\t\t\t\tif ( placeholder && placeholder.length && $descField.length ) {\n\t\t\t\t\t$descField.attr( 'placeholder', 'Example: ' + placeholder );\n\t\t\t\t} else if ( window.ctct_admin_placeholders.default ) {\n\t\t\t\t\t$descField.attr( 'placeholder', window.ctct_admin_placeholders.default );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Go through all dropdowns, and remove used options.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.removeDuplicateMappings = () => {\n\n\t\tvar usedMappings = [];\n\t\tvar dropdowns = '#cmb2-metabox-ctct_2_fields_metabox #custom_fields_group_repeat .cmb-repeatable-grouping select';\n\t\tvar $dropdowns = $( dropdowns );\n\n\t\t// For each dropdown, build up our array of used values.\n\t\t$dropdowns.each( function( key, value ) {\n\t\t\tusedMappings.push( $( value ).val() );\n\t\t} );\n\n\t\t// Re-show all the children options we may have hidden.\n\t\t$dropdowns.children().show();\n\n\t\t// For each of our mappings that we already have, remove them from all selects.\n\t\tusedMappings.forEach( function( value ) {\n\n\t\t\t// But only do it if the value isn't one of our custom ones.\n\t\t\tif ( ( 'custom_text_area' !== value ) && ( 'custom' !== value ) ) {\n\n\t\t\t\t// Remove all options from our dropdowns with the value.\n\t\t\t\t$( dropdowns + ' option[value=' + value + ']:not( :selected )' ).hide();\n\t\t\t}\n\t\t} );\n\t};\n\n\t$( that.init );\n\n} ( window, jQuery, window.CTCTBuilder ) );\n","window.CTCTForms = {};\n\n( function( window, $, that ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.init = () => {\n\t\tthat.cache();\n\t\tthat.bindEvents();\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.cache = () => {\n\t\tthat.$c = {\n\t\t\twindow: $( window ),\n\t\t\tbody: $( 'body' ),\n\t\t\tdisconnect: '.ctct-disconnect'\n\t\t};\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tthat.bindEvents = () => {\n\n\t\t$( that.$c.disconnect ).on( 'click', ( e ) => { // eslint-disable-line no-unused-vars\n\t\t\tconfirm( window.ctctTexts.disconnectconfirm );\n\t\t} );\n\t};\n\n\t$( that.init );\n\n} ( window, jQuery, window.CTCTForms ) );\n","window.CTCTModal = {};\n\n( function( window, $, app ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.init = () => {\n\t\tapp.cache();\n\t\tapp.bindEvents();\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.cache = () => {\n\t\tapp.$c = {\n\t\t\twindow: $( window ),\n\t\t\tmodalSelector: $( '.ctct-modal' ),\n\t\t\tmodalClose: $( '.ctct-modal-close' ),\n\t\t\ttextareaModal: $( '#ctct-custom-textarea-modal' ),\n\t\t\ttextareaLink: $( '#ctct-open-textarea-info' ),\n\t\t\tdeleteLogLink: $( '#deletelog' )\n\t\t};\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.bindEvents = () => {\n\n\t\tapp.$c.modalClose.on( 'click', () => {\n\n\t\t\tapp.$c.modalSelector.removeClass( 'ctct-modal-open' );\n\n\t\t\tif ( app.$c.modalSelector.hasClass( 'ctct-custom-textarea-modal' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.ajax( {\n\t\t\t\ttype: 'post',\n\t\t\t\tdataType: 'json',\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'ctct_dismiss_first_modal',\n\t\t\t\t\t'ctct_is_dismissed': 'true'\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\tapp.$c.textareaLink.on( 'click', () => {\n\t\t\tapp.$c.textareaModal.addClass( 'ctct-modal-open' );\n\t\t} );\n\n\t\tapp.$c.deleteLogLink.on( 'click', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\t// Get the link that was clicked on so we can redirect to it if the user confirms.\n\t\t\tvar deleteLogLink = $( event.currentTarget ).attr( 'href' );\n\n\t\t\t$( '#confirmdelete' ).dialog( {\n\t\t\t\tresizable: false,\n\t\t\t\theight: 'auto',\n\t\t\t\twidth: 400,\n\t\t\t\tmodal: true,\n\t\t\t\tbuttons: {\n\t\t\t\t\t'Yes': () => {\n\n\t\t\t\t\t\t// If the user confirms the action, redirect them to the deletion page.\n\t\t\t\t\t\twindow.location.replace( deleteLogLink );\n\t\t\t\t\t},\n\t\t\t\t\t'Cancel': () => {\n\t\t\t\t\t\t$( '#confirmdelete' ).closest( '.ui-dialog-content' ).dialog( 'close' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t};\n\n\t$( app.init );\n\n} ( window, jQuery, window.CTCTModal ) );\n","window.CTCTNewsletter = {};\n\n( function( window, $, app ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.init = () => {\n\t\tapp.submitNewsletter();\n\t};\n\n\t/**\n\t * Handle newsletter signups on the \"Connect\" and \"About\" pages.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.submitNewsletter = () => {\n\n\t\t// Connect page.\n\t\t$( '.ctct-body #subscribe' ).on( 'submit', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar $ctctNewsWrapper = $( '#subscribe .ctct-call-to-action' );\n\t\t\tvar ctctNewsForm = $( '.ctct-body #subscribe' )[0];\n\t\t\tvar ctctEmailField = $( '.ctct-call-to-action input[type=\"text\"]' )[0];\n\t\t\tvar subscribeEndpoint = event.target.action;\n\n\t\t\tif ( true === ctctEmailField.validity.valid ) {\n\t\t\t\t$( '<iframe>', {\n\t\t\t\t\t'src': subscribeEndpoint + '?' + $( ctctNewsForm ).serialize(),\n\t\t\t\t\t'height': 0,\n\t\t\t\t\t'width': 0,\n\t\t\t\t\t'style': 'display: none;'\n\t\t\t\t} ).appendTo( $ctctNewsWrapper );\n\n\t\t\t\t$( '#subbutton' ).val( 'Thanks for signing up' ).css( { 'background-color': 'rgb(1, 128, 0)', 'color': 'rgb(255,255,255)' } );\n\t\t\t\t$( '#subscribe .ctct-call-to-action-text' ).css( { 'width': '70%' } );\n\t\t\t} else {\n\t\t\t\t$( '#subbutton' ).val( 'Error occurred' );\n\t\t\t}\n\t\t} );\n\n\t\t// About page.\n\t\t$( '.ctct-section #subscribe' ).on( 'submit', ( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar $ctctNewsWrapper = $( '.section-marketing-tips' );\n\t\t\tvar ctctNewsForm = $( '.ctct-section #subscribe' )[0];\n\t\t\tvar ctctEmailField = $( '.ctct-section #subscribe input[type=\"text\"]' )[0];\n\t\t\tvar subscribeEndpoint = event.target.action;\n\n\t\t\tif ( true === ctctEmailField.validity.valid ) {\n\t\t\t\t$( '<iframe>', {\n\t\t\t\t\t'src': subscribeEndpoint + '?' + $( ctctNewsForm ).serialize(),\n\t\t\t\t\t'height': 0,\n\t\t\t\t\t'width': 0,\n\t\t\t\t\t'style': 'display: none;'\n\t\t\t\t} ).appendTo( $ctctNewsWrapper );\n\t\t\t\t$( '#subbutton' ).val( 'Thanks for signing up' ).css( { 'background-color': 'rgb(1, 128, 0)' } );\n\t\t\t} else {\n\t\t\t\t$( '#subbutton' ).val( 'Error occurred' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t$( app.init );\n\n} ( window, jQuery, window.CTCTNewsletter ) );\n","window.CTCT_OptIns = {};\n\n( function( window, $, app ) {\n\n\t/**\n\t * @constructor\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.init = () => {\n\t\tapp.cache();\n\t\tapp.bindEvents();\n\t};\n\n\t/**\n\t * Cache DOM elements.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.cache = () => {\n\t\tapp.$c = {\n\t\t\toptinNoConn: $( '#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected' ),\n\t\t\tlist: $( '#cmb2-metabox-ctct_0_list_metabox [name=\"_ctct_list[]\"]' ),\n\t\t\ttitle: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id-email-optin-title' ),\n\t\t\toptin: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in' ),\n\t\t\tinstruct: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in-instructions' )\n\t\t};\n\t};\n\n\t/**\n\t * Attach callbacks to events.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.bindEvents = () => {\n\n\t\t// Only fire show/hide if we have the normal checkbox.\n\t\tif ( app.$c.optinNoConn.length ) {\n\n\t\t\t// Fire once to get our loaded state set up.\n\t\t\tapp.toggleNoConnectionFields();\n\n\t\t\t// Bind to fire when needed.\n\t\t\tapp.$c.optinNoConn.change( () => {\n\t\t\t\tapp.toggleNoConnectionFields();\n\t\t\t} );\n\t\t}\n\n\t\t// Only fire show/hide if we have the normal checkbox.\n\t\tif ( app.$c.list.length ) {\n\n\t\t\t// Fire once to get our loaded state set up.\n\t\t\tapp.toggleConnectionFields();\n\n\t\t\t// Bind to fire when needed.\n\t\t\tapp.$c.list.change( () => {\n\t\t\t\tapp.toggleConnectionFields();\n\t\t\t} );\n\t\t}\n\t};\n\n\t/**\n\t * Toggle unnecessary, unconnected optin fields if we're not showing the opt-in.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.toggleNoConnectionFields = () => {\n\n\t\tif ( app.$c.optinNoConn.prop( 'checked' ) ) {\n\t\t\tapp.$c.instruct.slideDown();\n\t\t} else {\n\t\t\tapp.$c.instruct.slideUp();\n\t\t}\n\t};\n\n\t/**\n\t * Toggle unnecessary, *connected* optin fields if we're not showing the opt-in.\n\t *\n\t * @author Constant Contact\n\t * @since 1.0.0\n\t */\n\tapp.toggleConnectionFields = () => {\n\n\t\t// If checked, show them, else hide it.\n\t\tif ( '' !== app.$c.list.val() ) {\n\t\t\tapp.$c.title.slideDown();\n\t\t\tapp.$c.optin.slideDown();\n\t\t\tapp.$c.instruct.slideDown();\n\t\t} else {\n\t\t\tapp.$c.title.slideUp();\n\t\t\tapp.$c.optin.slideUp();\n\t\t\tapp.$c.instruct.slideUp();\n\t\t}\n\t};\n\n\t$( app.init );\n\n} ( window, jQuery, window.CTCT_OptIns ) );\n"],"sourceRoot":""}
|
assets/js/ctct-plugin-admin/optins.js
CHANGED
@@ -22,7 +22,7 @@ window.CTCT_OptIns = {};
|
|
22 |
app.cache = () => {
|
23 |
app.$c = {
|
24 |
optinNoConn: $( '#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected' ),
|
25 |
-
list: $( '#cmb2-metabox-ctct_0_list_metabox
|
26 |
title: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id-email-optin-title' ),
|
27 |
optin: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in' ),
|
28 |
instruct: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in-instructions' )
|
22 |
app.cache = () => {
|
23 |
app.$c = {
|
24 |
optinNoConn: $( '#cmb2-metabox-ctct_1_optin_metabox #_ctct_opt_in_not_connected' ),
|
25 |
+
list: $( '#cmb2-metabox-ctct_0_list_metabox [name="_ctct_list[]"]' ),
|
26 |
title: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id-email-optin-title' ),
|
27 |
optin: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in' ),
|
28 |
instruct: $( '#cmb2-metabox-ctct_1_optin_metabox .cmb2-id--ctct-opt-in-instructions' )
|
assets/sass/_admin-forms.scss
CHANGED
@@ -230,6 +230,23 @@ body.post-type-ctct_forms #titlediv #title {
|
|
230 |
}
|
231 |
}
|
232 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
//--------------------------------------------------------------
|
234 |
// TinyMCE Tweaks
|
235 |
//--------------------------------------------------------------
|
230 |
}
|
231 |
}
|
232 |
|
233 |
+
.cmb2-id--ctct-list {
|
234 |
+
|
235 |
+
.cmb2-list {
|
236 |
+
background:
|
237 |
+
linear-gradient($color-white 33%, transparent),
|
238 |
+
linear-gradient(transparent, $color-white 66%) 0 100%,
|
239 |
+
radial-gradient(farthest-side at 50% 0, $color-black-translucent, transparent),
|
240 |
+
radial-gradient(farthest-side at 50% 100%, $color-black-translucent, transparent) 0 100%;
|
241 |
+
background-attachment: local, local, scroll, scroll;
|
242 |
+
background-color: $color-white;
|
243 |
+
background-repeat: no-repeat;
|
244 |
+
background-size: 100% 30px, 100% 30px, 100% 10px, 100% 10px;
|
245 |
+
max-height: 10rem;
|
246 |
+
overflow-y: auto;
|
247 |
+
}
|
248 |
+
}
|
249 |
+
|
250 |
//--------------------------------------------------------------
|
251 |
// TinyMCE Tweaks
|
252 |
//--------------------------------------------------------------
|
assets/sass/_forms.scss
CHANGED
@@ -40,4 +40,17 @@
|
|
40 |
.ctct-submit {
|
41 |
cursor: pointer;
|
42 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
}
|
40 |
.ctct-submit {
|
41 |
cursor: pointer;
|
42 |
}
|
43 |
+
|
44 |
+
.ctct-form-field-checkbox {
|
45 |
+
|
46 |
+
fieldset {
|
47 |
+
border: none;
|
48 |
+
padding: 0;
|
49 |
+
|
50 |
+
legend {
|
51 |
+
font-weight: normal;
|
52 |
+
padding: 0;
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
56 |
}
|
assets/sass/_inputs.scss
CHANGED
@@ -64,6 +64,10 @@
|
|
64 |
display: inline-block;
|
65 |
margin-right: 5%;
|
66 |
width: 75%;
|
|
|
|
|
|
|
|
|
67 |
}
|
68 |
|
69 |
span.ctct-label-right {
|
64 |
display: inline-block;
|
65 |
margin-right: 5%;
|
66 |
width: 75%;
|
67 |
+
|
68 |
+
&[type="checkbox"] {
|
69 |
+
width: auto;
|
70 |
+
}
|
71 |
}
|
72 |
|
73 |
span.ctct-label-right {
|
assets/sass/_variables.scss
CHANGED
@@ -15,6 +15,7 @@ $color-gray: #aaa;
|
|
15 |
$color-silver: #ddd;
|
16 |
$color-light-gray: #e9e9e9;
|
17 |
$color-white: #fff;
|
|
|
18 |
|
19 |
// Theming
|
20 |
$color-error: $color-red;
|
15 |
$color-silver: #ddd;
|
16 |
$color-light-gray: #e9e9e9;
|
17 |
$color-white: #fff;
|
18 |
+
$color-black-translucent: rgba(0,0,0, 0.5);
|
19 |
|
20 |
// Theming
|
21 |
$color-error: $color-red;
|
constant-contact-forms.php
CHANGED
@@ -12,7 +12,7 @@
|
|
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.
|
16 |
* Author: Constant Contact
|
17 |
* Author URI: https://www.constantcontact.com/index?pn=miwordpress
|
18 |
* License: GPLv3
|
@@ -72,7 +72,7 @@ class Constant_Contact {
|
|
72 |
* @since 1.0.0
|
73 |
* @var string
|
74 |
*/
|
75 |
-
const VERSION = '1.
|
76 |
|
77 |
/**
|
78 |
* URL of plugin directory.
|
@@ -366,6 +366,8 @@ class Constant_Contact {
|
|
366 |
* Sets up our plugin.
|
367 |
*
|
368 |
* @since 1.0.0
|
|
|
|
|
369 |
*/
|
370 |
protected function __construct() {
|
371 |
|
@@ -373,9 +375,9 @@ class Constant_Contact {
|
|
373 |
$this->plugin_name = esc_html__( 'Constant Contact', 'constant-contact-forms' );
|
374 |
|
375 |
// Set up some helper properties.
|
376 |
-
$this->basename
|
377 |
-
$this->url
|
378 |
-
$this->path
|
379 |
|
380 |
if ( ! $this->meets_php_requirements() ) {
|
381 |
add_action( 'admin_notices', array( $this, 'minimum_version' ) );
|
@@ -394,6 +396,9 @@ class Constant_Contact {
|
|
394 |
|
395 |
// Include compatibility fixes to address conflicts with other plug-ins.
|
396 |
self::include_file( 'compatibility', false );
|
|
|
|
|
|
|
397 |
}
|
398 |
|
399 |
/**
|
@@ -449,6 +454,8 @@ class Constant_Contact {
|
|
449 |
* Add hooks and filters.
|
450 |
*
|
451 |
* @since 1.0.0
|
|
|
|
|
452 |
*/
|
453 |
public function hooks() {
|
454 |
if ( ! $this->meets_php_requirements() ) {
|
@@ -462,11 +469,6 @@ class Constant_Contact {
|
|
462 |
|
463 |
$this->load_libs();
|
464 |
|
465 |
-
// Our vendor files will do a check for ISSSL, so we want to set it to be that. See Guzzle for more info and usage of this.
|
466 |
-
if ( is_ssl() || ! defined( 'ISSSL' ) ) {
|
467 |
-
define( 'ISSSL', true );
|
468 |
-
}
|
469 |
-
|
470 |
add_filter( 'widget_text', 'do_shortcode' );
|
471 |
add_action( 'admin_enqueue_scripts', [ $this, 'register_admin_assets' ], 1 );
|
472 |
add_action( 'wp_enqueue_scripts', [ $this, 'register_front_assets' ], 1 );
|
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.9.0
|
16 |
* Author: Constant Contact
|
17 |
* Author URI: https://www.constantcontact.com/index?pn=miwordpress
|
18 |
* License: GPLv3
|
72 |
* @since 1.0.0
|
73 |
* @var string
|
74 |
*/
|
75 |
+
const VERSION = '1.9.0';
|
76 |
|
77 |
/**
|
78 |
* URL of plugin directory.
|
366 |
* Sets up our plugin.
|
367 |
*
|
368 |
* @since 1.0.0
|
369 |
+
*
|
370 |
+
* @return void
|
371 |
*/
|
372 |
protected function __construct() {
|
373 |
|
375 |
$this->plugin_name = esc_html__( 'Constant Contact', 'constant-contact-forms' );
|
376 |
|
377 |
// Set up some helper properties.
|
378 |
+
$this->basename = plugin_basename( __FILE__ );
|
379 |
+
$this->url = plugin_dir_url( __FILE__ );
|
380 |
+
$this->path = plugin_dir_path( __FILE__ );
|
381 |
|
382 |
if ( ! $this->meets_php_requirements() ) {
|
383 |
add_action( 'admin_notices', array( $this, 'minimum_version' ) );
|
396 |
|
397 |
// Include compatibility fixes to address conflicts with other plug-ins.
|
398 |
self::include_file( 'compatibility', false );
|
399 |
+
|
400 |
+
// Include deprecated functions.
|
401 |
+
self::include_file( 'deprecated', false );
|
402 |
}
|
403 |
|
404 |
/**
|
454 |
* Add hooks and filters.
|
455 |
*
|
456 |
* @since 1.0.0
|
457 |
+
*
|
458 |
+
* @return void
|
459 |
*/
|
460 |
public function hooks() {
|
461 |
if ( ! $this->meets_php_requirements() ) {
|
469 |
|
470 |
$this->load_libs();
|
471 |
|
|
|
|
|
|
|
|
|
|
|
472 |
add_filter( 'widget_text', 'do_shortcode' );
|
473 |
add_action( 'admin_enqueue_scripts', [ $this, 'register_admin_assets' ], 1 );
|
474 |
add_action( 'wp_enqueue_scripts', [ $this, 'register_front_assets' ], 1 );
|
includes/class-admin.php
CHANGED
@@ -284,7 +284,8 @@ class ConstantContact_Admin {
|
|
284 |
return;
|
285 |
}
|
286 |
|
287 |
-
$
|
|
|
288 |
|
289 |
switch ( $column ) {
|
290 |
case 'shortcodes':
|
@@ -294,16 +295,26 @@ class ConstantContact_Admin {
|
|
294 |
echo wp_kses_post( wpautop( get_post_meta( $post_id, '_ctct_description', true ) ) );
|
295 |
break;
|
296 |
case 'ctct_list':
|
297 |
-
$
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
305 |
esc_html_e( 'No associated list', 'constant-contact-forms' );
|
|
|
306 |
}
|
|
|
|
|
307 |
break;
|
308 |
}
|
309 |
}
|
@@ -440,7 +451,7 @@ class ConstantContact_Admin {
|
|
440 |
|
441 |
global $pagenow;
|
442 |
|
443 |
-
$debug
|
444 |
$suffix = ( true === $debug ) ? '' : '.min';
|
445 |
|
446 |
wp_register_script(
|
284 |
return;
|
285 |
}
|
286 |
|
287 |
+
$table_list_ids = get_post_meta( $post_id, '_ctct_list', true );
|
288 |
+
$table_list_ids = is_array( $table_list_ids ) ? $table_list_ids : [ $table_list_ids ];
|
289 |
|
290 |
switch ( $column ) {
|
291 |
case 'shortcodes':
|
295 |
echo wp_kses_post( wpautop( get_post_meta( $post_id, '_ctct_description', true ) ) );
|
296 |
break;
|
297 |
case 'ctct_list':
|
298 |
+
$list_html = [];
|
299 |
+
|
300 |
+
foreach ( $table_list_ids as $list_id ) {
|
301 |
+
$list = $this->get_associated_list_by_id( $list_id );
|
302 |
+
|
303 |
+
if ( ! empty( $list ) ) {
|
304 |
+
$list_html[] = sprintf(
|
305 |
+
'<a href="%s">%s</a>',
|
306 |
+
esc_url( get_edit_post_link( $list->ID ) ),
|
307 |
+
esc_html( get_the_title( $list->ID ) )
|
308 |
+
);
|
309 |
+
}
|
310 |
+
}
|
311 |
+
|
312 |
+
if ( empty( $list_html ) ) {
|
313 |
esc_html_e( 'No associated list', 'constant-contact-forms' );
|
314 |
+
break;
|
315 |
}
|
316 |
+
|
317 |
+
echo wp_kses_post( implode( ', ', $list_html ) );
|
318 |
break;
|
319 |
}
|
320 |
}
|
451 |
|
452 |
global $pagenow;
|
453 |
|
454 |
+
$debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG === true );
|
455 |
$suffix = ( true === $debug ) ? '' : '.min';
|
456 |
|
457 |
wp_register_script(
|
includes/class-api.php
CHANGED
@@ -128,8 +128,8 @@ class ConstantContact_API {
|
|
128 |
}
|
129 |
} catch ( CtctException $ex ) {
|
130 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
131 |
-
$extra
|
132 |
-
$errors
|
133 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
134 |
$this->log_errors( $our_errors );
|
135 |
constant_contact_set_has_exceptions();
|
@@ -173,8 +173,8 @@ class ConstantContact_API {
|
|
173 |
|
174 |
} catch ( CtctException $ex ) {
|
175 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
176 |
-
$extra
|
177 |
-
$errors
|
178 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
179 |
$this->log_errors( $our_errors );
|
180 |
constant_contact_set_has_exceptions();
|
@@ -226,14 +226,14 @@ class ConstantContact_API {
|
|
226 |
}
|
227 |
} catch ( CtctException $ex ) {
|
228 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
229 |
-
$extra
|
230 |
-
$errors
|
231 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
232 |
$this->log_errors( $our_errors );
|
233 |
constant_contact_set_has_exceptions();
|
234 |
} catch ( Exception $ex ) {
|
235 |
-
$error
|
236 |
-
$error->error_key
|
237 |
$error->error_message = $ex->getMessage();
|
238 |
|
239 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
@@ -277,8 +277,8 @@ class ConstantContact_API {
|
|
277 |
return $list;
|
278 |
} catch ( CtctException $ex ) {
|
279 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
280 |
-
$extra
|
281 |
-
$errors
|
282 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
283 |
$this->log_errors( $our_errors );
|
284 |
constant_contact_set_has_exceptions();
|
@@ -320,8 +320,8 @@ class ConstantContact_API {
|
|
320 |
$list = $this->cc()->listService->getList( $this->get_api_token(), esc_attr( $new_list['id'] ) );
|
321 |
} catch ( CtctException $ex ) {
|
322 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
323 |
-
$extra
|
324 |
-
$errors
|
325 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
326 |
$this->log_errors( $our_errors );
|
327 |
constant_contact_set_has_exceptions();
|
@@ -361,8 +361,8 @@ class ConstantContact_API {
|
|
361 |
|
362 |
} catch ( CtctException $ex ) {
|
363 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
364 |
-
$extra
|
365 |
-
$errors
|
366 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
367 |
$this->log_errors( $our_errors );
|
368 |
constant_contact_set_has_exceptions();
|
@@ -414,8 +414,8 @@ class ConstantContact_API {
|
|
414 |
|
415 |
} catch ( CtctException $ex ) {
|
416 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
417 |
-
$extra
|
418 |
-
$errors
|
419 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
420 |
$this->log_errors( $our_errors );
|
421 |
constant_contact_set_has_exceptions();
|
@@ -455,8 +455,8 @@ class ConstantContact_API {
|
|
455 |
$list = $this->cc()->listService->deleteList( $this->get_api_token(), $updated_list['id'] );
|
456 |
} catch ( CtctException $ex ) {
|
457 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
458 |
-
$extra
|
459 |
-
$errors
|
460 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
461 |
$this->log_errors( $our_errors );
|
462 |
constant_contact_set_has_exceptions();
|
@@ -482,7 +482,7 @@ class ConstantContact_API {
|
|
482 |
* @since 1.0.0
|
483 |
* @since 1.3.0 Added $form_id parameter.
|
484 |
*
|
485 |
-
* @throws Exception
|
486 |
*
|
487 |
* @param array $new_contact New contact data.
|
488 |
* @param int $form_id ID of the form being processed.
|
@@ -502,7 +502,7 @@ class ConstantContact_API {
|
|
502 |
$email = sanitize_email( $new_contact['email'] );
|
503 |
|
504 |
// Set our list data. If we didn't get passed a list and got this far, just generate a random ID.
|
505 |
-
$list = isset( $new_contact['list'] ) ?
|
506 |
|
507 |
$return_contact = false;
|
508 |
|
@@ -524,8 +524,8 @@ class ConstantContact_API {
|
|
524 |
}
|
525 |
} catch ( CtctException $ex ) {
|
526 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
527 |
-
$extra
|
528 |
-
$errors
|
529 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
530 |
$this->log_errors( $our_errors );
|
531 |
if ( 400 !== $ex->getCode() || false !== strpos( 'Bad Request', $ex->getMessage() ) ) {
|
@@ -566,7 +566,7 @@ class ConstantContact_API {
|
|
566 |
if ( is_array( $contact_value ) ) {
|
567 |
$clean[ $contact_key ] = $this->clear_email( $contact_value );
|
568 |
} elseif ( is_email( $contact_value ) ) {
|
569 |
-
$email_parts
|
570 |
$clean[ $contact_key ] = implode( '@', [ '***', $email_parts[1] ] );
|
571 |
} else {
|
572 |
$clean[ $contact_key ] = $contact_value;
|
@@ -581,25 +581,25 @@ class ConstantContact_API {
|
|
581 |
* @since 1.0.0
|
582 |
* @since 1.3.0 Added $form_id parameter.
|
583 |
*
|
584 |
-
* @param string
|
585 |
-
* @param string $list List name.
|
586 |
-
* @param string
|
587 |
-
* @param array
|
588 |
-
* @param string
|
589 |
-
* @return mixed
|
590 |
*/
|
591 |
public function create_contact( $api_token, $list, $email, $user_data, $form_id ) {
|
592 |
-
|
593 |
$contact = new Contact();
|
|
|
594 |
$contact->addEmail( sanitize_text_field( $email ) );
|
595 |
-
$
|
596 |
|
597 |
try {
|
598 |
$contact = $this->set_contact_properties( $contact, $user_data, $form_id );
|
599 |
} catch ( CtctException $ex ) {
|
600 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
601 |
-
$extra
|
602 |
-
$errors
|
603 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
604 |
$this->log_errors( $our_errors );
|
605 |
constant_contact_set_has_exceptions();
|
@@ -635,12 +635,12 @@ class ConstantContact_API {
|
|
635 |
*
|
636 |
* @throws CtctException API exception.
|
637 |
*
|
638 |
-
* @param array
|
639 |
-
* @param string
|
640 |
-
* @param string $list List name.
|
641 |
-
* @param array
|
642 |
-
* @param string
|
643 |
-
* @return mixed
|
644 |
*/
|
645 |
public function update_contact( $response, $api_token, $list, $user_data, $form_id ) {
|
646 |
|
@@ -649,16 +649,16 @@ class ConstantContact_API {
|
|
649 |
isset( $response->results[0] ) &&
|
650 |
( $response->results[0] instanceof Contact )
|
651 |
) {
|
652 |
-
|
653 |
$contact = $response->results[0];
|
654 |
-
|
|
|
655 |
|
656 |
try {
|
657 |
$contact = $this->set_contact_properties( $contact, $user_data, $form_id, true );
|
658 |
} catch ( CtctException $ex ) {
|
659 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
660 |
-
$extra
|
661 |
-
$errors
|
662 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
663 |
$this->log_errors( $our_errors );
|
664 |
constant_contact_set_has_exceptions();
|
@@ -823,8 +823,8 @@ class ConstantContact_API {
|
|
823 |
try {
|
824 |
$contact->$key = $value;
|
825 |
} catch ( Exception $e ) {
|
826 |
-
$errors
|
827 |
-
$extra
|
828 |
$errors[] = $extra . $e->getErrors();
|
829 |
$this->log_errors( $errors );
|
830 |
constant_contact_set_has_exceptions();
|
@@ -847,7 +847,7 @@ class ConstantContact_API {
|
|
847 |
*
|
848 |
* @since 1.0.0
|
849 |
*
|
850 |
-
* @throws Exception
|
851 |
*
|
852 |
* @param array $errors Errors from API.
|
853 |
*/
|
@@ -868,7 +868,7 @@ class ConstantContact_API {
|
|
868 |
* @since 1.0.0
|
869 |
* @since 1.8.6 Deprected
|
870 |
*
|
871 |
-
* @throws Exception
|
872 |
*
|
873 |
* @param array $error API error repsonse.
|
874 |
* @return mixed
|
@@ -985,8 +985,8 @@ class ConstantContact_API {
|
|
985 |
}
|
986 |
|
987 |
$disclosure = [
|
988 |
-
'name' => empty( $account_info->organization_name ) ?
|
989 |
-
'address' =>
|
990 |
];
|
991 |
|
992 |
if ( empty( $disclosure['name'] ) ) {
|
@@ -1020,6 +1020,28 @@ class ConstantContact_API {
|
|
1020 |
|
1021 |
return $as_parts ? $disclosure : implode( ', ', array_values( $disclosure ) );
|
1022 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1023 |
}
|
1024 |
|
1025 |
/**
|
128 |
}
|
129 |
} catch ( CtctException $ex ) {
|
130 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
131 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
132 |
+
$errors = $ex->getErrors();
|
133 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
134 |
$this->log_errors( $our_errors );
|
135 |
constant_contact_set_has_exceptions();
|
173 |
|
174 |
} catch ( CtctException $ex ) {
|
175 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
176 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
177 |
+
$errors = $ex->getErrors();
|
178 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
179 |
$this->log_errors( $our_errors );
|
180 |
constant_contact_set_has_exceptions();
|
226 |
}
|
227 |
} catch ( CtctException $ex ) {
|
228 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
229 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
230 |
+
$errors = $ex->getErrors();
|
231 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
232 |
$this->log_errors( $our_errors );
|
233 |
constant_contact_set_has_exceptions();
|
234 |
} catch ( Exception $ex ) {
|
235 |
+
$error = new stdClass();
|
236 |
+
$error->error_key = get_class( $ex );
|
237 |
$error->error_message = $ex->getMessage();
|
238 |
|
239 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
277 |
return $list;
|
278 |
} catch ( CtctException $ex ) {
|
279 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
280 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
281 |
+
$errors = $ex->getErrors();
|
282 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
283 |
$this->log_errors( $our_errors );
|
284 |
constant_contact_set_has_exceptions();
|
320 |
$list = $this->cc()->listService->getList( $this->get_api_token(), esc_attr( $new_list['id'] ) );
|
321 |
} catch ( CtctException $ex ) {
|
322 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
323 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
324 |
+
$errors = $ex->getErrors();
|
325 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
326 |
$this->log_errors( $our_errors );
|
327 |
constant_contact_set_has_exceptions();
|
361 |
|
362 |
} catch ( CtctException $ex ) {
|
363 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
364 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
365 |
+
$errors = $ex->getErrors();
|
366 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
367 |
$this->log_errors( $our_errors );
|
368 |
constant_contact_set_has_exceptions();
|
414 |
|
415 |
} catch ( CtctException $ex ) {
|
416 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
417 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
418 |
+
$errors = $ex->getErrors();
|
419 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
420 |
$this->log_errors( $our_errors );
|
421 |
constant_contact_set_has_exceptions();
|
455 |
$list = $this->cc()->listService->deleteList( $this->get_api_token(), $updated_list['id'] );
|
456 |
} catch ( CtctException $ex ) {
|
457 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
458 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
459 |
+
$errors = $ex->getErrors();
|
460 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
461 |
$this->log_errors( $our_errors );
|
462 |
constant_contact_set_has_exceptions();
|
482 |
* @since 1.0.0
|
483 |
* @since 1.3.0 Added $form_id parameter.
|
484 |
*
|
485 |
+
* @throws Exception Throws Exception if encountered while attempting to save contact.
|
486 |
*
|
487 |
* @param array $new_contact New contact data.
|
488 |
* @param int $form_id ID of the form being processed.
|
502 |
$email = sanitize_email( $new_contact['email'] );
|
503 |
|
504 |
// Set our list data. If we didn't get passed a list and got this far, just generate a random ID.
|
505 |
+
$list = isset( $new_contact['list'] ) ? $new_contact['list'] : 'cc_' . wp_generate_password( 15, false );
|
506 |
|
507 |
$return_contact = false;
|
508 |
|
524 |
}
|
525 |
} catch ( CtctException $ex ) {
|
526 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
527 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
528 |
+
$errors = $ex->getErrors();
|
529 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
530 |
$this->log_errors( $our_errors );
|
531 |
if ( 400 !== $ex->getCode() || false !== strpos( 'Bad Request', $ex->getMessage() ) ) {
|
566 |
if ( is_array( $contact_value ) ) {
|
567 |
$clean[ $contact_key ] = $this->clear_email( $contact_value );
|
568 |
} elseif ( is_email( $contact_value ) ) {
|
569 |
+
$email_parts = explode( '@', $contact_value );
|
570 |
$clean[ $contact_key ] = implode( '@', [ '***', $email_parts[1] ] );
|
571 |
} else {
|
572 |
$clean[ $contact_key ] = $contact_value;
|
581 |
* @since 1.0.0
|
582 |
* @since 1.3.0 Added $form_id parameter.
|
583 |
*
|
584 |
+
* @param string $api_token Token.
|
585 |
+
* @param string|array $list List name(s).
|
586 |
+
* @param string $email Email address.
|
587 |
+
* @param array $user_data User data.
|
588 |
+
* @param string $form_id ID of the form being processed.
|
589 |
+
* @return mixed Response from API.
|
590 |
*/
|
591 |
public function create_contact( $api_token, $list, $email, $user_data, $form_id ) {
|
|
|
592 |
$contact = new Contact();
|
593 |
+
|
594 |
$contact->addEmail( sanitize_text_field( $email ) );
|
595 |
+
$this->add_to_list( $contact, $list );
|
596 |
|
597 |
try {
|
598 |
$contact = $this->set_contact_properties( $contact, $user_data, $form_id );
|
599 |
} catch ( CtctException $ex ) {
|
600 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
601 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
602 |
+
$errors = $ex->getErrors();
|
603 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
604 |
$this->log_errors( $our_errors );
|
605 |
constant_contact_set_has_exceptions();
|
635 |
*
|
636 |
* @throws CtctException API exception.
|
637 |
*
|
638 |
+
* @param array $response Response from api call.
|
639 |
+
* @param string $api_token Token.
|
640 |
+
* @param string|array $list List name(s).
|
641 |
+
* @param array $user_data User data.
|
642 |
+
* @param string $form_id Form ID being processed.
|
643 |
+
* @return mixed Response from API.
|
644 |
*/
|
645 |
public function update_contact( $response, $api_token, $list, $user_data, $form_id ) {
|
646 |
|
649 |
isset( $response->results[0] ) &&
|
650 |
( $response->results[0] instanceof Contact )
|
651 |
) {
|
|
|
652 |
$contact = $response->results[0];
|
653 |
+
|
654 |
+
$this->add_to_list( $contact, $list );
|
655 |
|
656 |
try {
|
657 |
$contact = $this->set_contact_properties( $contact, $user_data, $form_id, true );
|
658 |
} catch ( CtctException $ex ) {
|
659 |
add_filter( 'constant_contact_force_logging', '__return_true' );
|
660 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
661 |
+
$errors = $ex->getErrors();
|
662 |
$our_errors[] = $extra . ' - ' . $errors[0]->error_key . ' - ' . $errors[0]->error_message;
|
663 |
$this->log_errors( $our_errors );
|
664 |
constant_contact_set_has_exceptions();
|
823 |
try {
|
824 |
$contact->$key = $value;
|
825 |
} catch ( Exception $e ) {
|
826 |
+
$errors = [];
|
827 |
+
$extra = constant_contact_location_and_line( __METHOD__, __LINE__ );
|
828 |
$errors[] = $extra . $e->getErrors();
|
829 |
$this->log_errors( $errors );
|
830 |
constant_contact_set_has_exceptions();
|
847 |
*
|
848 |
* @since 1.0.0
|
849 |
*
|
850 |
+
* @throws Exception Throws Exception if encountered while attempting to log errors.
|
851 |
*
|
852 |
* @param array $errors Errors from API.
|
853 |
*/
|
868 |
* @since 1.0.0
|
869 |
* @since 1.8.6 Deprected
|
870 |
*
|
871 |
+
* @throws Exception Throws Exception if encountered while attempting to process error message.
|
872 |
*
|
873 |
* @param array $error API error repsonse.
|
874 |
* @return mixed
|
985 |
}
|
986 |
|
987 |
$disclosure = [
|
988 |
+
'name' => empty( $account_info->organization_name ) ? constant_contact_get_option( '_ctct_disclose_name', '' ) : $account_info->organization_name,
|
989 |
+
'address' => constant_contact_get_option( '_ctct_disclose_address', '' ),
|
990 |
];
|
991 |
|
992 |
if ( empty( $disclosure['name'] ) ) {
|
1020 |
|
1021 |
return $as_parts ? $disclosure : implode( ', ', array_values( $disclosure ) );
|
1022 |
}
|
1023 |
+
|
1024 |
+
/**
|
1025 |
+
* Add contact to one or more lists.
|
1026 |
+
*
|
1027 |
+
* @author Rebekah Van Epps <rebekah.vanepps@webdevstudios.com>
|
1028 |
+
* @since 1.9.0
|
1029 |
+
*
|
1030 |
+
* @param Contact $contact Contact object.
|
1031 |
+
* @param string|array $list Single list ID or array of lists.
|
1032 |
+
* @return void
|
1033 |
+
*/
|
1034 |
+
private function add_to_list( $contact, $list ) {
|
1035 |
+
if ( empty( $list ) ) {
|
1036 |
+
return;
|
1037 |
+
}
|
1038 |
+
|
1039 |
+
$list = is_array( $list ) ? $list : [ $list ];
|
1040 |
+
|
1041 |
+
foreach ( $list as $list_id ) {
|
1042 |
+
$contact->addList( esc_attr( $list_id ) );
|
1043 |
+
}
|
1044 |
+
}
|
1045 |
}
|
1046 |
|
1047 |
/**
|
includes/class-builder-fields.php
CHANGED
@@ -149,7 +149,7 @@ class ConstantContact_Builder_Fields {
|
|
149 |
],
|
150 |
'website' => [
|
151 |
'option' => esc_html__( 'Website', 'constant-contact-forms' ),
|
152 |
-
'placeholder' => esc_html__( 'http://www.example.com', 'constant-contact-
|
153 |
],
|
154 |
'custom' => [
|
155 |
'option' => esc_html__( 'Custom Text Field', 'constant-contact-forms' ),
|
@@ -219,12 +219,10 @@ class ConstantContact_Builder_Fields {
|
|
219 |
|
220 |
if ( $lists ) {
|
221 |
$list_metabox->add_field( [
|
222 |
-
'name'
|
223 |
-
'id'
|
224 |
-
'type'
|
225 |
-
'
|
226 |
-
'default' => 'none',
|
227 |
-
'options' => $lists,
|
228 |
] );
|
229 |
}
|
230 |
}
|
@@ -451,7 +449,7 @@ class ConstantContact_Builder_Fields {
|
|
451 |
'id' => 'form-padding-title',
|
452 |
'description' => esc_html__(
|
453 |
'Enter padding values in number of pixels. Padding will be applied to four sides of the form.',
|
454 |
-
'constant-contact-
|
455 |
] );
|
456 |
|
457 |
$custom_css_metabox->add_field( [
|
149 |
],
|
150 |
'website' => [
|
151 |
'option' => esc_html__( 'Website', 'constant-contact-forms' ),
|
152 |
+
'placeholder' => esc_html__( 'http://www.example.com', 'constant-contact-forms' ),
|
153 |
],
|
154 |
'custom' => [
|
155 |
'option' => esc_html__( 'Custom Text Field', 'constant-contact-forms' ),
|
219 |
|
220 |
if ( $lists ) {
|
221 |
$list_metabox->add_field( [
|
222 |
+
'name' => esc_html__( 'Allow subscribers to select from lists', 'constant-contact-forms' ),
|
223 |
+
'id' => $this->prefix . 'list',
|
224 |
+
'type' => 'multicheck',
|
225 |
+
'options' => $lists,
|
|
|
|
|
226 |
] );
|
227 |
}
|
228 |
}
|
449 |
'id' => 'form-padding-title',
|
450 |
'description' => esc_html__(
|
451 |
'Enter padding values in number of pixels. Padding will be applied to four sides of the form.',
|
452 |
+
'constant-contact-forms' ),
|
453 |
] );
|
454 |
|
455 |
$custom_css_metabox->add_field( [
|
includes/class-check.php
CHANGED
@@ -177,6 +177,8 @@ class ConstantContact_Check {
|
|
177 |
$sslverify = version_compare( $wp_version, 4.0, '<' );
|
178 |
$doing_wp_cron = sprintf( '%.22F', microtime( true ) );
|
179 |
|
|
|
|
|
180 |
$cron_request = apply_filters( 'cron_request', [
|
181 |
'url' => site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron ),
|
182 |
'key' => $doing_wp_cron,
|
@@ -186,6 +188,7 @@ class ConstantContact_Check {
|
|
186 |
'sslverify' => apply_filters( 'https_local_ssl_verify', $sslverify ),
|
187 |
],
|
188 |
] );
|
|
|
189 |
|
190 |
$cron_request['args']['blocking'] = true;
|
191 |
|
177 |
$sslverify = version_compare( $wp_version, 4.0, '<' );
|
178 |
$doing_wp_cron = sprintf( '%.22F', microtime( true ) );
|
179 |
|
180 |
+
// phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Filters defined in WP Core.
|
181 |
+
/* This filter is documented in wp-includes/cron.php */
|
182 |
$cron_request = apply_filters( 'cron_request', [
|
183 |
'url' => site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron ),
|
184 |
'key' => $doing_wp_cron,
|
188 |
'sslverify' => apply_filters( 'https_local_ssl_verify', $sslverify ),
|
189 |
],
|
190 |
] );
|
191 |
+
// phpcs:enable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
|
192 |
|
193 |
$cron_request['args']['blocking'] = true;
|
194 |
|
includes/class-connect.php
CHANGED
@@ -320,7 +320,7 @@ class ConstantContact_Connect {
|
|
320 |
*
|
321 |
* @since 1.0.0
|
322 |
*
|
323 |
-
* @throws Exception
|
324 |
*
|
325 |
* @return boolean
|
326 |
*/
|
@@ -359,7 +359,7 @@ class ConstantContact_Connect {
|
|
359 |
*
|
360 |
* @since 1.0.0
|
361 |
*
|
362 |
-
* @throws Exception
|
363 |
*
|
364 |
* @param string $check_key key to save to.
|
365 |
* @param boolean $fallback_to_ctct_opt Fall back maybe.
|
@@ -444,7 +444,7 @@ class ConstantContact_Connect {
|
|
444 |
*
|
445 |
* @since 1.0.0
|
446 |
*
|
447 |
-
* @throws Exception
|
448 |
*
|
449 |
* @return string Token.
|
450 |
*/
|
@@ -508,8 +508,8 @@ class ConstantContact_Connect {
|
|
508 |
return 'ctct_key';
|
509 |
}
|
510 |
|
511 |
-
$key
|
512 |
-
$key
|
513 |
$updated = update_option( 'ctct_key', $key );
|
514 |
|
515 |
if ( ! $updated || $first_try ) {
|
320 |
*
|
321 |
* @since 1.0.0
|
322 |
*
|
323 |
+
* @throws Exception Throw Exception if encountered during disconnection.
|
324 |
*
|
325 |
* @return boolean
|
326 |
*/
|
359 |
*
|
360 |
* @since 1.0.0
|
361 |
*
|
362 |
+
* @throws Exception Throws Exception if encountered while attempting to retrieve encrypted value.
|
363 |
*
|
364 |
* @param string $check_key key to save to.
|
365 |
* @param boolean $fallback_to_ctct_opt Fall back maybe.
|
444 |
*
|
445 |
* @since 1.0.0
|
446 |
*
|
447 |
+
* @throws Exception Throws Exception if encountered while attempting to save API token.
|
448 |
*
|
449 |
* @return string Token.
|
450 |
*/
|
508 |
return 'ctct_key';
|
509 |
}
|
510 |
|
511 |
+
$key = Key::createNewRandomKey();
|
512 |
+
$key = $key->saveToAsciiSafeString();
|
513 |
$updated = update_option( 'ctct_key', $key );
|
514 |
|
515 |
if ( ! $updated || $first_try ) {
|
includes/class-cpts.php
CHANGED
@@ -179,19 +179,24 @@ class ConstantContact_CPTS {
|
|
179 |
* @return array appended update messages with custom post types.
|
180 |
*/
|
181 |
public function post_updated_messages( $messages ) {
|
182 |
-
|
183 |
global $post;
|
184 |
|
|
|
|
|
185 |
$messages['ctct_lists'] = [
|
186 |
0 => '', // Unused. Messages start at index 1.
|
187 |
1 => __( 'List updated.', 'constant-contact-forms' ),
|
188 |
2 => __( 'Custom field updated.', 'constant-contact-forms' ),
|
189 |
3 => __( 'Custom field deleted.', 'constant-contact-forms' ),
|
190 |
4 => __( 'List updated.', 'constant-contact-forms' ),
|
191 |
-
5 =>
|
|
|
|
|
|
|
192 |
6 => __( 'List published.', 'constant-contact-forms' ),
|
193 |
7 => __( 'List saved.', 'constant-contact-forms' ),
|
194 |
8 => __( 'List submitted.', 'constant-contact-forms' ),
|
|
|
195 |
9 => __( 'List scheduled for: <strong>%1$s</strong>.', 'constant-contact-forms' ),
|
196 |
date_i18n( 'M j, Y @ G:i', strtotime( $post->post_date ) ),
|
197 |
10 => __( 'List draft updated.', 'constant-contact-forms' ),
|
@@ -203,10 +208,18 @@ class ConstantContact_CPTS {
|
|
203 |
2 => __( 'Custom field updated.', 'constant-contact-forms' ),
|
204 |
3 => __( 'Custom field deleted.', 'constant-contact-forms' ),
|
205 |
4 => __( 'Form updated.', 'constant-contact-forms' ),
|
206 |
-
5 =>
|
207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
7 => __( 'Form saved.', 'constant-contact-forms' ),
|
209 |
8 => __( 'Form submitted.', 'constant-contact-forms' ),
|
|
|
210 |
9 => __( 'Form scheduled for: <strong>%1$s</strong>.', 'constant-contact-forms' ),
|
211 |
date_i18n( 'M j, Y @ G:i', strtotime( $post->post_date ) ),
|
212 |
10 => __( 'Form draft updated.', 'constant-contact-forms' ),
|
179 |
* @return array appended update messages with custom post types.
|
180 |
*/
|
181 |
public function post_updated_messages( $messages ) {
|
|
|
182 |
global $post;
|
183 |
|
184 |
+
$revision = filter_input( INPUT_GET, 'revision', FILTER_SANITIZE_NUMBER_INT );
|
185 |
+
|
186 |
$messages['ctct_lists'] = [
|
187 |
0 => '', // Unused. Messages start at index 1.
|
188 |
1 => __( 'List updated.', 'constant-contact-forms' ),
|
189 |
2 => __( 'Custom field updated.', 'constant-contact-forms' ),
|
190 |
3 => __( 'Custom field deleted.', 'constant-contact-forms' ),
|
191 |
4 => __( 'List updated.', 'constant-contact-forms' ),
|
192 |
+
5 => ! empty( $revision ) ?
|
193 |
+
/* translators: formatted revision timestamp. */
|
194 |
+
sprintf( __( 'List restored to revision from %s', 'constant-contact-forms' ), wp_post_revision_title( $revision, false ) ) :
|
195 |
+
false,
|
196 |
6 => __( 'List published.', 'constant-contact-forms' ),
|
197 |
7 => __( 'List saved.', 'constant-contact-forms' ),
|
198 |
8 => __( 'List submitted.', 'constant-contact-forms' ),
|
199 |
+
/* translators: formatted post date timestamp. */
|
200 |
9 => __( 'List scheduled for: <strong>%1$s</strong>.', 'constant-contact-forms' ),
|
201 |
date_i18n( 'M j, Y @ G:i', strtotime( $post->post_date ) ),
|
202 |
10 => __( 'List draft updated.', 'constant-contact-forms' ),
|
208 |
2 => __( 'Custom field updated.', 'constant-contact-forms' ),
|
209 |
3 => __( 'Custom field deleted.', 'constant-contact-forms' ),
|
210 |
4 => __( 'Form updated.', 'constant-contact-forms' ),
|
211 |
+
5 => ! empty( $revision ) ?
|
212 |
+
/* translators: formatted revision timestamp. */
|
213 |
+
sprintf( __( 'Form restored to revision from %s', 'constant-contact-forms' ), wp_post_revision_title( $revision, false ) ) :
|
214 |
+
false,
|
215 |
+
6 => sprintf(
|
216 |
+
/* translators: form shortcode. */
|
217 |
+
__( "Success! Here's the shortcode: %s. Just paste it into a post or page editor to publish", 'constant-contact-forms' ),
|
218 |
+
'<strong>' . constant_contact_display_shortcode( $post->ID ) . '</strong>'
|
219 |
+
),
|
220 |
7 => __( 'Form saved.', 'constant-contact-forms' ),
|
221 |
8 => __( 'Form submitted.', 'constant-contact-forms' ),
|
222 |
+
/* translators: formatted post date timestamp. */
|
223 |
9 => __( 'Form scheduled for: <strong>%1$s</strong>.', 'constant-contact-forms' ),
|
224 |
date_i18n( 'M j, Y @ G:i', strtotime( $post->post_date ) ),
|
225 |
10 => __( 'Form draft updated.', 'constant-contact-forms' ),
|
includes/class-display-shortcode.php
CHANGED
@@ -127,7 +127,7 @@ class ConstantContact_Display_Shortcode {
|
|
127 |
* @param bool $show_title If true, show the title.
|
128 |
*/
|
129 |
public function display_form( $form_id, $show_title = false ) {
|
130 |
-
echo $this->get_form( absint( $form_id ), $show_title ); //
|
131 |
}
|
132 |
|
133 |
/**
|
127 |
* @param bool $show_title If true, show the title.
|
128 |
*/
|
129 |
public function display_form( $form_id, $show_title = false ) {
|
130 |
+
echo $this->get_form( absint( $form_id ), $show_title ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- XSS OK.
|
131 |
}
|
132 |
|
133 |
/**
|
includes/class-display.php
CHANGED
@@ -110,12 +110,12 @@ class ConstantContact_Display {
|
|
110 |
|
111 |
$global_form_css = [];
|
112 |
|
113 |
-
$global_form_classes =
|
114 |
if ( $global_form_classes ) {
|
115 |
$global_form_css['global_form_classes'] = $global_form_classes;
|
116 |
}
|
117 |
|
118 |
-
$global_label_placement =
|
119 |
if ( $global_label_placement ) {
|
120 |
$global_form_css['global_label_placement'] = $global_label_placement;
|
121 |
}
|
@@ -328,14 +328,28 @@ class ConstantContact_Display {
|
|
328 |
}
|
329 |
|
330 |
ob_start();
|
|
|
331 |
/**
|
332 |
* Fires before the start of the form tag.
|
333 |
*
|
|
|
|
|
334 |
* @since 1.4.0
|
335 |
*
|
336 |
* @param int $form_id Current form ID.
|
337 |
*/
|
338 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
339 |
$return .= ob_get_clean();
|
340 |
|
341 |
$return .= '<form class="' . esc_attr( $form_classes ) . '" id="' . $rf_id . '" ';
|
@@ -349,7 +363,7 @@ class ConstantContact_Display {
|
|
349 |
$return .= $this->build_form_fields( $form_data, $old_values, $req_errors, $instance );
|
350 |
|
351 |
if ( ! $disable_recaptcha && ConstantContact_reCAPTCHA::has_recaptcha_keys() ) {
|
352 |
-
$recaptcha_version =
|
353 |
if ( 'v2' === $recaptcha_version ) {
|
354 |
$return .= $this->build_recaptcha( $form_id );
|
355 |
}
|
@@ -372,14 +386,28 @@ class ConstantContact_Display {
|
|
372 |
$return .= '</form>';
|
373 |
|
374 |
ob_start();
|
|
|
375 |
/**
|
376 |
* Fires after the end of the form tag.
|
377 |
*
|
|
|
|
|
378 |
* @since 1.4.0
|
379 |
*
|
380 |
* @param int $form_id Current form ID.
|
381 |
*/
|
382 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
383 |
$return .= ob_get_clean();
|
384 |
|
385 |
$return .= '<script type="text/javascript">';
|
@@ -438,14 +466,14 @@ class ConstantContact_Display {
|
|
438 |
return false;
|
439 |
}
|
440 |
|
441 |
-
$return = $this->
|
442 |
|
443 |
// If we have saved a verify value, add that to our field as well. this is to double-check
|
444 |
// that we have the correct form id for processing later.
|
445 |
$verify_key = get_post_meta( $form_id, '_ctct_verify_key', true );
|
446 |
|
447 |
if ( $verify_key ) {
|
448 |
-
$return .= $this->
|
449 |
}
|
450 |
|
451 |
return $return;
|
@@ -487,7 +515,16 @@ class ConstantContact_Display {
|
|
487 |
}
|
488 |
}
|
489 |
|
490 |
-
if ( isset( $form_data['options'] ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
491 |
$return .= $this->opt_in( $form_data['options'], $instance );
|
492 |
}
|
493 |
|
@@ -634,7 +671,8 @@ class ConstantContact_Display {
|
|
634 |
$map = sanitize_text_field( $field['map_to'] );
|
635 |
$desc = sanitize_text_field( isset( $field['description'] ) ? $field['description'] : '' );
|
636 |
$type = sanitize_text_field( isset( $field['type'] ) ? $field['type'] : 'text_field' );
|
637 |
-
$value =
|
|
|
638 |
$req = isset( $field['required'] ) ? $field['required'] : false;
|
639 |
|
640 |
// phpcs:disable WordPress.PHP.DiscouragedPHPFunctions -- Okay use of serialize() here.
|
@@ -688,9 +726,9 @@ class ConstantContact_Display {
|
|
688 |
case 'email':
|
689 |
return $this->input( 'email', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement, $instance );
|
690 |
case 'hidden':
|
691 |
-
return $this->
|
692 |
case 'checkbox':
|
693 |
-
return $this->checkbox( $name, $map, $value, $desc, $instance );
|
694 |
case 'submit':
|
695 |
return $this->input( 'submit', $name, $map, $value, $desc, $req, false, $field_error );
|
696 |
case 'address':
|
@@ -729,6 +767,7 @@ class ConstantContact_Display {
|
|
729 |
foreach ( $submitted_vals as $post ) {
|
730 |
|
731 |
if ( isset( $post['key'] ) && $post['key'] ) {
|
|
|
732 |
|
733 |
if ( 'address' === $field['name'] ) {
|
734 |
|
@@ -737,23 +776,15 @@ class ConstantContact_Display {
|
|
737 |
$addr_key = explode( '___', $post['key'] );
|
738 |
|
739 |
if ( isset( $addr_key[0] ) && $addr_key[0] ) {
|
740 |
-
|
741 |
-
$post_key = '';
|
742 |
-
|
743 |
-
// phpcs:disable WordPress.Security.NonceVerification.NoNonceVerification -- Okay accessing of $_POST value.
|
744 |
-
if ( isset( $_POST[ esc_attr( $post['key'] ) ] ) ) {
|
745 |
-
$post_key = sanitize_text_field( wp_unslash( $_POST[ esc_attr( $post['key'] ) ] ) );
|
746 |
-
}
|
747 |
-
// phpcs:enable WordPress.Security.NonceVerification.NoNonceVerification
|
748 |
|
749 |
$return[ esc_attr( $addr_key[0] ) ] = $post_key;
|
750 |
}
|
751 |
}
|
752 |
-
|
753 |
-
|
754 |
-
return sanitize_text_field( wp_unslash( $_POST[ esc_attr( $map ) ] ) );
|
755 |
}
|
756 |
-
// phpcs:enable WordPress.Security.NonceVerification.NoNonceVerification
|
757 |
}
|
758 |
}
|
759 |
|
@@ -837,17 +868,19 @@ class ConstantContact_Display {
|
|
837 |
/**
|
838 |
* Helper method to display label for form field + field starting markup.
|
839 |
*
|
840 |
-
* @since
|
841 |
-
*
|
842 |
-
*
|
843 |
-
* @param
|
844 |
-
* @param
|
845 |
-
* @param
|
846 |
-
* @param
|
847 |
-
* @param
|
|
|
|
|
848 |
* @return string HTML markup.
|
849 |
*/
|
850 |
-
public function field_top( $type = '', $name = '', $f_id = '', $label = '', $req = false, $use_label = true ) {
|
851 |
|
852 |
$classes = [
|
853 |
'ctct-form-field',
|
@@ -857,7 +890,7 @@ class ConstantContact_Display {
|
|
857 |
$classes[] = 'ctct-form-field-required';
|
858 |
}
|
859 |
|
860 |
-
$markup = '<
|
861 |
|
862 |
if ( ! $use_label ) {
|
863 |
$markup .= '<span class="ctct-input-container">';
|
@@ -869,15 +902,17 @@ class ConstantContact_Display {
|
|
869 |
/**
|
870 |
* Bottom of field markup.
|
871 |
*
|
872 |
-
* @since
|
873 |
-
* @since
|
|
|
874 |
*
|
875 |
-
* @param
|
876 |
-
* @param
|
877 |
-
* @param
|
|
|
878 |
* @return string HTML markup
|
879 |
*/
|
880 |
-
public function field_bottom( $name = '', $field_label = '', $use_label = true ) {
|
881 |
|
882 |
$markup = '';
|
883 |
if ( ! empty( $name ) && ! empty( $field_label ) ) {
|
@@ -888,7 +923,7 @@ class ConstantContact_Display {
|
|
888 |
$markup .= '</span>';
|
889 |
}
|
890 |
|
891 |
-
return $markup .
|
892 |
}
|
893 |
|
894 |
/**
|
@@ -957,7 +992,7 @@ class ConstantContact_Display {
|
|
957 |
public function input( $type = 'text', $name = '', $id = '', $value = '', $label = '', $req = false, $f_only = false, $field_error = false, $form_id = 0, $label_placement = '', $instance = 0 ) {
|
958 |
$name = sanitize_text_field( $name );
|
959 |
$field_key = sanitize_title( $id );
|
960 |
-
$field_id = "{$field_key}_$instance";
|
961 |
$input_inline_styles = '';
|
962 |
$label_placement_class = 'ctct-label-' . $label_placement;
|
963 |
$specific_form_styles = $this->specific_form_styles;
|
@@ -979,7 +1014,7 @@ class ConstantContact_Display {
|
|
979 |
if ( $req ) {
|
980 |
$req_label = $this->display_required_indicator();
|
981 |
}
|
982 |
-
if ( ( 'top' === $label_placement || 'left' === $label_placement || 'hidden' === $label_placement ) && ( 'submit' !== $type )
|
983 |
if ( $inline_font_styles ) {
|
984 |
$markup .= '<span class="' . $label_placement_class . '" style="' . $inline_font_styles . '">';
|
985 |
} else {
|
@@ -1019,6 +1054,8 @@ class ConstantContact_Display {
|
|
1019 |
$max_length = '';
|
1020 |
if ( false !== strpos( $id, 'custom___' ) ) {
|
1021 |
$max_length = $truncate_max_length ? $this->get_max_length_attr( $name ) : $this->get_max_length_attr();
|
|
|
|
|
1022 |
}
|
1023 |
|
1024 |
if ( $field_error ) {
|
@@ -1032,8 +1069,8 @@ class ConstantContact_Display {
|
|
1032 |
$class_attr = 'class="' . implode( ' ', $classes ) . '"';
|
1033 |
}
|
1034 |
|
1035 |
-
/* translators: 1: Required text, 2: Field type, 3: Field name, 4: Inline styles, 5: Field value, 6: Max length, 7: Placeholder
|
1036 |
-
$field = '<input %1$s type="%2$s" name="%3$s" %4$s value="%5$s" %6$s %7$s %8$s %9$s
|
1037 |
$markup .= sprintf(
|
1038 |
$field,
|
1039 |
$req_text,
|
@@ -1042,16 +1079,15 @@ class ConstantContact_Display {
|
|
1042 |
$input_inline_styles,
|
1043 |
$value,
|
1044 |
$max_length,
|
1045 |
-
|
1046 |
$class_attr,
|
1047 |
-
|
1048 |
-
'hidden' === $type ? 'tabindex="-1"' : ''
|
1049 |
);
|
1050 |
|
1051 |
// Reassign because if we want "field only", like for hidden inputs, we need to still pass a value that went through sprintf().
|
1052 |
$field = $markup;
|
1053 |
|
1054 |
-
if ( ( 'bottom' === $label_placement || 'right' === $label_placement ) && ( 'submit' !== $type )
|
1055 |
$markup .= '<span class="' . $label_placement_class . '">';
|
1056 |
$markup .= $this->get_label( $field_id, $name . ' ' . $req_label );
|
1057 |
$markup .= '</span>';
|
@@ -1070,40 +1106,132 @@ class ConstantContact_Display {
|
|
1070 |
return $markup;
|
1071 |
}
|
1072 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1073 |
/**
|
1074 |
* Checkbox field helper method.
|
1075 |
*
|
1076 |
* @since 1.0.0
|
1077 |
-
*
|
1078 |
-
*
|
1079 |
-
* @param string
|
1080 |
-
* @param string
|
1081 |
-
* @param string $
|
1082 |
-
* @param
|
1083 |
-
* @
|
|
|
|
|
|
|
|
|
|
|
1084 |
*/
|
1085 |
-
public function checkbox( $name = '', $
|
1086 |
-
$name
|
1087 |
-
$field_key
|
1088 |
-
$field_id
|
1089 |
-
$
|
1090 |
-
$
|
1091 |
-
$
|
1092 |
-
$
|
|
|
|
|
|
|
|
|
|
|
1093 |
|
1094 |
/**
|
1095 |
* Filter to add classes for the rendering input.
|
1096 |
*
|
1097 |
* @since 1.2.0
|
1098 |
-
* @param array $classes
|
1099 |
-
* @param string $type
|
|
|
|
|
1100 |
* @return array
|
1101 |
*/
|
1102 |
-
$classes = apply_filters( 'constant_contact_input_classes', $classes, $type
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1103 |
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1107 |
|
1108 |
return $markup;
|
1109 |
}
|
@@ -1180,7 +1308,6 @@ class ConstantContact_Display {
|
|
1180 |
public function optin_display( $optin, $instance = 0 ) {
|
1181 |
|
1182 |
$label = sanitize_text_field( isset( $optin['instructions'] ) ? $optin['instructions'] : '' );
|
1183 |
-
$value = sanitize_text_field( isset( $optin['list'] ) ? $optin['list'] : '' );
|
1184 |
|
1185 |
$show = false;
|
1186 |
if ( isset( $optin['show'] ) && 'on' === $optin['show'] ) {
|
@@ -1193,7 +1320,7 @@ class ConstantContact_Display {
|
|
1193 |
$markup = '<div class="ctct-optin-hide" style="display:none;">';
|
1194 |
}
|
1195 |
|
1196 |
-
$markup .= $this->get_optin_markup( $label,
|
1197 |
|
1198 |
if ( ! $show ) {
|
1199 |
$markup .= '</div><!--.ctct-optin-hide -->';
|
@@ -1818,7 +1945,6 @@ class ConstantContact_Display {
|
|
1818 |
* @return string HTML markup for instance field.
|
1819 |
*/
|
1820 |
protected function create_instance_field( $instance ) {
|
1821 |
-
$instance
|
1822 |
-
return $this->input( 'hidden', 'ctct-instance', 'ctct-instance', $instance, '', false, true );
|
1823 |
}
|
1824 |
}
|
110 |
|
111 |
$global_form_css = [];
|
112 |
|
113 |
+
$global_form_classes = constant_contact_get_option( '_ctct_form_custom_classes' );
|
114 |
if ( $global_form_classes ) {
|
115 |
$global_form_css['global_form_classes'] = $global_form_classes;
|
116 |
}
|
117 |
|
118 |
+
$global_label_placement = constant_contact_get_option( 'ctct_form_label_placement' );
|
119 |
if ( $global_label_placement ) {
|
120 |
$global_form_css['global_label_placement'] = $global_label_placement;
|
121 |
}
|
328 |
}
|
329 |
|
330 |
ob_start();
|
331 |
+
|
332 |
/**
|
333 |
* Fires before the start of the form tag.
|
334 |
*
|
335 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
336 |
+
*
|
337 |
* @since 1.4.0
|
338 |
*
|
339 |
* @param int $form_id Current form ID.
|
340 |
*/
|
341 |
+
do_action_deprecated( 'ctct_before_form', [ $form_id ], '1.9.0', 'constant_contact_before_form' );
|
342 |
+
|
343 |
+
/**
|
344 |
+
* Fires before the opening form tag.
|
345 |
+
*
|
346 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
347 |
+
* @since 1.9.0
|
348 |
+
*
|
349 |
+
* @param int $form_id Current form ID.
|
350 |
+
*/
|
351 |
+
do_action( 'constant_contact_before_form', $form_id );
|
352 |
+
|
353 |
$return .= ob_get_clean();
|
354 |
|
355 |
$return .= '<form class="' . esc_attr( $form_classes ) . '" id="' . $rf_id . '" ';
|
363 |
$return .= $this->build_form_fields( $form_data, $old_values, $req_errors, $instance );
|
364 |
|
365 |
if ( ! $disable_recaptcha && ConstantContact_reCAPTCHA::has_recaptcha_keys() ) {
|
366 |
+
$recaptcha_version = constant_contact_get_option( '_ctct_recaptcha_version', '' );
|
367 |
if ( 'v2' === $recaptcha_version ) {
|
368 |
$return .= $this->build_recaptcha( $form_id );
|
369 |
}
|
386 |
$return .= '</form>';
|
387 |
|
388 |
ob_start();
|
389 |
+
|
390 |
/**
|
391 |
* Fires after the end of the form tag.
|
392 |
*
|
393 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
394 |
+
*
|
395 |
* @since 1.4.0
|
396 |
*
|
397 |
* @param int $form_id Current form ID.
|
398 |
*/
|
399 |
+
do_action_deprecated( 'ctct_after_form', [ $form_id ], '1.9.0', 'constant_contact_after_form' );
|
400 |
+
|
401 |
+
/**
|
402 |
+
* Fires after the closing form tag.
|
403 |
+
*
|
404 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
405 |
+
* @since 1.9.0
|
406 |
+
*
|
407 |
+
* @param int $form_id Current form ID.
|
408 |
+
*/
|
409 |
+
do_action( 'constant_contact_after_form', $form_id );
|
410 |
+
|
411 |
$return .= ob_get_clean();
|
412 |
|
413 |
$return .= '<script type="text/javascript">';
|
466 |
return false;
|
467 |
}
|
468 |
|
469 |
+
$return = $this->input_hidden( 'ctct-id', $form_id );
|
470 |
|
471 |
// If we have saved a verify value, add that to our field as well. this is to double-check
|
472 |
// that we have the correct form id for processing later.
|
473 |
$verify_key = get_post_meta( $form_id, '_ctct_verify_key', true );
|
474 |
|
475 |
if ( $verify_key ) {
|
476 |
+
$return .= $this->input_hidden( 'ctct-verify', $verify_key );
|
477 |
}
|
478 |
|
479 |
return $return;
|
515 |
}
|
516 |
}
|
517 |
|
518 |
+
if ( constant_contact()->api->is_connected() && isset( $form_data['options'] ) ) {
|
519 |
+
$lists = maybe_unserialize( isset( $form_data['options']['optin']['list'] ) ? $form_data['options']['optin']['list'] : '' );
|
520 |
+
|
521 |
+
$return .= $this->field( [
|
522 |
+
'name' => __( 'Select list(s) to subscribe to', 'constant-contact-forms' ),
|
523 |
+
'map_to' => 'lists',
|
524 |
+
'type' => 'checkbox',
|
525 |
+
'required' => true,
|
526 |
+
'value' => $lists,
|
527 |
+
], $old_values, $req_errors, $form_id, $label_placement, $instance );
|
528 |
$return .= $this->opt_in( $form_data['options'], $instance );
|
529 |
}
|
530 |
|
671 |
$map = sanitize_text_field( $field['map_to'] );
|
672 |
$desc = sanitize_text_field( isset( $field['description'] ) ? $field['description'] : '' );
|
673 |
$type = sanitize_text_field( isset( $field['type'] ) ? $field['type'] : 'text_field' );
|
674 |
+
$value = isset( $field['value'] ) ? $field['value'] : false;
|
675 |
+
$value = is_array( $value ) ? array_map( 'sanitize_text_field', $value ) : sanitize_text_field( $value );
|
676 |
$req = isset( $field['required'] ) ? $field['required'] : false;
|
677 |
|
678 |
// phpcs:disable WordPress.PHP.DiscouragedPHPFunctions -- Okay use of serialize() here.
|
726 |
case 'email':
|
727 |
return $this->input( 'email', $name, $map, $value, $desc, $req, false, $field_error, $form_id, $label_placement, $instance );
|
728 |
case 'hidden':
|
729 |
+
return $this->input_hidden( $name, $value );
|
730 |
case 'checkbox':
|
731 |
+
return $this->checkbox( $name, $map, $value, $desc, $req, $field_error, $form_id, $label_placement, $instance );
|
732 |
case 'submit':
|
733 |
return $this->input( 'submit', $name, $map, $value, $desc, $req, false, $field_error );
|
734 |
case 'address':
|
767 |
foreach ( $submitted_vals as $post ) {
|
768 |
|
769 |
if ( isset( $post['key'] ) && $post['key'] ) {
|
770 |
+
$post_map = filter_input( INPUT_POST, esc_attr( $map ), FILTER_SANITIZE_STRING );
|
771 |
|
772 |
if ( 'address' === $field['name'] ) {
|
773 |
|
776 |
$addr_key = explode( '___', $post['key'] );
|
777 |
|
778 |
if ( isset( $addr_key[0] ) && $addr_key[0] ) {
|
779 |
+
$post_key = filter_input( INPUT_POST, esc_attr( $post['key'] ), FILTER_SANITIZE_STRING );
|
780 |
+
$post_key = empty( $post_key ) ? '' : sanitize_text_field( wp_unslash( $post_key ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
781 |
|
782 |
$return[ esc_attr( $addr_key[0] ) ] = $post_key;
|
783 |
}
|
784 |
}
|
785 |
+
} elseif ( $post['key'] === $map && ! empty( $post_map ) ) {
|
786 |
+
return sanitize_text_field( wp_unslash( $post_map ) );
|
|
|
787 |
}
|
|
|
788 |
}
|
789 |
}
|
790 |
|
868 |
/**
|
869 |
* Helper method to display label for form field + field starting markup.
|
870 |
*
|
871 |
+
* @since 1.0.0
|
872 |
+
* @since 1.9.0 Added $tag
|
873 |
+
*
|
874 |
+
* @param string $type Type of field.
|
875 |
+
* @param string $name Name / id of field.
|
876 |
+
* @param string $f_id Field ID.
|
877 |
+
* @param string $label Label text for field.
|
878 |
+
* @param boolean $req If this field required.
|
879 |
+
* @param boolean $use_label Whether or not to use label.
|
880 |
+
* @param string $tag HTML tag for field.
|
881 |
* @return string HTML markup.
|
882 |
*/
|
883 |
+
public function field_top( $type = '', $name = '', $f_id = '', $label = '', $req = false, $use_label = true, $tag = 'p' ) {
|
884 |
|
885 |
$classes = [
|
886 |
'ctct-form-field',
|
890 |
$classes[] = 'ctct-form-field-required';
|
891 |
}
|
892 |
|
893 |
+
$markup = '<' . $tag . ' class="' . implode( ' ', $classes ) . '">';
|
894 |
|
895 |
if ( ! $use_label ) {
|
896 |
$markup .= '<span class="ctct-input-container">';
|
902 |
/**
|
903 |
* Bottom of field markup.
|
904 |
*
|
905 |
+
* @since 1.0.0
|
906 |
+
* @since 1.3.5 Added $use_label
|
907 |
+
* @since 1.9.0 Added $tag
|
908 |
*
|
909 |
+
* @param string $name Field name.
|
910 |
+
* @param string $field_label Field label.
|
911 |
+
* @param bool $use_label Whether or not to include label markup.
|
912 |
+
* @param string $tag HTML tag for field.
|
913 |
* @return string HTML markup
|
914 |
*/
|
915 |
+
public function field_bottom( $name = '', $field_label = '', $use_label = true, $tag = 'p' ) {
|
916 |
|
917 |
$markup = '';
|
918 |
if ( ! empty( $name ) && ! empty( $field_label ) ) {
|
923 |
$markup .= '</span>';
|
924 |
}
|
925 |
|
926 |
+
return $markup . "</{$tag}>";
|
927 |
}
|
928 |
|
929 |
/**
|
992 |
public function input( $type = 'text', $name = '', $id = '', $value = '', $label = '', $req = false, $f_only = false, $field_error = false, $form_id = 0, $label_placement = '', $instance = 0 ) {
|
993 |
$name = sanitize_text_field( $name );
|
994 |
$field_key = sanitize_title( $id );
|
995 |
+
$field_id = "{$field_key}_{$instance}";
|
996 |
$input_inline_styles = '';
|
997 |
$label_placement_class = 'ctct-label-' . $label_placement;
|
998 |
$specific_form_styles = $this->specific_form_styles;
|
1014 |
if ( $req ) {
|
1015 |
$req_label = $this->display_required_indicator();
|
1016 |
}
|
1017 |
+
if ( ( 'top' === $label_placement || 'left' === $label_placement || 'hidden' === $label_placement ) && ( 'submit' !== $type ) ) {
|
1018 |
if ( $inline_font_styles ) {
|
1019 |
$markup .= '<span class="' . $label_placement_class . '" style="' . $inline_font_styles . '">';
|
1020 |
} else {
|
1054 |
$max_length = '';
|
1055 |
if ( false !== strpos( $id, 'custom___' ) ) {
|
1056 |
$max_length = $truncate_max_length ? $this->get_max_length_attr( $name ) : $this->get_max_length_attr();
|
1057 |
+
} elseif ( false !== strpos( $id, 'first_name___' ) || false !== strpos( $id, 'last_name___' ) ) {
|
1058 |
+
$max_length = 'maxlength="50"';
|
1059 |
}
|
1060 |
|
1061 |
if ( $field_error ) {
|
1069 |
$class_attr = 'class="' . implode( ' ', $classes ) . '"';
|
1070 |
}
|
1071 |
|
1072 |
+
/* translators: 1: Required text, 2: Field type, 3: Field name, 4: Inline styles, 5: Field value, 6: Max length, 7: Placeholder, 8: Field class(es), 9: Field ID. */
|
1073 |
+
$field = '<input %1$s type="%2$s" name="%3$s" %4$s value="%5$s" %6$s %7$s %8$s %9$s />';
|
1074 |
$markup .= sprintf(
|
1075 |
$field,
|
1076 |
$req_text,
|
1079 |
$input_inline_styles,
|
1080 |
$value,
|
1081 |
$max_length,
|
1082 |
+
"placeholder=\"{$label}\"",
|
1083 |
$class_attr,
|
1084 |
+
"id=\"{$field_id}\""
|
|
|
1085 |
);
|
1086 |
|
1087 |
// Reassign because if we want "field only", like for hidden inputs, we need to still pass a value that went through sprintf().
|
1088 |
$field = $markup;
|
1089 |
|
1090 |
+
if ( ( 'bottom' === $label_placement || 'right' === $label_placement ) && ( 'submit' !== $type ) ) {
|
1091 |
$markup .= '<span class="' . $label_placement_class . '">';
|
1092 |
$markup .= $this->get_label( $field_id, $name . ' ' . $req_label );
|
1093 |
$markup .= '</span>';
|
1106 |
return $markup;
|
1107 |
}
|
1108 |
|
1109 |
+
/**
|
1110 |
+
* Display hidden input field.
|
1111 |
+
*
|
1112 |
+
* @author Rebekah Van Epps <rebekah.vanepps@webdevstudios.com>
|
1113 |
+
* @since 1.9.0
|
1114 |
+
*
|
1115 |
+
* @param string $name Field name.
|
1116 |
+
* @param string $value Field value.
|
1117 |
+
* @return string HTML markup for field.
|
1118 |
+
*/
|
1119 |
+
public function input_hidden( $name = '', $value = '' ) {
|
1120 |
+
return sprintf(
|
1121 |
+
/* translators: 1: Field name, 2: Field value. */
|
1122 |
+
'<input type="hidden" name="%1$s" value="%2$s" />',
|
1123 |
+
sanitize_text_field( $name ),
|
1124 |
+
sanitize_text_field( $value )
|
1125 |
+
);
|
1126 |
+
}
|
1127 |
+
|
1128 |
/**
|
1129 |
* Checkbox field helper method.
|
1130 |
*
|
1131 |
* @since 1.0.0
|
1132 |
+
* @since 1.9.0 Updated params to mirror text inputs and updated output to work with multicheck.
|
1133 |
+
*
|
1134 |
+
* @param string $name ID of form field.
|
1135 |
+
* @param string $id ID attribute value.
|
1136 |
+
* @param string|array $value Value of field.
|
1137 |
+
* @param string $label label text for input.
|
1138 |
+
* @param boolean $req If field required.
|
1139 |
+
* @param boolean $field_error Field error.
|
1140 |
+
* @param int $form_id Current form ID.
|
1141 |
+
* @param string $label_placement Where to place the label.
|
1142 |
+
* @param int $instance Current form instance.
|
1143 |
+
* @return string HTML markup for checkbox.
|
1144 |
*/
|
1145 |
+
public function checkbox( $name = '', $id = '', $value = '', $label = '', $req = false, $field_error = false, $form_id = 0, $label_placement = '', $instance = 0 ) {
|
1146 |
+
$name = sanitize_text_field( $name );
|
1147 |
+
$field_key = sanitize_title( $id );
|
1148 |
+
$field_id = "{$field_key}_{$instance}";
|
1149 |
+
$label_placement_class = 'ctct-label-top';
|
1150 |
+
$value = is_array( $value ) ? array_map( 'sanitize_text_field', $value ) : sanitize_text_field( $value );
|
1151 |
+
$value = is_array( $value ) ? $value : [ $value ];
|
1152 |
+
$label = esc_attr( $label );
|
1153 |
+
$type = 'checkbox';
|
1154 |
+
$classes = [
|
1155 |
+
'ctct-' . esc_attr( $type ),
|
1156 |
+
'ctct-label-right',
|
1157 |
+
];
|
1158 |
|
1159 |
/**
|
1160 |
* Filter to add classes for the rendering input.
|
1161 |
*
|
1162 |
* @since 1.2.0
|
1163 |
+
* @param array $classes Array of classes to apply to the field.
|
1164 |
+
* @param string $type The field type being rendered.
|
1165 |
+
* @param int $form_id Form ID.
|
1166 |
+
* @param int $field_key Field ID.
|
1167 |
* @return array
|
1168 |
*/
|
1169 |
+
$classes = apply_filters( 'constant_contact_input_classes', $classes, $type, $form_id, $field_key );
|
1170 |
+
|
1171 |
+
$markup = $this->field_top( $type, $name, $field_key, $label, $req, true, 'div' );
|
1172 |
+
$class_attr = 'class="' . implode( ' ', $classes ) . '"';
|
1173 |
+
|
1174 |
+
$markup .= '<fieldset>';
|
1175 |
+
$markup .= '<legend class="' . $label_placement_class . '">';
|
1176 |
+
$markup .= $name;
|
1177 |
+
$markup .= '</legend>';
|
1178 |
+
|
1179 |
+
$key_pieces = explode( '___', $field_key );
|
1180 |
+
$total = count( $value );
|
1181 |
+
$count = 0;
|
1182 |
+
|
1183 |
+
for ( $i = 0; $i < $total; $i++ ) {
|
1184 |
+
$input_label = $value[ $i ];
|
1185 |
+
|
1186 |
+
// Retrieve list names for label.
|
1187 |
+
if ( 'lists' === $key_pieces[0] ) {
|
1188 |
+
$list = get_posts( [
|
1189 |
+
'numberposts' => 1,
|
1190 |
+
'post_type' => 'ctct_lists',
|
1191 |
+
'meta_key' => '_ctct_list_id',
|
1192 |
+
'meta_value' => $input_label,
|
1193 |
+
] );
|
1194 |
+
|
1195 |
+
// Skip list IDs that don't have corresponding post.
|
1196 |
+
if ( empty( $list ) ) {
|
1197 |
+
continue;
|
1198 |
+
}
|
1199 |
+
|
1200 |
+
$input_label = reset( $list )->post_title;
|
1201 |
+
}
|
1202 |
+
|
1203 |
+
$markup .= sprintf(
|
1204 |
+
'<input type="%s" name="%s[]" id="%s" value="%s" %s %s />',
|
1205 |
+
$type,
|
1206 |
+
$field_key,
|
1207 |
+
"{$field_id}_{$i}",
|
1208 |
+
$value[ $i ],
|
1209 |
+
$class_attr,
|
1210 |
+
0 === $count ? 'checked' : ''
|
1211 |
+
);
|
1212 |
+
$markup .= '<span class="ctct-label-right">';
|
1213 |
+
$markup .= $this->get_label( "{$field_id}_{$i}", $input_label );
|
1214 |
+
$markup .= '</span>';
|
1215 |
+
|
1216 |
+
if ( $i < ( count( $value ) - 1 ) ) {
|
1217 |
+
$markup .= '<br />';
|
1218 |
+
}
|
1219 |
|
1220 |
+
$count++;
|
1221 |
+
}
|
1222 |
+
|
1223 |
+
$markup .= '</fieldset>';
|
1224 |
+
|
1225 |
+
if ( $field_error ) {
|
1226 |
+
$markup .= $this->field_bottom( $field_id, $field_error, true, 'div' );
|
1227 |
+
} else {
|
1228 |
+
$markup .= $this->field_bottom( '', '', true, 'div' );
|
1229 |
+
}
|
1230 |
+
|
1231 |
+
// If only one list displayed, hide input.
|
1232 |
+
if ( 'lists' === $key_pieces[0] && $count <= 1 ) {
|
1233 |
+
$markup = "<div style='display:none;'>{$markup}</div>";
|
1234 |
+
}
|
1235 |
|
1236 |
return $markup;
|
1237 |
}
|
1308 |
public function optin_display( $optin, $instance = 0 ) {
|
1309 |
|
1310 |
$label = sanitize_text_field( isset( $optin['instructions'] ) ? $optin['instructions'] : '' );
|
|
|
1311 |
|
1312 |
$show = false;
|
1313 |
if ( isset( $optin['show'] ) && 'on' === $optin['show'] ) {
|
1320 |
$markup = '<div class="ctct-optin-hide" style="display:none;">';
|
1321 |
}
|
1322 |
|
1323 |
+
$markup .= $this->get_optin_markup( $label, true, $show, $instance );
|
1324 |
|
1325 |
if ( ! $show ) {
|
1326 |
$markup .= '</div><!--.ctct-optin-hide -->';
|
1945 |
* @return string HTML markup for instance field.
|
1946 |
*/
|
1947 |
protected function create_instance_field( $instance ) {
|
1948 |
+
return $this->input_hidden( 'ctct-instance', absint( $instance ) );
|
|
|
1949 |
}
|
1950 |
}
|
includes/class-gutenberg.php
CHANGED
@@ -85,7 +85,7 @@ class ConstantContact_Gutenberg {
|
|
85 |
}
|
86 |
|
87 |
ob_start();
|
88 |
-
echo constant_contact_get_form( absint( $attributes['selectedForm'] ) ); //
|
89 |
return ob_get_clean();
|
90 |
}
|
91 |
}
|
85 |
}
|
86 |
|
87 |
ob_start();
|
88 |
+
echo constant_contact_get_form( absint( $attributes['selectedForm'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- XSS OK.
|
89 |
return ob_get_clean();
|
90 |
}
|
91 |
}
|
includes/class-lists.php
CHANGED
@@ -348,11 +348,23 @@ class ConstantContact_Lists {
|
|
348 |
/**
|
349 |
* Hook when a ctct list is updated.
|
350 |
*
|
|
|
|
|
351 |
* @since 1.0.0
|
352 |
*
|
353 |
* @param array $lists_to_insert CTCT returned list data.
|
354 |
*/
|
355 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
356 |
}
|
357 |
|
358 |
/**
|
@@ -474,13 +486,27 @@ class ConstantContact_Lists {
|
|
474 |
/**
|
475 |
* Hook when a ctct list is saved.
|
476 |
*
|
|
|
|
|
477 |
* @since 1.0.0
|
478 |
*
|
479 |
* @param integer $post_id CPT post id.
|
480 |
* @param integer $list_id Ctct list id.
|
481 |
* @param array $list Ctct returned list data.
|
482 |
*/
|
483 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
484 |
|
485 |
return is_object( $list ) && isset( $list->id );
|
486 |
}
|
@@ -623,15 +649,11 @@ class ConstantContact_Lists {
|
|
623 |
]
|
624 |
);
|
625 |
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
* @param integer $list_id Ctct list id.
|
632 |
-
* @param array $list Ctct returned list data.
|
633 |
-
*/
|
634 |
-
do_action( 'ctct_update_list', $ctct_list->ID, $list_id, $list );
|
635 |
|
636 |
return is_object( $list ) && isset( $list->id );
|
637 |
}
|
@@ -667,12 +689,25 @@ class ConstantContact_Lists {
|
|
667 |
/**
|
668 |
* Hook when a ctct list is deleted.
|
669 |
*
|
|
|
|
|
670 |
* @since 1.0.0
|
671 |
*
|
672 |
* @param integer $post_id Form list ID that was deleted.
|
673 |
* @param integer $list_id Constant Contact list ID.
|
674 |
*/
|
675 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
676 |
|
677 |
return $list;
|
678 |
}
|
348 |
/**
|
349 |
* Hook when a ctct list is updated.
|
350 |
*
|
351 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
352 |
+
*
|
353 |
* @since 1.0.0
|
354 |
*
|
355 |
* @param array $lists_to_insert CTCT returned list data.
|
356 |
*/
|
357 |
+
do_action_deprecated( 'ctct_sync_lists', [ $lists_to_insert ], '1.9.0', 'constant_contact_sync_lists' );
|
358 |
+
|
359 |
+
/**
|
360 |
+
* Fires after lists synced.
|
361 |
+
*
|
362 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
363 |
+
* @since 1.9.0
|
364 |
+
*
|
365 |
+
* @param array $lists_to_insert Synced Constant Contact lists.
|
366 |
+
*/
|
367 |
+
do_action( 'constant_contact_sync_lists', $lists_to_insert );
|
368 |
}
|
369 |
|
370 |
/**
|
486 |
/**
|
487 |
* Hook when a ctct list is saved.
|
488 |
*
|
489 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
490 |
+
*
|
491 |
* @since 1.0.0
|
492 |
*
|
493 |
* @param integer $post_id CPT post id.
|
494 |
* @param integer $list_id Ctct list id.
|
495 |
* @param array $list Ctct returned list data.
|
496 |
*/
|
497 |
+
do_action_deprecated( 'ctct_update_list', [ $ctct_list->ID, $list_id, $list ], '1.9.0', 'constant_contact_update_list' );
|
498 |
+
|
499 |
+
/**
|
500 |
+
* Fires when a list is updated.
|
501 |
+
*
|
502 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
503 |
+
* @since 1.9.0
|
504 |
+
*
|
505 |
+
* @param integer $post_id Form post ID.
|
506 |
+
* @param integer $list_id CTCT list ID.
|
507 |
+
* @param array $list CTCT list data.
|
508 |
+
*/
|
509 |
+
do_action( 'constant_contact_update_list', $ctct_list->ID, $list_id, $list );
|
510 |
|
511 |
return is_object( $list ) && isset( $list->id );
|
512 |
}
|
649 |
]
|
650 |
);
|
651 |
|
652 |
+
/* This deprecated filter is documented in includes/class-lists.php */
|
653 |
+
do_action_deprecated( 'ctct_update_list', [ $ctct_list->ID, $list_id, $list ], '1.9.0', 'constant_contact_update_list' );
|
654 |
+
|
655 |
+
/* This filter is documented in includes/class-lists.php */
|
656 |
+
do_action( 'constant_contact_update_list', $ctct_list->ID, $list_id, $list );
|
|
|
|
|
|
|
|
|
657 |
|
658 |
return is_object( $list ) && isset( $list->id );
|
659 |
}
|
689 |
/**
|
690 |
* Hook when a ctct list is deleted.
|
691 |
*
|
692 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
693 |
+
*
|
694 |
* @since 1.0.0
|
695 |
*
|
696 |
* @param integer $post_id Form list ID that was deleted.
|
697 |
* @param integer $list_id Constant Contact list ID.
|
698 |
*/
|
699 |
+
do_action_deprecated( 'ctct_delete_list', [ $post_id, $list_id ], '1.9.0', 'constant_contact_delete_list' );
|
700 |
+
|
701 |
+
/**
|
702 |
+
* Fires when a list is deleted.
|
703 |
+
*
|
704 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
705 |
+
* @since 1.9.0
|
706 |
+
*
|
707 |
+
* @param integer $post_id Form post ID.
|
708 |
+
* @param integer $list_id CTCT list ID.
|
709 |
+
*/
|
710 |
+
do_action( 'constant_contact_delete_list', $post_id, $list_id );
|
711 |
|
712 |
return $list;
|
713 |
}
|
includes/class-logging.php
CHANGED
@@ -166,7 +166,7 @@ class ConstantContact_Logging {
|
|
166 |
*/
|
167 |
public function add_options_page() {
|
168 |
|
169 |
-
$debugging_enabled =
|
170 |
|
171 |
if ( 'on' !== $debugging_enabled ) {
|
172 |
return;
|
@@ -185,6 +185,12 @@ class ConstantContact_Logging {
|
|
185 |
);
|
186 |
}
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
public function set_file_system() {
|
189 |
global $wp_filesystem;
|
190 |
WP_Filesystem();
|
@@ -226,8 +232,7 @@ class ConstantContact_Logging {
|
|
226 |
}
|
227 |
|
228 |
if ( is_file( $this->log_location_file ) && is_readable( $this->log_location_file ) ) {
|
229 |
-
// phpcs:ignore -- Not reading over network, it's on the filesystem.
|
230 |
-
$contents .= file_get_contents( $this->log_location_file );
|
231 |
}
|
232 |
|
233 |
?>
|
@@ -441,6 +446,7 @@ class ConstantContact_Logging {
|
|
441 |
* @author Rebekah Van Epps <rebekah.vanepps@webdevstudios.com>
|
442 |
* @since 1.8.2
|
443 |
*
|
|
|
444 |
* @return void
|
445 |
*/
|
446 |
protected function delete_log_dir( $dir = '' ) {
|
166 |
*/
|
167 |
public function add_options_page() {
|
168 |
|
169 |
+
$debugging_enabled = constant_contact_get_option( '_ctct_logging', '' );
|
170 |
|
171 |
if ( 'on' !== $debugging_enabled ) {
|
172 |
return;
|
185 |
);
|
186 |
}
|
187 |
|
188 |
+
/**
|
189 |
+
* Set file system.
|
190 |
+
*
|
191 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
192 |
+
* @since 1.4.5
|
193 |
+
*/
|
194 |
public function set_file_system() {
|
195 |
global $wp_filesystem;
|
196 |
WP_Filesystem();
|
232 |
}
|
233 |
|
234 |
if ( is_file( $this->log_location_file ) && is_readable( $this->log_location_file ) ) {
|
235 |
+
$contents .= file_get_contents( $this->log_location_file ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Not reading over network, it's on the filesystem.
|
|
|
236 |
}
|
237 |
|
238 |
?>
|
446 |
* @author Rebekah Van Epps <rebekah.vanepps@webdevstudios.com>
|
447 |
* @since 1.8.2
|
448 |
*
|
449 |
+
* @param string $dir Directory path.
|
450 |
* @return void
|
451 |
*/
|
452 |
protected function delete_log_dir( $dir = '' ) {
|
includes/class-mail.php
CHANGED
@@ -65,7 +65,7 @@ class ConstantContact_Mail {
|
|
65 |
|
66 |
if ( $add_to_opt_in && constant_contact()->api->is_connected() ) {
|
67 |
|
68 |
-
$maybe_bypass =
|
69 |
|
70 |
if ( 'on' !== $maybe_bypass ) {
|
71 |
/**
|
@@ -88,6 +88,7 @@ class ConstantContact_Mail {
|
|
88 |
$submission_details['form_id'] = $values['ctct-id']['value'];
|
89 |
$submission_details['submitted_email'] = $this->get_user_email_from_submission( $values );
|
90 |
|
|
|
91 |
$values = constant_contact()->process_form->pretty_values( $values );
|
92 |
|
93 |
$email_values = $this->format_values_for_email( $values, $submission_details['form_id'] );
|
@@ -108,13 +109,9 @@ class ConstantContact_Mail {
|
|
108 |
// phpcs:enable WordPress.Security.NonceVerification
|
109 |
}
|
110 |
|
111 |
-
// This would allow for setting each sections error and also allow for returning early again for cases
|
112 |
-
// like having a list, but not needing to opt in.
|
113 |
-
$has_list = get_post_meta( $submission_details['form_id'], '_ctct_list', true );
|
114 |
-
|
115 |
$emails_disabled = constant_contact_emails_disabled( $submission_details['form_id'] );
|
116 |
|
117 |
-
if ( ( ! constant_contact()->api->is_connected() || empty( $
|
118 |
|
119 |
// If we're not connected or have no list set AND we've disabled. Override.
|
120 |
$submission_details['list-available'] = 'no';
|
@@ -136,8 +133,8 @@ class ConstantContact_Mail {
|
|
136 |
*
|
137 |
* @since 1.0.0
|
138 |
*
|
139 |
-
* @param
|
140 |
-
* @return
|
141 |
*/
|
142 |
public function opt_in_user( $values ) {
|
143 |
|
@@ -146,24 +143,29 @@ class ConstantContact_Mail {
|
|
146 |
$orig = sanitize_text_field( isset( $val['orig_key'] ) ? $val['orig_key'] : '' );
|
147 |
$val = sanitize_text_field( isset( $val['value'] ) ? $val['value'] : '' );
|
148 |
|
149 |
-
if ( $key
|
|
|
|
|
150 |
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
|
156 |
-
|
157 |
-
|
158 |
-
}
|
159 |
}
|
160 |
}
|
161 |
|
162 |
-
if ( isset( $values['ctct-opt-in'] )
|
163 |
-
|
164 |
-
|
165 |
-
return constantcontact_api()->add_contact( $args, $values['ctct-id']['value'] );
|
166 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
}
|
168 |
|
169 |
/**
|
@@ -237,7 +239,7 @@ class ConstantContact_Mail {
|
|
237 |
* @since 1.0.0
|
238 |
* @since 1.3.6 Added $was_forced.
|
239 |
*
|
240 |
-
* @throws Exception
|
241 |
*
|
242 |
* @param string $destination_email Intended mail address.
|
243 |
* @param string $content Data from clean values.
|
@@ -248,7 +250,7 @@ class ConstantContact_Mail {
|
|
248 |
public function mail( $destination_email, $content, $submission_details, $was_forced = false ) {
|
249 |
|
250 |
static $last_sent = false;
|
251 |
-
$screen
|
252 |
|
253 |
if ( function_exists( 'get_current_screen' ) ) {
|
254 |
$screen = get_current_screen();
|
@@ -267,7 +269,7 @@ class ConstantContact_Mail {
|
|
267 |
} else {
|
268 |
if ( false !== strpos( $destination_email, ',' ) ) {
|
269 |
// Use trim to handle cases of ", ".
|
270 |
-
$partials
|
271 |
$partial_email = array_map( [ $this, 'get_email_part' ], $partials );
|
272 |
$partial_email = implode( ',', $partial_email );
|
273 |
} else {
|
@@ -448,7 +450,7 @@ class ConstantContact_Mail {
|
|
448 |
|
449 |
return sprintf(
|
450 |
/* Translators: placeholders simply meant for `<strong>` html tags */
|
451 |
-
'<p>' . esc_html__( '%1
|
452 |
'<strong>*',
|
453 |
'</strong>'
|
454 |
);
|
65 |
|
66 |
if ( $add_to_opt_in && constant_contact()->api->is_connected() ) {
|
67 |
|
68 |
+
$maybe_bypass = constant_contact_get_option( '_ctct_bypass_cron', '' );
|
69 |
|
70 |
if ( 'on' !== $maybe_bypass ) {
|
71 |
/**
|
88 |
$submission_details['form_id'] = $values['ctct-id']['value'];
|
89 |
$submission_details['submitted_email'] = $this->get_user_email_from_submission( $values );
|
90 |
|
91 |
+
$lists = isset( $values['ctct-lists'] ) ? $values['ctct-lists'] : [];
|
92 |
$values = constant_contact()->process_form->pretty_values( $values );
|
93 |
|
94 |
$email_values = $this->format_values_for_email( $values, $submission_details['form_id'] );
|
109 |
// phpcs:enable WordPress.Security.NonceVerification
|
110 |
}
|
111 |
|
|
|
|
|
|
|
|
|
112 |
$emails_disabled = constant_contact_emails_disabled( $submission_details['form_id'] );
|
113 |
|
114 |
+
if ( ( ! constant_contact()->api->is_connected() || empty( $lists ) ) && $emails_disabled ) {
|
115 |
|
116 |
// If we're not connected or have no list set AND we've disabled. Override.
|
117 |
$submission_details['list-available'] = 'no';
|
133 |
*
|
134 |
* @since 1.0.0
|
135 |
*
|
136 |
+
* @param array $values Submitted values.
|
137 |
+
* @return array|void Response from API.
|
138 |
*/
|
139 |
public function opt_in_user( $values ) {
|
140 |
|
143 |
$orig = sanitize_text_field( isset( $val['orig_key'] ) ? $val['orig_key'] : '' );
|
144 |
$val = sanitize_text_field( isset( $val['value'] ) ? $val['value'] : '' );
|
145 |
|
146 |
+
if ( empty( $key ) || in_array( $key, [ 'ctct-opt-in', 'ctct-id', 'ctct-lists' ], true ) ) {
|
147 |
+
continue;
|
148 |
+
}
|
149 |
|
150 |
+
$args[ $orig ] = [
|
151 |
+
'key' => $key,
|
152 |
+
'val' => $val,
|
153 |
+
];
|
154 |
|
155 |
+
if ( 'email' === $key ) {
|
156 |
+
$args['email'] = $val;
|
|
|
157 |
}
|
158 |
}
|
159 |
|
160 |
+
if ( ! isset( $values['ctct-opt-in'] ) || ! isset( $values['ctct-lists'] ) || empty( $values['ctct-lists'] ) ) {
|
161 |
+
return;
|
|
|
|
|
162 |
}
|
163 |
+
|
164 |
+
$lists = isset( $values['ctct-lists'] ) ? $values['ctct-lists'] : [];
|
165 |
+
$lists = isset( $lists['value'] ) ? $lists['value'] : [];
|
166 |
+
$args['list'] = is_array( $lists ) ? array_map( 'sanitize_text_field', $lists ) : sanitize_text_field( $lists );
|
167 |
+
|
168 |
+
return constantcontact_api()->add_contact( $args, $values['ctct-id']['value'] );
|
169 |
}
|
170 |
|
171 |
/**
|
239 |
* @since 1.0.0
|
240 |
* @since 1.3.6 Added $was_forced.
|
241 |
*
|
242 |
+
* @throws Exception Throws Exception if encountered while attempting to send email.
|
243 |
*
|
244 |
* @param string $destination_email Intended mail address.
|
245 |
* @param string $content Data from clean values.
|
250 |
public function mail( $destination_email, $content, $submission_details, $was_forced = false ) {
|
251 |
|
252 |
static $last_sent = false;
|
253 |
+
$screen = '';
|
254 |
|
255 |
if ( function_exists( 'get_current_screen' ) ) {
|
256 |
$screen = get_current_screen();
|
269 |
} else {
|
270 |
if ( false !== strpos( $destination_email, ',' ) ) {
|
271 |
// Use trim to handle cases of ", ".
|
272 |
+
$partials = array_map( 'trim', explode( ',', $destination_email ) );
|
273 |
$partial_email = array_map( [ $this, 'get_email_part' ], $partials );
|
274 |
$partial_email = implode( ',', $partial_email );
|
275 |
} else {
|
450 |
|
451 |
return sprintf(
|
452 |
/* Translators: placeholders simply meant for `<strong>` html tags */
|
453 |
+
'<p>' . esc_html__( '%1$sNote:%2$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>',
|
454 |
'<strong>*',
|
455 |
'</strong>'
|
456 |
);
|
includes/class-middleware.php
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
|
|
|
|
3 |
* @package ConstantContact
|
4 |
* @subpackage Middleware
|
5 |
* @author Constant Contact
|
@@ -58,8 +60,8 @@ class ConstantContact_Middleware {
|
|
58 |
*
|
59 |
* @since 1.0.0
|
60 |
*
|
61 |
-
* @param
|
62 |
-
* @return string
|
63 |
*/
|
64 |
public function do_signup_url( $proof = '' ) {
|
65 |
return $this->do_connect_url( $proof, [ 'new_signup' => true ] );
|
@@ -129,19 +131,24 @@ class ConstantContact_Middleware {
|
|
129 |
/**
|
130 |
* Verify a returned request from the auth server, and save the returned token.
|
131 |
*
|
132 |
-
* @
|
|
|
|
|
133 |
*
|
134 |
* @return boolean Is valid?
|
135 |
*/
|
136 |
public function verify_and_save_access_token_return() {
|
|
|
|
|
|
|
137 |
|
138 |
// If we get this, we'll want to start our process of
|
139 |
// verifying the proof that the middleware server gives us
|
140 |
// so that we can ignore any malicious entries that are sent to us
|
141 |
-
// Sanitize our expected data
|
142 |
-
$proof =
|
143 |
-
$token =
|
144 |
-
$key =
|
145 |
|
146 |
// If we're missing any piece of data, we failed.
|
147 |
if ( ! $proof || ! $token || ! $key ) {
|
@@ -156,7 +163,7 @@ class ConstantContact_Middleware {
|
|
156 |
|
157 |
constant_contact_maybe_log_it( 'Authentication', 'Authorization verification succeeded.' );
|
158 |
|
159 |
-
|
160 |
constant_contact()->connect->e_set( '_ctct_api_key', sanitize_text_field( $key ) );
|
161 |
return true;
|
162 |
}
|
1 |
<?php
|
2 |
/**
|
3 |
+
* Constant Contact Middleware.
|
4 |
+
*
|
5 |
* @package ConstantContact
|
6 |
* @subpackage Middleware
|
7 |
* @author Constant Contact
|
60 |
*
|
61 |
* @since 1.0.0
|
62 |
*
|
63 |
+
* @param string $proof Proof key.
|
64 |
+
* @return string Signup/connect url.
|
65 |
*/
|
66 |
public function do_signup_url( $proof = '' ) {
|
67 |
return $this->do_connect_url( $proof, [ 'new_signup' => true ] );
|
131 |
/**
|
132 |
* Verify a returned request from the auth server, and save the returned token.
|
133 |
*
|
134 |
+
* @since 1.0.0
|
135 |
+
*
|
136 |
+
* @throws Exception Throws Exception if encountered while attempting to verify request.
|
137 |
*
|
138 |
* @return boolean Is valid?
|
139 |
*/
|
140 |
public function verify_and_save_access_token_return() {
|
141 |
+
$proof = filter_input( INPUT_GET, 'proof', FILTER_SANITIZE_STRING );
|
142 |
+
$token = filter_input( INPUT_GET, 'token', FILTER_SANITIZE_STRING );
|
143 |
+
$key = filter_input( INPUT_GET, 'key', FILTER_SANITIZE_STRING );
|
144 |
|
145 |
// If we get this, we'll want to start our process of
|
146 |
// verifying the proof that the middleware server gives us
|
147 |
// so that we can ignore any malicious entries that are sent to us
|
148 |
+
// Sanitize our expected data.
|
149 |
+
$proof = ! empty( $proof ) ? sanitize_text_field( $proof ) : false;
|
150 |
+
$token = ! empty( $token ) ? sanitize_text_field( $token ) : false;
|
151 |
+
$key = ! empty( $key ) ? sanitize_text_field( $key ) : false;
|
152 |
|
153 |
// If we're missing any piece of data, we failed.
|
154 |
if ( ! $proof || ! $token || ! $key ) {
|
163 |
|
164 |
constant_contact_maybe_log_it( 'Authentication', 'Authorization verification succeeded.' );
|
165 |
|
166 |
+
constant_contact()->connect->update_token( sanitize_text_field( $token ) );
|
167 |
constant_contact()->connect->e_set( '_ctct_api_key', sanitize_text_field( $key ) );
|
168 |
return true;
|
169 |
}
|
includes/class-notification-content.php
CHANGED
@@ -53,9 +53,9 @@ class ConstantContact_Notification_Content {
|
|
53 |
<?php
|
54 |
printf(
|
55 |
|
56 |
-
// translators: Placeholder will hold "
|
57 |
esc_attr__( 'Get the most out of the %s plugin — use it with an active Constant Contact account.', 'constant-contact-forms' ),
|
58 |
-
'<strong>' . esc_attr__( 'Constant Contact Forms' ) . '</strong>'
|
59 |
);
|
60 |
?>
|
61 |
</p>
|
@@ -228,7 +228,7 @@ class ConstantContact_Notification_Content {
|
|
228 |
);
|
229 |
|
230 |
$reference_keys = array_keys( $references );
|
231 |
-
$last_key
|
232 |
|
233 |
array_walk( $references, function( $value, $key, $last_key ) {
|
234 |
if ( 'post' === $value['type'] ) {
|
@@ -240,7 +240,7 @@ class ConstantContact_Notification_Content {
|
|
240 |
esc_html( $value['id'] ),
|
241 |
esc_html( $key === $last_key ? '' : ', ' )
|
242 |
);
|
243 |
-
}
|
244 |
printf(
|
245 |
/* Translators: 1: URL to widgets admin screen, 2: current widget name, 3: generic widget text, 4: current widget title, 5: preposition, 6: specific sidebar name, 7: separator between links. */
|
246 |
'<a href="%1$s">%2$s %3$s "%4$s" %5$s %6$s</a>%7$s',
|
53 |
<?php
|
54 |
printf(
|
55 |
|
56 |
+
// translators: Placeholder will hold "Constant Contact Forms" with <strong> tags.
|
57 |
esc_attr__( 'Get the most out of the %s plugin — use it with an active Constant Contact account.', 'constant-contact-forms' ),
|
58 |
+
'<strong>' . esc_attr__( 'Constant Contact Forms', 'constant-contact-forms' ) . '</strong>'
|
59 |
);
|
60 |
?>
|
61 |
</p>
|
228 |
);
|
229 |
|
230 |
$reference_keys = array_keys( $references );
|
231 |
+
$last_key = array_pop( $reference_keys );
|
232 |
|
233 |
array_walk( $references, function( $value, $key, $last_key ) {
|
234 |
if ( 'post' === $value['type'] ) {
|
240 |
esc_html( $value['id'] ),
|
241 |
esc_html( $key === $last_key ? '' : ', ' )
|
242 |
);
|
243 |
+
} elseif ( 'widget' === $value['type'] ) {
|
244 |
printf(
|
245 |
/* Translators: 1: URL to widgets admin screen, 2: current widget name, 3: generic widget text, 4: current widget title, 5: preposition, 6: specific sidebar name, 7: separator between links. */
|
246 |
'<a href="%1$s">%2$s %3$s "%4$s" %5$s %6$s</a>%7$s',
|
includes/class-notifications.php
CHANGED
@@ -342,7 +342,7 @@ class ConstantContact_Notifications {
|
|
342 |
|
343 |
$is_true = ( ( 'true' === $option ) || ( '1' === $option ) );
|
344 |
|
345 |
-
return $is_true ?: false
|
346 |
}
|
347 |
|
348 |
/**
|
342 |
|
343 |
$is_true = ( ( 'true' === $option ) || ( '1' === $option ) );
|
344 |
|
345 |
+
return $is_true ?: false;
|
346 |
}
|
347 |
|
348 |
/**
|
includes/class-process-form.php
CHANGED
@@ -54,20 +54,18 @@ class ConstantContact_Process_Form {
|
|
54 |
* A wrapper to process our form via AJAX.
|
55 |
*
|
56 |
* @since 1.0.0
|
|
|
|
|
57 |
*/
|
58 |
public function process_form_ajax_wrapper() {
|
59 |
|
60 |
// See if we're passed in data.
|
61 |
-
//
|
62 |
-
|
63 |
-
// @codingStandardsIgnoreLine
|
64 |
-
if ( isset( $_POST['data'] ) ) { // Input var okay.
|
65 |
|
66 |
-
// Form data comes over serialzied, so break it apart
|
67 |
-
//
|
68 |
-
|
69 |
-
// @codingStandardsIgnoreLine
|
70 |
-
$data = explode( '&', $_POST['data'] );
|
71 |
|
72 |
// Finish converting that ajax data to something we can use.
|
73 |
$json_data = [];
|
@@ -75,6 +73,10 @@ class ConstantContact_Process_Form {
|
|
75 |
if ( is_array( $data ) ) {
|
76 |
foreach ( $data as $field ) {
|
77 |
|
|
|
|
|
|
|
|
|
78 |
// @codingStandardsIgnoreStart
|
79 |
// Our data looks like this:
|
80 |
// Array (
|
@@ -87,8 +89,19 @@ class ConstantContact_Process_Form {
|
|
87 |
$exp_fields = explode( '=', $field, 2 );
|
88 |
|
89 |
if ( isset( $exp_fields[0] ) && $exp_fields[0] ) {
|
90 |
-
$value
|
91 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
}
|
93 |
}
|
94 |
}
|
@@ -110,10 +123,13 @@ class ConstantContact_Process_Form {
|
|
110 |
switch ( $status ) {
|
111 |
|
112 |
case 'success':
|
|
|
|
|
|
|
|
|
|
|
113 |
/** This filter is documented in includes/class-process-form.php */
|
114 |
-
$message = esc_html
|
115 |
-
__( 'Your information has been submitted.', 'constant-contact-forms' ),
|
116 |
-
(int) $json_data['ctct-id'] ) );
|
117 |
break;
|
118 |
|
119 |
case 'error':
|
@@ -149,9 +165,10 @@ class ConstantContact_Process_Form {
|
|
149 |
/**
|
150 |
* Process submitted form data.
|
151 |
*
|
|
|
152 |
* @since 1.0.0
|
153 |
*
|
154 |
-
* @throws Exception
|
155 |
*
|
156 |
* @param array $data Form data.
|
157 |
* @param bool $is_ajax Whether or not processing via AJAX.
|
@@ -209,19 +226,35 @@ class ConstantContact_Process_Form {
|
|
209 |
$keys = $ctctrecaptcha->get_recaptcha_keys();
|
210 |
$ctctrecaptcha->set_recaptcha_class( new ReCaptcha( $keys['secret_key'], $method ) );
|
211 |
|
212 |
-
$ctctrecaptcha->recaptcha->setExpectedHostname(
|
213 |
if ( 'v3' === $ctctrecaptcha->get_recaptcha_version() ) {
|
|
|
214 |
/**
|
215 |
* Filters the default float value for the score threshold.
|
216 |
*
|
217 |
* This value should be between 0.0 and 1.0.
|
218 |
*
|
|
|
|
|
219 |
* @since 1.7.0
|
220 |
*
|
221 |
* @param float $value Threshold to require for submission approval.
|
222 |
* @param string $value The ID of the form that was submitted.
|
223 |
*/
|
224 |
-
$threshold = (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
|
226 |
$ctctrecaptcha->recaptcha->setScoreThreshold( $threshold );
|
227 |
$ctctrecaptcha->recaptcha->setExpectedAction( 'constantcontactsubmit' );
|
@@ -248,6 +281,7 @@ class ConstantContact_Process_Form {
|
|
248 |
/**
|
249 |
* Filters whether or not we think an entry is spam.
|
250 |
*
|
|
|
251 |
* @since 1.3.2
|
252 |
*
|
253 |
* @param bool $value Whether or not we thing an entry is spam. Default not spam.
|
@@ -298,7 +332,7 @@ class ConstantContact_Process_Form {
|
|
298 |
|
299 |
foreach ( $data as $key => $value ) {
|
300 |
|
301 |
-
if ( ! is_string( $value ) ) {
|
302 |
continue;
|
303 |
}
|
304 |
|
@@ -308,7 +342,7 @@ class ConstantContact_Process_Form {
|
|
308 |
|
309 |
$return['values'][] = [
|
310 |
'key' => sanitize_text_field( $key ),
|
311 |
-
'value' => sanitize_text_field( $value ),
|
312 |
];
|
313 |
}
|
314 |
|
@@ -316,7 +350,17 @@ class ConstantContact_Process_Form {
|
|
316 |
return;
|
317 |
}
|
318 |
|
319 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
|
321 |
if ( is_array( $field_errors ) && ! empty( $field_errors ) ) {
|
322 |
|
@@ -332,7 +376,7 @@ class ConstantContact_Process_Form {
|
|
332 |
} else {
|
333 |
|
334 |
// No need to check for opt in status because we would have returned early by now if false.
|
335 |
-
$maybe_bypass =
|
336 |
|
337 |
if ( constant_contact()->api->is_connected() && 'on' === $maybe_bypass ) {
|
338 |
constant_contact()->mail->submit_form_values( $return['values'] ); // Emails but doesn't schedule cron.
|
@@ -362,6 +406,7 @@ class ConstantContact_Process_Form {
|
|
362 |
/**
|
363 |
* Pretty our values up.
|
364 |
*
|
|
|
365 |
* @since 1.0.0
|
366 |
*
|
367 |
* @param array $values Original values.
|
@@ -434,6 +479,7 @@ class ConstantContact_Process_Form {
|
|
434 |
/**
|
435 |
* Gets our original field from a form id.
|
436 |
*
|
|
|
437 |
* @since 1.0.0
|
438 |
*
|
439 |
* @param int $form_id Form id.
|
@@ -467,38 +513,40 @@ class ConstantContact_Process_Form {
|
|
467 |
'required' => isset( $field['_ctct_required_field'] ) && $field['_ctct_required_field'],
|
468 |
];
|
469 |
|
|
|
|
|
470 |
switch ( $field['_ctct_map_select'] ) {
|
471 |
case 'address':
|
472 |
-
$return[ 'street_address___' .
|
473 |
-
$return[ 'street_address___' .
|
474 |
|
475 |
-
$return[ 'line_2_address___' .
|
476 |
-
$return[ 'line_2_address___' .
|
477 |
|
478 |
-
$return[ 'city_address___' .
|
479 |
-
$return[ 'city_address___' .
|
480 |
|
481 |
-
$return[ 'state_address___' .
|
482 |
-
$return[ 'state_address___' .
|
483 |
|
484 |
-
$return[ 'zip_address___' .
|
485 |
-
$return[ 'zip_address___' .
|
486 |
|
487 |
break;
|
488 |
case 'anniversery':
|
489 |
case 'birthday':
|
490 |
-
$return[ 'month___' .
|
491 |
-
$return[ 'month___' .
|
492 |
|
493 |
-
$return[ 'day___' .
|
494 |
-
$return[ 'day___' .
|
495 |
|
496 |
-
$return[ 'year___' .
|
497 |
-
$return[ 'year___' .
|
498 |
|
499 |
break;
|
500 |
default:
|
501 |
-
$return[ $field['_ctct_map_select'] . '___' .
|
502 |
break;
|
503 |
}
|
504 |
}
|
@@ -509,6 +557,7 @@ class ConstantContact_Process_Form {
|
|
509 |
/**
|
510 |
* Get field requirement errors.
|
511 |
*
|
|
|
512 |
* @since 1.0.0
|
513 |
*
|
514 |
* @param array $values Values.
|
@@ -568,6 +617,7 @@ class ConstantContact_Process_Form {
|
|
568 |
/**
|
569 |
* Clean our values from form submission.
|
570 |
*
|
|
|
571 |
* @since 1.0.0
|
572 |
*
|
573 |
* @param array $values Values to clean.
|
@@ -594,9 +644,12 @@ class ConstantContact_Process_Form {
|
|
594 |
continue;
|
595 |
}
|
596 |
|
597 |
-
$
|
598 |
-
|
599 |
-
|
|
|
|
|
|
|
600 |
'orig_key' => $value['key'],
|
601 |
];
|
602 |
}
|
@@ -607,9 +660,10 @@ class ConstantContact_Process_Form {
|
|
607 |
/**
|
608 |
* Form submit success/error messages.
|
609 |
*
|
|
|
610 |
* @since 1.0.0
|
611 |
*
|
612 |
-
* @throws Exception
|
613 |
*
|
614 |
* @param array $form_data Form data to process.
|
615 |
* @param string|int $form_id Form ID being processed.
|
@@ -617,13 +671,14 @@ class ConstantContact_Process_Form {
|
|
617 |
* @return false|array
|
618 |
*/
|
619 |
public function process_wrapper( $form_data = [], $form_id = 0, $instance = 0 ) {
|
|
|
620 |
|
621 |
-
if ( empty( $
|
622 |
return false;
|
623 |
}
|
624 |
|
625 |
// @todo Utilize $form_data.
|
626 |
-
if (
|
627 |
return false;
|
628 |
}
|
629 |
|
@@ -648,12 +703,26 @@ class ConstantContact_Process_Form {
|
|
648 |
/**
|
649 |
* Filters the message for the successful processed form.
|
650 |
*
|
651 |
-
* @
|
|
|
|
|
|
|
652 |
*
|
653 |
-
* @param
|
654 |
-
* @param
|
655 |
*/
|
656 |
-
$message =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
657 |
break;
|
658 |
|
659 |
case 'error':
|
@@ -686,6 +755,7 @@ class ConstantContact_Process_Form {
|
|
686 |
/**
|
687 |
* Increment a counter for processed form submissions.
|
688 |
*
|
|
|
689 |
* @since 1.2.2
|
690 |
*/
|
691 |
public function increment_processed_form_count() {
|
@@ -697,6 +767,7 @@ class ConstantContact_Process_Form {
|
|
697 |
/**
|
698 |
* Check if we have all the required fields for a given form.
|
699 |
*
|
|
|
700 |
* @since 1.3.5
|
701 |
*
|
702 |
* @param int $form_id ID of form to verify.
|
@@ -727,6 +798,7 @@ class ConstantContact_Process_Form {
|
|
727 |
/**
|
728 |
* Gets the non-human error messeage dispalyed when we think there's a bot.
|
729 |
*
|
|
|
730 |
* @since 1.5.0
|
731 |
* @param int $post_id The ID of the current post.
|
732 |
* @return string
|
@@ -737,11 +809,26 @@ class ConstantContact_Process_Form {
|
|
737 |
/**
|
738 |
* Filter the error message displayed for suspected non-humans.
|
739 |
*
|
|
|
|
|
|
|
740 |
* @since 1.5.0
|
741 |
* @param string $error The error message dispalyed.
|
742 |
* @param mixed $post_id The ID of the current post.
|
743 |
* @return string
|
744 |
*/
|
745 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
746 |
}
|
747 |
}
|
54 |
* A wrapper to process our form via AJAX.
|
55 |
*
|
56 |
* @since 1.0.0
|
57 |
+
*
|
58 |
+
* @return void|array Return array of error data if error encountered, void otherwise.
|
59 |
*/
|
60 |
public function process_form_ajax_wrapper() {
|
61 |
|
62 |
// See if we're passed in data.
|
63 |
+
// We set to ignore this from PHPCS, as our nonce is handled elsewhere.
|
64 |
+
if ( isset( $_POST['data'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
|
|
|
65 |
|
66 |
+
// Form data comes over serialzied, so break it apart.
|
67 |
+
// We set to ignore this from PHPCS, as our nonce is handled elsewhere.
|
68 |
+
$data = explode( '&', $_POST['data'] ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
|
|
|
69 |
|
70 |
// Finish converting that ajax data to something we can use.
|
71 |
$json_data = [];
|
73 |
if ( is_array( $data ) ) {
|
74 |
foreach ( $data as $field ) {
|
75 |
|
76 |
+
// Decode characters in field string.
|
77 |
+
// Used to recover array field values.
|
78 |
+
$field = urldecode( $field );
|
79 |
+
|
80 |
// @codingStandardsIgnoreStart
|
81 |
// Our data looks like this:
|
82 |
// Array (
|
89 |
$exp_fields = explode( '=', $field, 2 );
|
90 |
|
91 |
if ( isset( $exp_fields[0] ) && $exp_fields[0] ) {
|
92 |
+
$value = urldecode( isset( $exp_fields[1] ) ? $exp_fields[1] : '' );
|
93 |
+
$field_key = $exp_fields[0];
|
94 |
+
|
95 |
+
if ( stristr( $field_key, '[]' ) ) {
|
96 |
+
$field_key = explode( '[]', $field_key );
|
97 |
+
$field_key = $field_key[0];
|
98 |
+
|
99 |
+
$json_data[ esc_attr( $field_key ) ][] = sanitize_text_field( $value );
|
100 |
+
|
101 |
+
continue;
|
102 |
+
}
|
103 |
+
|
104 |
+
$json_data[ esc_attr( $field_key ) ] = sanitize_text_field( $value );
|
105 |
}
|
106 |
}
|
107 |
}
|
123 |
switch ( $status ) {
|
124 |
|
125 |
case 'success':
|
126 |
+
$form_id = (int) $json_data['ctct-id'];
|
127 |
+
|
128 |
+
/* This deprecated filter is documented in includes/class-process-form.php */
|
129 |
+
$message = apply_filters_deprecated( 'ctct_process_form_success', [ __( 'Your information has been submitted.', 'constant-contact-forms' ), $form_id ], '1.9.0', 'constant_contact_process_form_success' );
|
130 |
+
|
131 |
/** This filter is documented in includes/class-process-form.php */
|
132 |
+
$message = esc_html( apply_filters( 'constant_contact_process_form_success', $message, $form_id ) );
|
|
|
|
|
133 |
break;
|
134 |
|
135 |
case 'error':
|
165 |
/**
|
166 |
* Process submitted form data.
|
167 |
*
|
168 |
+
* @author Brad Parbs <bradparbs@webdevstudios.com>
|
169 |
* @since 1.0.0
|
170 |
*
|
171 |
+
* @throws Exception Throws Exception if encountered while attempting to process form.
|
172 |
*
|
173 |
* @param array $data Form data.
|
174 |
* @param bool $is_ajax Whether or not processing via AJAX.
|
226 |
$keys = $ctctrecaptcha->get_recaptcha_keys();
|
227 |
$ctctrecaptcha->set_recaptcha_class( new ReCaptcha( $keys['secret_key'], $method ) );
|
228 |
|
229 |
+
$ctctrecaptcha->recaptcha->setExpectedHostname( wp_parse_url( home_url(), PHP_URL_HOST ) );
|
230 |
if ( 'v3' === $ctctrecaptcha->get_recaptcha_version() ) {
|
231 |
+
|
232 |
/**
|
233 |
* Filters the default float value for the score threshold.
|
234 |
*
|
235 |
* This value should be between 0.0 and 1.0.
|
236 |
*
|
237 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
238 |
+
*
|
239 |
* @since 1.7.0
|
240 |
*
|
241 |
* @param float $value Threshold to require for submission approval.
|
242 |
* @param string $value The ID of the form that was submitted.
|
243 |
*/
|
244 |
+
$threshold = apply_filters_deprecated( 'ctct_recaptcha_threshold', [ 0.5, $data['ctct-id'] ], '1.9.0', 'constant_contact_recaptcha_threshold' );
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Filters the default float value for the score threshold.
|
248 |
+
*
|
249 |
+
* This value should be between 0.0 and 1.0.
|
250 |
+
*
|
251 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
252 |
+
* @since 1.9.0
|
253 |
+
*
|
254 |
+
* @param float $value Required threshold value.
|
255 |
+
* @param string $value Form ID.
|
256 |
+
*/
|
257 |
+
$threshold = (float) apply_filters( 'constant_contact_recaptcha_threshold', $threshold, $data['ctct-id'] );
|
258 |
|
259 |
$ctctrecaptcha->recaptcha->setScoreThreshold( $threshold );
|
260 |
$ctctrecaptcha->recaptcha->setExpectedAction( 'constantcontactsubmit' );
|
281 |
/**
|
282 |
* Filters whether or not we think an entry is spam.
|
283 |
*
|
284 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
285 |
* @since 1.3.2
|
286 |
*
|
287 |
* @param bool $value Whether or not we thing an entry is spam. Default not spam.
|
332 |
|
333 |
foreach ( $data as $key => $value ) {
|
334 |
|
335 |
+
if ( ! is_string( $value ) && ! is_array( $value ) ) {
|
336 |
continue;
|
337 |
}
|
338 |
|
342 |
|
343 |
$return['values'][] = [
|
344 |
'key' => sanitize_text_field( $key ),
|
345 |
+
'value' => is_array( $value ) ? array_map( 'sanitize_text_field', $value ) : sanitize_text_field( $value ),
|
346 |
];
|
347 |
}
|
348 |
|
350 |
return;
|
351 |
}
|
352 |
|
353 |
+
$cleaned_values = $this->clean_values( $return['values'] );
|
354 |
+
|
355 |
+
// Require at least one list to be selected.
|
356 |
+
if ( constant_contact()->api->is_connected() && ( ! isset( $cleaned_values['ctct-lists'] ) || empty( $cleaned_values['ctct-lists'] ) ) ) {
|
357 |
+
return [
|
358 |
+
'status' => 'named_error',
|
359 |
+
'error' => __( 'Please select at least one list to subscribe to.', 'constant-contact-forms' ),
|
360 |
+
];
|
361 |
+
}
|
362 |
+
|
363 |
+
$field_errors = $this->get_field_errors( $cleaned_values, $is_ajax );
|
364 |
|
365 |
if ( is_array( $field_errors ) && ! empty( $field_errors ) ) {
|
366 |
|
376 |
} else {
|
377 |
|
378 |
// No need to check for opt in status because we would have returned early by now if false.
|
379 |
+
$maybe_bypass = constant_contact_get_option( '_ctct_bypass_cron', '' );
|
380 |
|
381 |
if ( constant_contact()->api->is_connected() && 'on' === $maybe_bypass ) {
|
382 |
constant_contact()->mail->submit_form_values( $return['values'] ); // Emails but doesn't schedule cron.
|
406 |
/**
|
407 |
* Pretty our values up.
|
408 |
*
|
409 |
+
* @author Brad Parbs <bradparbs@webdevstudios.com>
|
410 |
* @since 1.0.0
|
411 |
*
|
412 |
* @param array $values Original values.
|
479 |
/**
|
480 |
* Gets our original field from a form id.
|
481 |
*
|
482 |
+
* @author Brad Parbs <bradparbs@webdevstudios.com>
|
483 |
* @since 1.0.0
|
484 |
*
|
485 |
* @param int $form_id Form id.
|
513 |
'required' => isset( $field['_ctct_required_field'] ) && $field['_ctct_required_field'],
|
514 |
];
|
515 |
|
516 |
+
$hashed_key = md5( serialize( $field_key ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize -- OK use of serialize().
|
517 |
+
|
518 |
switch ( $field['_ctct_map_select'] ) {
|
519 |
case 'address':
|
520 |
+
$return[ 'street_address___' . $hashed_key ] = $field_key;
|
521 |
+
$return[ 'street_address___' . $hashed_key ]['_ctct_map_select'] = 'street';
|
522 |
|
523 |
+
$return[ 'line_2_address___' . $hashed_key ] = $field_key;
|
524 |
+
$return[ 'line_2_address___' . $hashed_key ]['_ctct_map_select'] = 'line_2';
|
525 |
|
526 |
+
$return[ 'city_address___' . $hashed_key ] = $field_key;
|
527 |
+
$return[ 'city_address___' . $hashed_key ]['_ctct_map_select'] = 'city';
|
528 |
|
529 |
+
$return[ 'state_address___' . $hashed_key ] = $field_key;
|
530 |
+
$return[ 'state_address___' . $hashed_key ]['_ctct_map_select'] = 'state';
|
531 |
|
532 |
+
$return[ 'zip_address___' . $hashed_key ] = $field_key;
|
533 |
+
$return[ 'zip_address___' . $hashed_key ]['_ctct_map_select'] = 'zip';
|
534 |
|
535 |
break;
|
536 |
case 'anniversery':
|
537 |
case 'birthday':
|
538 |
+
$return[ 'month___' . $hashed_key ] = $field_key;
|
539 |
+
$return[ 'month___' . $hashed_key ]['_ctct_map_select'] = 'month';
|
540 |
|
541 |
+
$return[ 'day___' . $hashed_key ] = $field_key;
|
542 |
+
$return[ 'day___' . $hashed_key ]['_ctct_map_select'] = 'day';
|
543 |
|
544 |
+
$return[ 'year___' . $hashed_key ] = $field_key;
|
545 |
+
$return[ 'year___' . $hashed_key ]['_ctct_map_select'] = 'year';
|
546 |
|
547 |
break;
|
548 |
default:
|
549 |
+
$return[ $field['_ctct_map_select'] . '___' . $hashed_key ] = $field_key;
|
550 |
break;
|
551 |
}
|
552 |
}
|
557 |
/**
|
558 |
* Get field requirement errors.
|
559 |
*
|
560 |
+
* @author Brad Parbs <bradparbs@webdevstudios.com>
|
561 |
* @since 1.0.0
|
562 |
*
|
563 |
* @param array $values Values.
|
617 |
/**
|
618 |
* Clean our values from form submission.
|
619 |
*
|
620 |
+
* @author Brad Parbs <bradparbs@webdevstudios.com>
|
621 |
* @since 1.0.0
|
622 |
*
|
623 |
* @param array $values Values to clean.
|
644 |
continue;
|
645 |
}
|
646 |
|
647 |
+
$clean_key = $key_break[0];
|
648 |
+
$field_key = 'lists' === $clean_key ? 'ctct-lists' : $value['key'];
|
649 |
+
|
650 |
+
$return_values[ sanitize_text_field( $field_key ) ] = [
|
651 |
+
'key' => sanitize_text_field( $clean_key ),
|
652 |
+
'value' => is_array( $value['value'] ) ? array_map( 'sanitize_text_field', $value['value'] ) : sanitize_text_field( $value['value'] ),
|
653 |
'orig_key' => $value['key'],
|
654 |
];
|
655 |
}
|
660 |
/**
|
661 |
* Form submit success/error messages.
|
662 |
*
|
663 |
+
* @author Brad Parbs <bradparbs@webdevstudios.com>
|
664 |
* @since 1.0.0
|
665 |
*
|
666 |
+
* @throws Exception Throws Exception if encountered while attempting to process form wrapper.
|
667 |
*
|
668 |
* @param array $form_data Form data to process.
|
669 |
* @param string|int $form_id Form ID being processed.
|
671 |
* @return false|array
|
672 |
*/
|
673 |
public function process_wrapper( $form_data = [], $form_id = 0, $instance = 0 ) {
|
674 |
+
$ctct_id = absint( filter_input( INPUT_POST, 'ctct-id', FILTER_SANITIZE_NUMBER_INT ) );
|
675 |
|
676 |
+
if ( empty( $ctct_id ) ) {
|
677 |
return false;
|
678 |
}
|
679 |
|
680 |
// @todo Utilize $form_data.
|
681 |
+
if ( $ctct_id !== $form_id ) {
|
682 |
return false;
|
683 |
}
|
684 |
|
703 |
/**
|
704 |
* Filters the message for the successful processed form.
|
705 |
*
|
706 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
707 |
+
*
|
708 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
709 |
+
* @since 1.3.0
|
710 |
*
|
711 |
+
* @param string $value Success message.
|
712 |
+
* @param string/int $form_id ID of the Constant Contact form being submitted to.
|
713 |
*/
|
714 |
+
$message = apply_filters_deprecated( 'ctct_process_form_success', [ __( 'Your information has been submitted.', 'constant-contact-forms' ), $form_id ], '1.9.0', 'constant_contact_process_form_success' );
|
715 |
+
|
716 |
+
/**
|
717 |
+
* Filters the message for the successful processed form.
|
718 |
+
*
|
719 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
720 |
+
* @since 1.9.0
|
721 |
+
*
|
722 |
+
* @param string $value Success message.
|
723 |
+
* @param string|int $form_id Constant Contact form ID.
|
724 |
+
*/
|
725 |
+
$message = esc_html( apply_filters( 'constant_contact_process_form_success', $message, $form_id ) );
|
726 |
break;
|
727 |
|
728 |
case 'error':
|
755 |
/**
|
756 |
* Increment a counter for processed form submissions.
|
757 |
*
|
758 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
759 |
* @since 1.2.2
|
760 |
*/
|
761 |
public function increment_processed_form_count() {
|
767 |
/**
|
768 |
* Check if we have all the required fields for a given form.
|
769 |
*
|
770 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
771 |
* @since 1.3.5
|
772 |
*
|
773 |
* @param int $form_id ID of form to verify.
|
798 |
/**
|
799 |
* Gets the non-human error messeage dispalyed when we think there's a bot.
|
800 |
*
|
801 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
802 |
* @since 1.5.0
|
803 |
* @param int $post_id The ID of the current post.
|
804 |
* @return string
|
809 |
/**
|
810 |
* Filter the error message displayed for suspected non-humans.
|
811 |
*
|
812 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
813 |
+
*
|
814 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
815 |
* @since 1.5.0
|
816 |
* @param string $error The error message dispalyed.
|
817 |
* @param mixed $post_id The ID of the current post.
|
818 |
* @return string
|
819 |
*/
|
820 |
+
$error = apply_filters_deprecated( 'ctct_custom_spam_message', [ $error, $post_id ], '1.9.0', 'constant_contact_custom_spam_message' );
|
821 |
+
|
822 |
+
/**
|
823 |
+
* Filters error message for suspected spam entries.
|
824 |
+
*
|
825 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
826 |
+
* @since 1.9.0
|
827 |
+
*
|
828 |
+
* @param string $error Error message.
|
829 |
+
* @param int|string $post_id Current post ID.
|
830 |
+
* @return string Error message.
|
831 |
+
*/
|
832 |
+
return apply_filters( 'constant_contact_custom_spam_message', $error, $post_id );
|
833 |
}
|
834 |
}
|
includes/class-recaptcha-v2.php
CHANGED
@@ -11,6 +11,8 @@
|
|
11 |
* phpcs:disable WebDevStudios.All.RequireAuthor -- Don't require author tag in docblocks.
|
12 |
*/
|
13 |
|
|
|
|
|
14 |
/**
|
15 |
* Class ConstantContact_reCAPTCHA_v2
|
16 |
*
|
@@ -30,8 +32,6 @@ class ConstantContact_reCAPTCHA_v2 extends ConstantContact_reCAPTCHA {
|
|
30 |
* Retrieve inline scripts for the reCAPTCHA form instance.
|
31 |
*
|
32 |
* @since 1.7.0
|
33 |
-
*
|
34 |
-
* @return string
|
35 |
*/
|
36 |
public function enqueue_scripts() {
|
37 |
$debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG === true );
|
@@ -86,6 +86,16 @@ class ConstantContact_reCAPTCHA_v2 extends ConstantContact_reCAPTCHA {
|
|
86 |
$this->recaptcha_size = $size;
|
87 |
}
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
public function add_script_attributes( $tag, $handle ) {
|
90 |
if ( 'recaptcha-lib-v2' !== $handle ) {
|
91 |
return $tag;
|
11 |
* phpcs:disable WebDevStudios.All.RequireAuthor -- Don't require author tag in docblocks.
|
12 |
*/
|
13 |
|
14 |
+
// phpcs:disable PEAR.NamingConventions.ValidClassName.Invalid -- OK classname.
|
15 |
+
|
16 |
/**
|
17 |
* Class ConstantContact_reCAPTCHA_v2
|
18 |
*
|
32 |
* Retrieve inline scripts for the reCAPTCHA form instance.
|
33 |
*
|
34 |
* @since 1.7.0
|
|
|
|
|
35 |
*/
|
36 |
public function enqueue_scripts() {
|
37 |
$debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG === true );
|
86 |
$this->recaptcha_size = $size;
|
87 |
}
|
88 |
|
89 |
+
/**
|
90 |
+
* Add script attributes.
|
91 |
+
*
|
92 |
+
* @author Michael Beckwith <michael@webdevstudios.com>
|
93 |
+
* @since 1.8.3
|
94 |
+
*
|
95 |
+
* @param string $tag Script tag.
|
96 |
+
* @param string $handle Script handle.
|
97 |
+
* @return string Script tag.
|
98 |
+
*/
|
99 |
public function add_script_attributes( $tag, $handle ) {
|
100 |
if ( 'recaptcha-lib-v2' !== $handle ) {
|
101 |
return $tag;
|
includes/class-recaptcha-v3.php
CHANGED
@@ -11,6 +11,8 @@
|
|
11 |
* phpcs:disable WebDevStudios.All.RequireAuthor -- Don't require author tag in docblocks.
|
12 |
*/
|
13 |
|
|
|
|
|
14 |
/**
|
15 |
* Class ConstantContact_reCAPTCHA_v3
|
16 |
*
|
11 |
* phpcs:disable WebDevStudios.All.RequireAuthor -- Don't require author tag in docblocks.
|
12 |
*/
|
13 |
|
14 |
+
// phpcs:disable PEAR.NamingConventions.ValidClassName.Invalid -- OK classname.
|
15 |
+
|
16 |
/**
|
17 |
* Class ConstantContact_reCAPTCHA_v3
|
18 |
*
|
includes/class-recaptcha.php
CHANGED
@@ -9,6 +9,8 @@
|
|
9 |
* phpcs:disable WebDevStudios.All.RequireAuthor -- Don't require author tag in docblocks.
|
10 |
*/
|
11 |
|
|
|
|
|
12 |
/**
|
13 |
* Class ConstantContact_reCAPTCHA.
|
14 |
*
|
@@ -95,8 +97,8 @@ class ConstantContact_reCAPTCHA {
|
|
95 |
* @return bool
|
96 |
*/
|
97 |
public static function has_recaptcha_keys() {
|
98 |
-
$site_key =
|
99 |
-
$secret_key =
|
100 |
|
101 |
return $site_key && $secret_key;
|
102 |
}
|
@@ -110,8 +112,8 @@ class ConstantContact_reCAPTCHA {
|
|
110 |
*/
|
111 |
public function get_recaptcha_keys() {
|
112 |
$keys = [];
|
113 |
-
$keys['site_key'] =
|
114 |
-
$keys['secret_key'] =
|
115 |
|
116 |
return $keys;
|
117 |
}
|
@@ -149,6 +151,6 @@ class ConstantContact_reCAPTCHA {
|
|
149 |
* @since 1.7.0
|
150 |
*/
|
151 |
public function set_recaptcha_version() {
|
152 |
-
$this->version =
|
153 |
}
|
154 |
}
|
9 |
* phpcs:disable WebDevStudios.All.RequireAuthor -- Don't require author tag in docblocks.
|
10 |
*/
|
11 |
|
12 |
+
// phpcs:disable PEAR.NamingConventions.ValidClassName.Invalid -- OK classname.
|
13 |
+
|
14 |
/**
|
15 |
* Class ConstantContact_reCAPTCHA.
|
16 |
*
|
97 |
* @return bool
|
98 |
*/
|
99 |
public static function has_recaptcha_keys() {
|
100 |
+
$site_key = constant_contact_get_option( '_ctct_recaptcha_site_key', '' );
|
101 |
+
$secret_key = constant_contact_get_option( '_ctct_recaptcha_secret_key', '' );
|
102 |
|
103 |
return $site_key && $secret_key;
|
104 |
}
|
112 |
*/
|
113 |
public function get_recaptcha_keys() {
|
114 |
$keys = [];
|
115 |
+
$keys['site_key'] = constant_contact_get_option( '_ctct_recaptcha_site_key', '' );
|
116 |
+
$keys['secret_key'] = constant_contact_get_option( '_ctct_recaptcha_secret_key', '' );
|
117 |
|
118 |
return $keys;
|
119 |
}
|
151 |
* @since 1.7.0
|
152 |
*/
|
153 |
public function set_recaptcha_version() {
|
154 |
+
$this->version = constant_contact_get_option( '_ctct_recaptcha_version', '' );
|
155 |
}
|
156 |
}
|
includes/class-settings.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<?php // phpcs:ignore -- Class name okay, PSR-4.
|
2 |
/**
|
3 |
* Constant Contact Settings class.
|
4 |
*
|
@@ -85,8 +85,9 @@ class ConstantContact_Settings {
|
|
85 |
|
86 |
add_filter( 'preprocess_comment', [ $this, 'process_optin_comment_form' ] );
|
87 |
add_filter( 'authenticate', [ $this, 'process_optin_login_form' ], 10, 3 );
|
|
|
88 |
add_action( 'cmb2_save_field__ctct_logging', [ $this, 'maybe_init_logs' ], 10, 3 );
|
89 |
-
add_filter( '
|
90 |
}
|
91 |
|
92 |
/**
|
@@ -160,10 +161,11 @@ class ConstantContact_Settings {
|
|
160 |
* @return boolean If we are on the settings page or not.
|
161 |
*/
|
162 |
public function on_settings_page() {
|
163 |
-
|
164 |
global $pagenow;
|
165 |
|
166 |
-
|
|
|
|
|
167 |
}
|
168 |
|
169 |
/**
|
@@ -215,7 +217,7 @@ class ConstantContact_Settings {
|
|
215 |
public function select_primary_menu_item( $file ) {
|
216 |
global $plugin_page;
|
217 |
|
218 |
-
$plugin_page = false !== strpos( $plugin_page, $this->key ) ? "{$this->key}_general" : $plugin_page; // phpcs:ignore --
|
219 |
|
220 |
return $file;
|
221 |
}
|
@@ -269,7 +271,7 @@ class ConstantContact_Settings {
|
|
269 |
continue;
|
270 |
}
|
271 |
|
272 |
-
$cmb_key = array_search( $cmb->prop( 'tab_title' ), $this->metabox_titles );
|
273 |
|
274 |
if ( false === $cmb_key ) {
|
275 |
continue;
|
@@ -446,7 +448,7 @@ class ConstantContact_Settings {
|
|
446 |
);
|
447 |
|
448 |
$cmb->add_field( [
|
449 |
-
'name' => esc_html__( 'CSS Classes', 'constant-
|
450 |
'id' => '_ctct_form_custom_classes',
|
451 |
'type' => 'text',
|
452 |
'description' => esc_html__(
|
@@ -690,8 +692,9 @@ class ConstantContact_Settings {
|
|
690 |
* @return array Comment form data.
|
691 |
*/
|
692 |
public function process_optin_comment_form( $comment_data ) {
|
|
|
693 |
|
694 |
-
if (
|
695 |
return $comment_data;
|
696 |
}
|
697 |
|
@@ -712,15 +715,14 @@ class ConstantContact_Settings {
|
|
712 |
|
713 |
$name = isset( $comment_data['comment_author'] ) ? $comment_data['comment_author'] : '';
|
714 |
$website = isset( $comment_data['comment_author_url'] ) ? $comment_data['comment_author_url'] : '';
|
|
|
715 |
|
716 |
-
if (
|
717 |
return $comment_data;
|
718 |
}
|
719 |
|
720 |
-
$list = sanitize_text_field( wp_unslash( $_POST['ctct_optin_list'] ) ); // phpcs:ignore -- Okay accessing of $_POST.
|
721 |
-
|
722 |
$args = [
|
723 |
-
'list' => $list,
|
724 |
'email' => sanitize_email( $comment_data['comment_author_email'] ),
|
725 |
'first_name' => sanitize_text_field( $name ),
|
726 |
'last_name' => '',
|
@@ -744,8 +746,9 @@ class ConstantContact_Settings {
|
|
744 |
* @return object|array CTCT return API for contact or original $user array.
|
745 |
*/
|
746 |
public function process_optin_login_form( $user, $username, $password ) {
|
|
|
747 |
|
748 |
-
if (
|
749 |
return $user;
|
750 |
}
|
751 |
|
@@ -756,39 +759,76 @@ class ConstantContact_Settings {
|
|
756 |
return $this->process_user_data_for_optin( $user, $username );
|
757 |
}
|
758 |
|
|
|
759 |
/**
|
760 |
-
* Sends
|
761 |
*
|
762 |
* @since 1.0.0
|
763 |
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
764 |
* @param object $user WP user object.
|
765 |
-
* @param string $username Username.
|
766 |
-
* @return object Passed in $user object.
|
767 |
*/
|
768 |
-
|
769 |
|
770 |
-
$
|
771 |
-
$
|
772 |
-
$name = '';
|
773 |
|
774 |
-
if ( $
|
775 |
-
$email = sanitize_email( $
|
776 |
}
|
777 |
|
778 |
-
if ( $
|
779 |
-
$name = sanitize_text_field( $
|
780 |
}
|
781 |
|
782 |
if ( ! isset( $_POST['ctct_optin_list'] ) ) { // phpcs:ignore -- Okay accessing of $_POST.
|
783 |
-
return
|
784 |
}
|
785 |
|
786 |
-
$list =
|
|
|
|
|
|
|
|
|
787 |
|
788 |
if ( $email ) {
|
789 |
$args = [
|
790 |
'email' => $email,
|
791 |
-
'list' => $list,
|
792 |
'first_name' => $name,
|
793 |
'last_name' => '',
|
794 |
];
|
@@ -796,6 +836,20 @@ class ConstantContact_Settings {
|
|
796 |
constantcontact_api()->add_contact( $args );
|
797 |
}
|
798 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
799 |
return $user;
|
800 |
}
|
801 |
|
@@ -896,7 +950,7 @@ class ConstantContact_Settings {
|
|
896 |
<h2 class="ctct-logo"><img src="<?php echo esc_url( constant_contact()->url . '/assets/images/constant-contact-logo.png' ); ?>" alt="<?php echo esc_attr_x( 'Constant Contact logo', 'img alt text', 'constant-contact-forms' ); ?>" /></h2>
|
897 |
</div>
|
898 |
<div class="ctct-modal-body ctct-privacy-modal-body">
|
899 |
-
<?php echo constant_contact_privacy_policy_content(); // phpcs:ignore -- XSS
|
900 |
</div><!-- modal body -->
|
901 |
<div id="ctct-modal-footer-privacy" class="ctct-modal-footer ctct-modal-footer-privacy">
|
902 |
<a class="button button-blue ctct-connect" data-agree="true"><?php esc_html_e( 'Agree', 'constant-contact-forms' ); ?></a>
|
@@ -987,27 +1041,30 @@ class ConstantContact_Settings {
|
|
987 |
}
|
988 |
|
989 |
/**
|
990 |
-
*
|
991 |
*
|
992 |
-
*
|
|
|
|
|
|
|
993 |
*
|
994 |
-
* @param
|
995 |
-
* @param
|
996 |
-
* @return mixed
|
997 |
*/
|
998 |
-
function
|
999 |
if ( function_exists( 'cmb2_get_option' ) ) {
|
1000 |
return cmb2_get_option( constant_contact()->settings->key, $key, $default );
|
1001 |
}
|
1002 |
|
1003 |
-
$
|
1004 |
-
$
|
1005 |
|
1006 |
if ( 'all' === $key ) {
|
1007 |
-
$
|
1008 |
-
} elseif ( is_array( $
|
1009 |
-
$
|
1010 |
}
|
1011 |
|
1012 |
-
return $
|
1013 |
}
|
1 |
+
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- Class name okay, PSR-4.
|
2 |
/**
|
3 |
* Constant Contact Settings class.
|
4 |
*
|
85 |
|
86 |
add_filter( 'preprocess_comment', [ $this, 'process_optin_comment_form' ] );
|
87 |
add_filter( 'authenticate', [ $this, 'process_optin_login_form' ], 10, 3 );
|
88 |
+
add_filter( 'user_register', [ $this, 'process_optin_register_form' ], 10, 1 );
|
89 |
add_action( 'cmb2_save_field__ctct_logging', [ $this, 'maybe_init_logs' ], 10, 3 );
|
90 |
+
add_filter( 'constant_contact_custom_spam_message', [ $this, 'get_spam_error_message' ], 10, 2 );
|
91 |
}
|
92 |
|
93 |
/**
|
161 |
* @return boolean If we are on the settings page or not.
|
162 |
*/
|
163 |
public function on_settings_page() {
|
|
|
164 |
global $pagenow;
|
165 |
|
166 |
+
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
167 |
+
|
168 |
+
return ( 'edit.php' === $pagenow && ! empty( $page ) && $this->key === $page );
|
169 |
}
|
170 |
|
171 |
/**
|
217 |
public function select_primary_menu_item( $file ) {
|
218 |
global $plugin_page;
|
219 |
|
220 |
+
$plugin_page = false !== strpos( $plugin_page, $this->key ) ? "{$this->key}_general" : $plugin_page; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- OK overriding of WP global.
|
221 |
|
222 |
return $file;
|
223 |
}
|
271 |
continue;
|
272 |
}
|
273 |
|
274 |
+
$cmb_key = array_search( $cmb->prop( 'tab_title' ), $this->metabox_titles, true );
|
275 |
|
276 |
if ( false === $cmb_key ) {
|
277 |
continue;
|
448 |
);
|
449 |
|
450 |
$cmb->add_field( [
|
451 |
+
'name' => esc_html__( 'CSS Classes', 'constant-contact-forms' ),
|
452 |
'id' => '_ctct_form_custom_classes',
|
453 |
'type' => 'text',
|
454 |
'description' => esc_html__(
|
692 |
* @return array Comment form data.
|
693 |
*/
|
694 |
public function process_optin_comment_form( $comment_data ) {
|
695 |
+
$ctct_optin_list = filter_input( INPUT_POST, 'ctct_optin_list', FILTER_SANITIZE_STRING );
|
696 |
|
697 |
+
if ( empty( $ctct_optin_list ) ) {
|
698 |
return $comment_data;
|
699 |
}
|
700 |
|
715 |
|
716 |
$name = isset( $comment_data['comment_author'] ) ? $comment_data['comment_author'] : '';
|
717 |
$website = isset( $comment_data['comment_author_url'] ) ? $comment_data['comment_author_url'] : '';
|
718 |
+
$list = filter_input( INPUT_POST, 'ctct_optin_list', FILTER_SANITIZE_STRING );
|
719 |
|
720 |
+
if ( empty( $list ) ) {
|
721 |
return $comment_data;
|
722 |
}
|
723 |
|
|
|
|
|
724 |
$args = [
|
725 |
+
'list' => sanitize_text_field( wp_unslash( $list ) ),
|
726 |
'email' => sanitize_email( $comment_data['comment_author_email'] ),
|
727 |
'first_name' => sanitize_text_field( $name ),
|
728 |
'last_name' => '',
|
746 |
* @return object|array CTCT return API for contact or original $user array.
|
747 |
*/
|
748 |
public function process_optin_login_form( $user, $username, $password ) {
|
749 |
+
$ctct_optin_list = filter_input( INPUT_POST, 'ctct_optin_list', FILTER_SANITIZE_STRING );
|
750 |
|
751 |
+
if ( empty( $ctct_optin_list ) ) {
|
752 |
return $user;
|
753 |
}
|
754 |
|
759 |
return $this->process_user_data_for_optin( $user, $username );
|
760 |
}
|
761 |
|
762 |
+
|
763 |
/**
|
764 |
+
* Sends contact to CTCT if optin checked on register.
|
765 |
*
|
766 |
* @since 1.0.0
|
767 |
*
|
768 |
+
* @param int $user_id ID of user just registered.
|
769 |
+
* @param int Pass in user ID.
|
770 |
+
*/
|
771 |
+
public function process_optin_register_form( $user_id ) {
|
772 |
+
|
773 |
+
if ( ! isset( $_POST['ctct_optin_list'] ) ) {
|
774 |
+
return $user_id;
|
775 |
+
}
|
776 |
+
|
777 |
+
if ( empty( $user_id ) ) {
|
778 |
+
return $user_id;
|
779 |
+
}
|
780 |
+
|
781 |
+
return $this->process_user_data_register_for_optin( $user_id );
|
782 |
+
}
|
783 |
+
|
784 |
+
/**
|
785 |
+
* Process contact for CTCT on register.
|
786 |
+
*
|
787 |
+
* @author Scott Anderson <scott.anderson@webdevstudios.com>
|
788 |
+
* @since 1.9.0
|
789 |
+
* @param int $user_id ID of user just registered.
|
790 |
+
* @param int Pass in user ID.
|
791 |
+
*/
|
792 |
+
private function process_user_data_register_for_optin( $user_id ) {
|
793 |
+
$this->add_user_to_list( get_user_by( 'ID', $user_id ) );
|
794 |
+
return $user_id;
|
795 |
+
}
|
796 |
+
|
797 |
+
/**
|
798 |
+
* Sends user data to CTCT.
|
799 |
+
* Updated form of process_user_data_for_optin to be more re-usable. Old function not refactored due to public visibility setting.
|
800 |
+
*
|
801 |
+
* @author Scott Anderson <scott.anderson@webdevstudios.com>
|
802 |
+
* @since 1.9.0
|
803 |
* @param object $user WP user object.
|
|
|
|
|
804 |
*/
|
805 |
+
private function add_user_to_list( $user ) {
|
806 |
|
807 |
+
$email = '';
|
808 |
+
$name = '';
|
|
|
809 |
|
810 |
+
if ( $user && isset( $user->data, $user->data->user_email ) ) {
|
811 |
+
$email = sanitize_email( $user->data->user_email );
|
812 |
}
|
813 |
|
814 |
+
if ( $user && isset( $user->data, $user->data->display_name ) ) {
|
815 |
+
$name = sanitize_text_field( $user->data->display_name );
|
816 |
}
|
817 |
|
818 |
if ( ! isset( $_POST['ctct_optin_list'] ) ) { // phpcs:ignore -- Okay accessing of $_POST.
|
819 |
+
return;
|
820 |
}
|
821 |
|
822 |
+
$list = filter_input( INPUT_POST, 'ctct_optin_list', FILTER_SANITIZE_STRING );
|
823 |
+
|
824 |
+
if ( empty( $list ) ) {
|
825 |
+
return;
|
826 |
+
}
|
827 |
|
828 |
if ( $email ) {
|
829 |
$args = [
|
830 |
'email' => $email,
|
831 |
+
'list' => sanitize_text_field( wp_unslash( $list ) ),
|
832 |
'first_name' => $name,
|
833 |
'last_name' => '',
|
834 |
];
|
836 |
constantcontact_api()->add_contact( $args );
|
837 |
}
|
838 |
|
839 |
+
}
|
840 |
+
|
841 |
+
|
842 |
+
/**
|
843 |
+
* Sends user data to CTCT.
|
844 |
+
*
|
845 |
+
* @since 1.0.0
|
846 |
+
*
|
847 |
+
* @param object $user WP user object.
|
848 |
+
* @param string $username Username.
|
849 |
+
* @return object Passed in $user object.
|
850 |
+
*/
|
851 |
+
public function process_user_data_for_optin( $user, $username ) {
|
852 |
+
$this->add_user_to_list( get_user_by( 'login', $username ) );
|
853 |
return $user;
|
854 |
}
|
855 |
|
950 |
<h2 class="ctct-logo"><img src="<?php echo esc_url( constant_contact()->url . '/assets/images/constant-contact-logo.png' ); ?>" alt="<?php echo esc_attr_x( 'Constant Contact logo', 'img alt text', 'constant-contact-forms' ); ?>" /></h2>
|
951 |
</div>
|
952 |
<div class="ctct-modal-body ctct-privacy-modal-body">
|
953 |
+
<?php echo constant_contact_privacy_policy_content(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- XSS OK. ?>
|
954 |
</div><!-- modal body -->
|
955 |
<div id="ctct-modal-footer-privacy" class="ctct-modal-footer ctct-modal-footer-privacy">
|
956 |
<a class="button button-blue ctct-connect" data-agree="true"><?php esc_html_e( 'Agree', 'constant-contact-forms' ); ?></a>
|
1041 |
}
|
1042 |
|
1043 |
/**
|
1044 |
+
* Retrieve option value.
|
1045 |
*
|
1046 |
+
* Wrapper for `cmb2_get_option` to provide fallback when that function is not available.
|
1047 |
+
*
|
1048 |
+
* @author Rebekah Van Epps <rebekah.vanepps@webdevstudios.com>
|
1049 |
+
* @since 1.9.0
|
1050 |
*
|
1051 |
+
* @param string $key Option key.
|
1052 |
+
* @param mixed $default Default option value.
|
1053 |
+
* @return mixed Option value.
|
1054 |
*/
|
1055 |
+
function constant_contact_get_option( $key = '', $default = null ) {
|
1056 |
if ( function_exists( 'cmb2_get_option' ) ) {
|
1057 |
return cmb2_get_option( constant_contact()->settings->key, $key, $default );
|
1058 |
}
|
1059 |
|
1060 |
+
$options = get_option( constant_contact()->settings->key, $key, $default );
|
1061 |
+
$value = $default;
|
1062 |
|
1063 |
if ( 'all' === $key ) {
|
1064 |
+
$value = $options;
|
1065 |
+
} elseif ( is_array( $options ) && array_key_exists( $key, $options ) && false !== $options[ $key ] ) {
|
1066 |
+
$value = $options[ $key ];
|
1067 |
}
|
1068 |
|
1069 |
+
return $value;
|
1070 |
}
|
includes/class-shortcode.php
CHANGED
@@ -36,6 +36,7 @@ class ConstantContact_Shortcode {
|
|
36 |
/**
|
37 |
* Plugin object.
|
38 |
*
|
|
|
39 |
* @var Constant_Contact
|
40 |
*/
|
41 |
public $plugin;
|
36 |
/**
|
37 |
* Plugin object.
|
38 |
*
|
39 |
+
* @since 1.6.0
|
40 |
* @var Constant_Contact
|
41 |
*/
|
42 |
public $plugin;
|
includes/class-uninstall.php
CHANGED
@@ -87,11 +87,23 @@ class ConstantContact_Uninstall {
|
|
87 |
/**
|
88 |
* Allows filtering which options are deleted upon plugin deactivation.
|
89 |
*
|
|
|
|
|
90 |
* @since 1.6.0
|
91 |
*
|
92 |
* @param array $options One-dimensional array of option names to delete.
|
93 |
*/
|
94 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
}
|
96 |
|
97 |
/**
|
@@ -112,11 +124,23 @@ class ConstantContact_Uninstall {
|
|
112 |
/**
|
113 |
* Allows filtering which transients are deleted upon plugin deactivation.
|
114 |
*
|
|
|
|
|
115 |
* @since 1.6.0
|
116 |
*
|
117 |
* @param array $transients One-dimensional array of transient names to delete.
|
118 |
*/
|
119 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
}
|
121 |
|
122 |
/**
|
@@ -134,11 +158,23 @@ class ConstantContact_Uninstall {
|
|
134 |
/**
|
135 |
* Allows filtering which cron hooks are deleted upon plugin deactivation.
|
136 |
*
|
|
|
|
|
137 |
* @since 1.6.0
|
138 |
*
|
139 |
* @param array $cron_hooks One-dimensional array of cron hook names to delete.
|
140 |
*/
|
141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
}
|
143 |
|
144 |
/**
|
87 |
/**
|
88 |
* Allows filtering which options are deleted upon plugin deactivation.
|
89 |
*
|
90 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
91 |
+
*
|
92 |
* @since 1.6.0
|
93 |
*
|
94 |
* @param array $options One-dimensional array of option names to delete.
|
95 |
*/
|
96 |
+
$options = apply_filters_deprecated( 'ctct_option_names_to_uninstall', [ $this->options ], '1.9.0', 'constant_contact_option_names_to_uninstall' );
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Filters which options are deleted when plugin is uninstalled.
|
100 |
+
*
|
101 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
102 |
+
* @since 1.9.0
|
103 |
+
*
|
104 |
+
* @param array $options Options to be deleted.
|
105 |
+
*/
|
106 |
+
return apply_filters( 'constant_contact_option_names_to_uninstall', $options );
|
107 |
}
|
108 |
|
109 |
/**
|
124 |
/**
|
125 |
* Allows filtering which transients are deleted upon plugin deactivation.
|
126 |
*
|
127 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
128 |
+
*
|
129 |
* @since 1.6.0
|
130 |
*
|
131 |
* @param array $transients One-dimensional array of transient names to delete.
|
132 |
*/
|
133 |
+
$transients = apply_filters_deprecated( 'ctct_transient_names_to_uninstall', [ $this->transients ], '1.9.0', 'constant_contact_transient_names_to_uninstall' );
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Filters which transients are deleted when plugin is uninstalled.
|
137 |
+
*
|
138 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
139 |
+
* @since 1.9.0
|
140 |
+
*
|
141 |
+
* @param array $transients Transients to be deleted.
|
142 |
+
*/
|
143 |
+
return apply_filters( 'constant_contact_transient_names_to_uninstall', $transients );
|
144 |
}
|
145 |
|
146 |
/**
|
158 |
/**
|
159 |
* Allows filtering which cron hooks are deleted upon plugin deactivation.
|
160 |
*
|
161 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed hookname.
|
162 |
+
*
|
163 |
* @since 1.6.0
|
164 |
*
|
165 |
* @param array $cron_hooks One-dimensional array of cron hook names to delete.
|
166 |
*/
|
167 |
+
$cron_hooks = apply_filters_deprecated( 'ctct_cron_hook_names_to_uninstall', [ $this->cron_hooks ], '1.9.0', 'constant_contact_cron_hook_names_to_uninstall' );
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Filters which cron hooks are deleted when plugin is uninstalled.
|
171 |
+
*
|
172 |
+
* @author Rebekah Van Epps <rebekah.vanepp@webdevstudios.com>
|
173 |
+
* @since 1.9.0
|
174 |
+
*
|
175 |
+
* @param array $cron_hooks Cron hooks to be deleted.
|
176 |
+
*/
|
177 |
+
return apply_filters( 'constant_contact_cron_hook_names_to_uninstall', $cron_hooks );
|
178 |
}
|
179 |
|
180 |
/**
|
includes/class-user-customizations.php
CHANGED
@@ -43,7 +43,7 @@ class ConstantContact_User_Customizations {
|
|
43 |
* @since 1.3.0
|
44 |
*/
|
45 |
public function hooks() {
|
46 |
-
add_filter( '
|
47 |
add_filter( 'constant_contact_front_form_action', [ $this, 'custom_redirect' ], 10, 2 );
|
48 |
add_filter( 'constant_contact_destination_email', [ $this, 'custom_email' ], 10, 2 );
|
49 |
}
|
43 |
* @since 1.3.0
|
44 |
*/
|
45 |
public function hooks() {
|
46 |
+
add_filter( 'constant_contact_process_form_success', [ $this, 'process_form_success' ], 10, 2 );
|
47 |
add_filter( 'constant_contact_front_form_action', [ $this, 'custom_redirect' ], 10, 2 );
|
48 |
add_filter( 'constant_contact_destination_email', [ $this, 'custom_email' ], 10, 2 );
|
49 |
}
|
includes/compatibility.php
CHANGED
@@ -81,7 +81,7 @@ function constant_contact_wpspamshield_compatibility( $ignored_keys = [], $form_
|
|
81 |
|
82 |
// This will grab all of the keys from the global $_POST, and then assign
|
83 |
// the difference between that and our intended keys.
|
84 |
-
$bad_keys = array_diff( array_keys( $_POST ), $good_keys ); //
|
85 |
|
86 |
// This will merge the passed ignored keys with our newly found bad keys,
|
87 |
// and then return all the unique values for our return value.
|
81 |
|
82 |
// This will grab all of the keys from the global $_POST, and then assign
|
83 |
// the difference between that and our intended keys.
|
84 |
+
$bad_keys = array_diff( array_keys( $_POST ), $good_keys ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- CSRF OK.
|
85 |
|
86 |
// This will merge the passed ignored keys with our newly found bad keys,
|
87 |
// and then return all the unique values for our return value.
|
includes/deprecated.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated functions.
|
4 |
+
*
|
5 |
+
* @package Constantcontact
|
6 |
+
* @author Constant Contact
|
7 |
+
* @since 1.9.0
|
8 |
+
*
|
9 |
+
* phpcs:disable WebDevStudios.All.RequireAuthor -- Don't require author tag in docblocks.
|
10 |
+
* phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound -- Incorrectly prefixed functions have been deprecated.
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Wrapper function around cmb2_get_option.
|
15 |
+
*
|
16 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed function name.
|
17 |
+
*
|
18 |
+
* @since 1.0.0
|
19 |
+
*
|
20 |
+
* @param string $key Options array key.
|
21 |
+
* @param string $default Default value if no option exists.
|
22 |
+
* @return mixed Option value.
|
23 |
+
*/
|
24 |
+
function ctct_get_settings_option( $key = '', $default = null ) {
|
25 |
+
_deprecated_function( __FUNCTION__, '1.9.0', 'constant_contact_get_option' );
|
26 |
+
|
27 |
+
return constant_contact_get_option( $key, $default );
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Process potential custom Constant Contact Forms action urls.
|
32 |
+
*
|
33 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed function name.
|
34 |
+
*
|
35 |
+
* @since 1.2.3
|
36 |
+
*
|
37 |
+
* @throws Exception Throw Exception if error occurs during form processing.
|
38 |
+
*
|
39 |
+
* @return bool|array
|
40 |
+
*/
|
41 |
+
function ctct_custom_form_action_processing() {
|
42 |
+
_deprecated_function( __FUNCTION__, '1.9.0', 'constant_contact_process_form_custom' );
|
43 |
+
|
44 |
+
return constant_contact_process_form_custom();
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Determine if we have any Constant Contact Forms published.
|
49 |
+
*
|
50 |
+
* @deprecated 1.9.0 Deprecated in favor of properly-prefixed function name.
|
51 |
+
*
|
52 |
+
* @since 1.2.5
|
53 |
+
*
|
54 |
+
* @return bool
|
55 |
+
*/
|
56 |
+
function ctct_has_forms() {
|
57 |
+
_deprecated_function( __FUNCTION__, '1.9.0', 'constant_contact_has_forms' );
|
58 |
+
|
59 |
+
return constant_contact_has_forms();
|
60 |
+
}
|
includes/helper-functions.php
CHANGED
@@ -196,8 +196,8 @@ function constant_contact_maybe_display_exceptions_notice() {
|
|
196 |
* @since 1.2.0
|
197 |
*/
|
198 |
function constant_contact_optin_ajax_handler() {
|
199 |
-
|
200 |
-
$optin =
|
201 |
|
202 |
if ( 'on' !== $optin ) {
|
203 |
wp_send_json_success( [ 'opted-in' => 'off' ] );
|
@@ -218,8 +218,9 @@ add_action( 'wp_ajax_constant_contact_optin_ajax_handler', 'constant_contact_opt
|
|
218 |
* @since 1.2.0
|
219 |
*/
|
220 |
function constant_contact_privacy_ajax_handler() {
|
|
|
|
|
221 |
|
222 |
-
$agreed = filter_var( $_REQUEST['privacy_agree'], FILTER_SANITIZE_STRING );
|
223 |
update_option( 'ctct_privacy_policy_status', $agreed );
|
224 |
|
225 |
wp_send_json_success( [ 'updated' => 'true' ] );
|
@@ -269,16 +270,14 @@ function constant_contact_review_ajax_handler() {
|
|
269 |
add_action( 'wp_ajax_constant_contact_review_ajax_handler', 'constant_contact_review_ajax_handler' );
|
270 |
|
271 |
/**
|
272 |
-
*
|
273 |
-
*
|
274 |
-
* @since 1.2.3
|
275 |
*
|
276 |
-
* @
|
|
|
277 |
*
|
278 |
-
* @return
|
279 |
*/
|
280 |
-
function
|
281 |
-
|
282 |
$ctct_id = filter_input( INPUT_POST, 'ctct-id', FILTER_VALIDATE_INT );
|
283 |
|
284 |
if ( false === $ctct_id ) {
|
@@ -291,22 +290,24 @@ function ctct_custom_form_action_processing() {
|
|
291 |
|
292 |
return constant_contact()->process_form->process_form();
|
293 |
}
|
294 |
-
add_action( 'wp_head', '
|
295 |
|
296 |
/**
|
297 |
-
*
|
298 |
*
|
299 |
-
* @
|
|
|
300 |
*
|
301 |
-
* @return bool
|
302 |
*/
|
303 |
-
function
|
304 |
$args = [
|
305 |
'post_type' => 'ctct_forms',
|
306 |
'post_status' => 'publish',
|
307 |
'posts_per_page' => 1,
|
308 |
];
|
309 |
$forms = new WP_Query( $args );
|
|
|
310 |
return $forms->have_posts();
|
311 |
}
|
312 |
|
@@ -384,7 +385,7 @@ function constant_contact_clean_url( $url = '' ) {
|
|
384 |
* @return bool
|
385 |
*/
|
386 |
function constant_contact_debugging_enabled() {
|
387 |
-
$debugging_enabled =
|
388 |
|
389 |
if ( apply_filters( 'constant_contact_force_logging', false ) ) {
|
390 |
$debugging_enabled = 'on';
|
@@ -567,7 +568,7 @@ function constant_contact_emails_disabled( $form_id = 0 ) {
|
|
567 |
$disabled = true;
|
568 |
}
|
569 |
|
570 |
-
$global_form_disabled =
|
571 |
if ( 'on' === $global_form_disabled ) {
|
572 |
$disabled = true;
|
573 |
}
|
@@ -626,7 +627,7 @@ function constant_contact_get_css_customization( $form_id, $customization_key =
|
|
626 |
}
|
627 |
}
|
628 |
|
629 |
-
$global_setting =
|
630 |
|
631 |
return ! empty( $global_setting ) ? $global_setting : '';
|
632 |
}
|
@@ -657,7 +658,7 @@ function constant_contact_privacy_policy_content() {
|
|
657 |
*
|
658 |
* @since 1.6.0
|
659 |
*
|
660 |
-
* @param string $status Status value to set
|
661 |
*/
|
662 |
function constant_contact_set_has_exceptions( $status = 'true' ) {
|
663 |
update_option( 'ctct_exceptions_exist', $status );
|
@@ -735,7 +736,7 @@ function constant_contact_get_widgets_by_form( $form_id ) {
|
|
735 |
$widgets = array_filter( get_option( "widget_{$widget_type}", [] ), function( $value ) use ( $data ) {
|
736 |
if ( 'ctct_form' === $data['type'] ) {
|
737 |
return absint( $value['ctct_form_id'] ) === $data['form_id'];
|
738 |
-
}
|
739 |
if ( ! isset( $value['text'] ) || false === strpos( $value['text'], '[ctct' ) ) {
|
740 |
return false;
|
741 |
}
|
@@ -744,7 +745,7 @@ function constant_contact_get_widgets_by_form( $form_id ) {
|
|
744 |
return false;
|
745 |
} );
|
746 |
array_walk( $widgets, 'constant_contact_walk_widget_references', $widget_type );
|
747 |
-
$return
|
748 |
}
|
749 |
|
750 |
return $return;
|
@@ -763,11 +764,11 @@ function constant_contact_get_widgets_by_form( $form_id ) {
|
|
763 |
function constant_contact_walk_widget_references( array &$value, $key, $type ) {
|
764 |
global $wp_registered_sidebars, $wp_registered_widgets;
|
765 |
|
766 |
-
$widget_id
|
767 |
-
$sidebars
|
768 |
-
return is_array( $sidebar ) && in_array( $widget_id, $sidebar );
|
769 |
} ) );
|
770 |
-
$value
|
771 |
'type' => 'widget',
|
772 |
'widget' => $type,
|
773 |
'url' => admin_url( 'widgets.php' ),
|
196 |
* @since 1.2.0
|
197 |
*/
|
198 |
function constant_contact_optin_ajax_handler() {
|
199 |
+
$optin = filter_input( INPUT_GET, 'optin', FILTER_SANITIZE_STRING );
|
200 |
+
$optin = empty( $optin ) ? filter_input( INPUT_POST, 'optin', FILTER_SANITIZE_STRING ) : $optin;
|
201 |
|
202 |
if ( 'on' !== $optin ) {
|
203 |
wp_send_json_success( [ 'opted-in' => 'off' ] );
|
218 |
* @since 1.2.0
|
219 |
*/
|
220 |
function constant_contact_privacy_ajax_handler() {
|
221 |
+
$agreed = filter_input( INPUT_GET, 'privacy_agree', FILTER_SANITIZE_STRING );
|
222 |
+
$agreed = empty( $agreed ) ? filter_input( INPUT_POST, 'privacy_agree', FILTER_SANITIZE_STRING ) : $agreed;
|
223 |
|
|
|
224 |
update_option( 'ctct_privacy_policy_status', $agreed );
|
225 |
|
226 |
wp_send_json_success( [ 'updated' => 'true' ] );
|
270 |
add_action( 'wp_ajax_constant_contact_review_ajax_handler', 'constant_contact_review_ajax_handler' );
|
271 |
|
272 |
/**
|
273 |
+
* Perform custom form processing.
|
|
|
|
|
274 |
*
|
275 |
+
* @author Rebekah Van Epps <rebekah.vanepps@webdevstudios.com>
|
276 |
+
* @since 1.9.0
|
277 |
*
|
278 |
+
* @return mixed Results of form processing, false if no processing performed.
|
279 |
*/
|
280 |
+
function constant_contact_process_form_custom() {
|
|
|
281 |
$ctct_id = filter_input( INPUT_POST, 'ctct-id', FILTER_VALIDATE_INT );
|
282 |
|
283 |
if ( false === $ctct_id ) {
|
290 |
|
291 |
return constant_contact()->process_form->process_form();
|
292 |
}
|
293 |
+
add_action( 'wp_head', 'constant_contact_process_form_custom' );
|
294 |
|
295 |
/**
|
296 |
+
* Check if any published Constant Contact forms exist.
|
297 |
*
|
298 |
+
* @author Rebekah Van Epps <rebekah.vanepps@webdevstudios.com>
|
299 |
+
* @since 1.9.0
|
300 |
*
|
301 |
+
* @return bool Whether published forms exist.
|
302 |
*/
|
303 |
+
function constant_contact_has_forms() {
|
304 |
$args = [
|
305 |
'post_type' => 'ctct_forms',
|
306 |
'post_status' => 'publish',
|
307 |
'posts_per_page' => 1,
|
308 |
];
|
309 |
$forms = new WP_Query( $args );
|
310 |
+
|
311 |
return $forms->have_posts();
|
312 |
}
|
313 |
|
385 |
* @return bool
|
386 |
*/
|
387 |
function constant_contact_debugging_enabled() {
|
388 |
+
$debugging_enabled = constant_contact_get_option( '_ctct_logging', '' );
|
389 |
|
390 |
if ( apply_filters( 'constant_contact_force_logging', false ) ) {
|
391 |
$debugging_enabled = 'on';
|
568 |
$disabled = true;
|
569 |
}
|
570 |
|
571 |
+
$global_form_disabled = constant_contact_get_option( '_ctct_disable_email_notifications', '' );
|
572 |
if ( 'on' === $global_form_disabled ) {
|
573 |
$disabled = true;
|
574 |
}
|
627 |
}
|
628 |
}
|
629 |
|
630 |
+
$global_setting = constant_contact_get_option( $customization_key );
|
631 |
|
632 |
return ! empty( $global_setting ) ? $global_setting : '';
|
633 |
}
|
658 |
*
|
659 |
* @since 1.6.0
|
660 |
*
|
661 |
+
* @param string $status Status value to set.
|
662 |
*/
|
663 |
function constant_contact_set_has_exceptions( $status = 'true' ) {
|
664 |
update_option( 'ctct_exceptions_exist', $status );
|
736 |
$widgets = array_filter( get_option( "widget_{$widget_type}", [] ), function( $value ) use ( $data ) {
|
737 |
if ( 'ctct_form' === $data['type'] ) {
|
738 |
return absint( $value['ctct_form_id'] ) === $data['form_id'];
|
739 |
+
} elseif ( 'text' === $data['type'] ) {
|
740 |
if ( ! isset( $value['text'] ) || false === strpos( $value['text'], '[ctct' ) ) {
|
741 |
return false;
|
742 |
}
|
745 |
return false;
|
746 |
} );
|
747 |
array_walk( $widgets, 'constant_contact_walk_widget_references', $widget_type );
|
748 |
+
$return = array_merge( $return, $widgets );
|
749 |
}
|
750 |
|
751 |
return $return;
|
764 |
function constant_contact_walk_widget_references( array &$value, $key, $type ) {
|
765 |
global $wp_registered_sidebars, $wp_registered_widgets;
|
766 |
|
767 |
+
$widget_id = "{$type}-{$key}";
|
768 |
+
$sidebars = array_keys( array_filter( get_option( 'sidebars_widgets', [] ), function( $sidebar ) use ( $widget_id ) {
|
769 |
+
return is_array( $sidebar ) && in_array( $widget_id, $sidebar, true );
|
770 |
} ) );
|
771 |
+
$value = [
|
772 |
'type' => 'widget',
|
773 |
'widget' => $type,
|
774 |
'url' => admin_url( 'widgets.php' ),
|
includes/widgets/contact-form-select.php
CHANGED
@@ -112,16 +112,17 @@ class ConstantContactWidget extends WP_Widget {
|
|
112 |
$title = trim( wp_strip_all_tags( $instance['ctct_title'] ) );
|
113 |
$form_id = absint( $instance['ctct_form_id'] );
|
114 |
$show_form_title = ( ! empty( $instance['ctct_form_title'] ) ) ? 'true' : 'false';
|
115 |
-
|
116 |
-
echo $args['before_widget']; // WPCS: XSS Ok.
|
117 |
|
118 |
if ( $title ) {
|
119 |
-
|
120 |
}
|
121 |
|
122 |
-
|
|
|
|
|
123 |
|
124 |
-
echo $
|
125 |
}
|
126 |
|
127 |
/**
|
@@ -238,13 +239,14 @@ class ConstantContactWidget extends WP_Widget {
|
|
238 |
);
|
239 |
}
|
240 |
}
|
|
|
241 |
printf(
|
242 |
'<p><label for="%1$s">%2$s</label><select class="widefat" name="%3$s" id="%4$s">%5$s</select>',
|
243 |
esc_attr( $name ),
|
244 |
esc_html( $label_text ),
|
245 |
esc_attr( $name ),
|
246 |
esc_attr( $id ),
|
247 |
-
$selects
|
248 |
);
|
249 |
}
|
250 |
}
|
112 |
$title = trim( wp_strip_all_tags( $instance['ctct_title'] ) );
|
113 |
$form_id = absint( $instance['ctct_form_id'] );
|
114 |
$show_form_title = ( ! empty( $instance['ctct_form_title'] ) ) ? 'true' : 'false';
|
115 |
+
$widget = $args['before_widget'];
|
|
|
116 |
|
117 |
if ( $title ) {
|
118 |
+
$widget .= $args['before_title'] . esc_html( $title ) . $args['after_title'];
|
119 |
}
|
120 |
|
121 |
+
$widget .= do_shortcode( sprintf( '[ctct form="%s" show_title="%s"]', $form_id, $show_form_title ) );
|
122 |
+
|
123 |
+
$widget .= $args['after_widget'];
|
124 |
|
125 |
+
echo $widget; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- XSS OK.
|
126 |
}
|
127 |
|
128 |
/**
|
239 |
);
|
240 |
}
|
241 |
}
|
242 |
+
|
243 |
printf(
|
244 |
'<p><label for="%1$s">%2$s</label><select class="widefat" name="%3$s" id="%4$s">%5$s</select>',
|
245 |
esc_attr( $name ),
|
246 |
esc_html( $label_text ),
|
247 |
esc_attr( $name ),
|
248 |
esc_attr( $id ),
|
249 |
+
$selects // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- XSS OK.
|
250 |
);
|
251 |
}
|
252 |
}
|
languages/constant-contact-forms.pot
CHANGED
@@ -13,15 +13,15 @@ msgstr ""
|
|
13 |
"X-Poedit-SourceCharset: UTF-8\n"
|
14 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
|
16 |
-
#: constant-contact-forms.php:
|
17 |
msgid "Constant Contact"
|
18 |
msgstr ""
|
19 |
|
20 |
-
#: constant-contact-forms.php:
|
21 |
msgid "Constant Contact Forms requires PHP 5.4 or higher. Your hosting provider or website administrator should be able to assist in updating your PHP version."
|
22 |
msgstr ""
|
23 |
|
24 |
-
#: constant-contact-forms.php:
|
25 |
msgid "Error loading license."
|
26 |
msgstr ""
|
27 |
|
@@ -74,7 +74,7 @@ msgctxt "img alt text"
|
|
74 |
msgid "Constant Contact Logo"
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: includes/class-admin-pages.php:216
|
78 |
msgid "Constant Contact Forms"
|
79 |
msgstr ""
|
80 |
|
@@ -214,15 +214,15 @@ msgstr ""
|
|
214 |
msgid "Constant Contact Forms - License"
|
215 |
msgstr ""
|
216 |
|
217 |
-
#: includes/class-admin.php:129, includes/class-admin.php:130, includes/class-admin.php:
|
218 |
msgid "About"
|
219 |
msgstr ""
|
220 |
|
221 |
-
#: includes/class-admin.php:138, includes/class-admin.php:139, includes/class-admin.php:
|
222 |
msgid "License"
|
223 |
msgstr ""
|
224 |
|
225 |
-
#: includes/class-admin.php:224, includes/class-settings.php:
|
226 |
msgid "Settings updated."
|
227 |
msgstr ""
|
228 |
|
@@ -230,7 +230,7 @@ msgstr ""
|
|
230 |
msgid "Description"
|
231 |
msgstr ""
|
232 |
|
233 |
-
#: includes/class-admin.php:262, includes/class-builder-fields.php:
|
234 |
msgid "Shortcode"
|
235 |
msgstr ""
|
236 |
|
@@ -238,27 +238,31 @@ msgstr ""
|
|
238 |
msgid "Associated List"
|
239 |
msgstr ""
|
240 |
|
241 |
-
#: includes/class-admin.php:
|
|
|
|
|
|
|
|
|
242 |
msgid "Contact Count"
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: includes/class-admin.php:
|
246 |
msgid "Check out the official WordPress plugin from @constantcontact:"
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: includes/class-admin.php:
|
250 |
msgid "Spread the word!"
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: includes/class-admin.php:
|
254 |
msgid "You have unsaved changes."
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: includes/class-admin.php:
|
258 |
msgid "move up"
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: includes/class-admin.php:
|
262 |
msgid "move down"
|
263 |
msgstr ""
|
264 |
|
@@ -330,6 +334,10 @@ msgstr ""
|
|
330 |
msgid "Website"
|
331 |
msgstr ""
|
332 |
|
|
|
|
|
|
|
|
|
333 |
#: includes/class-builder-fields.php:155
|
334 |
msgid "Custom Text Field"
|
335 |
msgstr ""
|
@@ -354,306 +362,306 @@ msgstr ""
|
|
354 |
msgid "Constant Contact List"
|
355 |
msgstr ""
|
356 |
|
357 |
-
#: includes/class-builder-fields.php:222
|
358 |
-
msgid "
|
359 |
-
msgstr ""
|
360 |
-
|
361 |
-
#: includes/class-builder-fields.php:225
|
362 |
-
msgid "No List Selected"
|
363 |
msgstr ""
|
364 |
|
365 |
-
#: includes/class-builder-fields.php:
|
366 |
msgid "Form Description"
|
367 |
msgstr ""
|
368 |
|
369 |
-
#: includes/class-builder-fields.php:
|
370 |
msgid "This message will display above the form fields, so use it as an opportunity to pitch your email list. Tell visitors why they should subscribe to your emails, focusing on benefits like insider tips, discounts, subscriber coupons, and more."
|
371 |
msgstr ""
|
372 |
|
373 |
-
#: includes/class-builder-fields.php:
|
374 |
msgid "Form Options"
|
375 |
msgstr ""
|
376 |
|
377 |
-
#: includes/class-builder-fields.php:
|
378 |
msgid "Button text"
|
379 |
msgstr ""
|
380 |
|
381 |
-
#: includes/class-builder-fields.php:
|
382 |
msgid "Sign up"
|
383 |
msgstr ""
|
384 |
|
385 |
-
#: includes/class-builder-fields.php:
|
386 |
msgid "Success message"
|
387 |
msgstr ""
|
388 |
|
389 |
-
#: includes/class-builder-fields.php:
|
390 |
msgid "Your information has been submitted"
|
391 |
msgstr ""
|
392 |
|
393 |
-
#: includes/class-builder-fields.php:
|
394 |
msgid "Submission behavior"
|
395 |
msgstr ""
|
396 |
|
397 |
-
#: includes/class-builder-fields.php:
|
398 |
msgid "Redirect URL"
|
399 |
msgstr ""
|
400 |
|
401 |
#. translators: 1: basic field info, 2: warning about invalid values, 3: recommended field value
|
402 |
-
#: includes/class-builder-fields.php:
|
403 |
msgid "Leave blank to keep users on the current page."
|
404 |
msgstr ""
|
405 |
|
406 |
-
#: includes/class-builder-fields.php:
|
407 |
msgid "NOTE: This URL must be within the current site and may not be a direct link to a media file (e.g., a PDF document). Providing a Redirect URL that is outside the current site or is a media file will cause issues with Constant Constact functionality, including contacts not being added to lists successfully."
|
408 |
msgstr ""
|
409 |
|
410 |
-
#: includes/class-builder-fields.php:
|
411 |
msgid "It is recommended to leave this field blank or provide a URL to a page that contains any external or media links within the page content."
|
412 |
msgstr ""
|
413 |
|
414 |
-
#: includes/class-builder-fields.php:
|
415 |
msgid "No page refresh"
|
416 |
msgstr ""
|
417 |
|
418 |
-
#: includes/class-builder-fields.php:
|
419 |
msgid "Enable form submission without a page refresh. This option overrides the Redirect URL choice above."
|
420 |
msgstr ""
|
421 |
|
422 |
-
#: includes/class-builder-fields.php:
|
423 |
msgid "Disable Google reCAPTCHA for this form?"
|
424 |
msgstr ""
|
425 |
|
426 |
-
#: includes/class-builder-fields.php:
|
427 |
msgid "Checking will disable Google's reCAPTCHA output for this form. Only valid if using Google reCAPTCHA version 2"
|
428 |
msgstr ""
|
429 |
|
430 |
-
#: includes/class-builder-fields.php:
|
431 |
msgid "Spam notice"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: includes/class-builder-fields.php:
|
435 |
msgid "Spam Error Message"
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: includes/class-builder-fields.php:
|
439 |
msgid "Set the spam error message displayed for this form."
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: includes/class-builder-fields.php:
|
443 |
msgid "Form Design"
|
444 |
msgstr ""
|
445 |
|
446 |
-
#: includes/class-builder-fields.php:
|
447 |
msgid "Background Color"
|
448 |
msgstr ""
|
449 |
|
450 |
-
#: includes/class-builder-fields.php:
|
451 |
msgid "Applies to the whole form."
|
452 |
msgstr ""
|
453 |
|
454 |
-
#: includes/class-builder-fields.php:
|
455 |
msgid "Form Fonts"
|
456 |
msgstr ""
|
457 |
|
458 |
-
#: includes/class-builder-fields.php:
|
459 |
msgid "Font Size"
|
460 |
msgstr ""
|
461 |
|
462 |
-
#: includes/class-builder-fields.php:
|
463 |
msgid "Only applies to the form description."
|
464 |
msgstr ""
|
465 |
|
466 |
-
#: includes/class-builder-fields.php:
|
467 |
msgid "Font Color"
|
468 |
msgstr ""
|
469 |
|
470 |
-
#: includes/class-builder-fields.php:
|
471 |
msgid "Applies to the form description, input labels, and disclosure text."
|
472 |
msgstr ""
|
473 |
|
474 |
-
#: includes/class-builder-fields.php:
|
475 |
msgid "Form Submit Button"
|
476 |
msgstr ""
|
477 |
|
478 |
-
#: includes/class-builder-fields.php:
|
479 |
msgid "Choose a color for the submit button text."
|
480 |
msgstr ""
|
481 |
|
482 |
-
#: includes/class-builder-fields.php:
|
483 |
msgid "Choose a color for the submit button background."
|
484 |
msgstr ""
|
485 |
|
486 |
-
#: includes/class-builder-fields.php:
|
487 |
msgid "Input Design"
|
488 |
msgstr ""
|
489 |
|
490 |
-
#: includes/class-builder-fields.php:
|
491 |
msgid "Form Padding"
|
492 |
msgstr ""
|
493 |
|
494 |
-
#: includes/class-builder-fields.php:
|
|
|
|
|
|
|
|
|
495 |
msgid "Top"
|
496 |
msgstr ""
|
497 |
|
498 |
-
#: includes/class-builder-fields.php:
|
499 |
msgid "Right"
|
500 |
msgstr ""
|
501 |
|
502 |
-
#: includes/class-builder-fields.php:
|
503 |
msgid "Bottom"
|
504 |
msgstr ""
|
505 |
|
506 |
-
#: includes/class-builder-fields.php:
|
507 |
msgid "Left"
|
508 |
msgstr ""
|
509 |
|
510 |
-
#: includes/class-builder-fields.php:
|
511 |
msgid "Custom Classes"
|
512 |
msgstr ""
|
513 |
|
514 |
-
#: includes/class-builder-fields.php:
|
515 |
msgid "Set custom CSS class(es) for inputs. Separate multiple classes with spaces."
|
516 |
msgstr ""
|
517 |
|
518 |
-
#: includes/class-builder-fields.php:
|
519 |
msgid "Label Placement"
|
520 |
msgstr ""
|
521 |
|
522 |
-
#: includes/class-builder-fields.php:
|
523 |
msgid "Global"
|
524 |
msgstr ""
|
525 |
|
526 |
-
#: includes/class-builder-fields.php:
|
527 |
msgid "Hidden"
|
528 |
msgstr ""
|
529 |
|
530 |
-
#: includes/class-builder-fields.php:
|
531 |
msgid "Set the position for labels for inputs."
|
532 |
msgstr ""
|
533 |
|
534 |
-
#: includes/class-builder-fields.php:
|
535 |
msgid "Enabling this option will require users to check a box to be added to your list."
|
536 |
msgstr ""
|
537 |
|
538 |
-
#: includes/class-builder-fields.php:
|
539 |
msgid "Learn more"
|
540 |
msgstr ""
|
541 |
|
542 |
-
#: includes/class-builder-fields.php:
|
543 |
msgid "Email opt-in"
|
544 |
msgstr ""
|
545 |
|
546 |
-
#: includes/class-builder-fields.php:
|
547 |
msgid "Enable email subscriber opt-in"
|
548 |
msgstr ""
|
549 |
|
550 |
-
#: includes/class-builder-fields.php:
|
551 |
msgid "Adds an opt-in to the bottom of your form."
|
552 |
msgstr ""
|
553 |
|
554 |
-
#: includes/class-builder-fields.php:
|
555 |
msgid "Add a checkbox so subscribers can opt-in to your email list."
|
556 |
msgstr ""
|
557 |
|
558 |
-
#: includes/class-builder-fields.php:
|
559 |
msgid "(For use with Contact Us form)"
|
560 |
msgstr ""
|
561 |
|
562 |
-
#: includes/class-builder-fields.php:
|
563 |
msgid "Opt-in checkbox"
|
564 |
msgstr ""
|
565 |
|
566 |
-
#: includes/class-builder-fields.php:
|
567 |
msgid "Opt-in Affirmation"
|
568 |
msgstr ""
|
569 |
|
570 |
#. translators: placeholder has a business name from Constant Contact.
|
571 |
-
#: includes/class-builder-fields.php:
|
572 |
msgid "Example: Yes, I would like to receive emails from %s. (You can unsubscribe anytime)"
|
573 |
msgstr ""
|
574 |
|
575 |
-
#: includes/class-builder-fields.php:
|
576 |
msgid "Form Fields"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: includes/class-builder-fields.php:
|
580 |
msgid "Add Fields"
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: includes/class-builder-fields.php:
|
584 |
msgid "Create a field for each piece of information you want to collect. Good basics include email address, first name, and last name."
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: includes/class-builder-fields.php:
|
588 |
msgid "Field {#}"
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: includes/class-builder-fields.php:
|
592 |
msgid "Add Another Field"
|
593 |
msgstr ""
|
594 |
|
595 |
-
#: includes/class-builder-fields.php:
|
596 |
msgid "Remove Field"
|
597 |
msgstr ""
|
598 |
|
599 |
-
#: includes/class-builder-fields.php:
|
600 |
msgid "Select a Field"
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: includes/class-builder-fields.php:
|
604 |
msgid "Field Label"
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: includes/class-builder-fields.php:
|
608 |
msgid "Field Description"
|
609 |
msgstr ""
|
610 |
|
611 |
-
#: includes/class-builder-fields.php:
|
612 |
msgid "Ex: Enter email address"
|
613 |
msgstr ""
|
614 |
|
615 |
-
#: includes/class-builder-fields.php:
|
616 |
msgid "Required"
|
617 |
msgstr ""
|
618 |
|
619 |
-
#: includes/class-builder-fields.php:
|
620 |
msgid "Shortcode to use"
|
621 |
msgstr ""
|
622 |
|
623 |
#. translators: Placeholders here represent `<em>` and `<strong>` HTML tags.
|
624 |
-
#: includes/class-builder-fields.php:
|
625 |
msgid "Shortcode to embed — %1$s%2$sYou can copy and paste this in a post to display your form.%3$s%4$s"
|
626 |
msgstr ""
|
627 |
|
628 |
-
#: includes/class-builder-fields.php:
|
629 |
msgid "Email settings"
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: includes/class-builder-fields.php:
|
633 |
msgid "Email destination"
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: includes/class-builder-fields.php:
|
637 |
msgid "Who should receive email notifications for this form. Separate multiple emails by a comma. Leave blank to default to admin email."
|
638 |
msgstr ""
|
639 |
|
640 |
-
#: includes/class-builder-fields.php:
|
641 |
msgid "Disable email notifications for this form?"
|
642 |
msgstr ""
|
643 |
|
644 |
-
#: includes/class-builder-fields.php:
|
645 |
msgid "Check this option to disable emails for this Constant Contact Forms form."
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: includes/class-builder-fields.php:
|
649 |
msgid "Reset Styles"
|
650 |
msgstr ""
|
651 |
|
652 |
-
#: includes/class-builder-fields.php:
|
653 |
msgid "Reset"
|
654 |
msgstr ""
|
655 |
|
656 |
-
#: includes/class-builder-fields.php:
|
657 |
msgid "Reset the styles for this Form."
|
658 |
msgstr ""
|
659 |
|
@@ -757,11 +765,11 @@ msgid "The ALTERNATE_WP_CRON constant is set to true as of %1$s. This plugin can
|
|
757 |
msgstr ""
|
758 |
|
759 |
#. translators: Placeholder will be an HTTP response code.
|
760 |
-
#: includes/class-check.php:
|
761 |
msgid "Unexpected HTTP response code: %1$s"
|
762 |
msgstr ""
|
763 |
|
764 |
-
#: includes/class-check.php:
|
765 |
msgid "Cron spawn ok"
|
766 |
msgstr ""
|
767 |
|
@@ -777,7 +785,7 @@ msgstr ""
|
|
777 |
msgid "Are you sure you want to disconnect?"
|
778 |
msgstr ""
|
779 |
|
780 |
-
#: includes/class-connect.php:169, includes/class-logging.php:
|
781 |
msgctxt "img alt text"
|
782 |
msgid "Constant Contact logo"
|
783 |
msgstr ""
|
@@ -849,7 +857,7 @@ msgstr ""
|
|
849 |
msgid "New Form"
|
850 |
msgstr ""
|
851 |
|
852 |
-
#: includes/class-cpts.php:72, includes/class-display.php:
|
853 |
msgid "Edit Form"
|
854 |
msgstr ""
|
855 |
|
@@ -991,169 +999,176 @@ msgstr ""
|
|
991 |
msgid "Constant Contact lists."
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: includes/class-cpts.php:
|
995 |
msgid "List updated."
|
996 |
msgstr ""
|
997 |
|
998 |
-
#: includes/class-cpts.php:
|
999 |
msgid "Custom field updated."
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: includes/class-cpts.php:
|
1003 |
msgid "Custom field deleted."
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#: includes/class-cpts.php:
|
1007 |
msgid "List published."
|
1008 |
msgstr ""
|
1009 |
|
1010 |
-
#: includes/class-cpts.php:
|
1011 |
msgid "List saved."
|
1012 |
msgstr ""
|
1013 |
|
1014 |
-
#: includes/class-cpts.php:
|
1015 |
msgid "List submitted."
|
1016 |
msgstr ""
|
1017 |
|
1018 |
-
|
|
|
1019 |
msgid "List scheduled for: <strong>%1$s</strong>."
|
1020 |
msgstr ""
|
1021 |
|
1022 |
-
#: includes/class-cpts.php:
|
1023 |
msgid "List draft updated."
|
1024 |
msgstr ""
|
1025 |
|
1026 |
-
#: includes/class-cpts.php:
|
1027 |
msgid "Form updated."
|
1028 |
msgstr ""
|
1029 |
|
1030 |
-
|
|
|
1031 |
msgid "Success! Here's the shortcode: %s. Just paste it into a post or page editor to publish"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
-
#: includes/class-cpts.php:
|
1035 |
msgid "Form saved."
|
1036 |
msgstr ""
|
1037 |
|
1038 |
-
#: includes/class-cpts.php:
|
1039 |
msgid "Form submitted."
|
1040 |
msgstr ""
|
1041 |
|
1042 |
-
|
|
|
1043 |
msgid "Form scheduled for: <strong>%1$s</strong>."
|
1044 |
msgstr ""
|
1045 |
|
1046 |
-
#: includes/class-cpts.php:
|
1047 |
msgid "Form draft updated."
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#: includes/class-cpts.php:
|
1051 |
msgid "Enter a form name"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
-
#: includes/class-cpts.php:
|
1055 |
msgid "(Examples: Join Our Email List, Contact Us)"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
#. translators: Placeholders will be form title and then last modified date.
|
1059 |
-
#: includes/class-cpts.php:
|
1060 |
msgid "%1$s (last modified %2$s ago)"
|
1061 |
msgstr ""
|
1062 |
|
1063 |
-
#: includes/class-display.php:
|
|
|
|
|
|
|
|
|
1064 |
msgid "Constant Contact Use."
|
1065 |
msgstr ""
|
1066 |
|
1067 |
-
#: includes/class-display.php:
|
1068 |
msgid "Error: Please correct your entry."
|
1069 |
msgstr ""
|
1070 |
|
1071 |
-
#: includes/class-display.php:
|
1072 |
msgid "Street Address"
|
1073 |
msgstr ""
|
1074 |
|
1075 |
-
#: includes/class-display.php:
|
1076 |
msgid "Address Line 2"
|
1077 |
msgstr ""
|
1078 |
|
1079 |
-
#: includes/class-display.php:
|
1080 |
msgid "City"
|
1081 |
msgstr ""
|
1082 |
|
1083 |
-
#: includes/class-display.php:
|
1084 |
msgid "State"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: includes/class-display.php:
|
1088 |
msgid "ZIP Code"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: includes/class-display.php:
|
1092 |
msgid "Month"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
-
#: includes/class-display.php:
|
1096 |
msgid "Day"
|
1097 |
msgstr ""
|
1098 |
|
1099 |
-
#: includes/class-display.php:
|
1100 |
msgid "Year"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
-
#: includes/class-display.php:
|
1104 |
msgid "January"
|
1105 |
msgstr ""
|
1106 |
|
1107 |
-
#: includes/class-display.php:
|
1108 |
msgid "February"
|
1109 |
msgstr ""
|
1110 |
|
1111 |
-
#: includes/class-display.php:
|
1112 |
msgid "March"
|
1113 |
msgstr ""
|
1114 |
|
1115 |
-
#: includes/class-display.php:
|
1116 |
msgid "April"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: includes/class-display.php:
|
1120 |
msgid "May"
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: includes/class-display.php:
|
1124 |
msgid "June"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
-
#: includes/class-display.php:
|
1128 |
msgid "July "
|
1129 |
msgstr ""
|
1130 |
|
1131 |
-
#: includes/class-display.php:
|
1132 |
msgid "August"
|
1133 |
msgstr ""
|
1134 |
|
1135 |
-
#: includes/class-display.php:
|
1136 |
msgid "September"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
-
#: includes/class-display.php:
|
1140 |
msgid "October"
|
1141 |
msgstr ""
|
1142 |
|
1143 |
-
#: includes/class-display.php:
|
1144 |
msgid "November"
|
1145 |
msgstr ""
|
1146 |
|
1147 |
-
#: includes/class-display.php:
|
1148 |
msgid "December"
|
1149 |
msgstr ""
|
1150 |
|
1151 |
#. translators: placeholder will hold company info for site owner.
|
1152 |
-
#: includes/class-display.php:
|
1153 |
msgid "By submitting this form, you are consenting to receive marketing emails from: %1$s. You can revoke your consent to receive emails at any time by using the SafeUnsubscribe® link, found at the bottom of every email. %2$s"
|
1154 |
msgstr ""
|
1155 |
|
1156 |
-
#: includes/class-display.php:
|
1157 |
msgid "Emails are serviced by Constant Contact"
|
1158 |
msgstr ""
|
1159 |
|
@@ -1165,11 +1180,11 @@ msgstr ""
|
|
1165 |
msgid "List information will populate upon saving."
|
1166 |
msgstr ""
|
1167 |
|
1168 |
-
#: includes/class-lists.php:
|
1169 |
msgid "You already have a list with that name."
|
1170 |
msgstr ""
|
1171 |
|
1172 |
-
#: includes/class-lists.php:
|
1173 |
msgid "Sync Lists with Constant Contact"
|
1174 |
msgstr ""
|
1175 |
|
@@ -1181,88 +1196,88 @@ msgstr ""
|
|
1181 |
msgid "Debug logs"
|
1182 |
msgstr ""
|
1183 |
|
1184 |
-
#: includes/class-logging.php:
|
1185 |
msgid "No error log exists"
|
1186 |
msgstr ""
|
1187 |
|
1188 |
#. translators: placeholder holds the log location.
|
1189 |
-
#: includes/class-logging.php:
|
1190 |
msgid "We are not able to write to the %s file."
|
1191 |
msgstr ""
|
1192 |
|
1193 |
-
#: includes/class-logging.php:
|
1194 |
msgid "Error log below can be used with support requests to help identify issues with Constant Contact Forms."
|
1195 |
msgstr ""
|
1196 |
|
1197 |
-
#: includes/class-logging.php:
|
1198 |
msgid "When available, you can share information by copying and pasting the content in the textarea, or by using the \"Download logs\" link at the end. Logs can be cleared by using the \"Delete logs\" link."
|
1199 |
msgstr ""
|
1200 |
|
1201 |
-
#: includes/class-logging.php:
|
1202 |
msgid "Error log may still have content, even if an error is shown above. Please use the download link below."
|
1203 |
msgstr ""
|
1204 |
|
1205 |
-
#: includes/class-logging.php:
|
1206 |
msgid "Download logs"
|
1207 |
msgstr ""
|
1208 |
|
1209 |
-
#: includes/class-logging.php:
|
1210 |
msgid "Delete logs"
|
1211 |
msgstr ""
|
1212 |
|
1213 |
#. translators: placeholder wil have error message.
|
1214 |
-
#: includes/class-logging.php:
|
1215 |
msgid "Log display error: %s"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
#. translators: this is only used when some debugging is enabled
|
1219 |
-
#: includes/class-mail.php:
|
1220 |
msgid "Duplicate send mail for: %1$s and: %2$s"
|
1221 |
msgstr ""
|
1222 |
|
1223 |
-
#: includes/class-mail.php:
|
1224 |
msgid "Your Constant Contact Forms plugin has captured new information."
|
1225 |
msgstr ""
|
1226 |
|
1227 |
-
#: includes/class-mail.php:
|
1228 |
msgid "Form title: "
|
1229 |
msgstr ""
|
1230 |
|
1231 |
-
#: includes/class-mail.php:
|
1232 |
msgid "Form information: "
|
1233 |
msgstr ""
|
1234 |
|
1235 |
#. translators: placeholders provide Constant Contact link information.
|
1236 |
-
#: includes/class-mail.php:
|
1237 |
msgid "Email marketing is a great way to stay connected and engage with visitors after they've left your site. Visit %1$shttps://www.constantcontact.com/index?pn=miwordpress%2$s to sign up for a Free Trial."
|
1238 |
msgstr ""
|
1239 |
|
1240 |
-
#: includes/class-mail.php:
|
1241 |
msgid "Constant Contact Forms Notification"
|
1242 |
msgstr ""
|
1243 |
|
1244 |
#. translators: placeholders simply meant for `<strong>` html tags
|
1245 |
-
#: includes/class-mail.php:
|
1246 |
-
msgid "%1
|
1247 |
msgstr ""
|
1248 |
|
1249 |
-
#: includes/class-mail.php:
|
1250 |
msgid "Submitted to Constant Contact:"
|
1251 |
msgstr ""
|
1252 |
|
1253 |
-
#: includes/class-mail.php:
|
1254 |
msgid "NO (Constant Contact list not selected for this form)"
|
1255 |
msgstr ""
|
1256 |
|
1257 |
-
#: includes/class-mail.php:
|
1258 |
msgid "NO (User did not select the Email Opt-in checkbox)"
|
1259 |
msgstr ""
|
1260 |
|
1261 |
-
#: includes/class-mail.php:
|
1262 |
msgid "You can disable this under Form options. Email Opt-in isn't required to add subscribers into your account"
|
1263 |
msgstr ""
|
1264 |
|
1265 |
-
#. translators: Placeholder will hold "
|
1266 |
#: includes/class-notification-content.php:57
|
1267 |
msgid "Get the most out of the %s plugin — use it with an active Constant Contact account."
|
1268 |
msgstr ""
|
@@ -1316,51 +1331,55 @@ msgstr ""
|
|
1316 |
msgid "Dismiss this notice."
|
1317 |
msgstr ""
|
1318 |
|
1319 |
-
#: includes/class-optin.php:137, includes/class-settings.php:
|
1320 |
msgid "Agree"
|
1321 |
msgstr ""
|
1322 |
|
1323 |
-
#: includes/class-optin.php:138, includes/class-settings.php:
|
1324 |
msgid "Disagree"
|
1325 |
msgstr ""
|
1326 |
|
1327 |
-
#: includes/class-process-form.php:
|
1328 |
msgid "There was an error sending your form."
|
1329 |
msgstr ""
|
1330 |
|
1331 |
-
#: includes/class-process-form.php:
|
1332 |
msgid "Your information has been submitted."
|
1333 |
msgstr ""
|
1334 |
|
1335 |
-
#: includes/class-process-form.php:
|
1336 |
msgid "We had trouble processing your submission. Please review your entries and try again."
|
1337 |
msgstr ""
|
1338 |
|
1339 |
-
#: includes/class-process-form.php:
|
1340 |
msgid "No Constant Contact Forms form ID provided"
|
1341 |
msgstr ""
|
1342 |
|
1343 |
-
#: includes/class-process-form.php:
|
1344 |
msgid "No form verify value provided"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: includes/class-process-form.php:
|
1348 |
msgid "Please properly fill out all required fields"
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#: includes/class-process-form.php:
|
1352 |
msgid "Failed reCAPTCHA check"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#: includes/class-process-form.php:
|
1356 |
msgid "We had trouble processing your submission. Make sure you haven't changed the required form ID and try again."
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: includes/class-process-form.php:
|
1360 |
msgid "We had trouble processing your submission. Make sure you haven't changed the required Form ID and try again."
|
1361 |
msgstr ""
|
1362 |
|
1363 |
-
#: includes/class-process-form.php:
|
|
|
|
|
|
|
|
|
1364 |
msgid "We do no think you are human"
|
1365 |
msgstr ""
|
1366 |
|
@@ -1372,144 +1391,152 @@ msgstr ""
|
|
1372 |
msgid "Spam Control"
|
1373 |
msgstr ""
|
1374 |
|
1375 |
-
#: includes/class-settings.php:66, includes/class-settings.php:
|
1376 |
msgid "Support"
|
1377 |
msgstr ""
|
1378 |
|
1379 |
-
#: includes/class-settings.php:
|
1380 |
msgid "Constant Contact Forms Settings"
|
1381 |
msgstr ""
|
1382 |
|
1383 |
-
#: includes/class-settings.php:
|
1384 |
msgid "Settings"
|
1385 |
msgstr ""
|
1386 |
|
1387 |
-
#: includes/class-settings.php:
|
1388 |
msgid "Google Analytics™ tracking opt-in."
|
1389 |
msgstr ""
|
1390 |
|
1391 |
-
#: includes/class-settings.php:
|
1392 |
msgid "Allow Constant Contact to use Google Analytics™ to track your usage across the Constant Contact Forms plugin.<br/> NOTE — Your website and users will not be tracked. See our <a href=\"https://www.endurance.com/privacy\"> Privacy Statement</a> information about what is and is not tracked."
|
1393 |
msgstr ""
|
1394 |
|
1395 |
-
#: includes/class-settings.php:
|
1396 |
msgid "Disable E-mail Notifications"
|
1397 |
msgstr ""
|
1398 |
|
1399 |
#. translators: Placeholder is for a <br /> HTML tag.
|
1400 |
-
#: includes/class-settings.php:
|
1401 |
msgid "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\"."
|
1402 |
msgstr ""
|
1403 |
|
1404 |
-
#: includes/class-settings.php:
|
1405 |
msgid "Bypass Constant Contact cron scheduling"
|
1406 |
msgstr ""
|
1407 |
|
1408 |
-
#: includes/class-settings.php:
|
1409 |
msgid "This option will send form entries to Constant Contact right away instead of holding for one minute delay."
|
1410 |
msgstr ""
|
1411 |
|
1412 |
-
#: includes/class-settings.php:
|
1413 |
msgid "Advanced Opt-in"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
-
#: includes/class-settings.php:
|
1417 |
msgid "Opt-in Location"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
-
#: includes/class-settings.php:
|
1421 |
msgid "Select a list"
|
1422 |
msgstr ""
|
1423 |
|
|
|
|
|
|
|
|
|
1424 |
#. translators: placeholder will hold site owner's business name.
|
1425 |
-
#: includes/class-settings.php:
|
1426 |
msgid "Yes, I would like to receive emails from %s. Sign me up!"
|
1427 |
msgstr ""
|
1428 |
|
1429 |
-
#: includes/class-settings.php:
|
1430 |
msgid "Disclosure Name"
|
1431 |
msgstr ""
|
1432 |
|
1433 |
-
#: includes/class-settings.php:
|
1434 |
msgid "Disclosure Address"
|
1435 |
msgstr ""
|
1436 |
|
1437 |
-
#: includes/class-settings.php:
|
1438 |
msgid "Global Form CSS Settings"
|
1439 |
msgstr ""
|
1440 |
|
1441 |
-
#: includes/class-settings.php:
|
|
|
|
|
|
|
|
|
1442 |
msgid "Provide custom classes for the form separated by a single space."
|
1443 |
msgstr ""
|
1444 |
|
1445 |
-
#: includes/class-settings.php:
|
1446 |
msgid "Choose the position for the labels of the form elements."
|
1447 |
msgstr ""
|
1448 |
|
1449 |
-
#: includes/class-settings.php:
|
1450 |
msgid "Google reCAPTCHA"
|
1451 |
msgstr ""
|
1452 |
|
1453 |
-
#: includes/class-settings.php:
|
1454 |
msgid "Learn more and get an "
|
1455 |
msgstr ""
|
1456 |
|
1457 |
-
#: includes/class-settings.php:
|
1458 |
msgid "API site key"
|
1459 |
msgstr ""
|
1460 |
|
1461 |
-
#: includes/class-settings.php:
|
1462 |
msgid "Version"
|
1463 |
msgstr ""
|
1464 |
|
1465 |
-
#: includes/class-settings.php:
|
1466 |
msgid "Version 2"
|
1467 |
msgstr ""
|
1468 |
|
1469 |
-
#: includes/class-settings.php:
|
1470 |
msgid "Version 3"
|
1471 |
msgstr ""
|
1472 |
|
1473 |
-
#: includes/class-settings.php:
|
1474 |
msgid "Site Key"
|
1475 |
msgstr ""
|
1476 |
|
1477 |
-
#: includes/class-settings.php:
|
1478 |
msgid "Secret Key"
|
1479 |
msgstr ""
|
1480 |
|
1481 |
-
#: includes/class-settings.php:
|
1482 |
msgid "Suspected Bot Error Message"
|
1483 |
msgstr ""
|
1484 |
|
1485 |
-
#: includes/class-settings.php:
|
1486 |
msgid "This message displays when the plugin detects spam data. Note that this message may be overriden on a per-post basis."
|
1487 |
msgstr ""
|
1488 |
|
1489 |
-
#: includes/class-settings.php:
|
1490 |
msgid "Error Message"
|
1491 |
msgstr ""
|
1492 |
|
1493 |
-
#: includes/class-settings.php:
|
1494 |
msgid "Enable logging for debugging purposes."
|
1495 |
msgstr ""
|
1496 |
|
1497 |
-
#: includes/class-settings.php:
|
1498 |
msgid "This option will turn on some logging functionality that can be used to deduce sources of issues with the use of Constant Contact Forms plugin."
|
1499 |
msgstr ""
|
1500 |
|
1501 |
-
#: includes/class-settings.php:
|
1502 |
msgid "Add a checkbox to the comment field in your posts"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
-
#: includes/class-settings.php:
|
1506 |
msgid "Add a checkbox to the main WordPress login page"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
-
#: includes/class-settings.php:
|
1510 |
msgid "Add a checkbox to the WordPress user registration page"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
-
#: includes/class-settings.php:
|
1514 |
msgid "We do not think you are human"
|
1515 |
msgstr ""
|
13 |
"X-Poedit-SourceCharset: UTF-8\n"
|
14 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
|
16 |
+
#: constant-contact-forms.php:375, includes/class-cpts.php:89, includes/class-cpts.php:148
|
17 |
msgid "Constant Contact"
|
18 |
msgstr ""
|
19 |
|
20 |
+
#: constant-contact-forms.php:410
|
21 |
msgid "Constant Contact Forms requires PHP 5.4 or higher. Your hosting provider or website administrator should be able to assist in updating your PHP version."
|
22 |
msgstr ""
|
23 |
|
24 |
+
#: constant-contact-forms.php:714
|
25 |
msgid "Error loading license."
|
26 |
msgstr ""
|
27 |
|
74 |
msgid "Constant Contact Logo"
|
75 |
msgstr ""
|
76 |
|
77 |
+
#: includes/class-admin-pages.php:216, includes/class-notification-content.php:58
|
78 |
msgid "Constant Contact Forms"
|
79 |
msgstr ""
|
80 |
|
214 |
msgid "Constant Contact Forms - License"
|
215 |
msgstr ""
|
216 |
|
217 |
+
#: includes/class-admin.php:129, includes/class-admin.php:130, includes/class-admin.php:390
|
218 |
msgid "About"
|
219 |
msgstr ""
|
220 |
|
221 |
+
#: includes/class-admin.php:138, includes/class-admin.php:139, includes/class-admin.php:391
|
222 |
msgid "License"
|
223 |
msgstr ""
|
224 |
|
225 |
+
#: includes/class-admin.php:224, includes/class-settings.php:870
|
226 |
msgid "Settings updated."
|
227 |
msgstr ""
|
228 |
|
230 |
msgid "Description"
|
231 |
msgstr ""
|
232 |
|
233 |
+
#: includes/class-admin.php:262, includes/class-builder-fields.php:705
|
234 |
msgid "Shortcode"
|
235 |
msgstr ""
|
236 |
|
238 |
msgid "Associated List"
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: includes/class-admin.php:313
|
242 |
+
msgid "No associated list"
|
243 |
+
msgstr ""
|
244 |
+
|
245 |
+
#: includes/class-admin.php:332
|
246 |
msgid "Contact Count"
|
247 |
msgstr ""
|
248 |
|
249 |
+
#: includes/class-admin.php:388
|
250 |
msgid "Check out the official WordPress plugin from @constantcontact:"
|
251 |
msgstr ""
|
252 |
|
253 |
+
#: includes/class-admin.php:402
|
254 |
msgid "Spread the word!"
|
255 |
msgstr ""
|
256 |
|
257 |
+
#: includes/class-admin.php:484
|
258 |
msgid "You have unsaved changes."
|
259 |
msgstr ""
|
260 |
|
261 |
+
#: includes/class-admin.php:485
|
262 |
msgid "move up"
|
263 |
msgstr ""
|
264 |
|
265 |
+
#: includes/class-admin.php:486
|
266 |
msgid "move down"
|
267 |
msgstr ""
|
268 |
|
334 |
msgid "Website"
|
335 |
msgstr ""
|
336 |
|
337 |
+
#: includes/class-builder-fields.php:152
|
338 |
+
msgid "http://www.example.com"
|
339 |
+
msgstr ""
|
340 |
+
|
341 |
#: includes/class-builder-fields.php:155
|
342 |
msgid "Custom Text Field"
|
343 |
msgstr ""
|
362 |
msgid "Constant Contact List"
|
363 |
msgstr ""
|
364 |
|
365 |
+
#: includes/class-builder-fields.php:222
|
366 |
+
msgid "Allow subscribers to select from lists"
|
|
|
|
|
|
|
|
|
367 |
msgstr ""
|
368 |
|
369 |
+
#: includes/class-builder-fields.php:240
|
370 |
msgid "Form Description"
|
371 |
msgstr ""
|
372 |
|
373 |
+
#: includes/class-builder-fields.php:248
|
374 |
msgid "This message will display above the form fields, so use it as an opportunity to pitch your email list. Tell visitors why they should subscribe to your emails, focusing on benefits like insider tips, discounts, subscriber coupons, and more."
|
375 |
msgstr ""
|
376 |
|
377 |
+
#: includes/class-builder-fields.php:268
|
378 |
msgid "Form Options"
|
379 |
msgstr ""
|
380 |
|
381 |
+
#: includes/class-builder-fields.php:276
|
382 |
msgid "Button text"
|
383 |
msgstr ""
|
384 |
|
385 |
+
#: includes/class-builder-fields.php:279
|
386 |
msgid "Sign up"
|
387 |
msgstr ""
|
388 |
|
389 |
+
#: includes/class-builder-fields.php:283
|
390 |
msgid "Success message"
|
391 |
msgstr ""
|
392 |
|
393 |
+
#: includes/class-builder-fields.php:286
|
394 |
msgid "Your information has been submitted"
|
395 |
msgstr ""
|
396 |
|
397 |
+
#: includes/class-builder-fields.php:290
|
398 |
msgid "Submission behavior"
|
399 |
msgstr ""
|
400 |
|
401 |
+
#: includes/class-builder-fields.php:297
|
402 |
msgid "Redirect URL"
|
403 |
msgstr ""
|
404 |
|
405 |
#. translators: 1: basic field info, 2: warning about invalid values, 3: recommended field value
|
406 |
+
#: includes/class-builder-fields.php:303
|
407 |
msgid "Leave blank to keep users on the current page."
|
408 |
msgstr ""
|
409 |
|
410 |
+
#: includes/class-builder-fields.php:304
|
411 |
msgid "NOTE: This URL must be within the current site and may not be a direct link to a media file (e.g., a PDF document). Providing a Redirect URL that is outside the current site or is a media file will cause issues with Constant Constact functionality, including contacts not being added to lists successfully."
|
412 |
msgstr ""
|
413 |
|
414 |
+
#: includes/class-builder-fields.php:305
|
415 |
msgid "It is recommended to leave this field blank or provide a URL to a page that contains any external or media links within the page content."
|
416 |
msgstr ""
|
417 |
|
418 |
+
#: includes/class-builder-fields.php:311
|
419 |
msgid "No page refresh"
|
420 |
msgstr ""
|
421 |
|
422 |
+
#: includes/class-builder-fields.php:314
|
423 |
msgid "Enable form submission without a page refresh. This option overrides the Redirect URL choice above."
|
424 |
msgstr ""
|
425 |
|
426 |
+
#: includes/class-builder-fields.php:319
|
427 |
msgid "Disable Google reCAPTCHA for this form?"
|
428 |
msgstr ""
|
429 |
|
430 |
+
#: includes/class-builder-fields.php:322
|
431 |
msgid "Checking will disable Google's reCAPTCHA output for this form. Only valid if using Google reCAPTCHA version 2"
|
432 |
msgstr ""
|
433 |
|
434 |
+
#: includes/class-builder-fields.php:327
|
435 |
msgid "Spam notice"
|
436 |
msgstr ""
|
437 |
|
438 |
+
#: includes/class-builder-fields.php:334
|
439 |
msgid "Spam Error Message"
|
440 |
msgstr ""
|
441 |
|
442 |
+
#: includes/class-builder-fields.php:337
|
443 |
msgid "Set the spam error message displayed for this form."
|
444 |
msgstr ""
|
445 |
|
446 |
+
#: includes/class-builder-fields.php:353
|
447 |
msgid "Form Design"
|
448 |
msgstr ""
|
449 |
|
450 |
+
#: includes/class-builder-fields.php:360, includes/class-builder-fields.php:422
|
451 |
msgid "Background Color"
|
452 |
msgstr ""
|
453 |
|
454 |
+
#: includes/class-builder-fields.php:363
|
455 |
msgid "Applies to the whole form."
|
456 |
msgstr ""
|
457 |
|
458 |
+
#: includes/class-builder-fields.php:370
|
459 |
msgid "Form Fonts"
|
460 |
msgstr ""
|
461 |
|
462 |
+
#: includes/class-builder-fields.php:376, includes/class-builder-fields.php:404
|
463 |
msgid "Font Size"
|
464 |
msgstr ""
|
465 |
|
466 |
+
#: includes/class-builder-fields.php:381
|
467 |
msgid "Only applies to the form description."
|
468 |
msgstr ""
|
469 |
|
470 |
+
#: includes/class-builder-fields.php:388, includes/class-builder-fields.php:412
|
471 |
msgid "Font Color"
|
472 |
msgstr ""
|
473 |
|
474 |
+
#: includes/class-builder-fields.php:391
|
475 |
msgid "Applies to the form description, input labels, and disclosure text."
|
476 |
msgstr ""
|
477 |
|
478 |
+
#: includes/class-builder-fields.php:398
|
479 |
msgid "Form Submit Button"
|
480 |
msgstr ""
|
481 |
|
482 |
+
#: includes/class-builder-fields.php:415
|
483 |
msgid "Choose a color for the submit button text."
|
484 |
msgstr ""
|
485 |
|
486 |
+
#: includes/class-builder-fields.php:425
|
487 |
msgid "Choose a color for the submit button background."
|
488 |
msgstr ""
|
489 |
|
490 |
+
#: includes/class-builder-fields.php:440
|
491 |
msgid "Input Design"
|
492 |
msgstr ""
|
493 |
|
494 |
+
#: includes/class-builder-fields.php:447
|
495 |
msgid "Form Padding"
|
496 |
msgstr ""
|
497 |
|
498 |
+
#: includes/class-builder-fields.php:450
|
499 |
+
msgid "Enter padding values in number of pixels. Padding will be applied to four sides of the form."
|
500 |
+
msgstr ""
|
501 |
+
|
502 |
+
#: includes/class-builder-fields.php:456, includes/class-builder-fields.php:511, includes/class-settings.php:468
|
503 |
msgid "Top"
|
504 |
msgstr ""
|
505 |
|
506 |
+
#: includes/class-builder-fields.php:466, includes/class-builder-fields.php:514, includes/class-settings.php:470
|
507 |
msgid "Right"
|
508 |
msgstr ""
|
509 |
|
510 |
+
#: includes/class-builder-fields.php:476, includes/class-builder-fields.php:513, includes/class-settings.php:471
|
511 |
msgid "Bottom"
|
512 |
msgstr ""
|
513 |
|
514 |
+
#: includes/class-builder-fields.php:486, includes/class-builder-fields.php:512, includes/class-settings.php:469
|
515 |
msgid "Left"
|
516 |
msgstr ""
|
517 |
|
518 |
+
#: includes/class-builder-fields.php:496
|
519 |
msgid "Custom Classes"
|
520 |
msgstr ""
|
521 |
|
522 |
+
#: includes/class-builder-fields.php:499
|
523 |
msgid "Set custom CSS class(es) for inputs. Separate multiple classes with spaces."
|
524 |
msgstr ""
|
525 |
|
526 |
+
#: includes/class-builder-fields.php:506, includes/class-settings.php:462
|
527 |
msgid "Label Placement"
|
528 |
msgstr ""
|
529 |
|
530 |
+
#: includes/class-builder-fields.php:509
|
531 |
msgid "Global"
|
532 |
msgstr ""
|
533 |
|
534 |
+
#: includes/class-builder-fields.php:515, includes/class-settings.php:472
|
535 |
msgid "Hidden"
|
536 |
msgstr ""
|
537 |
|
538 |
+
#: includes/class-builder-fields.php:517
|
539 |
msgid "Set the position for labels for inputs."
|
540 |
msgstr ""
|
541 |
|
542 |
+
#: includes/class-builder-fields.php:535
|
543 |
msgid "Enabling this option will require users to check a box to be added to your list."
|
544 |
msgstr ""
|
545 |
|
546 |
+
#: includes/class-builder-fields.php:542
|
547 |
msgid "Learn more"
|
548 |
msgstr ""
|
549 |
|
550 |
+
#: includes/class-builder-fields.php:547
|
551 |
msgid "Email opt-in"
|
552 |
msgstr ""
|
553 |
|
554 |
+
#: includes/class-builder-fields.php:567
|
555 |
msgid "Enable email subscriber opt-in"
|
556 |
msgstr ""
|
557 |
|
558 |
+
#: includes/class-builder-fields.php:569
|
559 |
msgid "Adds an opt-in to the bottom of your form."
|
560 |
msgstr ""
|
561 |
|
562 |
+
#: includes/class-builder-fields.php:588
|
563 |
msgid "Add a checkbox so subscribers can opt-in to your email list."
|
564 |
msgstr ""
|
565 |
|
566 |
+
#: includes/class-builder-fields.php:590
|
567 |
msgid "(For use with Contact Us form)"
|
568 |
msgstr ""
|
569 |
|
570 |
+
#: includes/class-builder-fields.php:593
|
571 |
msgid "Opt-in checkbox"
|
572 |
msgstr ""
|
573 |
|
574 |
+
#: includes/class-builder-fields.php:613, includes/class-settings.php:415
|
575 |
msgid "Opt-in Affirmation"
|
576 |
msgstr ""
|
577 |
|
578 |
#. translators: placeholder has a business name from Constant Contact.
|
579 |
+
#: includes/class-builder-fields.php:617
|
580 |
msgid "Example: Yes, I would like to receive emails from %s. (You can unsubscribe anytime)"
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: includes/class-builder-fields.php:630
|
584 |
msgid "Form Fields"
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: includes/class-builder-fields.php:638
|
588 |
msgid "Add Fields"
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: includes/class-builder-fields.php:645
|
592 |
msgid "Create a field for each piece of information you want to collect. Good basics include email address, first name, and last name."
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: includes/class-builder-fields.php:655
|
596 |
msgid "Field {#}"
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: includes/class-builder-fields.php:656
|
600 |
msgid "Add Another Field"
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: includes/class-builder-fields.php:657
|
604 |
msgid "Remove Field"
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: includes/class-builder-fields.php:663
|
608 |
msgid "Select a Field"
|
609 |
msgstr ""
|
610 |
|
611 |
+
#: includes/class-builder-fields.php:673
|
612 |
msgid "Field Label"
|
613 |
msgstr ""
|
614 |
|
615 |
+
#: includes/class-builder-fields.php:680
|
616 |
msgid "Field Description"
|
617 |
msgstr ""
|
618 |
|
619 |
+
#: includes/class-builder-fields.php:684
|
620 |
msgid "Ex: Enter email address"
|
621 |
msgstr ""
|
622 |
|
623 |
+
#: includes/class-builder-fields.php:689
|
624 |
msgid "Required"
|
625 |
msgstr ""
|
626 |
|
627 |
+
#: includes/class-builder-fields.php:713
|
628 |
msgid "Shortcode to use"
|
629 |
msgstr ""
|
630 |
|
631 |
#. translators: Placeholders here represent `<em>` and `<strong>` HTML tags.
|
632 |
+
#: includes/class-builder-fields.php:718
|
633 |
msgid "Shortcode to embed — %1$s%2$sYou can copy and paste this in a post to display your form.%3$s%4$s"
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: includes/class-builder-fields.php:740
|
637 |
msgid "Email settings"
|
638 |
msgstr ""
|
639 |
|
640 |
+
#: includes/class-builder-fields.php:747
|
641 |
msgid "Email destination"
|
642 |
msgstr ""
|
643 |
|
644 |
+
#: includes/class-builder-fields.php:748
|
645 |
msgid "Who should receive email notifications for this form. Separate multiple emails by a comma. Leave blank to default to admin email."
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: includes/class-builder-fields.php:754
|
649 |
msgid "Disable email notifications for this form?"
|
650 |
msgstr ""
|
651 |
|
652 |
+
#: includes/class-builder-fields.php:755
|
653 |
msgid "Check this option to disable emails for this Constant Contact Forms form."
|
654 |
msgstr ""
|
655 |
|
656 |
+
#: includes/class-builder-fields.php:771
|
657 |
msgid "Reset Styles"
|
658 |
msgstr ""
|
659 |
|
660 |
+
#: includes/class-builder-fields.php:782, includes/class-builder-fields.php:800
|
661 |
msgid "Reset"
|
662 |
msgstr ""
|
663 |
|
664 |
+
#: includes/class-builder-fields.php:783
|
665 |
msgid "Reset the styles for this Form."
|
666 |
msgstr ""
|
667 |
|
765 |
msgstr ""
|
766 |
|
767 |
#. translators: Placeholder will be an HTTP response code.
|
768 |
+
#: includes/class-check.php:205
|
769 |
msgid "Unexpected HTTP response code: %1$s"
|
770 |
msgstr ""
|
771 |
|
772 |
+
#: includes/class-check.php:210
|
773 |
msgid "Cron spawn ok"
|
774 |
msgstr ""
|
775 |
|
785 |
msgid "Are you sure you want to disconnect?"
|
786 |
msgstr ""
|
787 |
|
788 |
+
#: includes/class-connect.php:169, includes/class-logging.php:216, includes/class-notification-content.php:111, includes/class-notification-content.php:148, includes/class-optin.php:129, includes/class-settings.php:950
|
789 |
msgctxt "img alt text"
|
790 |
msgid "Constant Contact logo"
|
791 |
msgstr ""
|
857 |
msgid "New Form"
|
858 |
msgstr ""
|
859 |
|
860 |
+
#: includes/class-cpts.php:72, includes/class-display.php:861
|
861 |
msgid "Edit Form"
|
862 |
msgstr ""
|
863 |
|
999 |
msgid "Constant Contact lists."
|
1000 |
msgstr ""
|
1001 |
|
1002 |
+
#: includes/class-cpts.php:188, includes/class-cpts.php:191
|
1003 |
msgid "List updated."
|
1004 |
msgstr ""
|
1005 |
|
1006 |
+
#: includes/class-cpts.php:189, includes/class-cpts.php:208
|
1007 |
msgid "Custom field updated."
|
1008 |
msgstr ""
|
1009 |
|
1010 |
+
#: includes/class-cpts.php:190, includes/class-cpts.php:209
|
1011 |
msgid "Custom field deleted."
|
1012 |
msgstr ""
|
1013 |
|
1014 |
+
#: includes/class-cpts.php:196
|
1015 |
msgid "List published."
|
1016 |
msgstr ""
|
1017 |
|
1018 |
+
#: includes/class-cpts.php:197
|
1019 |
msgid "List saved."
|
1020 |
msgstr ""
|
1021 |
|
1022 |
+
#: includes/class-cpts.php:198
|
1023 |
msgid "List submitted."
|
1024 |
msgstr ""
|
1025 |
|
1026 |
+
#. translators: formatted post date timestamp.
|
1027 |
+
#: includes/class-cpts.php:200
|
1028 |
msgid "List scheduled for: <strong>%1$s</strong>."
|
1029 |
msgstr ""
|
1030 |
|
1031 |
+
#: includes/class-cpts.php:202
|
1032 |
msgid "List draft updated."
|
1033 |
msgstr ""
|
1034 |
|
1035 |
+
#: includes/class-cpts.php:207, includes/class-cpts.php:210
|
1036 |
msgid "Form updated."
|
1037 |
msgstr ""
|
1038 |
|
1039 |
+
#. translators: form shortcode.
|
1040 |
+
#: includes/class-cpts.php:217
|
1041 |
msgid "Success! Here's the shortcode: %s. Just paste it into a post or page editor to publish"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
+
#: includes/class-cpts.php:220
|
1045 |
msgid "Form saved."
|
1046 |
msgstr ""
|
1047 |
|
1048 |
+
#: includes/class-cpts.php:221
|
1049 |
msgid "Form submitted."
|
1050 |
msgstr ""
|
1051 |
|
1052 |
+
#. translators: formatted post date timestamp.
|
1053 |
+
#: includes/class-cpts.php:223
|
1054 |
msgid "Form scheduled for: <strong>%1$s</strong>."
|
1055 |
msgstr ""
|
1056 |
|
1057 |
+
#: includes/class-cpts.php:225
|
1058 |
msgid "Form draft updated."
|
1059 |
msgstr ""
|
1060 |
|
1061 |
+
#: includes/class-cpts.php:253
|
1062 |
msgid "Enter a form name"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
+
#: includes/class-cpts.php:254
|
1066 |
msgid "(Examples: Join Our Email List, Contact Us)"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
#. translators: Placeholders will be form title and then last modified date.
|
1070 |
+
#: includes/class-cpts.php:320
|
1071 |
msgid "%1$s (last modified %2$s ago)"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
+
#: includes/class-display.php:522
|
1075 |
+
msgid "Select list(s) to subscribe to"
|
1076 |
+
msgstr ""
|
1077 |
+
|
1078 |
+
#: includes/class-display.php:544
|
1079 |
msgid "Constant Contact Use."
|
1080 |
msgstr ""
|
1081 |
|
1082 |
+
#: includes/class-display.php:699, includes/class-display.php:1799
|
1083 |
msgid "Error: Please correct your entry."
|
1084 |
msgstr ""
|
1085 |
|
1086 |
+
#: includes/class-display.php:1372
|
1087 |
msgid "Street Address"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
+
#: includes/class-display.php:1373
|
1091 |
msgid "Address Line 2"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
+
#: includes/class-display.php:1374
|
1095 |
msgid "City"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
+
#: includes/class-display.php:1375
|
1099 |
msgid "State"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
+
#: includes/class-display.php:1376
|
1103 |
msgid "ZIP Code"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
+
#: includes/class-display.php:1566
|
1107 |
msgid "Month"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
+
#: includes/class-display.php:1567
|
1111 |
msgid "Day"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
+
#: includes/class-display.php:1568
|
1115 |
msgid "Year"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
+
#: includes/class-display.php:1684
|
1119 |
msgid "January"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
+
#: includes/class-display.php:1685
|
1123 |
msgid "February"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
+
#: includes/class-display.php:1686
|
1127 |
msgid "March"
|
1128 |
msgstr ""
|
1129 |
|
1130 |
+
#: includes/class-display.php:1687
|
1131 |
msgid "April"
|
1132 |
msgstr ""
|
1133 |
|
1134 |
+
#: includes/class-display.php:1688
|
1135 |
msgid "May"
|
1136 |
msgstr ""
|
1137 |
|
1138 |
+
#: includes/class-display.php:1689
|
1139 |
msgid "June"
|
1140 |
msgstr ""
|
1141 |
|
1142 |
+
#: includes/class-display.php:1690
|
1143 |
msgid "July "
|
1144 |
msgstr ""
|
1145 |
|
1146 |
+
#: includes/class-display.php:1691
|
1147 |
msgid "August"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
+
#: includes/class-display.php:1692
|
1151 |
msgid "September"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
+
#: includes/class-display.php:1693
|
1155 |
msgid "October"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
+
#: includes/class-display.php:1694
|
1159 |
msgid "November"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
+
#: includes/class-display.php:1695
|
1163 |
msgid "December"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
#. translators: placeholder will hold company info for site owner.
|
1167 |
+
#: includes/class-display.php:1870
|
1168 |
msgid "By submitting this form, you are consenting to receive marketing emails from: %1$s. You can revoke your consent to receive emails at any time by using the SafeUnsubscribe® link, found at the bottom of every email. %2$s"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: includes/class-display.php:1877
|
1172 |
msgid "Emails are serviced by Constant Contact"
|
1173 |
msgstr ""
|
1174 |
|
1180 |
msgid "List information will populate upon saving."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
+
#: includes/class-lists.php:795
|
1184 |
msgid "You already have a list with that name."
|
1185 |
msgstr ""
|
1186 |
|
1187 |
+
#: includes/class-lists.php:812
|
1188 |
msgid "Sync Lists with Constant Contact"
|
1189 |
msgstr ""
|
1190 |
|
1196 |
msgid "Debug logs"
|
1197 |
msgstr ""
|
1198 |
|
1199 |
+
#: includes/class-logging.php:223
|
1200 |
msgid "No error log exists"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
#. translators: placeholder holds the log location.
|
1204 |
+
#: includes/class-logging.php:229
|
1205 |
msgid "We are not able to write to the %s file."
|
1206 |
msgstr ""
|
1207 |
|
1208 |
+
#: includes/class-logging.php:239
|
1209 |
msgid "Error log below can be used with support requests to help identify issues with Constant Contact Forms."
|
1210 |
msgstr ""
|
1211 |
|
1212 |
+
#: includes/class-logging.php:240
|
1213 |
msgid "When available, you can share information by copying and pasting the content in the textarea, or by using the \"Download logs\" link at the end. Logs can be cleared by using the \"Delete logs\" link."
|
1214 |
msgstr ""
|
1215 |
|
1216 |
+
#: includes/class-logging.php:246
|
1217 |
msgid "Error log may still have content, even if an error is shown above. Please use the download link below."
|
1218 |
msgstr ""
|
1219 |
|
1220 |
+
#: includes/class-logging.php:257
|
1221 |
msgid "Download logs"
|
1222 |
msgstr ""
|
1223 |
|
1224 |
+
#: includes/class-logging.php:265
|
1225 |
msgid "Delete logs"
|
1226 |
msgstr ""
|
1227 |
|
1228 |
#. translators: placeholder wil have error message.
|
1229 |
+
#: includes/class-logging.php:326
|
1230 |
msgid "Log display error: %s"
|
1231 |
msgstr ""
|
1232 |
|
1233 |
#. translators: this is only used when some debugging is enabled
|
1234 |
+
#: includes/class-mail.php:284
|
1235 |
msgid "Duplicate send mail for: %1$s and: %2$s"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
+
#: includes/class-mail.php:315
|
1239 |
msgid "Your Constant Contact Forms plugin has captured new information."
|
1240 |
msgstr ""
|
1241 |
|
1242 |
+
#: includes/class-mail.php:319
|
1243 |
msgid "Form title: "
|
1244 |
msgstr ""
|
1245 |
|
1246 |
+
#: includes/class-mail.php:320
|
1247 |
msgid "Form information: "
|
1248 |
msgstr ""
|
1249 |
|
1250 |
#. translators: placeholders provide Constant Contact link information.
|
1251 |
+
#: includes/class-mail.php:326
|
1252 |
msgid "Email marketing is a great way to stay connected and engage with visitors after they've left your site. Visit %1$shttps://www.constantcontact.com/index?pn=miwordpress%2$s to sign up for a Free Trial."
|
1253 |
msgstr ""
|
1254 |
|
1255 |
+
#: includes/class-mail.php:363
|
1256 |
msgid "Constant Contact Forms Notification"
|
1257 |
msgstr ""
|
1258 |
|
1259 |
#. translators: placeholders simply meant for `<strong>` html tags
|
1260 |
+
#: includes/class-mail.php:453
|
1261 |
+
msgid "%1$sNote:%2$s You have disabled admin email notifications under the plugin settings, but are receiving this email because of the following reason."
|
1262 |
msgstr ""
|
1263 |
|
1264 |
+
#: includes/class-mail.php:476
|
1265 |
msgid "Submitted to Constant Contact:"
|
1266 |
msgstr ""
|
1267 |
|
1268 |
+
#: includes/class-mail.php:482
|
1269 |
msgid "NO (Constant Contact list not selected for this form)"
|
1270 |
msgstr ""
|
1271 |
|
1272 |
+
#: includes/class-mail.php:488
|
1273 |
msgid "NO (User did not select the Email Opt-in checkbox)"
|
1274 |
msgstr ""
|
1275 |
|
1276 |
+
#: includes/class-mail.php:488
|
1277 |
msgid "You can disable this under Form options. Email Opt-in isn't required to add subscribers into your account"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
+
#. translators: Placeholder will hold "Constant Contact Forms" with <strong> tags.
|
1281 |
#: includes/class-notification-content.php:57
|
1282 |
msgid "Get the most out of the %s plugin — use it with an active Constant Contact account."
|
1283 |
msgstr ""
|
1331 |
msgid "Dismiss this notice."
|
1332 |
msgstr ""
|
1333 |
|
1334 |
+
#: includes/class-optin.php:137, includes/class-settings.php:956
|
1335 |
msgid "Agree"
|
1336 |
msgstr ""
|
1337 |
|
1338 |
+
#: includes/class-optin.php:138, includes/class-settings.php:957
|
1339 |
msgid "Disagree"
|
1340 |
msgstr ""
|
1341 |
|
1342 |
+
#: includes/class-process-form.php:117, includes/class-process-form.php:693
|
1343 |
msgid "There was an error sending your form."
|
1344 |
msgstr ""
|
1345 |
|
1346 |
+
#: includes/class-process-form.php:129, includes/class-process-form.php:714
|
1347 |
msgid "Your information has been submitted."
|
1348 |
msgstr ""
|
1349 |
|
1350 |
+
#: includes/class-process-form.php:146, includes/class-process-form.php:739
|
1351 |
msgid "We had trouble processing your submission. Please review your entries and try again."
|
1352 |
msgstr ""
|
1353 |
|
1354 |
+
#: includes/class-process-form.php:193
|
1355 |
msgid "No Constant Contact Forms form ID provided"
|
1356 |
msgstr ""
|
1357 |
|
1358 |
+
#: includes/class-process-form.php:200
|
1359 |
msgid "No form verify value provided"
|
1360 |
msgstr ""
|
1361 |
|
1362 |
+
#: includes/class-process-form.php:215
|
1363 |
msgid "Please properly fill out all required fields"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
+
#: includes/class-process-form.php:268
|
1367 |
msgid "Failed reCAPTCHA check"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
+
#: includes/class-process-form.php:301, includes/class-process-form.php:317
|
1371 |
msgid "We had trouble processing your submission. Make sure you haven't changed the required form ID and try again."
|
1372 |
msgstr ""
|
1373 |
|
1374 |
+
#: includes/class-process-form.php:309
|
1375 |
msgid "We had trouble processing your submission. Make sure you haven't changed the required Form ID and try again."
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: includes/class-process-form.php:359
|
1379 |
+
msgid "Please select at least one list to subscribe to."
|
1380 |
+
msgstr ""
|
1381 |
+
|
1382 |
+
#: includes/class-process-form.php:807
|
1383 |
msgid "We do no think you are human"
|
1384 |
msgstr ""
|
1385 |
|
1391 |
msgid "Spam Control"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
+
#: includes/class-settings.php:66, includes/class-settings.php:570
|
1395 |
msgid "Support"
|
1396 |
msgstr ""
|
1397 |
|
1398 |
+
#: includes/class-settings.php:326
|
1399 |
msgid "Constant Contact Forms Settings"
|
1400 |
msgstr ""
|
1401 |
|
1402 |
+
#: includes/class-settings.php:327
|
1403 |
msgid "Settings"
|
1404 |
msgstr ""
|
1405 |
|
1406 |
+
#: includes/class-settings.php:347
|
1407 |
msgid "Google Analytics™ tracking opt-in."
|
1408 |
msgstr ""
|
1409 |
|
1410 |
+
#: includes/class-settings.php:350
|
1411 |
msgid "Allow Constant Contact to use Google Analytics™ to track your usage across the Constant Contact Forms plugin.<br/> NOTE — Your website and users will not be tracked. See our <a href=\"https://www.endurance.com/privacy\"> Privacy Statement</a> information about what is and is not tracked."
|
1412 |
msgstr ""
|
1413 |
|
1414 |
+
#: includes/class-settings.php:356
|
1415 |
msgid "Disable E-mail Notifications"
|
1416 |
msgstr ""
|
1417 |
|
1418 |
#. translators: Placeholder is for a <br /> HTML tag.
|
1419 |
+
#: includes/class-settings.php:359
|
1420 |
msgid "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\"."
|
1421 |
msgstr ""
|
1422 |
|
1423 |
+
#: includes/class-settings.php:367
|
1424 |
msgid "Bypass Constant Contact cron scheduling"
|
1425 |
msgstr ""
|
1426 |
|
1427 |
+
#: includes/class-settings.php:368
|
1428 |
msgid "This option will send form entries to Constant Contact right away instead of holding for one minute delay."
|
1429 |
msgstr ""
|
1430 |
|
1431 |
+
#: includes/class-settings.php:382
|
1432 |
msgid "Advanced Opt-in"
|
1433 |
msgstr ""
|
1434 |
|
1435 |
+
#: includes/class-settings.php:387
|
1436 |
msgid "Opt-in Location"
|
1437 |
msgstr ""
|
1438 |
|
1439 |
+
#: includes/class-settings.php:394, includes/class-settings.php:401
|
1440 |
msgid "Select a list"
|
1441 |
msgstr ""
|
1442 |
|
1443 |
+
#: includes/class-settings.php:397
|
1444 |
+
msgid "Add subscribers to"
|
1445 |
+
msgstr ""
|
1446 |
+
|
1447 |
#. translators: placeholder will hold site owner's business name.
|
1448 |
+
#: includes/class-settings.php:419
|
1449 |
msgid "Yes, I would like to receive emails from %s. Sign me up!"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
+
#: includes/class-settings.php:424
|
1453 |
msgid "Disclosure Name"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
+
#: includes/class-settings.php:432
|
1457 |
msgid "Disclosure Address"
|
1458 |
msgstr ""
|
1459 |
|
1460 |
+
#: includes/class-settings.php:446
|
1461 |
msgid "Global Form CSS Settings"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
+
#: includes/class-settings.php:451
|
1465 |
+
msgid "CSS Classes"
|
1466 |
+
msgstr ""
|
1467 |
+
|
1468 |
+
#: includes/class-settings.php:454
|
1469 |
msgid "Provide custom classes for the form separated by a single space."
|
1470 |
msgstr ""
|
1471 |
|
1472 |
+
#: includes/class-settings.php:474
|
1473 |
msgid "Choose the position for the labels of the form elements."
|
1474 |
msgstr ""
|
1475 |
|
1476 |
+
#: includes/class-settings.php:494
|
1477 |
msgid "Google reCAPTCHA"
|
1478 |
msgstr ""
|
1479 |
|
1480 |
+
#: includes/class-settings.php:497
|
1481 |
msgid "Learn more and get an "
|
1482 |
msgstr ""
|
1483 |
|
1484 |
+
#: includes/class-settings.php:499
|
1485 |
msgid "API site key"
|
1486 |
msgstr ""
|
1487 |
|
1488 |
+
#: includes/class-settings.php:504
|
1489 |
msgid "Version"
|
1490 |
msgstr ""
|
1491 |
|
1492 |
+
#: includes/class-settings.php:510
|
1493 |
msgid "Version 2"
|
1494 |
msgstr ""
|
1495 |
|
1496 |
+
#: includes/class-settings.php:511
|
1497 |
msgid "Version 3"
|
1498 |
msgstr ""
|
1499 |
|
1500 |
+
#: includes/class-settings.php:516
|
1501 |
msgid "Site Key"
|
1502 |
msgstr ""
|
1503 |
|
1504 |
+
#: includes/class-settings.php:526
|
1505 |
msgid "Secret Key"
|
1506 |
msgstr ""
|
1507 |
|
1508 |
+
#: includes/class-settings.php:539
|
1509 |
msgid "Suspected Bot Error Message"
|
1510 |
msgstr ""
|
1511 |
|
1512 |
+
#: includes/class-settings.php:542
|
1513 |
msgid "This message displays when the plugin detects spam data. Note that this message may be overriden on a per-post basis."
|
1514 |
msgstr ""
|
1515 |
|
1516 |
+
#: includes/class-settings.php:548
|
1517 |
msgid "Error Message"
|
1518 |
msgstr ""
|
1519 |
|
1520 |
+
#: includes/class-settings.php:574
|
1521 |
msgid "Enable logging for debugging purposes."
|
1522 |
msgstr ""
|
1523 |
|
1524 |
+
#: includes/class-settings.php:575
|
1525 |
msgid "This option will turn on some logging functionality that can be used to deduce sources of issues with the use of Constant Contact Forms plugin."
|
1526 |
msgstr ""
|
1527 |
|
1528 |
+
#: includes/class-settings.php:592
|
1529 |
msgid "Add a checkbox to the comment field in your posts"
|
1530 |
msgstr ""
|
1531 |
|
1532 |
+
#: includes/class-settings.php:593
|
1533 |
msgid "Add a checkbox to the main WordPress login page"
|
1534 |
msgstr ""
|
1535 |
|
1536 |
+
#: includes/class-settings.php:597
|
1537 |
msgid "Add a checkbox to the WordPress user registration page"
|
1538 |
msgstr ""
|
1539 |
|
1540 |
+
#: includes/class-settings.php:1039
|
1541 |
msgid "We do not think you are human"
|
1542 |
msgstr ""
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: constantcontact, webdevstudios, tw2113, znowebdev, ggwicz, ravedev
|
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: 5.2.0
|
5 |
-
Tested up to: 5.5
|
6 |
-
Stable tag: 1.
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
Requires PHP: 5.6
|
@@ -35,6 +35,14 @@ BONUS: If you have a Constant Contact account, all new email addresses that you
|
|
35 |
|
36 |
== Changelog ==
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
= 1.8.8 =
|
39 |
* Updated: Added extra security output escaping of custom input values
|
40 |
|
2 |
Contributors: constantcontact, webdevstudios, tw2113, znowebdev, ggwicz, ravedev
|
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: 5.2.0
|
5 |
+
Tested up to: 5.5.1
|
6 |
+
Stable tag: 1.9.0
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
Requires PHP: 5.6
|
35 |
|
36 |
== Changelog ==
|
37 |
|
38 |
+
= 1.9.0 =
|
39 |
+
* Added: Ability for site owners to multiple lists for users to choose which to sign up for.
|
40 |
+
* Fixed: Issues around enabling list signup on user registration.
|
41 |
+
* Fixed: Unintended markup in email notification text.
|
42 |
+
* Fixed: Inappropriate or unneeded markup around hidden fields.
|
43 |
+
* Updated: Max length values for first/last name fields.
|
44 |
+
* Updated: Deprecated some functions in order to get consistent naming across all our code.
|
45 |
+
|
46 |
= 1.8.8 =
|
47 |
* Updated: Added extra security output escaping of custom input values
|
48 |
|
vendor/constantcontact/constantcontact/.gitignore
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
# Created by .gitignore support plugin (hsz.mobi)
|
2 |
-
|
3 |
-
## Directory-based project format
|
4 |
-
.idea/
|
5 |
-
/*.iml
|
6 |
-
|
7 |
-
## File-based project format
|
8 |
-
*.ipr
|
9 |
-
*.iws
|
10 |
-
|
11 |
-
## Additional for IntelliJ
|
12 |
-
out/
|
13 |
-
|
14 |
-
# generated by mpeltonen/sbt-idea plugin
|
15 |
-
.idea_modules/
|
16 |
-
|
17 |
-
# generated by JIRA plugin
|
18 |
-
atlassian-ide-plugin.xml
|
19 |
-
|
20 |
-
### Composer template
|
21 |
-
composer.lock
|
22 |
-
composer.phar
|
23 |
-
vendor/
|
24 |
-
|
25 |
-
devFile.php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/defuse/php-encryption/.gitignore
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
*~
|
2 |
-
/test/unit/File/big-generated-file
|
3 |
-
/composer.lock
|
4 |
-
/vendor
|
5 |
-
defuse-crypto.phar
|
6 |
-
defuse-crypto.phar.sig
|
7 |
-
composer.phar
|
8 |
-
box.phar
|
9 |
-
phpunit.phar
|
10 |
-
phpunit.phar.asc
|
11 |
-
test/unit/File/tmp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/google/recaptcha/.gitignore
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
/.php_cs.cache
|
2 |
-
/.phpunit.result.cache
|
3 |
-
/build
|
4 |
-
/composer.lock
|
5 |
-
/examples/config.php
|
6 |
-
/nbproject/private/
|
7 |
-
/vendor/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/guzzlehttp/ringphp/.gitignore
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
vendor
|
2 |
-
build/artifacts/
|
3 |
-
composer.lock
|
4 |
-
docs/_build/
|
|
|
|
|
|
|
|
vendor/guzzlehttp/streams/.gitignore
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
.idea
|
2 |
-
.DS_STORE
|
3 |
-
coverage
|
4 |
-
phpunit.xml
|
5 |
-
composer.lock
|
6 |
-
vendor/
|
|
|
|
|
|
|
|
|
|
|
|
vendor/psr/log/.gitignore
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
vendor
|
|
vendor/react/promise/.gitignore
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
composer.lock
|
2 |
-
composer.phar
|
3 |
-
phpunit.xml
|
4 |
-
build/
|
5 |
-
vendor/
|
|
|
|
|
|
|
|
|
|