Contact Form by WPForms – Drag & Drop Form Builder for WordPress - Version 1.3.9.1

Version Description

  • Changed: Template Export excludes array items with empty strings
  • Fixed: Admin notices displaying on plugin Welcome/activation screen
  • Fixed: WPForms admin pages displaying blank due to conflicts with a few other plugins
Download this release

Release Info

Developer jaredatch
Plugin Icon 128x128 Contact Form by WPForms – Drag & Drop Form Builder for WordPress
Version 1.3.9.1
Comparing to
See all releases

Code changes from version 1.3.8 to 1.3.9.1

Files changed (77) hide show
  1. assets/css/admin-addons.css +0 -156
  2. assets/css/admin-builder.css +3 -3
  3. assets/css/admin-menu.css +0 -29
  4. assets/css/admin-overview.css +0 -19
  5. assets/css/admin-settings.css +0 -477
  6. assets/css/admin-welcome.css +0 -40
  7. assets/css/admin.css +2 -0
  8. assets/css/jquery.minicolors.css +169 -177
  9. assets/css/wpforms-preview.css +117 -32
  10. assets/images/cross-inverse.svg +1 -0
  11. assets/images/cross.svg +1 -0
  12. assets/images/flags.png +0 -0
  13. assets/images/icon-cc-amex.png +0 -0
  14. assets/images/icon-cc-discover.png +0 -0
  15. assets/images/icon-cc-lock.png +0 -0
  16. assets/images/icon-cc-maestro.png +0 -0
  17. assets/images/icon-cc-mastercard.png +0 -0
  18. assets/images/icon-cc-svc.png +0 -0
  19. assets/images/icon-cc-visa.png +0 -0
  20. assets/images/jquery.minicolors.png +0 -0
  21. assets/images/logo-builder.png +0 -0
  22. assets/images/logo.png +0 -0
  23. assets/images/settings-captcha-addon.png +0 -0
  24. assets/images/settings-email-html.png +0 -0
  25. assets/images/settings-email-plaintext.png +0 -0
  26. assets/images/spinner-small.gif +0 -0
  27. assets/images/spinner.gif +0 -0
  28. assets/images/welcome-feature-icon-1.png +0 -0
  29. assets/images/welcome-feature-icon-10.png +0 -0
  30. assets/images/welcome-feature-icon-2.png +0 -0
  31. assets/images/welcome-feature-icon-3.png +0 -0
  32. assets/images/welcome-feature-icon-4.png +0 -0
  33. assets/images/welcome-feature-icon-5.png +0 -0
  34. assets/images/welcome-feature-icon-6.png +0 -0
  35. assets/images/welcome-feature-icon-7.png +0 -0
  36. assets/images/welcome-feature-icon-8.png +0 -0
  37. assets/images/welcome-feature-icon-9.png +0 -0
  38. assets/images/welcome-features.png +0 -0
  39. assets/images/welcome-testimonial-bill.jpg +0 -0
  40. assets/images/welcome-testimonial-david.jpg +0 -0
  41. assets/images/welcome-video.png +0 -0
  42. assets/js/admin-builder.js +24 -6
  43. assets/js/admin-overview.js +0 -21
  44. assets/js/admin-settings.js +0 -224
  45. assets/js/admin.min.js +1 -0
  46. assets/js/choices.min.js +4 -0
  47. assets/js/jquery.fitvids.js +0 -87
  48. assets/js/jquery.minicolors.min.js +8 -11
  49. assets/js/wpforms-preview.js +0 -17
  50. changelog.txt +16 -0
  51. includes/admin/admin.php +310 -0
  52. includes/admin/ajax-actions.php +43 -43
  53. includes/admin/builder/class-builder.php +5 -5
  54. includes/admin/builder/panels/class-providers.php +2 -2
  55. includes/admin/class-am-deactivation-survey.php +279 -0
  56. includes/admin/class-am-notification.php +353 -0
  57. includes/admin/class-menu.php +92 -16
  58. includes/admin/class-notices.php +136 -0
  59. {lite/includes → includes}/admin/class-review.php +60 -3
  60. includes/admin/class-settings.php +505 -0
  61. includes/admin/class-tools.php +534 -0
  62. includes/admin/class-welcome.php +210 -140
  63. includes/admin/overview/class-overview-table.php +5 -5
  64. includes/admin/overview/class-overview.php +32 -52
  65. includes/admin/settings-api.php +305 -0
  66. includes/class-preview.php +127 -43
  67. includes/fields/class-base.php +4 -9
  68. includes/fields/class-checkbox.php +58 -54
  69. includes/fields/class-radio.php +51 -48
  70. includes/fields/class-select.php +5 -5
  71. includes/functions.php +196 -18
  72. includes/providers/class-base.php +7 -7
  73. languages/wpforms.pot +1098 -876
  74. lite/includes/admin/class-settings.php +0 -699
  75. lite/wpforms-lite.php +349 -52
  76. readme.txt +17 -1
  77. wpforms.php +264 -229
assets/css/admin-addons.css DELETED
@@ -1,156 +0,0 @@
1
- /* ==========================================================================
2
- Addons Styles
3
- ========================================================================== */
4
-
5
- #wpforms-addons .wpforms-clear:before {
6
- content: " ";
7
- display: table;
8
- }
9
-
10
- #wpforms-addons .wpforms-clear:after {
11
- clear: both;
12
- content: " ";
13
- display: table;
14
- }
15
-
16
- #wpforms-addons .intro {
17
- margin-bottom: 30px;
18
- }
19
-
20
- .wpforms-addons-basic-message {
21
- border: 1px solid #ddd;
22
- padding: 20px;
23
- }
24
-
25
- .wpforms-addons-basic-message h5 {
26
- font-size: 16px;
27
- font-weight: 700;
28
- margin: 0 0 15px 0;
29
- }
30
-
31
- .wpforms-addons-basic-message p {
32
- margin: 0;
33
- }
34
-
35
- .wpforms-addons-unlock {
36
- margin: 35px 0 25px;
37
- }
38
-
39
- .wpforms-addons-unlock h4 {
40
- font-size: 23px;
41
- font-weight: 400;
42
- margin: 0 0 6px 0;
43
- line-height: 29px;
44
- }
45
-
46
- .wpforms-addons-unlock p {
47
- margin: 0;
48
- }
49
-
50
- .wpforms-addon-item {
51
- background-color: #fff;
52
- border: 1px solid #ddd;
53
- width: 49%;
54
- float: left;
55
- clear: right;
56
- min-height: 118px;
57
- margin: 0 0 18px 0;
58
- position: relative;
59
- }
60
-
61
- .wpforms-addon-item.wpforms-second {
62
- float: right;
63
- }
64
-
65
- .wpforms-addon-image {
66
- float: left;
67
- height: 92px;
68
- width: 92px;
69
- border: 1px solid #ddd;
70
- margin: 12px 0 0 12px;
71
- }
72
-
73
- .wpforms-addon-image img {
74
- display: block;
75
- margin: 0 auto;
76
- max-width: 100%;
77
- }
78
-
79
- .wpforms-addon-text {
80
- margin: 0 200px 0 126px;
81
- padding: 22px 0;
82
- }
83
-
84
- .wpforms-addon-text h4 {
85
- margin: 0;
86
- font-size: 16px;
87
- font-weight: 700;
88
- margin: 0 0 8px 0;
89
- }
90
-
91
- .wpforms-addon-text p {
92
- margin: 0;
93
- }
94
-
95
- .wpforms-addon-action {
96
- position: absolute;
97
- top: 0;
98
- right: 0;
99
- width: 180px;
100
- height: 100%;
101
- text-align: center;
102
- border-left: 1px solid #ddd;
103
- }
104
-
105
- .wpforms-addon-action a,
106
- .wpforms-addon-action button {
107
- font-size: 14px;
108
- color: #fff;
109
- background-color: #0085ba;
110
- border: 1px solid #006d98;
111
- text-decoration: none;
112
- width: 130px;
113
- margin: 40px auto 0 auto;
114
- display: block;
115
- border-radius: 5px;
116
- padding: 10px 0;
117
- cursor: pointer;
118
- }
119
-
120
- .wpforms-addon-action a:hover,
121
- .wpforms-addon-action button:hover {
122
- background-color: #006d98;
123
- }
124
-
125
- .wpforms-addon-status-active .wpforms-addon-action {
126
- background-color: #edfaff;
127
- }
128
-
129
- .wpforms-addon-status-inactive .wpforms-addon-action {
130
- background-color: #f5f6f7;
131
- }
132
-
133
- .wpforms-error {
134
- color: #b94a48;
135
- background-color: #f2dede;
136
- padding: 8px;
137
- }
138
-
139
- .wpforms-success {
140
- color: #468847;
141
- background-color: #dff0d8;
142
- padding: 8px;
143
- }
144
-
145
- /*
146
- @media only screen and (max-width: 1240px) {
147
- */
148
- .wpforms-addon-item,
149
- .wpforms-addon-item.wpforms-second {
150
- max-width: 800px;
151
- width: 100%;
152
- float: none;
153
- }
154
- /*
155
- }
156
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/admin-builder.css CHANGED
@@ -213,12 +213,12 @@ body {
213
 
214
  #wpforms-builder .wpforms-toolbar .wpforms-left {
215
  position: absolute;
216
- left: 15px;
217
- top: 14px;
218
  }
219
 
220
  #wpforms-builder .wpforms-toolbar .wpforms-left img {
221
- height: 46px;
222
  }
223
 
224
  #wpforms-builder .wpforms-toolbar .wpforms-center {
213
 
214
  #wpforms-builder .wpforms-toolbar .wpforms-left {
215
  position: absolute;
216
+ left: 12px;
217
+ top: 12px;
218
  }
219
 
220
  #wpforms-builder .wpforms-toolbar .wpforms-left img {
221
+ height: 50px;
222
  }
223
 
224
  #wpforms-builder .wpforms-toolbar .wpforms-center {
assets/css/admin-menu.css DELETED
@@ -1,29 +0,0 @@
1
- @font-face {
2
- font-family: "wpforms-menu";
3
- src:url("../fonts/wpforms-menu.eot");
4
- src:url("../fonts/wpforms-menu.eot?#iefix") format("embedded-opentype"),
5
- url("../fonts/wpforms-menu.woff") format("woff"),
6
- url("../fonts/wpforms-menu.ttf") format("truetype"),
7
- url("../fonts/wpforms-menu.svg#wpforms") format("svg");
8
- font-weight: normal;
9
- font-style: normal;
10
- }
11
-
12
- #toplevel_page_wpforms-overview .wp-menu-image:before,
13
- .wpforms-menu-icon:before {
14
- content: "\61";
15
- font-family: "wpforms-menu" !important;
16
- font-style: normal !important;
17
- font-weight: normal !important;
18
- font-variant: normal !important;
19
- text-transform: none !important;
20
- speak: none;
21
- line-height: 1;
22
- -webkit-font-smoothing: antialiased;
23
- -moz-osx-font-smoothing: grayscale;
24
- }
25
-
26
- #toplevel_page_wpforms-overview .wp-menu-image:before {
27
- font-size: 1.15em;
28
- padding-top: 9px;
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/admin-overview.css DELETED
@@ -1,19 +0,0 @@
1
- /* ==========================================================================
2
- Overview Styles
3
- ========================================================================== */
4
-
5
- #wpforms-overview .wp-list-table .column-id {
6
- width: 30px;
7
- }
8
-
9
- #wpforms-overview .wp-list-table .column-entries {
10
- width: 70px;
11
- }
12
-
13
- #wpforms-overview .wp-list-table .column-shortcode {
14
- width: 150px;
15
- }
16
-
17
- #wpforms-overview .wp-list-table .column-created {
18
- width: 145px;
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/admin-settings.css DELETED
@@ -1,477 +0,0 @@
1
- /* ==========================================================================
2
- Settings Styles
3
- ========================================================================== */
4
-
5
- #wpforms-settings .wpforms-clear:before {
6
- content: " ";
7
- display: table;
8
- }
9
-
10
- #wpforms-settings .wpforms-clear:after {
11
- clear: both;
12
- content: " ";
13
- display: table;
14
- }
15
-
16
- #wpforms-settings .wpforms-circle-loader {
17
- margin: 50px auto;
18
- width: 60px;
19
- height: 60px;
20
- position: relative;
21
- }
22
-
23
- #wpforms-settings .wpforms-circle-loader .wpforms-circle {
24
- width: 100%;
25
- height: 100%;
26
- position: absolute;
27
- left: 0;
28
- top: 0;
29
- }
30
-
31
- #wpforms-settings .wpforms-circle-loader .wpforms-circle:before {
32
- content: '';
33
- display: block;
34
- margin: 0 auto;
35
- width: 15%;
36
- height: 15%;
37
- background-color: #0e6cad;
38
- border-radius: 100%;
39
- -webkit-animation: wpforms-circleFadeDelay 1.2s infinite ease-in-out both;
40
- animation: wpforms-circleFadeDelay 1.2s infinite ease-in-out both;
41
- }
42
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-2 {
43
- -webkit-transform: rotate(30deg);
44
- -ms-transform: rotate(30deg);
45
- transform: rotate(30deg);
46
- }
47
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-3 {
48
- -webkit-transform: rotate(60deg);
49
- -ms-transform: rotate(60deg);
50
- transform: rotate(60deg);
51
- }
52
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-4 {
53
- -webkit-transform: rotate(90deg);
54
- -ms-transform: rotate(90deg);
55
- transform: rotate(90deg);
56
- }
57
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-5 {
58
- -webkit-transform: rotate(120deg);
59
- -ms-transform: rotate(120deg);
60
- transform: rotate(120deg);
61
- }
62
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-6 {
63
- -webkit-transform: rotate(150deg);
64
- -ms-transform: rotate(150deg);
65
- transform: rotate(150deg);
66
- }
67
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-7 {
68
- -webkit-transform: rotate(180deg);
69
- -ms-transform: rotate(180deg);
70
- transform: rotate(180deg);
71
- }
72
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-8 {
73
- -webkit-transform: rotate(210deg);
74
- -ms-transform: rotate(210deg);
75
- transform: rotate(210deg);
76
- }
77
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-9 {
78
- -webkit-transform: rotate(240deg);
79
- -ms-transform: rotate(240deg);
80
- transform: rotate(240deg);
81
- }
82
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-10 {
83
- -webkit-transform: rotate(270deg);
84
- -ms-transform: rotate(270deg);
85
- transform: rotate(270deg);
86
- }
87
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-11 {
88
- -webkit-transform: rotate(300deg);
89
- -ms-transform: rotate(300deg);
90
- transform: rotate(300deg);
91
- }
92
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-12 {
93
- -webkit-transform: rotate(330deg);
94
- -ms-transform: rotate(330deg);
95
- transform: rotate(330deg);
96
- }
97
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-2:before {
98
- -webkit-animation-delay: -1.1s;
99
- animation-delay: -1.1s;
100
- }
101
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-3:before {
102
- -webkit-animation-delay: -1s;
103
- animation-delay: -1s;
104
- }
105
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-4:before {
106
- -webkit-animation-delay: -0.9s;
107
- animation-delay: -0.9s;
108
- }
109
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-5:before {
110
- -webkit-animation-delay: -0.8s;
111
- animation-delay: -0.8s;
112
- }
113
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-6:before {
114
- -webkit-animation-delay: -0.7s;
115
- animation-delay: -0.7s;
116
- }
117
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-7:before {
118
- -webkit-animation-delay: -0.6s;
119
- animation-delay: -0.6s;
120
- }
121
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-8:before {
122
- -webkit-animation-delay: -0.5s;
123
- animation-delay: -0.5s;
124
- }
125
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-9:before {
126
- -webkit-animation-delay: -0.4s;
127
- animation-delay: -0.4s;
128
- }
129
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-10:before {
130
- -webkit-animation-delay: -0.3s;
131
- animation-delay: -0.3s;
132
- }
133
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-11:before {
134
- -webkit-animation-delay: -0.2s;
135
- animation-delay: -0.2s;
136
- }
137
- #wpforms-settings .wpforms-circle-loader .wpforms-circle-12:before {
138
- -webkit-animation-delay: -0.1s;
139
- animation-delay: -0.1s;
140
- }
141
-
142
- @-webkit-keyframes wpforms-circleFadeDelay {
143
- 0%, 39%, 100% { opacity: 0; }
144
- 40% { opacity: 1; }
145
- }
146
-
147
- @keyframes wpforms-circleFadeDelay {
148
- 0%, 39%, 100% { opacity: 0; }
149
- 40% { opacity: 1; }
150
- }
151
-
152
- #wpforms-settings .wpforms-tab,
153
- #wpforms-tabs {
154
- display: none;
155
- }
156
-
157
- #wpforms-settings .nav-tab:focus {
158
- box-shadow: none;
159
- }
160
-
161
- #wpforms-settings .wpforms-tab .below-h2 {
162
- margin-top: 22px;
163
- }
164
-
165
- #wpforms-settings .wpforms-tab.wpforms-active {
166
- display: block;
167
- }
168
-
169
- #wpforms-settings div.updated {
170
- margin-top: 15px;
171
- }
172
-
173
- #wpforms-settings td.section {
174
- padding: 0 0 10px 0;
175
- margin: 0;
176
- }
177
-
178
- #wpforms-settings td.section h4 {
179
- margin: 15px 0 0 0;
180
- font-size: 20px;
181
- }
182
-
183
- #wpforms-settings td.section p {
184
- max-width: 800px;
185
- }
186
-
187
- #wpforms-settings td label {
188
- margin: .25em 0 .5em!important;
189
- display: inline-block;
190
- font-style: italic;
191
- color: #666;
192
- }
193
-
194
- #wpforms-settings h4 {
195
- margin: 0;
196
- }
197
-
198
- #wpforms-settings input[type=text],
199
- #wpforms-settings input[type=password] {
200
- min-width: 300px;
201
- }
202
-
203
- #wpforms-settings #submit-key-refresh {
204
- vertical-align: baseline;
205
- }
206
-
207
- #wpforms-settings .wpforms-color-picker {
208
- height: auto;
209
- padding-left: 30px !important;
210
- overflow: visible;
211
- }
212
-
213
- #wpforms-settings .wpforms-color-picker .minicolors-theme-default .minicolors-swatch {
214
- height: 24px
215
- }
216
-
217
- #wpforms-settings .wpforms-provider-account {
218
- margin-bottom: 20px;
219
- line-height: 1.8;
220
- }
221
-
222
- #wpforms-settings .wpforms-provider-account span {
223
- display: inline-block;
224
- min-width: 120px;
225
- color: #666;
226
- }
227
-
228
- #wpforms-settings .wpforms-settings-upload-image-display {
229
- display: block;
230
- margin: 0 !important;
231
- }
232
-
233
- #wpforms-settings .wpforms-settings-upload-image-display img {
234
- display: block;
235
- margin: 0 0 10px 0 !important;
236
- max-width: 410px;
237
- }
238
-
239
- /* Integrations tab
240
- -------------------------------------------------------------- */
241
-
242
- .wpforms-settings-provider {
243
- border-bottom: 1px solid #ddd;
244
- max-width: 800px;
245
- padding: 20px 0;
246
- }
247
-
248
- .wpforms-settings-provider.focus-out {
249
- opacity: 0.4;
250
- }
251
-
252
- .wpforms-settings-provider-header {
253
- cursor: pointer;
254
- }
255
-
256
- .wpforms-settings-provider-logo {
257
- float: left;
258
- position: relative;
259
- }
260
-
261
- .wpforms-settings-provider-logo .fa {
262
- position: absolute;
263
- top: 50%;
264
- margin: -9px 0 0 0;
265
- left: 10px;
266
- color: #666;
267
- font-size: 18px;
268
- }
269
-
270
- .wpforms-settings-provider-logo img {
271
- border: 1px solid #ddd;
272
- max-width: 90px;
273
- display: block;
274
- margin: 0 0 0 40px;
275
- }
276
-
277
- .wpforms-settings-provider-info {
278
- margin: 0 0 0 160px;
279
- position: relative;
280
- padding: 20px 0 0;
281
- }
282
-
283
- .wpforms-settings-provider-info h3 {
284
- margin: 0 0 10px 0;
285
- font-size: 20px;
286
- font-weight: 600;
287
- }
288
-
289
- .wpforms-settings-provider-info p {
290
- margin: 0;
291
- }
292
-
293
- .wpforms-settings-provider-info .connected-indicator {
294
- color: #83c11f;
295
- width: 105px;
296
- border: 1px solid #83c11f;
297
- border-radius: 4px;
298
- padding: 8px 14px;
299
- font-size: 16px;
300
- position: absolute;
301
- top: 28px;
302
- right: 0;
303
- display: none;
304
- }
305
-
306
- .connected .wpforms-settings-provider-info .connected-indicator {
307
- display: block;
308
- }
309
-
310
- .wpforms-settings-provider-accounts {
311
- margin: 0 0 0 160px;
312
- display: none;
313
- }
314
-
315
- .focus-in .wpforms-settings-provider-accounts {
316
- display: block;
317
- }
318
-
319
- .wpforms-settings-provider-accounts-list ul {
320
- padding: 0;
321
- margin: 0;
322
- }
323
-
324
- .wpforms-settings-provider-accounts-list ul li {
325
- border-bottom: 1px solid #ddd;
326
- margin: 0;
327
- padding: 6px 0;
328
- }
329
-
330
- .wpforms-settings-provider-accounts-list ul li:first-of-type {
331
- border-top: 1px solid #ddd;
332
- }
333
-
334
- .wpforms-settings-provider-accounts-list ul li:last-of-type {
335
- margin-bottom: 16px;
336
- }
337
-
338
- .wpforms-settings-provider-accounts-list span.label {
339
- display: inline-block;
340
- width: 220px;
341
- }
342
-
343
- .wpforms-settings-provider-accounts-list span.date {
344
- color: #999;
345
- display: inline-block;
346
- width: 240px;
347
- }
348
-
349
- .wpforms-settings-provider-accounts-connect {
350
- display: none;
351
- padding-top: 10px;
352
- }
353
-
354
- .focus-in .wpforms-settings-provider-accounts-connect {
355
- display: block;
356
- }
357
-
358
- .wpforms-settings-provider-accounts-connect .fa {
359
- display: none;
360
- }
361
-
362
- .wpforms-settings-provider-accounts-connect p,
363
- .wpforms-settings-provider-accounts p {
364
- margin: 0 0 15px 0;
365
- }
366
-
367
- /* System Details tab
368
- -------------------------------------------------------------- */
369
-
370
- #wpforms-settings-system {
371
- padding-top: 20px;
372
- }
373
-
374
- #wpforms-settings-system .system-info-textarea,
375
- #wpforms-import-export .template-export-textarea {
376
- width: 100%;
377
- height: 400px;
378
- font-family: Menlo,Monaco,monospace;
379
- background: #fff;
380
- white-space: pre;
381
- overflow: auto;
382
- display: block;
383
- padding: 20px;
384
- }
385
-
386
- /* Import/Export tab
387
- -------------------------------------------------------------- */
388
-
389
- #wpforms-import-export p {
390
- margin-bottom: 10px;
391
- }
392
-
393
- #wpforms-import-export input[type=submit] {
394
- margin-top: 10px;
395
- }
396
-
397
- #wpforms-import-export .export-list {
398
- background-color: #fff;
399
- max-height: 210px;
400
- overflow-y: scroll;
401
- border: 1px solid #ddd;
402
- margin: 0 0 5px 0;
403
- max-width: 510px;
404
- }
405
-
406
- #wpforms-import-export .export-list li {
407
- display: block;
408
- list-style: none;
409
- margin: 0;
410
- }
411
-
412
- #wpforms-import-export .export-list li label {
413
- display: block;
414
- padding: 8px 10px;
415
- border-bottom: 1px solid #eee;
416
- font-style: normal;
417
- margin: 0 !important;
418
- }
419
-
420
- #wpforms-import-export .export-list li:last-of-type label {
421
- border-bottom: none;
422
- }
423
-
424
- /* Integrations tab
425
- -------------------------------------------------------------- */
426
-
427
- .wpforms-alert {
428
- padding: 10px;
429
- margin-bottom: 18px;
430
- border: 1px solid transparent;
431
- }
432
-
433
- .wpforms-alert h4 {
434
- margin-top: 0;
435
- color: inherit;
436
- }
437
-
438
- .wpforms-alert > p,
439
- .wpforms-alert > ul {
440
- margin-bottom: 0;
441
- }
442
-
443
- .wpforms-alert > p + p {
444
- margin-top: 5px;
445
- }
446
-
447
- .wpforms-alert-nomargin {
448
- margin: 0;
449
- }
450
-
451
- .wpforms-alert-small {
452
- font-size: 12px;
453
- }
454
-
455
- .wpforms-alert-success {
456
- background-color: #dff0d8;
457
- border-color: #d6e9c6;
458
- color: #3c763d;
459
- }
460
-
461
- .wpforms-alert-info {
462
- background-color: #d9edf7;
463
- border-color: #bce8f1;
464
- color: #31708f;
465
- }
466
-
467
- .wpforms-alert-warning {
468
- background-color: #fcf8e3;
469
- border-color: #faebcc;
470
- color: #8a6d3b;
471
- }
472
-
473
- .wpforms-alert-danger {
474
- background-color: #f2dede;
475
- border-color: #ebccd1;
476
- color: #a94442;
477
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/admin-welcome.css DELETED
@@ -1,40 +0,0 @@
1
- /* ==========================================================================
2
- Welcome / Getting Started page
3
- ========================================================================== */
4
-
5
- .about-wrap .wpforms-badge {
6
- position: absolute;
7
- top: 0;
8
- right: 0;
9
- color: #999;
10
- font-size: 14px;
11
- text-align: center;
12
- margin: 5px 0 0;
13
- width: 150px;
14
- }
15
-
16
- .about-wrap .wpforms-badge .version {
17
- display: block;
18
- margin: 0 auto;
19
- margin: 5px auto 0 auto;
20
- }
21
-
22
- .about-wrap .feature-section p {
23
- font-size: 15px;
24
- }
25
-
26
- .about-wrap .feature-section.two-col .col {
27
- vertical-align: top;
28
- }
29
-
30
- .about-wrap .wpforms-features-button {
31
- font-size: 16px;
32
- height: auto;
33
- padding: 8px 25px;
34
- margin-top: 20px;
35
- }
36
-
37
- .about-wrap .feature-section .feature-video,
38
- .about-wrap .feature-section img {
39
- max-width: 400px;
40
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/admin.css ADDED
@@ -0,0 +1,2 @@
 
 
1
+ .choices{position:relative;margin-bottom:24px;font-size:16px}.choices:focus{outline:none}.choices:last-child{margin-bottom:0}.choices.is-disabled .choices__inner,.choices.is-disabled .choices__input{background-color:#EAEAEA;cursor:not-allowed;user-select:none}.choices.is-disabled .choices__item{cursor:not-allowed}.choices[data-type*="select-one"]{cursor:pointer}.choices[data-type*="select-one"] .choices__inner{padding-bottom:3.0px}.choices[data-type*="select-one"] .choices__input{display:block;width:100% !important;padding:10px !important;border-bottom:1px solid #ddd !important;background-color:#FFFFFF;margin:0 !important}.choices[data-type*="select-one"] .choices__button{background-image:url("../images/cross-inverse.svg");padding:0;background-size:8px;height:100%;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:.5}.choices[data-type*="select-one"] .choices__button:hover,.choices[data-type*="select-one"] .choices__button:focus{opacity:1}.choices[data-type*="select-one"] .choices__button:focus{box-shadow:0px 0px 0px 2px #0e6cad}.choices[data-type*="select-one"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-one"].is-open:after{border-color:transparent transparent #333 transparent;margin-top:-7.5px}.choices[data-type*="select-one"][dir="rtl"]:after{left:11.5px;right:auto}.choices[data-type*="select-one"][dir="rtl"] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0}.choices[data-type*="select-multiple"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:18px;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-multiple"].is-open:after{border-color:transparent transparent #333 transparent;margin-top:-7.5px}.choices[data-type*="select-multiple"] .choices__inner,.choices[data-type*="text"] .choices__inner{cursor:text}.choices[data-type*="select-multiple"] .choices__button,.choices[data-type*="text"] .choices__button{position:relative;display:inline-block;margin-top:0;margin-right:-4px;margin-bottom:0;margin-left:8px;padding-left:16px;border-left:1px solid #0a4f7e;background-image:url("../images/cross.svg");background-size:8px;width:8px;line-height:1;opacity:.75}.choices[data-type*="select-multiple"] .choices__button:hover,.choices[data-type*="select-multiple"] .choices__button:focus,.choices[data-type*="text"] .choices__button:hover,.choices[data-type*="text"] .choices__button:focus{opacity:1}.choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#fff;padding:4px 7.5px 1px;border:1px solid #ddd;border-radius:3px;font-size:14px;min-height:35px;overflow:hidden}.is-focused .choices__inner,.is-open .choices__inner{border-color:#b7b7b7}.is-open .choices__inner{border-radius:3px 3px 0 0}.is-flipped.is-open .choices__inner{border-radius:0 0 3px 3px}.choices__list{margin:0;padding-left:0;list-style:none}.choices__list--single{display:inline-block;padding:4px 16px 4px 4px;width:100%}[dir="rtl"] .choices__list--single{padding-right:4px;padding-left:16px}.choices__list--single .choices__item{width:100%}.choices__list--multiple{display:inline}.choices__list--multiple .choices__item{display:inline-block;vertical-align:middle;border-radius:3px;padding:3px 10px;font-size:12px;font-weight:500;margin-right:4px;margin-top:0px;margin-bottom:3px;background-color:#0e6cad;border:1px solid #0c5d95;color:#FFFFFF;word-break:break-all}.choices__list--multiple .choices__item[data-deletable]{padding-right:5px}[dir="rtl"] .choices__list--multiple .choices__item{margin-right:0;margin-left:3.75px}.choices__list--multiple .choices__item.is-highlighted{background-color:#0c5d95;border:1px solid #0a4f7e}.is-disabled .choices__list--multiple .choices__item{background-color:#aaa;border:1px solid #919191}.choices__list--dropdown{display:none;z-index:1;position:absolute;width:100%;background-color:#fff;border:1px solid #ddd;top:100%;margin-top:-1px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow:hidden;word-break:break-all}.choices__list--dropdown.is-active{display:block}.is-open .choices__list--dropdown{border-color:#b7b7b7}.is-flipped .choices__list--dropdown{top:auto;bottom:100%;margin-top:0;margin-bottom:-1px;border-radius:.25rem .25rem 0 0}.choices__list--dropdown .choices__list{position:relative;max-height:300px;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position}.choices__list--dropdown .choices__item{position:relative;padding:10px;font-size:14px}[dir="rtl"] .choices__list--dropdown .choices__item{text-align:right}@media (min-width: 640px){.choices__list--dropdown .choices__item--selectable{padding-right:100px}.choices__list--dropdown .choices__item--selectable:after{content:attr(data-select-text);font-size:12px;opacity:0;position:absolute;right:10px;top:50%;transform:translateY(-50%)}[dir="rtl"] .choices__list--dropdown .choices__item--selectable{text-align:right;padding-left:100px;padding-right:10px}[dir="rtl"] .choices__list--dropdown .choices__item--selectable:after{right:auto;left:10px}}.choices__list--dropdown .choices__item--selectable.is-highlighted{background-color:#f2f2f2}.choices__list--dropdown .choices__item--selectable.is-highlighted:after{opacity:.5}.choices__item{cursor:default}.choices__item--selectable{cursor:pointer}.choices__item--disabled{cursor:not-allowed;user-select:none;opacity:.5}.choices__heading{font-weight:600;font-size:12px;padding:10px;border-bottom:1px solid #f7f7f7;color:gray}.choices__button{text-indent:-9999px;-webkit-appearance:none;appearance:none;border:0;background-color:transparent;background-repeat:no-repeat;background-position:center;cursor:pointer}.choices__button:focus{outline:none}.choices__input{display:inline-block;vertical-align:baseline !important;background-color:#f9f9f9;font-size:14px;margin:0 !important;border:0 !important;border-radius:0 !important;max-width:100%;min-height:0 !important;width:auto !important;padding:4px 0 4px 2px !important}.choices__input:focus{outline:0}[dir="rtl"] .choices__input{padding-right:2px;padding-left:0}.choices__placeholder{opacity:.5}.wpforms-admin-page .wpforms-btn{border:0;border-radius:3px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;box-shadow:none}.wpforms-admin-page .wpforms-btn-block{display:block}.wpforms-admin-page .wpforms-btn-md{font-size:13px;font-weight:600;padding:8px 12px;min-height:35px}.wpforms-admin-page .wpforms-btn-lg{font-size:16px;font-weight:600;padding:16px 28px}.wpforms-admin-page .wpforms-btn-orange{background-color:#e27730;border-color:#e27730;color:#fff}.wpforms-admin-page .wpforms-btn-orange:hover{background-color:#b85a1b;border-color:#b85a1b}.wpforms-admin-page .wpforms-btn-grey{background-color:#eee;border-color:#ccc;color:#666}.wpforms-admin-page .wpforms-btn-grey:hover{background-color:#d7d7d7;border-color:#ccc;color:#444}.wpforms-admin-page .wpforms-btn-light-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wpforms-admin-page .wpforms-btn-light-grey:hover{background-color:#eee;color:#444}.wpforms-admin-page .wpforms-btn-trans-green{background-color:none;color:#2a9b39}.wpforms-admin-page .wpforms-btn-trans-green:hover{background-color:#2a9b39;color:#fff}.wpforms-admin-page .wpforms-btn-trans-green .underline{position:relative}.wpforms-admin-page .wpforms-btn-trans-green .underline:after{content:" ";border-bottom:1px dashed #2a9b39;position:absolute;bottom:-5px;left:0;width:100%}.wpforms-admin-page .wpforms-btn-trans-green .dashicons{height:18px}body div.jconfirm div.jconfirm-box-container div.jconfirm-box{border-radius:0;box-shadow:0 2px 6px rgba(0,0,0,0.2)}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane{margin-bottom:20px}body div.jconfirm div.jconfirm-box div.jconfirm-content{font-size:16px;color:#555;line-height:1.5}body div.jconfirm div.jconfirm-box input[type=text]{display:block;width:99%;border:1px solid #d6d6d6;padding:10px;box-shadow:none;margin:20px auto 0 auto}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode{margin:20px 0;text-align:center;font-size:24px;padding:8px 5px}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode:disabled{color:#333}body div.jconfirm div.jconfirm-box button.btn-confirm{background-color:#83c11f;color:#fff;outline:none}body div.jconfirm div.jconfirm-box button.btn-confirm:hover{background-color:#75ac1c}body div.jconfirm div.jconfirm-box .error{display:none;color:red}body div.jconfirm div.jconfirm-box .jconfirm-title-c .jconfirm-icon-c{-webkit-transition:none !important;transition:none !important;-webkit-transform:none !important;-ms-transform:none !important;transform:none !important;font-size:45px !important}.wpforms-flag{width:16px;height:16px;background:url(../../images/flags.png) no-repeat;display:inline-block}.wpforms-flag.wpforms-flag-ad{background-position:-16px 0}.wpforms-flag.wpforms-flag-ae{background-position:-32px 0}.wpforms-flag.wpforms-flag-af{background-position:-48px 0}.wpforms-flag.wpforms-flag-ag{background-position:-64px 0}.wpforms-flag.wpforms-flag-ai{background-position:-80px 0}.wpforms-flag.wpforms-flag-al{background-position:-96px 0}.wpforms-flag.wpforms-flag-am{background-position:-112px 0}.wpforms-flag.wpforms-flag-an{background-position:-128px 0}.wpforms-flag.wpforms-flag-ao{background-position:-144px 0}.wpforms-flag.wpforms-flag-ar{background-position:-160px 0}.wpforms-flag.wpforms-flag-as{background-position:-176px 0}.wpforms-flag.wpforms-flag-at{background-position:-192px 0}.wpforms-flag.wpforms-flag-au{background-position:-208px 0}.wpforms-flag.wpforms-flag-aw{background-position:-224px 0}.wpforms-flag.wpforms-flag-az{background-position:0 -16px}.wpforms-flag.wpforms-flag-ba{background-position:-16px -16px}.wpforms-flag.wpforms-flag-bb{background-position:-32px -16px}.wpforms-flag.wpforms-flag-bd{background-position:-48px -16px}.wpforms-flag.wpforms-flag-be{background-position:-64px -16px}.wpforms-flag.wpforms-flag-bf{background-position:-80px -16px}.wpforms-flag.wpforms-flag-bg{background-position:-96px -16px}.wpforms-flag.wpforms-flag-bh{background-position:-112px -16px}.wpforms-flag.wpforms-flag-bi{background-position:-128px -16px}.wpforms-flag.wpforms-flag-bj{background-position:-144px -16px}.wpforms-flag.wpforms-flag-bm{background-position:-160px -16px}.wpforms-flag.wpforms-flag-bn{background-position:-176px -16px}.wpforms-flag.wpforms-flag-bo{background-position:-192px -16px}.wpforms-flag.wpforms-flag-br{background-position:-208px -16px}.wpforms-flag.wpforms-flag-bs{background-position:-224px -16px}.wpforms-flag.wpforms-flag-bt{background-position:0 -32px}.wpforms-flag.wpforms-flag-bw{background-position:-16px -32px}.wpforms-flag.wpforms-flag-by{background-position:-32px -32px}.wpforms-flag.wpforms-flag-bz{background-position:-48px -32px}.wpforms-flag.wpforms-flag-ca{background-position:-64px -32px}.wpforms-flag.wpforms-flag-cd{background-position:-80px -32px}.wpforms-flag.wpforms-flag-cf{background-position:-96px -32px}.wpforms-flag.wpforms-flag-cg{background-position:-112px -32px}.wpforms-flag.wpforms-flag-ch{background-position:-128px -32px}.wpforms-flag.wpforms-flag-ci{background-position:-144px -32px}.wpforms-flag.wpforms-flag-ck{background-position:-160px -32px}.wpforms-flag.wpforms-flag-cl{background-position:-176px -32px}.wpforms-flag.wpforms-flag-cm{background-position:-192px -32px}.wpforms-flag.wpforms-flag-cn{background-position:-208px -32px}.wpforms-flag.wpforms-flag-co{background-position:-224px -32px}.wpforms-flag.wpforms-flag-cr{background-position:0 -48px}.wpforms-flag.wpforms-flag-cu{background-position:-16px -48px}.wpforms-flag.wpforms-flag-cv{background-position:-32px -48px}.wpforms-flag.wpforms-flag-cy{background-position:-48px -48px}.wpforms-flag.wpforms-flag-cz{background-position:-64px -48px}.wpforms-flag.wpforms-flag-de{background-position:-80px -48px}.wpforms-flag.wpforms-flag-dj{background-position:-96px -48px}.wpforms-flag.wpforms-flag-dk{background-position:-112px -48px}.wpforms-flag.wpforms-flag-dm{background-position:-128px -48px}.wpforms-flag.wpforms-flag-do{background-position:-144px -48px}.wpforms-flag.wpforms-flag-dz{background-position:-160px -48px}.wpforms-flag.wpforms-flag-ec{background-position:-176px -48px}.wpforms-flag.wpforms-flag-ee{background-position:-192px -48px}.wpforms-flag.wpforms-flag-eg{background-position:-208px -48px}.wpforms-flag.wpforms-flag-eh{background-position:-224px -48px}.wpforms-flag.wpforms-flag-er{background-position:0 -64px}.wpforms-flag.wpforms-flag-es{background-position:-16px -64px}.wpforms-flag.wpforms-flag-et{background-position:-32px -64px}.wpforms-flag.wpforms-flag-fi{background-position:-48px -64px}.wpforms-flag.wpforms-flag-fj{background-position:-64px -64px}.wpforms-flag.wpforms-flag-fm{background-position:-80px -64px}.wpforms-flag.wpforms-flag-fo{background-position:-96px -64px}.wpforms-flag.wpforms-flag-fr{background-position:-112px -64px}.wpforms-flag.wpforms-flag-ga{background-position:-128px -64px}.wpforms-flag.wpforms-flag-gb{background-position:-144px -64px}.wpforms-flag.wpforms-flag-gd{background-position:-160px -64px}.wpforms-flag.wpforms-flag-ge{background-position:-176px -64px}.wpforms-flag.wpforms-flag-gg{background-position:-192px -64px}.wpforms-flag.wpforms-flag-gh{background-position:-208px -64px}.wpforms-flag.wpforms-flag-gi{background-position:-224px -64px}.wpforms-flag.wpforms-flag-gl{background-position:0 -80px}.wpforms-flag.wpforms-flag-gm{background-position:-16px -80px}.wpforms-flag.wpforms-flag-gn{background-position:-32px -80px}.wpforms-flag.wpforms-flag-gp{background-position:-48px -80px}.wpforms-flag.wpforms-flag-gq{background-position:-64px -80px}.wpforms-flag.wpforms-flag-gr{background-position:-80px -80px}.wpforms-flag.wpforms-flag-gt{background-position:-96px -80px}.wpforms-flag.wpforms-flag-gu{background-position:-112px -80px}.wpforms-flag.wpforms-flag-gw{background-position:-128px -80px}.wpforms-flag.wpforms-flag-gy{background-position:-144px -80px}.wpforms-flag.wpforms-flag-hk{background-position:-160px -80px}.wpforms-flag.wpforms-flag-hn{background-position:-176px -80px}.wpforms-flag.wpforms-flag-hr{background-position:-192px -80px}.wpforms-flag.wpforms-flag-ht{background-position:-208px -80px}.wpforms-flag.wpforms-flag-hu{background-position:-224px -80px}.wpforms-flag.wpforms-flag-id{background-position:0 -96px}.wpforms-flag.wpforms-flag-ie{background-position:-16px -96px}.wpforms-flag.wpforms-flag-il{background-position:-32px -96px}.wpforms-flag.wpforms-flag-im{background-position:-48px -96px}.wpforms-flag.wpforms-flag-in{background-position:-64px -96px}.wpforms-flag.wpforms-flag-iq{background-position:-80px -96px}.wpforms-flag.wpforms-flag-ir{background-position:-96px -96px}.wpforms-flag.wpforms-flag-is{background-position:-112px -96px}.wpforms-flag.wpforms-flag-it{background-position:-128px -96px}.wpforms-flag.wpforms-flag-je{background-position:-144px -96px}.wpforms-flag.wpforms-flag-jm{background-position:-160px -96px}.wpforms-flag.wpforms-flag-jo{background-position:-176px -96px}.wpforms-flag.wpforms-flag-jp{background-position:-192px -96px}.wpforms-flag.wpforms-flag-ke{background-position:-208px -96px}.wpforms-flag.wpforms-flag-kg{background-position:-224px -96px}.wpforms-flag.wpforms-flag-kh{background-position:0 -112px}.wpforms-flag.wpforms-flag-ki{background-position:-16px -112px}.wpforms-flag.wpforms-flag-km{background-position:-32px -112px}.wpforms-flag.wpforms-flag-kn{background-position:-48px -112px}.wpforms-flag.wpforms-flag-kp{background-position:-64px -112px}.wpforms-flag.wpforms-flag-kr{background-position:-80px -112px}.wpforms-flag.wpforms-flag-kw{background-position:-96px -112px}.wpforms-flag.wpforms-flag-ky{background-position:-112px -112px}.wpforms-flag.wpforms-flag-kz{background-position:-128px -112px}.wpforms-flag.wpforms-flag-la{background-position:-144px -112px}.wpforms-flag.wpforms-flag-lb{background-position:-160px -112px}.wpforms-flag.wpforms-flag-lc{background-position:-176px -112px}.wpforms-flag.wpforms-flag-li{background-position:-192px -112px}.wpforms-flag.wpforms-flag-lk{background-position:-208px -112px}.wpforms-flag.wpforms-flag-lr{background-position:-224px -112px}.wpforms-flag.wpforms-flag-ls{background-position:0 -128px}.wpforms-flag.wpforms-flag-lt{background-position:-16px -128px}.wpforms-flag.wpforms-flag-lu{background-position:-32px -128px}.wpforms-flag.wpforms-flag-lv{background-position:-48px -128px}.wpforms-flag.wpforms-flag-ly{background-position:-64px -128px}.wpforms-flag.wpforms-flag-ma{background-position:-80px -128px}.wpforms-flag.wpforms-flag-mc{background-position:-96px -128px}.wpforms-flag.wpforms-flag-md{background-position:-112px -128px}.wpforms-flag.wpforms-flag-me{background-position:-128px -128px}.wpforms-flag.wpforms-flag-mg{background-position:-144px -128px}.wpforms-flag.wpforms-flag-mh{background-position:-160px -128px}.wpforms-flag.wpforms-flag-mk{background-position:-176px -128px}.wpforms-flag.wpforms-flag-ml{background-position:-192px -128px}.wpforms-flag.wpforms-flag-mm{background-position:-208px -128px}.wpforms-flag.wpforms-flag-mn{background-position:-224px -128px}.wpforms-flag.wpforms-flag-mo{background-position:0 -144px}.wpforms-flag.wpforms-flag-mq{background-position:-16px -144px}.wpforms-flag.wpforms-flag-mr{background-position:-32px -144px}.wpforms-flag.wpforms-flag-ms{background-position:-48px -144px}.wpforms-flag.wpforms-flag-mt{background-position:-64px -144px}.wpforms-flag.wpforms-flag-mu{background-position:-80px -144px}.wpforms-flag.wpforms-flag-mv{background-position:-96px -144px}.wpforms-flag.wpforms-flag-mw{background-position:-112px -144px}.wpforms-flag.wpforms-flag-mx{background-position:-128px -144px}.wpforms-flag.wpforms-flag-my{background-position:-144px -144px}.wpforms-flag.wpforms-flag-mz{background-position:-160px -144px}.wpforms-flag.wpforms-flag-na{background-position:-176px -144px}.wpforms-flag.wpforms-flag-nc{background-position:-192px -144px}.wpforms-flag.wpforms-flag-ne{background-position:-208px -144px}.wpforms-flag.wpforms-flag-ng{background-position:-224px -144px}.wpforms-flag.wpforms-flag-ni{background-position:0 -160px}.wpforms-flag.wpforms-flag-nl{background-position:-16px -160px}.wpforms-flag.wpforms-flag-no{background-position:-32px -160px}.wpforms-flag.wpforms-flag-np{background-position:-48px -160px}.wpforms-flag.wpforms-flag-nr{background-position:-64px -160px}.wpforms-flag.wpforms-flag-nz{background-position:-80px -160px}.wpforms-flag.wpforms-flag-om{background-position:-96px -160px}.wpforms-flag.wpforms-flag-pa{background-position:-112px -160px}.wpforms-flag.wpforms-flag-pe{background-position:-128px -160px}.wpforms-flag.wpforms-flag-pf{background-position:-144px -160px}.wpforms-flag.wpforms-flag-pg{background-position:-160px -160px}.wpforms-flag.wpforms-flag-ph{background-position:-176px -160px}.wpforms-flag.wpforms-flag-pk{background-position:-192px -160px}.wpforms-flag.wpforms-flag-pl{background-position:-208px -160px}.wpforms-flag.wpforms-flag-pr{background-position:-224px -160px}.wpforms-flag.wpforms-flag-ps{background-position:0 -176px}.wpforms-flag.wpforms-flag-pt{background-position:-16px -176px}.wpforms-flag.wpforms-flag-pw{background-position:-32px -176px}.wpforms-flag.wpforms-flag-py{background-position:-48px -176px}.wpforms-flag.wpforms-flag-qa{background-position:-64px -176px}.wpforms-flag.wpforms-flag-re{background-position:-80px -176px}.wpforms-flag.wpforms-flag-ro{background-position:-96px -176px}.wpforms-flag.wpforms-flag-rs{background-position:-112px -176px}.wpforms-flag.wpforms-flag-ru{background-position:-128px -176px}.wpforms-flag.wpforms-flag-rw{background-position:-144px -176px}.wpforms-flag.wpforms-flag-sa{background-position:-160px -176px}.wpforms-flag.wpforms-flag-sb{background-position:-176px -176px}.wpforms-flag.wpforms-flag-sc{background-position:-192px -176px}.wpforms-flag.wpforms-flag-sd{background-position:-208px -176px}.wpforms-flag.wpforms-flag-se{background-position:-224px -176px}.wpforms-flag.wpforms-flag-sg{background-position:0 -192px}.wpforms-flag.wpforms-flag-si{background-position:-16px -192px}.wpforms-flag.wpforms-flag-sk{background-position:-32px -192px}.wpforms-flag.wpforms-flag-sl{background-position:-48px -192px}.wpforms-flag.wpforms-flag-sm{background-position:-64px -192px}.wpforms-flag.wpforms-flag-sn{background-position:-80px -192px}.wpforms-flag.wpforms-flag-so{background-position:-96px -192px}.wpforms-flag.wpforms-flag-sr{background-position:-112px -192px}.wpforms-flag.wpforms-flag-st{background-position:-128px -192px}.wpforms-flag.wpforms-flag-sv{background-position:-144px -192px}.wpforms-flag.wpforms-flag-sy{background-position:-160px -192px}.wpforms-flag.wpforms-flag-sz{background-position:-176px -192px}.wpforms-flag.wpforms-flag-tc{background-position:-192px -192px}.wpforms-flag.wpforms-flag-td{background-position:-208px -192px}.wpforms-flag.wpforms-flag-tg{background-position:-224px -192px}.wpforms-flag.wpforms-flag-th{background-position:0 -208px}.wpforms-flag.wpforms-flag-tj{background-position:-16px -208px}.wpforms-flag.wpforms-flag-tl{background-position:-32px -208px}.wpforms-flag.wpforms-flag-tm{background-position:-48px -208px}.wpforms-flag.wpforms-flag-tn{background-position:-64px -208px}.wpforms-flag.wpforms-flag-to{background-position:-80px -208px}.wpforms-flag.wpforms-flag-tr{background-position:-96px -208px}.wpforms-flag.wpforms-flag-tt{background-position:-112px -208px}.wpforms-flag.wpforms-flag-tv{background-position:-128px -208px}.wpforms-flag.wpforms-flag-tw{background-position:-144px -208px}.wpforms-flag.wpforms-flag-tz{background-position:-160px -208px}.wpforms-flag.wpforms-flag-ua{background-position:-176px -208px}.wpforms-flag.wpforms-flag-ug{background-position:-192px -208px}.wpforms-flag.wpforms-flag-us{background-position:-208px -208px}.wpforms-flag.wpforms-flag-uy{background-position:-224px -208px}.wpforms-flag.wpforms-flag-uz{background-position:0 -224px}.wpforms-flag.wpforms-flag-va{background-position:-16px -224px}.wpforms-flag.wpforms-flag-vc{background-position:-32px -224px}.wpforms-flag.wpforms-flag-ve{background-position:-48px -224px}.wpforms-flag.wpforms-flag-vg{background-position:-64px -224px}.wpforms-flag.wpforms-flag-vi{background-position:-80px -224px}.wpforms-flag.wpforms-flag-vn{background-position:-96px -224px}.wpforms-flag.wpforms-flag-vu{background-position:-112px -224px}.wpforms-flag.wpforms-flag-ws{background-position:-128px -224px}.wpforms-flag.wpforms-flag-ye{background-position:-144px -224px}.wpforms-flag.wpforms-flag-za{background-position:-160px -224px}.wpforms-flag.wpforms-flag-zm{background-position:-176px -224px}.wpforms-flag.wpforms-flag-zw{background-position:-192px -224px}#wpforms-header-temp{position:relative;margin:0;position:absolute;top:-1px;left:20px;right:20px;z-index:99}#wpforms-header{border-top:3px solid #e27730;padding:22px 20px}#wpforms-header img{display:block;margin:0;max-width:235px}@media (max-width: 782px){#wpforms-header img{max-width:200px}}.wpforms-admin-wrap .page-title{background-color:#fff;margin:0 0 20px 0;padding:15px 20px}.wpforms-admin-wrap .page-title .add-new-h2{margin-left:28px}.wpforms-admin-tabs{background-color:#fff;margin:0 0 20px 0;padding:0 20px;list-style:none;overflow:auto;font-size:14px}.wpforms-admin-tabs li{margin:0 30px 0 0;padding:0;float:left}.wpforms-admin-tabs li:last-of-type{margin:0}.wpforms-admin-tabs li a{color:#666;display:block;padding:20px 0 18px 0;text-decoration:none;border-bottom:2px solid #fff;box-shadow:none}.wpforms-admin-tabs li a:hover{border-color:#999}.wpforms-admin-tabs li a.active{border-color:#e27730}#wpcontent{padding-left:0 !important;position:relative}@media (max-width: 600px){#wpcontent{padding-top:46px}}@media (max-width: 600px){#wpbody{padding-top:0}}.wpforms-admin-page #screen-meta-links,.wpforms-admin-page #screen-meta{display:none}.wpforms-admin-page .video-container{position:relative;padding-bottom:56.1%;height:0;overflow:hidden}.wpforms-admin-page .video-container iframe,.wpforms-admin-page .video-container object,.wpforms-admin-page .video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.wpforms-admin-page .wpforms-file-upload input[type=file]{width:0.1px;height:0.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.wpforms-admin-page .wpforms-file-upload label{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:inline-block;overflow:hidden;padding:0}.wpforms-admin-page .wpforms-file-upload input[type=file]:focus+label,.wpforms-admin-page .wpforms-file-upload input[type=file].has-focus+label{outline:1px dotted #000;outline:-webkit-focus-ring-color auto 5px}.wpforms-admin-page .wpforms-file-upload .fld{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}.wpforms-admin-page .wpforms-file-upload .fld .placeholder{color:#ccc}.wpforms-admin-page .wpforms-file-upload strong .fa{margin-right:8px}.wpforms-admin-page .wpforms-hide{display:none}.wpforms-admin-page .wpforms-h1-placeholder{display:none}.wpforms-admin-page .notice{display:none}.wpforms-admin-wrap{margin:0}.wpforms-admin-wrap .notice{margin-left:20px !important;margin-right:20px !important}.wpforms-admin-content{padding-left:20px;padding-right:20px}.wpforms-admin-content:before{content:" ";display:table}.wpforms-admin-content:after{clear:both;content:" ";display:table}.wpforms-clear:before{content:" ";display:table}.wpforms-clear:after{clear:both;content:" ";display:table}#wpforms-overview .tablenav.top{margin-top:0}#wpforms-overview .wp-list-table .column-id{width:30px}#wpforms-overview .wp-list-table .column-entries{width:70px}#wpforms-overview .wp-list-table .column-shortcode{width:150px}#wpforms-overview .wp-list-table .column-created{width:145px}#wpforms-entries-single #poststuff{padding:0}#wpforms-entries-single .postbox .hndle{cursor:default !important}#wpforms-entries-single .wpforms-entry-navigation{font-size:13px;line-height:29px;float:right;position:relative;padding-top:2px}@media (max-width: 600px){#wpforms-entries-single .wpforms-entry-navigation{display:none}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{top:auto;margin:0;padding:4px 0px;text-align:center}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2 .dashicons{font-size:16px;height:auto;width:28px;line-height:29px}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2.inactive{opacity:0.5;pointer-events:none;cursor:default}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-navigation-text{display:inline-block;margin-right:10px}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-current{top:auto;margin:0;text-align:center;padding:4px 10px;position:relative;text-decoration:none;border:1px solid #ccc;-webkit-border-radius:2px;border-radius:2px;background:#fff;font-size:13px;line-height:29px;text-transform:center}#wpforms-entries-single #wpforms-entry-fields h2.hndle{font-size:18px}#wpforms-entries-single #wpforms-entry-fields h2.hndle .dashicons{font-size:16px;height:16px;width:16px;margin:4px 4px 0 0;color:#e27730}#wpforms-entries-single #wpforms-entry-fields .no-fields{padding:12px;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside p{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-name{font-weight:600;background:#ebf3fb;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-value{background:#fff;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .empty .wpforms-entry-field-value{font-style:italic;color:#999}#wpforms-entries-single #wpforms-entry-fields .wpforms-empty-field-toggle{float:right;text-decoration:none;padding:5px 0 0}#wpforms-entries-single #wpforms-entry-notes .inside{margin:0;padding:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-new{padding:10px}#wpforms-entries-single #wpforms-entry-notes form{display:none}#wpforms-entries-single #wpforms-entry-notes .btns{overflow:auto;padding:8px 0}#wpforms-entries-single #wpforms-entry-notes .no-notes{margin:0;padding:4px 10px 8px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single{padding:10px;border-top:1px solid #e3e1e3}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single p:last-of-type{margin-bottom:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single.even{background-color:#f9f9f9}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline{color:#888;margin-bottom:10px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .sep{color:#ddd}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .notes-user{text-decoration:none;font-weight:600}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete{color:#a00;text-decoration:none}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete:hover{color:red;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .inside,#wpforms-entries-single #wpforms-entry-payment .inside,#wpforms-entries-single #wpforms-entry-actions .inside{margin:0;padding:0}#wpforms-entries-single .wpforms-entry-details-meta,#wpforms-entries-single .wpforms-entry-actions-meta{padding:6px 0 0}#wpforms-entries-single .wpforms-entry-details-meta p,#wpforms-entries-single .wpforms-entry-payment-meta p,#wpforms-entries-single .wpforms-entry-actions-meta p{padding:6px 10px 8px;margin:0}#wpforms-entries-single .wpforms-entry-payment-meta{padding:0}#wpforms-entries-single .wpforms-entry-payment-meta p{border-bottom:1px solid #eee;padding:10px}#wpforms-entries-single .wpforms-entry-payment-meta p:last-of-type{border-bottom:0}#wpforms-entries-single .wpforms-entry-details-meta strong,#wpforms-entries-single .wpforms-entry-actions-meta strong{font-weight:600}#wpforms-entries-single .wpforms-entry-details-meta .dashicons,#wpforms-entries-single .wpforms-entry-actions-meta .dashicons{padding:0 2px 0 0;color:#82878A;top:-1px;left:-1px;position:relative;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .submitdelete{color:#a00;text-decoration:none;padding:1px 2px}#wpforms-entries-single #wpforms-entry-details .submitdelete:hover{color:red}#wpforms-entries-single .wpforms-entry-actions-meta a{text-decoration:none}#wpforms-entries-single .wpforms-entry-actions-meta a:hover{text-decoration:underline}#wpforms-entries-single #wpforms-entry-geolocation .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul{margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul li{border-bottom:1px solid #eee;margin:0;overflow:auto}#wpforms-entries-single #wpforms-entry-geolocation ul li:last-of-type{border-bottom:0}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-meta{width:85px;float:left;border-right:1px solid #eee;padding:10px 20px 10px 12px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-value{display:inline-block;padding:10px 12px 10px 20px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-flag{vertical-align:text-top;margin-right:4px}#wpforms-entries-list .form-details{border-bottom:1px solid #ddd;padding-bottom:15px;margin:0 0 10px}#wpforms-entries-list .form-details .form-details-sub{color:#999;display:block;font-size:10px;text-transform:uppercase;margin:0 0 8px 0}#wpforms-entries-list .form-details .form-details-title{float:left;font-size:18px;font-weight:400;margin:0}@media (max-width: 1139px){#wpforms-entries-list .form-details .form-details-title{float:none;margin-bottom:10px}}#wpforms-entries-list .form-details .form-selector{display:inline-block;position:relative}#wpforms-entries-list .form-details .form-selector .toggle{border-radius:50%;color:#444;font-size:16px;box-shadow:none}#wpforms-entries-list .form-details .form-selector .toggle:hover,#wpforms-entries-list .form-details .form-selector .toggle.active{background-color:#e3e3e3;outline:none}#wpforms-entries-list .form-details .form-selector .toggle:before{vertical-align:middle}#wpforms-entries-list .form-details .form-selector .form-list{display:none;background:#fff;border-radius:3px;box-shadow:0 2px 8px 0 rgba(0,0,0,0.1);position:absolute;top:27px;left:-108px;width:230px;padding:10px 0}#wpforms-entries-list .form-details .form-selector .form-list:before{content:" ";position:absolute;top:-10px;left:110px;width:0;height:0;border-style:solid;border-width:0 8px 10px 8px;border-color:transparent transparent #fff transparent}#wpforms-entries-list .form-details .form-selector ul{max-height:196px;overflow-x:scroll;padding:0;margin:0}#wpforms-entries-list .form-details .form-selector ul li{list-style:none;margin:0;font-size:13px}#wpforms-entries-list .form-details .form-selector ul li a{display:block;text-decoration:none;padding:5px 15px;color:#444}#wpforms-entries-list .form-details .form-selector ul li a:hover{background-color:#f7f7f7}#wpforms-entries-list .form-details .form-details-actions{float:right}@media (max-width: 1139px){#wpforms-entries-list .form-details .form-details-actions{float:none}}#wpforms-entries-list .form-details .form-details-actions a{text-decoration:none;display:inline-block;margin:0 12px 0 0}#wpforms-entries-list .form-details .form-details-actions a:last-of-type{margin:0}#wpforms-entries-list .form-details .form-details-actions a .dashicons{width:16px;height:16px;font-size:16px}#wpforms-entries-list .wp-list-table .column-indicators{width:35px;text-align:center}#wpforms-entries-list .wp-list-table .column-indicators a:focus{-webkit-box-shadow:none;box-shadow:none}#wpforms-entries-list .wp-list-table .column-indicators .dashicons{width:14px;height:14px;font-size:14px;margin-top:3px}#wpforms-entries-list .wp-list-table .indicator-star .dashicons{margin-right:6px}#wpforms-entries-list .wp-list-table .indicator-star{color:#e4e4e4}#wpforms-entries-list .wp-list-table .indicator-star:hover,#wpforms-entries-list .wp-list-table .indicator-star.unstar{color:#e27730}#wpforms-entries-list .wp-list-table .indicator-read{color:#9ede84}#wpforms-entries-list .wp-list-table .indicator-read:hover,#wpforms-entries-list .wp-list-table .indicator-read.unread{color:#e4e4e4}#wpforms-entries-list .wp-list-table .column-date{width:150px}#wpforms-entries-list .wp-list-table .column-status{width:120px}#wpforms-entries-list .wp-list-table .column-status img{display:inline-block;height:12px;width:auto;margin:0 0 0 3px}#wpforms-entries-list .wp-list-table .column-payment_total{width:100px}#wpforms-entries-list .wp-list-table .column-actions{width:100px}#wpforms-entries-list .wp-list-table .sep{color:#ddd}#wpforms-entries-list .wp-list-table .delete:hover{color:red}#wpforms-welcome{border-top:3px solid #e27730;color:#555;padding-top:110px}@media (max-width: 767px){#wpforms-welcome{padding-top:64px}}#wpforms-welcome *,#wpforms-welcome *::before,#wpforms-welcome *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-welcome .container{margin:0 auto;max-width:720px;padding:0}#wpforms-welcome .block{padding:40px}@media (max-width: 767px){#wpforms-welcome .block{padding:20px}}#wpforms-welcome img{max-width:100%;height:auto}#wpforms-welcome h1{color:#222;font-size:24px;text-align:center;margin:0 0 16px 0}#wpforms-welcome h5{color:#222;font-size:16px;margin:0 0 8px 0}#wpforms-welcome h6{font-size:16px;font-weight:400;line-height:1.6;text-align:center;margin:0}#wpforms-welcome p{font-size:14px;margin:0 0 20px 0}#wpforms-welcome .button-wrap{max-width:590px;margin:0 auto 0 auto}#wpforms-welcome .button-wrap .left{float:left;width:50%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .left{float:none;width:100%;padding:0;margin-bottom:20px}}#wpforms-welcome .button-wrap .right{float:right;width:50%;padding-left:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .right{float:none;width:100%;padding:0}}#wpforms-welcome .intro{background-color:#fff;border:2px solid #e1e1e1;border-radius:2px;margin-bottom:30px;position:relative;padding-top:40px}#wpforms-welcome .intro .sullie{background-color:#fff;border:2px solid #e1e1e1;border-radius:50%;height:110px;width:110px;padding:18px 14px 0 14px;position:absolute;top:-58px;left:50%;margin-left:-55px}#wpforms-welcome .intro .video-thumbnail{display:block;margin:0 auto}#wpforms-welcome .intro .button-wrap{margin-top:25px}#wpforms-welcome .features{background-color:#fff;border:2px solid #e1e1e1;border-bottom:0;border-radius:2px 2px 0 0;position:relative;padding-top:20px;padding-bottom:20px}#wpforms-welcome .features .feature-list{margin-top:60px}#wpforms-welcome .features .feature-block{float:left;width:50%;padding-bottom:35px;overflow:auto}@media (max-width: 767px){#wpforms-welcome .features .feature-block{float:none;width:100%}}#wpforms-welcome .features .feature-block.first{padding-right:20px;clear:both}@media (max-width: 767px){#wpforms-welcome .features .feature-block.first{padding-right:0}}#wpforms-welcome .features .feature-block.last{padding-left:20px}@media (max-width: 767px){#wpforms-welcome .features .feature-block.last{padding-left:0}}#wpforms-welcome .features .feature-block img{float:left;max-width:46px}#wpforms-welcome .features .feature-block h5{margin-left:68px}#wpforms-welcome .features .feature-block p{margin:0;margin-left:68px}#wpforms-welcome .features .button-wrap{margin-top:25px;text-align:center}#wpforms-welcome .upgrade{background-color:#000;border:2px solid #e1e1e1;border-top:0;border-bottom:0;color:#fff}#wpforms-welcome .upgrade h2{color:#fff;font-size:20px;margin:0 0 30px 0}#wpforms-welcome .upgrade ul{display:-ms-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;font-size:15px;margin:0;padding:0}#wpforms-welcome .upgrade ul li{display:block;width:50%;margin:0 0 8px 0;padding:0}#wpforms-welcome .upgrade ul li .dashicons{color:#2a9b39;margin-right:5px}#wpforms-welcome .upgrade .left{float:left;width:66.666666%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .upgrade .left{float:none;width:100%;padding-right:0;margin-bottom:20px}}#wpforms-welcome .upgrade .right{float:right;width:33.333333%;padding-left:20px;text-align:center}@media (max-width: 767px){#wpforms-welcome .upgrade .right{float:none;width:100%;padding-left:0}}#wpforms-welcome .upgrade .right h2{text-align:center;margin:0}#wpforms-welcome .upgrade .right h2 span{display:inline-block;border-bottom:1px solid #555;padding:0 15px 12px}#wpforms-welcome .upgrade .right .price{padding:26px 0}#wpforms-welcome .upgrade .right .price .amount{font-size:48px;font-weight:600;position:relative;display:inline-block}#wpforms-welcome .upgrade .right .price .amount:before{content:'$';position:absolute;top:-8px;left:-16px;font-size:18px}#wpforms-welcome .upgrade .right .price .term{font-size:12px;display:inline-block}#wpforms-welcome .testimonials{background-color:#fff;border:2px solid #e1e1e1;border-top:0;padding:20px 0}#wpforms-welcome .testimonials .testimonial-block{margin:50px 0 0 0}#wpforms-welcome .testimonials .testimonial-block img{border-radius:50%;float:left;max-width:100px;box-shadow:0 0 18px rgba(0,0,0,0.2)}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block img{width:65px}}#wpforms-welcome .testimonials .testimonial-block p{font-size:14px;margin:0 0 12px 140px}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block p{margin-left:100px}}#wpforms-welcome .testimonials .testimonial-block p:last-of-type{margin-bottom:0}#wpforms-welcome .footer{background-color:#f1f1f1;border:2px solid #e1e1e1;border-top:0;border-radius:0 0 2px 2px}#wpforms-welcome.pro .features{border:2px solid #e1e1e1;margin-bottom:30px}#wpforms-welcome.pro .upgrade,#wpforms-welcome.pro .footer{display:none}#wpforms-welcome.pro .testimonials{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started .video-container{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started #wpfooter,.dashboard_page_wpforms-getting-started div.notice{display:none !important}#wpforms-admin-addons *,#wpforms-admin-addons *::before,#wpforms-admin-addons *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-addons .addons-container{margin-left:-20px;margin-right:-20px}#wpforms-admin-addons .unlock-msg{padding:0 20px;margin-top:-20px}#wpforms-admin-addons .addon-container{padding:0 20px;float:left;width:33.333333%}@media (max-width: 1249px){#wpforms-admin-addons .addon-container{width:50%}}@media (max-width: 767px){#wpforms-admin-addons .addon-container{width:100%}}#wpforms-admin-addons h4{font-size:17px;font-weight:700}#wpforms-admin-addons .addon-item{background-color:#fff;border:1px solid #ddd;border-radius:3px;margin:0 0 40px 0}@media (max-width: 767px){#wpforms-admin-addons .addon-item{margin:0 0}}#wpforms-admin-addons .addon-item img{border:1px solid #eee;float:left;max-width:75px}#wpforms-admin-addons .addon-item h5{margin:0 0 10px 100px;font-size:16px}#wpforms-admin-addons .addon-item p{margin:0 0 0 100px}#wpforms-admin-addons .addon-item .details{padding:30px 20px}#wpforms-admin-addons .addon-item .actions{background-color:#f7f7f7;border-top:1px solid #ddd;padding:20px;position:relative}#wpforms-admin-addons .addon-item .actions .msg{background-color:#f7f7f7;position:absolute;text-align:center;font-weight:600;top:0;left:0;height:100%;width:100%;z-index:99;padding:20px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-ms-align-items:center;align-items:center;justify-content:center}#wpforms-admin-addons .addon-item .actions .msg.success{color:#2a9b39}#wpforms-admin-addons .addon-item .actions .msg.error{color:red}#wpforms-admin-addons .addon-item .status{float:left;padding-top:8px}#wpforms-admin-addons .addon-item .status .status-inactive{color:red}#wpforms-admin-addons .addon-item .status .status-download{color:#666}#wpforms-admin-addons .addon-item .status .status-active{color:#2a9b39}#wpforms-admin-addons .addon-item .upgrade-button{text-align:center}#wpforms-admin-addons .addon-item .upgrade-button a{font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button{float:right}#wpforms-admin-addons .addon-item .action-button button{background:none;border:1px solid #ddd;border-radius:3px;box-shadow:none;cursor:pointer;font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button button:hover,#wpforms-admin-addons .addon-item .action-button button.loading{background-color:#e9e9e9}#wpforms-admin-addons .addon-item .action-button button .fa{margin-right:8px}#wpforms-admin-addons .addon-item .action-button button.status-active .fa{color:#2a9b39}#wpforms-admin-addons .addon-item .action-button button.status-active .fa{color:#2a9b39}#wpforms-admin-addons .addon-item .action-button button.status-inactive .fa{color:red}#wpforms-admin-addons .addon-item .action-button button.status-download .fa{color:#999}#wpforms-admin-addons .addon-item .action-button button.loading .fa{color:#666}.wpforms-admin-settings *,.wpforms-admin-settings *::before,.wpforms-admin-settings *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wpforms-admin-settings .wpforms-setting-row{border-bottom:1px solid #e4e4e4;padding:30px 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row:first-of-type{padding-top:10px !important}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-row{padding:20px 0}}.wpforms-admin-settings .wpforms-setting-row.section-heading{padding:20px 0}.wpforms-admin-settings .wpforms-setting-row.section-heading.no-desc h4{margin:0}.wpforms-admin-settings .wpforms-setting-row.section-heading .wpforms-setting-field{margin:0;max-width:1000px}.wpforms-admin-settings .wpforms-setting-row.tools p,.wpforms-admin-settings .wpforms-setting-row.tools p:first-of-type{margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox .desc{margin:0 0 0 30px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license p.type{margin-top:12px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-text .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-select .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field input[type=radio]{margin:-3px 10px 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field label{margin-right:30px;display:inline-block}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field label:before{content:" ";display:block;width:155px;height:180px;margin:0 0 10px 0}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-default:before{background:url(../images/settings-email-html.png) center center}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-none:before{background:url(../images/settings-email-plaintext.png) center center}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-image .wpforms-setting-field img{display:block;margin:0 0 20px 0;max-width:400px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .wpforms-color-picker{padding-left:40px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .minicolors-input-swatch{top:7px;left:7px;height:21px;width:21px;border-radius:2px}.wpforms-admin-settings .wpforms-setting-row h4{font-size:20px;font-weight:700;margin:0 0 6px 0}.wpforms-admin-settings .wpforms-setting-row h3{font-size:24px;font-weight:600;margin:0 0 20px 0}.wpforms-admin-settings .wpforms-setting-row p{margin:12px 0 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row p:first-of-type{margin:8px 0 0}.wpforms-admin-settings .wpforms-setting-row p.desc{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=password]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=password]{width:300px}}.wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=password]:focus{border-color:#bbb}.wpforms-admin-settings .wpforms-setting-row button{margin-right:10px}.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{display:block;max-width:400px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{width:300px}}.wpforms-admin-settings .wpforms-setting-label{display:block;float:left;width:200px;padding:0}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-label{float:none;width:100%;padding-bottom:15px}}.wpforms-admin-settings .wpforms-setting-label label{display:block;font-weight:600}.wpforms-admin-settings .wpforms-setting-field{display:block;margin:0 0 0 200px;max-width:800px}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-field{margin:0}}.wpforms-admin-settings p.submit{margin:0;padding:25px 0}.wpforms-admin-settings .captcha-addon-notice{background-color:#fff;border:1px solid #e27730;border-radius:3px;padding:30px;max-width:1000px;margin:20px 0 0 0}.wpforms-admin-settings .captcha-addon-notice img{float:left;max-width:90px}.wpforms-admin-settings .captcha-addon-notice h5{margin:0 0 10px 120px;font-size:18px}.wpforms-admin-settings .captcha-addon-notice p{margin:0 0 0 120px;font-size:14px;line-height:1.3}.wpforms-admin-settings .info-area{display:block;width:100%;max-width:1000px;height:450px;font-family:Menlo,Monaco,monospace;font-size:12px;background:#fff;box-shadow:none;border:1px solid #ddd;white-space:pre;overflow:auto;padding:20px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider{border-bottom:1px solid #ddd;padding:30px 0}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider.focus-out{opacity:0.4}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-header{cursor:pointer;max-width:1000px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-logo{float:left;position:relative}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-logo .fa{position:absolute;top:50%;margin:-9px 0 0 0;left:10px;color:#666;font-size:18px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-logo img{border:1px solid #ddd;max-width:90px;display:block;margin:0 0 0 40px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-info{margin:0 0 0 160px;position:relative;padding:20px 0 0}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-info h3{margin:0 0 10px 0;font-size:20px;font-weight:600}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-info p{margin:0;font-size:14px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-info .connected-indicator{color:#83c11f;width:135px;border:1px solid #83c11f;border-radius:4px;padding:8px 14px;font-size:16px;position:absolute;top:28px;right:0;display:none}.wpforms-admin-settings #wpforms-settings-providers .connected .wpforms-settings-provider-info .connected-indicator{display:block}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts{margin:0 0 0 160px;display:none;max-width:840px}.wpforms-admin-settings #wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts{display:block}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-list ul{padding:0;margin:0}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li{border-bottom:1px solid #ddd;margin:0;padding:10px 0;font-size:14px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:first-of-type{border-top:1px solid #ddd}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:last-of-type{margin-bottom:16px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.label{float:left;width:50%}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.date{color:#999;float:left;width:35%}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.remove{float:right;width:15%;text-align:right}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-connect{display:none;padding:20px;background-color:#ebf3fb;border:1px solid #0e6cad}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:block;padding:7px 12px;margin:5px 0;width:400px;min-height:35px}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]:focus{border-color:#bbb}.wpforms-admin-settings #wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts-connect{display:block}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-connect .fa{display:none}.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts-connect p,.wpforms-admin-settings #wpforms-settings-providers .wpforms-settings-provider-accounts p{margin:0 0 15px 0;font-size:14px}
2
+
assets/css/jquery.minicolors.css CHANGED
@@ -1,327 +1,319 @@
1
  .minicolors {
2
- position: relative;
3
  }
4
 
5
  .minicolors-sprite {
6
- background-image: url(data:image/png;base64,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);
7
- }
8
-
9
- .minicolors-no-data-uris .minicolors-sprite {
10
- background-image: url(jquery.minicolors.png);
11
  }
12
 
13
  .minicolors-swatch {
14
- position: absolute;
15
- vertical-align: middle;
16
- background-position: -80px 0;
17
- border: solid 1px #ccc;
18
- cursor: text;
19
- padding: 0;
20
- margin: 0;
21
- display: inline-block;
22
  }
23
 
24
  .minicolors-swatch-color {
25
- position: absolute;
26
- top: 0;
27
- left: 0;
28
- right: 0;
29
- bottom: 0;
30
  }
31
 
32
  .minicolors input[type=hidden] + .minicolors-swatch {
33
- width: 28px;
34
- position: static;
35
- cursor: pointer;
36
  }
37
 
38
  .minicolors input[type=hidden][disabled] + .minicolors-swatch {
39
- cursor: default;
40
  }
41
 
42
  /* Panel */
43
  .minicolors-panel {
44
- position: absolute;
45
- width: 173px;
46
- height: 152px;
47
- background: white;
48
- border: solid 1px #CCC;
49
- box-shadow: 0 0 20px rgba(0, 0, 0, .2);
50
- z-index: 99999;
51
- box-sizing: content-box;
52
- display: none;
53
- }
54
-
55
- .minicolors-panel.minicolors-with-swatches {
56
- height: 182px;
57
  }
58
 
59
  .minicolors-panel.minicolors-visible {
60
- display: block;
61
  }
62
 
63
  /* Panel positioning */
64
  .minicolors-position-top .minicolors-panel {
65
- top: -154px;
66
  }
67
 
68
  .minicolors-position-right .minicolors-panel {
69
- right: 0;
70
  }
71
 
72
  .minicolors-position-bottom .minicolors-panel {
73
- top: auto;
74
  }
75
 
76
  .minicolors-position-left .minicolors-panel {
77
- left: 0;
78
  }
79
 
80
  .minicolors-with-opacity .minicolors-panel {
81
- width: 194px;
82
  }
83
 
84
  .minicolors .minicolors-grid {
85
- position: absolute;
86
- top: 1px;
87
- left: 1px;
88
- width: 150px;
89
- height: 150px;
90
- background-position: -120px 0;
91
- cursor: crosshair;
92
  }
93
 
94
  .minicolors .minicolors-grid-inner {
95
- position: absolute;
96
- top: 0;
97
- left: 0;
98
- width: 150px;
99
- height: 150px;
100
  }
101
 
102
  .minicolors-slider-saturation .minicolors-grid {
103
- background-position: -420px 0;
104
  }
105
 
106
  .minicolors-slider-saturation .minicolors-grid-inner {
107
- background-position: -270px 0;
108
- background-image: inherit;
109
  }
110
 
111
  .minicolors-slider-brightness .minicolors-grid {
112
- background-position: -570px 0;
113
  }
114
 
115
  .minicolors-slider-brightness .minicolors-grid-inner {
116
- background-color: black;
117
  }
118
 
119
  .minicolors-slider-wheel .minicolors-grid {
120
- background-position: -720px 0;
121
  }
122
 
123
  .minicolors-slider,
124
  .minicolors-opacity-slider {
125
- position: absolute;
126
- top: 1px;
127
- left: 152px;
128
- width: 20px;
129
- height: 150px;
130
- background-color: white;
131
- background-position: 0 0;
132
- cursor: row-resize;
133
  }
134
 
135
  .minicolors-slider-saturation .minicolors-slider {
136
- background-position: -60px 0;
137
  }
138
 
139
  .minicolors-slider-brightness .minicolors-slider {
140
- background-position: -20px 0;
141
  }
142
 
143
  .minicolors-slider-wheel .minicolors-slider {
144
- background-position: -20px 0;
145
  }
146
 
147
  .minicolors-opacity-slider {
148
- left: 173px;
149
- background-position: -40px 0;
150
- display: none;
151
  }
152
 
153
  .minicolors-with-opacity .minicolors-opacity-slider {
154
- display: block;
155
  }
156
 
157
  /* Pickers */
158
  .minicolors-grid .minicolors-picker {
159
- position: absolute;
160
- top: 70px;
161
- left: 70px;
162
- width: 12px;
163
- height: 12px;
164
- border: solid 1px black;
165
- border-radius: 10px;
166
- margin-top: -6px;
167
- margin-left: -6px;
168
- background: none;
169
  }
170
 
171
  .minicolors-grid .minicolors-picker > div {
172
- position: absolute;
173
- top: 0;
174
- left: 0;
175
- width: 8px;
176
- height: 8px;
177
- border-radius: 8px;
178
- border: solid 2px white;
179
- box-sizing: content-box;
180
  }
181
 
182
  .minicolors-picker {
183
- position: absolute;
184
- top: 0;
185
- left: 0;
186
- width: 18px;
187
- height: 2px;
188
- background: white;
189
- border: solid 1px black;
190
- margin-top: -2px;
191
- box-sizing: content-box;
192
  }
193
 
194
  /* Swatches */
195
- .minicolors-swatches,.minicolors-swatches li {
196
- margin: 0;
197
- padding: 0;
198
- list-style: none;
199
- overflow: hidden;
200
- position: absolute;
201
- top: 157px;
202
- left: 5px;
203
  }
204
 
205
  .minicolors-swatches .minicolors-swatch {
206
- position: relative;
207
- float: left;
208
- cursor: pointer;
209
- margin:0 4px 0 0;
210
  }
211
 
212
  .minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
213
- margin-right:7px;
214
  }
215
 
216
  .minicolors-swatch.selected {
217
- border-color:#000;
218
  }
219
 
220
  /* Inline controls */
221
  .minicolors-inline {
222
- display: inline-block;
223
  }
224
 
225
  .minicolors-inline .minicolors-input {
226
- display: none !important;
227
  }
228
 
229
  .minicolors-inline .minicolors-panel {
230
- position: relative;
231
- top: auto;
232
- left: auto;
233
- box-shadow: none;
234
- z-index: auto;
235
- display: inline-block;
236
  }
237
 
238
  /* Default theme */
239
  .minicolors-theme-default .minicolors-swatch {
240
- top: 5px;
241
- left: 5px;
242
- width: 18px;
243
- height: 18px;
244
  }
245
  .minicolors-theme-default .minicolors-swatches .minicolors-swatch {
246
- top: 0;
247
- left: 0;
248
- width: 18px;
249
- height: 18px;
250
- }
251
- .minicolors-theme-default .minicolors-swatches {
252
- height: 20px;
253
  }
254
  .minicolors-theme-default.minicolors-position-right .minicolors-swatch {
255
- left: auto;
256
- right: 5px;
257
  }
258
  .minicolors-theme-default.minicolors {
259
- width: auto;
260
- display: inline-block;
261
  }
262
  .minicolors-theme-default .minicolors-input {
263
- height: 20px;
264
- width: auto;
265
- display: inline-block;
266
- padding-left: 26px;
267
  }
268
  .minicolors-theme-default.minicolors-position-right .minicolors-input {
269
- padding-right: 26px;
270
- padding-left: inherit;
271
  }
272
 
273
  /* Bootstrap theme */
274
  .minicolors-theme-bootstrap .minicolors-swatch {
275
- z-index: 2;
276
- top: 3px;
277
- left: 3px;
278
- width: 28px;
279
- height: 28px;
280
- border-radius: 3px;
281
  }
282
  .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
283
- top: 0;
284
- left: 0;
285
- width: 20px;
286
- height: 20px;
 
287
  }
288
  .minicolors-theme-bootstrap .minicolors-swatch-color {
289
- border-radius: inherit;
290
  }
291
- .minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch {
292
- left: auto;
293
- right: 3px;
294
  }
295
  .minicolors-theme-bootstrap .minicolors-input {
296
- float: none;
297
- padding-left: 44px;
298
  }
299
  .minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
300
- padding-right: 44px;
301
- padding-left: 12px;
302
  }
303
  .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
304
- top: 4px;
305
- left: 4px;
306
- width: 37px;
307
- height: 37px;
308
- border-radius: 5px;
309
  }
310
  .minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {
311
- width: 24px;
312
- height: 24px;
 
 
 
 
313
  }
314
  .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
315
- border-top-left-radius: 0;
316
- border-bottom-left-radius: 0;
317
  }
318
 
319
  /* Semantic Ui theme */
320
  .minicolors-theme-semanticui .minicolors-swatch {
321
- top: 0;
322
- left: 0;
323
- padding: 18px;
324
  }
325
  .minicolors-theme-semanticui input {
326
- text-indent: 30px;
327
- }
1
  .minicolors {
2
+ position: relative;
3
  }
4
 
5
  .minicolors-sprite {
6
+ background-image: url(../images/jquery.minicolors.png);
 
 
 
 
7
  }
8
 
9
  .minicolors-swatch {
10
+ position: absolute;
11
+ vertical-align: middle;
12
+ background-position: -80px 0;
13
+ border: solid 1px #ccc;
14
+ cursor: text;
15
+ padding: 0;
16
+ margin: 0;
17
+ display: inline-block;
18
  }
19
 
20
  .minicolors-swatch-color {
21
+ position: absolute;
22
+ top: 0;
23
+ left: 0;
24
+ right: 0;
25
+ bottom: 0;
26
  }
27
 
28
  .minicolors input[type=hidden] + .minicolors-swatch {
29
+ width: 28px;
30
+ position: static;
31
+ cursor: pointer;
32
  }
33
 
34
  .minicolors input[type=hidden][disabled] + .minicolors-swatch {
35
+ cursor: default;
36
  }
37
 
38
  /* Panel */
39
  .minicolors-panel {
40
+ position: absolute;
41
+ width: 173px;
42
+ background: white;
43
+ border: solid 1px #CCC;
44
+ box-shadow: 0 0 20px rgba(0, 0, 0, .2);
45
+ z-index: 99999;
46
+ box-sizing: content-box;
47
+ display: none;
 
 
 
 
 
48
  }
49
 
50
  .minicolors-panel.minicolors-visible {
51
+ display: block;
52
  }
53
 
54
  /* Panel positioning */
55
  .minicolors-position-top .minicolors-panel {
56
+ top: -154px;
57
  }
58
 
59
  .minicolors-position-right .minicolors-panel {
60
+ right: 0;
61
  }
62
 
63
  .minicolors-position-bottom .minicolors-panel {
64
+ top: auto;
65
  }
66
 
67
  .minicolors-position-left .minicolors-panel {
68
+ left: 0;
69
  }
70
 
71
  .minicolors-with-opacity .minicolors-panel {
72
+ width: 194px;
73
  }
74
 
75
  .minicolors .minicolors-grid {
76
+ position: relative;
77
+ top: 1px;
78
+ left: 1px;
79
+ width: 150px;
80
+ height: 150px;
81
+ background-position: -120px 0;
82
+ cursor: crosshair;
83
  }
84
 
85
  .minicolors .minicolors-grid-inner {
86
+ position: absolute;
87
+ top: 0;
88
+ left: 0;
89
+ width: 150px;
90
+ height: 150px;
91
  }
92
 
93
  .minicolors-slider-saturation .minicolors-grid {
94
+ background-position: -420px 0;
95
  }
96
 
97
  .minicolors-slider-saturation .minicolors-grid-inner {
98
+ background-position: -270px 0;
99
+ background-image: inherit;
100
  }
101
 
102
  .minicolors-slider-brightness .minicolors-grid {
103
+ background-position: -570px 0;
104
  }
105
 
106
  .minicolors-slider-brightness .minicolors-grid-inner {
107
+ background-color: black;
108
  }
109
 
110
  .minicolors-slider-wheel .minicolors-grid {
111
+ background-position: -720px 0;
112
  }
113
 
114
  .minicolors-slider,
115
  .minicolors-opacity-slider {
116
+ position: absolute;
117
+ top: 1px;
118
+ left: 152px;
119
+ width: 20px;
120
+ height: 150px;
121
+ background-color: white;
122
+ background-position: 0 0;
123
+ cursor: row-resize;
124
  }
125
 
126
  .minicolors-slider-saturation .minicolors-slider {
127
+ background-position: -60px 0;
128
  }
129
 
130
  .minicolors-slider-brightness .minicolors-slider {
131
+ background-position: -20px 0;
132
  }
133
 
134
  .minicolors-slider-wheel .minicolors-slider {
135
+ background-position: -20px 0;
136
  }
137
 
138
  .minicolors-opacity-slider {
139
+ left: 173px;
140
+ background-position: -40px 0;
141
+ display: none;
142
  }
143
 
144
  .minicolors-with-opacity .minicolors-opacity-slider {
145
+ display: block;
146
  }
147
 
148
  /* Pickers */
149
  .minicolors-grid .minicolors-picker {
150
+ position: absolute;
151
+ top: 70px;
152
+ left: 70px;
153
+ width: 12px;
154
+ height: 12px;
155
+ border: solid 1px black;
156
+ border-radius: 10px;
157
+ margin-top: -6px;
158
+ margin-left: -6px;
159
+ background: none;
160
  }
161
 
162
  .minicolors-grid .minicolors-picker > div {
163
+ position: absolute;
164
+ top: 0;
165
+ left: 0;
166
+ width: 8px;
167
+ height: 8px;
168
+ border-radius: 8px;
169
+ border: solid 2px white;
170
+ box-sizing: content-box;
171
  }
172
 
173
  .minicolors-picker {
174
+ position: absolute;
175
+ top: 0;
176
+ left: 0;
177
+ width: 18px;
178
+ height: 2px;
179
+ background: white;
180
+ border: solid 1px black;
181
+ margin-top: -2px;
182
+ box-sizing: content-box;
183
  }
184
 
185
  /* Swatches */
186
+ .minicolors-swatches,
187
+ .minicolors-swatches li {
188
+ margin: 5px 0 3px 5px;
189
+ padding: 0;
190
+ list-style: none;
191
+ overflow: hidden;
 
 
192
  }
193
 
194
  .minicolors-swatches .minicolors-swatch {
195
+ position: relative;
196
+ float: left;
197
+ cursor: pointer;
198
+ margin:0 4px 0 0;
199
  }
200
 
201
  .minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
202
+ margin-right: 7px;
203
  }
204
 
205
  .minicolors-swatch.selected {
206
+ border-color: #000;
207
  }
208
 
209
  /* Inline controls */
210
  .minicolors-inline {
211
+ display: inline-block;
212
  }
213
 
214
  .minicolors-inline .minicolors-input {
215
+ display: none !important;
216
  }
217
 
218
  .minicolors-inline .minicolors-panel {
219
+ position: relative;
220
+ top: auto;
221
+ left: auto;
222
+ box-shadow: none;
223
+ z-index: auto;
224
+ display: inline-block;
225
  }
226
 
227
  /* Default theme */
228
  .minicolors-theme-default .minicolors-swatch {
229
+ top: 5px;
230
+ left: 5px;
231
+ width: 18px;
232
+ height: 18px;
233
  }
234
  .minicolors-theme-default .minicolors-swatches .minicolors-swatch {
235
+ margin-bottom: 2px;
236
+ top: 0;
237
+ left: 0;
238
+ width: 18px;
239
+ height: 18px;
 
 
240
  }
241
  .minicolors-theme-default.minicolors-position-right .minicolors-swatch {
242
+ left: auto;
243
+ right: 5px;
244
  }
245
  .minicolors-theme-default.minicolors {
246
+ width: auto;
247
+ display: inline-block;
248
  }
249
  .minicolors-theme-default .minicolors-input {
250
+ height: 20px;
251
+ width: auto;
252
+ display: inline-block;
253
+ padding-left: 26px;
254
  }
255
  .minicolors-theme-default.minicolors-position-right .minicolors-input {
256
+ padding-right: 26px;
257
+ padding-left: inherit;
258
  }
259
 
260
  /* Bootstrap theme */
261
  .minicolors-theme-bootstrap .minicolors-swatch {
262
+ z-index: 2;
263
+ top: 3px;
264
+ left: 3px;
265
+ width: 28px;
266
+ height: 28px;
267
+ border-radius: 3px;
268
  }
269
  .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
270
+ margin-bottom: 2px;
271
+ top: 0;
272
+ left: 0;
273
+ width: 20px;
274
+ height: 20px;
275
  }
276
  .minicolors-theme-bootstrap .minicolors-swatch-color {
277
+ border-radius: inherit;
278
  }
279
+ .minicolors-theme-bootstrap.minicolors-position-right > .minicolors-swatch {
280
+ left: auto;
281
+ right: 3px;
282
  }
283
  .minicolors-theme-bootstrap .minicolors-input {
284
+ float: none;
285
+ padding-left: 44px;
286
  }
287
  .minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
288
+ padding-right: 44px;
289
+ padding-left: 12px;
290
  }
291
  .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
292
+ top: 4px;
293
+ left: 4px;
294
+ width: 37px;
295
+ height: 37px;
296
+ border-radius: 5px;
297
  }
298
  .minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {
299
+ width: 24px;
300
+ height: 24px;
301
+ }
302
+ .minicolors-theme-bootstrap .minicolors-input.input-xs + .minicolors-swatch {
303
+ width: 18px;
304
+ height: 18px;
305
  }
306
  .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
307
+ border-top-left-radius: 0;
308
+ border-bottom-left-radius: 0;
309
  }
310
 
311
  /* Semantic Ui theme */
312
  .minicolors-theme-semanticui .minicolors-swatch {
313
+ top: 0;
314
+ left: 0;
315
+ padding: 18px;
316
  }
317
  .minicolors-theme-semanticui input {
318
+ text-indent: 30px;
319
+ }
assets/css/wpforms-preview.css CHANGED
@@ -1,5 +1,5 @@
1
  /* ==========================================================================
2
- WPForms Preview
3
  ========================================================================== */
4
 
5
  /*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
@@ -27,23 +27,6 @@ body {
27
  line-height: 1.625;
28
  }
29
 
30
- .wpforms-preview {
31
- border-top: 1px solid #eee;
32
- background-color: #fff;
33
- box-shadow: 0 1px 2px #ccc;
34
- margin: 30px auto 20px auto;
35
- overflow: auto;
36
- padding: 30px;
37
- max-width: 780px;
38
- }
39
-
40
- .error {
41
- color: #a94442;
42
- background-color: #f2dede;
43
- padding: 15px;
44
- border: 1px solid #ebcccc;
45
- }
46
-
47
  .site {
48
  text-align: center;
49
  font-size: 12px;
@@ -75,13 +58,20 @@ a:hover, a:active, a:focus {
75
  color: #0096dd;
76
  }
77
 
78
- /* Print Preview
79
- --------------------------------------------- */
 
 
 
 
 
 
 
80
 
81
  #print h1 {
82
  font-size: 24px;
83
  font-weight: 600;
84
- margin: 0 0 26px 0;
85
  }
86
 
87
  #print h1 span {
@@ -100,26 +90,99 @@ a:hover, a:active, a:focus {
100
  margin-left: 10px;
101
  }
102
 
 
 
 
 
 
 
 
103
  #print .fields {
104
  border: 1px solid #eee;
105
  }
106
 
107
- #print .wpforms-entry-field-name {
 
 
 
 
 
108
  font-weight: 600;
109
  background: #ebf3fb;
110
  padding: 8px 12px;
111
  margin: 0;
112
  }
113
 
114
- #print .wpforms-entry-field-value {
 
115
  background: #fff;
116
  padding: 8px 12px;
117
  margin: 0;
118
  }
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  @media print {
121
 
122
- .wpforms-preview {
123
  border: none;
124
  box-shadow: none;
125
  padding: 30px 0 15px;
@@ -131,28 +194,50 @@ a:hover, a:active, a:focus {
131
  #print h1 {
132
  text-align: center;
133
  }
134
-
135
- #print .buttons {
 
136
  display: none;
137
  }
138
 
139
- #print .fields {
 
140
  border: 1px solid #ccc;
141
  }
142
 
143
- #print .wpforms-entry-field {
 
144
  border-top: 1px solid #ccc;
 
145
  }
146
 
147
- #print .wpforms-entry-field:first-of-type {
 
148
  border: none;
149
  }
150
 
151
- #print .wpforms-entry-field-name {
 
152
  padding: 8px 12px 0 8px;
153
  }
154
 
155
- #print .wpforms-entry-field-value {
 
156
  padding-top: 6px;
157
  }
158
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /* ==========================================================================
2
+ WPForms Print Preview
3
  ========================================================================== */
4
 
5
  /*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
27
  line-height: 1.625;
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  .site {
31
  text-align: center;
32
  font-size: 12px;
58
  color: #0096dd;
59
  }
60
 
61
+ #print {
62
+ border-top: 1px solid #eee;
63
+ background-color: #fff;
64
+ box-shadow: 0 1px 2px #ccc;
65
+ margin: 30px auto 20px auto;
66
+ overflow: auto;
67
+ padding: 30px;
68
+ max-width: 780px;
69
+ }
70
 
71
  #print h1 {
72
  font-size: 24px;
73
  font-weight: 600;
74
+ margin: 0 0 16px 0;
75
  }
76
 
77
  #print h1 span {
90
  margin-left: 10px;
91
  }
92
 
93
+ #print .actions {
94
+ text-align: right;
95
+ margin: 0 0 26px 0;
96
+ font-size: 11px;
97
+ colo
98
+ }
99
+
100
  #print .fields {
101
  border: 1px solid #eee;
102
  }
103
 
104
+ #print .field.empty {
105
+ display: none;
106
+ }
107
+
108
+ #print .field-name,
109
+ #print .note-byline {
110
  font-weight: 600;
111
  background: #ebf3fb;
112
  padding: 8px 12px;
113
  margin: 0;
114
  }
115
 
116
+ #print .field-value,
117
+ #print .note-text {
118
  background: #fff;
119
  padding: 8px 12px;
120
  margin: 0;
121
  }
122
 
123
+ #print .notes-head {
124
+ margin: 26px 0 16px 0;
125
+ display: none;
126
+ }
127
+
128
+ #print .notes {
129
+ border: 1px solid #eee;
130
+ display: none;
131
+ }
132
+
133
+ #print .notes p {
134
+ margin: 0 0 10px 0;
135
+ }
136
+
137
+ #print .notes p:last-of-type {
138
+ margin: 0;
139
+ }
140
+
141
+ /* Compact view */
142
+
143
+ .compact #print {
144
+ font-size: 12px;
145
+ line-height: 1.4;
146
+ padding: 15px;
147
+ margin-bottom: 10px;
148
+ }
149
+
150
+ .compact #print h1 {
151
+ font-size: 16px !important;
152
+ }
153
+
154
+ .compact #print .field {
155
+ border-top: 1px solid #eee;
156
+ overflow: hidden;
157
+ clear: both;
158
+ }
159
+
160
+ .compact #print .fields {
161
+ border-top: 0;
162
+ }
163
+
164
+ .compact #print .field-name {
165
+ width: 30%;
166
+ float: left;
167
+ }
168
+
169
+ .compact #print .field-value {
170
+ width: 70%;
171
+ float: right;
172
+ }
173
+
174
+ .compact .site {
175
+ font-size: 9px;
176
+ }
177
+
178
+ .compact #print .notes-head {
179
+ font-size: 16px;
180
+ margin: 16px 0 10px 0;
181
+ }
182
+
183
  @media print {
184
 
185
+ #print {
186
  border: none;
187
  box-shadow: none;
188
  padding: 30px 0 15px;
194
  #print h1 {
195
  text-align: center;
196
  }
197
+
198
+ #print .buttons,
199
+ #print .actions {
200
  display: none;
201
  }
202
 
203
+ #print .fields,
204
+ #print .notes {
205
  border: 1px solid #ccc;
206
  }
207
 
208
+ #print .field,
209
+ #print .note {
210
  border-top: 1px solid #ccc;
211
+ border-color: #ccc !important;
212
  }
213
 
214
+ #print .field:first-of-type,
215
+ #print .note:first-of-type {
216
  border: none;
217
  }
218
 
219
+ #print .field-name,
220
+ #print .note-byline {
221
  padding: 8px 12px 0 8px;
222
  }
223
 
224
+ #print .field-value,
225
+ #print .note-text {
226
  padding-top: 6px;
227
  }
228
+
229
+ /* Compact view */
230
+
231
+ .compact #print {
232
+ padding: 15px;
233
+ font-size: 11px;
234
+ }
235
+
236
+ .compact #print .fields {
237
+ border-top: none;
238
+ }
239
+
240
+ .compact #print .field:first-of-type {
241
+ border-top: 1px solid #ccc;
242
+ }
243
+ }
assets/images/cross-inverse.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg width="21" height="21" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg"><g fill="#000" fill-rule="evenodd"><path d="M2.592.044l18.364 18.364-2.548 2.548L.044 2.592z"/><path d="M0 18.364L18.364 0l2.548 2.548L2.548 20.912z"/></g></svg>
assets/images/cross.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg width="21" height="21" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg"><g fill="#FFF" fill-rule="evenodd"><path d="M2.592.044l18.364 18.364-2.548 2.548L.044 2.592z"/><path d="M0 18.364L18.364 0l2.548 2.548L2.548 20.912z"/></g></svg>
assets/images/flags.png ADDED
Binary file
assets/images/icon-cc-amex.png DELETED
Binary file
assets/images/icon-cc-discover.png DELETED
Binary file
assets/images/icon-cc-lock.png DELETED
Binary file
assets/images/icon-cc-maestro.png DELETED
Binary file
assets/images/icon-cc-mastercard.png DELETED
Binary file
assets/images/icon-cc-svc.png DELETED
Binary file
assets/images/icon-cc-visa.png DELETED
Binary file
assets/images/jquery.minicolors.png ADDED
Binary file
assets/images/logo-builder.png DELETED
Binary file
assets/images/logo.png ADDED
Binary file
assets/images/settings-captcha-addon.png ADDED
Binary file
assets/images/settings-email-html.png ADDED
Binary file
assets/images/settings-email-plaintext.png ADDED
Binary file
assets/images/spinner-small.gif DELETED
Binary file
assets/images/spinner.gif DELETED
Binary file
assets/images/welcome-feature-icon-1.png ADDED
Binary file
assets/images/welcome-feature-icon-10.png ADDED
Binary file
assets/images/welcome-feature-icon-2.png ADDED
Binary file
assets/images/welcome-feature-icon-3.png ADDED
Binary file
assets/images/welcome-feature-icon-4.png ADDED
Binary file
assets/images/welcome-feature-icon-5.png ADDED
Binary file
assets/images/welcome-feature-icon-6.png ADDED
Binary file
assets/images/welcome-feature-icon-7.png ADDED
Binary file
assets/images/welcome-feature-icon-8.png ADDED
Binary file
assets/images/welcome-feature-icon-9.png ADDED
Binary file
assets/images/welcome-features.png DELETED
Binary file
assets/images/welcome-testimonial-bill.jpg ADDED
Binary file
assets/images/welcome-testimonial-david.jpg ADDED
Binary file
assets/images/welcome-video.png ADDED
Binary file
assets/js/admin-builder.js CHANGED
@@ -1235,7 +1235,7 @@
1235
  $el.append('<i class="fa fa-cog fa-spin"></i>');
1236
 
1237
  WPFormsBuilder.fieldAdd(type, {position: pos, placeholder: $el});
1238
- }
1239
  });
1240
 
1241
  $('.wpforms-add-fields-button').draggable({
@@ -1304,7 +1304,16 @@
1304
  if (total == '1') {
1305
  $.alert({
1306
  title: false,
1307
- content: wpforms_builder.error_choice
 
 
 
 
 
 
 
 
 
1308
  });
1309
  } else {
1310
  $this.parent().remove();
@@ -1749,8 +1758,17 @@
1749
  msg = msg.replace('{limit}',limit);
1750
  msg = msg.replace('{total}',res.data.total);
1751
  $.alert({
1752
- title: wpforms_builder.heads_up,
1753
- content: msg
 
 
 
 
 
 
 
 
 
1754
  });
1755
  }
1756
  } else {
@@ -2201,7 +2219,7 @@
2201
  icon: 'fa fa-exclamation-circle',
2202
  type: 'orange',
2203
  buttons: {
2204
- cancel: {
2205
  text: wpforms_builder.ok,
2206
  btnClass: 'btn-confirm',
2207
  keys: ['enter']
@@ -2235,7 +2253,7 @@
2235
  $(document).on('click', '#wpforms-embed', function(e) {
2236
  e.preventDefault();
2237
  var content = wpforms_builder.embed_modal;
2238
- content += '<input type=\'text\' value=\'[wpforms id="' + s.formID + '"]\' readonly id=\'wpforms-embed-shortcode\'>';
2239
  content += wpforms_builder.embed_modal_2;
2240
  content += '<br><br><iframe width="600" height="338" src="https://www.youtube-nocookie.com/embed/IxGVz3AjEe0?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>';
2241
  $.alert({
1235
  $el.append('<i class="fa fa-cog fa-spin"></i>');
1236
 
1237
  WPFormsBuilder.fieldAdd(type, {position: pos, placeholder: $el});
1238
+ }
1239
  });
1240
 
1241
  $('.wpforms-add-fields-button').draggable({
1304
  if (total == '1') {
1305
  $.alert({
1306
  title: false,
1307
+ content: wpforms_builder.error_choice,
1308
+ icon: 'fa fa-info-circle',
1309
+ type: 'blue',
1310
+ buttons: {
1311
+ confirm: {
1312
+ text: wpforms_builder.ok,
1313
+ btnClass: 'btn-confirm',
1314
+ keys: ['enter']
1315
+ }
1316
+ }
1317
  });
1318
  } else {
1319
  $this.parent().remove();
1758
  msg = msg.replace('{limit}',limit);
1759
  msg = msg.replace('{total}',res.data.total);
1760
  $.alert({
1761
+ title: false,
1762
+ content: wpforms_builder.heads_up,
1763
+ icon: 'fa fa-info-circle',
1764
+ type: 'blue',
1765
+ buttons: {
1766
+ confirm: {
1767
+ text: msg,
1768
+ btnClass: 'btn-confirm',
1769
+ keys: ['enter']
1770
+ }
1771
+ }
1772
  });
1773
  }
1774
  } else {
2219
  icon: 'fa fa-exclamation-circle',
2220
  type: 'orange',
2221
  buttons: {
2222
+ confirm: {
2223
  text: wpforms_builder.ok,
2224
  btnClass: 'btn-confirm',
2225
  keys: ['enter']
2253
  $(document).on('click', '#wpforms-embed', function(e) {
2254
  e.preventDefault();
2255
  var content = wpforms_builder.embed_modal;
2256
+ content += '<input type=\'text\' value=\'[wpforms id="' + s.formID + '" title="false" description="false"]\' readonly id=\'wpforms-embed-shortcode\'>';
2257
  content += wpforms_builder.embed_modal_2;
2258
  content += '<br><br><iframe width="600" height="338" src="https://www.youtube-nocookie.com/embed/IxGVz3AjEe0?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>';
2259
  $.alert({
assets/js/admin-overview.js DELETED
@@ -1,21 +0,0 @@
1
- ;(function($){
2
- $(function(){
3
-
4
- // Confirm entry deletion
5
- $(document).on('click', '#wpforms-overview .wp-list-table .delete a', function(e) {
6
- if ( confirm( wpforms_overview.delete_confirm ) ) {
7
- return true;
8
- }
9
- return false;
10
- });
11
-
12
- // Confirm form duplication
13
- $(document).on('click', '#wpforms-overview .wp-list-table .duplicate a', function(e) {
14
- if ( confirm( wpforms_overview.duplicate_confirm ) ) {
15
- return true;
16
- }
17
- return false;
18
- });
19
-
20
- });
21
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/admin-settings.js DELETED
@@ -1,224 +0,0 @@
1
- ;(function($) {
2
-
3
- var s;
4
-
5
- var WPFormsSettings = {
6
-
7
- settings: {
8
- tabs: '',
9
- tabs_nav: '',
10
- tabs_hash: window.location.hash,
11
- tabs_hash_sani: window.location.hash.replace('!', ''),
12
- media_frame: false
13
- },
14
-
15
- /**
16
- * Start the engine.
17
- *
18
- * @since 1.0.0
19
- */
20
- init: function() {
21
-
22
- s = this.settings;
23
-
24
- WPFormsSettings.bindUIActions();
25
-
26
- $(document).ready(function() {
27
- WPFormsSettings.ready();
28
- });
29
- },
30
-
31
- /**
32
- * Element bindings.
33
- *
34
- * @since 1.0.0
35
- */
36
- ready: function() {
37
-
38
- s.tabs = $('#wpforms-tabs');
39
- s.tabs_nav = $('#wpforms-tabs-nav');
40
- s.integrationFocus = WPFormsSettings.getQueryString('wpforms-integration');
41
- s.jumpTo = WPFormsSettings.getQueryString('jump');
42
-
43
- // If we have a hash and it begins with "wpforms-tab", set the proper tab to be opened.
44
- if ( s.tabs_hash && s.tabs_hash.indexOf('wpforms-tab-') >= 0 ) {
45
- $('.wpforms-active').removeClass('wpforms-active nav-tab-active');
46
- s.tabs_nav.find('a[href="' + s.tabs_hash_sani + '"]').addClass('wpforms-active nav-tab-active');
47
- s.tabs.find(s.tabs_hash_sani).addClass('wpforms-active').show();
48
- }
49
-
50
- // After settings are loaded, fade in the settings
51
- $('.wpforms-circle-loader').fadeOut('fast', function() {
52
- $('#wpforms-tabs').fadeIn('fast');
53
- $('.wpforms-circle-loader').remove();
54
-
55
- // Scroll to the integration if focused on one
56
- if ( s.integrationFocus ) {
57
- $('body').animate({
58
- scrollTop: $('#wpforms-integration-'+s.integrationFocus).offset().top
59
- }, 1000);
60
- } else if ( s.jumpTo ) {
61
- $('body').animate({
62
- scrollTop: $('#'+s.jumpTo).offset().top
63
- }, 1000);
64
- }
65
- });
66
-
67
- // Load color pickers
68
- $('.wpforms-color-picker').minicolors();
69
- },
70
-
71
- /**
72
- * Element bindings.
73
- *
74
- * @since 1.0.0
75
- */
76
- bindUIActions: function() {
77
-
78
- // Change tabs on click.
79
- $(document).on('click', '#wpforms-tabs-nav a', function(e){
80
- e.preventDefault();
81
-
82
- var $this = $(this);
83
- if ( $this.hasClass('wpforms-active') ) {
84
- return;
85
- } else {
86
- window.location.hash = s.tabs_hash = this.hash.split('#').join('#!');
87
- var current = s.tabs_nav.find('.wpforms-active').removeClass('wpforms-active nav-tab-active').attr('href');
88
- $this.addClass('wpforms-active nav-tab-active');
89
- s.tabs.find(current).removeClass('wpforms-active').hide();
90
- s.tabs.find($this.attr('href')).addClass('wpforms-active').show();
91
- }
92
- });
93
-
94
- // Integrations tab accounts toggle
95
- $(document).on('click', '.wpforms-settings-provider-header', function(e) {
96
- e.preventDefault();
97
- $(this).parent().find('.wpforms-settings-provider-accounts').slideToggle();
98
- $(this).parent().find('.wpforms-settings-provider-logo i').toggleClass('fa-chevron-right fa-chevron-down');
99
- });
100
-
101
- $(document).on('click', '.wpforms-settings-provider-accounts-toggle a', function(e) {
102
- e.preventDefault();
103
- var $connectFields = $(this).parent().next('.wpforms-settings-provider-accounts-connect');
104
- $connectFields.find('input[type=text], input[type=password]').val('');
105
- $connectFields.slideToggle();
106
- });
107
-
108
- $(document).on('click', '.wpforms-settings-provider-accounts-list a', function(e) {
109
- e.preventDefault();
110
-
111
- var $this = $(this),
112
- r = confirm(wpforms_settings.provider_disconnect);
113
-
114
- if ( r != true ) {
115
- return false;
116
- }
117
-
118
- var data = {
119
- action : 'wpforms_settings_provider_disconnect',
120
- provider: $this.data('provider'),
121
- key : $this.data('key'),
122
- nonce : wpforms_settings.nonce
123
- }
124
- $.post(wpforms_settings.ajax_url, data, function(res) {
125
- if (res.success){
126
- $this.parent().remove();
127
- } else {
128
- console.log(res);
129
- }
130
- }).fail(function(xhr, textStatus, e) {
131
- console.log(xhr.responseText);
132
- });
133
- });
134
-
135
- $(document).on('click', '.wpforms-settings-provider-connect', function(e) {
136
- e.preventDefault();
137
- var $this = $(this),
138
- $icon = $this.parent().find('i'),
139
- text = $this.text(),
140
- $provider = $this.closest('.wpforms-settings-provider');
141
-
142
- $this.text(wpforms_settings.saving);
143
- $icon.show();
144
-
145
- var data = {
146
- action : 'wpforms_settings_provider_add',
147
- data : $(this).closest('form').serialize(),
148
- provider: $this.data('provider'),
149
- nonce : wpforms_settings.nonce
150
- }
151
- $.post(wpforms_settings.ajax_url, data, function(res) {
152
- if (res.success) {
153
- $this.text(text);
154
- $provider.find('.wpforms-settings-provider-accounts-list ul').append(res.data.html);
155
- $provider.addClass('connected');
156
- $this.closest('.wpforms-settings-provider-accounts-connect').slideToggle();
157
- } else {
158
- console.log(res);
159
- var msg = 'Could not authenticate with the provider.';
160
- if ( res.data.error_msg ) {
161
- msg = msg+"\n"+res.data.error_msg;
162
- }
163
- alert( msg );
164
- }
165
- $this.text(text);
166
- $icon.hide();
167
- }).fail(function(xhr, textStatus, e) {
168
- console.log(xhr.responseText);
169
- });
170
- });
171
-
172
- // Image uploader
173
- $(document).on('click', '.wpforms-settings-upload-image', function(e){
174
-
175
- e.preventDefault();
176
-
177
- var $setting = $(this).closest('td');
178
-
179
- if ( s.media_frame ) {
180
- s.media_frame.open();
181
- return;
182
- }
183
-
184
- s.media_frame = wp.media.frames.wpforms_media_frame = wp.media({
185
- className: 'media-frame wpforms-media-frame',
186
- frame: 'select',
187
- multiple: false,
188
- title: wpforms_settings.upload_title,
189
- library: {
190
- type: 'image'
191
- },
192
- button: {
193
- text: wpforms_settings.upload_button
194
- }
195
- });
196
-
197
- s.media_frame.on('select', function(){
198
- // Grab our attachment selection and construct a JSON representation of the model.
199
- var media_attachment = s.media_frame.state().get('selection').first().toJSON();
200
-
201
- // Send the attachment URL to our custom input field via jQuery.
202
- $setting.find('.wpforms-settings-upload-image-value').val(media_attachment.url);
203
- $setting.find('.wpforms-settings-upload-image-display').empty().append('<img src="'+media_attachment.url+'">');
204
- });
205
-
206
- // Now that everything has been set, let's open up the frame.
207
- s.media_frame.open();
208
- })
209
- },
210
-
211
- /**
212
- * Get query string in a URL.
213
- *
214
- * @since 1.3.6
215
- */
216
- getQueryString: function(name) {
217
-
218
- var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
219
- return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
220
- },
221
- }
222
-
223
- WPFormsSettings.init();
224
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/admin.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e){"use strict";var t,n={settings:{iconActivate:'<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',iconDeactivate:'<i class="fa fa-toggle-on" aria-hidden="true"></i>',iconInstall:'<i class="fa fa-cloud-download" aria-hidden="true"></i>',iconSpinner:'<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',mediaFrame:!1},init:function(){t=this.settings,e(document).ready(n.ready),n.initFormOverview(),n.initEntriesSingle(),n.initEntriesList(),n.initWelcome(),n.initAddons(),n.initSettings()},ready:function(){e(".notice").show(),e("#screen-meta-links, #screen-meta").prependTo("#wpforms-header-temp").show(),e(".choicesjs-select").each(function(){var t=e(this),n={searchEnabled:!1};t.attr("multiple")&&(n.searchEnabled=!0,n.removeItemButton=!0),t.data("placeholder")&&(n.placeholderValue=t.data("placeholder")),t.data("search")&&(n.searchEnabled=!0),new Choices(t[0],n)}),e(".wpforms-color-picker").minicolors(),e(".wpforms-file-upload").each(function(){var t=e(this).find("input[type=file]"),n=e(this).find("label"),i=n.html();t.on("change",function(e){var t="";this.files&&this.files.length>1?t=(this.getAttribute("data-multiple-caption")||"").replace("{count}",this.files.length):e.target.value&&(t=e.target.value.split("\\").pop()),t?n.find(".fld").html(t):n.html(i)}),t.on("focus",function(){t.addClass("has-focus")}).on("blur",function(){t.removeClass("has-focus")})}),jconfirm.defaults={closeIcon:!0,backgroundDismiss:!0,escapeKey:!0,animationBounce:1,useBootstrap:!1,theme:"modern",boxWidth:"400px"},e(document).trigger("wpformsReady")},initFormOverview:function(){e(document).on("click","#wpforms-overview .wp-list-table .delete a, #wpforms-overview .wp-list-table .duplicate a",function(t){t.preventDefault();var n=e(this).attr("href"),i=e(this).parent().hasClass("delete")?wpforms_admin.form_delete_confirm:wpforms_admin.form_duplicate_confirm;e.confirm({title:!1,content:i,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=n}},cancel:{text:wpforms_admin.cancel}}})})},initEntriesSingle:function(){e(document).on("click","#wpforms-entries-single .submitdelete",function(t){t.preventDefault();var n=e(this).attr("href");e.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=n}},cancel:{text:wpforms_admin.cancel}}})}),e(document).on("click","#wpforms-entries-single .wpforms-entry-print a",function(t){t.preventDefault(),window.open(e(this).attr("href"))}),e(document).on("click","#wpforms-entries-single .wpforms-empty-field-toggle",function(t){t.preventDefault(),"true"==wpCookies.get("wpforms_entry_hide_empty")?(wpCookies.remove("wpforms_entry_hide_empty"),e(this).text(wpforms_admin.entry_empty_fields_hide)):(wpCookies.set("wpforms_entry_hide_empty","true",2592e3),e(this).text(wpforms_admin.entry_empty_fields_show)),e(".wpforms-entry-field.empty").toggle()}),e(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .add",function(t){t.preventDefault(),e(this).hide().next("form").slideToggle()}),e(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .cancel",function(t){t.preventDefault(),e(this).closest("form").slideToggle(),e(".wpforms-entry-notes-new .add").show()}),e(document).on("click","#wpforms-entries-single .wpforms-entry-notes-byline .note-delete",function(t){t.preventDefault();var n=e(this).attr("href");e.confirm({title:!1,content:wpforms_admin.entry_note_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=n}},cancel:{text:wpforms_admin.cancel}}})})},initEntriesList:function(){e(document).on("click","#wpforms-entries-list .form-selector .toggle",function(t){t.preventDefault(),e(this).toggleClass("active").next(".form-list").toggle()}),e(document).on("click","#wpforms-entries-list .wp-list-table .delete",function(t){t.preventDefault();var n=e(this).attr("href");e.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=n}},cancel:{text:wpforms_admin.cancel}}})}),e(document).on("click","#wpforms-entries-list .wp-list-table .indicator-star",function(t){t.preventDefault();var n=e(this),i="",o=Number(e("#wpforms-entries-list .starred-num").text()),s=n.data("id");n.hasClass("star")?(i="star",o++,n.attr("title",wpforms_admin.entry_unstar)):(i="unstar",o--,n.attr("title",wpforms_admin.entry_star)),n.toggleClass("star unstar"),e("#wpforms-entries-list .starred-num").text(o);var a={task:i,action:"wpforms_entry_list_star",nonce:wpforms_admin.nonce,entry_id:s};e.post(wpforms_admin.ajax_url,a)}),e(document).on("click","#wpforms-entries-list .wp-list-table .indicator-read",function(t){t.preventDefault();var n=e(this),i="",o=Number(e("#wpforms-entries-list .unread-num").text()),s=n.data("id");n.hasClass("read")?(i="read",o--,n.attr("title",wpforms_admin.entry_unread)):(i="unread",o++,n.attr("title",wpforms_admin.entry_read)),n.toggleClass("read unread"),e("#wpforms-entries-list .unread-num").text(o);var a={task:i,action:"wpforms_entry_list_read",nonce:wpforms_admin.nonce,entry_id:s};e.post(wpforms_admin.ajax_url,a)})},initWelcome:function(){e(document).on("click","#wpforms-welcome .play-video",function(t){t.preventDefault();e.dialog({title:!1,content:'<div class="video-container"><iframe width="1280" height="720" src="https://www.youtube-nocookie.com/embed/yDyvSGV7tP4?rel=0&amp;showinfo=0&amp;autoplay=1" frameborder="0" allowfullscreen></iframe></div>',closeIcon:!0,boxWidth:"70%"})})},initAddons:function(){e(document).on("wpformsReady",function(){e("#wpforms-admin-addons").length&&e(".addon-item .details").matchHeight({byrow:!1,property:"min-height"})}),e(document).on("click","#wpforms-admin-addons .addon-item button",function(t){t.preventDefault(),n.addonToggle(e(this))})},addonToggle:function(n){var i,o,s,a,r,c=e(n),l=c.closest(".addon-item"),d=c.attr("data-plugin");if(c.prop("disabled",!0).addClass("loading"),c.html(t.iconSpinner),c.hasClass("status-active"))i="wpforms_deactivate_addon",o="status-inactive",s=wpforms_admin.addon_inactive,a=t.iconActivate+wpforms_admin.addon_activate,r=t.iconDeactivate+wpforms_admin.addon_deactivate;else if(c.hasClass("status-inactive"))i="wpforms_activate_addon",o="status-active",s=wpforms_admin.addon_active,a=t.iconDeactivate+wpforms_admin.addon_deactivate,r=t.iconActivate+wpforms_admin.addon_activate;else{if(!c.hasClass("status-download"))return;i="wpforms_install_addon",o="status-inactive",s=wpforms_admin.addon_inactive,a=t.iconActivate+wpforms_admin.addon_activate,r=t.iconInstall+wpforms_admin.addon_install}var m={action:i,nonce:wpforms_admin.nonce,plugin:d};e.post(wpforms_admin.ajax_url,m,function(t){if(t.success){if("wpforms_install_addon"===i){c.attr("data-plugin",t.data.basename);n=t.data.msg}else var n=t.data;l.find(".actions").append('<div class="msg success">'+n+"</div>"),l.find("span.status-label").removeClass("status-active status-inactive status-download").addClass(o).text(s),c.removeClass("status-active status-inactive status-download").addClass(o).html(a)}else l.find(".actions").append('<div class="msg error">'+t.data+"</div>"),c.html(r);c.prop("disabled",!1).removeClass("loading"),setTimeout(function(){e(".addon-item .msg").remove()},3e3)}).fail(function(e){console.log(e.responseText)})},initSettings:function(){e(document).on("wpformsReady",function(){if(e("#wpforms-settings").length){var t=n.getQueryString("wpforms-integration"),i=n.getQueryString("jump");t?e("body").animate({scrollTop:e("#wpforms-integration-"+t).offset().top},1e3):i&&e("body").animate({scrollTop:e("#"+i).offset().top},1e3)}}),e(document).on("click",".wpforms-setting-row-image button",function(t){t.preventDefault(),n.imageUploadModal(e(this))}),e(document).on("click","#wpforms-setting-license-key-verify",function(t){t.preventDefault(),n.licenseVerify(e(this))}),e(document).on("click","#wpforms-setting-license-key-deactivate",function(t){t.preventDefault(),n.licenseDeactivate(e(this))}),e(document).on("click","#wpforms-setting-license-key-refresh",function(t){t.preventDefault(),n.licenseRefresh(e(this))}),e(document).on("click",".wpforms-settings-provider-connect",function(t){t.preventDefault(),n.integrationConnect(e(this))}),e(document).on("click",".wpforms-settings-provider-accounts-list a",function(t){t.preventDefault(),n.integrationDisconnect(e(this))}),e(document).on("click",".wpforms-settings-provider-header",function(t){t.preventDefault(),e(this).parent().find(".wpforms-settings-provider-accounts").slideToggle(),e(this).parent().find(".wpforms-settings-provider-logo i").toggleClass("fa-chevron-right fa-chevron-down")}),e(document).on("click",".wpforms-settings-provider-accounts-toggle a",function(t){t.preventDefault();var n=e(this).parent().next(".wpforms-settings-provider-accounts-connect");n.find("input[type=text], input[type=password]").val(""),n.slideToggle()})},imageUploadModal:function(n){if(t.media_frame)t.media_frame.open();else{var i=e(n).closest(".wpforms-setting-field");t.media_frame=wp.media.frames.wpforms_media_frame=wp.media({className:"media-frame wpforms-media-frame",frame:"select",multiple:!1,title:wpforms_admin.upload_image_title,library:{type:"image"},button:{text:wpforms_admin.upload_image_button}}),t.media_frame.on("select",function(){var e=t.media_frame.state().get("selection").first().toJSON();i.find("input[type=text]").val(e.url),i.find("img").remove(),i.prepend('<img src="'+e.url+'">')}),t.media_frame.open()}},licenseVerify:function(n){var i=e(n),o=i.closest(".wpforms-setting-row"),s=i.outerWidth(),a=i.text(),r={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:e("#wpforms-setting-license-key").val()};i.html(t.iconSpinner).css("width",s).prop("disabled",!0),e.post(wpforms_admin.ajax_url,r,function(t){var n,s="fa fa-check-circle",r="green";t.success?(n=t.data.msg,o.find(".type, .desc, #wpforms-setting-license-key-deactivate").show(),o.find(".type strong").text(t.data.type),e(".wpforms-license-notice").remove()):(s="fa fa-exclamation-circle",r="orange",n=t.data,o.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),e.alert({title:!1,content:n,icon:s,type:r,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseDeactivate:function(n){var i=e(n),o=i.closest(".wpforms-setting-row"),s=i.outerWidth(),a=i.text(),r={action:"wpforms_deactivate_license",nonce:wpforms_admin.nonce};i.html(t.iconSpinner).css("width",s).prop("disabled",!0),e.post(wpforms_admin.ajax_url,r,function(t){var n="fa fa-info-circle",s="blue",r=t.data;t.success?(o.find("#wpforms-setting-license-key").val(""),o.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()):(n="fa fa-exclamation-circle",s="orange"),e.alert({title:!1,content:r,icon:n,type:s,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseRefresh:function(t){var n=e(t).closest(".wpforms-setting-row"),i={action:"wpforms_refresh_license",nonce:wpforms_admin.nonce,license:e("#wpforms-setting-license-key").val()};e.post(wpforms_admin.ajax_url,i,function(t){var i,o="fa fa-check-circle",s="green";t.success?(i=t.data.msg,n.find(".type strong").text(t.data.type)):(o="fa fa-exclamation-circle",s="orange",i=t.data,n.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),e.alert({title:!1,content:i,icon:o,type:s,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){console.log(e.responseText)})},integrationConnect:function(t){var n=e(t),i=n.outerWidth(),o=n.text(),s=n.closest(".wpforms-settings-provider"),a={action:"wpforms_settings_provider_add",data:n.closest("form").serialize(),provider:n.data("provider"),nonce:wpforms_admin.nonce};n.html("Connecting...").css("width",i).prop("disabled",!0),e.post(wpforms_admin.ajax_url,a,function(t){if(t.success)s.find(".wpforms-settings-provider-accounts-list ul").append(t.data.html),s.addClass("connected"),n.closest(".wpforms-settings-provider-accounts-connect").slideToggle();else{var i=wpforms_admin.provider_auth_error;t.data.error_msg&&(i+="\n"+t.data.error_msg),e.alert({title:!1,content:i,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),console.log(t)}n.html(o).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},integrationDisconnect:function(t){var n=e(t),i={action:"wpforms_settings_provider_disconnect",provider:n.data("provider"),key:n.data("key"),nonce:wpforms_admin.nonce};e.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.provider_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){e.post(wpforms_admin.ajax_url,i,function(e){e.success?n.parent().remove():console.log(e)}).fail(function(e){console.log(e.responseText)})}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},getQueryString:function(e){var t=new RegExp("[?&]"+e+"=([^&]*)").exec(window.location.search);return t&&decodeURIComponent(t[1].replace(/\+/g," "))}};n.init()}(jQuery);
assets/js/choices.min.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ /*! choices.js v2.8.10 | (c) 2017 Josh Johnson | https://github.com/jshjohnson/Choices#readme */
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Choices=t():e.Choices=t()}(this,function(){return function(e){function t(n){if(i[n])return i[n].exports;var s=i[n]={exports:{},id:n,loaded:!1};return e[n].call(s.exports,s,s.exports,t),s.loaded=!0,s.exports}var i={};return t.m=e,t.c=i,t.p="/assets/scripts/dist/",t(0)}([function(e,t,i){e.exports=i(1)},function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function s(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),c=i(2),l=n(c),u=i(3),h=n(u),d=i(4),f=n(d),p=i(30),v=i(31);i(32);var m=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"[data-choice]",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r(this,e),(0,v.isType)("String",t)){var n=document.querySelectorAll(t);if(n.length>1)for(var s=1;s<n.length;s++){var o=n[s];new e(o,i)}}var a={silent:!1,items:[],choices:[],maxItemCount:-1,addItems:!0,removeItems:!0,removeItemButton:!1,editItems:!1,duplicateItems:!0,delimiter:",",paste:!0,searchEnabled:!0,searchChoices:!0,searchFloor:1,searchResultLimit:4,searchFields:["label","value"],position:"auto",resetScrollPosition:!0,regexFilter:null,shouldSort:!0,shouldSortItems:!1,sortFilter:v.sortByAlpha,placeholder:!0,placeholderValue:null,prependValue:null,appendValue:null,renderSelectedChoices:"auto",loadingText:"Loading...",noResultsText:"No results found",noChoicesText:"No choices to choose from",itemSelectText:"Press to select",addItemText:function(e){return'Press Enter to add <b>"'+e+'"</b>'},maxItemText:function(e){return"Only "+e+" values can be added."},uniqueItemText:"Only unique values can be added.",classNames:{containerOuter:"choices",containerInner:"choices__inner",input:"choices__input",inputCloned:"choices__input--cloned",list:"choices__list",listItems:"choices__list--multiple",listSingle:"choices__list--single",listDropdown:"choices__list--dropdown",item:"choices__item",itemSelectable:"choices__item--selectable",itemDisabled:"choices__item--disabled",itemChoice:"choices__item--choice",placeholder:"choices__placeholder",group:"choices__group",groupHeading:"choices__heading",button:"choices__button",activeState:"is-active",focusState:"is-focused",openState:"is-open",disabledState:"is-disabled",highlightedState:"is-highlighted",hiddenState:"is-hidden",flippedState:"is-flipped",loadingState:"is-loading"},fuseOptions:{include:"score"},callbackOnInit:null,callbackOnCreateTemplates:null};if(this.idNames={itemChoice:"item-choice"},this.config=(0,v.extend)(a,i),"auto"!==this.config.renderSelectedChoices&&"always"!==this.config.renderSelectedChoices&&(this.config.silent||console.warn("renderSelectedChoices: Possible values are 'auto' and 'always'. Falling back to 'auto'."),this.config.renderSelectedChoices="auto"),this.store=new f.default(this.render),this.initialised=!1,this.currentState={},this.prevState={},this.currentValue="",this.element=t,this.passedElement=(0,v.isType)("String",t)?document.querySelector(t):t,this.isTextElement="text"===this.passedElement.type,this.isSelectOneElement="select-one"===this.passedElement.type,this.isSelectMultipleElement="select-multiple"===this.passedElement.type,this.isSelectElement=this.isSelectOneElement||this.isSelectMultipleElement,this.isValidElementType=this.isTextElement||this.isSelectElement,!this.passedElement)return void(this.config.silent||console.error("Passed element not found"));this.config.shouldSortItems===!0&&this.isSelectOneElement&&(this.config.silent||console.warn("shouldSortElements: Type of passed element is 'select-one', falling back to false.")),this.highlightPosition=0,this.canSearch=this.config.searchEnabled,this.presetChoices=this.config.choices,this.presetItems=this.config.items,this.passedElement.value&&(this.presetItems=this.presetItems.concat(this.passedElement.value.split(this.config.delimiter))),this.baseId=(0,v.generateId)(this.passedElement,"choices-"),this.render=this.render.bind(this),this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this),this._onKeyUp=this._onKeyUp.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onClick=this._onClick.bind(this),this._onTouchMove=this._onTouchMove.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onMouseDown=this._onMouseDown.bind(this),this._onMouseOver=this._onMouseOver.bind(this),this._onPaste=this._onPaste.bind(this),this._onInput=this._onInput.bind(this),this.wasTap=!0;var c="classList"in document.documentElement;c||this.config.silent||console.error("Choices: Your browser doesn't support Choices");var l=(0,v.isElement)(this.passedElement)&&this.isValidElementType;if(l){if("active"===this.passedElement.getAttribute("data-choice"))return;this.init()}else this.config.silent||console.error("Incompatible input passed")}return a(e,[{key:"init",value:function(){if(this.initialised!==!0){var e=this.config.callbackOnInit;this.initialised=!0,this._createTemplates(),this._createInput(),this.store.subscribe(this.render),this.render(),this._addEventListeners(),e&&(0,v.isType)("Function",e)&&e.call(this)}}},{key:"destroy",value:function(){if(this.initialised!==!1){this._removeEventListeners(),this.passedElement.classList.remove(this.config.classNames.input,this.config.classNames.hiddenState),this.passedElement.removeAttribute("tabindex");var e=this.passedElement.getAttribute("data-choice-orig-style");Boolean(e)?(this.passedElement.removeAttribute("data-choice-orig-style"),this.passedElement.setAttribute("style",e)):this.passedElement.removeAttribute("style"),this.passedElement.removeAttribute("aria-hidden"),this.passedElement.removeAttribute("data-choice"),this.passedElement.value=this.passedElement.value,this.containerOuter.parentNode.insertBefore(this.passedElement,this.containerOuter),this.containerOuter.parentNode.removeChild(this.containerOuter),this.clearStore(),this.config.templates=null,this.initialised=!1}}},{key:"renderGroups",value:function(e,t,i){var n=this,s=i||document.createDocumentFragment(),o=this.config.sortFilter;return this.config.shouldSort&&e.sort(o),e.forEach(function(e){var i=t.filter(function(t){return n.isSelectOneElement?t.groupId===e.id:t.groupId===e.id&&!t.selected});if(i.length>=1){var o=n._getTemplate("choiceGroup",e);s.appendChild(o),n.renderChoices(i,s)}}),s}},{key:"renderChoices",value:function(e,t){var i=this,n=t||document.createDocumentFragment(),s=this.isSearching?v.sortByScore:this.config.sortFilter,o=this.config.renderSelectedChoices,r=function(e){var t="auto"!==o||(i.isSelectOneElement||!e.selected);if(t){var s=i._getTemplate("choice",e);n.appendChild(s)}};if((this.config.shouldSort||this.isSearching)&&e.sort(s),this.isSearching)for(var a=0;a<this.config.searchResultLimit;a++){var c=e[a];c&&r(c)}else e.forEach(function(e){return r(e)});return n}},{key:"renderItems",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=i||document.createDocumentFragment();if(this.config.shouldSortItems&&!this.isSelectOneElement&&e.sort(this.config.sortFilter),this.isTextElement){var s=this.store.getItemsReducedToValues(e),o=s.join(this.config.delimiter);this.passedElement.setAttribute("value",o),this.passedElement.value=o}else{var r=document.createDocumentFragment();e.forEach(function(e){var i=t._getTemplate("option",e);r.appendChild(i)}),this.passedElement.innerHTML="",this.passedElement.appendChild(r)}return e.forEach(function(e){var i=t._getTemplate("item",e);n.appendChild(i)}),n}},{key:"render",value:function(){if(this.currentState=this.store.getState(),this.currentState!==this.prevState){if((this.currentState.choices!==this.prevState.choices||this.currentState.groups!==this.prevState.groups)&&this.isSelectElement){var e=this.store.getGroupsFilteredByActive(),t=this.store.getChoicesFilteredByActive(),i=document.createDocumentFragment();this.choiceList.innerHTML="",this.config.resetScrollPosition&&(this.choiceList.scrollTop=0),e.length>=1&&this.isSearching!==!0?i=this.renderGroups(e,t,i):t.length>=1&&(i=this.renderChoices(t,i));var n=this.store.getItemsFilteredByActive(),s=this._canAddItem(n,this.input.value);if(i.childNodes&&i.childNodes.length>0)s.response?(this.choiceList.appendChild(i),this._highlightChoice()):this.choiceList.appendChild(this._getTemplate("notice",s.notice));else{var o=void 0,r=void 0;this.isSearching?(r=(0,v.isType)("Function",this.config.noResultsText)?this.config.noResultsText():this.config.noResultsText,o=this._getTemplate("notice",r)):(r=(0,v.isType)("Function",this.config.noChoicesText)?this.config.noChoicesText():this.config.noChoicesText,o=this._getTemplate("notice",r)),this.choiceList.appendChild(o)}}if(this.currentState.items!==this.prevState.items){var a=this.store.getItemsFilteredByActive();if(a){var c=this.renderItems(a);this.itemList.innerHTML="",c.childNodes&&this.itemList.appendChild(c)}}this.prevState=this.currentState}}},{key:"highlightItem",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!e)return this;var i=e.id,n=e.groupId,s=n>=0?this.store.getGroupById(n):null;return this.store.dispatch((0,p.highlightItem)(i,!0)),t&&(s&&s.value?(0,v.triggerEvent)(this.passedElement,"highlightItem",{id:i,value:e.value,label:e.label,groupValue:s.value}):(0,v.triggerEvent)(this.passedElement,"highlightItem",{id:i,value:e.value,label:e.label})),this}},{key:"unhighlightItem",value:function(e){if(!e)return this;var t=e.id,i=e.groupId,n=i>=0?this.store.getGroupById(i):null;return this.store.dispatch((0,p.highlightItem)(t,!1)),n&&n.value?(0,v.triggerEvent)(this.passedElement,"unhighlightItem",{id:t,value:e.value,label:e.label,groupValue:n.value}):(0,v.triggerEvent)(this.passedElement,"unhighlightItem",{id:t,value:e.value,label:e.label}),this}},{key:"highlightAll",value:function(){var e=this,t=this.store.getItems();return t.forEach(function(t){e.highlightItem(t)}),this}},{key:"unhighlightAll",value:function(){var e=this,t=this.store.getItems();return t.forEach(function(t){e.unhighlightItem(t)}),this}},{key:"removeItemsByValue",value:function(e){var t=this;if(!e||!(0,v.isType)("String",e))return this;var i=this.store.getItemsFilteredByActive();return i.forEach(function(i){i.value===e&&t._removeItem(i)}),this}},{key:"removeActiveItems",value:function(e){var t=this,i=this.store.getItemsFilteredByActive();return i.forEach(function(i){i.active&&e!==i.id&&t._removeItem(i)}),this}},{key:"removeHighlightedItems",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.store.getItemsFilteredByActive();return i.forEach(function(i){i.highlighted&&i.active&&(e._removeItem(i),t&&e._triggerChange(i.value))}),this}},{key:"showDropdown",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=document.body,i=document.documentElement,n=Math.max(t.scrollHeight,t.offsetHeight,i.clientHeight,i.scrollHeight,i.offsetHeight);this.containerOuter.classList.add(this.config.classNames.openState),this.containerOuter.setAttribute("aria-expanded","true"),this.dropdown.classList.add(this.config.classNames.activeState),this.dropdown.setAttribute("aria-expanded","true");var s=this.dropdown.getBoundingClientRect(),o=Math.ceil(s.top+window.scrollY+this.dropdown.offsetHeight),r=!1;return"auto"===this.config.position?r=o>=n:"top"===this.config.position&&(r=!0),r&&this.containerOuter.classList.add(this.config.classNames.flippedState),e&&this.canSearch&&document.activeElement!==this.input&&this.input.focus(),(0,v.triggerEvent)(this.passedElement,"showDropdown",{}),this}},{key:"hideDropdown",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.containerOuter.classList.contains(this.config.classNames.flippedState);return this.containerOuter.classList.remove(this.config.classNames.openState),this.containerOuter.setAttribute("aria-expanded","false"),this.dropdown.classList.remove(this.config.classNames.activeState),this.dropdown.setAttribute("aria-expanded","false"),t&&this.containerOuter.classList.remove(this.config.classNames.flippedState),e&&this.canSearch&&document.activeElement===this.input&&this.input.blur(),(0,v.triggerEvent)(this.passedElement,"hideDropdown",{}),this}},{key:"toggleDropdown",value:function(){var e=this.dropdown.classList.contains(this.config.classNames.activeState);return e?this.hideDropdown():this.showDropdown(!0),this}},{key:"getValue",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.store.getItemsFilteredByActive(),n=[];return i.forEach(function(i){e.isTextElement?n.push(t?i.value:i):i.active&&n.push(t?i.value:i)}),this.isSelectOneElement?n[0]:n}},{key:"setValue",value:function(e){var t=this;if(this.initialised===!0){var i=[].concat(o(e)),n=function(e){var i=(0,v.getType)(e);if("Object"===i){if(!e.value)return;t.isTextElement?t._addItem(e.value,e.label,e.id,void 0,e.customProperties,null):t._addChoice(e.value,e.label,!0,!1,-1,e.customProperties,null)}else"String"===i&&(t.isTextElement?t._addItem(e):t._addChoice(e,e,!0,!1,-1,null))};i.length>1?i.forEach(function(e){n(e)}):n(i[0])}return this}},{key:"setValueByChoice",value:function(e){var t=this;if(!this.isTextElement){var i=this.store.getChoices(),n=(0,v.isType)("Array",e)?e:[e];n.forEach(function(e){var n=i.find(function(t){return t.value===e});n?n.selected?t.config.silent||console.warn("Attempting to select choice already selected"):t._addItem(n.value,n.label,n.id,n.groupId,n.customProperties,n.keyCode):t.config.silent||console.warn("Attempting to select choice that does not exist")})}return this}},{key:"setChoices",value:function(e,t,i){var n=this,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(this.initialised===!0&&this.isSelectElement){if(!(0,v.isType)("Array",e)||!t)return this;s&&this._clearChoices(),e&&e.length&&(this.containerOuter.classList.remove(this.config.classNames.loadingState),e.forEach(function(e){e.choices?n._addGroup(e,e.id||null,t,i):n._addChoice(e[t],e[i],e.selected,e.disabled,void 0,e.customProperties,null)}))}return this}},{key:"clearStore",value:function(){return this.store.dispatch((0,p.clearAll)()),this}},{key:"clearInput",value:function(){return this.input.value&&(this.input.value=""),this.isSelectOneElement||this._setInputWidth(),!this.isTextElement&&this.config.searchEnabled&&(this.isSearching=!1,this.store.dispatch((0,p.activateChoices)(!0))),this}},{key:"enable",value:function(){this.passedElement.disabled=!1;var e=this.containerOuter.classList.contains(this.config.classNames.disabledState);return this.initialised&&e&&(this._addEventListeners(),this.passedElement.removeAttribute("disabled"),this.input.removeAttribute("disabled"),this.containerOuter.classList.remove(this.config.classNames.disabledState),this.containerOuter.removeAttribute("aria-disabled"),this.isSelectOneElement&&this.containerOuter.setAttribute("tabindex","0")),this}},{key:"disable",value:function(){this.passedElement.disabled=!0;var e=!this.containerOuter.classList.contains(this.config.classNames.disabledState);return this.initialised&&e&&(this._removeEventListeners(),this.passedElement.setAttribute("disabled",""),this.input.setAttribute("disabled",""),this.containerOuter.classList.add(this.config.classNames.disabledState),this.containerOuter.setAttribute("aria-disabled","true"),this.isSelectOneElement&&this.containerOuter.setAttribute("tabindex","-1")),this}},{key:"ajax",value:function(e){var t=this;return this.initialised===!0&&this.isSelectElement&&(requestAnimationFrame(function(){t._handleLoadingState(!0)}),e(this._ajaxCallback())),this}},{key:"_triggerChange",value:function(e){e&&(0,v.triggerEvent)(this.passedElement,"change",{value:e})}},{key:"_handleButtonAction",value:function(e,t){if(e&&t&&this.config.removeItems&&this.config.removeItemButton){var i=t.parentNode.getAttribute("data-id"),n=e.find(function(e){return e.id===parseInt(i,10)});if(this._removeItem(n),this._triggerChange(n.value),this.isSelectOneElement){var s=!!this.config.placeholder&&(this.config.placeholderValue||this.passedElement.getAttribute("placeholder"));if(s){var o=this._getTemplate("placeholder",s);this.itemList.appendChild(o)}}}}},{key:"_handleItemAction",value:function(e,t){var i=this,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(e&&t&&this.config.removeItems&&!this.isSelectOneElement){var s=t.getAttribute("data-id");e.forEach(function(e){e.id!==parseInt(s,10)||e.highlighted?n||e.highlighted&&i.unhighlightItem(e):i.highlightItem(e)}),document.activeElement!==this.input&&this.input.focus()}}},{key:"_handleChoiceAction",value:function(e,t){if(e&&t){var i=t.getAttribute("data-id"),n=this.store.getChoiceById(i),s=e[0]&&e[0].keyCode?e[0].keyCode:null,o=this.dropdown.classList.contains(this.config.classNames.activeState);if(n.keyCode=s,(0,v.triggerEvent)(this.passedElement,"choice",{choice:n}),n&&!n.selected&&!n.disabled){var r=this._canAddItem(e,n.value);r.response&&(this._addItem(n.value,n.label,n.id,n.groupId,n.customProperties,n.keyCode),this._triggerChange(n.value))}this.clearInput(),o&&this.isSelectOneElement&&(this.hideDropdown(),this.containerOuter.focus())}}},{key:"_handleBackspace",value:function(e){if(this.config.removeItems&&e){var t=e[e.length-1],i=e.some(function(e){return e.highlighted});this.config.editItems&&!i&&t?(this.input.value=t.value,this._setInputWidth(),this._removeItem(t),this._triggerChange(t.value)):(i||this.highlightItem(t,!1),this.removeHighlightedItems(!0))}}},{key:"_canAddItem",value:function(e,t){var i=!0,n=(0,v.isType)("Function",this.config.addItemText)?this.config.addItemText(t):this.config.addItemText;(this.isSelectMultipleElement||this.isTextElement)&&this.config.maxItemCount>0&&this.config.maxItemCount<=e.length&&(i=!1,n=(0,v.isType)("Function",this.config.maxItemText)?this.config.maxItemText(this.config.maxItemCount):this.config.maxItemText),this.isTextElement&&this.config.addItems&&i&&this.config.regexFilter&&(i=this._regexFilter(t));var s=!e.some(function(e){return(0,v.isType)("String",t)?e.value===t.trim():e.value===t});return s||this.config.duplicateItems||this.isSelectOneElement||!i||(i=!1,n=(0,v.isType)("Function",this.config.uniqueItemText)?this.config.uniqueItemText(t):this.config.uniqueItemText),{response:i,notice:n}}},{key:"_handleLoadingState",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.itemList.querySelector("."+this.config.classNames.placeholder);if(e)this.containerOuter.classList.add(this.config.classNames.loadingState),this.containerOuter.setAttribute("aria-busy","true"),this.isSelectOneElement?t?t.innerHTML=this.config.loadingText:(t=this._getTemplate("placeholder",this.config.loadingText),this.itemList.appendChild(t)):this.input.placeholder=this.config.loadingText;else{this.containerOuter.classList.remove(this.config.classNames.loadingState);var i=!!this.config.placeholder&&(this.config.placeholderValue||this.passedElement.getAttribute("placeholder"));this.isSelectOneElement?t.innerHTML=i||"":this.input.placeholder=i||""}}},{key:"_ajaxCallback",value:function(){var e=this;return function(t,i,n){if(t&&i){var s=(0,v.isType)("Object",t)?[t]:t;s&&(0,v.isType)("Array",s)&&s.length?(e._handleLoadingState(!1),s.forEach(function(t){if(t.choices){var s=t.id||null;e._addGroup(t,s,i,n)}else e._addChoice(t[i],t[n],t.selected,t.disabled,void 0,t.customProperties,null)})):e._handleLoadingState(!1),e.containerOuter.removeAttribute("aria-busy")}}}},{key:"_searchChoices",value:function(e){var t=(0,v.isType)("String",e)?e.trim():e,i=(0,v.isType)("String",this.currentValue)?this.currentValue.trim():this.currentValue;if(t.length>=1&&t!==i+" "){var n=this.store.getChoicesFilteredBySelectable(),s=t,o=(0,v.isType)("Array",this.config.searchFields)?this.config.searchFields:[this.config.searchFields],r=Object.assign(this.config.fuseOptions,{keys:o}),a=new l.default(n,r),c=a.search(s);this.currentValue=t,this.highlightPosition=0,this.isSearching=!0,this.store.dispatch((0,p.filterChoices)(c))}}},{key:"_handleSearch",value:function(e){if(e){var t=this.store.getChoices(),i=t.some(function(e){return!e.active});this.input===document.activeElement&&(e&&e.length>=this.config.searchFloor?(this.config.searchChoices&&this._searchChoices(e),(0,v.triggerEvent)(this.passedElement,"search",{value:e})):i&&(this.isSearching=!1,this.store.dispatch((0,p.activateChoices)(!0))))}}},{key:"_addEventListeners",value:function(){document.addEventListener("keyup",this._onKeyUp),document.addEventListener("keydown",this._onKeyDown),document.addEventListener("click",this._onClick),document.addEventListener("touchmove",this._onTouchMove),document.addEventListener("touchend",this._onTouchEnd),document.addEventListener("mousedown",this._onMouseDown),document.addEventListener("mouseover",this._onMouseOver),this.isSelectOneElement&&(this.containerOuter.addEventListener("focus",this._onFocus),this.containerOuter.addEventListener("blur",this._onBlur)),this.input.addEventListener("input",this._onInput),this.input.addEventListener("paste",this._onPaste),this.input.addEventListener("focus",this._onFocus),this.input.addEventListener("blur",this._onBlur)}},{key:"_removeEventListeners",value:function(){document.removeEventListener("keyup",this._onKeyUp),document.removeEventListener("keydown",this._onKeyDown),document.removeEventListener("click",this._onClick),document.removeEventListener("touchmove",this._onTouchMove),document.removeEventListener("touchend",this._onTouchEnd),document.removeEventListener("mousedown",this._onMouseDown),document.removeEventListener("mouseover",this._onMouseOver),this.isSelectOneElement&&(this.containerOuter.removeEventListener("focus",this._onFocus),this.containerOuter.removeEventListener("blur",this._onBlur)),this.input.removeEventListener("input",this._onInput),this.input.removeEventListener("paste",this._onPaste),this.input.removeEventListener("focus",this._onFocus),this.input.removeEventListener("blur",this._onBlur)}},{key:"_setInputWidth",value:function(){if(this.config.placeholderValue||this.passedElement.getAttribute("placeholder")&&this.config.placeholder){var e=!!this.config.placeholder&&(this.config.placeholderValue||this.passedElement.getAttribute("placeholder"));this.input.value&&this.input.value.length>=e.length/1.25&&(this.input.style.width=(0,v.getWidthOfInput)(this.input))}else this.input.style.width=(0,v.getWidthOfInput)(this.input)}},{key:"_onKeyDown",value:function(e){var t,i=this;if(e.target===this.input||this.containerOuter.contains(e.target)){var n=e.target,o=this.store.getItemsFilteredByActive(),r=this.input===document.activeElement,a=this.dropdown.classList.contains(this.config.classNames.activeState),c=this.itemList&&this.itemList.children,l=String.fromCharCode(e.keyCode),u=46,h=8,d=13,f=65,p=27,m=38,g=40,y=33,b=34,E=e.ctrlKey||e.metaKey;this.isTextElement||!/[a-zA-Z0-9-_ ]/.test(l)||a||this.showDropdown(!0),this.canSearch=this.config.searchEnabled;var _=function(){E&&c&&(i.canSearch=!1,i.config.removeItems&&!i.input.value&&i.input===document.activeElement&&i.highlightAll())},S=function(){if(i.isTextElement&&n.value){var t=i.input.value,s=i._canAddItem(o,t);s.response&&(a&&i.hideDropdown(),i._addItem(t),i._triggerChange(t),i.clearInput())}if(n.hasAttribute("data-button")&&(i._handleButtonAction(o,n),e.preventDefault()),a){e.preventDefault();var r=i.dropdown.querySelector("."+i.config.classNames.highlightedState);r&&(o[0]&&(o[0].keyCode=d),i._handleChoiceAction(o,r))}else i.isSelectOneElement&&(a||(i.showDropdown(!0),e.preventDefault()))},I=function(){a&&(i.toggleDropdown(),i.containerOuter.focus())},w=function(){if(a||i.isSelectOneElement){a||i.showDropdown(!0),i.canSearch=!1;var t=e.keyCode===g||e.keyCode===b?1:-1,n=e.metaKey||e.keyCode===b||e.keyCode===y,s=void 0;if(n)s=t>0?Array.from(i.dropdown.querySelectorAll("[data-choice-selectable]")).pop():i.dropdown.querySelector("[data-choice-selectable]");else{var o=i.dropdown.querySelector("."+i.config.classNames.highlightedState);s=o?(0,v.getAdjacentEl)(o,"[data-choice-selectable]",t):i.dropdown.querySelector("[data-choice-selectable]")}s&&((0,v.isScrolledIntoView)(s,i.choiceList,t)||i._scrollToChoice(s,t),i._highlightChoice(s)),e.preventDefault()}},T=function(){!r||e.target.value||i.isSelectOneElement||(i._handleBackspace(o),e.preventDefault())},A=(t={},s(t,f,_),s(t,d,S),s(t,p,I),s(t,m,w),s(t,y,w),s(t,g,w),s(t,b,w),s(t,h,T),s(t,u,T),t);A[e.keyCode]&&A[e.keyCode]()}}},{key:"_onKeyUp",value:function(e){if(e.target===this.input){var t=this.input.value,i=this.store.getItemsFilteredByActive(),n=this._canAddItem(i,t);if(this.isTextElement){var s=this.dropdown.classList.contains(this.config.classNames.activeState);if(t){if(n.notice){var o=this._getTemplate("notice",n.notice);this.dropdown.innerHTML=o.outerHTML}n.response===!0?s||this.showDropdown():!n.notice&&s&&this.hideDropdown()}else s&&this.hideDropdown()}else{var r=46,a=8;e.keyCode!==r&&e.keyCode!==a||e.target.value?this.canSearch&&n.response&&this._handleSearch(this.input.value):!this.isTextElement&&this.isSearching&&(this.isSearching=!1,this.store.dispatch((0,p.activateChoices)(!0)))}this.canSearch=this.config.searchEnabled}}},{key:"_onInput",value:function(){this.isSelectOneElement||this._setInputWidth()}},{key:"_onTouchMove",value:function(){this.wasTap===!0&&(this.wasTap=!1)}},{key:"_onTouchEnd",value:function(e){var t=e.target||e.touches[0].target,i=this.dropdown.classList.contains(this.config.classNames.activeState);this.wasTap===!0&&this.containerOuter.contains(t)&&(t!==this.containerOuter&&t!==this.containerInner||this.isSelectOneElement||(this.isTextElement?document.activeElement!==this.input&&this.input.focus():i||this.showDropdown(!0)),e.stopPropagation()),this.wasTap=!0}},{key:"_onMouseDown",value:function(e){var t=e.target;if(this.containerOuter.contains(t)&&t!==this.input){var i=void 0,n=this.store.getItemsFilteredByActive(),s=e.shiftKey;(i=(0,v.findAncestorByAttrName)(t,"data-button"))?this._handleButtonAction(n,i):(i=(0,v.findAncestorByAttrName)(t,"data-item"))?this._handleItemAction(n,i,s):(i=(0,v.findAncestorByAttrName)(t,"data-choice"))&&this._handleChoiceAction(n,i),e.preventDefault()}}},{key:"_onClick",value:function(e){var t=e.target,i=this.dropdown.classList.contains(this.config.classNames.activeState),n=this.store.getItemsFilteredByActive();if(this.containerOuter.contains(t))t.hasAttribute("data-button")&&this._handleButtonAction(n,t),i?this.isSelectOneElement&&t!==this.input&&!this.dropdown.contains(t)&&this.hideDropdown(!0):this.isTextElement?document.activeElement!==this.input&&this.input.focus():this.canSearch?this.showDropdown(!0):(this.showDropdown(),this.containerOuter.focus());else{var s=n.some(function(e){return e.highlighted});s&&this.unhighlightAll(),this.containerOuter.classList.remove(this.config.classNames.focusState),i&&this.hideDropdown()}}},{key:"_onMouseOver",value:function(e){(e.target===this.dropdown||this.dropdown.contains(e.target))&&e.target.hasAttribute("data-choice")&&this._highlightChoice(e.target)}},{key:"_onPaste",value:function(e){e.target!==this.input||this.config.paste||e.preventDefault()}},{key:"_onFocus",value:function(e){var t=this,i=e.target;if(this.containerOuter.contains(i)){var n=this.dropdown.classList.contains(this.config.classNames.activeState),s={text:function(){i===t.input&&t.containerOuter.classList.add(t.config.classNames.focusState)},"select-one":function(){t.containerOuter.classList.add(t.config.classNames.focusState),i===t.input&&(n||t.showDropdown())},"select-multiple":function(){i===t.input&&(t.containerOuter.classList.add(t.config.classNames.focusState),n||t.showDropdown(!0))}};s[this.passedElement.type]()}}},{key:"_onBlur",value:function(e){var t=this,i=e.target;if(this.containerOuter.contains(i)){var n=this.store.getItemsFilteredByActive(),s=this.dropdown.classList.contains(this.config.classNames.activeState),o=n.some(function(e){return e.highlighted}),r={text:function(){i===t.input&&(t.containerOuter.classList.remove(t.config.classNames.focusState),o&&t.unhighlightAll(),s&&t.hideDropdown())},"select-one":function(){t.containerOuter.classList.remove(t.config.classNames.focusState),i===t.containerOuter&&s&&!t.canSearch&&t.hideDropdown(),i===t.input&&s&&t.hideDropdown()},"select-multiple":function(){i===t.input&&(t.containerOuter.classList.remove(t.config.classNames.focusState),s&&t.hideDropdown(),o&&t.unhighlightAll())}};r[this.passedElement.type]()}}},{key:"_regexFilter",value:function(e){if(!e)return!1;var t=this.config.regexFilter,i=new RegExp(t.source,"i");return i.test(e)}},{key:"_scrollToChoice",value:function(e,t){var i=this;if(e){var n=this.choiceList.offsetHeight,s=e.offsetHeight,o=e.offsetTop+s,r=this.choiceList.scrollTop+n,a=t>0?this.choiceList.scrollTop+o-r:e.offsetTop,c=function e(){var n=4,s=i.choiceList.scrollTop,o=!1,r=void 0,c=void 0;t>0?(r=(a-s)/n,c=r>1?r:1,i.choiceList.scrollTop=s+c,s<a&&(o=!0)):(r=(s-a)/n,c=r>1?r:1,i.choiceList.scrollTop=s-c,s>a&&(o=!0)),o&&requestAnimationFrame(function(i){e(i,a,t)})};requestAnimationFrame(function(e){c(e,a,t)})}}},{key:"_highlightChoice",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=Array.from(this.dropdown.querySelectorAll("[data-choice-selectable]")),n=t;if(i&&i.length){var s=Array.from(this.dropdown.querySelectorAll("."+this.config.classNames.highlightedState));s.forEach(function(t){t.classList.remove(e.config.classNames.highlightedState),t.setAttribute("aria-selected","false")}),n?this.highlightPosition=i.indexOf(n):(n=i.length>this.highlightPosition?i[this.highlightPosition]:i[i.length-1],n||(n=i[0])),n.classList.add(this.config.classNames.highlightedState),n.setAttribute("aria-selected","true"),this.containerOuter.setAttribute("aria-activedescendant",n.id),this.input.setAttribute("aria-activedescendant",n.id)}}},{key:"_addItem",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,r=(0,v.isType)("String",e)?e.trim():e,a=o,c=this.store.getItems(),l=t||r,u=parseInt(i,10)||-1,h=n>=0?this.store.getGroupById(n):null,d=c?c.length+1:1;return this.config.prependValue&&(r=this.config.prependValue+r.toString()),this.config.appendValue&&(r+=this.config.appendValue.toString()),this.store.dispatch((0,p.addItem)(r,l,d,u,n,s,a)),this.isSelectOneElement&&this.removeActiveItems(d),h&&h.value?(0,v.triggerEvent)(this.passedElement,"addItem",{id:d,value:r,label:l,groupValue:h.value,keyCode:a}):(0,v.triggerEvent)(this.passedElement,"addItem",{id:d,value:r,label:l,keyCode:a}),this}},{key:"_removeItem",value:function(e){if(!e||!(0,v.isType)("Object",e))return this;var t=e.id,i=e.value,n=e.label,s=e.choiceId,o=e.groupId,r=o>=0?this.store.getGroupById(o):null;return this.store.dispatch((0,p.removeItem)(t,s)),r&&r.value?(0,v.triggerEvent)(this.passedElement,"removeItem",{id:t,value:i,label:n,groupValue:r.value}):(0,v.triggerEvent)(this.passedElement,"removeItem",{id:t,value:i,label:n}),this}},{key:"_addChoice",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;
3
+ if("undefined"!=typeof e&&null!==e){var a=this.store.getChoices(),c=t||e,l=a?a.length+1:1,u=this.baseId+"-"+this.idNames.itemChoice+"-"+l;this.store.dispatch((0,p.addChoice)(e,c,l,s,n,u,o,r)),i&&this._addItem(e,c,l,void 0,o,r)}}},{key:"_clearChoices",value:function(){this.store.dispatch((0,p.clearChoices)())}},{key:"_addGroup",value:function(e,t){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"value",s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"label",o=(0,v.isType)("Object",e)?e.choices:Array.from(e.getElementsByTagName("OPTION")),r=t?t:Math.floor((new Date).valueOf()*Math.random()),a=!!e.disabled&&e.disabled;o?(this.store.dispatch((0,p.addGroup)(e.label,r,!0,a)),o.forEach(function(e){var t=e.disabled||e.parentNode&&e.parentNode.disabled,o=(0,v.isType)("Object",e)?e[s]:e.innerHTML;i._addChoice(e[n],o,e.selected,t,r,e.customProperties)})):this.store.dispatch((0,p.addGroup)(e.label,e.id,!1,e.disabled))}},{key:"_getTemplate",value:function(e){if(!e)return null;for(var t=this.config.templates,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];return t[e].apply(t,n)}},{key:"_createTemplates",value:function(){var e=this,t=this.config.classNames,i={containerOuter:function(i){return(0,v.strToEl)('\n <div\n class="'+t.containerOuter+'"\n '+(e.isSelectElement?e.config.searchEnabled?'role="combobox" aria-autocomplete="list"':'role="listbox"':"")+'\n data-type="'+e.passedElement.type+'"\n '+(e.isSelectOneElement?'tabindex="0"':"")+'\n aria-haspopup="true"\n aria-expanded="false"\n dir="'+i+'"\n >\n </div>\n ')},containerInner:function(){return(0,v.strToEl)('\n <div class="'+t.containerInner+'"></div>\n ')},itemList:function(){var i,n=(0,h.default)(t.list,(i={},s(i,t.listSingle,e.isSelectOneElement),s(i,t.listItems,!e.isSelectOneElement),i));return(0,v.strToEl)('\n <div class="'+n+'"></div>\n ')},placeholder:function(e){return(0,v.strToEl)('\n <div class="'+t.placeholder+'">\n '+e+"\n </div>\n ")},item:function(i){var n,o=(0,h.default)(t.item,(n={},s(n,t.highlightedState,i.highlighted),s(n,t.itemSelectable,!i.highlighted),n));if(e.config.removeItemButton){var r;return o=(0,h.default)(t.item,(r={},s(r,t.highlightedState,i.highlighted),s(r,t.itemSelectable,!i.disabled),r)),(0,v.strToEl)('\n <div\n class="'+o+'"\n data-item\n data-id="'+i.id+'"\n data-value="'+i.value+'"\n data-deletable\n '+(i.active?'aria-selected="true"':"")+"\n "+(i.disabled?'aria-disabled="true"':"")+"\n >\n "+i.label+'<!--\n --><button\n type="button"\n class="'+t.button+'"\n data-button\n aria-label="Remove item: \''+i.value+"'\"\n >\n Remove item\n </button>\n </div>\n ")}return(0,v.strToEl)('\n <div\n class="'+o+'"\n data-item\n data-id="'+i.id+'"\n data-value="'+i.value+'"\n '+(i.active?'aria-selected="true"':"")+"\n "+(i.disabled?'aria-disabled="true"':"")+"\n >\n "+i.label+"\n </div>\n ")},choiceList:function(){return(0,v.strToEl)('\n <div\n class="'+t.list+'"\n dir="ltr"\n role="listbox"\n '+(e.isSelectOneElement?"":'aria-multiselectable="true"')+"\n >\n </div>\n ")},choiceGroup:function(e){var i=(0,h.default)(t.group,s({},t.itemDisabled,e.disabled));return(0,v.strToEl)('\n <div\n class="'+i+'"\n data-group\n data-id="'+e.id+'"\n data-value="'+e.value+'"\n role="group"\n '+(e.disabled?'aria-disabled="true"':"")+'\n >\n <div class="'+t.groupHeading+'">'+e.value+"</div>\n </div>\n ")},choice:function(i){var n,o=(0,h.default)(t.item,t.itemChoice,(n={},s(n,t.itemDisabled,i.disabled),s(n,t.itemSelectable,!i.disabled),n));return(0,v.strToEl)('\n <div\n class="'+o+'"\n data-select-text="'+e.config.itemSelectText+'"\n data-choice\n data-id="'+i.id+'"\n data-value="'+i.value+'"\n '+(i.disabled?'data-choice-disabled aria-disabled="true"':"data-choice-selectable")+'\n id="'+i.elementId+'"\n '+(i.groupId>0?'role="treeitem"':'role="option"')+"\n >\n "+i.label+"\n </div>\n ")},input:function(){var e=(0,h.default)(t.input,t.inputCloned);return(0,v.strToEl)('\n <input\n type="text"\n class="'+e+'"\n autocomplete="off"\n autocapitalize="off"\n spellcheck="false"\n role="textbox"\n aria-autocomplete="list"\n >\n ')},dropdown:function(){var e=(0,h.default)(t.list,t.listDropdown);return(0,v.strToEl)('\n <div\n class="'+e+'"\n aria-expanded="false"\n >\n </div>\n ')},notice:function(e){var i=(0,h.default)(t.item,t.itemChoice);return(0,v.strToEl)('\n <div class="'+i+'">\n '+e+"\n </div>\n ")},option:function(e){return(0,v.strToEl)('\n <option value="'+e.value+'" selected>'+e.label+"</option>\n ")}},n=this.config.callbackOnCreateTemplates,o={};n&&(0,v.isType)("Function",n)&&(o=n.call(this,v.strToEl)),this.config.templates=(0,v.extend)(i,o)}},{key:"_createInput",value:function(){var e=this,t=this.passedElement.getAttribute("dir")||"ltr",i=this._getTemplate("containerOuter",t),n=this._getTemplate("containerInner"),s=this._getTemplate("itemList"),o=this._getTemplate("choiceList"),r=this._getTemplate("input"),a=this._getTemplate("dropdown"),c=!!this.config.placeholder&&(this.config.placeholderValue||this.passedElement.getAttribute("placeholder"));this.containerOuter=i,this.containerInner=n,this.input=r,this.choiceList=o,this.itemList=s,this.dropdown=a,this.passedElement.classList.add(this.config.classNames.input,this.config.classNames.hiddenState),this.passedElement.tabIndex="-1";var l=this.passedElement.getAttribute("style");if(Boolean(l)&&this.passedElement.setAttribute("data-choice-orig-style",l),this.passedElement.setAttribute("style","display:none;"),this.passedElement.setAttribute("aria-hidden","true"),this.passedElement.setAttribute("data-choice","active"),(0,v.wrap)(this.passedElement,n),(0,v.wrap)(n,i),c&&(r.placeholder=c,this.isSelectOneElement||(r.style.width=(0,v.getWidthOfInput)(r))),this.config.addItems||this.disable(),i.appendChild(n),i.appendChild(a),n.appendChild(s),this.isTextElement||a.appendChild(o),this.isSelectMultipleElement||this.isTextElement?n.appendChild(r):this.canSearch&&a.insertBefore(r,a.firstChild),this.isSelectElement){var u=Array.from(this.passedElement.getElementsByTagName("OPTGROUP"));if(this.highlightPosition=0,this.isSearching=!1,u&&u.length)u.forEach(function(t){e._addGroup(t,t.id||null)});else{var h=Array.from(this.passedElement.options),d=this.config.sortFilter,f=this.presetChoices;h.forEach(function(e){f.push({value:e.value,label:e.innerHTML,selected:e.selected,disabled:e.disabled||e.parentNode.disabled})}),this.config.shouldSort&&f.sort(d);var p=f.some(function(e){return e.selected});f.forEach(function(t,i){e.isSelectOneElement?p||!p&&i>0?e._addChoice(t.value,t.label,t.selected,t.disabled,void 0,t.customProperties):e._addChoice(t.value,t.label,!0,!1,void 0,t.customProperties):e._addChoice(t.value,t.label,t.selected,t.disabled,void 0,t.customProperties)})}}else this.isTextElement&&this.presetItems.forEach(function(t){var i=(0,v.getType)(t);if("Object"===i){if(!t.value)return;e._addItem(t.value,t.label,t.id,void 0,t.customProperties)}else"String"===i&&e._addItem(t)})}}]),e}();e.exports=m},function(e,t,i){!function(t){"use strict";function i(){console.log.apply(console,arguments)}function n(e,t){var i;this.list=e,this.options=t=t||{};for(i in a)a.hasOwnProperty(i)&&("boolean"==typeof a[i]?this.options[i]=i in t?t[i]:a[i]:this.options[i]=t[i]||a[i])}function s(e,t,i){var n,r,a,c,l,u;if(t){if(a=t.indexOf("."),a!==-1?(n=t.slice(0,a),r=t.slice(a+1)):n=t,c=e[n],null!==c&&void 0!==c)if(r||"string"!=typeof c&&"number"!=typeof c)if(o(c))for(l=0,u=c.length;l<u;l++)s(c[l],r,i);else r&&s(c,r,i);else i.push(c)}else i.push(e);return i}function o(e){return"[object Array]"===Object.prototype.toString.call(e)}function r(e,t){t=t||{},this.options=t,this.options.location=t.location||r.defaultOptions.location,this.options.distance="distance"in t?t.distance:r.defaultOptions.distance,this.options.threshold="threshold"in t?t.threshold:r.defaultOptions.threshold,this.options.maxPatternLength=t.maxPatternLength||r.defaultOptions.maxPatternLength,this.pattern=t.caseSensitive?e:e.toLowerCase(),this.patternLen=e.length,this.patternLen<=this.options.maxPatternLength&&(this.matchmask=1<<this.patternLen-1,this.patternAlphabet=this._calculatePatternAlphabet())}var a={id:null,caseSensitive:!1,include:[],shouldSort:!0,searchFn:r,sortFn:function(e,t){return e.score-t.score},getFn:s,keys:[],verbose:!1,tokenize:!1,matchAllTokens:!1,tokenSeparator:/ +/g,minMatchCharLength:1,findAllMatches:!1};n.VERSION="2.7.3",n.prototype.set=function(e){return this.list=e,e},n.prototype.search=function(e){this.options.verbose&&i("\nSearch term:",e,"\n"),this.pattern=e,this.results=[],this.resultMap={},this._keyMap=null,this._prepareSearchers(),this._startSearch(),this._computeScore(),this._sort();var t=this._format();return t},n.prototype._prepareSearchers=function(){var e=this.options,t=this.pattern,i=e.searchFn,n=t.split(e.tokenSeparator),s=0,o=n.length;if(this.options.tokenize)for(this.tokenSearchers=[];s<o;s++)this.tokenSearchers.push(new i(n[s],e));this.fullSeacher=new i(t,e)},n.prototype._startSearch=function(){var e,t,i,n,s=this.options,o=s.getFn,r=this.list,a=r.length,c=this.options.keys,l=c.length,u=null;if("string"==typeof r[0])for(i=0;i<a;i++)this._analyze("",r[i],i,i);else for(this._keyMap={},i=0;i<a;i++)for(u=r[i],n=0;n<l;n++){if(e=c[n],"string"!=typeof e){if(t=1-e.weight||1,this._keyMap[e.name]={weight:t},e.weight<=0||e.weight>1)throw new Error("Key weight has to be > 0 and <= 1");e=e.name}else this._keyMap[e]={weight:1};this._analyze(e,o(u,e,[]),u,i)}},n.prototype._analyze=function(e,t,n,s){var r,a,c,l,u,h,d,f,p,v,m,g,y,b,E,_=this.options,S=!1;if(void 0!==t&&null!==t){a=[];var I=0;if("string"==typeof t){if(r=t.split(_.tokenSeparator),_.verbose&&i("---------\nKey:",e),this.options.tokenize){for(b=0;b<this.tokenSearchers.length;b++){for(f=this.tokenSearchers[b],_.verbose&&i("Pattern:",f.pattern),p=[],g=!1,E=0;E<r.length;E++){v=r[E],m=f.search(v);var w={};m.isMatch?(w[v]=m.score,S=!0,g=!0,a.push(m.score)):(w[v]=1,this.options.matchAllTokens||a.push(1)),p.push(w)}g&&I++,_.verbose&&i("Token scores:",p)}for(l=a[0],h=a.length,b=1;b<h;b++)l+=a[b];l/=h,_.verbose&&i("Token score average:",l)}d=this.fullSeacher.search(t),_.verbose&&i("Full text score:",d.score),u=d.score,void 0!==l&&(u=(u+l)/2),_.verbose&&i("Score average:",u),y=!this.options.tokenize||!this.options.matchAllTokens||I>=this.tokenSearchers.length,_.verbose&&i("Check Matches",y),(S||d.isMatch)&&y&&(c=this.resultMap[s],c?c.output.push({key:e,score:u,matchedIndices:d.matchedIndices}):(this.resultMap[s]={item:n,output:[{key:e,score:u,matchedIndices:d.matchedIndices}]},this.results.push(this.resultMap[s])))}else if(o(t))for(b=0;b<t.length;b++)this._analyze(e,t[b],n,s)}},n.prototype._computeScore=function(){var e,t,n,s,o,r,a,c,l,u=this._keyMap,h=this.results;for(this.options.verbose&&i("\n\nComputing score:\n"),e=0;e<h.length;e++){for(n=0,s=h[e].output,o=s.length,c=1,t=0;t<o;t++)r=s[t].score,a=u?u[s[t].key].weight:1,l=r*a,1!==a?c=Math.min(c,l):(n+=l,s[t].nScore=l);1===c?h[e].score=n/o:h[e].score=c,this.options.verbose&&i(h[e])}},n.prototype._sort=function(){var e=this.options;e.shouldSort&&(e.verbose&&i("\n\nSorting...."),this.results.sort(e.sortFn))},n.prototype._format=function(){var e,t,n,s,o=this.options,r=o.getFn,a=[],c=this.results,l=o.include;for(o.verbose&&i("\n\nOutput:\n\n",c),n=o.id?function(e){c[e].item=r(c[e].item,o.id,[])[0]}:function(){},s=function(e){var t,i,n,s,o,r=c[e];if(l.length>0){if(t={item:r.item},l.indexOf("matches")!==-1)for(n=r.output,t.matches=[],i=0;i<n.length;i++)s=n[i],o={indices:s.matchedIndices},s.key&&(o.key=s.key),t.matches.push(o);l.indexOf("score")!==-1&&(t.score=c[e].score)}else t=r.item;return t},e=0,t=c.length;e<t;e++)n(e),a.push(s(e));return a},r.defaultOptions={location:0,distance:100,threshold:.6,maxPatternLength:32},r.prototype._calculatePatternAlphabet=function(){var e={},t=0;for(t=0;t<this.patternLen;t++)e[this.pattern.charAt(t)]=0;for(t=0;t<this.patternLen;t++)e[this.pattern.charAt(t)]|=1<<this.pattern.length-t-1;return e},r.prototype._bitapScore=function(e,t){var i=e/this.patternLen,n=Math.abs(this.options.location-t);return this.options.distance?i+n/this.options.distance:n?1:i},r.prototype.search=function(e){var t,i,n,s,o,r,a,c,l,u,h,d,f,p,v,m,g,y,b,E,_,S,I,w=this.options;if(e=w.caseSensitive?e:e.toLowerCase(),this.pattern===e)return{isMatch:!0,score:0,matchedIndices:[[0,e.length-1]]};if(this.patternLen>w.maxPatternLength){if(y=e.match(new RegExp(this.pattern.replace(w.tokenSeparator,"|"))),b=!!y)for(_=[],t=0,S=y.length;t<S;t++)I=y[t],_.push([e.indexOf(I),I.length-1]);return{isMatch:b,score:b?.5:1,matchedIndices:_}}for(s=w.findAllMatches,o=w.location,n=e.length,r=w.threshold,a=e.indexOf(this.pattern,o),E=[],t=0;t<n;t++)E[t]=0;for(a!=-1&&(r=Math.min(this._bitapScore(0,a),r),a=e.lastIndexOf(this.pattern,o+this.patternLen),a!=-1&&(r=Math.min(this._bitapScore(0,a),r))),a=-1,m=1,g=[],u=this.patternLen+n,t=0;t<this.patternLen;t++){for(c=0,l=u;c<l;)this._bitapScore(t,o+l)<=r?c=l:u=l,l=Math.floor((u-c)/2+c);for(u=l,h=Math.max(1,o-l+1),d=s?n:Math.min(o+l,n)+this.patternLen,f=Array(d+2),f[d+1]=(1<<t)-1,i=d;i>=h;i--)if(v=this.patternAlphabet[e.charAt(i-1)],v&&(E[i-1]=1),f[i]=(f[i+1]<<1|1)&v,0!==t&&(f[i]|=(p[i+1]|p[i])<<1|1|p[i+1]),f[i]&this.matchmask&&(m=this._bitapScore(t,i-1),m<=r)){if(r=m,a=i-1,g.push(a),a<=o)break;h=Math.max(1,2*o-a)}if(this._bitapScore(t+1,o)>r)break;p=f}return _=this._getMatchedIndices(E),{isMatch:a>=0,score:0===m?.001:m,matchedIndices:_}},r.prototype._getMatchedIndices=function(e){for(var t,i=[],n=-1,s=-1,o=0,r=e.length;o<r;o++)t=e[o],t&&n===-1?n=o:t||n===-1||(s=o-1,s-n+1>=this.options.minMatchCharLength&&i.push([n,s]),n=-1);return e[o-1]&&o-1-n+1>=this.options.minMatchCharLength&&i.push([n,o-1]),i},e.exports=n}(this)},function(e,t,i){var n,s;!function(){"use strict";function i(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var s=typeof n;if("string"===s||"number"===s)e.push(n);else if(Array.isArray(n))e.push(i.apply(null,n));else if("object"===s)for(var r in n)o.call(n,r)&&n[r]&&e.push(r)}}return e.join(" ")}var o={}.hasOwnProperty;"undefined"!=typeof e&&e.exports?e.exports=i:(n=[],s=function(){return i}.apply(t,n),!(void 0!==s&&(e.exports=s)))}()},function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),r=i(5),a=i(26),c=n(a),l=function(){function e(){s(this,e),this.store=(0,r.createStore)(c.default,window.devToolsExtension?window.devToolsExtension():void 0)}return o(e,[{key:"getState",value:function(){return this.store.getState()}},{key:"dispatch",value:function(e){this.store.dispatch(e)}},{key:"subscribe",value:function(e){this.store.subscribe(e)}},{key:"getItems",value:function(){var e=this.store.getState();return e.items}},{key:"getItemsFilteredByActive",value:function(){var e=this.getItems(),t=e.filter(function(e){return e.active===!0},[]);return t}},{key:"getItemsReducedToValues",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getItems(),t=e.reduce(function(e,t){return e.push(t.value),e},[]);return t}},{key:"getChoices",value:function(){var e=this.store.getState();return e.choices}},{key:"getChoicesFilteredByActive",value:function(){var e=this.getChoices(),t=e.filter(function(e){return e.active===!0},[]);return t}},{key:"getChoicesFilteredBySelectable",value:function(){var e=this.getChoices(),t=e.filter(function(e){return e.disabled!==!0},[]);return t}},{key:"getChoiceById",value:function(e){if(e){var t=this.getChoicesFilteredByActive(),i=t.find(function(t){return t.id===parseInt(e,10)});return i}return!1}},{key:"getGroups",value:function(){var e=this.store.getState();return e.groups}},{key:"getGroupsFilteredByActive",value:function(){var e=this.getGroups(),t=this.getChoices(),i=e.filter(function(e){var i=e.active===!0&&e.disabled===!1,n=t.some(function(e){return e.active===!0&&e.disabled===!1});return i&&n},[]);return i}},{key:"getGroupById",value:function(e){var t=this.getGroups(),i=t.find(function(t){return t.id===e});return i}}]),e}();t.default=l,e.exports=l},function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.compose=t.applyMiddleware=t.bindActionCreators=t.combineReducers=t.createStore=void 0;var s=i(6),o=n(s),r=i(21),a=n(r),c=i(23),l=n(c),u=i(24),h=n(u),d=i(25),f=n(d),p=i(22);n(p);t.createStore=o.default,t.combineReducers=a.default,t.bindActionCreators=l.default,t.applyMiddleware=h.default,t.compose=f.default},function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function s(e,t,i){function n(){g===m&&(g=m.slice())}function o(){return v}function a(e){if("function"!=typeof e)throw new Error("Expected listener to be a function.");var t=!0;return n(),g.push(e),function(){if(t){t=!1,n();var i=g.indexOf(e);g.splice(i,1)}}}function u(e){if(!(0,r.default)(e))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if("undefined"==typeof e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(y)throw new Error("Reducers may not dispatch actions.");try{y=!0,v=p(v,e)}finally{y=!1}for(var t=m=g,i=0;i<t.length;i++)t[i]();return e}function h(e){if("function"!=typeof e)throw new Error("Expected the nextReducer to be a function.");p=e,u({type:l.INIT})}function d(){var e,t=a;return e={subscribe:function(e){function i(){e.next&&e.next(o())}if("object"!=typeof e)throw new TypeError("Expected the observer to be an object.");i();var n=t(i);return{unsubscribe:n}}},e[c.default]=function(){return this},e}var f;if("function"==typeof t&&"undefined"==typeof i&&(i=t,t=void 0),"undefined"!=typeof i){if("function"!=typeof i)throw new Error("Expected the enhancer to be a function.");return i(s)(e,t)}if("function"!=typeof e)throw new Error("Expected the reducer to be a function.");var p=e,v=t,m=[],g=m,y=!1;return u({type:l.INIT}),f={dispatch:u,subscribe:a,getState:o,replaceReducer:h},f[c.default]=d,f}t.__esModule=!0,t.ActionTypes=void 0,t.default=s;var o=i(7),r=n(o),a=i(17),c=n(a),l=t.ActionTypes={INIT:"@@redux/INIT"}},function(e,t,i){function n(e){if(!r(e)||s(e)!=a)return!1;var t=o(e);if(null===t)return!0;var i=h.call(t,"constructor")&&t.constructor;return"function"==typeof i&&i instanceof i&&u.call(i)==d}var s=i(8),o=i(14),r=i(16),a="[object Object]",c=Function.prototype,l=Object.prototype,u=c.toString,h=l.hasOwnProperty,d=u.call(Object);e.exports=n},function(e,t,i){function n(e){return null==e?void 0===e?c:a:l&&l in Object(e)?o(e):r(e)}var s=i(9),o=i(12),r=i(13),a="[object Null]",c="[object Undefined]",l=s?s.toStringTag:void 0;e.exports=n},function(e,t,i){var n=i(10),s=n.Symbol;e.exports=s},function(e,t,i){var n=i(11),s="object"==typeof self&&self&&self.Object===Object&&self,o=n||s||Function("return this")();e.exports=o},function(e,t){(function(t){var i="object"==typeof t&&t&&t.Object===Object&&t;e.exports=i}).call(t,function(){return this}())},function(e,t,i){function n(e){var t=r.call(e,c),i=e[c];try{e[c]=void 0;var n=!0}catch(e){}var s=a.call(e);return n&&(t?e[c]=i:delete e[c]),s}var s=i(9),o=Object.prototype,r=o.hasOwnProperty,a=o.toString,c=s?s.toStringTag:void 0;e.exports=n},function(e,t){function i(e){return s.call(e)}var n=Object.prototype,s=n.toString;e.exports=i},function(e,t,i){var n=i(15),s=n(Object.getPrototypeOf,Object);e.exports=s},function(e,t){function i(e,t){return function(i){return e(t(i))}}e.exports=i},function(e,t){function i(e){return null!=e&&"object"==typeof e}e.exports=i},function(e,t,i){e.exports=i(18)},function(e,t,i){(function(e,n){"use strict";function s(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o,r=i(20),a=s(r);o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof e?e:n;var c=(0,a.default)(o);t.default=c}).call(t,function(){return this}(),i(19)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t){"use strict";function i(e){var t,i=e.Symbol;return"function"==typeof i?i.observable?t=i.observable:(t=i("observable"),i.observable=t):t="@@observable",t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i},function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function s(e,t){var i=t&&t.type,n=i&&'"'+i.toString()+'"'||"an action";return"Given action "+n+', reducer "'+e+'" returned undefined. To ignore an action, you must explicitly return the previous state.'}function o(e){Object.keys(e).forEach(function(t){var i=e[t],n=i(void 0,{type:a.ActionTypes.INIT});if("undefined"==typeof n)throw new Error('Reducer "'+t+'" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined.');var s="@@redux/PROBE_UNKNOWN_ACTION_"+Math.random().toString(36).substring(7).split("").join(".");if("undefined"==typeof i(void 0,{type:s}))throw new Error('Reducer "'+t+'" returned undefined when probed with a random type. '+("Don't try to handle "+a.ActionTypes.INIT+' or other actions in "redux/*" ')+"namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined.")})}function r(e){for(var t=Object.keys(e),i={},n=0;n<t.length;n++){var r=t[n];"function"==typeof e[r]&&(i[r]=e[r])}var a,c=Object.keys(i);try{o(i)}catch(e){a=e}return function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],t=arguments[1];if(a)throw a;for(var n=!1,o={},r=0;r<c.length;r++){var l=c[r],u=i[l],h=e[l],d=u(h,t);if("undefined"==typeof d){var f=s(l,t);throw new Error(f)}o[l]=d,n=n||d!==h}return n?o:e}}t.__esModule=!0,t.default=r;var a=i(6),c=i(7),l=(n(c),i(22));n(l)},function(e,t){"use strict";function i(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e);try{throw new Error(e)}catch(e){}}t.__esModule=!0,t.default=i},function(e,t){"use strict";function i(e,t){return function(){return t(e.apply(void 0,arguments))}}function n(e,t){if("function"==typeof e)return i(e,t);if("object"!=typeof e||null===e)throw new Error("bindActionCreators expected an object or a function, instead received "+(null===e?"null":typeof e)+'. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');for(var n=Object.keys(e),s={},o=0;o<n.length;o++){var r=n[o],a=e[r];"function"==typeof a&&(s[r]=i(a,t))}return s}t.__esModule=!0,t.default=n},function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function s(){for(var e=arguments.length,t=Array(e),i=0;i<e;i++)t[i]=arguments[i];return function(e){return function(i,n,s){var r=e(i,n,s),c=r.dispatch,l=[],u={getState:r.getState,dispatch:function(e){return c(e)}};return l=t.map(function(e){return e(u)}),c=a.default.apply(void 0,l)(r.dispatch),o({},r,{dispatch:c})}}}t.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n])}return e};t.default=s;var r=i(25),a=n(r)},function(e,t){"use strict";function i(){for(var e=arguments.length,t=Array(e),i=0;i<e;i++)t[i]=arguments[i];if(0===t.length)return function(e){return e};if(1===t.length)return t[0];var n=t[t.length-1],s=t.slice(0,-1);return function(){return s.reduceRight(function(e,t){return t(e)},n.apply(void 0,arguments))}}t.__esModule=!0,t.default=i},function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=i(5),o=i(27),r=n(o),a=i(28),c=n(a),l=i(29),u=n(l),h=(0,s.combineReducers)({items:r.default,groups:c.default,choices:u.default}),d=function(e,t){var i=e;return"CLEAR_ALL"===t.type&&(i=void 0),h(i,t)};t.default=d},function(e,t){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];switch(t.type){case"ADD_ITEM":var n=[].concat(i(e),[{id:t.id,choiceId:t.choiceId,groupId:t.groupId,value:t.value,label:t.label,active:!0,highlighted:!1,customProperties:t.customProperties,keyCode:null}]);return n.map(function(e){return e.highlighted&&(e.highlighted=!1),e});case"REMOVE_ITEM":return e.map(function(e){return e.id===t.id&&(e.active=!1),e});case"HIGHLIGHT_ITEM":return e.map(function(e){return e.id===t.id&&(e.highlighted=t.highlighted),e});default:return e}};t.default=n},function(e,t){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];switch(t.type){case"ADD_GROUP":return[].concat(i(e),[{id:t.id,value:t.value,active:t.active,disabled:t.disabled}]);case"CLEAR_CHOICES":return e.groups=[];default:return e}};t.default=n},function(e,t){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];switch(t.type){case"ADD_CHOICE":return[].concat(i(e),[{id:t.id,elementId:t.elementId,groupId:t.groupId,value:t.value,label:t.label||t.value,disabled:t.disabled||!1,selected:!1,active:!0,score:9999,customProperties:t.customProperties,keyCode:null}]);case"ADD_ITEM":var n=e;return t.activateOptions&&(n=e.map(function(e){return e.active=t.active,e})),t.choiceId>-1&&(n=e.map(function(e){return e.id===parseInt(t.choiceId,10)&&(e.selected=!0),e})),n;case"REMOVE_ITEM":return t.choiceId>-1?e.map(function(e){return e.id===parseInt(t.choiceId,10)&&(e.selected=!1),e}):e;case"FILTER_CHOICES":var s=t.results,o=e.map(function(e){return e.active=s.some(function(t){return t.item.id===e.id&&(e.score=t.score,!0)}),e});return o;case"ACTIVATE_CHOICES":return e.map(function(e){return e.active=t.active,e});case"CLEAR_CHOICES":return e.choices=[];default:return e}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.addItem=function(e,t,i,n,s,o,r){return{type:"ADD_ITEM",value:e,label:t,id:i,choiceId:n,groupId:s,customProperties:o,keyCode:r}},t.removeItem=function(e,t){return{type:"REMOVE_ITEM",id:e,choiceId:t}},t.highlightItem=function(e,t){return{type:"HIGHLIGHT_ITEM",id:e,highlighted:t}},t.addChoice=function(e,t,i,n,s,o,r,a){return{type:"ADD_CHOICE",value:e,label:t,id:i,groupId:n,disabled:s,elementId:o,customProperties:r,keyCode:a}},t.filterChoices=function(e){return{type:"FILTER_CHOICES",results:e}},t.activateChoices=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return{type:"ACTIVATE_CHOICES",active:e}},t.clearChoices=function(){return{type:"CLEAR_CHOICES"}},t.addGroup=function(e,t,i,n){return{type:"ADD_GROUP",value:e,id:t,active:i,disabled:n}},t.clearAll=function(){return{type:"CLEAR_ALL"}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=(t.capitalise=function(e){return e.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},t.generateChars=function(e){for(var t="",i=0;i<e;i++){var n=a(0,36);t+=n.toString(36)}return t}),s=(t.generateId=function(e,t){var i=e.id||e.name&&e.name+"-"+n(2)||n(4);return i=i.replace(/(:|\.|\[|\]|,)/g,""),i=t+i},t.getType=function(e){return Object.prototype.toString.call(e).slice(8,-1)}),o=t.isType=function(e,t){var i=s(t);return void 0!==t&&null!==t&&i===e},r=(t.isNode=function(e){return"object"===("undefined"==typeof Node?"undefined":i(Node))?e instanceof Node:e&&"object"===("undefined"==typeof e?"undefined":i(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},t.isElement=function(e){return"object"===("undefined"==typeof HTMLElement?"undefined":i(HTMLElement))?e instanceof HTMLElement:e&&"object"===("undefined"==typeof e?"undefined":i(e))&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName},t.extend=function e(){for(var t={},i=arguments.length,n=function(i){for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(o("Object",i[n])?t[n]=e(!0,t[n],i[n]):t[n]=i[n])},s=0;s<i;s++){var r=arguments[s];o("Object",r)&&n(r)}return t},t.whichTransitionEvent=function(){var e,t=document.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in i)if(void 0!==t.style[e])return i[e]},t.whichAnimationEvent=function(){var e,t=document.createElement("fakeelement"),i={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}),a=(t.getParentsUntil=function(e,t,i){for(var n=[];e&&e!==document;e=e.parentNode){if(t){var s=t.charAt(0);if("."===s&&e.classList.contains(t.substr(1)))break;if("#"===s&&e.id===t.substr(1))break;if("["===s&&e.hasAttribute(t.substr(1,t.length-1)))break;if(e.tagName.toLowerCase()===t)break}if(i){var o=i.charAt(0);"."===o&&e.classList.contains(i.substr(1))&&n.push(e),"#"===o&&e.id===i.substr(1)&&n.push(e),"["===o&&e.hasAttribute(i.substr(1,i.length-1))&&n.push(e),e.tagName.toLowerCase()===i&&n.push(e)}else n.push(e)}return 0===n.length?null:n},t.wrap=function(e,t){return t=t||document.createElement("div"),e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.appendChild(e)},t.getSiblings=function(e){for(var t=[],i=e.parentNode.firstChild;i;i=i.nextSibling)1===i.nodeType&&i!==e&&t.push(i);return t},t.findAncestor=function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e},t.findAncestorByAttrName=function(e,t){for(var i=e;i;){if(i.hasAttribute(t))return i;i=i.parentElement}return null},t.debounce=function(e,t,i){var n;return function(){var s=this,o=arguments,r=function(){n=null,i||e.apply(s,o)},a=i&&!n;clearTimeout(n),n=setTimeout(r,t),a&&e.apply(s,o)}},t.getElemDistance=function(e){var t=0;if(e.offsetParent)do t+=e.offsetTop,e=e.offsetParent;while(e);return t>=0?t:0},t.getElementOffset=function(e,t){var i=t;return i>1&&(i=1),
4
+ i>0&&(i=0),Math.max(e.offsetHeight*i)},t.getAdjacentEl=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;if(e&&t){var n=e.parentNode.parentNode,s=Array.from(n.querySelectorAll(t)),o=s.indexOf(e),r=i>0?1:-1;return s[o+r]}},t.getScrollPosition=function(e){return"bottom"===e?Math.max((window.scrollY||window.pageYOffset)+(window.innerHeight||document.documentElement.clientHeight)):window.scrollY||window.pageYOffset},t.isInView=function(e,t,i){return this.getScrollPosition(t)>this.getElemDistance(e)+this.getElementOffset(e,i)},t.isScrolledIntoView=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;if(e){var n=void 0;return n=i>0?t.scrollTop+t.offsetHeight>=e.offsetTop+e.offsetHeight:e.offsetTop>=t.scrollTop}},t.stripHTML=function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""},t.addAnimation=function(e,t){var i=r(),n=function n(){e.classList.remove(t),e.removeEventListener(i,n,!1)};e.classList.add(t),e.addEventListener(i,n,!1)},t.getRandomNumber=function(e,t){return Math.floor(Math.random()*(t-e)+e)}),c=t.strToEl=function(){var e=document.createElement("div");return function(t){var i=t.trim(),n=void 0;for(e.innerHTML=i,n=e.children[0];e.firstChild;)e.removeChild(e.firstChild);return n}}();t.getWidthOfInput=function(e){var t=e.value||e.placeholder,i=e.offsetWidth;if(t){var n=c("<span>"+t+"</span>");n.style.position="absolute",n.style.padding="0",n.style.top="-9999px",n.style.left="-9999px",n.style.width="auto",n.style.whiteSpace="pre",document.body.appendChild(n),t&&n.offsetWidth!==e.offsetWidth&&(i=n.offsetWidth+4),document.body.removeChild(n)}return i+"px"},t.sortByAlpha=function(e,t){var i=(e.label||e.value).toLowerCase(),n=(t.label||t.value).toLowerCase();return i<n?-1:i>n?1:0},t.sortByScore=function(e,t){return e.score-t.score},t.triggerEvent=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=new CustomEvent(t,{detail:i,bubbles:!0,cancelable:!0});return e.dispatchEvent(n)}},function(e,t){"use strict";!function(){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var i=document.createEvent("CustomEvent");return i.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i}Array.from||(Array.from=function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},i=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},n=Math.pow(2,53)-1,s=function(e){var t=i(e);return Math.min(Math.max(t,0),n)};return function(e){var i=this,n=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var o,r=arguments.length>1?arguments[1]:void 0;if("undefined"!=typeof r){if(!t(r))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(o=arguments[2])}for(var a,c=s(n.length),l=t(i)?Object(new i(c)):new Array(c),u=0;u<c;)a=n[u],r?l[u]="undefined"==typeof o?r(a,u):r.call(o,a,u):l[u]=a,u+=1;return l.length=c,l}}()),Array.prototype.find||(Array.prototype.find=function(e){if(null==this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var t,i=Object(this),n=i.length>>>0,s=arguments[1],o=0;o<n;o++)if(t=i[o],e.call(s,t,o,i))return t}),e.prototype=window.Event.prototype,window.CustomEvent=e}()}])});
assets/js/jquery.fitvids.js DELETED
@@ -1,87 +0,0 @@
1
- /*jshint browser:true */
2
- /*!
3
- * FitVids 1.1
4
- *
5
- * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
6
- * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
7
- * Released under the WTFPL license - http://sam.zoy.org/wtfpl/
8
- *
9
- */
10
-
11
- ;(function( $ ){
12
-
13
- 'use strict';
14
-
15
- $.fn.fitVids = function( options ) {
16
- var settings = {
17
- customSelector: null,
18
- ignore: null
19
- };
20
-
21
- if(!document.getElementById('fit-vids-style')) {
22
- // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
23
- var head = document.head || document.getElementsByTagName('head')[0];
24
- var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
25
- var div = document.createElement("div");
26
- div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>';
27
- head.appendChild(div.childNodes[1]);
28
- }
29
-
30
- if ( options ) {
31
- $.extend( settings, options );
32
- }
33
-
34
- return this.each(function(){
35
- var selectors = [
36
- 'iframe[src*="player.vimeo.com"]',
37
- 'iframe[src*="youtube.com"]',
38
- 'iframe[src*="youtube-nocookie.com"]',
39
- 'iframe[src*="kickstarter.com"][src*="video.html"]',
40
- 'object',
41
- 'embed'
42
- ];
43
-
44
- if (settings.customSelector) {
45
- selectors.push(settings.customSelector);
46
- }
47
-
48
- var ignoreList = '.fitvidsignore';
49
-
50
- if(settings.ignore) {
51
- ignoreList = ignoreList + ', ' + settings.ignore;
52
- }
53
-
54
- var $allVideos = $(this).find(selectors.join(','));
55
- $allVideos = $allVideos.not('object object'); // SwfObj conflict patch
56
- $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
57
-
58
- $allVideos.each(function(){
59
- var $this = $(this);
60
- if($this.parents(ignoreList).length > 0) {
61
- return; // Disable FitVids on this video.
62
- }
63
- if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
64
- if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
65
- {
66
- $this.attr('height', 9);
67
- $this.attr('width', 16);
68
- }
69
- var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
70
- width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
71
- aspectRatio = height / width;
72
- if(!$this.attr('name')){
73
- var videoName = 'fitvid' + $.fn.fitVids._count;
74
- $this.attr('name', videoName);
75
- $.fn.fitVids._count++;
76
- }
77
- $this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
78
- $this.removeAttr('height').removeAttr('width');
79
- });
80
- });
81
- };
82
-
83
- // Internal counter for unique video names.
84
- $.fn.fitVids._count = 0;
85
-
86
- // Works with either jQuery or Zepto
87
- })( window.jQuery || window.Zepto );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/jquery.minicolors.min.js CHANGED
@@ -1,11 +1,8 @@
1
- /*
2
- * jQuery MiniColors: A tiny color picker built on jQuery
3
- *
4
- * Copyright: Cory LaViska for A Beautiful Site, LLC: http://www.abeautifulsite.net/
5
- *
6
- * Contribute: https://github.com/claviska/jquery-minicolors
7
- *
8
- * @license: http://opensource.org/licenses/MIT
9
- *
10
- */
11
- !function(i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function($){"use strict";function i(i,t){var o=$('<div class="minicolors" />'),s=$.minicolors.defaults,a,n,r,c,l;if(!i.data("minicolors-initialized")){if(t=$.extend(!0,{},s,t),o.addClass("minicolors-theme-"+t.theme).toggleClass("minicolors-with-opacity",t.opacity).toggleClass("minicolors-no-data-uris",t.dataUris!==!0),void 0!==t.position&&$.each(t.position.split(" "),function(){o.addClass("minicolors-position-"+this)}),a="rgb"===t.format?t.opacity?"25":"20":t.keywords?"11":"7",i.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",t).prop("size",a).wrap(o).after('<div class="minicolors-panel minicolors-slider-'+t.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),t.inline||(i.after('<span class="minicolors-swatch minicolors-sprite minicolors-input-swatch"><span class="minicolors-swatch-color"></span></span>'),i.next(".minicolors-input-swatch").on("click",function(t){t.preventDefault(),i.focus()})),c=i.parent().find(".minicolors-panel"),c.on("selectstart",function(){return!1}).end(),t.swatches&&0!==t.swatches.length)for(t.swatches.length>7&&(t.swatches.length=7),c.addClass("minicolors-with-swatches"),n=$('<ul class="minicolors-swatches"></ul>').appendTo(c),l=0;l<t.swatches.length;++l)r=t.swatches[l],r=f(r)?u(r,!0):x(p(r,!0)),$('<li class="minicolors-swatch minicolors-sprite"><span class="minicolors-swatch-color"></span></li>').appendTo(n).data("swatch-color",t.swatches[l]).find(".minicolors-swatch-color").css({backgroundColor:y(r),opacity:r.a}),t.swatches[l]=r;t.inline&&i.parent().addClass("minicolors-inline"),e(i,!1),i.data("minicolors-initialized",!0)}}function t(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function o(i){var t=i.parent(),o=t.find(".minicolors-panel"),a=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(s(),t.addClass("minicolors-focus"),o.stop(!0,!0).fadeIn(a.showSpeed,function(){a.show&&a.show.call(i.get(0))}))}function s(){$(".minicolors-focus").each(function(){var i=$(this),t=i.find(".minicolors-input"),o=i.find(".minicolors-panel"),s=t.data("minicolors-settings");o.fadeOut(s.hideSpeed,function(){s.hide&&s.hide.call(t.get(0)),i.removeClass("minicolors-focus")})})}function a(i,t,o){var s=i.parents(".minicolors").find(".minicolors-input"),a=s.data("minicolors-settings"),r=i.find("[class$=-picker]"),e=i.offset().left,c=i.offset().top,l=Math.round(t.pageX-e),h=Math.round(t.pageY-c),d=o?a.animationSpeed:0,p,u,g,m;t.originalEvent.changedTouches&&(l=t.originalEvent.changedTouches[0].pageX-e,h=t.originalEvent.changedTouches[0].pageY-c),0>l&&(l=0),0>h&&(h=0),l>i.width()&&(l=i.width()),h>i.height()&&(h=i.height()),i.parent().is(".minicolors-slider-wheel")&&r.parent().is(".minicolors-grid")&&(p=75-l,u=75-h,g=Math.sqrt(p*p+u*u),m=Math.atan2(u,p),0>m&&(m+=2*Math.PI),g>75&&(g=75,l=75-75*Math.cos(m),h=75-75*Math.sin(m)),l=Math.round(l),h=Math.round(h)),i.is(".minicolors-grid")?r.stop(!0).animate({top:h+"px",left:l+"px"},d,a.animationEasing,function(){n(s,i)}):r.stop(!0).animate({top:h+"px"},d,a.animationEasing,function(){n(s,i)})}function n(i,t){function o(i,t){var o,s;return i.length&&t?(o=i.offset().left,s=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:s-t.offset().top+i.outerHeight()/2}):null}var s,a,n,e,l,h,d,p=i.val(),u=i.attr("data-opacity"),g=i.parent(),f=i.data("minicolors-settings"),v=g.find(".minicolors-input-swatch"),b=g.find(".minicolors-grid"),w=g.find(".minicolors-slider"),y=g.find(".minicolors-opacity-slider"),k=b.find("[class$=-picker]"),M=w.find("[class$=-picker]"),x=y.find("[class$=-picker]"),I=o(k,b),S=o(M,w),z=o(x,y);if(t.is(".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider")){switch(f.control){case"wheel":e=b.width()/2-I.x,l=b.height()/2-I.y,h=Math.sqrt(e*e+l*l),d=Math.atan2(l,e),0>d&&(d+=2*Math.PI),h>75&&(h=75,I.x=69-75*Math.cos(d),I.y=69-75*Math.sin(d)),a=m(h/.75,0,100),s=m(180*d/Math.PI,0,360),n=m(100-Math.floor(S.y*(100/w.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:a,b:100}));break;case"saturation":s=m(parseInt(I.x*(360/b.width()),10),0,360),a=m(100-Math.floor(S.y*(100/w.height())),0,100),n=m(100-Math.floor(I.y*(100/b.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:100,b:n})),g.find(".minicolors-grid-inner").css("opacity",a/100);break;case"brightness":s=m(parseInt(I.x*(360/b.width()),10),0,360),a=m(100-Math.floor(I.y*(100/b.height())),0,100),n=m(100-Math.floor(S.y*(100/w.height())),0,100),p=C({h:s,s:a,b:n}),w.css("backgroundColor",C({h:s,s:a,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n/100);break;default:s=m(360-parseInt(S.y*(360/w.height()),10),0,360),a=m(Math.floor(I.x*(100/b.width())),0,100),n=m(100-Math.floor(I.y*(100/b.height())),0,100),p=C({h:s,s:a,b:n}),b.css("backgroundColor",C({h:s,s:100,b:100}))}u=f.opacity?parseFloat(1-z.y/y.height()).toFixed(2):1,r(i,p,u)}else v.find("span").css({backgroundColor:p,opacity:u}),c(i,p,u)}function r(i,t,o){var s,a=i.parent(),n=i.data("minicolors-settings"),r=a.find(".minicolors-input-swatch");n.opacity&&i.attr("data-opacity",o),"rgb"===n.format?(s=f(t)?u(t,!0):x(p(t,!0)),o=""===i.attr("data-opacity")?1:m(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),(isNaN(o)||!n.opacity)&&(o=1),t=i.minicolors("rgbObject").a<=1&&s&&n.opacity?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(o)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):(f(t)&&(t=w(t)),t=d(t,n.letterCase)),i.val(t),r.find("span").css({backgroundColor:t,opacity:o}),c(i,t,o)}function e(i,t){var o,s,a,n,r,e,l,h,b,y,M=i.parent(),x=i.data("minicolors-settings"),I=M.find(".minicolors-input-swatch"),S=M.find(".minicolors-grid"),z=M.find(".minicolors-slider"),F=M.find(".minicolors-opacity-slider"),D=S.find("[class$=-picker]"),T=z.find("[class$=-picker]"),j=F.find("[class$=-picker]");switch(f(i.val())?(o=w(i.val()),r=m(parseFloat(v(i.val())).toFixed(2),0,1),r&&i.attr("data-opacity",r)):o=d(p(i.val(),!0),x.letterCase),o||(o=d(g(x.defaultValue,!0),x.letterCase)),s=k(o),n=x.keywords?$.map(x.keywords.split(","),function(i){return $.trim(i.toLowerCase())}):[],e=""!==i.val()&&$.inArray(i.val().toLowerCase(),n)>-1?d(i.val()):f(i.val())?u(i.val()):o,t||i.val(e),x.opacity&&(a=""===i.attr("data-opacity")?1:m(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),isNaN(a)&&(a=1),i.attr("data-opacity",a),I.find("span").css("opacity",a),h=m(F.height()-F.height()*a,0,F.height()),j.css("top",h+"px")),"transparent"===i.val().toLowerCase()&&I.find("span").css("opacity",0),I.find("span").css("backgroundColor",o),x.control){case"wheel":b=m(Math.ceil(.75*s.s),0,S.height()/2),y=s.h*Math.PI/180,l=m(75-Math.cos(y)*b,0,S.width()),h=m(75-Math.sin(y)*b,0,S.height()),D.css({top:h+"px",left:l+"px"}),h=150-s.b/(100/S.height()),""===o&&(h=0),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:s.s,b:100}));break;case"saturation":l=m(5*s.h/12,0,150),h=m(S.height()-Math.ceil(s.b/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.s*(z.height()/100),0,z.height()),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:100,b:s.b})),M.find(".minicolors-grid-inner").css("opacity",s.s/100);break;case"brightness":l=m(5*s.h/12,0,150),h=m(S.height()-Math.ceil(s.s/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.b*(z.height()/100),0,z.height()),T.css("top",h+"px"),z.css("backgroundColor",C({h:s.h,s:s.s,b:100})),M.find(".minicolors-grid-inner").css("opacity",1-s.b/100);break;default:l=m(Math.ceil(s.s/(100/S.width())),0,S.width()),h=m(S.height()-Math.ceil(s.b/(100/S.height())),0,S.height()),D.css({top:h+"px",left:l+"px"}),h=m(z.height()-s.h/(360/z.height()),0,z.height()),T.css("top",h+"px"),S.css("backgroundColor",C({h:s.h,s:100,b:100}))}i.data("minicolors-initialized")&&c(i,e,a)}function c(i,t,o){var s=i.data("minicolors-settings"),a=i.data("minicolors-lastChange"),n,r,e;if(!a||a.value!==t||a.opacity!==o){if(i.data("minicolors-lastChange",{value:t,opacity:o}),s.swatches&&0!==s.swatches.length){for(n=f(t)?u(t,!0):x(t),r=-1,e=0;e<s.swatches.length;++e)if(n.r===s.swatches[e].r&&n.g===s.swatches[e].g&&n.b===s.swatches[e].b&&n.a===s.swatches[e].a){r=e;break}i.parent().find(".minicolors-swatches .minicolors-swatch").removeClass("selected"),-1!==e&&i.parent().find(".minicolors-swatches .minicolors-swatch").eq(e).addClass("selected")}s.change&&(s.changeDelay?(clearTimeout(i.data("minicolors-changeTimeout")),i.data("minicolors-changeTimeout",setTimeout(function(){s.change.call(i.get(0),t,o)},s.changeDelay))):s.change.call(i.get(0),t,o)),i.trigger("change").trigger("input")}}function l(i){var t=p($(i).val(),!0),o=x(t),s=$(i).attr("data-opacity");return o?(void 0!==s&&$.extend(o,{a:parseFloat(s)}),o):null}function h(i,t){var o=p($(i).val(),!0),s=x(o),a=$(i).attr("data-opacity");return s?(void 0===a&&(a=1),t?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(a)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):null}function d(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function p(i,t){return i=i.replace(/^#/g,""),i.match(/^[A-F0-9]{3,6}/gi)?3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i):""}function u(i,t){var o=i.replace(/[^\d,.]/g,""),s=o.split(",");return s[0]=m(parseInt(s[0],10),0,255),s[1]=m(parseInt(s[1],10),0,255),s[2]=m(parseInt(s[2],10),0,255),s[3]&&(s[3]=m(parseFloat(s[3],10),0,1)),t?{r:s[0],g:s[1],b:s[2],a:s[3]?s[3]:null}:"undefined"!=typeof s[3]&&s[3]<=1?"rgba("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+")":"rgb("+s[0]+", "+s[1]+", "+s[2]+")"}function g(i,t){return f(i)?u(i):p(i,t)}function m(i,t,o){return t>i&&(i=t),i>o&&(i=o),i}function f(i){var t=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&4===t.length?!0:!1}function v(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+(\.\d{1,2})?|\.\d{1,2})[\s+]?/i),i&&6===i.length?i[4]:"1"}function b(i){var t={},o=Math.round(i.h),s=Math.round(255*i.s/100),a=Math.round(255*i.b/100);if(0===s)t.r=t.g=t.b=a;else{var n=a,r=(255-s)*a/255,e=(n-r)*(o%60)/60;360===o&&(o=0),60>o?(t.r=n,t.b=r,t.g=r+e):120>o?(t.g=n,t.b=r,t.r=n-e):180>o?(t.g=n,t.r=r,t.b=r+e):240>o?(t.b=n,t.r=r,t.g=n-e):300>o?(t.b=n,t.g=r,t.r=r+e):360>o?(t.r=n,t.g=r,t.b=n-e):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function w(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i),i&&4===i.length?"#"+("0"+parseInt(i[1],10).toString(16)).slice(-2)+("0"+parseInt(i[2],10).toString(16)).slice(-2)+("0"+parseInt(i[3],10).toString(16)).slice(-2):""}function y(i){var t=[i.r.toString(16),i.g.toString(16),i.b.toString(16)];return $.each(t,function(i,o){1===o.length&&(t[i]="0"+o)}),"#"+t.join("")}function C(i){return y(b(i))}function k(i){var t=M(x(i));return 0===t.s&&(t.h=360),t}function M(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),s=Math.max(i.r,i.g,i.b),a=s-o;return t.b=s,t.s=0!==s?255*a/s:0,0!==t.s?i.r===s?t.h=(i.g-i.b)/a:i.g===s?t.h=2+(i.b-i.r)/a:t.h=4+(i.r-i.g)/a:t.h=-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function x(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}$.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",dataUris:!0,defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom left",show:null,showSpeed:100,theme:"default",swatches:[]}},$.extend($.fn,{minicolors:function(a,n){switch(a){case"destroy":return $(this).each(function(){t($(this))}),$(this);case"hide":return s(),$(this);case"opacity":return void 0===n?$(this).attr("data-opacity"):($(this).each(function(){e($(this).attr("data-opacity",n))}),$(this));case"rgbObject":return l($(this),"rgbaObject"===a);case"rgbString":case"rgbaString":return h($(this),"rgbaString"===a);case"settings":return void 0===n?$(this).data("minicolors-settings"):($(this).each(function(){var i=$(this).data("minicolors-settings")||{};t($(this)),$(this).minicolors($.extend(!0,i,n))}),$(this));case"show":return o($(this).eq(0)),$(this);case"value":return void 0===n?$(this).val():($(this).each(function(){"object"==typeof n?(n.opacity&&$(this).attr("data-opacity",m(n.opacity,0,1)),n.color&&$(this).val(n.color)):$(this).val(n),e($(this))}),$(this));default:return"create"!==a&&(n=a),$(this).each(function(){i($(this),n)}),$(this)}}}),$(document).on("mousedown.minicolors touchstart.minicolors",function(i){$(i.target).parents().add(i.target).hasClass("minicolors")||s()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(i){var t=$(this);i.preventDefault(),$(document).data("minicolors-target",t),a(t,i,!0)}).on("mousemove.minicolors touchmove.minicolors",function(i){var t=$(document).data("minicolors-target");t&&a(t,i)}).on("mouseup.minicolors touchend.minicolors",function(){$(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(i){i.preventDefault();var t=$(this),o=t.parents(".minicolors").find(".minicolors-input"),s=t.data("swatch-color");r(o,s,v(s)),e(o)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(i){var t=$(this).parent().find(".minicolors-input");i.preventDefault(),o(t)}).on("focus.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&o(i)}).on("blur.minicolors",".minicolors-input",function(){var i=$(this),t=i.data("minicolors-settings"),o,s,a,n,r;i.data("minicolors-initialized")&&(o=t.keywords?$.map(t.keywords.split(","),function(i){return $.trim(i.toLowerCase())}):[],""!==i.val()&&$.inArray(i.val().toLowerCase(),o)>-1?r=i.val():(f(i.val())?a=u(i.val(),!0):(s=p(i.val(),!0),a=s?x(s):null),r=null===a?t.defaultValue:"rgb"===t.format?u(t.opacity?"rgba("+a.r+","+a.g+","+a.b+","+i.attr("data-opacity")+")":"rgb("+a.r+","+a.g+","+a.b+")"):y(a)),n=t.opacity?i.attr("data-opacity"):1,"transparent"===r.toLowerCase()&&(n=0),i.closest(".minicolors").find(".minicolors-input-swatch > span").css("opacity",n),i.val(r),""===i.val()&&i.val(g(t.defaultValue,!0)),i.val(d(i.val(),t.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(i){var t=$(this);if(t.data("minicolors-initialized"))switch(i.keyCode){case 9:s();break;case 13:case 27:s(),t.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&e(i,!0)}).on("paste.minicolors",".minicolors-input",function(){var i=$(this);i.data("minicolors-initialized")&&setTimeout(function(){e(i,!0)},1)})});
1
+ //
2
+ // jQuery MiniColors: A tiny color picker built on jQuery
3
+ //
4
+ // Developed by Cory LaViska for A Beautiful Site, LLC
5
+ //
6
+ // Licensed under the MIT license: http://opensource.org/licenses/MIT
7
+ //
8
+ !function(i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";function t(t,o){var s,a,n,e,r,l=i('<div class="minicolors" />'),h=i.minicolors.defaults;if(!t.data("minicolors-initialized")){if(o=i.extend(!0,{},h,o),l.addClass("minicolors-theme-"+o.theme).toggleClass("minicolors-with-opacity",o.opacity),void 0!==o.position&&i.each(o.position.split(" "),function(){l.addClass("minicolors-position-"+this)}),s="rgb"===o.format?o.opacity?"25":"20":o.keywords?"11":"7",t.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",o).prop("size",s).wrap(l).after('<div class="minicolors-panel minicolors-slider-'+o.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),o.inline||(t.after('<span class="minicolors-swatch minicolors-sprite minicolors-input-swatch"><span class="minicolors-swatch-color"></span></span>'),t.next(".minicolors-input-swatch").on("click",function(i){i.preventDefault(),t.focus()})),e=t.parent().find(".minicolors-panel"),e.on("selectstart",function(){return!1}).end(),o.swatches&&0!==o.swatches.length)for(e.addClass("minicolors-with-swatches"),a=i('<ul class="minicolors-swatches"></ul>').appendTo(e),r=0;r<o.swatches.length;++r)n=o.swatches[r],n=v(n)?g(n,!0):I(u(n,!0)),i('<li class="minicolors-swatch minicolors-sprite"><span class="minicolors-swatch-color"></span></li>').appendTo(a).data("swatch-color",o.swatches[r]).find(".minicolors-swatch-color").css({backgroundColor:C(n),opacity:n.a}),o.swatches[r]=n;o.inline&&t.parent().addClass("minicolors-inline"),c(t,!1),t.data("minicolors-initialized",!0)}}function o(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function s(i){var t=i.parent(),o=t.find(".minicolors-panel"),s=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(a(),t.addClass("minicolors-focus"),o.stop(!0,!0).fadeIn(s.showSpeed,function(){s.show&&s.show.call(i.get(0))}))}function a(){i(".minicolors-focus").each(function(){var t=i(this),o=t.find(".minicolors-input"),s=t.find(".minicolors-panel"),a=o.data("minicolors-settings");s.fadeOut(a.hideSpeed,function(){a.hide&&a.hide.call(o.get(0)),t.removeClass("minicolors-focus")})})}function n(i,t,o){var s,a,n,r,c=i.parents(".minicolors").find(".minicolors-input"),l=c.data("minicolors-settings"),h=i.find("[class$=-picker]"),d=i.offset().left,p=i.offset().top,u=Math.round(t.pageX-d),g=Math.round(t.pageY-p),m=o?l.animationSpeed:0;t.originalEvent.changedTouches&&(u=t.originalEvent.changedTouches[0].pageX-d,g=t.originalEvent.changedTouches[0].pageY-p),u<0&&(u=0),g<0&&(g=0),u>i.width()&&(u=i.width()),g>i.height()&&(g=i.height()),i.parent().is(".minicolors-slider-wheel")&&h.parent().is(".minicolors-grid")&&(s=75-u,a=75-g,n=Math.sqrt(s*s+a*a),r=Math.atan2(a,s),r<0&&(r+=2*Math.PI),n>75&&(n=75,u=75-75*Math.cos(r),g=75-75*Math.sin(r)),u=Math.round(u),g=Math.round(g)),i.is(".minicolors-grid")?h.stop(!0).animate({top:g+"px",left:u+"px"},m,l.animationEasing,function(){e(c,i)}):h.stop(!0).animate({top:g+"px"},m,l.animationEasing,function(){e(c,i)})}function e(i,t){function o(i,t){var o,s;return i.length&&t?(o=i.offset().left,s=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:s-t.offset().top+i.outerHeight()/2}):null}var s,a,n,e,c,h,d,p=i.val(),u=i.attr("data-opacity"),g=i.parent(),m=i.data("minicolors-settings"),v=g.find(".minicolors-input-swatch"),b=g.find(".minicolors-grid"),w=g.find(".minicolors-slider"),y=g.find(".minicolors-opacity-slider"),C=b.find("[class$=-picker]"),M=w.find("[class$=-picker]"),x=y.find("[class$=-picker]"),I=o(C,b),S=o(M,w),z=o(x,y);if(t.is(".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider")){switch(m.control){case"wheel":e=b.width()/2-I.x,c=b.height()/2-I.y,h=Math.sqrt(e*e+c*c),d=Math.atan2(c,e),d<0&&(d+=2*Math.PI),h>75&&(h=75,I.x=69-75*Math.cos(d),I.y=69-75*Math.sin(d)),a=f(h/.75,0,100),s=f(180*d/Math.PI,0,360),n=f(100-Math.floor(S.y*(100/w.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:a,b:100}));break;case"saturation":s=f(parseInt(I.x*(360/b.width()),10),0,360),a=f(100-Math.floor(S.y*(100/w.height())),0,100),n=f(100-Math.floor(I.y*(100/b.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:100,b:n})),g.find(".minicolors-grid-inner").css("opacity",a/100);break;case"brightness":s=f(parseInt(I.x*(360/b.width()),10),0,360),a=f(100-Math.floor(I.y*(100/b.height())),0,100),n=f(100-Math.floor(S.y*(100/w.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:a,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n/100);break;default:s=f(360-parseInt(S.y*(360/w.height()),10),0,360),a=f(Math.floor(I.x*(100/b.width())),0,100),n=f(100-Math.floor(I.y*(100/b.height())),0,100),p=k({h:s,s:a,b:n}),b.css("backgroundColor",k({h:s,s:100,b:100}))}u=m.opacity?parseFloat(1-z.y/y.height()).toFixed(2):1,r(i,p,u)}else v.find("span").css({backgroundColor:p,opacity:u}),l(i,p,u)}function r(i,t,o){var s,a=i.parent(),n=i.data("minicolors-settings"),e=a.find(".minicolors-input-swatch");n.opacity&&i.attr("data-opacity",o),"rgb"===n.format?(s=v(t)?g(t,!0):I(u(t,!0)),o=""===i.attr("data-opacity")?1:f(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),!isNaN(o)&&n.opacity||(o=1),t=i.minicolors("rgbObject").a<=1&&s&&n.opacity?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(o)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):(v(t)&&(t=y(t)),t=p(t,n.letterCase)),i.val(t),e.find("span").css({backgroundColor:t,opacity:o}),l(i,t,o)}function c(t,o){var s,a,n,e,r,c,h,d,w,C,x=t.parent(),I=t.data("minicolors-settings"),S=x.find(".minicolors-input-swatch"),z=x.find(".minicolors-grid"),F=x.find(".minicolors-slider"),T=x.find(".minicolors-opacity-slider"),D=z.find("[class$=-picker]"),j=F.find("[class$=-picker]"),q=T.find("[class$=-picker]");switch(v(t.val())?(s=y(t.val()),r=f(parseFloat(b(t.val())).toFixed(2),0,1),r&&t.attr("data-opacity",r)):s=p(u(t.val(),!0),I.letterCase),s||(s=p(m(I.defaultValue,!0),I.letterCase)),a=M(s),e=I.keywords?i.map(I.keywords.split(","),function(t){return i.trim(t.toLowerCase())}):[],c=""!==t.val()&&i.inArray(t.val().toLowerCase(),e)>-1?p(t.val()):v(t.val())?g(t.val()):s,o||t.val(c),I.opacity&&(n=""===t.attr("data-opacity")?1:f(parseFloat(t.attr("data-opacity")).toFixed(2),0,1),isNaN(n)&&(n=1),t.attr("data-opacity",n),S.find("span").css("opacity",n),d=f(T.height()-T.height()*n,0,T.height()),q.css("top",d+"px")),"transparent"===t.val().toLowerCase()&&S.find("span").css("opacity",0),S.find("span").css("backgroundColor",s),I.control){case"wheel":w=f(Math.ceil(.75*a.s),0,z.height()/2),C=a.h*Math.PI/180,h=f(75-Math.cos(C)*w,0,z.width()),d=f(75-Math.sin(C)*w,0,z.height()),D.css({top:d+"px",left:h+"px"}),d=150-a.b/(100/z.height()),""===s&&(d=0),j.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:a.s,b:100}));break;case"saturation":h=f(5*a.h/12,0,150),d=f(z.height()-Math.ceil(a.b/(100/z.height())),0,z.height()),D.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.s*(F.height()/100),0,F.height()),j.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:100,b:a.b})),x.find(".minicolors-grid-inner").css("opacity",a.s/100);break;case"brightness":h=f(5*a.h/12,0,150),d=f(z.height()-Math.ceil(a.s/(100/z.height())),0,z.height()),D.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.b*(F.height()/100),0,F.height()),j.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:a.s,b:100})),x.find(".minicolors-grid-inner").css("opacity",1-a.b/100);break;default:h=f(Math.ceil(a.s/(100/z.width())),0,z.width()),d=f(z.height()-Math.ceil(a.b/(100/z.height())),0,z.height()),D.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.h/(360/F.height()),0,F.height()),j.css("top",d+"px"),z.css("backgroundColor",k({h:a.h,s:100,b:100}))}t.data("minicolors-initialized")&&l(t,c,n)}function l(i,t,o){var s,a,n,e=i.data("minicolors-settings"),r=i.data("minicolors-lastChange");if(!r||r.value!==t||r.opacity!==o){if(i.data("minicolors-lastChange",{value:t,opacity:o}),e.swatches&&0!==e.swatches.length){for(s=v(t)?g(t,!0):I(t),a=-1,n=0;n<e.swatches.length;++n)if(s.r===e.swatches[n].r&&s.g===e.swatches[n].g&&s.b===e.swatches[n].b&&s.a===e.swatches[n].a){a=n;break}i.parent().find(".minicolors-swatches .minicolors-swatch").removeClass("selected"),a!==-1&&i.parent().find(".minicolors-swatches .minicolors-swatch").eq(n).addClass("selected")}e.change&&(e.changeDelay?(clearTimeout(i.data("minicolors-changeTimeout")),i.data("minicolors-changeTimeout",setTimeout(function(){e.change.call(i.get(0),t,o)},e.changeDelay))):e.change.call(i.get(0),t,o)),i.trigger("change").trigger("input")}}function h(t){var o,s=i(t).attr("data-opacity");if(v(i(t).val()))o=g(i(t).val(),!0);else{var a=u(i(t).val(),!0);o=I(a)}return o?(void 0!==s&&i.extend(o,{a:parseFloat(s)}),o):null}function d(t,o){var s,a=i(t).attr("data-opacity");if(v(i(t).val()))s=g(i(t).val(),!0);else{var n=u(i(t).val(),!0);s=I(n)}return s?(void 0===a&&(a=1),o?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(a)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):null}function p(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function u(i,t){return i=i.replace(/^#/g,""),i.match(/^[A-F0-9]{3,6}/gi)?3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i):""}function g(i,t){var o=i.replace(/[^\d,.]/g,""),s=o.split(",");return s[0]=f(parseInt(s[0],10),0,255),s[1]=f(parseInt(s[1],10),0,255),s[2]=f(parseInt(s[2],10),0,255),s[3]&&(s[3]=f(parseFloat(s[3],10),0,1)),t?s[3]?{r:s[0],g:s[1],b:s[2],a:s[3]}:{r:s[0],g:s[1],b:s[2]}:"undefined"!=typeof s[3]&&s[3]<=1?"rgba("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+")":"rgb("+s[0]+", "+s[1]+", "+s[2]+")"}function m(i,t){return v(i)?g(i):u(i,t)}function f(i,t,o){return i<t&&(i=t),i>o&&(i=o),i}function v(i){var t=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return!(!t||4!==t.length)}function b(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+(\.\d{1,2})?|\.\d{1,2})[\s+]?/i),i&&6===i.length?i[4]:"1"}function w(i){var t={},o=Math.round(i.h),s=Math.round(255*i.s/100),a=Math.round(255*i.b/100);if(0===s)t.r=t.g=t.b=a;else{var n=a,e=(255-s)*a/255,r=(n-e)*(o%60)/60;360===o&&(o=0),o<60?(t.r=n,t.b=e,t.g=e+r):o<120?(t.g=n,t.b=e,t.r=n-r):o<180?(t.g=n,t.r=e,t.b=e+r):o<240?(t.b=n,t.r=e,t.g=n-r):o<300?(t.b=n,t.g=e,t.r=e+r):o<360?(t.r=n,t.g=e,t.b=n-r):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function y(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i),i&&4===i.length?"#"+("0"+parseInt(i[1],10).toString(16)).slice(-2)+("0"+parseInt(i[2],10).toString(16)).slice(-2)+("0"+parseInt(i[3],10).toString(16)).slice(-2):""}function C(t){var o=[t.r.toString(16),t.g.toString(16),t.b.toString(16)];return i.each(o,function(i,t){1===t.length&&(o[i]="0"+t)}),"#"+o.join("")}function k(i){return C(w(i))}function M(i){var t=x(I(i));return 0===t.s&&(t.h=360),t}function x(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),s=Math.max(i.r,i.g,i.b),a=s-o;return t.b=s,t.s=0!==s?255*a/s:0,0!==t.s?i.r===s?t.h=(i.g-i.b)/a:i.g===s?t.h=2+(i.b-i.r)/a:t.h=4+(i.r-i.g)/a:t.h=-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function I(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}i.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom left",show:null,showSpeed:100,theme:"default",swatches:[]}},i.extend(i.fn,{minicolors:function(n,e){switch(n){case"destroy":return i(this).each(function(){o(i(this))}),i(this);case"hide":return a(),i(this);case"opacity":return void 0===e?i(this).attr("data-opacity"):(i(this).each(function(){c(i(this).attr("data-opacity",e))}),i(this));case"rgbObject":return h(i(this),"rgbaObject"===n);case"rgbString":case"rgbaString":return d(i(this),"rgbaString"===n);case"settings":return void 0===e?i(this).data("minicolors-settings"):(i(this).each(function(){var t=i(this).data("minicolors-settings")||{};o(i(this)),i(this).minicolors(i.extend(!0,t,e))}),i(this));case"show":return s(i(this).eq(0)),i(this);case"value":return void 0===e?i(this).val():(i(this).each(function(){"object"==typeof e&&"null"!==e?(e.opacity&&i(this).attr("data-opacity",f(e.opacity,0,1)),e.color&&i(this).val(e.color)):i(this).val(e),c(i(this))}),i(this));default:return"create"!==n&&(e=n),i(this).each(function(){t(i(this),e)}),i(this)}}}),i([document,top.document]).on("mousedown.minicolors touchstart.minicolors",function(t){i(t.target).parents().add(t.target).hasClass("minicolors")||a()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(t){var o=i(this);t.preventDefault(),i(t.delegateTarget).data("minicolors-target",o),n(o,t,!0)}).on("mousemove.minicolors touchmove.minicolors",function(t){var o=i(t.delegateTarget).data("minicolors-target");o&&n(o,t)}).on("mouseup.minicolors touchend.minicolors",function(){i(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(t){t.preventDefault();var o=i(this),s=o.parents(".minicolors").find(".minicolors-input"),a=o.data("swatch-color");r(s,a,b(a)),c(s)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(t){var o=i(this).parent().find(".minicolors-input");t.preventDefault(),s(o)}).on("focus.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&s(t)}).on("blur.minicolors",".minicolors-input",function(){var t,o,s,a,n,e=i(this),r=e.data("minicolors-settings");e.data("minicolors-initialized")&&(t=r.keywords?i.map(r.keywords.split(","),function(t){return i.trim(t.toLowerCase())}):[],""!==e.val()&&i.inArray(e.val().toLowerCase(),t)>-1?n=e.val():(v(e.val())?s=g(e.val(),!0):(o=u(e.val(),!0),s=o?I(o):null),n=null===s?r.defaultValue:"rgb"===r.format?g(r.opacity?"rgba("+s.r+","+s.g+","+s.b+","+e.attr("data-opacity")+")":"rgb("+s.r+","+s.g+","+s.b+")"):C(s)),a=r.opacity?e.attr("data-opacity"):1,"transparent"===n.toLowerCase()&&(a=0),e.closest(".minicolors").find(".minicolors-input-swatch > span").css("opacity",a),e.val(n),""===e.val()&&e.val(m(r.defaultValue,!0)),e.val(p(e.val(),r.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(t){var o=i(this);if(o.data("minicolors-initialized"))switch(t.keyCode){case 9:a();break;case 13:case 27:a(),o.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&c(t,!0)}).on("paste.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&setTimeout(function(){c(t,!0)},1)})});
 
 
 
assets/js/wpforms-preview.js DELETED
@@ -1,17 +0,0 @@
1
- ;(function($){
2
- $(function(){
3
-
4
- // Print page
5
- $(document).on('click', '.print', function(e) {
6
- e.preventDefault();
7
- window.print();
8
- });
9
-
10
- // Close page
11
- $(document).on('click', '.close-window', function(e) {
12
- e.preventDefault();
13
- window.close();
14
- });
15
-
16
- });
17
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
changelog.txt CHANGED
@@ -1,5 +1,21 @@
1
  == Changelog ==
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  = 1.3.8 =
4
  - Changed: Available conditional logic rules/functionality with Providers have been updated
5
  - Changed: Updated form builder modals (jquery-confirm.js)
1
  == Changelog ==
2
 
3
+ = 1.3.9.1 =
4
+ - Changed: Template Export excludes array items with empty strings
5
+ - Fixed: Admin notices displaying on plugin Welcome/activation screen
6
+ - Fixed: WPForms admin pages displaying blank due to conflicts with a few other plugins
7
+
8
+ = 1.3.9 =
9
+ - Added: Complete redesign and refactor of admin area
10
+ - Added: New Settings API
11
+ - Added: Entry print preview compact mode
12
+ - Added: Entry print preview view entry notes
13
+ - Added: Dynamic field choices nest hierarchical items
14
+ - Added: Form import/export to Tools sub page
15
+ - Added: Form template export to Tools sub page
16
+ - Changed: System Info content to new Tools sub-page
17
+ - Changed: Shortcode provided in form builder now includes title/description arguments
18
+
19
  = 1.3.8 =
20
  - Changed: Available conditional logic rules/functionality with Providers have been updated
21
  - Changed: Updated form builder modals (jquery-confirm.js)
includes/admin/admin.php ADDED
@@ -0,0 +1,310 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Global admin related items and functionality.
4
+ *
5
+ * @package WPForms
6
+ * @author WPForms
7
+ * @since 1.3.9
8
+ * @license GPL-2.0+
9
+ * @copyright Copyright (c) 2017, WPForms LLC
10
+ */
11
+
12
+ /**
13
+ * Helper function to determine if viewing an WPForms related admin page.
14
+ *
15
+ * @since 1.3.9
16
+ * @return boolean
17
+ */
18
+ function wpforms_is_admin_page() {
19
+
20
+ // Bail if we're not on a WPForms screen or page (also exclude form builder).
21
+ if ( ! is_admin() || empty( $_REQUEST['page'] ) || strpos( $_REQUEST['page'], 'wpforms' ) === false || 'wpforms-builder' === $_REQUEST['page'] ) {
22
+ return false;
23
+ }
24
+
25
+ return true;
26
+ }
27
+
28
+ /**
29
+ * Load styles for all WPForms-related admin screens.
30
+ *
31
+ * @since 1.3.9
32
+ */
33
+ function wpforms_admin_styles() {
34
+
35
+ if ( ! wpforms_is_admin_page() ) {
36
+ return;
37
+ }
38
+
39
+ // jQuery confirm.
40
+ wp_enqueue_style(
41
+ 'jquery-confirm',
42
+ WPFORMS_PLUGIN_URL . 'assets/css/jquery-confirm.min.css',
43
+ array(),
44
+ '3.2.3'
45
+ );
46
+
47
+ // Minicolors (color picker).
48
+ wp_enqueue_style(
49
+ 'minicolors',
50
+ WPFORMS_PLUGIN_URL . 'assets/css/jquery.minicolors.css',
51
+ array(),
52
+ '2.2.6'
53
+ );
54
+
55
+ // FontAwesome.
56
+ wp_enqueue_style(
57
+ 'wpforms-font-awesome',
58
+ WPFORMS_PLUGIN_URL . 'assets/css/font-awesome.min.css',
59
+ null,
60
+ '4.4.0'
61
+ );
62
+
63
+ // Main admin styles.
64
+ wp_enqueue_style(
65
+ 'wpforms-admin',
66
+ WPFORMS_PLUGIN_URL . 'assets/css/admin.css',
67
+ array(),
68
+ WPFORMS_VERSION
69
+ );
70
+ }
71
+ add_action( 'admin_enqueue_scripts', 'wpforms_admin_styles' );
72
+
73
+ /**
74
+ * Load scripts for all WPForms-related admin screens.
75
+ *
76
+ * @since 1.3.9
77
+ */
78
+ function wpforms_admin_scripts() {
79
+
80
+ if ( ! wpforms_is_admin_page() ) {
81
+ return;
82
+ }
83
+
84
+ wp_enqueue_media();
85
+
86
+ // jQuery confirm
87
+ wp_enqueue_script(
88
+ 'jquery-confirm',
89
+ WPFORMS_PLUGIN_URL . 'assets/js/jquery.jquery-confirm.min.js',
90
+ array( 'jquery' ),
91
+ '3.2.3',
92
+ false
93
+ );
94
+
95
+ // Minicolors (color picker).
96
+ wp_enqueue_script(
97
+ 'minicolors',
98
+ WPFORMS_PLUGIN_URL . 'assets/js/jquery.minicolors.min.js',
99
+ array( 'jquery' ),
100
+ '2.2.6',
101
+ false
102
+ );
103
+
104
+ // Choices.js.
105
+ wp_enqueue_script(
106
+ 'choicesjs',
107
+ WPFORMS_PLUGIN_URL . 'assets/js/choices.min.js',
108
+ array(),
109
+ '2.8.10',
110
+ false
111
+ );
112
+
113
+ $dir = ( defined( 'WPFORMS_DEVELOPMENT' ) && WPFORMS_DEVELOPMENT ) ? '/src' : '';
114
+ $suffix = ( defined( 'WPFORMS_DEVELOPMENT' ) && WPFORMS_DEVELOPMENT ) ? '' : '.min';
115
+
116
+ // Main admin script.
117
+ wp_enqueue_script(
118
+ 'wpforms-admin',
119
+ WPFORMS_PLUGIN_URL . "assets/js{$dir}/admin{$suffix}.js",
120
+ array( 'jquery' ),
121
+ WPFORMS_VERSION,
122
+ false
123
+ );
124
+
125
+ $strings = array(
126
+ 'addon_activate' => __( 'Activate', 'wpforms' ),
127
+ 'addon_active' => __( 'Active', 'wpforms' ),
128
+ 'addon_deactivate' => __( 'Deactivate', 'wpforms' ),
129
+ 'addon_inactive' => __( 'Inactive', 'wpforms' ),
130
+ 'addon_install' => __( 'Install Addon', 'wpforms' ),
131
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
132
+ 'cancel' => __( 'Cancel', 'wpforms' ),
133
+ 'close' => __( 'Close', 'wpforms' ),
134
+ 'entry_delete_confirm' => __( 'Are you sure you want to delete this entry?', 'wpforms' ),
135
+ 'entry_empty_fields_hide' => __( 'Hide Empty Fields', 'wpforms' ),
136
+ 'entry_empty_fields_show' => __( 'Show Empty Fields', 'wpforms' ),
137
+ 'entry_note_delete_confirm' => __( 'Are you sure you want to delete this note?', 'wpforms' ),
138
+ 'entry_unstar' => __( 'Unstar entry', 'wpforms' ),
139
+ 'entry_star' => __( 'Star entry', 'wpforms' ),
140
+ 'entry_read' => __( 'Mark entry read', 'wpforms' ),
141
+ 'entry_unread' => __( 'Mark entry unread', 'wpforms' ),
142
+ 'form_delete_confirm' => __( 'Are you sure you want to delete this form?', 'wpforms' ),
143
+ 'form_duplicate_confirm' => __( 'Are you sure you want to duplicate this form?', 'wpforms' ),
144
+ 'heads_up' => __( 'Heads up!', 'wpforms' ),
145
+ 'nonce' => wp_create_nonce( 'wpforms-admin' ),
146
+ 'ok' => __( 'OK', 'wpforms' ),
147
+ 'provider_delete_confirm' => __( 'Are you sure you want to disconnect this account?', 'wpforms' ),
148
+ 'provider_auth_error' => __( 'Could not authenticate with the provider.', 'wpforms' ),
149
+ 'upload_image_title' => __( 'Upload or Choose Your Image', 'wpforms' ),
150
+ 'upload_image_button' => __( 'Use Image', 'wpforms' ),
151
+ );
152
+ $strings = apply_filters( 'wpforms_admin_strings', $strings );
153
+
154
+ wp_localize_script(
155
+ 'wpforms-admin',
156
+ 'wpforms_admin',
157
+ $strings
158
+ );
159
+ }
160
+ add_action( 'admin_enqueue_scripts', 'wpforms_admin_scripts' );
161
+
162
+ /**
163
+ * Add body class to WPForms admin pages for easy reference.
164
+ *
165
+ * @since 1.3.9
166
+ * @param string $classes
167
+ * @return string
168
+ */
169
+ function wpforms_admin_body_class( $classes ) {
170
+
171
+ if ( ! wpforms_is_admin_page() ) {
172
+ return $classes;
173
+ }
174
+
175
+ return "$classes wpforms-admin-page";
176
+ }
177
+ add_filter( 'admin_body_class', 'wpforms_admin_body_class', 10, 1 );
178
+
179
+ /**
180
+ * Outputs the WPForms admin header.
181
+ *
182
+ * @since 1.3.9
183
+ */
184
+ function wpforms_admin_header() {
185
+
186
+ // Bail if we're not on a WPForms screen or page (also exclude form builder).
187
+ if ( ! wpforms_is_admin_page() ) {
188
+ return;
189
+ }
190
+
191
+ // Omit header from Welcome activation screen.
192
+ if ( 'wpforms-getting-started' === $_REQUEST['page'] ) {
193
+ return;
194
+ }
195
+ ?>
196
+ <div id="wpforms-header-temp"></div>
197
+ <div id="wpforms-header" class="wpforms-header">
198
+ <img class="wpforms-header-logo" src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/logo.png" alt="WPForms Logo"/>
199
+ </div>
200
+ <?php
201
+ }
202
+ add_action( 'in_admin_header', 'wpforms_admin_header', 100 );
203
+
204
+ /**
205
+ * Remove non-WPForms notices from WPForms pages.
206
+ *
207
+ * @since 1.3.9
208
+ */
209
+ function wpforms_admin_hide_unrelated_notices() {
210
+
211
+ // Bail if we're not on a WPForms screen or page.
212
+ if ( empty( $_REQUEST['page'] ) || strpos( $_REQUEST['page'], 'wpforms' ) === false ) {
213
+ return;
214
+ }
215
+
216
+ global $wp_filter;
217
+
218
+ if ( ! empty( $wp_filter['user_admin_notices']->callbacks ) && is_array( $wp_filter['user_admin_notices']->callbacks ) ) {
219
+ foreach ( $wp_filter['user_admin_notices']->callbacks as $priority => $hooks ) {
220
+ foreach ( $hooks as $name => $arr ) {
221
+ if ( is_object( $arr['function'] ) && $arr['function'] instanceof Closure ) {
222
+ unset( $wp_filter['user_admin_notices']->callbacks[ $priority ][ $name ] );
223
+ continue;
224
+ }
225
+ if ( ! empty( $arr['function'][0] ) && is_object( $arr['function'][0] ) && strpos( strtolower( get_class( $arr['function'][0] ) ), 'wpforms' ) !== false ) {
226
+ continue;
227
+ }
228
+ if ( ! empty( $name ) && strpos( $name, 'wpforms' ) === false ) {
229
+ unset( $wp_filter['user_admin_notices']->callbacks[ $priority ][ $name ] );
230
+ }
231
+ }
232
+ }
233
+ }
234
+
235
+ if ( ! empty( $wp_filter['admin_notices']->callbacks ) && is_array( $wp_filter['admin_notices']->callbacks ) ) {
236
+ foreach ( $wp_filter['admin_notices']->callbacks as $priority => $hooks ) {
237
+ foreach ( $hooks as $name => $arr ) {
238
+ if ( is_object( $arr['function'] ) && $arr['function'] instanceof Closure ) {
239
+ unset( $wp_filter['admin_notices']->callbacks[ $priority ][ $name ] );
240
+ continue;
241
+ }
242
+ if ( ! empty( $arr['function'][0] ) && is_object( $arr['function'][0] ) && strpos( strtolower( get_class( $arr['function'][0] ) ), 'wpforms' ) !== false ) {
243
+ continue;
244
+ }
245
+ if ( ! empty( $name ) && strpos( $name, 'wpforms' ) === false ) {
246
+ unset( $wp_filter['admin_notices']->callbacks[ $priority ][ $name ] );
247
+ }
248
+ }
249
+ }
250
+ }
251
+
252
+ if ( ! empty( $wp_filter['all_admin_notices']->callbacks ) && is_array( $wp_filter['all_admin_notices']->callbacks ) ) {
253
+ foreach ( $wp_filter['all_admin_notices']->callbacks as $priority => $hooks ) {
254
+ foreach ( $hooks as $name => $arr ) {
255
+ if ( is_object( $arr['function'] ) && $arr['function'] instanceof Closure ) {
256
+ unset( $wp_filter['all_admin_notices']->callbacks[ $priority ][ $name ] );
257
+ continue;
258
+ }
259
+ if ( ! empty( $arr['function'][0] ) && is_object( $arr['function'][0] ) && strpos( strtolower( get_class( $arr['function'][0] ) ), 'wpforms' ) !== false ) {
260
+ continue;
261
+ }
262
+ if ( ! empty( $name ) && strpos( $name, 'wpforms' ) === false ) {
263
+ unset( $wp_filter['all_admin_notices']->callbacks[ $priority ][ $name ] );
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
269
+ add_action( 'admin_print_scripts', 'wpforms_admin_hide_unrelated_notices' );
270
+
271
+ /**
272
+ * Upgrade link used within the various admin pages.
273
+ *
274
+ * Previously was only included as a method in wpforms-lite.php, but made
275
+ * available globally in 1.3.9.
276
+ *
277
+ * @since 1.3.9
278
+ */
279
+ function wpforms_admin_upgrade_link() {
280
+
281
+ // Check if there's a constant.
282
+ $shareasale_id = '';
283
+ if ( defined( 'WPFORMS_SHAREASALE_ID' ) ) {
284
+ $shareasale_id = WPFORMS_SHAREASALE_ID;
285
+ }
286
+
287
+ // If there's no constant, check if there's an option.
288
+ if ( empty( $shareasale_id ) ) {
289
+ $shareasale_id = get_option( 'wpforms_shareasale_id', '' );
290
+ }
291
+
292
+ // Whether we have an ID or not, filter the ID.
293
+ $shareasale_id = apply_filters( 'wpforms_shareasale_id', $shareasale_id );
294
+
295
+ // If at this point we still don't have an ID, we really don't have one!
296
+ // Just return the standard upgrade URL.
297
+ if ( empty( $shareasale_id ) ) {
298
+ return 'https://wpforms.com/lite-upgrade/?utm_source=WordPress&amp;utm_medium=link&amp;utm_campaign=liteplugin';
299
+ }
300
+
301
+ // Whether we have a specific redirect URL to use
302
+ $shareasale_redirect = apply_filters( 'wpforms_shareasale_redirect', get_option( 'wpforms_shareasale_redirect', '' ) );
303
+
304
+ // Build final URL
305
+ $shareasale_url = sprintf( 'http://www.shareasale.com/r.cfm?B=837827&U=%s&M=64312&urllink=%s', $shareasale_id, $shareasale_redirect );
306
+
307
+ // If here, we have a ShareASale ID
308
+ // Return ShareASale URL with redirect.
309
+ return esc_url( $shareasale_url );
310
+ }
includes/admin/ajax-actions.php CHANGED
@@ -21,41 +21,41 @@ function wpforms_save_form() {
21
 
22
  // Check for permissions
23
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) )
24
- die( __( 'You do no have permission.', 'wpforms' ) );
25
 
26
  // Check for form data
27
- if ( empty( $_POST['data'] ) )
28
  die( __( 'No data provided', 'wpforms' ) );
29
 
30
- $form_post = json_decode( stripslashes( $_POST['data'] ) );
31
  $data = array();
32
 
33
- if ( ! is_null( $form_post ) && $form_post ) {
34
- foreach ( $form_post as $post_input_data ) {
35
- // For input names that are arrays (e.g. `menu-item-db-id[3][4][5]`),
36
- // derive the array path keys via regex and set the value in $_POST.
37
- preg_match( '#([^\[]*)(\[(.+)\])?#', $post_input_data->name, $matches );
38
 
39
- $array_bits = array( $matches[1] );
40
 
41
- if ( isset( $matches[3] ) ) {
42
- $array_bits = array_merge( $array_bits, explode( '][', $matches[3] ) );
43
- }
44
 
45
- $new_post_data = array();
46
 
47
- // Build the new array value from leaf to trunk.
48
- for ( $i = count( $array_bits ) - 1; $i >= 0; $i -- ) {
49
- if ( $i == count( $array_bits ) - 1 ) {
50
- $new_post_data[ $array_bits[ $i ] ] = wp_slash( $post_input_data->value );
51
- } else {
52
- $new_post_data = array( $array_bits[ $i ] => $new_post_data );
53
- }
54
- }
55
 
56
- $data = array_replace_recursive( $data, $new_post_data );
57
- }
58
- }
59
 
60
  $form_id = wpforms()->form->update( $data['id'], $data );
61
 
@@ -85,20 +85,20 @@ function wpforms_new_form() {
85
  check_ajax_referer( 'wpforms-builder', 'nonce' );
86
 
87
  // Check for form title
88
- if ( empty( $_POST['title'] ) )
89
  die( __( 'No form title provided', 'wpforms' ) );
90
 
91
  // Create form
92
  $form_title = sanitize_text_field( $_POST['title'] );
93
  $form_template = sanitize_text_field( $_POST['template'] );
94
  $title_exists = get_page_by_title( $form_title, 'OBJECT', 'wpforms' );
95
- $form_id = wpforms()->form->add(
96
  $form_title,
97
- array(),
98
  array( 'template' => $form_template )
99
  );
100
  if ( NULL != $title_exists ) {
101
- wp_update_post( array(
102
  'ID' => $form_id,
103
  'post_title' => $form_title . ' (ID #' . $form_id . ')',
104
  ) );
@@ -111,7 +111,7 @@ function wpforms_new_form() {
111
  );
112
  wp_send_json_success( $data );
113
  } else {
114
- die( __( 'Error creating form', 'wpforms' ) );
115
  }
116
  }
117
  add_action( 'wp_ajax_wpforms_new_form', 'wpforms_new_form' );
@@ -127,7 +127,7 @@ function wpforms_update_form_template() {
127
  check_ajax_referer( 'wpforms-builder', 'nonce' );
128
 
129
  // Check for form title
130
- if ( empty( $_POST['form_id'] ) )
131
  die( __( 'No form ID provided', 'wpforms' ) );
132
 
133
  $data = wpforms()->form->get( $_POST['form_id'], array( 'content_only' => true ) );
@@ -140,7 +140,7 @@ function wpforms_update_form_template() {
140
  );
141
  wp_send_json_success( $data );
142
  } else {
143
- die( __( 'Error updating form template', 'wpforms' ) );
144
  }
145
  }
146
  add_action( 'wp_ajax_wpforms_update_form_template', 'wpforms_update_form_template' );
@@ -198,7 +198,7 @@ function wpforms_builder_dynamic_choices() {
198
 
199
  // Fetch the option row HTML to be returned to the builder
200
  $field = new WPForms_Field_Select( false );
201
- $field_args = array(
202
  'id' => $id,
203
  'dynamic_choices' => $type,
204
  );
@@ -242,34 +242,34 @@ function wpforms_builder_dynamic_source() {
242
 
243
  $type_name = __( 'post type', 'wpforms' );
244
  $args = array(
245
- 'post_type' => $source,
246
- 'posts_per_page' => 20,
247
- 'orderby' => 'title',
248
  'order' => 'ASC',
249
  );
250
- $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, array( 'id' => $id ), $form_id ) );
251
  $total = wp_count_posts( $source );
252
  $total = $total->publish;
253
  $pt = get_post_type_object( $source );
254
  $source_name = $pt->labels->name;
255
-
256
  foreach ( $posts as $post ) {
257
  $items[] = $post->post_title;
258
  }
259
 
260
  } elseif ( 'taxonomy' == $type ) {
261
-
262
  $type_name = __( 'taxonomy', 'wpforms' );
263
  $args = array(
264
- 'taxonomy' => $source,
265
- 'hide_empty' => false,
266
  'number' => 20,
267
  );
268
- $terms = get_terms( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, array( 'id' => $id ), $form_id ) );
269
  $total = wp_count_terms( $source );
270
  $tax = get_taxonomy( $source );
271
  $source_name = $tax->labels->name;
272
-
273
  foreach ( $terms as $term ) {
274
  $items[] = $term->name;
275
  }
@@ -284,4 +284,4 @@ function wpforms_builder_dynamic_source() {
284
  'type_name' => $type_name,
285
  ) );
286
  }
287
- add_action( 'wp_ajax_wpforms_builder_dynamic_source', 'wpforms_builder_dynamic_source' );
21
 
22
  // Check for permissions
23
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) )
24
+ die( __( 'You do not have permission.', 'wpforms' ) );
25
 
26
  // Check for form data
27
+ if ( empty( $_POST['data'] ) )
28
  die( __( 'No data provided', 'wpforms' ) );
29
 
30
+ $form_post = json_decode( stripslashes( $_POST['data'] ) );
31
  $data = array();
32
 
33
+ if ( ! is_null( $form_post ) && $form_post ) {
34
+ foreach ( $form_post as $post_input_data ) {
35
+ // For input names that are arrays (e.g. `menu-item-db-id[3][4][5]`),
36
+ // derive the array path keys via regex and set the value in $_POST.
37
+ preg_match( '#([^\[]*)(\[(.+)\])?#', $post_input_data->name, $matches );
38
 
39
+ $array_bits = array( $matches[1] );
40
 
41
+ if ( isset( $matches[3] ) ) {
42
+ $array_bits = array_merge( $array_bits, explode( '][', $matches[3] ) );
43
+ }
44
 
45
+ $new_post_data = array();
46
 
47
+ // Build the new array value from leaf to trunk.
48
+ for ( $i = count( $array_bits ) - 1; $i >= 0; $i -- ) {
49
+ if ( $i == count( $array_bits ) - 1 ) {
50
+ $new_post_data[ $array_bits[ $i ] ] = wp_slash( $post_input_data->value );
51
+ } else {
52
+ $new_post_data = array( $array_bits[ $i ] => $new_post_data );
53
+ }
54
+ }
55
 
56
+ $data = array_replace_recursive( $data, $new_post_data );
57
+ }
58
+ }
59
 
60
  $form_id = wpforms()->form->update( $data['id'], $data );
61
 
85
  check_ajax_referer( 'wpforms-builder', 'nonce' );
86
 
87
  // Check for form title
88
+ if ( empty( $_POST['title'] ) )
89
  die( __( 'No form title provided', 'wpforms' ) );
90
 
91
  // Create form
92
  $form_title = sanitize_text_field( $_POST['title'] );
93
  $form_template = sanitize_text_field( $_POST['template'] );
94
  $title_exists = get_page_by_title( $form_title, 'OBJECT', 'wpforms' );
95
+ $form_id = wpforms()->form->add(
96
  $form_title,
97
+ array(),
98
  array( 'template' => $form_template )
99
  );
100
  if ( NULL != $title_exists ) {
101
+ wp_update_post( array(
102
  'ID' => $form_id,
103
  'post_title' => $form_title . ' (ID #' . $form_id . ')',
104
  ) );
111
  );
112
  wp_send_json_success( $data );
113
  } else {
114
+ die( __( 'Error creating form', 'wpforms' ) );
115
  }
116
  }
117
  add_action( 'wp_ajax_wpforms_new_form', 'wpforms_new_form' );
127
  check_ajax_referer( 'wpforms-builder', 'nonce' );
128
 
129
  // Check for form title
130
+ if ( empty( $_POST['form_id'] ) )
131
  die( __( 'No form ID provided', 'wpforms' ) );
132
 
133
  $data = wpforms()->form->get( $_POST['form_id'], array( 'content_only' => true ) );
140
  );
141
  wp_send_json_success( $data );
142
  } else {
143
+ die( __( 'Error updating form template', 'wpforms' ) );
144
  }
145
  }
146
  add_action( 'wp_ajax_wpforms_update_form_template', 'wpforms_update_form_template' );
198
 
199
  // Fetch the option row HTML to be returned to the builder
200
  $field = new WPForms_Field_Select( false );
201
+ $field_args = array(
202
  'id' => $id,
203
  'dynamic_choices' => $type,
204
  );
242
 
243
  $type_name = __( 'post type', 'wpforms' );
244
  $args = array(
245
+ 'post_type' => $source,
246
+ 'posts_per_page' => 20,
247
+ 'orderby' => 'title',
248
  'order' => 'ASC',
249
  );
250
+ $posts = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, array( 'id' => $id ), $form_id ), true );
251
  $total = wp_count_posts( $source );
252
  $total = $total->publish;
253
  $pt = get_post_type_object( $source );
254
  $source_name = $pt->labels->name;
255
+
256
  foreach ( $posts as $post ) {
257
  $items[] = $post->post_title;
258
  }
259
 
260
  } elseif ( 'taxonomy' == $type ) {
261
+
262
  $type_name = __( 'taxonomy', 'wpforms' );
263
  $args = array(
264
+ 'taxonomy' => $source,
265
+ 'hide_empty' => false,
266
  'number' => 20,
267
  );
268
+ $terms = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, array( 'id' => $id ), $form_id ), true );
269
  $total = wp_count_terms( $source );
270
  $tax = get_taxonomy( $source );
271
  $source_name = $tax->labels->name;
272
+
273
  foreach ( $terms as $term ) {
274
  $items[] = $term->name;
275
  }
284
  'type_name' => $type_name,
285
  ) );
286
  }
287
+ add_action( 'wp_ajax_wpforms_builder_dynamic_source', 'wpforms_builder_dynamic_source' );
includes/admin/builder/class-builder.php CHANGED
@@ -173,14 +173,14 @@ class WPForms_Builder {
173
  'jquery-confirm',
174
  WPFORMS_PLUGIN_URL . 'assets/css/jquery-confirm.min.css',
175
  null,
176
- '2.0.0'
177
  );
178
 
179
  wp_enqueue_style(
180
  'minicolors',
181
  WPFORMS_PLUGIN_URL . 'assets/css/jquery.minicolors.css',
182
  null,
183
- '2.2.3'
184
  );
185
 
186
  wp_enqueue_style(
@@ -217,7 +217,7 @@ class WPForms_Builder {
217
  'jquery-confirm',
218
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.jquery-confirm.min.js',
219
  array(),
220
- '2.0.0',
221
  false
222
  );
223
 
@@ -241,7 +241,7 @@ class WPForms_Builder {
241
  'minicolors',
242
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.minicolors.min.js',
243
  array( 'jquery' ),
244
- '2.2.3',
245
  false
246
  );
247
 
@@ -439,7 +439,7 @@ class WPForms_Builder {
439
 
440
  <div class="wpforms-left">
441
 
442
- <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/logo-builder.png" alt="Sullie WPForms mascot">
443
 
444
  </div>
445
 
173
  'jquery-confirm',
174
  WPFORMS_PLUGIN_URL . 'assets/css/jquery-confirm.min.css',
175
  null,
176
+ '3.2.3'
177
  );
178
 
179
  wp_enqueue_style(
180
  'minicolors',
181
  WPFORMS_PLUGIN_URL . 'assets/css/jquery.minicolors.css',
182
  null,
183
+ '2.2.6'
184
  );
185
 
186
  wp_enqueue_style(
217
  'jquery-confirm',
218
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.jquery-confirm.min.js',
219
  array(),
220
+ '3.2.3',
221
  false
222
  );
223
 
241
  'minicolors',
242
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.minicolors.min.js',
243
  array( 'jquery' ),
244
+ '2.2.6',
245
  false
246
  );
247
 
439
 
440
  <div class="wpforms-left">
441
 
442
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/sullie-alt.png" alt="Sullie WPForms mascot">
443
 
444
  </div>
445
 
includes/admin/builder/panels/class-providers.php CHANGED
@@ -51,7 +51,7 @@ class WPForms_Builder_Panel_Providers extends WPForms_Builder_Panel {
51
  'wpforms-builder-providers',
52
  'wpforms_builder_providers',
53
  array(
54
- 'url' => esc_url( home_url( add_query_arg( array('view' => 'providers' ) ) ) ),
55
  'confirm_save' => __( 'We need to save your progress to continue to the Marketing panel. Is that OK?', 'wpforms' ),
56
  'confirm_connection' => __( 'Are you sure you want to delete this connecton?', 'wpforms' ),
57
  'prompt_connection' => __( 'Enter a %type% nickname', 'wpforms' ),
@@ -118,4 +118,4 @@ class WPForms_Builder_Panel_Providers extends WPForms_Builder_Panel {
118
  do_action( 'wpforms_providers_panel_content', $this->form );
119
  }
120
  }
121
- new WPForms_Builder_Panel_Providers;
51
  'wpforms-builder-providers',
52
  'wpforms_builder_providers',
53
  array(
54
+ 'url' => esc_url( add_query_arg( array( 'view' => 'providers' ) ) ),
55
  'confirm_save' => __( 'We need to save your progress to continue to the Marketing panel. Is that OK?', 'wpforms' ),
56
  'confirm_connection' => __( 'Are you sure you want to delete this connecton?', 'wpforms' ),
57
  'prompt_connection' => __( 'Enter a %type% nickname', 'wpforms' ),
118
  do_action( 'wpforms_providers_panel_content', $this->form );
119
  }
120
  }
121
+ new WPForms_Builder_Panel_Providers;
includes/admin/class-am-deactivation-survey.php ADDED
@@ -0,0 +1,279 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! class_exists( 'AM_Deactivation_Survey' ) ) {
3
+ /**
4
+ * Awesome Motive Deactivation Survey.
5
+ *
6
+ * This prompts the user for more details when they deactivate the plugin.
7
+ *
8
+ * @version 1.0.0
9
+ * @package AwesomeMotive
10
+ * @author Jared Atchison
11
+ * @license GPL-2.0+
12
+ * @copyright Copyright (c) 2017
13
+ */
14
+ class AM_Deactivation_Survey {
15
+
16
+ /**
17
+ * The API URL we are calling.
18
+ *
19
+ * @since 1.0.0
20
+ * @var string
21
+ */
22
+ public $api_url = 'https://api.awesomemotive.com/v1/deactivation-survey/';
23
+
24
+ /**
25
+ * Name for this plugin.
26
+ *
27
+ * @since 1.0.0
28
+ * @var string
29
+ */
30
+ public $name;
31
+
32
+ /**
33
+ * Unique slug for this plugin.
34
+ *
35
+ * @since 1.0.0
36
+ * @var string
37
+ */
38
+ public $plugin;
39
+
40
+ /**
41
+ * Primary class constructor.
42
+ *
43
+ * @since 1.0.0
44
+ * @param string $name Plugin name.
45
+ * @param string $plugin Plugin slug.
46
+ */
47
+ public function __construct( $name = '', $plugin = '' ) {
48
+
49
+ $this->name = $name;
50
+ $this->plugin = $plugin;
51
+
52
+ add_action( 'admin_print_scripts', array( $this, 'js' ), 20 );
53
+ add_action( 'admin_print_scripts', array( $this, 'css' ) );
54
+ add_action( 'admin_footer', array( $this, 'modal' ) );
55
+ }
56
+
57
+ /**
58
+ * Checks if current admin screen is the plugins page.
59
+ *
60
+ * @since 1.0.0
61
+ * @return bool
62
+ */
63
+ public function is_plugin_page() {
64
+
65
+ return ( in_array( get_current_screen()->id, array( 'plugins', 'plugins-network' ), true ) );
66
+ }
67
+
68
+ /**
69
+ * Survey javascript.
70
+ *
71
+ * @since 1.0.0
72
+ */
73
+ public function js() {
74
+
75
+ if ( ! $this->is_plugin_page() ) {
76
+ return;
77
+ }
78
+ ?>
79
+ <script type="text/javascript">
80
+ jQuery(function($){
81
+ var $deactivateLink = $('#the-list').find('[data-slug="<?php echo $this->plugin; ?>"] span.deactivate a'),
82
+ $overlay = $('#am-deactivate-survey-<?php echo $this->plugin; ?>'),
83
+ $form = $overlay.find('form'),
84
+ formOpen = false;
85
+ // Plugin listing table deactivate link.
86
+ $deactivateLink.on('click', function(event) {
87
+ event.preventDefault();
88
+ $overlay.css('display', 'table');
89
+ formOpen = true;
90
+ $form.find('.am-deactivate-survey-option:first-of-type input[type=radio]').focus();
91
+ });
92
+ // Survey radio option selected.
93
+ $form.on('change', 'input[type=radio]', function(event) {
94
+ event.preventDefault();
95
+ $form.find('input[type=text], .error').hide();
96
+ $form.find('.am-deactivate-survey-option').removeClass('selected');
97
+ $(this).closest('.am-deactivate-survey-option').addClass('selected').find('input[type=text]').show();
98
+ });
99
+ // Survey Skip & Deactivate.
100
+ $form.on('click', '.am-deactivate-survey-deactivate', function(event) {
101
+ event.preventDefault();
102
+ location.href = $deactivateLink.attr('href');
103
+ });
104
+ // Survey submit.
105
+ $form.submit(function(event) {
106
+ event.preventDefault();
107
+ if (! $form.find('input[type=radio]:checked').val()) {
108
+ $form.find('.am-deactivate-survey-footer').prepend('<span class="error">Please select an option</span>');
109
+ return;
110
+ }
111
+ var data = {
112
+ code: $form.find('.selected input[type=radio]').val(),
113
+ reason: $form.find('.selected .am-deactivate-survey-option-reason').text(),
114
+ details: $form.find('.selected input[type=text]').val(),
115
+ site: '<?php echo esc_url( home_url() ); ?>',
116
+ plugin: '<?php echo sanitize_key( $this->name ); ?>'
117
+ }
118
+ var submitSurvey = $.post('<?php echo $this->api_url; ?>', data);
119
+ submitSurvey.always(function() {
120
+ location.href = $deactivateLink.attr('href');
121
+ });
122
+ });
123
+ // Exit key closes survey when open.
124
+ $(document).keyup(function(event) {
125
+ if (27 === event.keyCode && formOpen) {
126
+ $overlay.hide();
127
+ formOpen = false;
128
+ $deactivateLink.focus();
129
+ }
130
+ });
131
+ });
132
+ </script>
133
+ <?php
134
+ }
135
+
136
+ /**
137
+ * Survey CSS.
138
+ *
139
+ * @since 1.0.0
140
+ */
141
+ public function css() {
142
+
143
+ if ( ! $this->is_plugin_page() ) {
144
+ return;
145
+ }
146
+ ?>
147
+ <style type="text/css">
148
+ .am-deactivate-survey-modal {
149
+ display: none;
150
+ table-layout: fixed;
151
+ position: fixed;
152
+ z-index: 9999;
153
+ width: 100%;
154
+ height: 100%;
155
+ text-align: center;
156
+ font-size: 14px;
157
+ top: 0;
158
+ left: 0;
159
+ background: rgba(0,0,0,0.8);
160
+ }
161
+ .am-deactivate-survey-wrap {
162
+ display: table-cell;
163
+ vertical-align: middle;
164
+ }
165
+ .am-deactivate-survey {
166
+ background-color: #fff;
167
+ max-width: 550px;
168
+ margin: 0 auto;
169
+ padding: 30px;
170
+ text-align: left;
171
+ }
172
+ .am-deactivate-survey .error {
173
+ display: block;
174
+ color: red;
175
+ margin: 0 0 10px 0;
176
+ }
177
+ .am-deactivate-survey-title {
178
+ display: block;
179
+ font-size: 18px;
180
+ font-weight: 700;
181
+ text-transform: uppercase;
182
+ border-bottom: 1px solid #ddd;
183
+ padding: 0 0 18px 0;
184
+ margin: 0 0 18px 0;
185
+ }
186
+ .am-deactivate-survey-title span {
187
+ color: #999;
188
+ margin-right: 10px;
189
+ }
190
+ .am-deactivate-survey-desc {
191
+ display: block;
192
+ font-weight: 600;
193
+ margin: 0 0 18px 0;
194
+ }
195
+ .am-deactivate-survey-option {
196
+ margin: 0 0 10px 0;
197
+ }
198
+ .am-deactivate-survey-option-input {
199
+ margin-right: 10px !important;
200
+ }
201
+ .am-deactivate-survey-option-details {
202
+ display: none;
203
+ width: 90%;
204
+ margin: 10px 0 0 30px;
205
+ }
206
+ .am-deactivate-survey-footer {
207
+ margin-top: 18px;
208
+ }
209
+ .am-deactivate-survey-deactivate {
210
+ float: right;
211
+ font-size: 13px;
212
+ color: #ccc;
213
+ text-decoration: none;
214
+ padding-top: 7px;
215
+ }
216
+ </style>
217
+ <?php
218
+ }
219
+
220
+ /**
221
+ * Survey modal.
222
+ *
223
+ * @since 1.0.0
224
+ */
225
+ public function modal() {
226
+
227
+ if ( ! $this->is_plugin_page() ) {
228
+ return;
229
+ }
230
+
231
+ $options = array(
232
+ 1 => array(
233
+ 'title' => 'I no longer need the plugin',
234
+ ),
235
+ 2 => array(
236
+ 'title' => 'I\'m switching to a different plugin',
237
+ 'details' => 'Please share which plugin',
238
+ ),
239
+ 3 => array(
240
+ 'title' => 'I couldn\'t get the plugin to work',
241
+ ),
242
+ 4 => array(
243
+ 'title' => 'It\'s a temporary deactivation',
244
+ ),
245
+ 5 => array(
246
+ 'title' => 'Other',
247
+ 'details' => 'Please share the reason',
248
+ ),
249
+ );
250
+ ?>
251
+ <div class="am-deactivate-survey-modal" id="am-deactivate-survey-<?php echo $this->plugin; ?>">
252
+ <div class="am-deactivate-survey-wrap">
253
+ <form class="am-deactivate-survey" method="post">
254
+ <span class="am-deactivate-survey-title"><span class="dashicons dashicons-testimonial"></span> Quick Feedback</span>
255
+ <span class="am-deactivate-survey-desc">If you have a moment, please share why you are deactivating <?php echo $this->name; ?>:</span>
256
+ <div class="am-deactivate-survey-options">
257
+ <?php foreach ( $options as $id => $option ) : ?>
258
+ <div class="am-deactivate-survey-option">
259
+ <label for="am-deactivate-survey-option-<?php echo $this->plugin; ?>-<?php echo $id; ?>" class="am-deactivate-survey-option-label">
260
+ <input id="am-deactivate-survey-option-<?php echo $this->plugin; ?>-<?php echo $id; ?>" class="am-deactivate-survey-option-input" type="radio" name="code" value="<?php echo $id; ?>" />
261
+ <span class="am-deactivate-survey-option-reason"><?php echo $option['title']; ?></span>
262
+ </label>
263
+ <?php if ( ! empty( $option['details'] ) ) : ?>
264
+ <input class="am-deactivate-survey-option-details" type="text" placeholder="<?php echo $option['details']; ?>" />
265
+ <?php endif; ?>
266
+ </div>
267
+ <?php endforeach; ?>
268
+ </div>
269
+ <div class="am-deactivate-survey-footer">
270
+ <button type="submit" class="am-deactivate-survey-submit button button-primary button-large">Submit &amp; Deactivate</button>
271
+ <a href="#" class="am-deactivate-survey-deactivate">Skip &amp; Deactivate</a>
272
+ </div>
273
+ </form>
274
+ </div>
275
+ </div>
276
+ <?php
277
+ }
278
+ }
279
+ } // End if().
includes/admin/class-am-notification.php ADDED
@@ -0,0 +1,353 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! class_exists( 'AM_Notification' ) ) {
3
+ /**
4
+ * Awesome Motive Notifications
5
+ *
6
+ * This creates a custom post type (if it doesn't exist) and calls the API to
7
+ * retrieve notifications for this product.
8
+ *
9
+ * @package AwesomeMotive
10
+ * @author Benjamin Rojas
11
+ * @license GPL-2.0+
12
+ * @copyright Copyright (c) 2017, Retyp LLC
13
+ * @version 1.0.0
14
+ */
15
+ class AM_Notification {
16
+ /**
17
+ * The api url we are calling.
18
+ *
19
+ * @since 1.0.0
20
+ *
21
+ * @var string
22
+ */
23
+ public $api_url = 'https://api.awesomemotive.com/v1/notification/';
24
+
25
+ /**
26
+ * A unique slug for this plugin.
27
+ * (Not the WordPress plugin slug)
28
+ *
29
+ * @since 1.0.0
30
+ *
31
+ * @var string
32
+ */
33
+ public $plugin;
34
+
35
+ /**
36
+ * The current plugin version.
37
+ *
38
+ * @since 1.0.0
39
+ *
40
+ * @var string
41
+ */
42
+ public $plugin_version;
43
+
44
+ /**
45
+ * The list of installed plugins.
46
+ *
47
+ * @since 1.0.0
48
+ *
49
+ * @var array
50
+ */
51
+ public $plugin_list = array();
52
+
53
+ /**
54
+ * The list of installed themes.
55
+ *
56
+ * @since 1.0.0
57
+ *
58
+ * @var string
59
+ */
60
+ public $theme_list = array();
61
+
62
+ /**
63
+ * Construct.
64
+ *
65
+ * @since 1.0.0
66
+ *
67
+ * @param string $plugin The plugin slug.
68
+ * @param string $version The version of the plugin.
69
+ */
70
+ public function __construct( $plugin = '', $version = 0 ) {
71
+ $this->plugin = $plugin;
72
+ $this->plugin_version = $version;
73
+
74
+ add_action( 'init', array( $this, 'custom_post_type' ) );
75
+ add_action( 'init', array( $this, 'get_remote_notifications' ), 100 );
76
+ add_action( 'admin_notices', array( $this, 'display_notifications' ) );
77
+ add_action( 'wp_ajax_am_notification_dismiss', array( $this, 'dismiss_notification' ) );
78
+ }
79
+
80
+ /**
81
+ * Registers a custom post type.
82
+ *
83
+ * @since 1.0.0
84
+ */
85
+ public function custom_post_type() {
86
+ register_post_type( 'amn_' . $this->plugin, array(
87
+ 'supports' => false
88
+ ) );
89
+ }
90
+
91
+ /**
92
+ * Retrieve the remote notifications if the time has expired.
93
+ *
94
+ * @since 1.0.0
95
+ */
96
+ public function get_remote_notifications() {
97
+ $last_checked = get_option( '_amn_' . $this->plugin . '_last_checked', strtotime( '-1 week' ) );
98
+
99
+ if ( $last_checked < strtotime( 'today midnight' ) ) {
100
+
101
+ $plugin_notifications = $this->get_plugin_notifications( 1 );
102
+
103
+ $notification_id = null;
104
+ if ( ! empty( $plugin_notifications) ) {
105
+ // Unset it from the array.
106
+ $notification = $plugin_notifications[0];
107
+ $notification_id = get_post_meta( $notification->ID, 'notification_id', true );
108
+ }
109
+
110
+ $response = wp_remote_retrieve_body( wp_remote_post( $this->api_url, array(
111
+ 'sslverify' => false,
112
+ 'body' => array(
113
+ 'slug' => $this->plugin,
114
+ 'version' => $this->plugin_version,
115
+ 'last_notification' => $notification_id,
116
+ 'plugins' => $this->get_plugins_list(),
117
+ 'themes' => $this->get_themes_list()
118
+ )
119
+ ) ) );
120
+
121
+ $data = json_decode( $response );
122
+
123
+ if ( ! empty( $data->id ) ) {
124
+
125
+ $notifications = array();
126
+ foreach ( (array) $data->slugs as $slug ) {
127
+ $notifications = array_merge( $notifications, (array) get_posts( array(
128
+ 'post_type' => 'amn_' . $slug,
129
+ 'post_status' => 'all',
130
+ 'meta_key' => 'notification_id',
131
+ 'meta_value' => $data->id
132
+ ) ) );
133
+ }
134
+
135
+ if ( empty( $notifications ) ) {
136
+
137
+ $new_notification_id = wp_insert_post( array(
138
+ 'post_content' => $data->content,
139
+ 'post_type' => 'amn_' . $this->plugin
140
+ ) );
141
+
142
+ update_post_meta( $new_notification_id, 'notification_id', $data->id );
143
+ update_post_meta( $new_notification_id, 'type', $data->type );
144
+ update_post_meta( $new_notification_id, 'dismissable', (bool) $data->dismissible ? 1 : 0 );
145
+ update_post_meta( $new_notification_id, 'location', wp_json_encode( $data->location ) );
146
+ update_post_meta( $new_notification_id, 'plugins', wp_json_encode( $data->plugins ) );
147
+ update_post_meta( $new_notification_id, 'theme', $data->theme );
148
+ update_post_meta( $new_notification_id, 'version', $data->version );
149
+ update_post_meta( $new_notification_id, 'viewed', 0 );
150
+ }
151
+
152
+ }
153
+
154
+ // Set the option now so we can't run this again until after 24 hours.
155
+ update_option( '_amn_' . $this->plugin . '_last_checked', strtotime( 'today midnight' ) );
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Get local plugin notifications that have already been set.
161
+ *
162
+ * @since 1.0.0
163
+ *
164
+ * @param integer $limit Set the limit for how many posts to retrieve.
165
+ * @param array $args Any top-level arguments to add to the array.
166
+ * @return object WP_Posts that match the query.
167
+ */
168
+ public function get_plugin_notifications( $limit = -1, $args = array() ) {
169
+ return get_posts( array(
170
+ 'showposts' => $limit,
171
+ 'post_type' => 'amn_' . $this->plugin
172
+ ) + $args );
173
+ }
174
+
175
+ /**
176
+ * Retrieve a list of plugins that are currently installed.
177
+ *
178
+ * @since 1.0.0
179
+ *
180
+ * @return array An array of plugins that are currently installed.
181
+ */
182
+ public function get_plugins_list() {
183
+ if ( ! empty( $this->plugin_list ) ) {
184
+ return $this->plugin_list;
185
+ }
186
+
187
+ if ( ! function_exists( 'get_plugins' ) ) {
188
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
189
+ }
190
+
191
+ $plugins = get_plugins();
192
+
193
+ foreach ( $plugins as $slug => $plugin ) {
194
+ $this->plugin_list[ $slug ] = array(
195
+ 'slug' => $slug,
196
+ 'name' => $plugin['Name'],
197
+ 'version' => $plugin['Version'],
198
+ 'active' => is_plugin_active( $slug )
199
+ );
200
+ }
201
+
202
+ return $this->plugin_list;
203
+ }
204
+
205
+ /**
206
+ * Retrieve a list of themes that are currently installed.
207
+ *
208
+ * @since 1.0.0
209
+ *
210
+ * @return array An array of themes that are currently installed.
211
+ */
212
+ public function get_themes_list() {
213
+ if ( ! empty( $this->theme_list ) ) {
214
+ return $this->theme_list;
215
+ }
216
+
217
+ $themes = wp_get_themes();
218
+
219
+ foreach ( $themes as $slug => $theme ) {
220
+ $this->theme_list[ $slug ] = array(
221
+ 'slug' => $slug,
222
+ 'name' => $theme->Name,
223
+ 'version' => $theme->Version,
224
+ 'active' => (string) wp_get_theme() == $theme->Name
225
+ );
226
+ }
227
+
228
+ return $this->theme_list;
229
+ }
230
+
231
+ /**
232
+ * Display any notifications that should be displayed.
233
+ *
234
+ * @since 1.0.0
235
+ */
236
+ public function display_notifications() {
237
+
238
+ if ( ! current_user_can( apply_filters( 'am_notifications_display', 'manage_options' ) ) ) {
239
+ return;
240
+ }
241
+
242
+ $plugin_notifications = $this->get_plugin_notifications( -1, array(
243
+ 'post_status' => 'all',
244
+ 'meta_key' => 'viewed',
245
+ 'meta_value' => '0'
246
+ ) );
247
+
248
+ $plugin_notifications = $this->validate_notifications( $plugin_notifications );
249
+
250
+ if ( ! empty( $plugin_notifications ) ) {
251
+ foreach ( $plugin_notifications as $notification ) {
252
+ $dismissable = get_post_meta( $notification->ID, 'dismissable', true );
253
+ $type = get_post_meta( $notification->ID, 'type', true );
254
+ ?>
255
+ <div class="am-notification am-notification-<?php echo $notification->ID; ?> notice notice-<?php echo $type; ?><?php echo $dismissable ? ' is-dismissible' : ''; ?>">
256
+ <?php echo $notification->post_content; ?>
257
+ </div>
258
+ <script type="text/javascript">
259
+ jQuery(document).ready( function($) {
260
+ $(document).on('click', '.am-notification-<?php echo $notification->ID; ?> button.notice-dismiss', function( event ) {
261
+ $.post( ajaxurl, {
262
+ action: 'am_notification_dismiss',
263
+ notification_id: '<?php echo $notification->ID; ?>'
264
+ });
265
+ });
266
+ });
267
+ </script>
268
+ <?php }
269
+ }
270
+ }
271
+
272
+ /**
273
+ * Validate the notifications before displaying them.
274
+ *
275
+ * @since 1.0.0
276
+ *
277
+ * @param array $plugin_notifications An array of plugin notifications.
278
+ * @return array A filtered array of plugin notifications.
279
+ */
280
+ public function validate_notifications( $plugin_notifications ) {
281
+ global $pagenow;
282
+ foreach ( $plugin_notifications as $key => $notification ) {
283
+ // Location validation.
284
+ $location = (array) json_decode( get_post_meta( $notification->ID, 'location', true ) );
285
+ $continue = false;
286
+ if ( ! in_array( 'everywhere', $location ) ) {
287
+ if ( in_array( 'index.php', $location ) && 'index.php' == $pagenow ) {
288
+ $continue = true;
289
+ }
290
+
291
+ if ( in_array( 'plugins.php', $location ) && 'plugins.php' == $pagenow ) {
292
+ $continue = true;
293
+ }
294
+
295
+ if ( ! $continue ) {
296
+ unset( $plugin_notifications[ $key ] );
297
+ }
298
+ }
299
+
300
+ // Plugin validation (OR conditional)
301
+ $plugins = (array) json_decode( get_post_meta( $notification->ID, 'plugins', true ) );
302
+ $continue = false;
303
+ if ( ! empty( $plugins ) ) {
304
+ foreach ( $plugins as $plugin ) {
305
+ if ( is_plugin_active( $plugin ) ) {
306
+ $continue = true;
307
+ }
308
+ }
309
+
310
+ if ( ! $continue ) {
311
+ unset( $plugin_notifications[ $key ] );
312
+ }
313
+ }
314
+
315
+ // Theme validation.
316
+ $theme = get_post_meta( $notification->ID, 'theme', true );
317
+ $continue = (string) wp_get_theme() == $theme;
318
+
319
+ if ( ! empty( $theme ) && ! $continue ) {
320
+ unset( $plugin_notifications[ $key ] );
321
+ }
322
+
323
+ // Version validation.
324
+ $version = get_post_meta( $notification->ID, 'version', true );
325
+ $continue = false;
326
+ if ( ! empty( $version ) ) {
327
+ if ( version_compare( $this->plugin_version, $version, '<=' ) ) {
328
+ $continue = true;
329
+ }
330
+
331
+ if ( ! $continue ) {
332
+ unset( $plugin_notifications[ $key ] );
333
+ }
334
+ }
335
+
336
+ }
337
+
338
+ return $plugin_notifications;
339
+ }
340
+
341
+ /**
342
+ * Dismiss the notification via AJAX.
343
+ *
344
+ * @since 1.0.0
345
+ */
346
+ public function dismiss_notification() {
347
+ $notification_id = intval( $_POST['notification_id'] );
348
+ update_post_meta( $notification_id, 'viewed', 1 );
349
+ die;
350
+ }
351
+
352
+ }
353
+ }
includes/admin/class-menu.php CHANGED
@@ -7,7 +7,7 @@
7
  * @since 1.0.0
8
  * @license GPL-2.0+
9
  * @copyright Copyright (c) 2016, WPForms LLC
10
- */
11
  class WPForms_Admin_Menu {
12
 
13
  /**
@@ -17,9 +17,12 @@ class WPForms_Admin_Menu {
17
  */
18
  public function __construct() {
19
 
20
- // Let's make some menus
21
- add_action( 'admin_menu', array( $this, 'register_menus' ), 9 );
22
- add_action( 'admin_enqueue_scripts', array( $this, 'menu_icon' ) );
 
 
 
23
  }
24
 
25
  /**
@@ -31,7 +34,7 @@ class WPForms_Admin_Menu {
31
 
32
  $menu_cap = apply_filters( 'wpforms_manage_cap', 'manage_options' );
33
 
34
- // Default Forms top level menu item
35
  add_menu_page(
36
  __( 'WPForms', 'wpforms' ),
37
  __( 'WPForms', 'wpforms' ),
@@ -42,7 +45,7 @@ class WPForms_Admin_Menu {
42
  apply_filters( 'wpforms_menu_position', '57.7' )
43
  );
44
 
45
- // All Forms sub menu item
46
  add_submenu_page(
47
  'wpforms-overview',
48
  __( 'WPForms', 'wpforms' ),
@@ -52,7 +55,7 @@ class WPForms_Admin_Menu {
52
  array( $this, 'admin_page' )
53
  );
54
 
55
- // Add New sub menu item
56
  add_submenu_page(
57
  'wpforms-overview',
58
  __( 'WPForms Builder', 'wpforms' ),
@@ -62,7 +65,7 @@ class WPForms_Admin_Menu {
62
  array( $this, 'admin_page' )
63
  );
64
 
65
- // Entries sub menu item
66
  add_submenu_page(
67
  'wpforms-overview',
68
  __( 'Form Entries', 'wpforms' ),
@@ -74,7 +77,7 @@ class WPForms_Admin_Menu {
74
 
75
  do_action( 'wpform_admin_menu', $this );
76
 
77
- // Settings sub menu item
78
  add_submenu_page(
79
  'wpforms-overview',
80
  __( 'WPForms Settings', 'wpforms' ),
@@ -84,6 +87,16 @@ class WPForms_Admin_Menu {
84
  array( $this, 'admin_page' )
85
  );
86
 
 
 
 
 
 
 
 
 
 
 
87
  // Hidden placeholder paged used for misc content.
88
  add_submenu_page(
89
  'wpforms-settings',
@@ -94,7 +107,7 @@ class WPForms_Admin_Menu {
94
  array( $this, 'admin_page' )
95
  );
96
 
97
- // Addons submenu page
98
  add_submenu_page(
99
  'wpforms-overview',
100
  __( 'WPForms Addons', 'wpforms' ),
@@ -105,6 +118,11 @@ class WPForms_Admin_Menu {
105
  );
106
  }
107
 
 
 
 
 
 
108
  public function admin_page() {
109
 
110
  do_action( 'wpforms_admin_page' );
@@ -117,12 +135,70 @@ class WPForms_Admin_Menu {
117
  */
118
  public function menu_icon() {
119
 
120
- wp_enqueue_style(
121
- 'wpforms-menu',
122
- WPFORMS_PLUGIN_URL . 'assets/css/admin-menu.css',
123
- null,
124
- WPFORMS_VERSION
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  );
 
 
 
 
126
  }
 
127
  }
128
- $wpforms_admin_menu = new WPForms_Admin_Menu;
7
  * @since 1.0.0
8
  * @license GPL-2.0+
9
  * @copyright Copyright (c) 2016, WPForms LLC
10
+ */
11
  class WPForms_Admin_Menu {
12
 
13
  /**
17
  */
18
  public function __construct() {
19
 
20
+ // Let's make some menus.
21
+ add_action( 'admin_menu', array( $this, 'register_menus' ), 9 );
22
+ add_action( 'admin_print_styles', array( $this, 'menu_icon' ) );
23
+
24
+ // Plugins page settings link.
25
+ add_filter( 'plugin_action_links_' . plugin_basename( WPFORMS_PLUGIN_DIR . 'wpforms.php' ), array( $this, 'settings_link' ) );
26
  }
27
 
28
  /**
34
 
35
  $menu_cap = apply_filters( 'wpforms_manage_cap', 'manage_options' );
36
 
37
+ // Default Forms top level menu item.
38
  add_menu_page(
39
  __( 'WPForms', 'wpforms' ),
40
  __( 'WPForms', 'wpforms' ),
45
  apply_filters( 'wpforms_menu_position', '57.7' )
46
  );
47
 
48
+ // All Forms sub menu item.
49
  add_submenu_page(
50
  'wpforms-overview',
51
  __( 'WPForms', 'wpforms' ),
55
  array( $this, 'admin_page' )
56
  );
57
 
58
+ // Add New sub menu item.
59
  add_submenu_page(
60
  'wpforms-overview',
61
  __( 'WPForms Builder', 'wpforms' ),
65
  array( $this, 'admin_page' )
66
  );
67
 
68
+ // Entries sub menu item.
69
  add_submenu_page(
70
  'wpforms-overview',
71
  __( 'Form Entries', 'wpforms' ),
77
 
78
  do_action( 'wpform_admin_menu', $this );
79
 
80
+ // Settings sub menu item.
81
  add_submenu_page(
82
  'wpforms-overview',
83
  __( 'WPForms Settings', 'wpforms' ),
87
  array( $this, 'admin_page' )
88
  );
89
 
90
+ // Tools sub menu item.
91
+ add_submenu_page(
92
+ 'wpforms-overview',
93
+ __( 'WPForms Tools', 'wpforms' ),
94
+ __( 'Tools', 'wpforms' ),
95
+ $menu_cap,
96
+ 'wpforms-tools',
97
+ array( $this, 'admin_page' )
98
+ );
99
+
100
  // Hidden placeholder paged used for misc content.
101
  add_submenu_page(
102
  'wpforms-settings',
107
  array( $this, 'admin_page' )
108
  );
109
 
110
+ // Addons submenu page.
111
  add_submenu_page(
112
  'wpforms-overview',
113
  __( 'WPForms Addons', 'wpforms' ),
118
  );
119
  }
120
 
121
+ /**
122
+ * Wrapper for the hook to render our custom settings pages.
123
+ *
124
+ * @since 1.0.0
125
+ */
126
  public function admin_page() {
127
 
128
  do_action( 'wpforms_admin_page' );
135
  */
136
  public function menu_icon() {
137
 
138
+ $menu_cap = apply_filters( 'wpforms_manage_cap', 'manage_options' );
139
+
140
+ if ( ! current_user_can( $menu_cap ) ) {
141
+ return;
142
+ }
143
+ ?>
144
+ <style type="text/css">
145
+ @font-face {
146
+ font-family: "wpforms-menu";
147
+ src:url("<?php echo WPFORMS_PLUGIN_URL; ?>assets/fonts/wpforms-menu.eot");
148
+ src:url("<?php echo WPFORMS_PLUGIN_URL; ?>assets/fonts/wpforms-menu.eot?#iefix") format("embedded-opentype"),
149
+ url("<?php echo WPFORMS_PLUGIN_URL; ?>assets/fonts/wpforms-menu.woff") format("woff"),
150
+ url("<?php echo WPFORMS_PLUGIN_URL; ?>assets/fonts/wpforms-menu.ttf") format("truetype"),
151
+ url("<?php echo WPFORMS_PLUGIN_URL; ?>assets/fonts/wpforms-menu.svg#wpforms") format("svg");
152
+ font-weight: normal;
153
+ font-style: normal;
154
+ }
155
+ #toplevel_page_wpforms-overview .wp-menu-image:before,
156
+ .wpforms-menu-icon:before {
157
+ content: "\61";
158
+ font-family: "wpforms-menu" !important;
159
+ font-style: normal !important;
160
+ font-weight: normal !important;
161
+ font-variant: normal !important;
162
+ text-transform: none !important;
163
+ speak: none;
164
+ line-height: 1;
165
+ -webkit-font-smoothing: antialiased;
166
+ -moz-osx-font-smoothing: grayscale;
167
+ }
168
+ #toplevel_page_wpforms-overview .wp-menu-image:before {
169
+ font-size: 1.15em;
170
+ padding-top: 9px;
171
+ }
172
+ </style>
173
+ <?php
174
+ }
175
+
176
+ /**
177
+ * Add settings link to the Plugins page.
178
+ *
179
+ * @since 1.3.9
180
+ * @param array $links
181
+ * @return array $links
182
+ */
183
+ public function settings_link( $links ) {
184
+
185
+ $admin_link = add_query_arg(
186
+ array(
187
+ 'page' => 'wpforms-settings',
188
+ ),
189
+ admin_url( 'admin.php' )
190
+ );
191
+
192
+ $setting_link = sprintf(
193
+ '<a href="%s">%s</a>',
194
+ $admin_link ,
195
+ __( 'Settings', 'wpforms' )
196
  );
197
+
198
+ array_unshift( $links, $setting_link );
199
+
200
+ return $links;
201
  }
202
+
203
  }
204
+ new WPForms_Admin_Menu;
includes/admin/class-notices.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Admin notices, on the fly.
4
+ *
5
+ * @example
6
+ * Notice::success( 'All is good!' );
7
+ *
8
+ * @example
9
+ * Notice::warning( 'Do something please.' );
10
+ *
11
+ * @todo Persistent, dismissable notices
12
+ * @link https://gist.github.com/monkeymonk/2ea17e2260daaecd0049c46c8d6c85fd
13
+ * @package WPForms
14
+ * @author WPForms
15
+ * @since 1.3.9
16
+ * @license GPL-2.0+
17
+ * @copyright Copyright (c) 2017, WPForms LLC
18
+ */
19
+ class WPForms_Admin_Notice {
20
+
21
+ /**
22
+ * Single instance holder.
23
+ *
24
+ * @since 1.3.9
25
+ * @var mixed
26
+ */
27
+ private static $_instance = null;
28
+
29
+ /**
30
+ * Added notices.
31
+ *
32
+ * @since 1.3.9
33
+ * @var array
34
+ */
35
+ public $notices = array();
36
+
37
+ /**
38
+ * Get the instance.
39
+ *
40
+ * @since 1.3.9
41
+ * @return WPForms_Admin
42
+ */
43
+ public static function getInstance() {
44
+
45
+ if ( is_null( self::$_instance ) ) {
46
+ self::$_instance = new WPForms_Admin_Notice();
47
+ }
48
+
49
+ return self::$_instance;
50
+ }
51
+
52
+ /**
53
+ * Hook when called.
54
+ *
55
+ * @since 1.3.9
56
+ */
57
+ public function __construct() {
58
+
59
+ add_action( 'admin_notices', array( &$this, 'display' ) );
60
+ }
61
+
62
+ /**
63
+ * Display the notices.
64
+ *
65
+ * @since 1.3.9
66
+ */
67
+ public function display() {
68
+
69
+ if ( ! current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
70
+ return;
71
+ }
72
+
73
+ echo implode( ' ', $this->notices );
74
+ }
75
+
76
+ /**
77
+ * Add notice to instance property.
78
+ *
79
+ * @since 1.3.9
80
+ * @param $message Message to display
81
+ * @param string $type Type of the notice (default: '')
82
+ */
83
+ public static function add( $message, $type = '' ) {
84
+
85
+ $instance = self::getInstance();
86
+ $id = 'wpforms-notice-' . ( count( $instance->notices ) + 1 );
87
+ $type = ! empty( $type ) ? 'notice-' . $type : '';
88
+ $notice = sprintf( '<div class="notice wpforms-notice %s" id="%s">%s</div>', $type, $id, wpautop( $message ) );
89
+
90
+ $instance->notices[] = $notice;
91
+ }
92
+
93
+ /**
94
+ * Add Info notice.
95
+ *
96
+ * @since 1.3.9
97
+ * @param string $message Message to display
98
+ */
99
+ public static function info( $message ) {
100
+
101
+ self::add( $message, 'info' );
102
+ }
103
+
104
+ /**
105
+ * Add Error notice.
106
+ *
107
+ * @since 1.3.9
108
+ * @param string $message Message to display
109
+ */
110
+ public static function error( $message ){
111
+
112
+ self::add( $message, 'error' );
113
+ }
114
+
115
+ /**
116
+ * Add Success notice.
117
+ *
118
+ * @since 1.3.9
119
+ * @param string $message Message to display
120
+ */
121
+ public static function success( $message ){
122
+
123
+ self::add( $message, 'success' );
124
+ }
125
+
126
+ /**
127
+ * Add Warning notice.
128
+ *
129
+ * @since 1.3.9
130
+ * @param string $message Message to display
131
+ */
132
+ public static function warning( $message ) {
133
+
134
+ self::add( $message, 'warning' );
135
+ }
136
+ }
{lite/includes → includes}/admin/class-review.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * License key fun.
4
  *
5
  * @package WPForms
6
  * @author WPForms
@@ -63,10 +63,67 @@ class WPForms_Review {
63
  // Update the review option now.
64
  update_option( 'wpforms_review', $review );
65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  // Fetch when plugin was initially installed
67
  $activated = get_option( 'wpforms_activated', array() );
68
 
69
- if ( !empty( $activated['lite'] ) ) {
70
  // Only continue if plugin has been installed for at least 7 days
71
  if ( ( $activated['lite'] + ( DAY_IN_SECONDS * 7 ) ) > time() ) {
72
  return;
@@ -139,4 +196,4 @@ class WPForms_Review {
139
  }
140
 
141
  }
142
- new WPForms_Review;
1
  <?php
2
  /**
3
+ * Ask for some love.
4
  *
5
  * @package WPForms
6
  * @author WPForms
63
  // Update the review option now.
64
  update_option( 'wpforms_review', $review );
65
 
66
+ // Logic is slightly different depending on what's at our disposal.
67
+ if ( wpforms()->pro && class_exists( 'WPForms_Entry_Handler' ) ) {
68
+ $this->review();
69
+ } else {
70
+ $this->review_lite();
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Maybe show review request.
76
+ *
77
+ * @since 1.3.9
78
+ */
79
+ public function review() {
80
+
81
+ // Fetch total entries
82
+ $entries = wpforms()->entry->get_entries( array( 'number' => 50 ), true );
83
+
84
+ // Only show review request if the site has collected at least 50 entries
85
+ if ( empty( $entries ) || $entries < 50 ) {
86
+ return;
87
+ }
88
+
89
+ // We have a candidate! Output a review message.
90
+ ?>
91
+ <div class="notice notice-info is-dismissible wpforms-review-notice">
92
+ <p><?php _e( 'Hey, I noticed you collected over 50 entries from WPForms - that’s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?', 'wpforms' ); ?></p>
93
+ <p><strong><?php _e( '~ Syed Balkhi<br>Co-Founder of WPForms', 'wpforms' ); ?></strong></p>
94
+ <p>
95
+ <a href="https://wordpress.org/support/plugin/wpforms-lite/reviews/?filter=5#new-post" class="wpforms-dismiss-review-notice wpforms-review-out" target="_blank" rel="noopener"><?php _e( 'Ok, you deserve it', 'wpforms' ); ?></a><br>
96
+ <a href="#" class="wpforms-dismiss-review-notice" target="_blank" rel="noopener"><?php _e( 'Nope, maybe later', 'wpforms' ); ?></a><br>
97
+ <a href="#" class="wpforms-dismiss-review-notice" target="_blank" rel="noopener"><?php _e( 'I already did', 'wpforms' ); ?></a>
98
+ </p>
99
+ </div>
100
+ <script type="text/javascript">
101
+ jQuery(document).ready( function($) {
102
+ $(document).on('click', '.wpforms-dismiss-review-notice, .wpforms-review-notice button', function( event ) {
103
+ if ( ! $(this).hasClass('wpforms-review-out') ) {
104
+ event.preventDefault();
105
+ }
106
+ $.post( ajaxurl, {
107
+ action: 'wpforms_review_dismiss'
108
+ });
109
+ $('.wpforms-review-notice').remove();
110
+ });
111
+ });
112
+ </script>
113
+ <?php
114
+ }
115
+
116
+ /**
117
+ * Maybe show Lite review request.
118
+ *
119
+ * @since 1.3.9
120
+ */
121
+ public function review_lite() {
122
+
123
  // Fetch when plugin was initially installed
124
  $activated = get_option( 'wpforms_activated', array() );
125
 
126
+ if ( ! empty( $activated['lite'] ) ) {
127
  // Only continue if plugin has been installed for at least 7 days
128
  if ( ( $activated['lite'] + ( DAY_IN_SECONDS * 7 ) ) > time() ) {
129
  return;
196
  }
197
 
198
  }
199
+ new WPForms_Review;
includes/admin/class-settings.php ADDED
@@ -0,0 +1,505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Settings class.
4
+ *
5
+ * @package WPForms
6
+ * @author WPForms
7
+ * @since 1.0.0
8
+ * @license GPL-2.0+
9
+ * @copyright Copyright (c) 2016, WPForms LLC
10
+ */
11
+ class WPForms_Settings {
12
+
13
+ /**
14
+ * The current active tab.
15
+ *
16
+ * @since 1.3.9
17
+ * @var array
18
+ */
19
+ public $view;
20
+
21
+ /**
22
+ * Primary class constructor.
23
+ *
24
+ * @since 1.0.0
25
+ */
26
+ public function __construct() {
27
+
28
+ // Maybe load settings page.
29
+ add_action( 'admin_init', array( $this, 'init' ) );
30
+ }
31
+
32
+ /**
33
+ * Determing if the user is viewing the settings page, if so, party on.
34
+ *
35
+ * @since 1.0.0
36
+ */
37
+ public function init() {
38
+
39
+ // Check what page we are on.
40
+ $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
41
+
42
+ // Only load if we are actually on the settings page.
43
+ if ( 'wpforms-settings' === $page ) {
44
+
45
+ // Include API callbacks and functions.
46
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/settings-api.php';
47
+
48
+ // Watch for triggered save.
49
+ $this->save_settings();
50
+
51
+ // Determine the current active settings tab.
52
+ $this->view = isset( $_GET['view'] ) ? esc_html( $_GET['view'] ) : 'general';
53
+
54
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
55
+ add_action( 'wpforms_admin_settings_after', array( $this, 'captcha_addon_notice' ) );
56
+ add_action( 'wpforms_admin_page', array( $this, 'output' ) );
57
+
58
+ // Hook for add-ons.
59
+ do_action( 'wpforms_settings_init' );
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Sanitize and save setings.
65
+ *
66
+ * @since 1.3.9
67
+ */
68
+ public function save_settings() {
69
+
70
+ // Check nonce and other various security checks.
71
+ if ( ! isset( $_POST['wpforms-settings-submit'] ) ) {
72
+ return;
73
+ }
74
+
75
+ if ( ! wp_verify_nonce( $_POST['nonce'], 'wpforms-settings-nonce' ) ) {
76
+ return;
77
+ }
78
+
79
+ if ( ! current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
80
+ return;
81
+ }
82
+
83
+ if ( empty( $_POST['view'] ) ) {
84
+ return;
85
+ }
86
+
87
+ // Get registered fields and current settings.
88
+ $fields = $this->get_registered_settings( $_POST['view'] );
89
+ $settings = get_option( 'wpforms_settings', array() );
90
+
91
+ if ( empty( $fields ) || ! is_array( $fields ) ) {
92
+ return;
93
+ }
94
+
95
+ // Sanitize and prep each field.
96
+ foreach ( $fields as $id => $field ) {
97
+
98
+ // Certain field types are not valid for saving and are skipped.
99
+ $exclude = apply_filters( 'wpforms_settings_exclude_type', array( 'content', 'license', 'providers' ) );
100
+
101
+ if ( empty( $field['type'] ) || in_array( $field['type'], $exclude, true ) ) {
102
+ continue;
103
+ }
104
+
105
+ $value = isset( $_POST[ $id ] ) ? trim( $_POST[ $id ] ) : false;
106
+ $vaue_prev = isset( $settings[ $id ] ) ? $settings[ $id ] : false;
107
+
108
+ // Custom filter can be provided for sanitizing, otherwise use
109
+ // defaults.
110
+ if ( ! empty( $field['filter'] ) && function_exists( $field['filter'] ) ) {
111
+
112
+ $value = call_user_func( $field['filter'], $value, $id, $field, $value_prev );
113
+
114
+ } else {
115
+
116
+ switch ( $field['type'] ) {
117
+ case 'checkbox':
118
+ $value = (bool) $value;
119
+ break;
120
+ case 'image':
121
+ $value = esc_url_raw( $value );
122
+ break;
123
+ case 'color':
124
+ $value = wpforms_sanitize_hex_color( $value );
125
+ break;
126
+ case 'text':
127
+ case 'radio':
128
+ case 'select':
129
+ default:
130
+ $value = sanitize_text_field( $value );
131
+ break;
132
+ }
133
+ }
134
+
135
+ // Add to settings.
136
+ $settings[ $id ] = $value;
137
+ }
138
+
139
+ // Save settings.
140
+ update_option( 'wpforms_settings', $settings );
141
+
142
+ WPForms_Admin_Notice::success( __( 'Settings saved.', 'wpforms' ) );
143
+ }
144
+
145
+ /**
146
+ * Enqueue assets for the settings page.
147
+ *
148
+ * @since 1.0.0
149
+ */
150
+ public function enqueues() {
151
+
152
+ // Hook for add-ons.
153
+ do_action( 'wpforms_settings_enqueue' );
154
+ }
155
+
156
+ /**
157
+ * Return registered settings tabs.
158
+ *
159
+ * @since 1.3.9
160
+ * @return array
161
+ */
162
+ public function get_tabs() {
163
+
164
+ $tabs = array(
165
+ 'general' => array(
166
+ 'name' => __( 'General', 'wpforms' ),
167
+ 'form' => true,
168
+ 'submit' => __( 'Save Settings', 'wpforms' ),
169
+ ),
170
+ 'email' => array(
171
+ 'name' => __( 'Email', 'wpforms' ),
172
+ 'form' => true,
173
+ 'submit' => __( 'Save Settings', 'wpforms' ),
174
+ ),
175
+ 'recaptcha' => array(
176
+ 'name' => __( 'reCAPTCHA', 'wpforms' ),
177
+ 'form' => true,
178
+ 'submit' => __( 'Save Settings', 'wpforms' ),
179
+ ),
180
+ 'validation' => array(
181
+ 'name' => __( 'Validation', 'wpforms' ),
182
+ 'form' => true,
183
+ 'submit' => __( 'Save Settings', 'wpforms' ),
184
+ ),
185
+ 'integrations' => array(
186
+ 'name' => __( 'Integrations', 'wpforms' ),
187
+ 'form' => false,
188
+ 'submit' => false,
189
+ ),
190
+ );
191
+ return apply_filters( 'wpforms_settings_tabs', $tabs );
192
+ }
193
+
194
+ /**
195
+ * Output tab navigation area.
196
+ *
197
+ * @since 1.3.9
198
+ */
199
+ public function tabs() {
200
+
201
+ $tabs = $this->get_tabs();
202
+
203
+ echo '<ul class="wpforms-admin-tabs">';
204
+ foreach ( $tabs as $id => $tab ) {
205
+
206
+ $active = $id === $this->view ? 'active' : '';
207
+ $name = esc_html( $tab['name'] );
208
+ $link = esc_url_raw( add_query_arg( 'view', $id, admin_url( 'admin.php?page=wpforms-settings' ) ) );
209
+
210
+ echo '<li><a href="' . $link . '" class="' . $active . '">' . $name . '</a></li>';
211
+ }
212
+ echo '</ul>';
213
+ }
214
+
215
+ /**
216
+ * Return all the default registered settings fields.
217
+ *
218
+ * @since 1.3.9
219
+ * @param string $view
220
+ * @return array
221
+ */
222
+ public function get_registered_settings( $view = '' ) {
223
+
224
+ // reCAPTCAH heading description is long so we define it seperately.
225
+ $recaptcha_desc = '<p>' . __( 'reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease.', 'wpforms' ) . '</p>';
226
+ $recaptcha_desc .= '<p>' . __( 'Google\'s original <a href="https://www.google.com/recaptcha/intro/" target="_blank" rel="noopener noreferrer">v2 reCAPTCHA</a> prompts users to check a box to prove they\'re human, whereas <a href="https://www.google.com/recaptcha/intro/invisible.html" target="_blank" rel="noopener noreferrer">Invisible reCAPTCHA</a> uses advanced technology to detect real users without requiring any input.', 'wpforms' ) . '</p>';
227
+ $recaptcha_desc .= '<p>' . __( 'Sites already using v2 reCAPTCHA will need to create new site keys before switching to the Invisible reCAPTCHA.', 'wpforms' ) . '</p>';
228
+ $recaptcha_desc .= '<p>' . __( '<a href="https://wpforms.com/docs/setup-captcha-wpforms/" rel="noopener noreferrer" target="_blank">Read our walk through</a> to learn more and for step-by-step directions.', 'wpforms' ) . '</p>';
229
+
230
+ $defaults = array(
231
+ // General Settings tab.
232
+ 'general' => array(
233
+ 'license-heading' => array(
234
+ 'id' => 'license-heading',
235
+ 'content' => '<h4>' . __( 'License', 'wpforms' ) . '</h4><p>' . __( 'Your license key provides access to updates and Add-ons', 'wpforms' ) . '</p>',
236
+ 'type' => 'content',
237
+ 'no_label' => true,
238
+ 'class' => array( 'section-heading' ),
239
+ ),
240
+ 'license-key' => array(
241
+ 'id' => 'license-key',
242
+ 'name' => __( 'License Key', 'wpforms' ),
243
+ 'type' => 'license',
244
+ ),
245
+ 'general-heading' => array(
246
+ 'id' => 'general-heading',
247
+ 'content' => '<h4>' . __( 'General', 'wpforms' ) . '</h4>',
248
+ 'type' => 'content',
249
+ 'no_label' => true,
250
+ 'class' => array( 'section-heading', 'no-desc' ),
251
+ ),
252
+ 'disable-css' => array(
253
+ 'id' => 'disable-css',
254
+ 'name' => __( 'Include Form Styling', 'wpforms' ),
255
+ 'desc' => __( 'Determines which CSS files to load for the site.', 'wpforms' ),
256
+ 'type' => 'select',
257
+ 'choicesjs' => true,
258
+ 'default' => 1,
259
+ 'options' => array(
260
+ 1 => __( 'Base and form theme styling', 'wpforms' ),
261
+ 2 => __( 'Base styling only', 'wpforms' ),
262
+ 3 => __( 'No styling', 'wpforms' ),
263
+ ),
264
+ ),
265
+ 'global-assets' => array(
266
+ 'id' => 'global-assets',
267
+ 'name' => __( 'Load Assets Globally', 'wpforms' ),
268
+ 'desc' => __( 'Check this if you would like to load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support.', 'wpforms' ),
269
+ 'type' => 'checkbox',
270
+ ),
271
+ ),
272
+ // Email settings tab.
273
+ 'email' => array(
274
+ 'email-heading' => array(
275
+ 'id' => 'email-heading',
276
+ 'content' => '<h4>' . __( 'Email', 'wpforms' ) . '</h4>',
277
+ 'type' => 'content',
278
+ 'no_label' => true,
279
+ 'class' => array( 'section-heading', 'no-desc' ),
280
+ ),
281
+ 'email-template' => array(
282
+ 'id' => 'email-template',
283
+ 'name' => __( 'Template', 'wpforms' ),
284
+ 'desc' => __( 'Determines how email notifications will be formatted. HTML Templates are the default.', 'wpforms' ),
285
+ 'type' => 'radio',
286
+ 'default' => 'default',
287
+ 'options' => array(
288
+ 'default' => __( 'HTML Template', 'wpforms' ),
289
+ 'none' => __( 'Plain text', 'wpforms' ),
290
+ ),
291
+ ),
292
+ 'email-header-image' => array(
293
+ 'id' => 'email-header-image',
294
+ 'name' => __( 'Header Image', 'wpforms' ),
295
+ 'desc' => __( 'Upload or choose a logo to be displayed at the top of email notifications.<br>Recommended size is 300x100 or smaller for best support on all devices.', 'wpforms' ),
296
+ 'type' => 'image',
297
+ ),
298
+ 'email-background-color' => array(
299
+ 'id' => 'email-background-color',
300
+ 'name' => __( 'Background Color', 'wpforms' ),
301
+ 'desc' => __( 'Customize the background color of the HTML email template.', 'wpforms' ),
302
+ 'type' => 'color',
303
+ 'default' => '#e9eaec',
304
+ ),
305
+ 'email-carbon-copy' => array(
306
+ 'id' => 'email-carbon-copy',
307
+ 'name' => __( 'Carbon Copy', 'wpforms' ),
308
+ 'desc' => __( 'Check this if you would like to enable the ability to CC: email addresses in the form notification settings.', 'wpforms' ),
309
+ 'type' => 'checkbox',
310
+ ),
311
+ ),
312
+ // Recaptcha settings tab.
313
+ 'recaptcha' => array(
314
+ 'recaptcha-heading' => array(
315
+ 'id' => 'recaptcha-heading',
316
+ 'content' => '<h4>' . __( 'reCAPTCHA', 'wpforms' ) . '</h4>' . $recaptcha_desc,
317
+ 'type' => 'content',
318
+ 'no_label' => true,
319
+ 'class' => array( 'section-heading' ),
320
+ ),
321
+ 'recaptcha-type' => array(
322
+ 'id' => 'recaptcha-type',
323
+ 'name' => __( 'Type', 'wpforms' ),
324
+ 'type' => 'radio',
325
+ 'default' => 'default',
326
+ 'options' => array(
327
+ 'v2' => __( 'v2 reCAPTCHA', 'wpforms' ),
328
+ 'invisible' => __( 'Invisible reCAPTCHA', 'wpforms' ),
329
+ ),
330
+ ),
331
+ 'recaptcha-site-key' => array(
332
+ 'id' => 'recaptcha-site-key',
333
+ 'name' => __( 'Site Key', 'wpforms' ),
334
+ 'type' => 'text',
335
+ ),
336
+ 'recaptcha-secret-key' => array(
337
+ 'id' => 'recaptcha-secret-key',
338
+ 'name' => __( 'Secret Key', 'wpforms' ),
339
+ 'type' => 'text',
340
+ ),
341
+ ),
342
+ // Validation messages settings tab.
343
+ 'validation' => array(
344
+ 'validation-heading' => array(
345
+ 'id' => 'validation-heading',
346
+ 'content' => '<h4>' . __( 'Validation Messages', 'wpforms' ) . '</h4><p>' . __( 'These messages are displayed to the user as they fill out a form in real-time.', 'wpforms' ) . '</p>',
347
+ 'type' => 'content',
348
+ 'no_label' => true,
349
+ 'class' => array( 'section-heading' ),
350
+ ),
351
+ 'validation-required' => array(
352
+ 'id' => 'validation-required',
353
+ 'name' => __( 'Required', 'wpforms' ),
354
+ 'type' => 'text',
355
+ 'default' => __( 'This field is required.', 'wpforms' ),
356
+ ),
357
+ 'validation-url' => array(
358
+ 'id' => 'validation-url',
359
+ 'name' => __( 'Website URL', 'wpforms' ),
360
+ 'type' => 'text',
361
+ 'default' => __( 'Please enter a valid URL.', 'wpforms' ),
362
+ ),
363
+ 'validation-email' => array(
364
+ 'id' => 'validation-email',
365
+ 'name' => __( 'Email', 'wpforms' ),
366
+ 'type' => 'text',
367
+ 'default' => __( 'Please enter a valid email address.', 'wpforms' ),
368
+ ),
369
+ 'validation-number' => array(
370
+ 'id' => 'validation-number',
371
+ 'name' => __( 'Number', 'wpforms' ),
372
+ 'type' => 'text',
373
+ 'default' => __( 'Please enter a valid number.', 'wpforms' ),
374
+ ),
375
+ 'validation-confirm' => array(
376
+ 'id' => 'validation-confirm',
377
+ 'name' => __( 'Confirm Value', 'wpforms' ),
378
+ 'type' => 'text',
379
+ 'default' => __( 'Field values do not match.', 'wpforms' ),
380
+ ),
381
+ ),
382
+ // Provider integrations settings tab.
383
+ 'integrations' => array(
384
+ 'integrations-heading' => array(
385
+ 'id' => 'integrations-heading',
386
+ 'content' => '<h4>' . __( 'Integrations', 'wpforms' ) . '</h4><p>' . __( 'Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more.', 'wpforms' ) . '</p>',
387
+ 'type' => 'content',
388
+ 'no_label' => true,
389
+ 'class' => array( 'section-heading' ),
390
+ ),
391
+ 'integrations-providers' => array(
392
+ 'id' => 'integrations-providers',
393
+ 'content' => '<h4>' . __( 'Integrations', 'wpforms' ) . '</h4><p>' . __( 'Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more.', 'wpforms' ) . '</p>',
394
+ 'type' => 'providers',
395
+ 'wrap' => 'none',
396
+ ),
397
+ ),
398
+ );
399
+ $defaults = apply_filters( 'wpforms_settings_defaults', $defaults );
400
+
401
+ return empty( $view ) ? $defaults : $defaults[ $view ];
402
+ }
403
+
404
+ /**
405
+ * Return array containing markup for all the appropriate settings fields.
406
+ *
407
+ * @since 1.3.9
408
+ * @param string $view
409
+ * @return array
410
+ */
411
+ public function get_settings_fields( $view = '' ) {
412
+
413
+ $fields = array();
414
+ $settings = $this->get_registered_settings( $view );
415
+
416
+ foreach ( $settings as $id => $args ) {
417
+
418
+ $fields[ $id ] = wpforms_settings_output_field( $args );
419
+ }
420
+
421
+ return apply_filters( 'wpforms_settings_fields', $fields, $view );
422
+ }
423
+
424
+ /**
425
+ * Build the output for the plugin settings page.
426
+ *
427
+ * @since 1.0.0
428
+ */
429
+ public function output() {
430
+
431
+ $tabs = $this->get_tabs();
432
+ $fields = $this->get_settings_fields( $this->view );
433
+
434
+ echo '<div id="wpforms-settings" class="wrap wpforms-admin-wrap">';
435
+
436
+ $this->tabs();
437
+
438
+ echo '<h1 class="wpforms-h1-placeholder"></h1>';
439
+
440
+ if ( wpforms()->pro && class_exists( 'WPForms_License' ) ) {
441
+ wpforms()->license->notices( true );
442
+ }
443
+
444
+ echo '<div class="wpforms-admin-content wpforms-admin-settings">';
445
+
446
+ // Some tabs rely on AJAX and do not contain a form, such as Integrations.
447
+ if ( ! empty( $tabs[ $this->view ]['form'] ) ) {
448
+ echo '<form class="wpforms-admin-settings-form" method="post">';
449
+ echo '<input type="hidden" name="action" value="update-settings">';
450
+ echo '<input type="hidden" name="view" value="' . $this->view . '">';
451
+ echo '<input type="hidden" name="nonce" value="' . wp_create_nonce( 'wpforms-settings-nonce' ) . '">';
452
+ }
453
+
454
+ do_action( 'wpforms_admin_settings_before', $this->view, $fields );
455
+
456
+ foreach ( $fields as $field ) {
457
+ echo $field;
458
+ }
459
+
460
+ if ( ! empty( $tabs[ $this->view ]['submit'] ) ) {
461
+ echo '<p class="submit">';
462
+ echo '<button type="submit" class="wpforms-btn wpforms-btn-md wpforms-btn-orange" name="wpforms-settings-submit">' . $tabs[ $this->view ]['submit'] . '</button>';
463
+ echo '</p>';
464
+ }
465
+
466
+ do_action( 'wpforms_admin_settings_after', $this->view, $fields );
467
+
468
+ if ( ! empty( $tabs[ $this->view ]['form'] ) ) {
469
+ echo '</form>';
470
+ }
471
+
472
+ echo '</div>';
473
+
474
+ echo '</div>';
475
+ }
476
+
477
+ /**
478
+ * Let Lite users know a Custom Captcha addon is available.
479
+ *
480
+ * @since 1.3.9
481
+ */
482
+ public function captcha_addon_notice() {
483
+
484
+ if ( 'recaptcha' !== $this->view ) {
485
+ return;
486
+ }
487
+
488
+ // Only display to Lite users.
489
+ if ( wpforms()->pro ) {
490
+ return;
491
+ }
492
+ ?>
493
+ <div class="captcha-addon-notice wpforms-clear">
494
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/settings-captcha-addon.png">
495
+ <h5><?php _e( 'Want to better protect your contact forms from spam?', 'wpforms' ); ?></h5>
496
+ <p>
497
+ <?php _e( 'WPForms custom captcha addon allows you to add custom questions captcha or math questions captcha to your WordPress forms. Since we know spam is a huge problem for contact forms, WPForms goes above and beyond to help you protect your forms.', 'wpforms' ); ?>
498
+ <br><br>
499
+ <a href="<?php echo wpforms_admin_upgrade_link(); ?>" class="wpforms-btn wpforms-btn-md wpforms-btn-orange" target="_blank" rel="noopener noreferrer"><?php _e( 'Click here to Upgrade', 'wpforms' ); ?></a>
500
+ </p>
501
+ </div>
502
+ <?php
503
+ }
504
+ }
505
+ new WPForms_Settings;
includes/admin/class-tools.php ADDED
@@ -0,0 +1,534 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Tools admin page class.
4
+ *
5
+ * @package WPForms
6
+ * @author WPForms
7
+ * @since 1.3.9
8
+ * @license GPL-2.0+
9
+ * @copyright Copyright (c) 2017, WPForms LLC
10
+ */
11
+ class WPForms_Tools {
12
+
13
+ /**
14
+ * The current active tab.
15
+ *
16
+ * @since 1.3.9
17
+ * @var array
18
+ */
19
+ public $view;
20
+
21
+ /**
22
+ * Template code if generated.
23
+ *
24
+ * @since 1.3.9
25
+ * @var string
26
+ */
27
+ private $template = false;
28
+
29
+ /**
30
+ * The available forms.
31
+ *
32
+ * @since 1.3.9
33
+ * @var array
34
+ */
35
+ public $forms = false;
36
+
37
+ /**
38
+ * Primary class constructor.
39
+ *
40
+ * @since 1.3.9
41
+ */
42
+ public function __construct() {
43
+
44
+ // Maybe load tools page.
45
+ add_action( 'admin_init', array( $this, 'init' ) );
46
+ }
47
+
48
+ /**
49
+ * Determing if the user is viewing the tools page, if so, party on.
50
+ *
51
+ * @since 1.3.9
52
+ */
53
+ public function init() {
54
+
55
+ // Check what page we are on.
56
+ $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
57
+
58
+ // Only load if we are actually on the settings page.
59
+ if ( 'wpforms-tools' === $page ) {
60
+
61
+ // Determine the current active settings tab.
62
+ $this->view = isset( $_GET['view'] ) ? esc_html( $_GET['view'] ) : 'importexport';
63
+
64
+ // Retrieve available forms.
65
+ $args = array(
66
+ 'orderby' => 'title',
67
+ );
68
+ $this->forms = wpforms()->form->get( '', $args );
69
+
70
+ add_action( 'wpforms_tools_init', array( $this, 'import_export_process' ) );
71
+ add_action( 'wpforms_admin_page', array( $this, 'output' ) );
72
+
73
+ // Hook for add-ons.
74
+ do_action( 'wpforms_tools_init' );
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Build the output for the Tools admin page.
80
+ *
81
+ * @since 1.3.9
82
+ */
83
+ public function output() {
84
+
85
+ ?>
86
+ <div id="wpforms-tools" class="wrap wpforms-admin-wrap">
87
+
88
+ <ul class="wpforms-admin-tabs">
89
+ <li><a href="<?php echo admin_url( 'admin.php?page=wpforms-tools&view=importexport' ); ?>" class="<?php echo 'importexport' === $this->view ? 'active' : ''; ?>"><?php _e( 'Import/Export', 'wpforms' ); ?></a></li>
90
+ <li><a href="<?php echo admin_url( 'admin.php?page=wpforms-tools&view=system' ); ?>" class="<?php echo 'system' === $this->view ? 'active' : ''; ?>"><?php _e( 'System Info', 'wpforms' ); ?></a></li>
91
+ </ul>
92
+
93
+ <h1 class="wpforms-h1-placeholder"></h1>
94
+
95
+ <?php
96
+ if ( isset( $_GET['wpforms_notice'] ) && 'forms-imported' === $_GET['wpforms_notice'] ) {
97
+ printf( '<div class="updated notice is-dismissible"><p>%s</p></div>', __( 'Form(s) imported', 'wpforms' ) );
98
+ }
99
+ ?>
100
+
101
+ <div class="wpforms-admin-content wpforms-admin-settings">
102
+
103
+ <?php
104
+ if ( 'system' === $this->view ) {
105
+ $this->system_info_tab();
106
+ } else {
107
+ $this->import_export_tab();
108
+ }
109
+ ?>
110
+
111
+ </div>
112
+
113
+ </div>
114
+ <?php
115
+ }
116
+
117
+ /**
118
+ * Import/Export tab contents.
119
+ *
120
+ * @since 1.3.9
121
+ */
122
+ public function import_export_tab() {
123
+
124
+ ?>
125
+ <div class="wpforms-setting-row tools">
126
+ <h3><?php _e( 'Form Import', 'wpforms' ); ?></h3>
127
+ <p><?php _e( 'Select an export file.', 'wpforms' ); ?></p>
128
+ <form method="post" enctype="multipart/form-data" action="<?php echo admin_url( 'admin.php?page=wpforms-tools&view=importexport' ); ?>">
129
+ <div class="wpforms-file-upload">
130
+ <input type="file" name="file" id="wpforms-tools-form-import" class="inputfile" data-multiple-caption="{count} files selected" accept=".json" />
131
+ <label for="wpforms-tools-form-import">
132
+ <span class="fld"><span class="placeholder"><?php _e( 'No file chosen', 'wpforms' ); ?></span></span>
133
+ <strong class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey">
134
+ <i class="fa fa-upload" aria-hidden="true"></i> <?php _e( 'Choose a file&hellip;', 'wpforms' ); ?>
135
+ </strong>
136
+ </label>
137
+ </div>
138
+ <br>
139
+ <input type="hidden" name="action" value="import_form">
140
+ <button type="submit" name="submit-importexport" class="wpforms-btn wpforms-btn-md wpforms-btn-orange"><?php _e( 'Import', 'wpforms' ); ?></button>
141
+ <?php wp_nonce_field( 'wpforms_import_nonce', 'wpforms-tools-importexport-nonce' ); ?>
142
+ </form>
143
+ </div>
144
+
145
+ <div class="wpforms-setting-row tools">
146
+ <h3 id="form-export"><?php _e( 'Form Export', 'wpforms' ); ?></h3>
147
+ <p><?php _e( 'Form exports files can be used to create a backup of your forms or to imported forms into another site.' ,'wpforms' ); ?></p>
148
+ <form method="post" action="<?php echo admin_url( 'admin.php?page=wpforms-tools&view=importexport' ); ?>">
149
+ <?php
150
+ if ( ! empty( $this->forms ) ) {
151
+ echo '<span class="choicesjs-select-wrap">';
152
+ echo '<select id="wpforms-tools-form-export" class="choicesjs-select" name="forms[]" multiple data-placeholder="' . __( 'Select form(s)', 'wpforms' ) . '">';
153
+ foreach ( $this->forms as $form ) {
154
+ printf( '<option value="%d">%s</option>', $form->ID, esc_html( $form->post_title ) );
155
+ }
156
+ echo '</select>';
157
+ echo '</span>';
158
+ } else {
159
+ echo '<p>' . __( 'You need to create a form before you can use form export.'. 'wpforms' ) . '</p>';
160
+ }
161
+ ?>
162
+ <br>
163
+ <input type="hidden" name="action" value="export_form">
164
+ <?php wp_nonce_field( 'wpforms_import_nonce', 'wpforms-tools-importexport-nonce' ); ?>
165
+ <button type="submit" name="submit-importexport" class="wpforms-btn wpforms-btn-md wpforms-btn-orange"><?php _e( 'Export', 'wpforms' ); ?></button>
166
+ </form>
167
+ </div>
168
+
169
+ <div class="wpforms-setting-row tools">
170
+ <h3 id="template-export"><?php _e( 'Form Template Export', 'wpforms' ); ?></h3>
171
+ <?php
172
+ if ( $this->template ) {
173
+ echo '<p>' . __( 'The following code can be used to register your custom form template. Copy and paste the following code to your theme\'s functions.php file or include it within an external file.', 'wpforms' ) . '<p>';
174
+ echo '<p>' . sprintf( __( 'For more information <a href="%s" target="blank" rel="noopener noreferrer">see our documentation</a>.', 'wpforms' ), 'https://wpforms.com/docs/how-to-create-a-custom-form-template/' ) . '<p>';
175
+ echo '<textarea class="info-area" readonly>' . esc_textarea( $this->template ) . '</textarea><br>';
176
+ }
177
+ ?>
178
+ <p><?php _e( 'Select a form to generate PHP code that can be used to register a custom form template.', 'wpforms' ); ?></p>
179
+ <form method="post" action="<?php echo admin_url( 'admin.php?page=wpforms-tools&view=importexport#template-export' ); ?>">
180
+ <?php
181
+ if ( ! empty( $this->forms ) ) {
182
+ echo '<span class="choicesjs-select-wrap">';
183
+ echo '<select id="wpforms-tools-form-template" class="choicesjs-select" name="form">';
184
+ foreach ( $this->forms as $form ) {
185
+ printf( '<option value="%d">%s</option>', $form->ID, esc_html( $form->post_title ) );
186
+ }
187
+ echo '</select>';
188
+ echo '</span>';
189
+ } else {
190
+ echo '<p>' . __( 'You need to create a form before you can generate a template.'. 'wpforms' ) . '</p>';
191
+ }
192
+ ?>
193
+ <br>
194
+ <input type="hidden" name="action" value="export_template">
195
+ <?php wp_nonce_field( 'wpforms_import_nonce', 'wpforms-tools-importexport-nonce' ); ?>
196
+ <button type="submit" name="submit-importexport" class="wpforms-btn wpforms-btn-md wpforms-btn-orange"><?php _e( 'Export Template', 'wpforms' ); ?></button>
197
+ </form>
198
+ </div>
199
+ <?php
200
+ }
201
+
202
+ /**
203
+ * System Info tab contents.
204
+ *
205
+ * @since 1.3.9
206
+ */
207
+ public function system_info_tab() {
208
+
209
+ ?>
210
+ <div class="wpforms-setting-row tools">
211
+ <h3 id="form-export"><?php _e( 'System Information', 'wpforms' ); ?></h3>
212
+ <textarea readonly="readonly" class="info-area"><?php echo $this->get_system_info(); ?></textarea>
213
+ </div>
214
+ <?php
215
+ }
216
+
217
+ /**
218
+ * Import/Export processing.
219
+ *
220
+ * @since 1.3.9
221
+ */
222
+ public function import_export_process() {
223
+
224
+ // Check for triggered save.
225
+ if ( empty( $_POST['wpforms-tools-importexport-nonce'] ) || empty( $_POST['action'] ) || ! isset( $_POST['submit-importexport'] ) ) {
226
+ return;
227
+ }
228
+
229
+ // Check for valid nonce and permission.
230
+ if ( ! wp_verify_nonce( $_POST['wpforms-tools-importexport-nonce'], 'wpforms_import_nonce' ) || ! current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
231
+ return;
232
+ }
233
+
234
+ // Export Form(s).
235
+ if ( 'export_form' === $_POST['action'] && ! empty( $_POST['forms'] ) ) {
236
+
237
+ $export = array();
238
+ $forms = get_posts(
239
+ array(
240
+ 'post_type' => 'wpforms',
241
+ 'no_found_rows' => true,
242
+ 'nopaging' => true,
243
+ 'post__in' => array_map( 'intval', $_POST['forms'] ),
244
+ ) );
245
+
246
+ foreach ( $forms as $form ) {
247
+ $export[] = wpforms_decode( $form->post_content );
248
+ }
249
+
250
+ ignore_user_abort( true );
251
+
252
+ if ( ! in_array( 'set_time_limit', explode( ',', ini_get( 'disable_functions' ) ) ) ) {
253
+ set_time_limit( 0 );
254
+ }
255
+
256
+ nocache_headers();
257
+ header( 'Content-Type: application/json; charset=utf-8' );
258
+ header( 'Content-Disposition: attachment; filename=wpforms-form-export-' . date( 'm-d-Y' ) . '.json' );
259
+ header( 'Expires: 0' );
260
+
261
+ echo wp_json_encode( $export );
262
+ exit;
263
+ }
264
+
265
+ // Import Form(s).
266
+ if ( 'import_form' === $_POST['action'] && ! empty( $_FILES['file']['tmp_name'] ) ) {
267
+
268
+ $ext = strtolower( pathinfo( $_FILES['file']['name'], PATHINFO_EXTENSION ) );
269
+
270
+ if ( 'json' !== $ext ) {
271
+ wp_die( __( 'Please upload a valid .json form export file.', 'wpforms' ), __( 'Error', 'wpformsp' ), array( 'response' => 400 ) );
272
+ }
273
+
274
+ $forms = json_decode( file_get_contents( $_FILES['file']['tmp_name'] ), true );
275
+
276
+ if ( ! empty( $forms ) ) {
277
+
278
+ foreach ( $forms as $form ) {
279
+
280
+ $title = ! empty( $form['settings']['form_title'] ) ? $form['settings']['form_title'] : '';
281
+ $desc = ! empty( $form['settings']['form_desc'] ) ? $form['settings']['form_desc'] : '';
282
+ $new_id = wp_insert_post( array(
283
+ 'post_title' => $title,
284
+ 'post_status' => 'publish',
285
+ 'post_type' => 'wpforms',
286
+ 'post_excerpt' => $desc,
287
+ ) );
288
+ if ( $new_id ) {
289
+ $form['id'] = $new_id;
290
+ $new = array(
291
+ 'ID' => $new_id,
292
+ 'post_content' => wpforms_encode( $form ),
293
+ );
294
+ wp_update_post( $new );
295
+ }
296
+ }
297
+ wp_safe_redirect( admin_url( 'admin.php?page=wpforms-tools&view=importexport&wpforms_notice=forms-imported' ) );
298
+ exit;
299
+ }
300
+ }
301
+
302
+ // Export form template.
303
+ if ( 'export_template' === $_POST['action'] && ! empty( $_POST['form'] ) ) {
304
+
305
+ $args = array(
306
+ 'content_only' => true,
307
+ );
308
+ $form_data = wpforms()->form->get( absint( $_POST['form'] ), $args );
309
+
310
+ if ( ! $form_data ) {
311
+ return;
312
+ }
313
+
314
+ // Define basic data.
315
+ $name = sanitize_text_field( $form_data['settings']['form_title'] );
316
+ $desc = sanitize_text_field( $form_data['settings']['form_desc'] );
317
+ $slug = sanitize_key( str_replace( ' ', '_' , $form_data['settings']['form_title'] ) );
318
+ $class = 'WPForms_Template_' . $slug;
319
+
320
+ // Format template field and settings data.
321
+ $data = $form_data;
322
+ $data['meta']['template'] = $slug;
323
+ $data['fields'] = wpforms_array_remove_empty_strings( $data['fields'] );
324
+ $data['settings'] = wpforms_array_remove_empty_strings( $data['settings'] );
325
+
326
+ unset( $data['id'] );
327
+
328
+ $data = var_export( $data, true );
329
+ $data = str_replace( ' ', "\t", $data );
330
+ $data = preg_replace( '/([\t\r\n]+?)array/', 'array', $data );
331
+
332
+ // Build the final template string.
333
+ $this->template = <<<EOT
334
+ if ( class_exists( 'WPForms_Template' ) ) :
335
+ /**
336
+ * {$name}
337
+ * Template for WPForms.
338
+ */
339
+ class {$class} extends WPForms_Template {
340
+
341
+ /**
342
+ * Primary class constructor.
343
+ *
344
+ * @since 1.0.0
345
+ */
346
+ public function init() {
347
+
348
+ // Template name
349
+ \$this->name = '{$name}';
350
+
351
+ // Template slug
352
+ \$this->slug = '{$slug}';
353
+
354
+ // Template description
355
+ \$this->description = '{$desc}';
356
+
357
+ // Template field and settings
358
+ \$this->data = {$data};
359
+ }
360
+ }
361
+ new {$class};
362
+ endif;
363
+ EOT;
364
+ } // End if().
365
+ }
366
+
367
+ /**
368
+ * Get system information.
369
+ *
370
+ * Based on a function from Easy Digital Downloads by Pippin Williamson.
371
+ *
372
+ * @link https://github.com/easydigitaldownloads/easy-digital-downloads/blob/master/includes/admin/tools.php#L470
373
+ * @since 1.3.9
374
+ * @return string
375
+ */
376
+ public function get_system_info() {
377
+
378
+ global $wpdb;
379
+
380
+ // Get theme info.
381
+ $theme_data = wp_get_theme();
382
+ $theme = $theme_data->Name . ' ' . $theme_data->Version;
383
+
384
+ $return = '### Begin System Info ###' . "\n\n";
385
+
386
+ // WPForms info.
387
+ $activated = get_option( 'wpforms_activated', array() );
388
+ $return .= '-- WPForms Info' . "\n\n";
389
+ if ( ! empty( $activated['pro'] ) ) {
390
+ $date = $activated['pro'] + ( get_option( 'gmt_offset' ) * 3600 );
391
+ $return .= 'Pro: ' . date_i18n( __( 'M j, Y @ g:ia' ), $date ) . "\n";
392
+ }
393
+ if ( ! empty( $activated['lite'] ) ) {
394
+ $date = $activated['lite'] + ( get_option( 'gmt_offset' ) * 3600 );
395
+ $return .= 'Lite: ' . date_i18n( __( 'M j, Y @ g:ia' ), $date ) . "\n";
396
+ }
397
+
398
+ // Now the basics...
399
+ $return .= "\n" . '-- Site Info' . "\n\n";
400
+ $return .= 'Site URL: ' . site_url() . "\n";
401
+ $return .= 'Home URL: ' . home_url() . "\n";
402
+ $return .= 'Multisite: ' . ( is_multisite() ? 'Yes' : 'No' ) . "\n";
403
+
404
+ // WordPress configuration.
405
+ $return .= "\n" . '-- WordPress Configuration' . "\n\n";
406
+ $return .= 'Version: ' . get_bloginfo( 'version' ) . "\n";
407
+ $return .= 'Language: ' . ( defined( 'WPLANG' ) && WPLANG ? WPLANG : 'en_US' ) . "\n";
408
+ $return .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n";
409
+ $return .= 'Active Theme: ' . $theme . "\n";
410
+ $return .= 'Show On Front: ' . get_option( 'show_on_front' ) . "\n";
411
+ // Only show page specs if frontpage is set to 'page'.
412
+ if ( get_option( 'show_on_front' ) === 'page' ) {
413
+ $front_page_id = get_option( 'page_on_front' );
414
+ $blog_page_id = get_option( 'page_for_posts' );
415
+ $return .= 'Page On Front: ' . ( 0 != $front_page_id ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' ) . "\n";
416
+ $return .= 'Page For Posts: ' . ( 0 != $blog_page_id ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' ) . "\n";
417
+ }
418
+ $return .= 'ABSPATH: ' . ABSPATH . "\n";
419
+ $return .= 'Table Prefix: ' . 'Length: ' . strlen( $wpdb->prefix ) . ' Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ) . "\n";
420
+ $return .= 'WP_DEBUG: ' . ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
421
+ $return .= 'WPFORMS_DEBUG: ' . ( defined( 'WPFORMS_DEBUG' ) ? WPFORMS_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
422
+ $return .= 'Memory Limit: ' . WP_MEMORY_LIMIT . "\n";
423
+ $return .= 'Registered Post Stati: ' . implode( ', ', get_post_stati() ) . "\n";
424
+
425
+ // @todo WPForms configuration/specific details.
426
+ $return .= "\n" . '-- WordPress Uploads/Constants' . "\n\n";
427
+ $return .= 'WP_CONTENT_DIR: ' . ( defined( 'WP_CONTENT_DIR' ) ? WP_CONTENT_DIR ? WP_CONTENT_DIR : 'Disabled' : 'Not set' ) . "\n";
428
+ $return .= 'WP_CONTENT_URL: ' . ( defined( 'WP_CONTENT_URL' ) ? WP_CONTENT_URL ? WP_CONTENT_URL : 'Disabled' : 'Not set' ) . "\n";
429
+ $return .= 'UPLOADS: ' . ( defined( 'UPLOADS' ) ? UPLOADS ? UPLOADS : 'Disabled' : 'Not set' ) . "\n";
430
+ $uploads_dir = wp_upload_dir();
431
+ $return .= 'wp_uploads_dir() path: ' . $uploads_dir['path'] . "\n";
432
+ $return .= 'wp_uploads_dir() url: ' . $uploads_dir['url'] . "\n";
433
+ $return .= 'wp_uploads_dir() basedir: ' . $uploads_dir['basedir'] . "\n";
434
+ $return .= 'wp_uploads_dir() baseurl: ' . $uploads_dir['baseurl'] . "\n";
435
+
436
+ // Get plugins that have an update.
437
+ $updates = get_plugin_updates();
438
+
439
+ // Must-use plugins.
440
+ // NOTE: MU plugins can't show updates!
441
+ $muplugins = get_mu_plugins();
442
+ if ( count( $muplugins ) > 0 && ! empty( $muplugins ) ) {
443
+ $return .= "\n" . '-- Must-Use Plugins' . "\n\n";
444
+
445
+ foreach ( $muplugins as $plugin => $plugin_data ) {
446
+ $return .= $plugin_data['Name'] . ': ' . $plugin_data['Version'] . "\n";
447
+ }
448
+ }
449
+
450
+ // WordPress active plugins.
451
+ $return .= "\n" . '-- WordPress Active Plugins' . "\n\n";
452
+
453
+ $plugins = get_plugins();
454
+ $active_plugins = get_option( 'active_plugins', array() );
455
+
456
+ foreach ( $plugins as $plugin_path => $plugin ) {
457
+ if ( ! in_array( $plugin_path, $active_plugins, true ) ) {
458
+ continue;
459
+ }
460
+ $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
461
+ $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
462
+ }
463
+
464
+ // WordPress inactive plugins.
465
+ $return .= "\n" . '-- WordPress Inactive Plugins' . "\n\n";
466
+
467
+ foreach ( $plugins as $plugin_path => $plugin ) {
468
+ if ( in_array( $plugin_path, $active_plugins ) ) {
469
+ continue;
470
+ }
471
+ $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
472
+ $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
473
+ }
474
+
475
+ if ( is_multisite() ) {
476
+ // WordPress Multisite active plugins.
477
+ $return .= "\n" . '-- Network Active Plugins' . "\n\n";
478
+
479
+ $plugins = wp_get_active_network_plugins();
480
+ $active_plugins = get_site_option( 'active_sitewide_plugins', array() );
481
+
482
+ foreach ( $plugins as $plugin_path ) {
483
+ $plugin_base = plugin_basename( $plugin_path );
484
+ if ( ! array_key_exists( $plugin_base, $active_plugins ) ) {
485
+ continue;
486
+ }
487
+ $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
488
+ $plugin = get_plugin_data( $plugin_path );
489
+ $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
490
+ }
491
+ }
492
+
493
+ // Server configuration (really just versioning).
494
+ $return .= "\n" . '-- Webserver Configuration' . "\n\n";
495
+ $return .= 'PHP Version: ' . PHP_VERSION . "\n";
496
+ $return .= 'MySQL Version: ' . $wpdb->db_version() . "\n";
497
+ $return .= 'Webserver Info: ' . $_SERVER['SERVER_SOFTWARE'] . "\n";
498
+
499
+ // PHP configs... now we're getting to the important stuff.
500
+ $return .= "\n" . '-- PHP Configuration' . "\n\n";
501
+ $return .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n";
502
+ $return .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n";
503
+ $return .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n";
504
+ $return .= 'Upload Max Filesize: ' . ini_get( 'upload_max_filesize' ) . "\n";
505
+ $return .= 'Time Limit: ' . ini_get( 'max_execution_time' ) . "\n";
506
+ $return .= 'Max Input Vars: ' . ini_get( 'max_input_vars' ) . "\n";
507
+ $return .= 'Display Errors: ' . ( ini_get( 'display_errors' ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A' ) . "\n";
508
+
509
+ // PHP extensions and such.
510
+ $return .= "\n" . '-- PHP Extensions' . "\n\n";
511
+ $return .= 'cURL: ' . ( function_exists( 'curl_init' ) ? 'Supported' : 'Not Supported' ) . "\n";
512
+ $return .= 'fsockopen: ' . ( function_exists( 'fsockopen' ) ? 'Supported' : 'Not Supported' ) . "\n";
513
+ $return .= 'SOAP Client: ' . ( class_exists( 'SoapClient' ) ? 'Installed' : 'Not Installed' ) . "\n";
514
+ $return .= 'Suhosin: ' . ( extension_loaded( 'suhosin' ) ? 'Installed' : 'Not Installed' ) . "\n";
515
+
516
+ // Session stuff
517
+ $return .= "\n" . '-- Session Configuration' . "\n\n";
518
+ $return .= 'Session: ' . ( isset( $_SESSION ) ? 'Enabled' : 'Disabled' ) . "\n";
519
+
520
+ // The rest of this is only relevant is session is enabled.
521
+ if ( isset( $_SESSION ) ) {
522
+ $return .= 'Session Name: ' . esc_html( ini_get( 'session.name' ) ) . "\n";
523
+ $return .= 'Cookie Path: ' . esc_html( ini_get( 'session.cookie_path' ) ) . "\n";
524
+ $return .= 'Save Path: ' . esc_html( ini_get( 'session.save_path' ) ) . "\n";
525
+ $return .= 'Use Cookies: ' . ( ini_get( 'session.use_cookies' ) ? 'On' : 'Off' ) . "\n";
526
+ $return .= 'Use Only Cookies: ' . ( ini_get( 'session.use_only_cookies' ) ? 'On' : 'Off' ) . "\n";
527
+ }
528
+
529
+ $return .= "\n" . '### End System Info ###';
530
+
531
+ return $return;
532
+ }
533
+ }
534
+ new WPForms_Tools;
includes/admin/class-welcome.php CHANGED
@@ -19,10 +19,9 @@ class WPForms_Welcome {
19
  */
20
  public function __construct() {
21
 
22
- add_action( 'admin_menu', array( $this, 'register_pages' ) );
23
- add_action( 'admin_head', array( $this, 'hide_menu_items' ) );
24
- add_action( 'admin_init', array( $this, 'welcome_redirect' ), 9999 );
25
- add_action( 'admin_enqueue_scripts', array( $this, 'welcome_enqueues' ) );
26
  }
27
 
28
  /**
@@ -33,27 +32,16 @@ class WPForms_Welcome {
33
  *
34
  * @since 1.0.0
35
  */
36
- public function register_pages() {
37
 
38
- // Getting started - shows after installation
39
  add_dashboard_page(
40
- __( 'Getting started with WPForms', 'wpforms' ),
41
- __( 'Getting started with WPForms', 'wpforms' ),
42
  apply_filters( 'wpforms_welcome_cap', 'manage_options' ),
43
  'wpforms-getting-started',
44
- array( $this, 'welcome_getting_started' )
45
  );
46
-
47
- // What's New - shows after upgrade
48
- /*
49
- add_dashboard_page(
50
- __( 'What is new in WPForms', 'wpforms' ),
51
- __( 'What is new in WPForms', 'wpforms' ),
52
- apply_filters( 'wpforms_welcome_cap', 'manage_options' ),
53
- 'wpforms-whats-new',
54
- array( $this, 'welcome_whats_new' )
55
- );
56
- */
57
  }
58
 
59
  /**
@@ -63,103 +51,9 @@ class WPForms_Welcome {
63
  *
64
  * @since 1.0.0
65
  */
66
- public function hide_menu_items() {
67
 
68
  remove_submenu_page( 'index.php', 'wpforms-getting-started' );
69
- //remove_submenu_page( 'index.php', 'wpforms-whats-new' );
70
- }
71
-
72
- /**
73
- * Welcome screen header area.
74
- *
75
- * Consists of the plugin title, desciption, badge, and navigation tabs.
76
- *
77
- * @since 1.0.0
78
- */
79
- public function welcome_head() {
80
-
81
- $selected = isset( $_GET['page'] ) ? $_GET['page'] : 'wpforms-getting-started';
82
- ?>
83
- <h1><?php _e( 'Welcome to WPForms', 'wpforms' ); ?></h1>
84
- <div class="about-text">
85
- <?php _e( 'Thank you for choosing WPForms - the most beginner friendly WordPress contact form plugin. Here\'s how to get started.', 'wpforms' ); ?>
86
- </div>
87
- <div class="wpforms-badge">
88
- <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/sullie.png" alt="Sullie WPForms mascot">
89
- <span class="version">Version <?php echo WPFORMS_VERSION; ?></span>
90
- </div>
91
- <h2 class="nav-tab-wrapper">
92
- <a class="nav-tab <?php echo $selected == 'wpforms-getting-started' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'wpforms-getting-started' ), 'index.php' ) ) ); ?>">
93
- <?php _e( 'Getting Started', 'wpforms' ); ?>
94
- </a>
95
- <!--<a class="nav-tab <?php echo $selected == 'wpforms-whats-new' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'wpforms-whats-new' ), 'index.php' ) ) ); ?>">
96
- <?php _e( "What's New", 'wpforms' ); ?>
97
- </a> -->
98
- </h2>
99
- <?php
100
- }
101
-
102
- /**
103
- * Getting Started screen. Shows after first install.
104
- *
105
- * @since 1.0.0
106
- */
107
- public function welcome_getting_started() {
108
-
109
- ?>
110
- <div class="wrap about-wrap">
111
-
112
- <?php $this->welcome_head(); ?>
113
-
114
- <p class="about-description">
115
- <?php _e( 'Use the tips below to get started using WPForms. You will be up and running in no time.', 'wpforms' ); ?>
116
- </p>
117
-
118
- <div class="feature-section two-col">
119
- <div class="col">
120
- <h3><?php _e( 'Creating Your First Form' , 'wpforms' ); ?></h3>
121
- <p><?php printf( __( 'WPForms makes it easy to create forms in WordPress. You can follow the video tutorial on the right or read our how to <a href="%s" target="_blank" rel="noopener">create your first form guide</a>.', 'wpforms' ), ' https://wpforms.com/docs/creating-first-form/ ' ); ?>
122
- <p><?php printf( __( 'But in reality, the process is so intuitive that you can just start by going to <a href="%s">WPForms - > Add New</a>.', 'wpforms' ), admin_url( 'admin.php?page=wpforms-builder' ) ); ?>
123
- </div>
124
- <div class="col">
125
- <div class="feature-video">
126
- <iframe width="495" height="278" src="https://www.youtube-nocookie.com/embed/yDyvSGV7tP4?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>
127
- </div>
128
- </div>
129
- </div>
130
-
131
- <div class="feature-section two-col">
132
- <div class="col">
133
- <h3><?php _e( 'See all WPForms Features', 'wpforms' ); ?></h3>
134
- <p><?php _e( 'WPForms is both easy to use and extremely powerful. We have tons of helpful features that allows us to give you everything you need from a form builder.', 'wpforms' ); ?></p>
135
- <p><a href="https://wpforms.com/features/" target="_blank" rel="noopener" class="wpforms-features-button button button-primary"><?php _e( 'See all Features', 'wpforms' ); ?></a></p>
136
- </div>
137
- <div class="col">
138
- <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-features.png">
139
- </div>
140
- </div>
141
-
142
- </div>
143
- <script type="text/javascript">
144
- jQuery(function($){
145
- $('.feature-video').fitVids();
146
- });
147
- </script>
148
- <?php
149
- }
150
-
151
- /**
152
- * What's New screen. Shows after updates.
153
- *
154
- * @since 1.0.0
155
- */
156
- public function welcome_whats_new() {
157
-
158
- ?>
159
- <div class="wrap about-wrap">
160
- <?php $this->welcome_head(); ?>
161
- </div>
162
- <?php
163
  }
164
 
165
  /**
@@ -170,60 +64,236 @@ class WPForms_Welcome {
170
  *
171
  * @since 1.0.0
172
  */
173
- public function welcome_redirect() {
174
 
175
- // Check if we should consider redirection
176
- if ( !get_transient( 'wpforms_activation_redirect' ) ) {
177
  return;
178
  }
179
 
180
- // If we are redirecting, clear the transient so it only happens once
181
  delete_transient( 'wpforms_activation_redirect' );
182
 
183
- // Check option to disable welcome redirect
184
  if ( get_option( 'wpforms_activation_redirect', false ) ) {
185
  return;
186
  }
187
 
188
- // Only do this for single site installs
189
  if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
190
  return;
191
  }
192
 
193
- // Check if this is an update or first install
194
  $upgrade = get_option( 'wpforms_version_upgraded_from' );
195
 
196
  if ( ! $upgrade ) {
197
- // Initial install
198
  wp_safe_redirect( admin_url( 'index.php?page=wpforms-getting-started' ) );
199
  exit;
200
  }
201
  }
202
 
203
  /**
204
- * Load our required assets on the Welcome page(s).
205
  *
206
  * @since 1.0.0
207
  */
208
- public function welcome_enqueues() {
209
 
210
- if ( !isset( $_GET['page'] ) || 'wpforms-getting-started' != $_GET['page'] )
211
- return;
 
212
 
213
- wp_enqueue_style(
214
- 'wpforms-welcome',
215
- WPFORMS_PLUGIN_URL . 'assets/css/admin-welcome.css',
216
- null,
217
- WPFORMS_VERSION
218
- );
219
 
220
- wp_enqueue_script(
221
- 'fitvids',
222
- WPFORMS_PLUGIN_URL . 'assets/js/jquery.fitvids.js',
223
- array( 'jquery' ),
224
- '1.1.0',
225
- false
226
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  }
228
  }
229
  new WPForms_Welcome;
19
  */
20
  public function __construct() {
21
 
22
+ add_action( 'admin_menu', array( $this, 'register' ) );
23
+ add_action( 'admin_head', array( $this, 'hide_menu' ) );
24
+ add_action( 'admin_init', array( $this, 'redirect' ), 9999 );
 
25
  }
26
 
27
  /**
32
  *
33
  * @since 1.0.0
34
  */
35
+ public function register() {
36
 
37
+ // Getting started - shows after installation.
38
  add_dashboard_page(
39
+ __( 'Welcome to WPForms', 'wpforms' ),
40
+ __( 'Welcome to WPForms', 'wpforms' ),
41
  apply_filters( 'wpforms_welcome_cap', 'manage_options' ),
42
  'wpforms-getting-started',
43
+ array( $this, 'output' )
44
  );
 
 
 
 
 
 
 
 
 
 
 
45
  }
46
 
47
  /**
51
  *
52
  * @since 1.0.0
53
  */
54
+ public function hide_menu() {
55
 
56
  remove_submenu_page( 'index.php', 'wpforms-getting-started' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
58
 
59
  /**
64
  *
65
  * @since 1.0.0
66
  */
67
+ public function redirect() {
68
 
69
+ // Check if we should consider redirection.
70
+ if ( ! get_transient( 'wpforms_activation_redirect' ) ) {
71
  return;
72
  }
73
 
74
+ // If we are redirecting, clear the transient so it only happens once.
75
  delete_transient( 'wpforms_activation_redirect' );
76
 
77
+ // Check option to disable welcome redirect.
78
  if ( get_option( 'wpforms_activation_redirect', false ) ) {
79
  return;
80
  }
81
 
82
+ // Only do this for single site installs.
83
  if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
84
  return;
85
  }
86
 
87
+ // Check if this is an update or first install.
88
  $upgrade = get_option( 'wpforms_version_upgraded_from' );
89
 
90
  if ( ! $upgrade ) {
91
+ // Initial install.
92
  wp_safe_redirect( admin_url( 'index.php?page=wpforms-getting-started' ) );
93
  exit;
94
  }
95
  }
96
 
97
  /**
98
+ * Getting Started screen. Shows after first install.
99
  *
100
  * @since 1.0.0
101
  */
102
+ public function output() {
103
 
104
+ $class = wpforms()->pro ? 'pro' : 'lite';
105
+ ?>
106
+ <div id="wpforms-welcome" class="<?php echo $class; ?>">
107
 
108
+ <div class="container">
 
 
 
 
 
109
 
110
+ <div class="intro">
111
+
112
+ <div class="sullie">
113
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/sullie.png" alt="<?php esc_attr_e( 'Sullie the WPForms mascot' , 'wpforms' ); ?>">
114
+ </div>
115
+
116
+ <div class="block">
117
+ <h1><?php _e( 'Welcome to WPForms', 'wpforms' ); ?></h1>
118
+ <h6><?php _e( 'Thank you for choosing WPForms - the most powerful drag & drop WordPress form builder in the market.', 'wpforms' ); ?></h6>
119
+ </div>
120
+
121
+ <a href="#" class="play-video" title="<?php esc_attr_e( 'Watch how to create you first form', 'wpforms' ); ?>">
122
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-video.png" alt="<?php esc_attr_e( 'Watch how to create your first form', 'wpforms' ); ?>" class="video-thumbnail">
123
+ </a>
124
+
125
+ <div class="block">
126
+
127
+ <h6><?php _e( 'WPForms makes it easy to create forms in WordPress. You can watch the video tutorial or read our guide on how create your first form.', 'wpforms' ); ?></h6>
128
+
129
+ <div class="button-wrap wpforms-clear">
130
+ <div class="left">
131
+ <a href="<?php echo admin_url( 'admin.php?page=wpforms-builder' ); ?>" class="wpforms-btn wpforms-btn-block wpforms-btn-lg wpforms-btn-orange"><?php _e( 'Create Your First Form', 'wpforms' ); ?></a>
132
+ </div>
133
+ <div class="right">
134
+ <a href="https://wpforms.com/docs/creating-first-form/?utm_source=WordPress&amp;utm_medium=link&amp;utm_campaign=liteplugin" class="wpforms-btn wpforms-btn-block wpforms-btn-lg wpforms-btn-grey" target="_blank" rel="noopener noreferrer"><?php _e( 'Read the Full Guide', 'wpforms' ); ?></a>
135
+ </div>
136
+ </div>
137
+
138
+ </div>
139
+
140
+ </div><!-- /.intro -->
141
+
142
+ <div class="features">
143
+
144
+ <div class="block">
145
+
146
+ <h1><?php _e( 'Welcome Features &amp; Addons', 'wpforms' ); ?></h1>
147
+ <h6><?php _e( 'WPForms is both easy to use and extremely powerful. We have tons of helpful features that allow us to give you everything you need from a form builder.', 'wpforms' ); ?></h6>
148
+
149
+ <div class="feature-list wpforms-clear">
150
+
151
+ <div class="feature-block first">
152
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-1.png">
153
+ <h5><?php _e( 'Drag &amp; Drop Form Builder', 'wpforms' ); ?></h5>
154
+ <p><?php _e( 'Easily create an amazing form in just a few minutes without writing any code.', 'wpforms' ); ?></p>
155
+ </div>
156
+
157
+ <div class="feature-block last">
158
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-2.png">
159
+ <h5><?php _e( 'Form Templates', 'wpforms' ); ?></h5>
160
+ <p><?php _e( 'Start with pre-built form templates to save even more time.', 'wpforms' ); ?></p>
161
+ </div>
162
+
163
+ <div class="feature-block first">
164
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-3.png">
165
+ <h5><?php _e( 'Responsive Mobile Friendly', 'wpforms' ); ?></h5>
166
+ <p><?php _e( 'WPForms is 100% responsive meaning it works on mobile, tablets & desktop.', 'wpforms' ); ?></p>
167
+ </div>
168
+
169
+ <div class="feature-block last">
170
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-4.png">
171
+ <h5><?php _e( 'Smart Conditional Logic', 'wpforms' ); ?></h5>
172
+ <p><?php _e( 'Easily create high performance forms with our smart conditional logic.', 'wpforms' ); ?></p>
173
+ </div>
174
+
175
+ <div class="feature-block first">
176
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-5.png">
177
+ <h5><?php _e( 'Instant Notifications', 'wpforms' ); ?></h5>
178
+ <p><?php _e( 'Respond to leads quickly with our instant form notification feature for your team.', 'wpforms' ); ?></p>
179
+ </div>
180
+
181
+ <div class="feature-block last">
182
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-6.png">
183
+ <h5><?php _e( 'Entry Management', 'wpforms' ); ?></h5>
184
+ <p><?php _e( 'View all your leads in one place to streamline your workflow.', 'wpforms' ); ?></p>
185
+ </div>
186
+
187
+ <div class="feature-block first">
188
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-7.png">
189
+ <h5><?php _e( 'Payments Made Easy', 'wpforms' ); ?></h5>
190
+ <p><?php _e( 'Easily collect payments, donations, and online orders without hiring a developer.', 'wpforms' ); ?></p>
191
+ </div>
192
+
193
+ <div class="feature-block last">
194
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-8.png">
195
+ <h5><?php _e( 'Marketing &amp; Subscriptions', 'wpforms' ); ?></h5>
196
+ <p><?php _e( 'Create subscription forms and connect with your email marketing service.', 'wpforms' ); ?></p>
197
+ </div>
198
+
199
+ <div class="feature-block first">
200
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-9.png">
201
+ <h5><?php _e( 'Easy to Embed', 'wpforms' ); ?></h5>
202
+ <p><?php _e( 'Easily embed your forms in blog posts, pages, sidebar widgets, footer, etc.', 'wpforms' ); ?></p>
203
+ </div>
204
+
205
+ <div class="feature-block last">
206
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-feature-icon-10.png">
207
+ <h5><?php _e( 'Spam Protection', 'wpforms' ); ?></h5>
208
+ <p><?php _e( 'Our smart captcha and honeypot automatically prevent spam submissions.', 'wpforms' ); ?></p>
209
+ </div>
210
+
211
+ </div>
212
+
213
+ <div class="button-wrap">
214
+ <a href="https://wpforms.com/features/?utm_source=WordPress&amp;utm_medium=link&amp;utm_campaign=liteplugin" class="wpforms-btn wpforms-btn-lg wpforms-btn-grey" rel="noopener noreferrer" target="_blank"><?php _e( 'See All Features', 'wpforms' ); ?></a>
215
+ </div>
216
+
217
+ </div>
218
+
219
+ </div><!-- /.features -->
220
+
221
+ <div class="upgrade">
222
+
223
+ <div class="block wpforms-clear">
224
+
225
+ <div class="left">
226
+ <h2><?php _e( 'Upgrade to PRO', 'wpforms' ); ?></h2>
227
+ <ul>
228
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'PayPal', 'wpforms' ); ?></li>
229
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Post Submissions', 'wpforms' ); ?></li>
230
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Stripe', 'wpforms' ); ?></li>
231
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Signatures', 'wpforms' ); ?></li>
232
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'User Registration', 'wpforms' ); ?></li>
233
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Form Abandonment', 'wpforms' ); ?></li>
234
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Geolocation', 'wpforms' ); ?></li>
235
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Unlimited Sites', 'wpforms' ); ?></li>
236
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Zapier', 'wpforms' ); ?></li>
237
+ <li><span class="dashicons dashicons-yes"></span> <?php _e( 'Priority Support', 'wpforms' ); ?></li>
238
+ </ul>
239
+ </div>
240
+
241
+ <div class="right">
242
+ <h2><span><?php _e( 'PRO', 'wpforms' ); ?></span></h2>
243
+ <div class="price">
244
+ <span class="amount">199</span><br>
245
+ <span class="term"><?php _e( 'per year', 'wpforms' ); ?></span>
246
+ </div>
247
+ <a href="<?php echo wpforms_admin_upgrade_link(); ?>" class="wpforms-btn wpforms-btn-block wpforms-btn-lg wpforms-btn-orange" rel="noopener noreferrer" target="_blank"><?php _e( 'Upgrade Now', 'wpforms' ); ?></a>
248
+ </div>
249
+
250
+ </div>
251
+
252
+ </div>
253
+
254
+ <div class="testimonials">
255
+
256
+ <div class="block">
257
+
258
+ <h1><?php _e( 'Testimonials', 'wpforms' ); ?></h1>
259
+
260
+ <div class="testimonial-block wpforms-clear">
261
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-testimonial-bill.jpg">
262
+ <p><?php _e( 'WPForms is by far the easiest form plugin to use. My clients love it – it’s one of the few plugins they can use without any training. As a developer I appreciate how fast, modern, clean and extensible it is.', 'wpforms' ); ?><p>
263
+ <p><strong>Bill Erickson</strong>, Erickson Web Consulting</p>
264
+ </div>
265
+
266
+ <div class="testimonial-block wpforms-clear">
267
+ <img src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/images/welcome-testimonial-david.jpg">
268
+ <p><?php _e( 'As a business owner, time is my most valuable asset. WPForms allow me to create smart online forms with just a few clicks. With their pre-built form templates and the drag & drop builder, I can create a new form that works in less than 2 minutes without writing a single line of code. Well worth the investment.', 'wpforms' ); ?><p>
269
+ <p><strong>David Henzel</strong>, MaxCDN</p>
270
+ </div>
271
+
272
+ </div>
273
+
274
+ </div><!-- /.testimonials -->
275
+
276
+ <div class="footer">
277
+
278
+ <div class="block wpforms-clear">
279
+
280
+ <div class="button-wrap wpforms-clear">
281
+ <div class="left">
282
+ <a href="<?php echo admin_url( 'admin.php?page=wpforms-builder' ); ?>" class="wpforms-btn wpforms-btn-block wpforms-btn-lg wpforms-btn-orange"><?php _e( 'Create Your First Form', 'wpforms' ); ?></a>
283
+ </div>
284
+ <div class="right">
285
+ <a href="<?php echo wpforms_admin_upgrade_link(); ?>" class="wpforms-btn wpforms-btn-block wpforms-btn-lg wpforms-btn-trans-green" rel="noopener noreferrer" target="_blank"><span class="underline"><?php _e( 'Upgrade to WPForms Pro', 'wpforms' ); ?> <span class="dashicons dashicons-arrow-right"></span></span></a>
286
+ </div>
287
+ </div>
288
+
289
+ </div>
290
+
291
+ </div><!-- /.footer -->
292
+
293
+ </div><!-- /.container -->
294
+
295
+ </div><!-- /#wpforms-welcome -->
296
+ <?php
297
  }
298
  }
299
  new WPForms_Welcome;
includes/admin/overview/class-overview-table.php CHANGED
@@ -220,9 +220,9 @@ class WPForms_Overview_Table extends WP_List_Table {
220
  foreach ( $ids as $id ) {
221
  wpforms()->form->delete( $id );
222
  }
223
- printf( '<div class="updated"><p>%s</p></div>', _n( 'Form successfully deleted.', 'Forms successfully deleted', count( $ids ), 'wpforms' ) );
224
  } else {
225
- printf( '<div class="error"><p>%s</p></div>', __( 'Security check failed', 'wpforms' ) );
226
  }
227
  }
228
 
@@ -233,9 +233,9 @@ class WPForms_Overview_Table extends WP_List_Table {
233
  foreach ( $ids as $id ) {
234
  $duplicate = wpforms()->form->duplicate( $id );
235
  }
236
- printf( '<div class="updated"><p>%s</p></div>', _n( 'Form successfully duplicated.', 'Forms successfully duplicated', count( $ids ), 'wpforms' ) );
237
  } else {
238
- printf( '<div class="error"><p>%s</p></div>', __( 'Security check failed', 'wpforms' ) );
239
  }
240
  }
241
  }
@@ -303,4 +303,4 @@ class WPForms_Overview_Table extends WP_List_Table {
303
  );
304
  }
305
 
306
- }
220
  foreach ( $ids as $id ) {
221
  wpforms()->form->delete( $id );
222
  }
223
+ printf( '<div class="notice updated"><p>%s</p></div>', _n( 'Form successfully deleted.', 'Forms successfully deleted', count( $ids ), 'wpforms' ) );
224
  } else {
225
+ printf( '<div class="notice error"><p>%s</p></div>', __( 'Security check failed', 'wpforms' ) );
226
  }
227
  }
228
 
233
  foreach ( $ids as $id ) {
234
  $duplicate = wpforms()->form->duplicate( $id );
235
  }
236
+ printf( '<div class="notice updated"><p>%s</p></div>', _n( 'Form successfully duplicated.', 'Forms successfully duplicated', count( $ids ), 'wpforms' ) );
237
  } else {
238
+ printf( '<div class="notice error"><p>%s</p></div>', __( 'Security check failed', 'wpforms' ) );
239
  }
240
  }
241
  }
303
  );
304
  }
305
 
306
+ }
includes/admin/overview/class-overview.php CHANGED
@@ -7,7 +7,7 @@
7
  * @since 1.0.0
8
  * @license GPL-2.0+
9
  * @copyright Copyright (c) 2016, WPForms LLC
10
- */
11
  class WPForms_Overview {
12
 
13
  /**
@@ -17,10 +17,10 @@ class WPForms_Overview {
17
  */
18
  public function __construct() {
19
 
20
- // Maybe load overview page
21
  add_action( 'admin_init', array( $this, 'init' ) );
22
 
23
- // Setup screen options
24
  add_action( 'load-toplevel_page_wpforms-overview', array( $this, 'screen_options' ) );
25
  add_filter( 'set-screen-option', array( $this, 'screen_options_set' ), 10, 3 );
26
  }
@@ -31,28 +31,28 @@ class WPForms_Overview {
31
  * @since 1.0.0
32
  */
33
  public function init() {
34
-
35
- // Check what page we are on
36
  $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
37
 
38
- // Only load if we are actually on the overview page
39
- if ( $page == 'wpforms-overview' ) {
40
 
41
- // The overview page leverages WP_List_Table so we must load it
42
  if ( ! class_exists( 'WP_List_Table' ) ) {
43
  require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
44
  }
45
 
46
- // Load the class that builds the overview table
47
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/overview/class-overview-table.php';
48
 
49
- // Preview page check
50
  wpforms()->preview->form_preview_check();
51
 
52
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
53
  add_action( 'wpforms_admin_page', array( $this, 'output' ) );
54
 
55
- // Provide hook for add-ons
56
  do_action( 'wpforms_overview_init' );
57
  }
58
  }
@@ -66,7 +66,7 @@ class WPForms_Overview {
66
 
67
  $screen = get_current_screen();
68
 
69
- if ( $screen->id !== 'toplevel_page_wpforms-overview' ) {
70
  return;
71
  }
72
 
@@ -105,31 +105,7 @@ class WPForms_Overview {
105
  */
106
  public function enqueues() {
107
 
108
- wp_enqueue_style(
109
- 'wpforms-overview',
110
- WPFORMS_PLUGIN_URL . 'assets/css/admin-overview.css',
111
- null,
112
- WPFORMS_VERSION
113
- );
114
-
115
- wp_enqueue_script(
116
- 'wpforms-overview',
117
- WPFORMS_PLUGIN_URL . 'assets/js/admin-overview.js',
118
- array( 'jquery' ),
119
- WPFORMS_VERSION,
120
- false
121
- );
122
-
123
- wp_localize_script(
124
- 'wpforms-overview',
125
- 'wpforms_overview',
126
- array(
127
- 'delete_confirm' => __( 'Are you sure you want to delete this form?', 'wpforms' ),
128
- 'duplicate_confirm' => __( 'Are you sure you want to duplicate this form?', 'wpforms' ),
129
- )
130
- );
131
-
132
- // Hook for add-ons
133
  do_action( 'wpforms_overview_enqueue' );
134
  }
135
 
@@ -141,31 +117,35 @@ class WPForms_Overview {
141
  public function output() {
142
 
143
  ?>
144
- <div id="wpforms-overview" class="wrap">
145
 
146
  <h1 class="page-title">
147
  <?php _e( 'Forms Overview', 'wpforms' ); ?>
148
- <a href="<?php echo admin_url( 'admin.php?page=wpforms-builder&view=setup' ); ?>" class="add-new-h2"><?php _e( 'Add New', 'wpforms' ); ?></a>
149
  </h1>
150
 
151
  <?php
152
- $overview_table = new WPForms_Overview_Table;
153
  $overview_table->prepare_items();
154
  ?>
155
-
156
- <form id="wpforms-overview-table" method="get" action="<?php echo admin_url( 'admin.php?page=wpforms-overview' ); ?>">
157
-
158
- <input type="hidden" name="post_type" value="wpforms" />
159
-
160
- <input type="hidden" name="page" value="wpforms-overview" />
161
-
162
- <?php $overview_table->views(); ?>
163
- <?php $overview_table->display(); ?>
164
-
165
- </form>
 
 
 
 
166
 
167
  </div>
168
  <?php
169
  }
170
  }
171
- new WPForms_Overview;
7
  * @since 1.0.0
8
  * @license GPL-2.0+
9
  * @copyright Copyright (c) 2016, WPForms LLC
10
+ */
11
  class WPForms_Overview {
12
 
13
  /**
17
  */
18
  public function __construct() {
19
 
20
+ // Maybe load overview page.
21
  add_action( 'admin_init', array( $this, 'init' ) );
22
 
23
+ // Setup screen options.
24
  add_action( 'load-toplevel_page_wpforms-overview', array( $this, 'screen_options' ) );
25
  add_filter( 'set-screen-option', array( $this, 'screen_options_set' ), 10, 3 );
26
  }
31
  * @since 1.0.0
32
  */
33
  public function init() {
34
+
35
+ // Check what page we are on.
36
  $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
37
 
38
+ // Only load if we are actually on the overview page.
39
+ if ( 'wpforms-overview' === $page ) {
40
 
41
+ // The overview page leverages WP_List_Table so we must load it.
42
  if ( ! class_exists( 'WP_List_Table' ) ) {
43
  require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
44
  }
45
 
46
+ // Load the class that builds the overview table.
47
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/overview/class-overview-table.php';
48
 
49
+ // Preview page check.
50
  wpforms()->preview->form_preview_check();
51
 
52
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
53
  add_action( 'wpforms_admin_page', array( $this, 'output' ) );
54
 
55
+ // Provide hook for add-ons.
56
  do_action( 'wpforms_overview_init' );
57
  }
58
  }
66
 
67
  $screen = get_current_screen();
68
 
69
+ if ( 'toplevel_page_wpforms-overview' !== $screen->id ) {
70
  return;
71
  }
72
 
105
  */
106
  public function enqueues() {
107
 
108
+ // Hook for add-ons.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  do_action( 'wpforms_overview_enqueue' );
110
  }
111
 
117
  public function output() {
118
 
119
  ?>
120
+ <div id="wpforms-overview" class="wrap wpforms-admin-wrap">
121
 
122
  <h1 class="page-title">
123
  <?php _e( 'Forms Overview', 'wpforms' ); ?>
124
+ <a href="<?php echo admin_url( 'admin.php?page=wpforms-builder&view=setup' ); ?>" class="add-new-h2 wpforms-btn-orange"><?php _e( 'Add New', 'wpforms' ); ?></a>
125
  </h1>
126
 
127
  <?php
128
+ $overview_table = new WPForms_Overview_Table;
129
  $overview_table->prepare_items();
130
  ?>
131
+
132
+ <div class="wpforms-admin-content">
133
+
134
+ <form id="wpforms-overview-table" method="get" action="<?php echo admin_url( 'admin.php?page=wpforms-overview' ); ?>">
135
+
136
+ <input type="hidden" name="post_type" value="wpforms" />
137
+
138
+ <input type="hidden" name="page" value="wpforms-overview" />
139
+
140
+ <?php $overview_table->views(); ?>
141
+ <?php $overview_table->display(); ?>
142
+
143
+ </form>
144
+
145
+ </div>
146
 
147
  </div>
148
  <?php
149
  }
150
  }
151
+ new WPForms_Overview;
includes/admin/settings-api.php ADDED
@@ -0,0 +1,305 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Settings API.
4
+ *
5
+ * @package WPForms
6
+ * @author WPForms
7
+ * @since 1.3.7
8
+ * @license GPL-2.0+
9
+ * @copyright Copyright (c) 2017, WPForms LLC
10
+ */
11
+
12
+ /**
13
+ * Settings output wrapper.
14
+ *
15
+ * @since 1.3.9
16
+ * @param array $args
17
+ * @return string
18
+ */
19
+ function wpforms_settings_output_field( $args ) {
20
+
21
+ // Define default callback for this field type.
22
+ $callback = ! empty( $args['type'] ) && function_exists( 'wpforms_settings_' . $args['type'] . '_callback' ) ? 'wpforms_settings_' . $args['type'] . '_callback' : 'wpforms_settings_missing_callback';
23
+
24
+ // Allow custom callback to be provided via arg.
25
+ if ( ! empty( $args['callback'] ) && function_exists( $args['callback'] ) ) {
26
+ $callback = $args['callback'];
27
+ }
28
+
29
+ // Store returned markup from callback.
30
+ $field = call_user_func( $callback, $args );
31
+
32
+ // Allow arg to bypass standard field wrap for custom display.
33
+ if ( ! empty( $args['wrap'] ) ) {
34
+ return $field;
35
+ }
36
+
37
+ // Custom row classes.
38
+ $class = ! empty( $args['class'] ) ? wpforms_sanitize_classes( (array) $args['class'], true ) : '';
39
+
40
+ // Build standard field markup and return.
41
+ $output = '<div class="wpforms-setting-row wpforms-setting-row-' . sanitize_html_class( $args['type'] ) . ' wpforms-clear ' . $class . '" id="wpforms-setting-row-' . wpforms_sanitize_key( $args['id'] ) . '">';
42
+
43
+ if ( ! empty( $args['name'] ) && empty( $args['no_label'] ) ) {
44
+ $output .= '<span class="wpforms-setting-label">';
45
+ $output .= '<label for="wpforms-setting-' . wpforms_sanitize_key( $args['id'] ) . '">' . esc_html( $args['name'] ) . '</label>';
46
+ $output .= '</span>';
47
+ }
48
+
49
+ $output .= '<span class="wpforms-setting-field">';
50
+ $output .= $field;
51
+ $output .= '</span>';
52
+
53
+ $output .= '</div>';
54
+
55
+ return $output;
56
+ }
57
+
58
+ /**
59
+ * Missing Callback.
60
+ *
61
+ * If a function is missing for settings callbacks alert the user.
62
+ *
63
+ * @since 1.3.9
64
+ * @param array $args Arguments passed by the setting.
65
+ */
66
+ function wpforms_settings_missing_callback( $args ) {
67
+
68
+ return sprintf(
69
+ __( 'The callback function used for the %s setting is missing.', 'wpforms' ),
70
+ '<strong>' . wpforms_sanitize_key( $args['id'] ) . '</strong>'
71
+ );
72
+ }
73
+
74
+ /**
75
+ * Settings content field callback.
76
+ *
77
+ * @since 1.3.9
78
+ * @param array $args
79
+ * @return string
80
+ */
81
+ function wpforms_settings_content_callback( $args ) {
82
+
83
+ return ! empty( $args['content'] ) ? $args['content'] : '';
84
+ }
85
+
86
+ /**
87
+ * Settings license field callback.
88
+ *
89
+ * @since 1.3.9
90
+ * @param array $args
91
+ * @return string
92
+ */
93
+ function wpforms_settings_license_callback( $args ) {
94
+
95
+ // Lite users don't need to worry about license keys.
96
+ if ( ! wpforms()->pro || ! class_exists( 'WPForms_License' ) ) {
97
+ $output = '<p>' . __( 'You\'re using WPForms Lite - no license needed. Enjoy!', 'wpforms') . ' 🙂</p>';
98
+ $output .= '<p>' . sprintf( __( 'To unlock more features consider <a href="%s" target="_blank" rel="noopener noreferrer">upgrading to Pro</a>.</p>', 'wpforms' ), wpforms_admin_upgrade_link() );
99
+ return $output;
100
+ }
101
+
102
+ $key = wpforms_setting( 'key', '', 'wpforms_license' );
103
+ $type = wpforms_setting( 'type', '', 'wpforms_license' );
104
+
105
+ $output = '<input type="password" id="wpforms-setting-license-key" value="' . esc_attr( $key ) . '" />';
106
+ $output .= '<button id="wpforms-setting-license-key-verify" class="wpforms-btn wpforms-btn-md wpforms-btn-orange">' . __( 'Verify Key', 'wpforms' ) . '</button>';
107
+
108
+ // Offer option to deactivate the key.
109
+ $class = empty( $key ) ? 'wpforms-hide' : '';
110
+ $output .= '<button id="wpforms-setting-license-key-deactivate" class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey ' . $class . '">' . __( 'Deactivate Key', 'wpforms' ) . '</button>';
111
+
112
+ // If we have previously looked up the license type, display it.
113
+ $class = empty( $type ) ? 'wpforms-hide' : '';
114
+ $output .= '<p class="type ' . $class . '">' . __( 'You\'re license key type is ', 'wpforms' ) . '<strong>' . esc_html( $type ) . '</strong>.</p>';
115
+ $output .= '<p class="desc ' . $class . '">' . __( 'If your license has been upgraded or is incorrect, <a href="#" id="wpforms-setting-license-key-refresh">click here to force a refresh</a>.', 'wpforms' ) . '</p>';
116
+
117
+ return $output;
118
+ }
119
+
120
+ /**
121
+ * Settings text input field callback.
122
+ *
123
+ * @since 1.3.9
124
+ * @param array $args
125
+ * @return string
126
+ */
127
+ function wpforms_settings_text_callback( $args ) {
128
+
129
+ $default = isset( $args['default'] ) ? esc_html( $args['default'] ) : '';
130
+ $value = wpforms_setting( $args['id'], $default );
131
+ $id = wpforms_sanitize_key( $args['id'] );
132
+
133
+ $output = '<input type="text" id="wpforms-setting-' . $id . '" name="' . $id . '" value="' . esc_attr( $value ) . '">';
134
+
135
+ if ( ! empty( $args['desc'] ) ) {
136
+ $output .= '<p class="desc">' . wp_kses_post( $args['desc'] ) . '</p>';
137
+ }
138
+
139
+ return $output;
140
+ }
141
+
142
+ /**
143
+ * Settings select field callback.
144
+ *
145
+ * @since 1.3.9
146
+ * @param array $args
147
+ * @return string
148
+ */
149
+ function wpforms_settings_select_callback( $args ) {
150
+
151
+ $default = isset( $args['default'] ) ? esc_html( $args['default'] ) : '';
152
+ $value = wpforms_setting( $args['id'], $default );
153
+ $id = wpforms_sanitize_key( $args['id'] );
154
+ $class = ! empty( $args['choicesjs'] ) ? 'choicesjs-select' : '';
155
+ $choices = ! empty( $args['choicesjs'] ) ? true : false;
156
+ $data = '';
157
+
158
+ if ( $choices && !empty( $args['search'] ) ) {
159
+ $data = ' data-search="true"';
160
+ }
161
+
162
+ $output = $choices ? '<span class="choicesjs-select-wrap">' : '';
163
+ $output .= '<select id="wpforms-setting-' . $id . '" name="' . $id . '" class="' . $class . '"' . $data . '>';
164
+
165
+ foreach ( $args['options'] as $option => $name ) {
166
+ $selected = selected( $value, $option, false );
167
+ $output .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( $name ) . '</option>';
168
+ }
169
+
170
+ $output .= '</select>';
171
+ $output .= $choices ? '</span>' : '';
172
+
173
+ if ( ! empty( $args['desc'] ) ) {
174
+ $output .= '<p class="desc">' . wp_kses_post( $args['desc'] ) . '</p>';
175
+ }
176
+
177
+ return $output;
178
+ }
179
+
180
+ /**
181
+ * Settings checkbox field callback.
182
+ *
183
+ * @since 1.3.9
184
+ * @param array $args
185
+ * @return string
186
+ */
187
+ function wpforms_settings_checkbox_callback( $args ) {
188
+
189
+ $value = wpforms_setting( $args['id'] );
190
+ $id = wpforms_sanitize_key( $args['id'] );
191
+ $checked = ! empty( $value ) ? checked( 1, $value, false ) : '';
192
+
193
+ $output = '<input type="checkbox" id="wpforms-setting-' . $id . '" name="' . $id . '" ' . $checked . '>';
194
+
195
+ if ( ! empty( $args['desc'] ) ) {
196
+ $output .= '<p class="desc">' . wp_kses_post( $args['desc'] ) . '</p>';
197
+ }
198
+
199
+ return $output;
200
+ }
201
+
202
+ /**
203
+ * Settings radio field callback.
204
+ *
205
+ * @since 1.3.9
206
+ * @param array $args
207
+ * @return string
208
+ */
209
+ function wpforms_settings_radio_callback( $args ) {
210
+
211
+ $default = isset( $args['default'] ) ? esc_html( $args['default'] ) : '';
212
+ $value = wpforms_setting( $args['id'], $default );
213
+ $id = wpforms_sanitize_key( $args['id'] );
214
+ $output = '';
215
+ $x = 1;
216
+
217
+ foreach ( $args['options'] as $option => $name ) {
218
+
219
+ $checked = checked( $value, $option, false );
220
+ $output .= '<label for="wpforms-setting-' . $id . '[' . $x . ']" class="option-' . sanitize_html_class( $option ) . '">';
221
+ $output .= '<input type="radio" id="wpforms-setting-' . $id . '[' . $x . ']" name="' . $id . '" value="' . esc_attr( $option ) . '" ' . $checked . '>';
222
+ $output .= esc_html( $name );
223
+ $output .= '</label>';
224
+ $x++;
225
+ }
226
+
227
+ if ( ! empty( $args['desc'] ) ) {
228
+ $output .= '<p class="desc">' . wp_kses_post( $args['desc'] ) . '</p>';
229
+ }
230
+
231
+ return $output;
232
+ }
233
+
234
+ /**
235
+ * Settings image upload field callback.
236
+ *
237
+ * @since 1.3.9
238
+ * @param array $args
239
+ * @return string
240
+ */
241
+ function wpforms_settings_image_callback( $args ) {
242
+
243
+ $default = isset( $args['default'] ) ? esc_html( $args['default'] ) : '';
244
+ $value = wpforms_setting( $args['id'], $default );
245
+ $id = wpforms_sanitize_key( $args['id'] );
246
+ $output = '';
247
+
248
+ if ( ! empty( $value ) ) {
249
+ $output .= '<img src="' . esc_url_raw( $value ) . '">';
250
+ }
251
+
252
+ $output .= '<input type="text" id="wpforms-setting-' . $id . '" name="' . $id . '" value="' . esc_url_raw( $value ) . '">';
253
+ $output .= '<button class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey">' . __( 'Upload Image', 'wpforms' ) . '</button>';
254
+
255
+ if ( ! empty( $args['desc'] ) ) {
256
+ $output .= '<p class="desc">' . wp_kses_post( $args['desc'] ) . '</p>';
257
+ }
258
+
259
+ return $output;
260
+ }
261
+
262
+ /**
263
+ * Settings color picker field callback.
264
+ *
265
+ * @since 1.3.9
266
+ * @param array $args
267
+ * @return string
268
+ */
269
+ function wpforms_settings_color_callback( $args ) {
270
+
271
+ $default = isset( $args['default'] ) ? esc_html( $args['default'] ) : '';
272
+ $value = wpforms_setting( $args['id'], $default );
273
+ $id = wpforms_sanitize_key( $args['id'] );
274
+
275
+ $output = '<input type="text" id="wpforms-setting-' . $id . '" class="wpforms-color-picker" name="' . $id . '" value="' . esc_attr( $value ) . '">';
276
+
277
+ if ( ! empty( $args['desc'] ) ) {
278
+ $output .= '<p class="desc">' . wp_kses_post( $args['desc'] ) . '</p>';
279
+ }
280
+
281
+ return $output;
282
+ }
283
+
284
+ /**
285
+ * Settings providers field callback - this is for the Integrations tab.
286
+ *
287
+ * @since 1.3.9
288
+ * @param array $args
289
+ * @return string
290
+ */
291
+ function wpforms_settings_providers_callback( $args ) {
292
+
293
+ $providers = get_option( 'wpforms_providers', false );
294
+ $active = apply_filters( 'wpforms_providers_available', array() );
295
+
296
+ $output = '<div id="wpforms-settings-providers">';
297
+
298
+ ob_start();
299
+ do_action( 'wpforms_settings_providers', $active, $providers );
300
+ $output .= ob_get_clean();
301
+
302
+ $output .= '</div>';
303
+
304
+ return $output;
305
+ }
includes/class-preview.php CHANGED
@@ -7,7 +7,7 @@
7
  * @since 1.1.5
8
  * @license GPL-2.0+
9
  * @copyright Copyright (c) 2016, WPForms LLC
10
- */
11
  class WPForms_Preview {
12
 
13
  /**
@@ -17,10 +17,10 @@ class WPForms_Preview {
17
  */
18
  public function __construct() {
19
 
20
- // Maybe load a preview page
21
  add_action( 'init', array( $this, 'init' ) );
22
 
23
- // Hide preview page from admin
24
  add_action( 'pre_get_posts', array( $this, 'form_preview_hide' ) );
25
  }
26
 
@@ -31,23 +31,23 @@ class WPForms_Preview {
31
  */
32
  public function init() {
33
 
34
- // Check for preview param with allowed values
35
- if ( empty( $_GET['wpforms_preview'] ) || !in_array( $_GET['wpforms_preview'], array( 'print', 'form' ) ) ) {
36
  return;
37
  }
38
 
39
- // Check for authenticated user with correct capabilities
40
- if ( !is_user_logged_in() || !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
41
  return;
42
  }
43
 
44
- // Print preview
45
- if ( 'print' == $_GET['wpforms_preview'] && !empty( $_GET['entry_id'] ) ) {
46
  $this->print_preview();
47
  }
48
 
49
- // Form preview
50
- if ( 'form' == $_GET['wpforms_preview'] && !empty( $_GET['form_id'] ) ) {
51
  $this->form_preview();
52
  }
53
  }
@@ -59,21 +59,25 @@ class WPForms_Preview {
59
  */
60
  public function print_preview() {
61
 
62
- // Load entry details
63
  $entry = wpforms()->entry->get( absint( $_GET['entry_id'] ) );
64
 
65
- // Double check that we found a real entry
66
- if ( ! $entry || empty( $entry ) ) {
67
  return;
68
  }
69
 
70
- // Get form details
71
  $form_data = wpforms()->form->get( $entry->form_id, array( 'content_only' => true ) );
72
 
73
- // Double check that we found a valid entry
74
- if ( ! $form_data || empty( $form_data ) ) {
75
  return;
76
  }
 
 
 
 
77
  ?>
78
  <!doctype html>
79
  <html>
@@ -84,20 +88,74 @@ class WPForms_Preview {
84
  <meta name="description" content="">
85
  <meta name="viewport" content="width=device-width, initial-scale=1">
86
  <meta name="robots" content="noindex,nofollow,noarchive">
87
- <link rel="stylesheet" href="<?php echo includes_url('css/buttons.min.css'); ?>" type="text/css">
88
  <link rel="stylesheet" href="<?php echo WPFORMS_PLUGIN_URL; ?>assets/css/wpforms-preview.css" type="text/css">
89
- <script type="text/javascript" src="<?php echo includes_url('js/jquery/jquery.js'); ?>"></script>
90
- <script type="text/javascript" src="<?php echo WPFORMS_PLUGIN_URL; ?>assets/js/wpforms-preview.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  </head>
92
  <body class="wp-core-ui">
93
  <div class="wpforms-preview" id="print">
94
  <h1>
95
  <?php echo sanitize_text_field( $form_data['settings']['form_title'] ); ?> <span> - <?php printf( __( 'Entry #%d', 'wpforms' ), absint( $entry->entry_id ) ); ?></span>
96
  <div class="buttons">
97
- <a href="" class="button button-secondary close-window">Close</a>
98
- <a href="" class="button button-primary print">Print</a>
99
  </div>
100
  </h1>
 
 
 
 
 
101
  <?php
102
  $fields = apply_filters( 'wpforms_entry_single_data', wpforms_decode( $entry->fields ), $entry, $form_data );
103
 
@@ -110,23 +168,21 @@ class WPForms_Preview {
110
 
111
  echo '<div class="fields">';
112
 
113
- // Display the fields and their values
114
  foreach ( $fields as $key => $field ) {
115
 
116
  $field_value = apply_filters( 'wpforms_html_field_value', wp_strip_all_tags( $field['value'] ), $field, $form_data, 'entry-single' );
117
  $field_class = sanitize_html_class( 'wpforms-field-' . $field['type'] );
118
  $field_class .= empty( $field_value ) ? ' empty' : '';
119
 
120
- echo '<div class="wpforms-entry-field ' . $field_class . '">';
121
 
122
- // Field name
123
- echo '<p class="wpforms-entry-field-name">';
124
- echo !empty( $field['name'] ) ? wp_strip_all_tags( $field['name'] ) : sprintf( __( 'Field ID #%d', 'wpforms' ), absint( $field['id'] ) );
125
  echo '</p>';
126
 
127
- // Field value
128
- echo '<p class="wpforms-entry-field-value">';
129
- echo !empty( $field_value ) ? nl2br( make_clickable( $field_value ) ) : __( 'Empty', 'wpforms' );
130
  echo '</p>';
131
 
132
  echo '</div>';
@@ -134,8 +190,35 @@ class WPForms_Preview {
134
 
135
  echo '</div>';
136
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  ?>
138
- </div><!-- .wrap -->
139
  <p class="site"><a href="<?php echo home_url(); ?>"><?php echo get_bloginfo( 'name'); ?></a></p>
140
  </body>
141
  <?php
@@ -149,8 +232,9 @@ class WPForms_Preview {
149
  */
150
  public function form_preview_check() {
151
 
152
- if ( !is_admin() )
153
  return;
 
154
 
155
  // Verify page exits
156
  $preview = get_option( 'wpforms_preview_page' );
@@ -160,11 +244,11 @@ class WPForms_Preview {
160
  $preview_page = get_post( $preview );
161
 
162
  // Check to see if the visibility has been changed, if so correct it
163
- if ( !empty( $preview_page ) && 'private' != $preview_page->post_status ) {
164
  $preview_page->post_status = 'private';
165
  wp_update_post( $preview_page );
166
  return;
167
- } elseif ( !empty( $preview_page ) ) {
168
  return;
169
  }
170
  }
@@ -179,7 +263,7 @@ class WPForms_Preview {
179
  'post_title' => __( 'WPForms Preview', 'wpforms' ),
180
  'post_status' => 'private',
181
  'post_content' => $content,
182
- 'comment_status' => 'closed'
183
  );
184
  $id = wp_insert_post( $args );
185
  if ( $id ) {
@@ -232,7 +316,7 @@ class WPForms_Preview {
232
  public function form_preview_query( $posts, $query ) {
233
 
234
  // One last cap check, just for fun.
235
- if ( !is_user_logged_in() || !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
236
  return $posts;
237
  }
238
 
@@ -259,7 +343,7 @@ class WPForms_Preview {
259
  $title = sanitize_text_field( $form['settings']['form_title'] );
260
  $shortcode = '[wpforms id="' . absint( $form['id'] ) . '"]';
261
  $content = __( 'This is a preview of your form. This page is not publicly accessible.', 'wpforms' );
262
- if ( !empty( $_GET['new_window'] ) ) {
263
  $content .= ' <a href="javascript:window.close();">' . __( 'Close this window', 'wpforms' ) . '.</a>';
264
  }
265
  $posts[0]->post_title = $title . __( ' Preview', 'wpforms' );
@@ -277,12 +361,12 @@ class WPForms_Preview {
277
  */
278
  function form_preview_hide( $query ) {
279
 
280
- if( $query->is_main_query() && is_admin() && isset( $query->query_vars['post_type'] ) && 'page' == $query->query_vars['post_type'] ) {
281
- $wpforms_preview = intval( get_option( 'wpforms_preview_page' ) );
282
- if( $wpforms_preview ) {
283
- $exclude = $query->query_vars['post__not_in'];
284
- $exclude[] = $wpforms_preview;
285
- $query->set( 'post__not_in', $exclude );
286
  }
287
  }
288
  }
7
  * @since 1.1.5
8
  * @license GPL-2.0+
9
  * @copyright Copyright (c) 2016, WPForms LLC
10
+ */
11
  class WPForms_Preview {
12
 
13
  /**
17
  */
18
  public function __construct() {
19
 
20
+ // Maybe load a preview page.
21
  add_action( 'init', array( $this, 'init' ) );
22
 
23
+ // Hide preview page from admin.
24
  add_action( 'pre_get_posts', array( $this, 'form_preview_hide' ) );
25
  }
26
 
31
  */
32
  public function init() {
33
 
34
+ // Check for preview param with allowed values.
35
+ if ( empty( $_GET['wpforms_preview'] ) || ! in_array( $_GET['wpforms_preview'], array( 'print', 'form' ), true ) ) {
36
  return;
37
  }
38
 
39
+ // Check for authenticated user with correct capabilities.
40
+ if ( ! is_user_logged_in() || ! current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
41
  return;
42
  }
43
 
44
+ // Print preview.
45
+ if ( 'print' === $_GET['wpforms_preview'] && ! empty( $_GET['entry_id'] ) ) {
46
  $this->print_preview();
47
  }
48
 
49
+ // Form preview.
50
+ if ( 'form' === $_GET['wpforms_preview'] && ! empty( $_GET['form_id'] ) ) {
51
  $this->form_preview();
52
  }
53
  }
59
  */
60
  public function print_preview() {
61
 
62
+ // Load entry details.
63
  $entry = wpforms()->entry->get( absint( $_GET['entry_id'] ) );
64
 
65
+ // Double check that we found a real entry.
66
+ if ( empty( $entry ) ) {
67
  return;
68
  }
69
 
70
+ // Get form details.
71
  $form_data = wpforms()->form->get( $entry->form_id, array( 'content_only' => true ) );
72
 
73
+ // Double check that we found a valid entry.
74
+ if ( empty( $form_data ) ) {
75
  return;
76
  }
77
+
78
+ // Check for entry notes.
79
+ $entry->entry_notes = wpforms()->entry_meta->get_meta( array( 'entry_id' => $entry->entry_id, 'type' => 'note' ) );
80
+
81
  ?>
82
  <!doctype html>
83
  <html>
88
  <meta name="description" content="">
89
  <meta name="viewport" content="width=device-width, initial-scale=1">
90
  <meta name="robots" content="noindex,nofollow,noarchive">
91
+ <link rel="stylesheet" href="<?php echo includes_url( 'css/buttons.min.css' ); ?>" type="text/css">
92
  <link rel="stylesheet" href="<?php echo WPFORMS_PLUGIN_URL; ?>assets/css/wpforms-preview.css" type="text/css">
93
+ <script type="text/javascript" src="<?php echo includes_url( 'js/jquery/jquery.js' ); ?>"></script>
94
+ <script>
95
+ jQuery(function($){
96
+ var showEmpty = false,
97
+ showNotes = false,
98
+ showCompact = false;
99
+ // Print page.
100
+ $(document).on('click', '.print', function(e) {
101
+ e.preventDefault();
102
+ window.print();
103
+ });
104
+ // Close page.
105
+ $(document).on('click', '.close-window', function(e) {
106
+ e.preventDefault();
107
+ window.close();
108
+ });
109
+ // Toggle empty fields.
110
+ $(document).on('click', '.toggle-empty', function(e) {
111
+ e.preventDefault();
112
+ if ( ! showEmpty ) {
113
+ $(this).text('<?php _e( 'Hide empty fields', 'wpforms' ); ?>');
114
+ } else {
115
+ $(this).text('<?php _e( 'Show empty fields', 'wpforms' ); ?>');
116
+ }
117
+ $('.field.empty').toggle();
118
+ showEmpty = !showEmpty;
119
+ });
120
+ // Toggle notes.
121
+ $(document).on('click', '.toggle-notes', function(e) {
122
+ e.preventDefault();
123
+ if ( ! showNotes ) {
124
+ $(this).text('<?php _e( 'Hide notes', 'wpforms' ); ?>');
125
+ } else {
126
+ $(this).text('<?php _e( 'Show notes', 'wpforms' ); ?>');
127
+ }
128
+ $('.notes, .notes-head').toggle();
129
+ showNotes = !showNotes;
130
+ });
131
+ // Toggle compact view.
132
+ $(document).on('click', '.toggle-view', function(e) {
133
+ e.preventDefault();
134
+ if ( ! showCompact ) {
135
+ $(this).text('<?php _e( 'Normal view', 'wpforms' ); ?>');
136
+ } else {
137
+ $(this).text('<?php _e( 'Compact view', 'wpforms' ); ?>');
138
+ }
139
+ $('body').toggleClass('compact');
140
+ showCompact = !showCompact;
141
+ });
142
+ });
143
+ </script>
144
  </head>
145
  <body class="wp-core-ui">
146
  <div class="wpforms-preview" id="print">
147
  <h1>
148
  <?php echo sanitize_text_field( $form_data['settings']['form_title'] ); ?> <span> - <?php printf( __( 'Entry #%d', 'wpforms' ), absint( $entry->entry_id ) ); ?></span>
149
  <div class="buttons">
150
+ <a href="" class="button button-secondary close-window"><?php _e( 'Close', 'wpforms' ); ?></a>
151
+ <a href="" class="button button-primary print"><?php _e( 'Print', 'wpforms' ); ?></a>
152
  </div>
153
  </h1>
154
+ <div class="actions">
155
+ <a href="#" class="toggle-empty"><?php _e( 'Show empty fields', 'wpforms' ); ?></a> &bull;
156
+ <?php echo ! empty( $entry->entry_notes ) ? '<a href="#" class="toggle-notes">' . __( 'Show note', 'wpforms' ) . '</a> &bull;' : ''; ?>
157
+ <a href="#" class="toggle-view"><?php _e( 'Compact view', 'wpforms' ); ?></a>
158
+ </div>
159
  <?php
160
  $fields = apply_filters( 'wpforms_entry_single_data', wpforms_decode( $entry->fields ), $entry, $form_data );
161
 
168
 
169
  echo '<div class="fields">';
170
 
171
+ // Display the fields and their values.
172
  foreach ( $fields as $key => $field ) {
173
 
174
  $field_value = apply_filters( 'wpforms_html_field_value', wp_strip_all_tags( $field['value'] ), $field, $form_data, 'entry-single' );
175
  $field_class = sanitize_html_class( 'wpforms-field-' . $field['type'] );
176
  $field_class .= empty( $field_value ) ? ' empty' : '';
177
 
178
+ echo '<div class="field ' . $field_class . '">';
179
 
180
+ echo '<p class="field-name">';
181
+ echo ! empty( $field['name'] ) ? wp_strip_all_tags( $field['name'] ) : sprintf( __( 'Field ID #%d', 'wpforms' ), absint( $field['id'] ) );
 
182
  echo '</p>';
183
 
184
+ echo '<p class="field-value">';
185
+ echo ! empty( $field_value ) ? nl2br( make_clickable( $field_value ) ) : __( 'Empty', 'wpforms' );
 
186
  echo '</p>';
187
 
188
  echo '</div>';
190
 
191
  echo '</div>';
192
  }
193
+
194
+ if ( ! empty( $entry->entry_notes ) ) {
195
+
196
+ echo '<h2 class="notes-head">' . __( 'Notes', 'wpforms' ) . '</h2>';
197
+
198
+ echo '<div class="notes">';
199
+
200
+ foreach ( $entry->entry_notes as $note ) {
201
+
202
+ $user = get_userdata( $note->user_id );
203
+ $user_name = esc_html( ! empty( $user->display_name ) ? $user->display_name : $user->user_login );
204
+ $date_format = sprintf( '%s %s', get_option( 'date_format' ), get_option( 'time_format' ) );
205
+ $date = date( $date_format, strtotime( $note->date ) + ( get_option( 'gmt_offset' ) * 3600 ) );
206
+
207
+ echo '<div class="note">';
208
+ echo '<div class="note-byline">';
209
+ printf(
210
+ __( 'Added by %s on %s', 'wpforms' ),
211
+ $user_name,
212
+ $date
213
+ );
214
+ echo '</div>';
215
+ echo '<div class="note-text">' . wp_kses_post( $note->data ) . '</div>';
216
+ echo '</div>';
217
+ }
218
+ echo '</div>';
219
+ }
220
  ?>
221
+ </div>
222
  <p class="site"><a href="<?php echo home_url(); ?>"><?php echo get_bloginfo( 'name'); ?></a></p>
223
  </body>
224
  <?php
232
  */
233
  public function form_preview_check() {
234
 
235
+ if ( ! is_admin() ) {
236
  return;
237
+ }
238
 
239
  // Verify page exits
240
  $preview = get_option( 'wpforms_preview_page' );
244
  $preview_page = get_post( $preview );
245
 
246
  // Check to see if the visibility has been changed, if so correct it
247
+ if ( ! empty( $preview_page ) && 'private' !== $preview_page->post_status ) {
248
  $preview_page->post_status = 'private';
249
  wp_update_post( $preview_page );
250
  return;
251
+ } elseif ( ! empty( $preview_page ) ) {
252
  return;
253
  }
254
  }
263
  'post_title' => __( 'WPForms Preview', 'wpforms' ),
264
  'post_status' => 'private',
265
  'post_content' => $content,
266
+ 'comment_status' => 'closed',
267
  );
268
  $id = wp_insert_post( $args );
269
  if ( $id ) {
316
  public function form_preview_query( $posts, $query ) {
317
 
318
  // One last cap check, just for fun.
319
+ if ( ! is_user_logged_in() || ! current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
320
  return $posts;
321
  }
322
 
343
  $title = sanitize_text_field( $form['settings']['form_title'] );
344
  $shortcode = '[wpforms id="' . absint( $form['id'] ) . '"]';
345
  $content = __( 'This is a preview of your form. This page is not publicly accessible.', 'wpforms' );
346
+ if ( ! empty( $_GET['new_window'] ) ) {
347
  $content .= ' <a href="javascript:window.close();">' . __( 'Close this window', 'wpforms' ) . '.</a>';
348
  }
349
  $posts[0]->post_title = $title . __( ' Preview', 'wpforms' );
361
  */
362
  function form_preview_hide( $query ) {
363
 
364
+ if ( $query->is_main_query() && is_admin() && isset( $query->query_vars['post_type'] ) && 'page' == $query->query_vars['post_type'] ) {
365
+ $wpforms_preview = intval( get_option( 'wpforms_preview_page' ) );
366
+ if ( $wpforms_preview ) {
367
+ $exclude = $query->query_vars['post__not_in'];
368
+ $exclude[] = $wpforms_preview;
369
+ $query->set( 'post__not_in', $exclude );
370
  }
371
  }
372
  }
includes/fields/class-base.php CHANGED
@@ -42,14 +42,6 @@ abstract class WPForms_Field {
42
  */
43
  public $order = 20;
44
 
45
- /**
46
- * Field version number, used to introduce new features and capabilities.
47
- *
48
- * @since 1.3.7
49
- * @var integer
50
- */
51
- public $version = 1;
52
-
53
  /**
54
  * Field group the field belongs to.
55
  *
@@ -534,9 +526,12 @@ abstract class WPForms_Field {
534
  // CSS classes ---------------------------------------------------//
535
 
536
  case 'css':
 
537
  $value = ! empty( $field['css'] ) ? esc_attr( $field['css'] ) : '';
538
  $tooltip = __( 'Enter CSS class names for the form field container. Class names should be separated with spaces.', 'wpforms' );
539
- $toggle = '<a href="#" class="toggle-layout-selector-display"><i class="fa fa-th-large"></i> <span>' . __( 'Show Layouts', 'wpforms' ) . '</span></a>';
 
 
540
  // Build output
541
  $output = $this->field_element( 'label', $field, array( 'slug' => 'css', 'value' => __( 'CSS Classes', 'wpforms' ), 'tooltip' => $tooltip, 'after_tooltip' => $toggle ), false );
542
  $output .= $this->field_element( 'text', $field, array( 'slug' => 'css', 'value' => $value ), false );
42
  */
43
  public $order = 20;
44
 
 
 
 
 
 
 
 
 
45
  /**
46
  * Field group the field belongs to.
47
  *
526
  // CSS classes ---------------------------------------------------//
527
 
528
  case 'css':
529
+ $toggle = '';
530
  $value = ! empty( $field['css'] ) ? esc_attr( $field['css'] ) : '';
531
  $tooltip = __( 'Enter CSS class names for the form field container. Class names should be separated with spaces.', 'wpforms' );
532
+ if ( ! in_array( $field['type'], array( 'pagebreak' ), true ) ) {
533
+ $toggle = '<a href="#" class="toggle-layout-selector-display"><i class="fa fa-th-large"></i> <span>' . __( 'Show Layouts', 'wpforms' ) . '</span></a>';
534
+ }
535
  // Build output
536
  $output = $this->field_element( 'label', $field, array( 'slug' => 'css', 'value' => __( 'CSS Classes', 'wpforms' ), 'tooltip' => $tooltip, 'after_tooltip' => $toggle ), false );
537
  $output .= $this->field_element( 'text', $field, array( 'slug' => 'css', 'value' => $value ), false );
includes/fields/class-checkbox.php CHANGED
@@ -52,10 +52,10 @@ class WPForms_Field_Checkbox extends WPForms_Field {
52
  //--------------------------------------------------------------------//
53
  // Basic field options
54
  //--------------------------------------------------------------------//
55
-
56
  // Options open markup
57
  $this->field_option( 'basic-options', $field, array( 'markup' => 'open' ) );
58
-
59
  // Label
60
  $this->field_option( 'label', $field );
61
 
@@ -70,14 +70,14 @@ class WPForms_Field_Checkbox extends WPForms_Field {
70
 
71
  // Options close markup
72
  $this->field_option( 'basic-options', $field, array( 'markup' => 'close' ) );
73
-
74
  //--------------------------------------------------------------------//
75
  // Advanced field options
76
  //--------------------------------------------------------------------//
77
-
78
  // Options open markup
79
  $this->field_option( 'advanced-options', $field, array( 'markup' => 'open' ) );
80
-
81
  // Show Values toggle option
82
  $tooltip = __( 'Check this to manual set form field values.', 'wpforms' );
83
  $show_values = isset( $field['show_values'] ) ? $field['show_values'] : '0';
@@ -120,21 +120,21 @@ class WPForms_Field_Checkbox extends WPForms_Field {
120
  // Field checkbox elements
121
  echo '<ul class="primary-input">';
122
 
123
- // Check to see if this field is configured for Dynamic Choices,
124
  // either auto populating from a post type or a taxonomy.
125
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
126
-
127
  // Post type dynamic populating
128
  $source = $field['dynamic_post_type'];
129
  $total = wp_count_posts( $source );
130
  $total = $total->publish;
131
- $args = array(
132
- 'post_type' => $source,
133
- 'posts_per_page' => 20,
134
- 'orderby' => 'title',
135
  'order' => 'ASC' ,
136
  );
137
- $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $this->form_id ) );
138
  $values = array();
139
 
140
  foreach ( $posts as $post ) {
@@ -146,30 +146,30 @@ class WPForms_Field_Checkbox extends WPForms_Field {
146
  // Taxonomy dynamic populating
147
  $source = $field['dynamic_taxonomy'];
148
  $total = wp_count_terms( $source );
149
- $args = array(
150
- 'taxonomy' => $source,
151
- 'hide_empty' => false,
152
  'number' => 20
153
- );
154
- $terms = get_terms( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $this->form_id ) );
155
  $values = array();
156
 
157
  foreach ( $terms as $term ) {
158
  $values[] = array( 'label' => $term->name );
159
  }
160
- }
161
 
162
  // Notify if currently empty
163
  if ( empty( $values ) ) {
164
  $values = array( 'label' => __( '(empty)', 'wpforms' ) );
165
  }
166
-
167
  // Individual checkbox options
168
  foreach ( $values as $key => $value ) {
169
-
170
  $default = isset( $value['default'] ) ? $value['default'] : '';
171
  $selected = checked( '1', $default, false );
172
-
173
  printf( '<li><input type="checkbox" %s disabled>%s</li>', $selected, $value['label'] );
174
  }
175
 
@@ -194,14 +194,14 @@ class WPForms_Field_Checkbox extends WPForms_Field {
194
  * @param array $form_data
195
  */
196
  public function field_display( $field, $field_atts, $form_data ) {
197
-
198
  // Setup and sanitize the necessary data
199
  $field = apply_filters( 'wpforms_checkbox_field_display', $field, $field_atts, $form_data );
200
  $field_placeholder = !empty( $field['placeholder']) ? esc_attr( $field['placeholder'] ) : '';
201
  $field_required = !empty( $field['required'] ) ? ' required' : '';
202
  $field_class = implode( ' ', array_map( 'sanitize_html_class', $field_atts['input_class'] ) );
203
  $field_id = implode( ' ', array_map( 'sanitize_html_class', $field_atts['input_id'] ) );
204
- $field_data = '';
205
  $form_id = $form_data['id'];
206
  $dynamic = !empty( $field['dynamic_choices'] ) ? $field['dynamic_choices'] : false;
207
  $choices = $field['choices'];
@@ -212,25 +212,27 @@ class WPForms_Field_Checkbox extends WPForms_Field {
212
  }
213
  }
214
 
215
- // Check to see if this field is configured for Dynamic Choices,
216
  // either auto populating from a post type or a taxonomy.
217
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
218
-
219
  // Post type dynamic populating
220
  $source = $field['dynamic_post_type'];
221
- $args = array(
222
- 'post_type' => $source,
223
- 'posts_per_page' => -1,
224
- 'orderby' => 'title',
225
  'order' => 'ASC' ,
226
  );
227
- $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ) );
 
228
  $choices = array();
229
 
230
  foreach ( $posts as $post ) {
231
- $choices[] = array(
232
  'value' => $post->ID,
233
- 'label' => $post->post_title
 
234
  );
235
  }
236
 
@@ -240,17 +242,18 @@ class WPForms_Field_Checkbox extends WPForms_Field {
240
 
241
  // Taxonomy dynamic populating
242
  $source = $field['dynamic_taxonomy'];
243
- $args = array(
244
- 'taxonomy' => $source,
245
- 'hide_empty' => false,
246
- );
247
- $terms = get_terms( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $form_data['id'] ) );
248
  $choices = array();
249
-
250
  foreach ( $terms as $term ) {
251
- $choices[] = array(
252
  'value' => $term->term_id,
253
- 'label' => $term->name
 
254
  );
255
  }
256
 
@@ -259,17 +262,18 @@ class WPForms_Field_Checkbox extends WPForms_Field {
259
 
260
  // List
261
  printf( '<ul id="%s" class="%s" %s>', $field_id, $field_class, $field_data );
262
-
263
- foreach( $choices as $key=> $choice ) {
264
-
265
  $selected = isset( $choice['default'] ) ? '1' : '0' ;
266
  $val = isset( $field['show_values'] ) ? esc_attr( $choice['value'] ) : esc_attr( $choice['label'] );
267
-
268
- printf( '<li class="choice-%d">', $key );
269
-
 
270
  // Checkbox elements
271
  printf( '<input type="checkbox" id="wpforms-%d-field_%d_%d" name="wpforms[fields][%d][]" value="%s" %s %s>',
272
- $form_id,
273
  $field['id'],
274
  $key,
275
  $field['id'],
@@ -277,12 +281,12 @@ class WPForms_Field_Checkbox extends WPForms_Field {
277
  checked( '1', $selected, false ),
278
  $field_required
279
  );
280
-
281
  printf( '<label class="wpforms-field-label-inline" for="wpforms-%d-field_%d_%d">%s</label>', $form_id, $field['id'], $key, wp_kses_post( $choice['label'] ) );
282
-
283
  echo '</li>';
284
  }
285
-
286
  echo '</ul>';
287
  }
288
 
@@ -350,7 +354,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
350
  }
351
 
352
  $data['value'] = !empty( $terms ) ? implode( "\n", array_map( 'sanitize_text_field', $terms ) ) : '';
353
-
354
  } else {
355
 
356
  // Normal processing, dynamic population is off
@@ -358,7 +362,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
358
  // If show_values is true, that means values posted are the raw values
359
  // and not the labels. So we need to get the label values.
360
  if ( !empty( $field['show_values'] ) && '1' == $field['show_values'] ) {
361
-
362
  $value = array();
363
 
364
  foreach( $field_submit as $field_submit_single ) {
@@ -369,7 +373,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
369
  }
370
  }
371
  }
372
-
373
  $data['value'] = !empty( $value ) ? implode( "\n", array_map( 'sanitize_text_field', $value ) ) : '';
374
 
375
  } else {
@@ -381,4 +385,4 @@ class WPForms_Field_Checkbox extends WPForms_Field {
381
  wpforms()->process->fields[$field_id] = $data;
382
  }
383
  }
384
- new WPForms_Field_Checkbox;
52
  //--------------------------------------------------------------------//
53
  // Basic field options
54
  //--------------------------------------------------------------------//
55
+
56
  // Options open markup
57
  $this->field_option( 'basic-options', $field, array( 'markup' => 'open' ) );
58
+
59
  // Label
60
  $this->field_option( 'label', $field );
61
 
70
 
71
  // Options close markup
72
  $this->field_option( 'basic-options', $field, array( 'markup' => 'close' ) );
73
+
74
  //--------------------------------------------------------------------//
75
  // Advanced field options
76
  //--------------------------------------------------------------------//
77
+
78
  // Options open markup
79
  $this->field_option( 'advanced-options', $field, array( 'markup' => 'open' ) );
80
+
81
  // Show Values toggle option
82
  $tooltip = __( 'Check this to manual set form field values.', 'wpforms' );
83
  $show_values = isset( $field['show_values'] ) ? $field['show_values'] : '0';
120
  // Field checkbox elements
121
  echo '<ul class="primary-input">';
122
 
123
+ // Check to see if this field is configured for Dynamic Choices,
124
  // either auto populating from a post type or a taxonomy.
125
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
126
+
127
  // Post type dynamic populating
128
  $source = $field['dynamic_post_type'];
129
  $total = wp_count_posts( $source );
130
  $total = $total->publish;
131
+ $args = array(
132
+ 'post_type' => $source,
133
+ 'posts_per_page' => 20,
134
+ 'orderby' => 'title',
135
  'order' => 'ASC' ,
136
  );
137
+ $posts = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $this->form_id ), true );
138
  $values = array();
139
 
140
  foreach ( $posts as $post ) {
146
  // Taxonomy dynamic populating
147
  $source = $field['dynamic_taxonomy'];
148
  $total = wp_count_terms( $source );
149
+ $args = array(
150
+ 'taxonomy' => $source,
151
+ 'hide_empty' => false,
152
  'number' => 20
153
+ );
154
+ $terms = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $this->form_id ), true );
155
  $values = array();
156
 
157
  foreach ( $terms as $term ) {
158
  $values[] = array( 'label' => $term->name );
159
  }
160
+ }
161
 
162
  // Notify if currently empty
163
  if ( empty( $values ) ) {
164
  $values = array( 'label' => __( '(empty)', 'wpforms' ) );
165
  }
166
+
167
  // Individual checkbox options
168
  foreach ( $values as $key => $value ) {
169
+
170
  $default = isset( $value['default'] ) ? $value['default'] : '';
171
  $selected = checked( '1', $default, false );
172
+
173
  printf( '<li><input type="checkbox" %s disabled>%s</li>', $selected, $value['label'] );
174
  }
175
 
194
  * @param array $form_data
195
  */
196
  public function field_display( $field, $field_atts, $form_data ) {
197
+
198
  // Setup and sanitize the necessary data
199
  $field = apply_filters( 'wpforms_checkbox_field_display', $field, $field_atts, $form_data );
200
  $field_placeholder = !empty( $field['placeholder']) ? esc_attr( $field['placeholder'] ) : '';
201
  $field_required = !empty( $field['required'] ) ? ' required' : '';
202
  $field_class = implode( ' ', array_map( 'sanitize_html_class', $field_atts['input_class'] ) );
203
  $field_id = implode( ' ', array_map( 'sanitize_html_class', $field_atts['input_id'] ) );
204
+ $field_data = '';
205
  $form_id = $form_data['id'];
206
  $dynamic = !empty( $field['dynamic_choices'] ) ? $field['dynamic_choices'] : false;
207
  $choices = $field['choices'];
212
  }
213
  }
214
 
215
+ // Check to see if this field is configured for Dynamic Choices,
216
  // either auto populating from a post type or a taxonomy.
217
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
218
+
219
  // Post type dynamic populating
220
  $source = $field['dynamic_post_type'];
221
+ $args = array(
222
+ 'post_type' => $source,
223
+ 'posts_per_page' => -1,
224
+ 'orderby' => 'title',
225
  'order' => 'ASC' ,
226
  );
227
+
228
+ $posts = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ), true );
229
  $choices = array();
230
 
231
  foreach ( $posts as $post ) {
232
+ $choices[] = array(
233
  'value' => $post->ID,
234
+ 'label' => $post->post_title,
235
+ 'depth' => isset( $post->depth ) ? absint( $post->depth ) : 1,
236
  );
237
  }
238
 
242
 
243
  // Taxonomy dynamic populating
244
  $source = $field['dynamic_taxonomy'];
245
+ $args = array(
246
+ 'taxonomy' => $source,
247
+ 'hide_empty' => false,
248
+ );
249
+ $terms = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $form_data['id'] ), true );
250
  $choices = array();
251
+
252
  foreach ( $terms as $term ) {
253
+ $choices[] = array(
254
  'value' => $term->term_id,
255
+ 'label' => $term->name,
256
+ 'depth' => isset( $term->depth ) ? absint( $term->depth ) : 1,
257
  );
258
  }
259
 
262
 
263
  // List
264
  printf( '<ul id="%s" class="%s" %s>', $field_id, $field_class, $field_data );
265
+
266
+ foreach( $choices as $key => $choice ) {
267
+
268
  $selected = isset( $choice['default'] ) ? '1' : '0' ;
269
  $val = isset( $field['show_values'] ) ? esc_attr( $choice['value'] ) : esc_attr( $choice['label'] );
270
+ $depth = isset( $choice['depth'] ) ? absint( $choice['depth'] ) : 1;
271
+
272
+ printf( '<li class="choice-%d depth-%d">', $key, $depth );
273
+
274
  // Checkbox elements
275
  printf( '<input type="checkbox" id="wpforms-%d-field_%d_%d" name="wpforms[fields][%d][]" value="%s" %s %s>',
276
+ $form_id,
277
  $field['id'],
278
  $key,
279
  $field['id'],
281
  checked( '1', $selected, false ),
282
  $field_required
283
  );
284
+
285
  printf( '<label class="wpforms-field-label-inline" for="wpforms-%d-field_%d_%d">%s</label>', $form_id, $field['id'], $key, wp_kses_post( $choice['label'] ) );
286
+
287
  echo '</li>';
288
  }
289
+
290
  echo '</ul>';
291
  }
292
 
354
  }
355
 
356
  $data['value'] = !empty( $terms ) ? implode( "\n", array_map( 'sanitize_text_field', $terms ) ) : '';
357
+
358
  } else {
359
 
360
  // Normal processing, dynamic population is off
362
  // If show_values is true, that means values posted are the raw values
363
  // and not the labels. So we need to get the label values.
364
  if ( !empty( $field['show_values'] ) && '1' == $field['show_values'] ) {
365
+
366
  $value = array();
367
 
368
  foreach( $field_submit as $field_submit_single ) {
373
  }
374
  }
375
  }
376
+
377
  $data['value'] = !empty( $value ) ? implode( "\n", array_map( 'sanitize_text_field', $value ) ) : '';
378
 
379
  } else {
385
  wpforms()->process->fields[$field_id] = $data;
386
  }
387
  }
388
+ new WPForms_Field_Checkbox;
includes/fields/class-radio.php CHANGED
@@ -52,13 +52,13 @@ class WPForms_Field_Radio extends WPForms_Field {
52
  //--------------------------------------------------------------------//
53
  // Basic field options
54
  //--------------------------------------------------------------------//
55
-
56
  // Options open markup
57
  $this->field_option( 'basic-options', $field, array( 'markup' => 'open' ) );
58
-
59
  // Label
60
  $this->field_option( 'label', $field );
61
-
62
  // Choices
63
  $this->field_option( 'choices', $field );
64
 
@@ -70,11 +70,11 @@ class WPForms_Field_Radio extends WPForms_Field {
70
 
71
  // Options close markup
72
  $this->field_option( 'basic-options', $field, array( 'markup' => 'close' ) );
73
-
74
  //--------------------------------------------------------------------//
75
  // Advanced field options
76
  //--------------------------------------------------------------------//
77
-
78
  // Options open markup
79
  $this->field_option( 'advanced-options', $field, array( 'markup' => 'open' ) );
80
 
@@ -116,25 +116,25 @@ class WPForms_Field_Radio extends WPForms_Field {
116
 
117
  // Label
118
  $this->field_preview_option( 'label', $field );
119
-
120
  // Field radio elements
121
  echo '<ul class="primary-input">';
122
 
123
- // Check to see if this field is configured for Dynamic Choices,
124
  // either auto populating from a post type or a taxonomy.
125
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
126
-
127
  // Post type dynamic populating
128
  $source = $field['dynamic_post_type'];
129
  $total = wp_count_posts( $source );
130
  $total = $total->publish;
131
- $args = array(
132
- 'post_type' => $source,
133
- 'posts_per_page' => 20,
134
- 'orderby' => 'title',
135
  'order' => 'ASC' ,
136
  );
137
- $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $this->form_id ) );
138
  $values = array();
139
 
140
  foreach ( $posts as $post ) {
@@ -146,12 +146,12 @@ class WPForms_Field_Radio extends WPForms_Field {
146
  // Taxonomy dynamic populating
147
  $source = $field['dynamic_taxonomy'];
148
  $total = wp_count_terms( $source );
149
- $args = array(
150
- 'taxonomy' => $source,
151
- 'hide_empty' => false,
152
  'number' => 20
153
- );
154
- $terms = get_terms( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $this->form_id ) );
155
  $values = array();
156
 
157
  foreach ( $terms as $term ) {
@@ -169,7 +169,7 @@ class WPForms_Field_Radio extends WPForms_Field {
169
 
170
  $default = isset( $value['default'] ) ? $value['default'] : '';
171
  $selected = checked( '1', $default, false );
172
-
173
  printf( '<li><input type="radio" %s disabled>%s</li>', $selected, $value['label'] );
174
  }
175
 
@@ -194,7 +194,7 @@ class WPForms_Field_Radio extends WPForms_Field {
194
  * @param array $form_data
195
  */
196
  public function field_display( $field, $field_atts, $form_data ) {
197
-
198
  // Setup and sanitize the necessary data
199
  $field = apply_filters( 'wpforms_radio_field_display', $field, $field_atts, $form_data );
200
  $field_required = !empty( $field['required'] ) ? ' required' : '';
@@ -211,25 +211,26 @@ class WPForms_Field_Radio extends WPForms_Field {
211
  }
212
  }
213
 
214
- // Check to see if this field is configured for Dynamic Choices,
215
  // either auto populating from a post type or a taxonomy.
216
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
217
-
218
  // Post type dynamic populating
219
  $source = $field['dynamic_post_type'];
220
- $args = array(
221
- 'post_type' => $source,
222
- 'posts_per_page' => -1,
223
- 'orderby' => 'title',
224
  'order' => 'ASC' ,
225
  );
226
- $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ) );
227
  $choices = array();
228
 
229
  foreach ( $posts as $post ) {
230
- $choices[] = array(
231
  'value' => $post->ID,
232
- 'label' => $post->post_title
 
233
  );
234
  }
235
 
@@ -239,17 +240,18 @@ class WPForms_Field_Radio extends WPForms_Field {
239
 
240
  // Taxonomy dynamic populating
241
  $source = $field['dynamic_taxonomy'];
242
- $args = array(
243
- 'taxonomy' => $source,
244
- 'hide_empty' => false,
245
- );
246
- $terms = get_terms( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $form_data['id'] ) );
247
  $choices = array();
248
-
249
  foreach ( $terms as $term ) {
250
- $choices[] = array(
251
  'value' => $term->term_id,
252
- 'label' => $term->name
 
253
  );
254
  }
255
 
@@ -258,17 +260,18 @@ class WPForms_Field_Radio extends WPForms_Field {
258
 
259
  // List
260
  printf( '<ul id="%s" class="%s" %s>', $field_id, $field_class, $field_data );
261
-
262
  foreach( $choices as $key => $choice ) {
263
-
264
  $selected = isset( $choice['default'] ) ? '1' : '0';
265
  $val = isset( $field['show_values'] ) ? esc_attr( $choice['value'] ) : esc_attr( $choice['label'] );
266
-
267
- printf( '<li class="choice-%d">', $key );
268
-
 
269
  // Radio elements
270
  printf( '<input type="radio" id="wpforms-%s-field_%d_%d" name="wpforms[fields][%d]" value="%s" %s %s>',
271
- $form_id,
272
  $field['id'],
273
  $key,
274
  $field['id'],
@@ -276,9 +279,9 @@ class WPForms_Field_Radio extends WPForms_Field {
276
  checked( '1', $selected, false ),
277
  $field_required
278
  );
279
-
280
  printf( '<label class="wpforms-field-label-inline" for="wpforms-%d-field_%d_%d">%s</label>', $form_id, $field['id'], $key, wp_kses_post( $choice['label'] ) );
281
-
282
  echo '</li>';
283
  }
284
 
@@ -332,7 +335,7 @@ class WPForms_Field_Radio extends WPForms_Field {
332
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
333
  $data['value'] = esc_html( $term->name );
334
  }
335
-
336
  } else {
337
 
338
  // Normal processing, dynamic population is off
@@ -340,7 +343,7 @@ class WPForms_Field_Radio extends WPForms_Field {
340
  // If show_values is true, that means values posted are the raw values
341
  // and not the labels. So we need to get the label values.
342
  if ( !empty( $field['show_values'] ) && '1' == $field['show_values'] ) {
343
-
344
  foreach ( $field['choices'] as $choice ) {
345
  if ( $choice['value'] === $field_submit ) {
346
  $value = $choice['label'];
@@ -359,4 +362,4 @@ class WPForms_Field_Radio extends WPForms_Field {
359
  wpforms()->process->fields[$field_id] = $data;
360
  }
361
  }
362
- new WPForms_Field_Radio;
52
  //--------------------------------------------------------------------//
53
  // Basic field options
54
  //--------------------------------------------------------------------//
55
+
56
  // Options open markup
57
  $this->field_option( 'basic-options', $field, array( 'markup' => 'open' ) );
58
+
59
  // Label
60
  $this->field_option( 'label', $field );
61
+
62
  // Choices
63
  $this->field_option( 'choices', $field );
64
 
70
 
71
  // Options close markup
72
  $this->field_option( 'basic-options', $field, array( 'markup' => 'close' ) );
73
+
74
  //--------------------------------------------------------------------//
75
  // Advanced field options
76
  //--------------------------------------------------------------------//
77
+
78
  // Options open markup
79
  $this->field_option( 'advanced-options', $field, array( 'markup' => 'open' ) );
80
 
116
 
117
  // Label
118
  $this->field_preview_option( 'label', $field );
119
+
120
  // Field radio elements
121
  echo '<ul class="primary-input">';
122
 
123
+ // Check to see if this field is configured for Dynamic Choices,
124
  // either auto populating from a post type or a taxonomy.
125
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
126
+
127
  // Post type dynamic populating
128
  $source = $field['dynamic_post_type'];
129
  $total = wp_count_posts( $source );
130
  $total = $total->publish;
131
+ $args = array(
132
+ 'post_type' => $source,
133
+ 'posts_per_page' => 20,
134
+ 'orderby' => 'title',
135
  'order' => 'ASC' ,
136
  );
137
+ $posts = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $this->form_id ), true );
138
  $values = array();
139
 
140
  foreach ( $posts as $post ) {
146
  // Taxonomy dynamic populating
147
  $source = $field['dynamic_taxonomy'];
148
  $total = wp_count_terms( $source );
149
+ $args = array(
150
+ 'taxonomy' => $source,
151
+ 'hide_empty' => false,
152
  'number' => 20
153
+ );
154
+ $terms = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $this->form_id ), true );
155
  $values = array();
156
 
157
  foreach ( $terms as $term ) {
169
 
170
  $default = isset( $value['default'] ) ? $value['default'] : '';
171
  $selected = checked( '1', $default, false );
172
+
173
  printf( '<li><input type="radio" %s disabled>%s</li>', $selected, $value['label'] );
174
  }
175
 
194
  * @param array $form_data
195
  */
196
  public function field_display( $field, $field_atts, $form_data ) {
197
+
198
  // Setup and sanitize the necessary data
199
  $field = apply_filters( 'wpforms_radio_field_display', $field, $field_atts, $form_data );
200
  $field_required = !empty( $field['required'] ) ? ' required' : '';
211
  }
212
  }
213
 
214
+ // Check to see if this field is configured for Dynamic Choices,
215
  // either auto populating from a post type or a taxonomy.
216
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
217
+
218
  // Post type dynamic populating
219
  $source = $field['dynamic_post_type'];
220
+ $args = array(
221
+ 'post_type' => $source,
222
+ 'posts_per_page' => -1,
223
+ 'orderby' => 'title',
224
  'order' => 'ASC' ,
225
  );
226
+ $posts = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ), true );
227
  $choices = array();
228
 
229
  foreach ( $posts as $post ) {
230
+ $choices[] = array(
231
  'value' => $post->ID,
232
+ 'label' => $post->post_title,
233
+ 'depth' => isset( $post->depth ) ? absint( $post->depth ) : 1,
234
  );
235
  }
236
 
240
 
241
  // Taxonomy dynamic populating
242
  $source = $field['dynamic_taxonomy'];
243
+ $args = array(
244
+ 'taxonomy' => $source,
245
+ 'hide_empty' => false,
246
+ );
247
+ $terms = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $form_data['id'] ), true );
248
  $choices = array();
249
+
250
  foreach ( $terms as $term ) {
251
+ $choices[] = array(
252
  'value' => $term->term_id,
253
+ 'label' => $term->name,
254
+ 'depth' => isset( $term->depth ) ? absint( $term->depth ) : 1,
255
  );
256
  }
257
 
260
 
261
  // List
262
  printf( '<ul id="%s" class="%s" %s>', $field_id, $field_class, $field_data );
263
+
264
  foreach( $choices as $key => $choice ) {
265
+
266
  $selected = isset( $choice['default'] ) ? '1' : '0';
267
  $val = isset( $field['show_values'] ) ? esc_attr( $choice['value'] ) : esc_attr( $choice['label'] );
268
+ $depth = isset( $choice['depth'] ) ? absint( $choice['depth'] ) : 1;
269
+
270
+ printf( '<li class="choice-%d depth-%d">', $key, $depth );
271
+
272
  // Radio elements
273
  printf( '<input type="radio" id="wpforms-%s-field_%d_%d" name="wpforms[fields][%d]" value="%s" %s %s>',
274
+ $form_id,
275
  $field['id'],
276
  $key,
277
  $field['id'],
279
  checked( '1', $selected, false ),
280
  $field_required
281
  );
282
+
283
  printf( '<label class="wpforms-field-label-inline" for="wpforms-%d-field_%d_%d">%s</label>', $form_id, $field['id'], $key, wp_kses_post( $choice['label'] ) );
284
+
285
  echo '</li>';
286
  }
287
 
335
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
336
  $data['value'] = esc_html( $term->name );
337
  }
338
+
339
  } else {
340
 
341
  // Normal processing, dynamic population is off
343
  // If show_values is true, that means values posted are the raw values
344
  // and not the labels. So we need to get the label values.
345
  if ( !empty( $field['show_values'] ) && '1' == $field['show_values'] ) {
346
+
347
  foreach ( $field['choices'] as $choice ) {
348
  if ( $choice['value'] === $field_submit ) {
349
  $value = $choice['label'];
362
  wpforms()->process->fields[$field_id] = $data;
363
  }
364
  }
365
+ new WPForms_Field_Radio;
includes/fields/class-select.php CHANGED
@@ -141,7 +141,7 @@ class WPForms_Field_Select extends WPForms_Field {
141
  'orderby' => 'title',
142
  'order' => 'ASC' ,
143
  );
144
- $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $this->form_id ) );
145
  $values = array();
146
 
147
  foreach ( $posts as $post ) {
@@ -157,7 +157,7 @@ class WPForms_Field_Select extends WPForms_Field {
157
  'hide_empty' => false,
158
  'number' => 1
159
  );
160
- $terms = get_terms( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $this->form_id ) );
161
  $values = array();
162
 
163
  foreach ( $terms as $term ) {
@@ -245,7 +245,7 @@ class WPForms_Field_Select extends WPForms_Field {
245
  'orderby' => 'title',
246
  'order' => 'ASC' ,
247
  );
248
- $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ) );
249
  $choices = array();
250
 
251
  foreach ( $posts as $post ) {
@@ -265,7 +265,7 @@ class WPForms_Field_Select extends WPForms_Field {
265
  'taxonomy' => $source,
266
  'hide_empty' => false,
267
  );
268
- $terms = get_terms( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $form_data['id'] ) );
269
  $choices = array();
270
 
271
  foreach ( $terms as $term ) {
@@ -364,4 +364,4 @@ class WPForms_Field_Select extends WPForms_Field {
364
  wpforms()->process->fields[$field_id] = $data;
365
  }
366
  }
367
- new WPForms_Field_Select;
141
  'orderby' => 'title',
142
  'order' => 'ASC' ,
143
  );
144
+ $posts = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $this->form_id ), true );
145
  $values = array();
146
 
147
  foreach ( $posts as $post ) {
157
  'hide_empty' => false,
158
  'number' => 1
159
  );
160
+ $terms = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $this->form_id ), true );
161
  $values = array();
162
 
163
  foreach ( $terms as $term ) {
245
  'orderby' => 'title',
246
  'order' => 'ASC' ,
247
  );
248
+ $posts = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ), true );
249
  $choices = array();
250
 
251
  foreach ( $posts as $post ) {
265
  'taxonomy' => $source,
266
  'hide_empty' => false,
267
  );
268
+ $terms = wpforms_get_hierarchical_object( apply_filters( 'wpforms_dynamic_choice_taxonomy_args', $args, $field, $form_data['id'] ), true );
269
  $choices = array();
270
 
271
  foreach ( $terms as $term ) {
364
  wpforms()->process->fields[$field_id] = $data;
365
  }
366
  }
367
+ new WPForms_Field_Select;
includes/functions.php CHANGED
@@ -106,15 +106,27 @@ function wpforms_object_to_array( $object ) {
106
  * @since 1.0.0
107
  * @return mixed
108
  */
109
- function wpforms_setting( $key, $default = false, $option = 'wpforms_settings' ) {
110
 
 
111
  $options = get_option( $option, false );
112
-
113
- $value = is_array( $options ) && ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
114
 
115
  return $value;
116
  }
117
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  /**
119
  * Check if form provided contains the specified field type.
120
  *
@@ -952,7 +964,8 @@ function wpforms_get_ip() {
952
  * @return string
953
  */
954
  function wpforms_sanitize_hex_color( $color ) {
955
- if ( '' === $color ) {
 
956
  return '';
957
  }
958
 
@@ -1007,6 +1020,185 @@ function wpforms_light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' )
1007
  return $brightness > 155 ? $dark : $light;
1008
  }
1009
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1010
  /**
1011
  * Debug mode bool.
1012
  *
@@ -1119,20 +1311,6 @@ function wpforms_log( $title = '', $message = '', $args = array() ) {
1119
  wpforms()->logs->add( $title, $message, $parent, $parent, $meta );
1120
  }
1121
 
1122
- /**
1123
- * Insert element into an array at a specific point a preserve the key.
1124
- *
1125
- * @since 1.3.3
1126
- * @param array $array
1127
- * @param array $values
1128
- * @param int $offset
1129
- * @return array
1130
- */
1131
- function wpforms_array_insert( $array, $values, $offset ) {
1132
-
1133
- return array_slice( $array, 0, $offset, true ) + $values + array_slice( $array, $offset, NULL, true );
1134
- }
1135
-
1136
  /**
1137
  * Array replace recursive, for PHP 5.2.
1138
  *
106
  * @since 1.0.0
107
  * @return mixed
108
  */
109
+ function wpforms_setting( $key, $default = false, $option = 'wpforms_settings' ) {
110
 
111
+ $key = wpforms_sanitize_key( $key );
112
  $options = get_option( $option, false );
113
+ $value = is_array( $options ) && ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
 
114
 
115
  return $value;
116
  }
117
 
118
+ /**
119
+ * Sanitize key, primarily used for looking up options.
120
+ *
121
+ * @since 1.3.9
122
+ * @param string $key
123
+ * @return string
124
+ */
125
+ function wpforms_sanitize_key( $key = '' ) {
126
+
127
+ return preg_replace( '/[^a-zA-Z0-9_\-\.\:\/]/', '', $key );
128
+ }
129
+
130
  /**
131
  * Check if form provided contains the specified field type.
132
  *
964
  * @return string
965
  */
966
  function wpforms_sanitize_hex_color( $color ) {
967
+
968
+ if ( empty( $color ) ) {
969
  return '';
970
  }
971
 
1020
  return $brightness > 155 ? $dark : $light;
1021
  }
1022
 
1023
+ /**
1024
+ * Builds and returns either a taxonomy or post type object that is
1025
+ * nests to accomodate any hierarchy.
1026
+ *
1027
+ * @since 1.3.9
1028
+ * @param array $args
1029
+ * @param bool $flat
1030
+ * @return array
1031
+ */
1032
+ function wpforms_get_hierarchical_object( $args = array(), $flat = false ) {
1033
+
1034
+ if ( empty( $args['taxonomy'] ) && empty( $args['post_type'] ) ) {
1035
+ return false;
1036
+ }
1037
+
1038
+ $children = array();
1039
+ $parents = array();
1040
+
1041
+ if ( ! empty( $args['post_type'] ) ) {
1042
+
1043
+ $defaults = array(
1044
+ 'posts_per_page' => -1,
1045
+ 'orderby' => 'title',
1046
+ 'order' => 'ASC',
1047
+ );
1048
+ $args = wp_parse_args( $args, $defaults );
1049
+ $items = get_posts( $args );
1050
+ $ref_parent = 'post_parent';
1051
+ $ref_id = 'ID';
1052
+ $ref_name = 'post_title';
1053
+
1054
+ } elseif ( ! empty( $args['taxonomy'] ) ) {
1055
+
1056
+ $defaults = array(
1057
+ 'hide_empty' => false,
1058
+ );
1059
+ $args = wp_parse_args( $args, $defaults );
1060
+ $items = get_terms( $args );
1061
+ $ref_parent = 'parent';
1062
+ $ref_id = 'term_id';
1063
+ $ref_name = 'name';
1064
+ }
1065
+
1066
+ if ( empty( $items ) || is_wp_error( $items ) ) {
1067
+ return false;
1068
+ }
1069
+
1070
+ foreach ( $items as $item ) {
1071
+ if ( $item->{$ref_parent} ) {
1072
+ $children[ $item->{$ref_id} ] = $item;
1073
+ $children[ $item->{$ref_id} ]->ID = (int) $item->{$ref_id};
1074
+ } else {
1075
+ $parents[ $item->{$ref_id} ] = $item;
1076
+ $parents[ $item->{$ref_id} ]->ID = (int) $item->{$ref_id};
1077
+ }
1078
+ }
1079
+
1080
+ while ( count ( $children ) >= 1 ) {
1081
+ foreach ( $children as $child ) {
1082
+ _wpforms_get_hierarchical_object_search( $child, $parents, $children, $ref_parent );
1083
+ }
1084
+ }
1085
+
1086
+ if ( $flat ) {
1087
+ $parents_flat = array();
1088
+ _wpforms_get_hierarchical_object_flatten( $parents, $parents_flat, $ref_name );
1089
+ return $parents_flat;
1090
+ }
1091
+
1092
+ return $parents;
1093
+ }
1094
+
1095
+ /**
1096
+ * Searches a given array and finds the parent of the provided object.
1097
+ *
1098
+ * @since 1.3.9
1099
+ * @param array $child
1100
+ * @param array $parents
1101
+ * @param array $children
1102
+ * @param string $ref_parent
1103
+ */
1104
+ function _wpforms_get_hierarchical_object_search( $child, &$parents, &$children, $ref_parent ) {
1105
+
1106
+ foreach ( $parents as $id => $parent ) {
1107
+
1108
+ if ( $parent->ID === $child->{$ref_parent} ) {
1109
+
1110
+ if ( empty( $parent->children ) ) {
1111
+ $parents[ $id ]->children = array( $child->ID => $child );
1112
+ } else {
1113
+ $parents[ $id ]->children[ $child->ID ] = $child;
1114
+ }
1115
+
1116
+ unset( $children[ $child->ID ] );
1117
+
1118
+ } else if ( ! empty( $parent->children ) && is_array( $parent->children ) ) {
1119
+
1120
+ _wpforms_get_hierarchical_object_search( $child, $parent->children, $children, $ref_parent );
1121
+ }
1122
+ }
1123
+ }
1124
+
1125
+ /**
1126
+ * Flattens a heirarchical object.
1127
+ *
1128
+ * @since 1.3.9
1129
+ * @param array $array
1130
+ * @param array $output
1131
+ * @param string $ref_name
1132
+ * @param int $level
1133
+ */
1134
+ function _wpforms_get_hierarchical_object_flatten( $array, &$output, $ref_name = 'name', $level = 0 ) {
1135
+
1136
+ foreach ( $array as $key => $item ) {
1137
+
1138
+ $indicator = apply_filters( 'wpforms_hierarchical_object_indicator', '&mdash;' );
1139
+ $item->{$ref_name} = str_repeat( $indicator, $level ) . ' ' . $item->{$ref_name};
1140
+ $item->depth = $level + 1;
1141
+ $output[ $item->ID ] = $item;
1142
+
1143
+ if ( ! empty( $item->children ) ) {
1144
+
1145
+ _wpforms_get_hierarchical_object_flatten( $item->children, $output, $ref_name, $level + 1);
1146
+ unset( $output[ $item->ID ]->children );
1147
+ }
1148
+ }
1149
+ }
1150
+
1151
+ /**
1152
+ * Insert an array into another array before/after a certain key.
1153
+ *
1154
+ * @since 1.3.9
1155
+ * @link https://gist.github.com/scribu/588429
1156
+ * @param array $array The initial array
1157
+ * @param array $pairs The array to insert
1158
+ * @param string $key The certain key
1159
+ * @param string $position Wether to insert the array before or after the key
1160
+ * @return array
1161
+ */
1162
+ function wpforms_array_insert( $array, $pairs, $key, $position = 'after' ) {
1163
+
1164
+ $key_pos = array_search( $key, array_keys( $array ) );
1165
+ if ( 'after' == $position ) {
1166
+ $key_pos++;
1167
+ }
1168
+
1169
+ if ( false !== $key_pos ) {
1170
+ $result = array_slice( $array, 0, $key_pos );
1171
+ $result = array_merge( $result, $pairs );
1172
+ $result = array_merge( $result, array_slice( $array, $key_pos ) );
1173
+ } else {
1174
+ $result = array_merge( $array, $pairs );
1175
+ }
1176
+
1177
+ return $result;
1178
+ }
1179
+
1180
+ /**
1181
+ * Recursively remove empty strings from an array.
1182
+ *
1183
+ * @since 1.3.9.1
1184
+ * @param array $data
1185
+ * @return array
1186
+ */
1187
+ function wpforms_array_remove_empty_strings( $data ) {
1188
+
1189
+ foreach ( $data as $key => $value ) {
1190
+ if ( is_array( $value ) ) {
1191
+ $data[ $key ] = wpforms_array_remove_empty_strings( $data[ $key ] );
1192
+ }
1193
+
1194
+ if ( '' === $data[ $key ] ) {
1195
+ unset( $data[ $key ] );
1196
+ }
1197
+ }
1198
+
1199
+ return $data;
1200
+ }
1201
+
1202
  /**
1203
  * Debug mode bool.
1204
  *
1311
  wpforms()->logs->add( $title, $message, $parent, $parent, $meta );
1312
  }
1313
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1314
  /**
1315
  * Array replace recursive, for PHP 5.2.
1316
  *
includes/providers/class-base.php CHANGED
@@ -959,7 +959,7 @@ abstract class WPForms_Provider {
959
  public function integrations_tab_disconnect() {
960
 
961
  // Run a security check
962
- check_ajax_referer( 'wpforms-settings', 'nonce' );
963
 
964
  // Check for permissions
965
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
@@ -994,7 +994,7 @@ abstract class WPForms_Provider {
994
  return;
995
 
996
  // Run a security check
997
- check_ajax_referer( 'wpforms-settings', 'nonce' );
998
 
999
  // Check for permissions
1000
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
@@ -1079,10 +1079,10 @@ abstract class WPForms_Provider {
1079
  <?php
1080
  if ( !empty( $accounts ) ) {
1081
  foreach ( $accounts as $key => $account ) {
1082
- echo '<li>';
1083
  echo '<span class="label">' . esc_html( $account['label'] ) . '</span>';
1084
- echo '<span class="date">' . __( 'Connected on: ', 'wpforms' ) . date( get_option( 'date_format', $account['date'] ) ) . '</span>';
1085
- echo '<a href="#" data-provider="' . $slug . '" data-key="' . $key . '">' . __( 'Disconnect ', 'wpforms' ) . '</a>';
1086
  echo '</li>';
1087
  }
1088
  }
@@ -1091,7 +1091,7 @@ abstract class WPForms_Provider {
1091
  </div>
1092
 
1093
  <p class="wpforms-settings-provider-accounts-toggle">
1094
- <a class="button button-secondary" href="#" data-provider="<?php echo $slug; ?>"><i class="fa fa-plus"></i> <?php _e( 'Add New Account', 'wpforms' ); ?></a>
1095
  </p>
1096
 
1097
  <div class="wpforms-settings-provider-accounts-connect">
@@ -1103,7 +1103,7 @@ abstract class WPForms_Provider {
1103
  <?php $this->integrations_tab_new_form(); ?>
1104
  </p>
1105
 
1106
- <p><button type="submit" class="button button-primary wpforms-settings-provider-connect" data-provider="<?php echo $slug; ?>" title="Connect to <?php echo $name; ?>"><?php _e( 'Connect to', 'wpforms' ); ?> <?php echo $name; ?></button> <i class="fa fa-cog fa-spin"></i></p>
1107
  </form>
1108
  </div>
1109
 
959
  public function integrations_tab_disconnect() {
960
 
961
  // Run a security check
962
+ check_ajax_referer( 'wpforms-admin', 'nonce' );
963
 
964
  // Check for permissions
965
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
994
  return;
995
 
996
  // Run a security check
997
+ check_ajax_referer( 'wpforms-admin', 'nonce' );
998
 
999
  // Check for permissions
1000
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
1079
  <?php
1080
  if ( !empty( $accounts ) ) {
1081
  foreach ( $accounts as $key => $account ) {
1082
+ echo '<li class="wpforms-clear">';
1083
  echo '<span class="label">' . esc_html( $account['label'] ) . '</span>';
1084
+ echo '<span class="date">' . __( 'Connected on: ', 'wpforms' ) . date( get_option( 'date_format' ), $account['date'] ) . '</span>';
1085
+ echo '<span class="remove"><a href="#" data-provider="' . $slug . '" data-key="' . $key . '">' . __( 'Disconnect ', 'wpforms' ) . '</a><span>';
1086
  echo '</li>';
1087
  }
1088
  }
1091
  </div>
1092
 
1093
  <p class="wpforms-settings-provider-accounts-toggle">
1094
+ <a class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey" href="#" data-provider="<?php echo $slug; ?>"><i class="fa fa-plus"></i> <?php _e( 'Add New Account', 'wpforms' ); ?></a>
1095
  </p>
1096
 
1097
  <div class="wpforms-settings-provider-accounts-connect">
1103
  <?php $this->integrations_tab_new_form(); ?>
1104
  </p>
1105
 
1106
+ <button type="submit" class="wpforms-btn wpforms-btn-md wpforms-btn-orange wpforms-settings-provider-connect" data-provider="<?php echo $slug; ?>" title="Connect to <?php echo $name; ?>"><?php _e( 'Connect to', 'wpforms' ); ?> <?php echo $name; ?></button>
1107
  </form>
1108
  </div>
1109
 
languages/wpforms.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the WPForms package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WPForms 1.3.8\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms\n"
7
- "POT-Creation-Date: 2017-06-13 17:28:50+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -12,8 +12,109 @@ msgstr ""
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: includes/admin/ajax-actions.php:24 includes/fields/class-base.php:731
16
- msgid "You do no have permission."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  msgstr ""
18
 
19
  #: includes/admin/ajax-actions.php:28
@@ -40,11 +141,11 @@ msgstr ""
40
  msgid "Error updating form template"
41
  msgstr ""
42
 
43
- #: includes/admin/ajax-actions.php:243 includes/fields/class-base.php:403
44
  msgid "post type"
45
  msgstr ""
46
 
47
- #: includes/admin/ajax-actions.php:262 includes/fields/class-base.php:410
48
  msgid "taxonomy"
49
  msgstr ""
50
 
@@ -58,7 +159,7 @@ msgid "Add New Choices"
58
  msgstr ""
59
 
60
  #: includes/admin/builder/class-builder.php:276
61
- #: includes/fields/class-base.php:362
62
  msgid "Bulk Add"
63
  msgstr ""
64
 
@@ -109,21 +210,6 @@ msgid ""
109
  "field difficult for your vistors to use and/or cause the form to be slow."
110
  msgstr ""
111
 
112
- #: includes/admin/builder/class-builder.php:286
113
- #: includes/admin/class-editor.php:96
114
- #: pro/includes/admin/entries/class-entries.php:994
115
- msgid "Cancel"
116
- msgstr ""
117
-
118
- #: includes/admin/builder/class-builder.php:287
119
- msgid "OK"
120
- msgstr ""
121
-
122
- #: includes/admin/builder/class-builder.php:288
123
- #: includes/admin/class-editor.php:70
124
- msgid "Close"
125
- msgstr ""
126
-
127
  #: includes/admin/builder/class-builder.php:289
128
  msgid ""
129
  "Due to form changes, conditional logic rules have been removed or updated:"
@@ -136,7 +222,7 @@ msgid ""
136
  msgstr ""
137
 
138
  #: includes/admin/builder/class-builder.php:291
139
- #: pro/includes/admin/entries/class-entries-table.php:176
140
  msgid "Field"
141
  msgstr ""
142
 
@@ -156,10 +242,6 @@ msgstr ""
156
  msgid "No fields available"
157
  msgstr ""
158
 
159
- #: includes/admin/builder/class-builder.php:296
160
- msgid "Heads up!"
161
- msgstr ""
162
-
163
  #: includes/admin/builder/class-builder.php:298
164
  msgid "No email fields"
165
  msgstr ""
@@ -187,8 +269,6 @@ msgid ""
187
  msgstr ""
188
 
189
  #: includes/admin/builder/class-builder.php:304
190
- #: lite/includes/admin/class-settings.php:149
191
- #: pro/includes/admin/class-settings.php:160
192
  msgid "Saving ..."
193
  msgstr ""
194
 
@@ -201,7 +281,7 @@ msgid "Save and Exit"
201
  msgstr ""
202
 
203
  #: includes/admin/builder/class-builder.php:307
204
- #: includes/fields/class-base.php:539
205
  msgid "Show Layouts"
206
  msgstr ""
207
 
@@ -272,14 +352,14 @@ msgid "This item must contain at least one choice."
272
  msgstr ""
273
 
274
  #: includes/admin/builder/class-builder.php:329
275
- #: includes/fields/class-base.php:253 includes/fields/class-base.php:587
276
- #: lite/wpforms-lite.php:79 pro/wpforms-pro.php:269
277
  msgid "Off"
278
  msgstr ""
279
 
280
  #: includes/admin/builder/class-builder.php:330
281
- #: includes/fields/class-base.php:253 lite/wpforms-lite.php:78
282
- #: pro/wpforms-pro.php:268
283
  msgid "On"
284
  msgstr ""
285
 
@@ -359,7 +439,7 @@ msgid "Delete rule"
359
  msgstr ""
360
 
361
  #: includes/admin/builder/class-builder.php:348
362
- #: includes/admin/builder/functions.php:249 includes/fields/class-base.php:487
363
  msgid "Show Smart Tags"
364
  msgstr ""
365
 
@@ -406,7 +486,7 @@ msgid "Now editing"
406
  msgstr ""
407
 
408
  #: includes/admin/builder/class-builder.php:460
409
- #: pro/includes/admin/entries/class-entries.php:512
410
  msgid "Preview Form"
411
  msgstr ""
412
 
@@ -428,7 +508,6 @@ msgid "Save Form"
428
  msgstr ""
429
 
430
  #: includes/admin/builder/class-builder.php:472
431
- #: pro/includes/admin/class-settings.php:604
432
  msgid "Save"
433
  msgstr ""
434
 
@@ -480,17 +559,17 @@ msgid "You don't have any fields yet. Add some!"
480
  msgstr ""
481
 
482
  #: includes/admin/builder/panels/class-fields.php:252
483
- #: includes/fields/class-base.php:770
484
  msgid "Duplicate Field"
485
  msgstr ""
486
 
487
  #: includes/admin/builder/panels/class-fields.php:254
488
- #: includes/fields/class-base.php:771
489
  msgid "Delete Field"
490
  msgstr ""
491
 
492
  #: includes/admin/builder/panels/class-fields.php:256
493
- #: includes/fields/class-base.php:772
494
  msgid "Click to edit. Drag to reorder."
495
  msgstr ""
496
 
@@ -553,20 +632,18 @@ msgid ""
553
  msgstr ""
554
 
555
  #: includes/admin/builder/panels/class-settings.php:21
556
- #: includes/admin/class-menu.php:81 lite/includes/admin/class-settings.php:524
557
- #: pro/includes/admin/class-settings.php:963
558
  msgid "Settings"
559
  msgstr ""
560
 
561
  #: includes/admin/builder/panels/class-settings.php:57
562
  #: includes/admin/builder/panels/class-settings.php:87
563
- #: lite/includes/admin/class-settings.php:170
564
- #: pro/includes/admin/class-settings.php:181
565
  msgid "General"
566
  msgstr ""
567
 
568
- #: includes/admin/builder/panels/class-settings.php:58 lite/wpforms-lite.php:64
569
- #: lite/wpforms-lite.php:74 pro/wpforms-pro.php:255 pro/wpforms-pro.php:264
570
  msgid "Notifications"
571
  msgstr ""
572
 
@@ -644,8 +721,8 @@ msgid "Confirmation Type"
644
  msgstr ""
645
 
646
  #: includes/admin/builder/panels/class-settings.php:188
647
- #: includes/templates/class-suggestion.php:74 lite/wpforms-lite.php:192
648
- #: pro/wpforms-pro.php:388
649
  msgid "Message"
650
  msgstr ""
651
 
@@ -736,119 +813,665 @@ msgstr ""
736
 
737
  #: includes/admin/class-editor.php:88
738
  #: includes/admin/overview/class-overview-table.php:250
739
- #: pro/includes/admin/entries/class-entries.php:390
740
  msgid ""
741
  "Whoops, you haven't created a form yet. Want to <a href=\"%s\">give it a go</"
742
  "a>?"
743
  msgstr ""
744
 
745
- #. #-#-#-#-# wpforms.pot (WPForms 1.3.8) #-#-#-#-#
746
  #. Plugin Name of the plugin/theme
747
- #. #-#-#-#-# wpforms.pot (WPForms 1.3.8) #-#-#-#-#
748
  #. Author of the plugin/theme
749
- #: includes/admin/class-menu.php:36 includes/admin/class-menu.php:37
750
- #: includes/admin/class-menu.php:48 includes/admin/class-menu.php:90
751
  #: includes/integrations.php:34
752
  msgid "WPForms"
753
  msgstr ""
754
 
755
- #: includes/admin/class-menu.php:49
756
  msgid "All Forms"
757
  msgstr ""
758
 
759
- #: includes/admin/class-menu.php:58
760
  msgid "WPForms Builder"
761
  msgstr ""
762
 
763
- #: includes/admin/class-menu.php:59
764
- #: includes/admin/overview/class-overview.php:148
765
  #: includes/providers/class-base.php:903
766
  msgid "Add New"
767
  msgstr ""
768
 
769
- #: includes/admin/class-menu.php:68
770
  msgid "Form Entries"
771
  msgstr ""
772
 
773
- #: includes/admin/class-menu.php:69
774
  #: includes/admin/overview/class-overview-table.php:152
775
- #: pro/includes/admin/entries/class-entries.php:411 pro/wpforms-pro.php:208
 
776
  msgid "Entries"
777
  msgstr ""
778
 
779
- #: includes/admin/class-menu.php:80
780
  msgid "WPForms Settings"
781
  msgstr ""
782
 
783
- #: includes/admin/class-menu.php:91
 
 
 
 
 
 
 
 
784
  msgid "Info"
785
  msgstr ""
786
 
787
- #: includes/admin/class-menu.php:100
788
  msgid "WPForms Addons"
789
  msgstr ""
790
 
791
- #: includes/admin/class-menu.php:101
792
  msgid "Addons"
793
  msgstr ""
794
 
795
- #: includes/admin/class-welcome.php:40 includes/admin/class-welcome.php:41
796
- msgid "Getting started with WPForms"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
797
  msgstr ""
798
 
799
- #: includes/admin/class-welcome.php:83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
800
  msgid "Welcome to WPForms"
801
  msgstr ""
802
 
803
- #: includes/admin/class-welcome.php:85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
804
  msgid ""
805
- "Thank you for choosing WPForms - the most beginner friendly WordPress "
806
- "contact form plugin. Here's how to get started."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
807
  msgstr ""
808
 
809
- #: includes/admin/class-welcome.php:93
810
- msgid "Getting Started"
811
  msgstr ""
812
 
813
- #: includes/admin/class-welcome.php:96
814
- msgid "What's New"
815
  msgstr ""
816
 
817
- #: includes/admin/class-welcome.php:115
818
- msgid ""
819
- "Use the tips below to get started using WPForms. You will be up and running "
820
- "in no time."
821
  msgstr ""
822
 
823
- #: includes/admin/class-welcome.php:120
824
- msgid "Creating Your First Form"
825
  msgstr ""
826
 
827
- #: includes/admin/class-welcome.php:121
828
- msgid ""
829
- "WPForms makes it easy to create forms in WordPress. You can follow the video "
830
- "tutorial on the right or read our how to <a href=\"%s\" target=\"_blank\" "
831
- "rel=\"noopener\">create your first form guide</a>."
832
  msgstr ""
833
 
834
- #: includes/admin/class-welcome.php:122
835
- msgid ""
836
- "But in reality, the process is so intuitive that you can just start by going "
837
- "to <a href=\"%s\">WPForms - > Add New</a>."
838
  msgstr ""
839
 
840
- #: includes/admin/class-welcome.php:133
841
- msgid "See all WPForms Features"
 
 
 
842
  msgstr ""
843
 
844
- #: includes/admin/class-welcome.php:134
845
  msgid ""
846
- "WPForms is both easy to use and extremely powerful. We have tons of helpful "
847
- "features that allows us to give you everything you need from a form builder."
 
 
 
848
  msgstr ""
849
 
850
- #: includes/admin/class-welcome.php:135
851
- msgid "See all Features"
852
  msgstr ""
853
 
854
  #: includes/admin/overview/class-overview-table.php:53
@@ -901,9 +1524,9 @@ msgstr ""
901
 
902
  #: includes/admin/overview/class-overview-table.php:173
903
  #: includes/admin/overview/class-overview-table.php:191
904
- #: pro/includes/admin/entries/class-entries-table.php:341
905
- #: pro/includes/admin/entries/class-entries-table.php:362
906
- #: pro/includes/admin/entries/class-entries.php:1030
907
  msgid "Delete"
908
  msgstr ""
909
 
@@ -928,16 +1551,44 @@ msgstr[1] ""
928
  msgid "Number of forms per page:"
929
  msgstr ""
930
 
931
- #: includes/admin/overview/class-overview.php:127
932
- msgid "Are you sure you want to delete this form?"
933
  msgstr ""
934
 
935
- #: includes/admin/overview/class-overview.php:128
936
- msgid "Are you sure you want to duplicate this form?"
937
  msgstr ""
938
 
939
- #: includes/admin/overview/class-overview.php:147
940
- msgid "Forms Overview"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
941
  msgstr ""
942
 
943
  #: includes/class-conditional-logic-core.php:158
@@ -969,57 +1620,30 @@ msgstr ""
969
  msgid "Add rule group"
970
  msgstr ""
971
 
972
- #: includes/class-frontend.php:969 lite/includes/admin/class-settings.php:373
973
- #: pro/includes/admin/class-settings.php:448
974
- msgid "This field is required."
975
- msgstr ""
976
-
977
- #: includes/class-frontend.php:970 lite/includes/admin/class-settings.php:381
978
- #: pro/includes/admin/class-settings.php:456
979
- msgid "Please enter a valid URL."
980
- msgstr ""
981
-
982
- #: includes/class-frontend.php:971 lite/includes/admin/class-settings.php:389
983
- #: pro/includes/admin/class-settings.php:464
984
- msgid "Please enter a valid email address."
985
- msgstr ""
986
-
987
- #: includes/class-frontend.php:972 includes/fields/class-number.php:157
988
- #: lite/includes/admin/class-settings.php:397
989
- #: pro/includes/admin/class-settings.php:472
990
- msgid "Please enter a valid number."
991
- msgstr ""
992
-
993
- #: includes/class-frontend.php:973 lite/includes/admin/class-settings.php:405
994
- #: pro/includes/admin/class-settings.php:480
995
- #: pro/includes/fields/class-password.php:394
996
- msgid "Field values do not match."
997
- msgstr ""
998
-
999
- #: includes/class-frontend.php:974 pro/includes/admin/class-settings.php:488
1000
  #: pro/includes/fields/class-file-upload.php:367
1001
  #: pro/includes/fields/class-file-upload.php:383
1002
- #: pro/includes/fields/class-file-upload.php:400
1003
  msgid "File type is not allowed."
1004
  msgstr ""
1005
 
1006
- #: includes/class-frontend.php:975 pro/includes/admin/class-settings.php:496
1007
  msgid "File exceeds max size allowed."
1008
  msgstr ""
1009
 
1010
- #: includes/class-frontend.php:976 pro/includes/admin/class-settings.php:504
1011
  msgid "Please enter time in 12-hour AM/PM format (eg 8:45 AM)."
1012
  msgstr ""
1013
 
1014
- #: includes/class-frontend.php:977 pro/includes/admin/class-settings.php:512
1015
  msgid "Please enter time in 24-hour format (eg 22:45)."
1016
  msgstr ""
1017
 
1018
- #: includes/class-frontend.php:978 pro/includes/admin/class-settings.php:520
1019
  msgid "Payment is required."
1020
  msgstr ""
1021
 
1022
- #: includes/class-frontend.php:979 pro/includes/admin/class-settings.php:528
1023
  msgid "Please enter a valid credit card number."
1024
  msgstr ""
1025
 
@@ -1031,50 +1655,92 @@ msgstr ""
1031
  msgid "Logs"
1032
  msgstr ""
1033
 
1034
- #: includes/class-preview.php:95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1035
  msgid "Entry #%d"
1036
  msgstr ""
1037
 
1038
- #: includes/class-preview.php:107
1039
- #: pro/includes/admin/entries/class-entries.php:916
 
 
 
 
 
 
 
 
 
1040
  msgid "This entry does not have any fields"
1041
  msgstr ""
1042
 
1043
- #: includes/class-preview.php:124
1044
- #: pro/includes/admin/entries/class-entries.php:932
1045
  msgid "Field ID #%d"
1046
  msgstr ""
1047
 
1048
- #: includes/class-preview.php:129
1049
- #: pro/includes/admin/entries/class-entries.php:937
1050
  msgid "Empty"
1051
  msgstr ""
1052
 
1053
- #: includes/class-preview.php:173
 
 
 
 
 
 
 
 
 
1054
  msgid ""
1055
  "This is the WPForms preview page. All your form previews will be handled on "
1056
  "this page."
1057
  msgstr ""
1058
 
1059
- #: includes/class-preview.php:174
1060
  msgid ""
1061
  "The page is set to private, so it is not publicly accessible. Please do not "
1062
  "delete this page :) ."
1063
  msgstr ""
1064
 
1065
- #: includes/class-preview.php:179
1066
  msgid "WPForms Preview"
1067
  msgstr ""
1068
 
1069
- #: includes/class-preview.php:261
1070
  msgid "This is a preview of your form. This page is not publicly accessible."
1071
  msgstr ""
1072
 
1073
- #: includes/class-preview.php:263
1074
  msgid "Close this window"
1075
  msgstr ""
1076
 
1077
- #: includes/class-preview.php:265
1078
  msgid " Preview"
1079
  msgstr ""
1080
 
@@ -1098,8 +1764,8 @@ msgstr ""
1098
  msgid "WPForms honeypot field triggered."
1099
  msgstr ""
1100
 
1101
- #: includes/class-process.php:354 lite/wpforms-lite.php:56
1102
- #: pro/wpforms-pro.php:248
1103
  msgid "New %s Entry"
1104
  msgstr ""
1105
 
@@ -1129,7 +1795,7 @@ msgstr ""
1129
 
1130
  #: includes/class-smart-tags.php:40
1131
  #: pro/includes/admin/entries/class-entries-export.php:178
1132
- #: pro/includes/admin/entries/class-entries-table.php:136
1133
  #: pro/includes/fields/class-date-time.php:69
1134
  #: pro/includes/fields/class-date-time.php:117
1135
  #: pro/includes/fields/class-date-time.php:244
@@ -1190,7 +1856,7 @@ msgstr ""
1190
  msgid "Lost Password URL"
1191
  msgstr ""
1192
 
1193
- #: includes/class-widget.php:127 pro/includes/admin/class-settings.php:684
1194
  msgid "No forms"
1195
  msgstr ""
1196
 
@@ -1222,67 +1888,61 @@ msgstr ""
1222
  msgid "Sent from <a href=\"%s\" style=\"color:#bbbbbb;\">%s</a>"
1223
  msgstr ""
1224
 
1225
- #: includes/fields/class-base.php:313
1226
  msgid ""
1227
  "Enter text for the form field label. Field labels are recommended and can be "
1228
  "hidden in the Advanced Settings."
1229
  msgstr ""
1230
 
1231
- #: includes/fields/class-base.php:314
1232
  msgid "Label"
1233
  msgstr ""
1234
 
1235
- #: includes/fields/class-base.php:323
1236
  msgid "Enter text for the form field description."
1237
  msgstr ""
1238
 
1239
- #: includes/fields/class-base.php:324
1240
  msgid "Description"
1241
  msgstr ""
1242
 
1243
- #: includes/fields/class-base.php:334
1244
  msgid ""
1245
  "Check this option to mark the field required. A form will not submit unless "
1246
  "all required fields are provided."
1247
  msgstr ""
1248
 
1249
- #: includes/fields/class-base.php:335
1250
- #: lite/includes/admin/class-settings.php:370
1251
- #: pro/includes/admin/class-settings.php:445
1252
- msgid "Required"
1253
- msgstr ""
1254
-
1255
- #: includes/fields/class-base.php:351
1256
  msgid "Enter code for the form field."
1257
  msgstr ""
1258
 
1259
- #: includes/fields/class-base.php:352
1260
  msgid "Code"
1261
  msgstr ""
1262
 
1263
- #: includes/fields/class-base.php:361 includes/fields/class-base.php:435
1264
  msgid "Add choices for the form field."
1265
  msgstr ""
1266
 
1267
- #: includes/fields/class-base.php:374
1268
  msgid "Choices"
1269
  msgstr ""
1270
 
1271
- #: includes/fields/class-base.php:417
1272
  msgid ""
1273
  "Choices are dynamically populated from the <span class=\"dynamic-name\">%s</"
1274
  "span> <span class=\"dynamic-type\">%s</span>"
1275
  msgstr ""
1276
 
1277
- #: includes/fields/class-base.php:444
1278
  msgid "Items"
1279
  msgstr ""
1280
 
1281
- #: includes/fields/class-base.php:486
1282
  msgid "Enter text for the default form field value."
1283
  msgstr ""
1284
 
1285
- #: includes/fields/class-base.php:488 includes/fields/class-name.php:283
1286
  #: includes/fields/class-name.php:298 includes/fields/class-name.php:313
1287
  #: includes/fields/class-name.php:328 pro/includes/fields/class-address.php:117
1288
  #: pro/includes/fields/class-address.php:133
@@ -1293,117 +1953,121 @@ msgstr ""
1293
  msgid "Default Value"
1294
  msgstr ""
1295
 
1296
- #: includes/fields/class-base.php:498
1297
  msgid "Select the default form field size."
1298
  msgstr ""
1299
 
1300
- #: includes/fields/class-base.php:500
1301
  msgid "Small"
1302
  msgstr ""
1303
 
1304
- #: includes/fields/class-base.php:501
1305
  msgid "Medium"
1306
  msgstr ""
1307
 
1308
- #: includes/fields/class-base.php:502
1309
  msgid "Large"
1310
  msgstr ""
1311
 
1312
- #: includes/fields/class-base.php:504
1313
  msgid "Field Size"
1314
  msgstr ""
1315
 
1316
- #: includes/fields/class-base.php:517
1317
  msgid "Advanced Options"
1318
  msgstr ""
1319
 
1320
- #: includes/fields/class-base.php:528
1321
  msgid "Enter text for the form field placeholder."
1322
  msgstr ""
1323
 
1324
- #: includes/fields/class-base.php:529
1325
  msgid "Placeholder Text"
1326
  msgstr ""
1327
 
1328
- #: includes/fields/class-base.php:538
1329
  msgid ""
1330
  "Enter CSS class names for the form field container. Class names should be "
1331
  "separated with spaces."
1332
  msgstr ""
1333
 
1334
- #: includes/fields/class-base.php:541
1335
  msgid "CSS Classes"
1336
  msgstr ""
1337
 
1338
- #: includes/fields/class-base.php:550
1339
  msgid "Check this option to hide the form field label."
1340
  msgstr ""
1341
 
1342
- #: includes/fields/class-base.php:552
1343
  msgid "Hide Label"
1344
  msgstr ""
1345
 
1346
- #: includes/fields/class-base.php:560
1347
  msgid "Check this option to hide the form field sub-label."
1348
  msgstr ""
1349
 
1350
- #: includes/fields/class-base.php:562
1351
  msgid "Hide Sub-Labels"
1352
  msgstr ""
1353
 
1354
- #: includes/fields/class-base.php:570
1355
  msgid "Select the layout for displaying field choices."
1356
  msgstr ""
1357
 
1358
- #: includes/fields/class-base.php:572
1359
  msgid "One Column"
1360
  msgstr ""
1361
 
1362
- #: includes/fields/class-base.php:573
1363
  msgid "Two Columns"
1364
  msgstr ""
1365
 
1366
- #: includes/fields/class-base.php:574
1367
  msgid "Three Columns"
1368
  msgstr ""
1369
 
1370
- #: includes/fields/class-base.php:576
1371
  msgid "Choice Layout"
1372
  msgstr ""
1373
 
1374
- #: includes/fields/class-base.php:585
1375
  msgid "Select auto-populate method to use."
1376
  msgstr ""
1377
 
1378
- #: includes/fields/class-base.php:588 includes/fields/class-base.php:607
1379
  msgid "Post Type"
1380
  msgstr ""
1381
 
1382
- #: includes/fields/class-base.php:589 includes/fields/class-base.php:613
1383
  msgid "Taxonomy"
1384
  msgstr ""
1385
 
1386
- #: includes/fields/class-base.php:591
1387
  msgid "Dynamic Choices"
1388
  msgstr ""
1389
 
1390
- #: includes/fields/class-base.php:618
1391
  msgid "Select %s to use for auto-populating field choices."
1392
  msgstr ""
1393
 
1394
- #: includes/fields/class-base.php:619
1395
  msgid "Dynamic %s Source"
1396
  msgstr ""
1397
 
1398
- #: includes/fields/class-base.php:736
 
 
 
 
1399
  msgid "No form ID found"
1400
  msgstr ""
1401
 
1402
- #: includes/fields/class-base.php:741
1403
  msgid "No field type found"
1404
  msgstr ""
1405
 
1406
- #: includes/fields/class-base.php:869 includes/fields/class-name.php:485
1407
  #: includes/fields/class-number.php:152
1408
  #: pro/includes/fields/class-address.php:624
1409
  #: pro/includes/fields/class-date-time.php:532
@@ -1450,30 +2114,15 @@ msgid ""
1450
  "viewing the form."
1451
  msgstr ""
1452
 
1453
- #: includes/fields/class-email.php:21 includes/fields/class-email.php:68
1454
- #: includes/fields/class-email.php:306
1455
- #: includes/templates/class-subscribe.php:42
1456
- #: lite/includes/admin/class-settings.php:263
1457
- #: lite/includes/admin/class-settings.php:386
1458
- #: pro/includes/admin/class-settings.php:338
1459
- #: pro/includes/admin/class-settings.php:461
1460
- #: pro/includes/templates/class-donation.php:42
1461
- #: pro/includes/templates/class-order.php:42
1462
- #: pro/includes/templates/class-request-quote.php:46
1463
- msgid "Email"
1464
- msgstr ""
1465
-
1466
  #: includes/fields/class-email.php:91 includes/fields/class-email.php:311
1467
  msgid "Confirm Email"
1468
  msgstr ""
1469
 
1470
  #: includes/fields/class-email.php:207
1471
- #: pro/includes/fields/class-password.php:188
1472
  msgid "Enable Email Confirmation"
1473
  msgstr ""
1474
 
1475
  #: includes/fields/class-email.php:208
1476
- #: pro/includes/fields/class-password.php:189
1477
  msgid "Check this option ask the user to provide their email address twice."
1478
  msgstr ""
1479
 
@@ -2018,384 +2667,112 @@ msgid "Comment or Message"
2018
  msgstr ""
2019
 
2020
  #: includes/templates/class-subscribe.php:20
2021
- msgid "Newsletter Signup Form"
2022
- msgstr ""
2023
-
2024
- #: includes/templates/class-subscribe.php:22
2025
- msgid ""
2026
- "Add subscribers and grow your email list with this newsletter signup form. "
2027
- "You can add and remove fields as needed."
2028
- msgstr ""
2029
-
2030
- #: includes/templates/class-subscribe.php:26
2031
- #: pro/includes/templates/class-donation.php:26
2032
- #: pro/includes/templates/class-order.php:26
2033
- msgid "Don&#39;t Forget"
2034
- msgstr ""
2035
-
2036
- #: includes/templates/class-subscribe.php:27
2037
- msgid "Click the marketing tab to configure your newsletter service provider"
2038
- msgstr ""
2039
-
2040
- #: includes/templates/class-suggestion.php:20
2041
- msgid "Suggestion Form"
2042
- msgstr ""
2043
-
2044
- #: includes/templates/class-suggestion.php:22
2045
- msgid ""
2046
- "Ask your users for suggestions with this simple form template. You can add "
2047
- "and remove fields as needed."
2048
- msgstr ""
2049
-
2050
- #: includes/templates/class-suggestion.php:40
2051
- msgid "Please enter your email, so we can follow up with you."
2052
- msgstr ""
2053
-
2054
- #: includes/templates/class-suggestion.php:47
2055
- msgid "Which department do you have a suggestion for?"
2056
- msgstr ""
2057
-
2058
- #: includes/templates/class-suggestion.php:50
2059
- msgid "Sales"
2060
- msgstr ""
2061
-
2062
- #: includes/templates/class-suggestion.php:53
2063
- msgid "Customer Support"
2064
- msgstr ""
2065
-
2066
- #: includes/templates/class-suggestion.php:56
2067
- msgid "Product Development"
2068
- msgstr ""
2069
-
2070
- #: includes/templates/class-suggestion.php:67
2071
- msgid "Subject"
2072
- msgstr ""
2073
-
2074
- #: lite/includes/admin/class-review.php:83
2075
- msgid ""
2076
- "Hey, I noticed you created a contact form with WPForms - that’s awesome! "
2077
- "Could you please do me a BIG favor and give it a 5-star rating on WordPress "
2078
- "to help us spread the word and boost our motivation?"
2079
- msgstr ""
2080
-
2081
- #: lite/includes/admin/class-review.php:84
2082
- #: pro/includes/admin/class-review.php:78
2083
- msgid "~ Syed Balkhi<br>Co-Founder of WPForms"
2084
- msgstr ""
2085
-
2086
- #: lite/includes/admin/class-review.php:86
2087
- #: pro/includes/admin/class-review.php:80
2088
- msgid "Ok, you deserve it"
2089
- msgstr ""
2090
-
2091
- #: lite/includes/admin/class-review.php:87
2092
- #: pro/includes/admin/class-review.php:81
2093
- msgid "Nope, maybe later"
2094
- msgstr ""
2095
-
2096
- #: lite/includes/admin/class-review.php:88
2097
- #: pro/includes/admin/class-review.php:82
2098
- msgid "I already did"
2099
- msgstr ""
2100
-
2101
- #: lite/includes/admin/class-review.php:136
2102
- #: pro/includes/admin/class-review.php:130
2103
- msgid ""
2104
- "Please rate <strong>WPForms</strong> <a href=\"%s\" target=\"_blank\" rel="
2105
- "\"noopener\">&#9733;&#9733;&#9733;&#9733;&#9733;</a> on <a href=\"%s\" "
2106
- "target=\"_blank\">WordPress.org</a> to help us spread the word. Thank you "
2107
- "from the WPForms team!"
2108
- msgstr ""
2109
-
2110
- #: lite/includes/admin/class-settings.php:150
2111
- #: pro/includes/admin/class-settings.php:161
2112
- msgid "Are you sure you want to disconnect this account?"
2113
- msgstr ""
2114
-
2115
- #: lite/includes/admin/class-settings.php:151
2116
- #: pro/includes/admin/class-settings.php:162
2117
- msgid "Upload or Choose Your Image"
2118
- msgstr ""
2119
-
2120
- #: lite/includes/admin/class-settings.php:152
2121
- #: pro/includes/admin/class-settings.php:163
2122
- msgid "Use Image"
2123
- msgstr ""
2124
-
2125
- #: lite/includes/admin/class-settings.php:171
2126
- #: pro/includes/admin/class-settings.php:183
2127
- msgid "Integrations"
2128
- msgstr ""
2129
-
2130
- #: lite/includes/admin/class-settings.php:172
2131
- #: pro/includes/admin/class-settings.php:185
2132
- msgid "System Info"
2133
- msgstr ""
2134
-
2135
- #: lite/includes/admin/class-settings.php:195
2136
- #: pro/includes/admin/class-settings.php:208
2137
- #: pro/includes/admin/class-settings.php:556
2138
- msgid "Settings check failed."
2139
- msgstr ""
2140
-
2141
- #: lite/includes/admin/class-settings.php:223
2142
- #: pro/includes/admin/class-settings.php:242
2143
- msgid "General settings updated."
2144
- msgstr ""
2145
-
2146
- #: lite/includes/admin/class-settings.php:240
2147
- #: pro/includes/admin/class-settings.php:315
2148
- msgid "Include Form Styling"
2149
- msgstr ""
2150
-
2151
- #: lite/includes/admin/class-settings.php:244
2152
- #: pro/includes/admin/class-settings.php:319
2153
- msgid "Base and form theme styling"
2154
- msgstr ""
2155
-
2156
- #: lite/includes/admin/class-settings.php:245
2157
- #: pro/includes/admin/class-settings.php:320
2158
- msgid "Base styling only"
2159
- msgstr ""
2160
-
2161
- #: lite/includes/admin/class-settings.php:246
2162
- #: pro/includes/admin/class-settings.php:321
2163
- #: pro/includes/fields/class-page-break.php:274
2164
- msgid "None"
2165
- msgstr ""
2166
-
2167
- #: lite/includes/admin/class-settings.php:248
2168
- #: pro/includes/admin/class-settings.php:323
2169
- msgid "Determines which CSS files to load for the site."
2170
- msgstr ""
2171
-
2172
- #: lite/includes/admin/class-settings.php:253
2173
- #: pro/includes/admin/class-settings.php:328
2174
- msgid "Load Assets Globally"
2175
- msgstr ""
2176
-
2177
- #: lite/includes/admin/class-settings.php:257
2178
- #: pro/includes/admin/class-settings.php:332
2179
- msgid ""
2180
- "Check this if you would like to load WPForms assets site-wide. Only check if "
2181
- "your site is having compatibility issues or instructed to by support."
2182
- msgstr ""
2183
-
2184
- #: lite/includes/admin/class-settings.php:268
2185
- #: pro/includes/admin/class-settings.php:343
2186
- msgid "Email Template"
2187
- msgstr ""
2188
-
2189
- #: lite/includes/admin/class-settings.php:272
2190
- #: pro/includes/admin/class-settings.php:347
2191
- msgid "Default HTML template"
2192
- msgstr ""
2193
-
2194
- #: lite/includes/admin/class-settings.php:273
2195
- #: pro/includes/admin/class-settings.php:348
2196
- msgid "Plain Text"
2197
- msgstr ""
2198
-
2199
- #: lite/includes/admin/class-settings.php:275
2200
- #: pro/includes/admin/class-settings.php:350
2201
- msgid "Determines how email notifications will be formatted."
2202
- msgstr ""
2203
-
2204
- #: lite/includes/admin/class-settings.php:280
2205
- #: pro/includes/admin/class-settings.php:355
2206
- msgid "Email Header Image "
2207
- msgstr ""
2208
-
2209
- #: lite/includes/admin/class-settings.php:292
2210
- #: pro/includes/admin/class-settings.php:367
2211
- msgid "Upload Image"
2212
- msgstr ""
2213
-
2214
- #: lite/includes/admin/class-settings.php:294
2215
- #: pro/includes/admin/class-settings.php:369
2216
- msgid ""
2217
- "Upload or choose a logo to be displayed at the top of email notifications."
2218
- msgstr ""
2219
-
2220
- #: lite/includes/admin/class-settings.php:295
2221
- #: pro/includes/admin/class-settings.php:370
2222
- msgid "Recommended size is 300x100 or smaller for best support on all devices."
2223
- msgstr ""
2224
-
2225
- #: lite/includes/admin/class-settings.php:301
2226
- #: pro/includes/admin/class-settings.php:376
2227
- msgid "Email Background Color"
2228
- msgstr ""
2229
-
2230
- #: lite/includes/admin/class-settings.php:305
2231
- #: pro/includes/admin/class-settings.php:380
2232
- msgid "Customize the background color of the HTML email template."
2233
- msgstr ""
2234
-
2235
- #: lite/includes/admin/class-settings.php:310
2236
- #: pro/includes/admin/class-settings.php:385
2237
- msgid "Email Carbon Copy"
2238
- msgstr ""
2239
-
2240
- #: lite/includes/admin/class-settings.php:314
2241
- #: pro/includes/admin/class-settings.php:389
2242
- msgid ""
2243
- "Check this if you would like to enable the ability to CC: email addresses in "
2244
- "the form notification settings."
2245
- msgstr ""
2246
-
2247
- #: lite/includes/admin/class-settings.php:320
2248
- #: pro/includes/admin/class-settings.php:395
2249
- msgid "reCAPTCHA"
2250
- msgstr ""
2251
-
2252
- #: lite/includes/admin/class-settings.php:321
2253
- #: pro/includes/admin/class-settings.php:396
2254
- msgid ""
2255
- "reCAPTCHA is a free anti-spam service from Google which helps to protect "
2256
- "your website from spam and abuse while letting real people pass through with "
2257
- "ease."
2258
- msgstr ""
2259
-
2260
- #: lite/includes/admin/class-settings.php:322
2261
- #: pro/includes/admin/class-settings.php:397
2262
- msgid ""
2263
- "Google's original <a href=\"https://www.google.com/recaptcha/intro/\" rel="
2264
- "\"noopener noreferrer\">v2 reCAPTCHA</a> prompts users to check a box to "
2265
- "prove they're human, whereas <a href=\"https://www.google.com/recaptcha/"
2266
- "intro/invisible.html\" rel=\"noopener noreferrer\">Invisible reCAPTCHA</a> "
2267
- "uses advanced technology to detect real users without requiring any input."
2268
- msgstr ""
2269
-
2270
- #: lite/includes/admin/class-settings.php:323
2271
- #: pro/includes/admin/class-settings.php:398
2272
- msgid ""
2273
- "Sites already using v2 reCAPTCHA will need to create new site keys before "
2274
- "switching to the Invisible reCAPTCHA."
2275
  msgstr ""
2276
 
2277
- #: lite/includes/admin/class-settings.php:324
2278
- #: pro/includes/admin/class-settings.php:399
2279
  msgid ""
2280
- "<a href=\"https://wpforms.com/docs/setup-captcha-wpforms/\" rel=\"noopener "
2281
- "noreferrer\">Read our walk through</a> to learn more and for step-by-step "
2282
- "directions."
2283
  msgstr ""
2284
 
2285
- #: lite/includes/admin/class-settings.php:329
2286
- #: pro/includes/admin/class-settings.php:404
2287
- msgid "reCAPTCHA Type"
 
2288
  msgstr ""
2289
 
2290
- #: lite/includes/admin/class-settings.php:348
2291
- #: pro/includes/admin/class-settings.php:423
2292
- msgid "reCAPTCHA Site key"
2293
  msgstr ""
2294
 
2295
- #: lite/includes/admin/class-settings.php:356
2296
- #: pro/includes/admin/class-settings.php:431
2297
- msgid "reCAPTCHA Secret key"
2298
  msgstr ""
2299
 
2300
- #: lite/includes/admin/class-settings.php:365
2301
- #: pro/includes/admin/class-settings.php:440
2302
- msgid "Validation Messages"
 
2303
  msgstr ""
2304
 
2305
- #: lite/includes/admin/class-settings.php:378
2306
- #: pro/includes/admin/class-settings.php:453
2307
- msgid "Website URL"
2308
  msgstr ""
2309
 
2310
- #: lite/includes/admin/class-settings.php:394
2311
- #: pro/includes/admin/class-settings.php:469
2312
- msgid "Number"
2313
  msgstr ""
2314
 
2315
- #: lite/includes/admin/class-settings.php:402
2316
- #: pro/includes/admin/class-settings.php:477
2317
- msgid "Confirm Value"
2318
  msgstr ""
2319
 
2320
- #: lite/includes/admin/class-settings.php:411
2321
- #: pro/includes/admin/class-settings.php:534
2322
- msgid "Save General Settings"
2323
  msgstr ""
2324
 
2325
- #: lite/includes/admin/class-settings.php:431
2326
- #: pro/includes/admin/class-settings.php:624
2327
- msgid ""
2328
- "You do not have any marketing add-ons activated. You can head over to the <a "
2329
- "href=\"%s\">Add-Ons page</a> to install and activate the add-on for your "
2330
- "provider."
2331
  msgstr ""
2332
 
2333
- #: lite/includes/admin/class-settings.php:556
2334
- #: lite/includes/admin/class-settings.php:560
2335
- #: pro/includes/admin/class-settings.php:995
2336
- #: pro/includes/admin/class-settings.php:999
2337
- #: pro/includes/admin/entries/class-entries.php:1105
2338
- #: pro/includes/admin/entries/class-entries.php:1427
2339
- msgid "M j, Y @ g:ia"
2340
  msgstr ""
2341
 
2342
- #: lite/wpforms-lite.php:87 pro/wpforms-pro.php:276
2343
  msgid "Default Notification"
2344
  msgstr ""
2345
 
2346
- #: lite/wpforms-lite.php:95 pro/wpforms-pro.php:291
2347
  msgid "Send To Email Address"
2348
  msgstr ""
2349
 
2350
- #: lite/wpforms-lite.php:98 pro/wpforms-pro.php:294
2351
  msgid ""
2352
  "Enter the email address to receive form entry notifications. For multiple "
2353
  "notifications, separate email addresses with a comma."
2354
  msgstr ""
2355
 
2356
- #: lite/wpforms-lite.php:114 pro/wpforms-pro.php:310
2357
  msgid "CC"
2358
  msgstr ""
2359
 
2360
- #: lite/wpforms-lite.php:130 pro/wpforms-pro.php:326
2361
  msgid "Email Subject"
2362
  msgstr ""
2363
 
2364
- #: lite/wpforms-lite.php:132 pro/wpforms-pro.php:328
2365
  msgid "New Entry: "
2366
  msgstr ""
2367
 
2368
- #: lite/wpforms-lite.php:145 pro/wpforms-pro.php:341
2369
  msgid "From Name"
2370
  msgstr ""
2371
 
2372
- #: lite/wpforms-lite.php:161 pro/wpforms-pro.php:357
2373
  msgid "From Email"
2374
  msgstr ""
2375
 
2376
- #: lite/wpforms-lite.php:177 pro/wpforms-pro.php:373
2377
  msgid "Reply-To"
2378
  msgstr ""
2379
 
2380
- #: lite/wpforms-lite.php:202 pro/wpforms-pro.php:398
2381
  msgid ""
2382
  "To display all form fields, use the <code>{all_fields}</code> Smart Tag."
2383
  msgstr ""
2384
 
2385
- #: lite/wpforms-lite.php:439
2386
  msgid "is a PRO Feature"
2387
  msgstr ""
2388
 
2389
- #: lite/wpforms-lite.php:440
2390
  msgid ""
2391
  "We're sorry, %name% is not available on your plan.<br><br>Please upgrade to "
2392
  "the PRO plan to unlock all these awesome features."
2393
  msgstr ""
2394
 
2395
- #: lite/wpforms-lite.php:441
2396
- msgid "Upgrade to PRO"
2397
- msgstr ""
2398
-
2399
  #: pro/includes/admin/ajax-actions.php:24
2400
  msgid "Addon deactivated."
2401
  msgstr ""
@@ -2425,8 +2802,13 @@ msgstr ""
2425
  msgid "Addon installed."
2426
  msgstr ""
2427
 
 
 
 
 
 
2428
  #: pro/includes/admin/builder/panels/class-payments.php:21
2429
- #: pro/includes/admin/class-settings.php:182
2430
  msgid "Payments"
2431
  msgstr ""
2432
 
@@ -2452,265 +2834,120 @@ msgid ""
2452
  "best to get it added as fast as possible"
2453
  msgstr ""
2454
 
2455
- #: pro/includes/admin/class-addons.php:85
2456
- #: pro/includes/admin/class-addons.php:239
2457
- msgid "Install Addon"
2458
- msgstr ""
2459
-
2460
- #: pro/includes/admin/class-addons.php:86
2461
- #: pro/includes/admin/class-addons.php:235
2462
- msgid "Deactivate"
2463
- msgstr ""
2464
-
2465
- #: pro/includes/admin/class-addons.php:87
2466
- #: pro/includes/admin/class-addons.php:237
2467
- msgid "Activate"
2468
- msgstr ""
2469
-
2470
- #: pro/includes/admin/class-addons.php:108
2471
  msgid "Refresh Addons"
2472
  msgstr ""
2473
 
2474
- #: pro/includes/admin/class-addons.php:114
2475
  msgid ""
2476
  "There was an issue retrieving the addons for this site. Please click on the "
2477
  "button above the refresh the addons data."
2478
  msgstr ""
2479
 
2480
- #: pro/includes/admin/class-addons.php:120
2481
  msgid ""
2482
  "In order to get access to Addons, you need to resolve your license key "
2483
  "errors."
2484
  msgstr ""
2485
 
2486
- #: pro/includes/admin/class-addons.php:126
2487
  msgid ""
2488
  "In order to get access to Addons, you need to verify your license key for "
2489
  "WPForms."
2490
  msgstr ""
2491
 
2492
- #: pro/includes/admin/class-addons.php:131
 
 
 
 
2493
  msgid ""
2494
  "Improve your forms with our premium addons. Missing an addon that you think "
2495
- "you should be able to see? Click the Refresh Addons button above."
 
2496
  msgstr ""
2497
 
2498
- #: pro/includes/admin/class-addons.php:136
2499
- msgid "Addons have successfully been refreshed."
2500
  msgstr ""
2501
 
2502
- #: pro/includes/admin/class-addons.php:180
2503
  msgid "Unlock More Features..."
2504
  msgstr ""
2505
 
2506
- #: pro/includes/admin/class-addons.php:181
2507
  msgid ""
2508
- "Want to get even more features? Upgrade your WPForms account and unlock the "
 
2509
  "following extensions."
2510
  msgstr ""
2511
 
2512
- #: pro/includes/admin/class-addons.php:241
2513
- msgid "Upgrade Now"
 
 
 
 
 
2514
  msgstr ""
2515
 
2516
  #: pro/includes/admin/class-license.php:93
2517
- #: pro/includes/admin/class-license.php:161
2518
- #: pro/includes/admin/class-license.php:229
2519
  msgid ""
2520
  "There was an error connecting to the remote key API. Please try again later."
2521
  msgstr ""
2522
 
2523
- #: pro/includes/admin/class-license.php:110
2524
  msgid "Congratulations! This site is now receiving automatic updates."
2525
  msgstr ""
2526
 
2527
- #: pro/includes/admin/class-license.php:199
2528
- msgid "Your key has been refreshed successfully."
2529
- msgstr ""
2530
-
2531
- #: pro/includes/admin/class-license.php:240
2532
- msgid "You have deactivated the key from this site successfully."
2533
- msgstr ""
2534
-
2535
- #: pro/includes/admin/class-license.php:272
2536
- msgid ""
2537
- "Please <a href=\"%s\">enter and activate</a> your license key for WPForms to "
2538
- "enable automatic updates."
2539
- msgstr ""
2540
-
2541
- #: pro/includes/admin/class-license.php:281
2542
- msgid ""
2543
- "Your license key for WPForms has expired. <a href=\"%s\" target=\"_blank\" "
2544
- "rel=\"noopener\">Please click here to renew your license key and continue "
2545
- "receiving automatic updates.</a>"
2546
- msgstr ""
2547
-
2548
- #: pro/includes/admin/class-license.php:290
2549
- msgid ""
2550
- "Your license key for WPForms has been disabled. Please use a different key "
2551
- "to continue receiving automatic updates."
2552
- msgstr ""
2553
-
2554
- #: pro/includes/admin/class-license.php:299
2555
  msgid ""
2556
- "Your license key for WPForms is invalid. The key no longer exists or the "
2557
  "user associated with the key has been deleted. Please use a different key to "
2558
  "continue receiving automatic updates."
2559
  msgstr ""
2560
 
2561
- #: pro/includes/admin/class-review.php:77
2562
- msgid ""
2563
- "Hey, I noticed you collected over 50 entries from WPForms - that’s awesome! "
2564
- "Could you please do me a BIG favor and give it a 5-star rating on WordPress "
2565
- "to help us spread the word and boost our motivation?"
2566
- msgstr ""
2567
-
2568
- #: pro/includes/admin/class-settings.php:184
2569
- msgid "Import/Export"
2570
- msgstr ""
2571
-
2572
- #: pro/includes/admin/class-settings.php:249
2573
- msgid "Please enter a license key to verify."
2574
- msgstr ""
2575
-
2576
- #: pro/includes/admin/class-settings.php:278
2577
- msgid "License"
2578
- msgstr ""
2579
-
2580
- #: pro/includes/admin/class-settings.php:279
2581
- msgid "Your license key provides access to updates and Add-ons. "
2582
- msgstr ""
2583
-
2584
- #: pro/includes/admin/class-settings.php:284
2585
- msgid "License Key"
2586
- msgstr ""
2587
-
2588
- #: pro/includes/admin/class-settings.php:288
2589
- msgid "Verify Key"
2590
- msgstr ""
2591
-
2592
- #: pro/includes/admin/class-settings.php:290
2593
- msgid "Deactivate Key"
2594
- msgstr ""
2595
-
2596
- #: pro/includes/admin/class-settings.php:298
2597
- msgid "License Key Type"
2598
- msgstr ""
2599
-
2600
- #: pro/includes/admin/class-settings.php:301
2601
- msgid "Your license key type for this site is <strong>%s.</strong>"
2602
- msgstr ""
2603
-
2604
- #: pro/includes/admin/class-settings.php:302
2605
- msgid "Refresh Key"
2606
- msgstr ""
2607
-
2608
- #: pro/includes/admin/class-settings.php:303
2609
  msgid ""
2610
- "If your license has been upgraded or is incorrect, you may force a refresh."
2611
- msgstr ""
2612
-
2613
- #: pro/includes/admin/class-settings.php:485
2614
- msgid "File Extension"
2615
- msgstr ""
2616
-
2617
- #: pro/includes/admin/class-settings.php:493
2618
- msgid "File Size"
2619
- msgstr ""
2620
-
2621
- #: pro/includes/admin/class-settings.php:501
2622
- msgid "Time (12 hour)"
2623
- msgstr ""
2624
-
2625
- #: pro/includes/admin/class-settings.php:509
2626
- msgid "Time (24 hour)"
2627
- msgstr ""
2628
-
2629
- #: pro/includes/admin/class-settings.php:517
2630
- msgid "Payment Required"
2631
- msgstr ""
2632
-
2633
- #: pro/includes/admin/class-settings.php:525
2634
- #: pro/includes/fields/class-payment-credit-card.php:21
2635
- msgid "Credit Card"
2636
- msgstr ""
2637
-
2638
- #: pro/includes/admin/class-settings.php:567
2639
- msgid "Settings updated."
2640
- msgstr ""
2641
-
2642
- #: pro/includes/admin/class-settings.php:581
2643
- msgid "Currency"
2644
- msgstr ""
2645
-
2646
- #: pro/includes/admin/class-settings.php:593
2647
- msgid "Determines which currency to use for payments."
2648
- msgstr ""
2649
-
2650
- #: pro/includes/admin/class-settings.php:643
2651
- msgid "Form(s) imported"
2652
- msgstr ""
2653
-
2654
- #: pro/includes/admin/class-settings.php:652
2655
- msgid "Form Import"
2656
- msgstr ""
2657
-
2658
- #: pro/includes/admin/class-settings.php:657
2659
- msgid "Select an export file."
2660
- msgstr ""
2661
-
2662
- #: pro/includes/admin/class-settings.php:663
2663
- msgid "Import"
2664
  msgstr ""
2665
 
2666
- #: pro/includes/admin/class-settings.php:670
2667
- msgid "Form Export"
2668
- msgstr ""
2669
-
2670
- #: pro/includes/admin/class-settings.php:675
2671
  msgid ""
2672
- "Select form(s) to download an export file. This can be imported into another "
2673
- "site."
2674
  msgstr ""
2675
 
2676
- #: pro/includes/admin/class-settings.php:690
2677
- msgid "Export"
2678
  msgstr ""
2679
 
2680
- #: pro/includes/admin/class-settings.php:697
2681
- msgid "Form Template Export"
2682
  msgstr ""
2683
 
2684
- #: pro/includes/admin/class-settings.php:704
2685
  msgid ""
2686
- "The following code can be used to register your custom form template. Copy "
2687
- "and paste the following code to your theme's functions.php file or include "
2688
- "it within an external file."
2689
  msgstr ""
2690
 
2691
- #: pro/includes/admin/class-settings.php:705
2692
  msgid ""
2693
- "For more information <a href=\"%s\" target=\"blank\" rel=\"noopener "
2694
- "noreferrer\">see our documentation</a> for additional details."
 
2695
  msgstr ""
2696
 
2697
- #: pro/includes/admin/class-settings.php:709
2698
  msgid ""
2699
- "Select a form to generate PHP code that can be used to register a custom "
2700
- "form template."
2701
- msgstr ""
2702
-
2703
- #: pro/includes/admin/class-settings.php:724
2704
- msgid "Generate template code"
2705
- msgstr ""
2706
-
2707
- #: pro/includes/admin/class-settings.php:789
2708
- msgid "Please upload a valid .json form export file."
2709
- msgstr ""
2710
-
2711
- #: pro/includes/admin/class-settings.php:789
2712
- #: pro/includes/admin/entries/class-entries-export.php:305
2713
- msgid "Error"
2714
  msgstr ""
2715
 
2716
  #: pro/includes/admin/entries/class-entries-export.php:179
@@ -2721,352 +2958,301 @@ msgstr ""
2721
  msgid "ID"
2722
  msgstr ""
2723
 
2724
- #: pro/includes/admin/entries/class-entries-export.php:305
2725
  msgid "You do not have permission to export entries."
2726
  msgstr ""
2727
 
2728
- #: pro/includes/admin/entries/class-entries-table.php:101
2729
  msgid "All"
2730
  msgstr ""
2731
 
2732
- #: pro/includes/admin/entries/class-entries-table.php:102
2733
  msgid "Unread"
2734
  msgstr ""
2735
 
2736
- #: pro/includes/admin/entries/class-entries-table.php:103
2737
  msgid "Starred"
2738
  msgstr ""
2739
 
2740
- #: pro/includes/admin/entries/class-entries-table.php:127
2741
  #: pro/includes/fields/class-payment-total.php:21
2742
  msgid "Total"
2743
  msgstr ""
2744
 
2745
- #: pro/includes/admin/entries/class-entries-table.php:133
2746
- msgid "Status"
2747
- msgstr ""
2748
-
2749
- #: pro/includes/admin/entries/class-entries-table.php:137
2750
- #: pro/includes/admin/entries/class-entries.php:1363
2751
  msgid "Actions"
2752
  msgstr ""
2753
 
2754
- #: pro/includes/admin/entries/class-entries-table.php:264
2755
- #: pro/includes/admin/entries/class-entries.php:1181
2756
  msgid "Unknown"
2757
  msgstr ""
2758
 
2759
- #: pro/includes/admin/entries/class-entries-table.php:271
2760
- #: pro/includes/admin/entries/class-entries.php:1141
2761
  msgid "Completed"
2762
  msgstr ""
2763
 
2764
- #: pro/includes/admin/entries/class-entries-table.php:308
2765
- #: pro/includes/admin/entries/class-entries.php:244
2766
- msgid "Unstar entry"
2767
- msgstr ""
2768
-
2769
- #: pro/includes/admin/entries/class-entries-table.php:308
2770
- #: pro/includes/admin/entries/class-entries.php:245
2771
- msgid "Star entry"
2772
- msgstr ""
2773
-
2774
- #: pro/includes/admin/entries/class-entries-table.php:313
2775
- #: pro/includes/admin/entries/class-entries.php:247
2776
- msgid "Mark entry unread"
2777
- msgstr ""
2778
-
2779
- #: pro/includes/admin/entries/class-entries-table.php:313
2780
- #: pro/includes/admin/entries/class-entries.php:246
2781
- msgid "Mark entry read"
2782
- msgstr ""
2783
-
2784
- #: pro/includes/admin/entries/class-entries-table.php:333
2785
  msgid "View Form Entry"
2786
  msgstr ""
2787
 
2788
- #: pro/includes/admin/entries/class-entries-table.php:334
2789
  msgid "View"
2790
  msgstr ""
2791
 
2792
- #: pro/includes/admin/entries/class-entries-table.php:340
2793
  msgid "Delete Form Entry"
2794
  msgstr ""
2795
 
2796
- #: pro/includes/admin/entries/class-entries-table.php:356
2797
  msgid "Mark Read"
2798
  msgstr ""
2799
 
2800
- #: pro/includes/admin/entries/class-entries-table.php:357
2801
- #: pro/includes/admin/entries/class-entries.php:1348
2802
  msgid "Mark Unread"
2803
  msgstr ""
2804
 
2805
- #: pro/includes/admin/entries/class-entries-table.php:358
2806
- #: pro/includes/admin/entries/class-entries.php:1313
2807
  msgid "Star"
2808
  msgstr ""
2809
 
2810
- #: pro/includes/admin/entries/class-entries-table.php:359
2811
- #: pro/includes/admin/entries/class-entries.php:1313
2812
  msgid "Unstar"
2813
  msgstr ""
2814
 
2815
- #: pro/includes/admin/entries/class-entries-table.php:361
2816
  msgid "----------"
2817
  msgstr ""
2818
 
2819
- #: pro/includes/admin/entries/class-entries-table.php:405
2820
  msgid "Entry marked as read."
2821
  msgid_plural "Entries marked as read."
2822
  msgstr[0] ""
2823
  msgstr[1] ""
2824
 
2825
- #: pro/includes/admin/entries/class-entries-table.php:414
2826
  msgid "Entry marked as unread."
2827
  msgid_plural "Entries marked as unread."
2828
  msgstr[0] ""
2829
  msgstr[1] ""
2830
 
2831
- #: pro/includes/admin/entries/class-entries-table.php:423
2832
  msgid "Entry starred."
2833
  msgid_plural "Entries starred."
2834
  msgstr[0] ""
2835
  msgstr[1] ""
2836
 
2837
- #: pro/includes/admin/entries/class-entries-table.php:432
2838
  msgid "Entry unstarred."
2839
  msgid_plural "Entries unstarred."
2840
  msgstr[0] ""
2841
  msgstr[1] ""
2842
 
2843
- #: pro/includes/admin/entries/class-entries-table.php:441
2844
  msgid "Entry successfully deleted."
2845
  msgid_plural "Entries successfully deleted."
2846
  msgstr[0] ""
2847
  msgstr[1] ""
2848
 
2849
- #: pro/includes/admin/entries/class-entries-table.php:452
2850
  msgid "Whoops, it appears you do not have any form entries yet."
2851
  msgstr ""
2852
 
2853
- #: pro/includes/admin/entries/class-entries.php:187
2854
  msgid "Number of entries per page:"
2855
  msgstr ""
2856
 
2857
- #: pro/includes/admin/entries/class-entries.php:243
2858
- #: pro/includes/admin/entries/class-entries.php:268
2859
- msgid "Are you sure you want to delete this entry?"
2860
- msgstr ""
2861
-
2862
- #: pro/includes/admin/entries/class-entries.php:269
2863
- #: pro/includes/admin/entries/class-entries.php:904
2864
- msgid "Hide Empty Fields"
2865
- msgstr ""
2866
-
2867
- #: pro/includes/admin/entries/class-entries.php:270
2868
- #: pro/includes/admin/entries/class-entries.php:904
2869
- msgid "Show Empty Fields"
2870
  msgstr ""
2871
 
2872
- #: pro/includes/admin/entries/class-entries.php:271
2873
- msgid "Are you sure you want to delete this note?"
2874
  msgstr ""
2875
 
2876
- #: pro/includes/admin/entries/class-entries.php:368
2877
- msgid "All entries marked as read."
2878
  msgstr ""
2879
 
2880
- #: pro/includes/admin/entries/class-entries.php:507
2881
  msgid "Edit This Form"
2882
  msgstr ""
2883
 
2884
- #: pro/includes/admin/entries/class-entries.php:517
2885
  msgid "Download Export (CSV)"
2886
  msgstr ""
2887
 
2888
- #: pro/includes/admin/entries/class-entries.php:522
2889
  msgid "Mark All Read"
2890
  msgstr ""
2891
 
2892
- #: pro/includes/admin/entries/class-entries.php:528
2893
- msgid "Select a different form"
2894
- msgstr ""
2895
-
2896
- #: pro/includes/admin/entries/class-entries.php:606
2897
  msgid "This entry has been starred."
2898
  msgstr ""
2899
 
2900
- #: pro/includes/admin/entries/class-entries.php:618
2901
  msgid "This entry has been unstarred."
2902
  msgstr ""
2903
 
2904
- #: pro/includes/admin/entries/class-entries.php:643
2905
  msgid "This entry has been marked unread."
2906
  msgstr ""
2907
 
2908
- #: pro/includes/admin/entries/class-entries.php:667
2909
  msgid "Note deleted."
2910
  msgstr ""
2911
 
2912
- #: pro/includes/admin/entries/class-entries.php:698
2913
  msgid "Note added."
2914
  msgstr ""
2915
 
2916
- #: pro/includes/admin/entries/class-entries.php:716
 
 
 
 
2917
  msgid "Invalid entry ID."
2918
  msgstr ""
2919
 
2920
- #: pro/includes/admin/entries/class-entries.php:729
2921
  msgid "Entry not found."
2922
  msgstr ""
2923
 
2924
- #: pro/includes/admin/entries/class-entries.php:742
2925
  msgid "Form not found."
2926
  msgstr ""
2927
 
2928
- #: pro/includes/admin/entries/class-entries.php:818
2929
- msgid "Notifications sent!"
2930
- msgstr ""
2931
-
2932
- #: pro/includes/admin/entries/class-entries.php:845
2933
  msgid "View Entry"
2934
  msgstr ""
2935
 
2936
- #: pro/includes/admin/entries/class-entries.php:847
2937
  msgid "Back to All Entries"
2938
  msgstr ""
2939
 
2940
- #: pro/includes/admin/entries/class-entries.php:851
2941
  msgid "Entry %s of %s"
2942
  msgstr ""
2943
 
2944
- #: pro/includes/admin/entries/class-entries.php:854
2945
  msgid "Previous form entry"
2946
  msgstr ""
2947
 
2948
- #: pro/includes/admin/entries/class-entries.php:855
2949
  msgid "Current form entry"
2950
  msgstr ""
2951
 
2952
- #: pro/includes/admin/entries/class-entries.php:856
2953
  msgid "Next form entry"
2954
  msgstr ""
2955
 
2956
- #: pro/includes/admin/entries/class-entries.php:972
2957
- msgid "Notes"
2958
- msgstr ""
2959
-
2960
- #: pro/includes/admin/entries/class-entries.php:978
2961
- #: pro/includes/admin/entries/class-entries.php:993
2962
  msgid "Add Note"
2963
  msgstr ""
2964
 
2965
- #: pro/includes/admin/entries/class-entries.php:1002
2966
  msgid "No notes."
2967
  msgstr ""
2968
 
2969
- #: pro/includes/admin/entries/class-entries.php:1030
2970
  msgid "Added by"
2971
  msgstr ""
2972
 
2973
- #: pro/includes/admin/entries/class-entries.php:1030
2974
  msgid "on"
2975
  msgstr ""
2976
 
2977
- #: pro/includes/admin/entries/class-entries.php:1063
2978
  msgid "Debug Information"
2979
  msgstr ""
2980
 
2981
- #: pro/includes/admin/entries/class-entries.php:1090
2982
  msgid "Entry Details"
2983
  msgstr ""
2984
 
2985
- #: pro/includes/admin/entries/class-entries.php:1098
2986
  msgid "Entry ID:"
2987
  msgstr ""
2988
 
2989
- #: pro/includes/admin/entries/class-entries.php:1104
2990
  msgid "Submitted:"
2991
  msgstr ""
2992
 
2993
- #: pro/includes/admin/entries/class-entries.php:1111
2994
  msgid "Modified :"
2995
  msgstr ""
2996
 
2997
- #: pro/includes/admin/entries/class-entries.php:1112
2998
  msgid "M j, Y @ H:i"
2999
  msgstr ""
3000
 
3001
- #: pro/includes/admin/entries/class-entries.php:1120
3002
  msgid "User:"
3003
  msgstr ""
3004
 
3005
- #: pro/includes/admin/entries/class-entries.php:1132
3006
  msgid "User IP:"
3007
  msgstr ""
3008
 
3009
- #: pro/includes/admin/entries/class-entries.php:1140
3010
  msgid "Status:"
3011
  msgstr ""
3012
 
3013
- #: pro/includes/admin/entries/class-entries.php:1191
3014
- msgid "Stripe"
3015
- msgstr ""
3016
-
3017
- #: pro/includes/admin/entries/class-entries.php:1197
3018
  msgid "PayPal Standard"
3019
  msgstr ""
3020
 
3021
- #: pro/includes/admin/entries/class-entries.php:1209
3022
  msgid "Payment Details"
3023
  msgstr ""
3024
 
3025
- #: pro/includes/admin/entries/class-entries.php:1216
3026
  msgid " Status:"
3027
  msgstr ""
3028
 
3029
- #: pro/includes/admin/entries/class-entries.php:1220
3030
  msgid " Total:"
3031
  msgstr ""
3032
 
3033
- #: pro/includes/admin/entries/class-entries.php:1225
3034
  msgid " Gateway:"
3035
  msgstr ""
3036
 
3037
- #: pro/includes/admin/entries/class-entries.php:1227
3038
  msgid "Test"
3039
  msgstr ""
3040
 
3041
- #: pro/includes/admin/entries/class-entries.php:1233
3042
  msgid "Transaction ID:"
3043
  msgstr ""
3044
 
3045
- #: pro/includes/admin/entries/class-entries.php:1238
3046
  msgid "Note:"
3047
  msgstr ""
3048
 
3049
- #: pro/includes/admin/entries/class-entries.php:1332
3050
- msgid "Print"
3051
- msgstr ""
3052
-
3053
- #: pro/includes/admin/entries/class-entries.php:1337
3054
  msgid "Export (CSV)"
3055
  msgstr ""
3056
 
3057
- #: pro/includes/admin/entries/class-entries.php:1342
3058
  msgid "Resend Notifications"
3059
  msgstr ""
3060
 
3061
- #: pro/includes/admin/entries/class-entries.php:1409
3062
  msgid "Related Entries"
3063
  msgstr ""
3064
 
3065
- #: pro/includes/admin/entries/class-entries.php:1413
3066
  msgid "The user who created this entry also submitted the entries below."
3067
  msgstr ""
3068
 
3069
- #: pro/includes/admin/entries/class-entries.php:1428
3070
  msgid "(Abandoned)"
3071
  msgstr ""
3072
 
@@ -3178,10 +3364,6 @@ msgstr ""
3178
  msgid "Date Dropdown"
3179
  msgstr ""
3180
 
3181
- #: pro/includes/fields/class-date-time.php:139
3182
- msgid "Type"
3183
- msgstr ""
3184
-
3185
  #: pro/includes/fields/class-date-time.php:152
3186
  msgid "15 minutes"
3187
  msgstr ""
@@ -3325,6 +3507,10 @@ msgstr ""
3325
  msgid "Connector"
3326
  msgstr ""
3327
 
 
 
 
 
3328
  #: pro/includes/fields/class-page-break.php:281
3329
  msgid "Progress Indicator"
3330
  msgstr ""
@@ -3418,6 +3604,18 @@ msgstr ""
3418
  msgid "Confirm Password"
3419
  msgstr ""
3420
 
 
 
 
 
 
 
 
 
 
 
 
 
3421
  #: pro/includes/fields/class-payment-credit-card.php:73
3422
  #: pro/includes/fields/class-payment-credit-card.php:277
3423
  msgid "Card Number"
@@ -3712,37 +3910,61 @@ msgstr ""
3712
  msgid "Request"
3713
  msgstr ""
3714
 
3715
- #: pro/wpforms-pro.php:195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3716
  msgid "Disable storing entry information in WordPress"
3717
  msgstr ""
3718
 
3719
- #: pro/wpforms-pro.php:256
3720
  msgid "Add New Notification"
3721
  msgstr ""
3722
 
3723
- #: pro/wpforms-pro.php:411
3724
  msgid "Send"
3725
  msgstr ""
3726
 
3727
- #: pro/wpforms-pro.php:412
3728
  msgid "Don't send"
3729
  msgstr ""
3730
 
3731
- #: pro/wpforms-pro.php:414
3732
  msgid "this notification if"
3733
  msgstr ""
3734
 
3735
- #: pro/wpforms-pro.php:415
3736
  msgid "Email notifications"
3737
  msgstr ""
3738
 
3739
- #: pro/wpforms-pro.php:418
3740
  msgid ""
3741
  "Install the <a href=\"%s\">Conditional Logic add-on</a> to enable "
3742
  "conditional logic for Email Notifications."
3743
  msgstr ""
3744
 
3745
- #: pro/wpforms-pro.php:461
3746
  msgid ""
3747
  "Conditional logic functionality is now included in the core WPForms plugin! "
3748
  "The WPForms Conditional Logic addon can be removed without affecting your "
@@ -3750,13 +3972,13 @@ msgid ""
3750
  "noreferrer\">read our annoucement</a>."
3751
  msgstr ""
3752
 
3753
- #: wpforms.php:54
3754
  msgid "Please deactivate WPForms Lite before activating WPForms"
3755
  msgstr ""
3756
 
3757
- #. #-#-#-#-# wpforms.pot (WPForms 1.3.8) #-#-#-#-#
3758
  #. Plugin URI of the plugin/theme
3759
- #. #-#-#-#-# wpforms.pot (WPForms 1.3.8) #-#-#-#-#
3760
  #. Author URI of the plugin/theme
3761
  msgid "https://wpforms.com"
3762
  msgstr ""
2
  # This file is distributed under the same license as the WPForms package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WPForms 1.3.9.1\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms\n"
7
+ "POT-Creation-Date: 2017-08-02 14:29:50+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: includes/admin/admin.php:126 pro/includes/admin/class-addons.php:241
16
+ msgid "Activate"
17
+ msgstr ""
18
+
19
+ #: includes/admin/admin.php:127 pro/includes/admin/class-addons.php:198
20
+ msgid "Active"
21
+ msgstr ""
22
+
23
+ #: includes/admin/admin.php:128 pro/includes/admin/class-addons.php:236
24
+ msgid "Deactivate"
25
+ msgstr ""
26
+
27
+ #: includes/admin/admin.php:129 pro/includes/admin/class-addons.php:204
28
+ msgid "Inactive"
29
+ msgstr ""
30
+
31
+ #: includes/admin/admin.php:130 pro/includes/admin/class-addons.php:246
32
+ msgid "Install Addon"
33
+ msgstr ""
34
+
35
+ #: includes/admin/admin.php:132 includes/admin/builder/class-builder.php:286
36
+ #: includes/admin/class-editor.php:96
37
+ #: pro/includes/admin/entries/class-entries-single.php:560
38
+ msgid "Cancel"
39
+ msgstr ""
40
+
41
+ #: includes/admin/admin.php:133 includes/admin/builder/class-builder.php:288
42
+ #: includes/admin/class-editor.php:70 includes/class-preview.php:150
43
+ msgid "Close"
44
+ msgstr ""
45
+
46
+ #: includes/admin/admin.php:134
47
+ msgid "Are you sure you want to delete this entry?"
48
+ msgstr ""
49
+
50
+ #: includes/admin/admin.php:135
51
+ #: pro/includes/admin/entries/class-entries-single.php:470
52
+ msgid "Hide Empty Fields"
53
+ msgstr ""
54
+
55
+ #: includes/admin/admin.php:136
56
+ #: pro/includes/admin/entries/class-entries-single.php:470
57
+ msgid "Show Empty Fields"
58
+ msgstr ""
59
+
60
+ #: includes/admin/admin.php:137
61
+ msgid "Are you sure you want to delete this note?"
62
+ msgstr ""
63
+
64
+ #: includes/admin/admin.php:138
65
+ #: pro/includes/admin/entries/class-entries-list-table.php:308
66
+ msgid "Unstar entry"
67
+ msgstr ""
68
+
69
+ #: includes/admin/admin.php:139
70
+ #: pro/includes/admin/entries/class-entries-list-table.php:308
71
+ msgid "Star entry"
72
+ msgstr ""
73
+
74
+ #: includes/admin/admin.php:140
75
+ #: pro/includes/admin/entries/class-entries-list-table.php:313
76
+ msgid "Mark entry read"
77
+ msgstr ""
78
+
79
+ #: includes/admin/admin.php:141
80
+ #: pro/includes/admin/entries/class-entries-list-table.php:313
81
+ msgid "Mark entry unread"
82
+ msgstr ""
83
+
84
+ #: includes/admin/admin.php:142
85
+ msgid "Are you sure you want to delete this form?"
86
+ msgstr ""
87
+
88
+ #: includes/admin/admin.php:143
89
+ msgid "Are you sure you want to duplicate this form?"
90
+ msgstr ""
91
+
92
+ #: includes/admin/admin.php:144 includes/admin/builder/class-builder.php:296
93
+ msgid "Heads up!"
94
+ msgstr ""
95
+
96
+ #: includes/admin/admin.php:146 includes/admin/builder/class-builder.php:287
97
+ msgid "OK"
98
+ msgstr ""
99
+
100
+ #: includes/admin/admin.php:147
101
+ msgid "Are you sure you want to disconnect this account?"
102
+ msgstr ""
103
+
104
+ #: includes/admin/admin.php:148
105
+ msgid "Could not authenticate with the provider."
106
+ msgstr ""
107
+
108
+ #: includes/admin/admin.php:149
109
+ msgid "Upload or Choose Your Image"
110
+ msgstr ""
111
+
112
+ #: includes/admin/admin.php:150
113
+ msgid "Use Image"
114
+ msgstr ""
115
+
116
+ #: includes/admin/ajax-actions.php:24
117
+ msgid "You do not have permission."
118
  msgstr ""
119
 
120
  #: includes/admin/ajax-actions.php:28
141
  msgid "Error updating form template"
142
  msgstr ""
143
 
144
+ #: includes/admin/ajax-actions.php:243 includes/fields/class-base.php:395
145
  msgid "post type"
146
  msgstr ""
147
 
148
+ #: includes/admin/ajax-actions.php:262 includes/fields/class-base.php:402
149
  msgid "taxonomy"
150
  msgstr ""
151
 
159
  msgstr ""
160
 
161
  #: includes/admin/builder/class-builder.php:276
162
+ #: includes/fields/class-base.php:354
163
  msgid "Bulk Add"
164
  msgstr ""
165
 
210
  "field difficult for your vistors to use and/or cause the form to be slow."
211
  msgstr ""
212
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  #: includes/admin/builder/class-builder.php:289
214
  msgid ""
215
  "Due to form changes, conditional logic rules have been removed or updated:"
222
  msgstr ""
223
 
224
  #: includes/admin/builder/class-builder.php:291
225
+ #: pro/includes/admin/entries/class-entries-list-table.php:176
226
  msgid "Field"
227
  msgstr ""
228
 
242
  msgid "No fields available"
243
  msgstr ""
244
 
 
 
 
 
245
  #: includes/admin/builder/class-builder.php:298
246
  msgid "No email fields"
247
  msgstr ""
269
  msgstr ""
270
 
271
  #: includes/admin/builder/class-builder.php:304
 
 
272
  msgid "Saving ..."
273
  msgstr ""
274
 
281
  msgstr ""
282
 
283
  #: includes/admin/builder/class-builder.php:307
284
+ #: includes/fields/class-base.php:533
285
  msgid "Show Layouts"
286
  msgstr ""
287
 
352
  msgstr ""
353
 
354
  #: includes/admin/builder/class-builder.php:329
355
+ #: includes/fields/class-base.php:245 includes/fields/class-base.php:582
356
+ #: lite/wpforms-lite.php:76 pro/wpforms-pro.php:367
357
  msgid "Off"
358
  msgstr ""
359
 
360
  #: includes/admin/builder/class-builder.php:330
361
+ #: includes/fields/class-base.php:245 lite/wpforms-lite.php:75
362
+ #: pro/wpforms-pro.php:366
363
  msgid "On"
364
  msgstr ""
365
 
439
  msgstr ""
440
 
441
  #: includes/admin/builder/class-builder.php:348
442
+ #: includes/admin/builder/functions.php:249 includes/fields/class-base.php:479
443
  msgid "Show Smart Tags"
444
  msgstr ""
445
 
486
  msgstr ""
487
 
488
  #: includes/admin/builder/class-builder.php:460
489
+ #: pro/includes/admin/entries/class-entries-list.php:383
490
  msgid "Preview Form"
491
  msgstr ""
492
 
508
  msgstr ""
509
 
510
  #: includes/admin/builder/class-builder.php:472
 
511
  msgid "Save"
512
  msgstr ""
513
 
559
  msgstr ""
560
 
561
  #: includes/admin/builder/panels/class-fields.php:252
562
+ #: includes/fields/class-base.php:765
563
  msgid "Duplicate Field"
564
  msgstr ""
565
 
566
  #: includes/admin/builder/panels/class-fields.php:254
567
+ #: includes/fields/class-base.php:766
568
  msgid "Delete Field"
569
  msgstr ""
570
 
571
  #: includes/admin/builder/panels/class-fields.php:256
572
+ #: includes/fields/class-base.php:767
573
  msgid "Click to edit. Drag to reorder."
574
  msgstr ""
575
 
632
  msgstr ""
633
 
634
  #: includes/admin/builder/panels/class-settings.php:21
635
+ #: includes/admin/class-menu.php:84 includes/admin/class-menu.php:195
 
636
  msgid "Settings"
637
  msgstr ""
638
 
639
  #: includes/admin/builder/panels/class-settings.php:57
640
  #: includes/admin/builder/panels/class-settings.php:87
641
+ #: includes/admin/class-settings.php:166 includes/admin/class-settings.php:247
 
642
  msgid "General"
643
  msgstr ""
644
 
645
+ #: includes/admin/builder/panels/class-settings.php:58 lite/wpforms-lite.php:61
646
+ #: lite/wpforms-lite.php:71 pro/wpforms-pro.php:353 pro/wpforms-pro.php:362
647
  msgid "Notifications"
648
  msgstr ""
649
 
721
  msgstr ""
722
 
723
  #: includes/admin/builder/panels/class-settings.php:188
724
+ #: includes/templates/class-suggestion.php:74 lite/wpforms-lite.php:189
725
+ #: pro/wpforms-pro.php:486
726
  msgid "Message"
727
  msgstr ""
728
 
813
 
814
  #: includes/admin/class-editor.php:88
815
  #: includes/admin/overview/class-overview-table.php:250
816
+ #: pro/includes/admin/entries/class-entries-list.php:236
817
  msgid ""
818
  "Whoops, you haven't created a form yet. Want to <a href=\"%s\">give it a go</"
819
  "a>?"
820
  msgstr ""
821
 
822
+ #. #-#-#-#-# wpforms.pot (WPForms 1.3.9.1) #-#-#-#-#
823
  #. Plugin Name of the plugin/theme
824
+ #. #-#-#-#-# wpforms.pot (WPForms 1.3.9.1) #-#-#-#-#
825
  #. Author of the plugin/theme
826
+ #: includes/admin/class-menu.php:39 includes/admin/class-menu.php:40
827
+ #: includes/admin/class-menu.php:51 includes/admin/class-menu.php:103
828
  #: includes/integrations.php:34
829
  msgid "WPForms"
830
  msgstr ""
831
 
832
+ #: includes/admin/class-menu.php:52
833
  msgid "All Forms"
834
  msgstr ""
835
 
836
+ #: includes/admin/class-menu.php:61
837
  msgid "WPForms Builder"
838
  msgstr ""
839
 
840
+ #: includes/admin/class-menu.php:62
841
+ #: includes/admin/overview/class-overview.php:124
842
  #: includes/providers/class-base.php:903
843
  msgid "Add New"
844
  msgstr ""
845
 
846
+ #: includes/admin/class-menu.php:71
847
  msgid "Form Entries"
848
  msgstr ""
849
 
850
+ #: includes/admin/class-menu.php:72
851
  #: includes/admin/overview/class-overview-table.php:152
852
+ #: pro/includes/admin/entries/class-entries-list.php:257
853
+ #: pro/wpforms-pro.php:306
854
  msgid "Entries"
855
  msgstr ""
856
 
857
+ #: includes/admin/class-menu.php:83
858
  msgid "WPForms Settings"
859
  msgstr ""
860
 
861
+ #: includes/admin/class-menu.php:93
862
+ msgid "WPForms Tools"
863
+ msgstr ""
864
+
865
+ #: includes/admin/class-menu.php:94
866
+ msgid "Tools"
867
+ msgstr ""
868
+
869
+ #: includes/admin/class-menu.php:104
870
  msgid "Info"
871
  msgstr ""
872
 
873
+ #: includes/admin/class-menu.php:113 pro/includes/admin/class-addons.php:83
874
  msgid "WPForms Addons"
875
  msgstr ""
876
 
877
+ #: includes/admin/class-menu.php:114
878
  msgid "Addons"
879
  msgstr ""
880
 
881
+ #: includes/admin/class-review.php:92
882
+ msgid ""
883
+ "Hey, I noticed you collected over 50 entries from WPForms - that’s awesome! "
884
+ "Could you please do me a BIG favor and give it a 5-star rating on WordPress "
885
+ "to help us spread the word and boost our motivation?"
886
+ msgstr ""
887
+
888
+ #: includes/admin/class-review.php:93 includes/admin/class-review.php:141
889
+ msgid "~ Syed Balkhi<br>Co-Founder of WPForms"
890
+ msgstr ""
891
+
892
+ #: includes/admin/class-review.php:95 includes/admin/class-review.php:143
893
+ msgid "Ok, you deserve it"
894
+ msgstr ""
895
+
896
+ #: includes/admin/class-review.php:96 includes/admin/class-review.php:144
897
+ msgid "Nope, maybe later"
898
+ msgstr ""
899
+
900
+ #: includes/admin/class-review.php:97 includes/admin/class-review.php:145
901
+ msgid "I already did"
902
+ msgstr ""
903
+
904
+ #: includes/admin/class-review.php:140
905
+ msgid ""
906
+ "Hey, I noticed you created a contact form with WPForms - that’s awesome! "
907
+ "Could you please do me a BIG favor and give it a 5-star rating on WordPress "
908
+ "to help us spread the word and boost our motivation?"
909
+ msgstr ""
910
+
911
+ #: includes/admin/class-review.php:193
912
+ msgid ""
913
+ "Please rate <strong>WPForms</strong> <a href=\"%s\" target=\"_blank\" rel="
914
+ "\"noopener\">&#9733;&#9733;&#9733;&#9733;&#9733;</a> on <a href=\"%s\" "
915
+ "target=\"_blank\">WordPress.org</a> to help us spread the word. Thank you "
916
+ "from the WPForms team!"
917
+ msgstr ""
918
+
919
+ #: includes/admin/class-settings.php:142
920
+ msgid "Settings saved."
921
+ msgstr ""
922
+
923
+ #: includes/admin/class-settings.php:168 includes/admin/class-settings.php:173
924
+ #: includes/admin/class-settings.php:178 includes/admin/class-settings.php:183
925
+ #: pro/wpforms-pro.php:151
926
+ msgid "Save Settings"
927
+ msgstr ""
928
+
929
+ #: includes/admin/class-settings.php:171 includes/admin/class-settings.php:276
930
+ #: includes/admin/class-settings.php:365 includes/fields/class-email.php:21
931
+ #: includes/fields/class-email.php:68 includes/fields/class-email.php:306
932
+ #: includes/templates/class-subscribe.php:42
933
+ #: pro/includes/templates/class-donation.php:42
934
+ #: pro/includes/templates/class-order.php:42
935
+ #: pro/includes/templates/class-request-quote.php:46
936
+ msgid "Email"
937
+ msgstr ""
938
+
939
+ #: includes/admin/class-settings.php:176 includes/admin/class-settings.php:316
940
+ msgid "reCAPTCHA"
941
+ msgstr ""
942
+
943
+ #: includes/admin/class-settings.php:181
944
+ msgid "Validation"
945
+ msgstr ""
946
+
947
+ #: includes/admin/class-settings.php:186 includes/admin/class-settings.php:386
948
+ #: includes/admin/class-settings.php:393
949
+ msgid "Integrations"
950
+ msgstr ""
951
+
952
+ #: includes/admin/class-settings.php:225
953
+ msgid ""
954
+ "reCAPTCHA is a free anti-spam service from Google which helps to protect "
955
+ "your website from spam and abuse while letting real people pass through with "
956
+ "ease."
957
+ msgstr ""
958
+
959
+ #: includes/admin/class-settings.php:226
960
+ msgid ""
961
+ "Google's original <a href=\"https://www.google.com/recaptcha/intro/\" target="
962
+ "\"_blank\" rel=\"noopener noreferrer\">v2 reCAPTCHA</a> prompts users to "
963
+ "check a box to prove they're human, whereas <a href=\"https://www.google.com/"
964
+ "recaptcha/intro/invisible.html\" target=\"_blank\" rel=\"noopener noreferrer"
965
+ "\">Invisible reCAPTCHA</a> uses advanced technology to detect real users "
966
+ "without requiring any input."
967
+ msgstr ""
968
+
969
+ #: includes/admin/class-settings.php:227
970
+ msgid ""
971
+ "Sites already using v2 reCAPTCHA will need to create new site keys before "
972
+ "switching to the Invisible reCAPTCHA."
973
+ msgstr ""
974
+
975
+ #: includes/admin/class-settings.php:228
976
+ msgid ""
977
+ "<a href=\"https://wpforms.com/docs/setup-captcha-wpforms/\" rel=\"noopener "
978
+ "noreferrer\" target=\"_blank\">Read our walk through</a> to learn more and "
979
+ "for step-by-step directions."
980
+ msgstr ""
981
+
982
+ #: includes/admin/class-settings.php:235
983
+ msgid "License"
984
+ msgstr ""
985
+
986
+ #: includes/admin/class-settings.php:235
987
+ msgid "Your license key provides access to updates and Add-ons"
988
+ msgstr ""
989
+
990
+ #: includes/admin/class-settings.php:242
991
+ msgid "License Key"
992
+ msgstr ""
993
+
994
+ #: includes/admin/class-settings.php:254
995
+ msgid "Include Form Styling"
996
+ msgstr ""
997
+
998
+ #: includes/admin/class-settings.php:255
999
+ msgid "Determines which CSS files to load for the site."
1000
+ msgstr ""
1001
+
1002
+ #: includes/admin/class-settings.php:260
1003
+ msgid "Base and form theme styling"
1004
+ msgstr ""
1005
+
1006
+ #: includes/admin/class-settings.php:261
1007
+ msgid "Base styling only"
1008
+ msgstr ""
1009
+
1010
+ #: includes/admin/class-settings.php:262
1011
+ msgid "No styling"
1012
+ msgstr ""
1013
+
1014
+ #: includes/admin/class-settings.php:267
1015
+ msgid "Load Assets Globally"
1016
+ msgstr ""
1017
+
1018
+ #: includes/admin/class-settings.php:268
1019
+ msgid ""
1020
+ "Check this if you would like to load WPForms assets site-wide. Only check if "
1021
+ "your site is having compatibility issues or instructed to by support."
1022
+ msgstr ""
1023
+
1024
+ #: includes/admin/class-settings.php:283
1025
+ msgid "Template"
1026
+ msgstr ""
1027
+
1028
+ #: includes/admin/class-settings.php:284
1029
+ msgid ""
1030
+ "Determines how email notifications will be formatted. HTML Templates are the "
1031
+ "default."
1032
+ msgstr ""
1033
+
1034
+ #: includes/admin/class-settings.php:288
1035
+ msgid "HTML Template"
1036
+ msgstr ""
1037
+
1038
+ #: includes/admin/class-settings.php:289
1039
+ msgid "Plain text"
1040
+ msgstr ""
1041
+
1042
+ #: includes/admin/class-settings.php:294
1043
+ msgid "Header Image"
1044
+ msgstr ""
1045
+
1046
+ #: includes/admin/class-settings.php:295
1047
+ msgid ""
1048
+ "Upload or choose a logo to be displayed at the top of email notifications."
1049
+ "<br>Recommended size is 300x100 or smaller for best support on all devices."
1050
+ msgstr ""
1051
+
1052
+ #: includes/admin/class-settings.php:300
1053
+ msgid "Background Color"
1054
+ msgstr ""
1055
+
1056
+ #: includes/admin/class-settings.php:301
1057
+ msgid "Customize the background color of the HTML email template."
1058
+ msgstr ""
1059
+
1060
+ #: includes/admin/class-settings.php:307
1061
+ msgid "Carbon Copy"
1062
+ msgstr ""
1063
+
1064
+ #: includes/admin/class-settings.php:308
1065
+ msgid ""
1066
+ "Check this if you would like to enable the ability to CC: email addresses in "
1067
+ "the form notification settings."
1068
+ msgstr ""
1069
+
1070
+ #: includes/admin/class-settings.php:323
1071
+ #: pro/includes/fields/class-date-time.php:139
1072
+ msgid "Type"
1073
+ msgstr ""
1074
+
1075
+ #: includes/admin/class-settings.php:327
1076
+ msgid "v2 reCAPTCHA"
1077
+ msgstr ""
1078
+
1079
+ #: includes/admin/class-settings.php:328
1080
+ msgid "Invisible reCAPTCHA"
1081
+ msgstr ""
1082
+
1083
+ #: includes/admin/class-settings.php:333
1084
+ msgid "Site Key"
1085
+ msgstr ""
1086
+
1087
+ #: includes/admin/class-settings.php:338
1088
+ msgid "Secret Key"
1089
+ msgstr ""
1090
+
1091
+ #: includes/admin/class-settings.php:346
1092
+ msgid "Validation Messages"
1093
+ msgstr ""
1094
+
1095
+ #: includes/admin/class-settings.php:346
1096
+ msgid ""
1097
+ "These messages are displayed to the user as they fill out a form in real-"
1098
+ "time."
1099
+ msgstr ""
1100
+
1101
+ #: includes/admin/class-settings.php:353 includes/fields/class-base.php:327
1102
+ msgid "Required"
1103
+ msgstr ""
1104
+
1105
+ #: includes/admin/class-settings.php:355 includes/class-frontend.php:969
1106
+ msgid "This field is required."
1107
+ msgstr ""
1108
+
1109
+ #: includes/admin/class-settings.php:359
1110
+ msgid "Website URL"
1111
+ msgstr ""
1112
+
1113
+ #: includes/admin/class-settings.php:361 includes/class-frontend.php:970
1114
+ msgid "Please enter a valid URL."
1115
+ msgstr ""
1116
+
1117
+ #: includes/admin/class-settings.php:367 includes/class-frontend.php:971
1118
+ msgid "Please enter a valid email address."
1119
+ msgstr ""
1120
+
1121
+ #: includes/admin/class-settings.php:371
1122
+ msgid "Number"
1123
+ msgstr ""
1124
+
1125
+ #: includes/admin/class-settings.php:373 includes/class-frontend.php:972
1126
+ #: includes/fields/class-number.php:157
1127
+ msgid "Please enter a valid number."
1128
+ msgstr ""
1129
+
1130
+ #: includes/admin/class-settings.php:377
1131
+ msgid "Confirm Value"
1132
+ msgstr ""
1133
+
1134
+ #: includes/admin/class-settings.php:379 includes/class-frontend.php:973
1135
+ #: pro/includes/fields/class-password.php:394
1136
+ msgid "Field values do not match."
1137
+ msgstr ""
1138
+
1139
+ #: includes/admin/class-settings.php:386 includes/admin/class-settings.php:393
1140
+ msgid ""
1141
+ "Manage integrations with popular providers such as Constant Contact, "
1142
+ "MailChimp, Zapier, and more."
1143
+ msgstr ""
1144
+
1145
+ #: includes/admin/class-settings.php:495
1146
+ msgid "Want to better protect your contact forms from spam?"
1147
+ msgstr ""
1148
+
1149
+ #: includes/admin/class-settings.php:497
1150
+ msgid ""
1151
+ "WPForms custom captcha addon allows you to add custom questions captcha or "
1152
+ "math questions captcha to your WordPress forms. Since we know spam is a huge "
1153
+ "problem for contact forms, WPForms goes above and beyond to help you protect "
1154
+ "your forms."
1155
  msgstr ""
1156
 
1157
+ #: includes/admin/class-settings.php:499
1158
+ msgid "Click here to Upgrade"
1159
+ msgstr ""
1160
+
1161
+ #: includes/admin/class-tools.php:89
1162
+ msgid "Import/Export"
1163
+ msgstr ""
1164
+
1165
+ #: includes/admin/class-tools.php:90
1166
+ msgid "System Info"
1167
+ msgstr ""
1168
+
1169
+ #: includes/admin/class-tools.php:97
1170
+ msgid "Form(s) imported"
1171
+ msgstr ""
1172
+
1173
+ #: includes/admin/class-tools.php:126
1174
+ msgid "Form Import"
1175
+ msgstr ""
1176
+
1177
+ #: includes/admin/class-tools.php:127
1178
+ msgid "Select an export file."
1179
+ msgstr ""
1180
+
1181
+ #: includes/admin/class-tools.php:132
1182
+ msgid "No file chosen"
1183
+ msgstr ""
1184
+
1185
+ #: includes/admin/class-tools.php:134
1186
+ msgid "Choose a file&hellip;"
1187
+ msgstr ""
1188
+
1189
+ #: includes/admin/class-tools.php:140
1190
+ msgid "Import"
1191
+ msgstr ""
1192
+
1193
+ #: includes/admin/class-tools.php:146
1194
+ msgid "Form Export"
1195
+ msgstr ""
1196
+
1197
+ #: includes/admin/class-tools.php:147
1198
+ msgid ""
1199
+ "Form exports files can be used to create a backup of your forms or to "
1200
+ "imported forms into another site."
1201
+ msgstr ""
1202
+
1203
+ #: includes/admin/class-tools.php:152
1204
+ msgid "Select form(s)"
1205
+ msgstr ""
1206
+
1207
+ #: includes/admin/class-tools.php:165
1208
+ msgid "Export"
1209
+ msgstr ""
1210
+
1211
+ #: includes/admin/class-tools.php:170
1212
+ msgid "Form Template Export"
1213
+ msgstr ""
1214
+
1215
+ #: includes/admin/class-tools.php:173
1216
+ msgid ""
1217
+ "The following code can be used to register your custom form template. Copy "
1218
+ "and paste the following code to your theme's functions.php file or include "
1219
+ "it within an external file."
1220
+ msgstr ""
1221
+
1222
+ #: includes/admin/class-tools.php:174
1223
+ msgid ""
1224
+ "For more information <a href=\"%s\" target=\"blank\" rel=\"noopener "
1225
+ "noreferrer\">see our documentation</a>."
1226
+ msgstr ""
1227
+
1228
+ #: includes/admin/class-tools.php:178
1229
+ msgid ""
1230
+ "Select a form to generate PHP code that can be used to register a custom "
1231
+ "form template."
1232
+ msgstr ""
1233
+
1234
+ #: includes/admin/class-tools.php:196
1235
+ msgid "Export Template"
1236
+ msgstr ""
1237
+
1238
+ #: includes/admin/class-tools.php:211
1239
+ msgid "System Information"
1240
+ msgstr ""
1241
+
1242
+ #: includes/admin/class-tools.php:271
1243
+ msgid "Please upload a valid .json form export file."
1244
+ msgstr ""
1245
+
1246
+ #: includes/admin/class-tools.php:271
1247
+ #: pro/includes/admin/entries/class-entries-export.php:307
1248
+ msgid "Error"
1249
+ msgstr ""
1250
+
1251
+ #: includes/admin/class-tools.php:391 includes/admin/class-tools.php:395
1252
+ #: pro/includes/admin/entries/class-entries-single.php:671
1253
+ #: pro/includes/admin/entries/class-entries-single.php:993
1254
+ msgid "M j, Y @ g:ia"
1255
+ msgstr ""
1256
+
1257
+ #: includes/admin/class-welcome.php:39 includes/admin/class-welcome.php:40
1258
+ #: includes/admin/class-welcome.php:117
1259
  msgid "Welcome to WPForms"
1260
  msgstr ""
1261
 
1262
+ #: includes/admin/class-welcome.php:113
1263
+ msgid "Sullie the WPForms mascot"
1264
+ msgstr ""
1265
+
1266
+ #: includes/admin/class-welcome.php:118
1267
+ msgid ""
1268
+ "Thank you for choosing WPForms - the most powerful drag & drop WordPress "
1269
+ "form builder in the market."
1270
+ msgstr ""
1271
+
1272
+ #: includes/admin/class-welcome.php:121
1273
+ msgid "Watch how to create you first form"
1274
+ msgstr ""
1275
+
1276
+ #: includes/admin/class-welcome.php:122
1277
+ msgid "Watch how to create your first form"
1278
+ msgstr ""
1279
+
1280
+ #: includes/admin/class-welcome.php:127
1281
+ msgid ""
1282
+ "WPForms makes it easy to create forms in WordPress. You can watch the video "
1283
+ "tutorial or read our guide on how create your first form."
1284
+ msgstr ""
1285
+
1286
+ #: includes/admin/class-welcome.php:131 includes/admin/class-welcome.php:282
1287
+ msgid "Create Your First Form"
1288
+ msgstr ""
1289
+
1290
+ #: includes/admin/class-welcome.php:134
1291
+ msgid "Read the Full Guide"
1292
+ msgstr ""
1293
+
1294
+ #: includes/admin/class-welcome.php:146
1295
+ msgid "Welcome Features &amp; Addons"
1296
+ msgstr ""
1297
+
1298
+ #: includes/admin/class-welcome.php:147
1299
+ msgid ""
1300
+ "WPForms is both easy to use and extremely powerful. We have tons of helpful "
1301
+ "features that allow us to give you everything you need from a form builder."
1302
+ msgstr ""
1303
+
1304
+ #: includes/admin/class-welcome.php:153
1305
+ msgid "Drag &amp; Drop Form Builder"
1306
+ msgstr ""
1307
+
1308
+ #: includes/admin/class-welcome.php:154
1309
+ msgid ""
1310
+ "Easily create an amazing form in just a few minutes without writing any code."
1311
+ msgstr ""
1312
+
1313
+ #: includes/admin/class-welcome.php:159
1314
+ msgid "Form Templates"
1315
+ msgstr ""
1316
+
1317
+ #: includes/admin/class-welcome.php:160
1318
+ msgid "Start with pre-built form templates to save even more time."
1319
+ msgstr ""
1320
+
1321
+ #: includes/admin/class-welcome.php:165
1322
+ msgid "Responsive Mobile Friendly"
1323
+ msgstr ""
1324
+
1325
+ #: includes/admin/class-welcome.php:166
1326
+ msgid ""
1327
+ "WPForms is 100% responsive meaning it works on mobile, tablets & desktop."
1328
+ msgstr ""
1329
+
1330
+ #: includes/admin/class-welcome.php:171
1331
+ msgid "Smart Conditional Logic"
1332
+ msgstr ""
1333
+
1334
+ #: includes/admin/class-welcome.php:172
1335
+ msgid "Easily create high performance forms with our smart conditional logic."
1336
+ msgstr ""
1337
+
1338
+ #: includes/admin/class-welcome.php:177
1339
+ msgid "Instant Notifications"
1340
+ msgstr ""
1341
+
1342
+ #: includes/admin/class-welcome.php:178
1343
+ msgid ""
1344
+ "Respond to leads quickly with our instant form notification feature for your "
1345
+ "team."
1346
+ msgstr ""
1347
+
1348
+ #: includes/admin/class-welcome.php:183
1349
+ msgid "Entry Management"
1350
+ msgstr ""
1351
+
1352
+ #: includes/admin/class-welcome.php:184
1353
+ msgid "View all your leads in one place to streamline your workflow."
1354
+ msgstr ""
1355
+
1356
+ #: includes/admin/class-welcome.php:189
1357
+ msgid "Payments Made Easy"
1358
+ msgstr ""
1359
+
1360
+ #: includes/admin/class-welcome.php:190
1361
+ msgid ""
1362
+ "Easily collect payments, donations, and online orders without hiring a "
1363
+ "developer."
1364
+ msgstr ""
1365
+
1366
+ #: includes/admin/class-welcome.php:195
1367
+ msgid "Marketing &amp; Subscriptions"
1368
+ msgstr ""
1369
+
1370
+ #: includes/admin/class-welcome.php:196
1371
+ msgid ""
1372
+ "Create subscription forms and connect with your email marketing service."
1373
+ msgstr ""
1374
+
1375
+ #: includes/admin/class-welcome.php:201
1376
+ msgid "Easy to Embed"
1377
+ msgstr ""
1378
+
1379
+ #: includes/admin/class-welcome.php:202
1380
  msgid ""
1381
+ "Easily embed your forms in blog posts, pages, sidebar widgets, footer, etc."
1382
+ msgstr ""
1383
+
1384
+ #: includes/admin/class-welcome.php:207
1385
+ msgid "Spam Protection"
1386
+ msgstr ""
1387
+
1388
+ #: includes/admin/class-welcome.php:208
1389
+ msgid "Our smart captcha and honeypot automatically prevent spam submissions."
1390
+ msgstr ""
1391
+
1392
+ #: includes/admin/class-welcome.php:214
1393
+ msgid "See All Features"
1394
+ msgstr ""
1395
+
1396
+ #: includes/admin/class-welcome.php:226 lite/wpforms-lite.php:438
1397
+ msgid "Upgrade to PRO"
1398
+ msgstr ""
1399
+
1400
+ #: includes/admin/class-welcome.php:228
1401
+ msgid "PayPal"
1402
+ msgstr ""
1403
+
1404
+ #: includes/admin/class-welcome.php:229
1405
+ msgid "Post Submissions"
1406
+ msgstr ""
1407
+
1408
+ #: includes/admin/class-welcome.php:230
1409
+ #: pro/includes/admin/entries/class-entries-single.php:757
1410
+ msgid "Stripe"
1411
+ msgstr ""
1412
+
1413
+ #: includes/admin/class-welcome.php:231
1414
+ msgid "Signatures"
1415
+ msgstr ""
1416
+
1417
+ #: includes/admin/class-welcome.php:232
1418
+ msgid "User Registration"
1419
+ msgstr ""
1420
+
1421
+ #: includes/admin/class-welcome.php:233
1422
+ msgid "Form Abandonment"
1423
+ msgstr ""
1424
+
1425
+ #: includes/admin/class-welcome.php:234
1426
+ msgid "Geolocation"
1427
+ msgstr ""
1428
+
1429
+ #: includes/admin/class-welcome.php:235
1430
+ msgid "Unlimited Sites"
1431
  msgstr ""
1432
 
1433
+ #: includes/admin/class-welcome.php:236
1434
+ msgid "Zapier"
1435
  msgstr ""
1436
 
1437
+ #: includes/admin/class-welcome.php:237
1438
+ msgid "Priority Support"
1439
  msgstr ""
1440
 
1441
+ #: includes/admin/class-welcome.php:242
1442
+ msgid "PRO"
 
 
1443
  msgstr ""
1444
 
1445
+ #: includes/admin/class-welcome.php:245
1446
+ msgid "per year"
1447
  msgstr ""
1448
 
1449
+ #: includes/admin/class-welcome.php:247 pro/includes/admin/class-addons.php:249
1450
+ msgid "Upgrade Now"
 
 
 
1451
  msgstr ""
1452
 
1453
+ #: includes/admin/class-welcome.php:258
1454
+ msgid "Testimonials"
 
 
1455
  msgstr ""
1456
 
1457
+ #: includes/admin/class-welcome.php:262
1458
+ msgid ""
1459
+ "WPForms is by far the easiest form plugin to use. My clients love it – it’s "
1460
+ "one of the few plugins they can use without any training. As a developer I "
1461
+ "appreciate how fast, modern, clean and extensible it is."
1462
  msgstr ""
1463
 
1464
+ #: includes/admin/class-welcome.php:268
1465
  msgid ""
1466
+ "As a business owner, time is my most valuable asset. WPForms allow me to "
1467
+ "create smart online forms with just a few clicks. With their pre-built form "
1468
+ "templates and the drag & drop builder, I can create a new form that works in "
1469
+ "less than 2 minutes without writing a single line of code. Well worth the "
1470
+ "investment."
1471
  msgstr ""
1472
 
1473
+ #: includes/admin/class-welcome.php:285
1474
+ msgid "Upgrade to WPForms Pro"
1475
  msgstr ""
1476
 
1477
  #: includes/admin/overview/class-overview-table.php:53
1524
 
1525
  #: includes/admin/overview/class-overview-table.php:173
1526
  #: includes/admin/overview/class-overview-table.php:191
1527
+ #: pro/includes/admin/entries/class-entries-list-table.php:341
1528
+ #: pro/includes/admin/entries/class-entries-list-table.php:362
1529
+ #: pro/includes/admin/entries/class-entries-single.php:596
1530
  msgid "Delete"
1531
  msgstr ""
1532
 
1551
  msgid "Number of forms per page:"
1552
  msgstr ""
1553
 
1554
+ #: includes/admin/overview/class-overview.php:123
1555
+ msgid "Forms Overview"
1556
  msgstr ""
1557
 
1558
+ #: includes/admin/settings-api.php:69
1559
+ msgid "The callback function used for the %s setting is missing."
1560
  msgstr ""
1561
 
1562
+ #: includes/admin/settings-api.php:97
1563
+ msgid "You're using WPForms Lite - no license needed. Enjoy!"
1564
+ msgstr ""
1565
+
1566
+ #: includes/admin/settings-api.php:98
1567
+ msgid ""
1568
+ "To unlock more features consider <a href=\"%s\" target=\"_blank\" rel="
1569
+ "\"noopener noreferrer\">upgrading to Pro</a>.</p>"
1570
+ msgstr ""
1571
+
1572
+ #: includes/admin/settings-api.php:106
1573
+ msgid "Verify Key"
1574
+ msgstr ""
1575
+
1576
+ #: includes/admin/settings-api.php:110
1577
+ msgid "Deactivate Key"
1578
+ msgstr ""
1579
+
1580
+ #: includes/admin/settings-api.php:114
1581
+ msgid "You're license key type is "
1582
+ msgstr ""
1583
+
1584
+ #: includes/admin/settings-api.php:115
1585
+ msgid ""
1586
+ "If your license has been upgraded or is incorrect, <a href=\"#\" id="
1587
+ "\"wpforms-setting-license-key-refresh\">click here to force a refresh</a>."
1588
+ msgstr ""
1589
+
1590
+ #: includes/admin/settings-api.php:253
1591
+ msgid "Upload Image"
1592
  msgstr ""
1593
 
1594
  #: includes/class-conditional-logic-core.php:158
1620
  msgid "Add rule group"
1621
  msgstr ""
1622
 
1623
+ #: includes/class-frontend.php:974
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1624
  #: pro/includes/fields/class-file-upload.php:367
1625
  #: pro/includes/fields/class-file-upload.php:383
1626
+ #: pro/includes/fields/class-file-upload.php:400 pro/wpforms-pro.php:180
1627
  msgid "File type is not allowed."
1628
  msgstr ""
1629
 
1630
+ #: includes/class-frontend.php:975 pro/wpforms-pro.php:186
1631
  msgid "File exceeds max size allowed."
1632
  msgstr ""
1633
 
1634
+ #: includes/class-frontend.php:976 pro/wpforms-pro.php:192
1635
  msgid "Please enter time in 12-hour AM/PM format (eg 8:45 AM)."
1636
  msgstr ""
1637
 
1638
+ #: includes/class-frontend.php:977 pro/wpforms-pro.php:198
1639
  msgid "Please enter time in 24-hour format (eg 22:45)."
1640
  msgstr ""
1641
 
1642
+ #: includes/class-frontend.php:978 pro/wpforms-pro.php:204
1643
  msgid "Payment is required."
1644
  msgstr ""
1645
 
1646
+ #: includes/class-frontend.php:979 pro/wpforms-pro.php:210
1647
  msgid "Please enter a valid credit card number."
1648
  msgstr ""
1649
 
1655
  msgid "Logs"
1656
  msgstr ""
1657
 
1658
+ #: includes/class-preview.php:113
1659
+ msgid "Hide empty fields"
1660
+ msgstr ""
1661
+
1662
+ #: includes/class-preview.php:115 includes/class-preview.php:155
1663
+ msgid "Show empty fields"
1664
+ msgstr ""
1665
+
1666
+ #: includes/class-preview.php:124
1667
+ msgid "Hide notes"
1668
+ msgstr ""
1669
+
1670
+ #: includes/class-preview.php:126
1671
+ msgid "Show notes"
1672
+ msgstr ""
1673
+
1674
+ #: includes/class-preview.php:135
1675
+ msgid "Normal view"
1676
+ msgstr ""
1677
+
1678
+ #: includes/class-preview.php:137 includes/class-preview.php:157
1679
+ msgid "Compact view"
1680
+ msgstr ""
1681
+
1682
+ #: includes/class-preview.php:148
1683
  msgid "Entry #%d"
1684
  msgstr ""
1685
 
1686
+ #: includes/class-preview.php:151
1687
+ #: pro/includes/admin/entries/class-entries-single.php:898
1688
+ msgid "Print"
1689
+ msgstr ""
1690
+
1691
+ #: includes/class-preview.php:156
1692
+ msgid "Show note"
1693
+ msgstr ""
1694
+
1695
+ #: includes/class-preview.php:165
1696
+ #: pro/includes/admin/entries/class-entries-single.php:482
1697
  msgid "This entry does not have any fields"
1698
  msgstr ""
1699
 
1700
+ #: includes/class-preview.php:181
1701
+ #: pro/includes/admin/entries/class-entries-single.php:498
1702
  msgid "Field ID #%d"
1703
  msgstr ""
1704
 
1705
+ #: includes/class-preview.php:185
1706
+ #: pro/includes/admin/entries/class-entries-single.php:503
1707
  msgid "Empty"
1708
  msgstr ""
1709
 
1710
+ #: includes/class-preview.php:196
1711
+ #: pro/includes/admin/entries/class-entries-single.php:538
1712
+ msgid "Notes"
1713
+ msgstr ""
1714
+
1715
+ #: includes/class-preview.php:210
1716
+ msgid "Added by %s on %s"
1717
+ msgstr ""
1718
+
1719
+ #: includes/class-preview.php:257
1720
  msgid ""
1721
  "This is the WPForms preview page. All your form previews will be handled on "
1722
  "this page."
1723
  msgstr ""
1724
 
1725
+ #: includes/class-preview.php:258
1726
  msgid ""
1727
  "The page is set to private, so it is not publicly accessible. Please do not "
1728
  "delete this page :) ."
1729
  msgstr ""
1730
 
1731
+ #: includes/class-preview.php:263
1732
  msgid "WPForms Preview"
1733
  msgstr ""
1734
 
1735
+ #: includes/class-preview.php:345
1736
  msgid "This is a preview of your form. This page is not publicly accessible."
1737
  msgstr ""
1738
 
1739
+ #: includes/class-preview.php:347
1740
  msgid "Close this window"
1741
  msgstr ""
1742
 
1743
+ #: includes/class-preview.php:349
1744
  msgid " Preview"
1745
  msgstr ""
1746
 
1764
  msgid "WPForms honeypot field triggered."
1765
  msgstr ""
1766
 
1767
+ #: includes/class-process.php:354 lite/wpforms-lite.php:53
1768
+ #: pro/wpforms-pro.php:346
1769
  msgid "New %s Entry"
1770
  msgstr ""
1771
 
1795
 
1796
  #: includes/class-smart-tags.php:40
1797
  #: pro/includes/admin/entries/class-entries-export.php:178
1798
+ #: pro/includes/admin/entries/class-entries-list-table.php:136
1799
  #: pro/includes/fields/class-date-time.php:69
1800
  #: pro/includes/fields/class-date-time.php:117
1801
  #: pro/includes/fields/class-date-time.php:244
1856
  msgid "Lost Password URL"
1857
  msgstr ""
1858
 
1859
+ #: includes/class-widget.php:127
1860
  msgid "No forms"
1861
  msgstr ""
1862
 
1888
  msgid "Sent from <a href=\"%s\" style=\"color:#bbbbbb;\">%s</a>"
1889
  msgstr ""
1890
 
1891
+ #: includes/fields/class-base.php:305
1892
  msgid ""
1893
  "Enter text for the form field label. Field labels are recommended and can be "
1894
  "hidden in the Advanced Settings."
1895
  msgstr ""
1896
 
1897
+ #: includes/fields/class-base.php:306
1898
  msgid "Label"
1899
  msgstr ""
1900
 
1901
+ #: includes/fields/class-base.php:315
1902
  msgid "Enter text for the form field description."
1903
  msgstr ""
1904
 
1905
+ #: includes/fields/class-base.php:316
1906
  msgid "Description"
1907
  msgstr ""
1908
 
1909
+ #: includes/fields/class-base.php:326
1910
  msgid ""
1911
  "Check this option to mark the field required. A form will not submit unless "
1912
  "all required fields are provided."
1913
  msgstr ""
1914
 
1915
+ #: includes/fields/class-base.php:343
 
 
 
 
 
 
1916
  msgid "Enter code for the form field."
1917
  msgstr ""
1918
 
1919
+ #: includes/fields/class-base.php:344
1920
  msgid "Code"
1921
  msgstr ""
1922
 
1923
+ #: includes/fields/class-base.php:353 includes/fields/class-base.php:427
1924
  msgid "Add choices for the form field."
1925
  msgstr ""
1926
 
1927
+ #: includes/fields/class-base.php:366
1928
  msgid "Choices"
1929
  msgstr ""
1930
 
1931
+ #: includes/fields/class-base.php:409
1932
  msgid ""
1933
  "Choices are dynamically populated from the <span class=\"dynamic-name\">%s</"
1934
  "span> <span class=\"dynamic-type\">%s</span>"
1935
  msgstr ""
1936
 
1937
+ #: includes/fields/class-base.php:436
1938
  msgid "Items"
1939
  msgstr ""
1940
 
1941
+ #: includes/fields/class-base.php:478
1942
  msgid "Enter text for the default form field value."
1943
  msgstr ""
1944
 
1945
+ #: includes/fields/class-base.php:480 includes/fields/class-name.php:283
1946
  #: includes/fields/class-name.php:298 includes/fields/class-name.php:313
1947
  #: includes/fields/class-name.php:328 pro/includes/fields/class-address.php:117
1948
  #: pro/includes/fields/class-address.php:133
1953
  msgid "Default Value"
1954
  msgstr ""
1955
 
1956
+ #: includes/fields/class-base.php:490
1957
  msgid "Select the default form field size."
1958
  msgstr ""
1959
 
1960
+ #: includes/fields/class-base.php:492
1961
  msgid "Small"
1962
  msgstr ""
1963
 
1964
+ #: includes/fields/class-base.php:493
1965
  msgid "Medium"
1966
  msgstr ""
1967
 
1968
+ #: includes/fields/class-base.php:494
1969
  msgid "Large"
1970
  msgstr ""
1971
 
1972
+ #: includes/fields/class-base.php:496
1973
  msgid "Field Size"
1974
  msgstr ""
1975
 
1976
+ #: includes/fields/class-base.php:509
1977
  msgid "Advanced Options"
1978
  msgstr ""
1979
 
1980
+ #: includes/fields/class-base.php:520
1981
  msgid "Enter text for the form field placeholder."
1982
  msgstr ""
1983
 
1984
+ #: includes/fields/class-base.php:521
1985
  msgid "Placeholder Text"
1986
  msgstr ""
1987
 
1988
+ #: includes/fields/class-base.php:531
1989
  msgid ""
1990
  "Enter CSS class names for the form field container. Class names should be "
1991
  "separated with spaces."
1992
  msgstr ""
1993
 
1994
+ #: includes/fields/class-base.php:536
1995
  msgid "CSS Classes"
1996
  msgstr ""
1997
 
1998
+ #: includes/fields/class-base.php:545
1999
  msgid "Check this option to hide the form field label."
2000
  msgstr ""
2001
 
2002
+ #: includes/fields/class-base.php:547
2003
  msgid "Hide Label"
2004
  msgstr ""
2005
 
2006
+ #: includes/fields/class-base.php:555
2007
  msgid "Check this option to hide the form field sub-label."
2008
  msgstr ""
2009
 
2010
+ #: includes/fields/class-base.php:557
2011
  msgid "Hide Sub-Labels"
2012
  msgstr ""
2013
 
2014
+ #: includes/fields/class-base.php:565
2015
  msgid "Select the layout for displaying field choices."
2016
  msgstr ""
2017
 
2018
+ #: includes/fields/class-base.php:567
2019
  msgid "One Column"
2020
  msgstr ""
2021
 
2022
+ #: includes/fields/class-base.php:568
2023
  msgid "Two Columns"
2024
  msgstr ""
2025
 
2026
+ #: includes/fields/class-base.php:569
2027
  msgid "Three Columns"
2028
  msgstr ""
2029
 
2030
+ #: includes/fields/class-base.php:571
2031
  msgid "Choice Layout"
2032
  msgstr ""
2033
 
2034
+ #: includes/fields/class-base.php:580
2035
  msgid "Select auto-populate method to use."
2036
  msgstr ""
2037
 
2038
+ #: includes/fields/class-base.php:583 includes/fields/class-base.php:602
2039
  msgid "Post Type"
2040
  msgstr ""
2041
 
2042
+ #: includes/fields/class-base.php:584 includes/fields/class-base.php:608
2043
  msgid "Taxonomy"
2044
  msgstr ""
2045
 
2046
+ #: includes/fields/class-base.php:586
2047
  msgid "Dynamic Choices"
2048
  msgstr ""
2049
 
2050
+ #: includes/fields/class-base.php:613
2051
  msgid "Select %s to use for auto-populating field choices."
2052
  msgstr ""
2053
 
2054
+ #: includes/fields/class-base.php:614
2055
  msgid "Dynamic %s Source"
2056
  msgstr ""
2057
 
2058
+ #: includes/fields/class-base.php:726
2059
+ msgid "You do no have permission."
2060
+ msgstr ""
2061
+
2062
+ #: includes/fields/class-base.php:731
2063
  msgid "No form ID found"
2064
  msgstr ""
2065
 
2066
+ #: includes/fields/class-base.php:736
2067
  msgid "No field type found"
2068
  msgstr ""
2069
 
2070
+ #: includes/fields/class-base.php:864 includes/fields/class-name.php:485
2071
  #: includes/fields/class-number.php:152
2072
  #: pro/includes/fields/class-address.php:624
2073
  #: pro/includes/fields/class-date-time.php:532
2114
  "viewing the form."
2115
  msgstr ""
2116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2117
  #: includes/fields/class-email.php:91 includes/fields/class-email.php:311
2118
  msgid "Confirm Email"
2119
  msgstr ""
2120
 
2121
  #: includes/fields/class-email.php:207
 
2122
  msgid "Enable Email Confirmation"
2123
  msgstr ""
2124
 
2125
  #: includes/fields/class-email.php:208
 
2126
  msgid "Check this option ask the user to provide their email address twice."
2127
  msgstr ""
2128
 
2667
  msgstr ""
2668
 
2669
  #: includes/templates/class-subscribe.php:20
2670
+ msgid "Newsletter Signup Form"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2671
  msgstr ""
2672
 
2673
+ #: includes/templates/class-subscribe.php:22
 
2674
  msgid ""
2675
+ "Add subscribers and grow your email list with this newsletter signup form. "
2676
+ "You can add and remove fields as needed."
 
2677
  msgstr ""
2678
 
2679
+ #: includes/templates/class-subscribe.php:26
2680
+ #: pro/includes/templates/class-donation.php:26
2681
+ #: pro/includes/templates/class-order.php:26
2682
+ msgid "Don&#39;t Forget"
2683
  msgstr ""
2684
 
2685
+ #: includes/templates/class-subscribe.php:27
2686
+ msgid "Click the marketing tab to configure your newsletter service provider"
 
2687
  msgstr ""
2688
 
2689
+ #: includes/templates/class-suggestion.php:20
2690
+ msgid "Suggestion Form"
 
2691
  msgstr ""
2692
 
2693
+ #: includes/templates/class-suggestion.php:22
2694
+ msgid ""
2695
+ "Ask your users for suggestions with this simple form template. You can add "
2696
+ "and remove fields as needed."
2697
  msgstr ""
2698
 
2699
+ #: includes/templates/class-suggestion.php:40
2700
+ msgid "Please enter your email, so we can follow up with you."
 
2701
  msgstr ""
2702
 
2703
+ #: includes/templates/class-suggestion.php:47
2704
+ msgid "Which department do you have a suggestion for?"
 
2705
  msgstr ""
2706
 
2707
+ #: includes/templates/class-suggestion.php:50
2708
+ msgid "Sales"
 
2709
  msgstr ""
2710
 
2711
+ #: includes/templates/class-suggestion.php:53
2712
+ msgid "Customer Support"
 
2713
  msgstr ""
2714
 
2715
+ #: includes/templates/class-suggestion.php:56
2716
+ msgid "Product Development"
 
 
 
 
2717
  msgstr ""
2718
 
2719
+ #: includes/templates/class-suggestion.php:67
2720
+ msgid "Subject"
 
 
 
 
 
2721
  msgstr ""
2722
 
2723
+ #: lite/wpforms-lite.php:84 pro/wpforms-pro.php:374
2724
  msgid "Default Notification"
2725
  msgstr ""
2726
 
2727
+ #: lite/wpforms-lite.php:92 pro/wpforms-pro.php:389
2728
  msgid "Send To Email Address"
2729
  msgstr ""
2730
 
2731
+ #: lite/wpforms-lite.php:95 pro/wpforms-pro.php:392
2732
  msgid ""
2733
  "Enter the email address to receive form entry notifications. For multiple "
2734
  "notifications, separate email addresses with a comma."
2735
  msgstr ""
2736
 
2737
+ #: lite/wpforms-lite.php:111 pro/wpforms-pro.php:408
2738
  msgid "CC"
2739
  msgstr ""
2740
 
2741
+ #: lite/wpforms-lite.php:127 pro/wpforms-pro.php:424
2742
  msgid "Email Subject"
2743
  msgstr ""
2744
 
2745
+ #: lite/wpforms-lite.php:129 pro/wpforms-pro.php:426
2746
  msgid "New Entry: "
2747
  msgstr ""
2748
 
2749
+ #: lite/wpforms-lite.php:142 pro/wpforms-pro.php:439
2750
  msgid "From Name"
2751
  msgstr ""
2752
 
2753
+ #: lite/wpforms-lite.php:158 pro/wpforms-pro.php:455
2754
  msgid "From Email"
2755
  msgstr ""
2756
 
2757
+ #: lite/wpforms-lite.php:174 pro/wpforms-pro.php:471
2758
  msgid "Reply-To"
2759
  msgstr ""
2760
 
2761
+ #: lite/wpforms-lite.php:199 pro/wpforms-pro.php:496
2762
  msgid ""
2763
  "To display all form fields, use the <code>{all_fields}</code> Smart Tag."
2764
  msgstr ""
2765
 
2766
+ #: lite/wpforms-lite.php:436
2767
  msgid "is a PRO Feature"
2768
  msgstr ""
2769
 
2770
+ #: lite/wpforms-lite.php:437
2771
  msgid ""
2772
  "We're sorry, %name% is not available on your plan.<br><br>Please upgrade to "
2773
  "the PRO plan to unlock all these awesome features."
2774
  msgstr ""
2775
 
 
 
 
 
2776
  #: pro/includes/admin/ajax-actions.php:24
2777
  msgid "Addon deactivated."
2778
  msgstr ""
2802
  msgid "Addon installed."
2803
  msgstr ""
2804
 
2805
+ #: pro/includes/admin/ajax-actions.php:189
2806
+ #: pro/includes/admin/ajax-actions.php:232
2807
+ msgid "Please enter a license key."
2808
+ msgstr ""
2809
+
2810
  #: pro/includes/admin/builder/panels/class-payments.php:21
2811
+ #: pro/wpforms-pro.php:149 pro/wpforms-pro.php:216
2812
  msgid "Payments"
2813
  msgstr ""
2814
 
2834
  "best to get it added as fast as possible"
2835
  msgstr ""
2836
 
2837
+ #: pro/includes/admin/class-addons.php:84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2838
  msgid "Refresh Addons"
2839
  msgstr ""
2840
 
2841
+ #: pro/includes/admin/class-addons.php:90
2842
  msgid ""
2843
  "There was an issue retrieving the addons for this site. Please click on the "
2844
  "button above the refresh the addons data."
2845
  msgstr ""
2846
 
2847
+ #: pro/includes/admin/class-addons.php:96
2848
  msgid ""
2849
  "In order to get access to Addons, you need to resolve your license key "
2850
  "errors."
2851
  msgstr ""
2852
 
2853
+ #: pro/includes/admin/class-addons.php:102
2854
  msgid ""
2855
  "In order to get access to Addons, you need to verify your license key for "
2856
  "WPForms."
2857
  msgstr ""
2858
 
2859
+ #: pro/includes/admin/class-addons.php:110
2860
+ msgid "Addons have successfully been refreshed."
2861
+ msgstr ""
2862
+
2863
+ #: pro/includes/admin/class-addons.php:118
2864
  msgid ""
2865
  "Improve your forms with our premium addons. Missing an addon that you think "
2866
+ "you should be able to see? Click the <a href=\"%s\">Refresh Addons</a> "
2867
+ "button above."
2868
  msgstr ""
2869
 
2870
+ #: pro/includes/admin/class-addons.php:121
2871
+ msgid "Available Addons"
2872
  msgstr ""
2873
 
2874
+ #: pro/includes/admin/class-addons.php:166
2875
  msgid "Unlock More Features..."
2876
  msgstr ""
2877
 
2878
+ #: pro/includes/admin/class-addons.php:167
2879
  msgid ""
2880
+ "Want to get even more features? <a href=\"%s\" target=\"_blank\" rel="
2881
+ "\"noopener noreferrer\">Upgrade your WPForms account</a> and unlock the "
2882
  "following extensions."
2883
  msgstr ""
2884
 
2885
+ #: pro/includes/admin/class-addons.php:201
2886
+ msgid "Not Installed"
2887
+ msgstr ""
2888
+
2889
+ #: pro/includes/admin/class-addons.php:225
2890
+ #: pro/includes/admin/entries/class-entries-list-table.php:133
2891
+ msgid "Status"
2892
  msgstr ""
2893
 
2894
  #: pro/includes/admin/class-license.php:93
2895
+ #: pro/includes/admin/class-license.php:179
2896
+ #: pro/includes/admin/class-license.php:268
2897
  msgid ""
2898
  "There was an error connecting to the remote key API. Please try again later."
2899
  msgstr ""
2900
 
2901
+ #: pro/includes/admin/class-license.php:112
2902
  msgid "Congratulations! This site is now receiving automatic updates."
2903
  msgstr ""
2904
 
2905
+ #: pro/includes/admin/class-license.php:198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2906
  msgid ""
2907
+ "\tYour license key for WPForms is invalid. The key no longer exists or the "
2908
  "user associated with the key has been deleted. Please use a different key to "
2909
  "continue receiving automatic updates."
2910
  msgstr ""
2911
 
2912
+ #: pro/includes/admin/class-license.php:211
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2913
  msgid ""
2914
+ "Your license key for WPForms has expired. Please renew your license key on "
2915
+ "WPForms.com to continue receiving automatic updates."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2916
  msgstr ""
2917
 
2918
+ #: pro/includes/admin/class-license.php:224
2919
+ #: pro/includes/admin/class-license.php:343
 
 
 
2920
  msgid ""
2921
+ "Your license key for WPForms has been disabled. Please use a different key "
2922
+ "to continue receiving automatic updates."
2923
  msgstr ""
2924
 
2925
+ #: pro/includes/admin/class-license.php:239
2926
+ msgid "Your key has been refreshed successfully."
2927
  msgstr ""
2928
 
2929
+ #: pro/includes/admin/class-license.php:288
2930
+ msgid "You have deactivated the key from this site successfully."
2931
  msgstr ""
2932
 
2933
+ #: pro/includes/admin/class-license.php:325
2934
  msgid ""
2935
+ "Please <a href=\"%s\">enter and activate</a> your license key for WPForms to "
2936
+ "enable automatic updates."
 
2937
  msgstr ""
2938
 
2939
+ #: pro/includes/admin/class-license.php:334
2940
  msgid ""
2941
+ "Your license key for WPForms has expired. <a href=\"%s\" target=\"_blank\" "
2942
+ "rel=\"noopener\">Please click here to renew your license key and continue "
2943
+ "receiving automatic updates.</a>"
2944
  msgstr ""
2945
 
2946
+ #: pro/includes/admin/class-license.php:352
2947
  msgid ""
2948
+ "Your license key for WPForms is invalid. The key no longer exists or the "
2949
+ "user associated with the key has been deleted. Please use a different key to "
2950
+ "continue receiving automatic updates."
 
 
 
 
 
 
 
 
 
 
 
 
2951
  msgstr ""
2952
 
2953
  #: pro/includes/admin/entries/class-entries-export.php:179
2958
  msgid "ID"
2959
  msgstr ""
2960
 
2961
+ #: pro/includes/admin/entries/class-entries-export.php:307
2962
  msgid "You do not have permission to export entries."
2963
  msgstr ""
2964
 
2965
+ #: pro/includes/admin/entries/class-entries-list-table.php:101
2966
  msgid "All"
2967
  msgstr ""
2968
 
2969
+ #: pro/includes/admin/entries/class-entries-list-table.php:102
2970
  msgid "Unread"
2971
  msgstr ""
2972
 
2973
+ #: pro/includes/admin/entries/class-entries-list-table.php:103
2974
  msgid "Starred"
2975
  msgstr ""
2976
 
2977
+ #: pro/includes/admin/entries/class-entries-list-table.php:127
2978
  #: pro/includes/fields/class-payment-total.php:21
2979
  msgid "Total"
2980
  msgstr ""
2981
 
2982
+ #: pro/includes/admin/entries/class-entries-list-table.php:137
2983
+ #: pro/includes/admin/entries/class-entries-single.php:929
 
 
 
 
2984
  msgid "Actions"
2985
  msgstr ""
2986
 
2987
+ #: pro/includes/admin/entries/class-entries-list-table.php:264
2988
+ #: pro/includes/admin/entries/class-entries-single.php:747
2989
  msgid "Unknown"
2990
  msgstr ""
2991
 
2992
+ #: pro/includes/admin/entries/class-entries-list-table.php:271
2993
+ #: pro/includes/admin/entries/class-entries-single.php:707
2994
  msgid "Completed"
2995
  msgstr ""
2996
 
2997
+ #: pro/includes/admin/entries/class-entries-list-table.php:333
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2998
  msgid "View Form Entry"
2999
  msgstr ""
3000
 
3001
+ #: pro/includes/admin/entries/class-entries-list-table.php:334
3002
  msgid "View"
3003
  msgstr ""
3004
 
3005
+ #: pro/includes/admin/entries/class-entries-list-table.php:340
3006
  msgid "Delete Form Entry"
3007
  msgstr ""
3008
 
3009
+ #: pro/includes/admin/entries/class-entries-list-table.php:356
3010
  msgid "Mark Read"
3011
  msgstr ""
3012
 
3013
+ #: pro/includes/admin/entries/class-entries-list-table.php:357
3014
+ #: pro/includes/admin/entries/class-entries-single.php:914
3015
  msgid "Mark Unread"
3016
  msgstr ""
3017
 
3018
+ #: pro/includes/admin/entries/class-entries-list-table.php:358
3019
+ #: pro/includes/admin/entries/class-entries-single.php:879
3020
  msgid "Star"
3021
  msgstr ""
3022
 
3023
+ #: pro/includes/admin/entries/class-entries-list-table.php:359
3024
+ #: pro/includes/admin/entries/class-entries-single.php:879
3025
  msgid "Unstar"
3026
  msgstr ""
3027
 
3028
+ #: pro/includes/admin/entries/class-entries-list-table.php:361
3029
  msgid "----------"
3030
  msgstr ""
3031
 
3032
+ #: pro/includes/admin/entries/class-entries-list-table.php:405
3033
  msgid "Entry marked as read."
3034
  msgid_plural "Entries marked as read."
3035
  msgstr[0] ""
3036
  msgstr[1] ""
3037
 
3038
+ #: pro/includes/admin/entries/class-entries-list-table.php:414
3039
  msgid "Entry marked as unread."
3040
  msgid_plural "Entries marked as unread."
3041
  msgstr[0] ""
3042
  msgstr[1] ""
3043
 
3044
+ #: pro/includes/admin/entries/class-entries-list-table.php:423
3045
  msgid "Entry starred."
3046
  msgid_plural "Entries starred."
3047
  msgstr[0] ""
3048
  msgstr[1] ""
3049
 
3050
+ #: pro/includes/admin/entries/class-entries-list-table.php:432
3051
  msgid "Entry unstarred."
3052
  msgid_plural "Entries unstarred."
3053
  msgstr[0] ""
3054
  msgstr[1] ""
3055
 
3056
+ #: pro/includes/admin/entries/class-entries-list-table.php:441
3057
  msgid "Entry successfully deleted."
3058
  msgid_plural "Entries successfully deleted."
3059
  msgstr[0] ""
3060
  msgstr[1] ""
3061
 
3062
+ #: pro/includes/admin/entries/class-entries-list-table.php:452
3063
  msgid "Whoops, it appears you do not have any form entries yet."
3064
  msgstr ""
3065
 
3066
+ #: pro/includes/admin/entries/class-entries-list.php:132
3067
  msgid "Number of entries per page:"
3068
  msgstr ""
3069
 
3070
+ #: pro/includes/admin/entries/class-entries-list.php:214
3071
+ msgid "All entries marked as read."
 
 
 
 
 
 
 
 
 
 
 
3072
  msgstr ""
3073
 
3074
+ #: pro/includes/admin/entries/class-entries-list.php:347
3075
+ msgid "Select Form"
3076
  msgstr ""
3077
 
3078
+ #: pro/includes/admin/entries/class-entries-list.php:353
3079
+ msgid "Open form selector"
3080
  msgstr ""
3081
 
3082
+ #: pro/includes/admin/entries/class-entries-list.php:378
3083
  msgid "Edit This Form"
3084
  msgstr ""
3085
 
3086
+ #: pro/includes/admin/entries/class-entries-list.php:388
3087
  msgid "Download Export (CSV)"
3088
  msgstr ""
3089
 
3090
+ #: pro/includes/admin/entries/class-entries-list.php:393
3091
  msgid "Mark All Read"
3092
  msgstr ""
3093
 
3094
+ #: pro/includes/admin/entries/class-entries-single.php:156
 
 
 
 
3095
  msgid "This entry has been starred."
3096
  msgstr ""
3097
 
3098
+ #: pro/includes/admin/entries/class-entries-single.php:168
3099
  msgid "This entry has been unstarred."
3100
  msgstr ""
3101
 
3102
+ #: pro/includes/admin/entries/class-entries-single.php:196
3103
  msgid "This entry has been marked unread."
3104
  msgstr ""
3105
 
3106
+ #: pro/includes/admin/entries/class-entries-single.php:223
3107
  msgid "Note deleted."
3108
  msgstr ""
3109
 
3110
+ #: pro/includes/admin/entries/class-entries-single.php:257
3111
  msgid "Note added."
3112
  msgstr ""
3113
 
3114
+ #: pro/includes/admin/entries/class-entries-single.php:291
3115
+ msgid "Notifications sent!"
3116
+ msgstr ""
3117
+
3118
+ #: pro/includes/admin/entries/class-entries-single.php:309
3119
  msgid "Invalid entry ID."
3120
  msgstr ""
3121
 
3122
+ #: pro/includes/admin/entries/class-entries-single.php:322
3123
  msgid "Entry not found."
3124
  msgstr ""
3125
 
3126
+ #: pro/includes/admin/entries/class-entries-single.php:335
3127
  msgid "Form not found."
3128
  msgstr ""
3129
 
3130
+ #: pro/includes/admin/entries/class-entries-single.php:407
 
 
 
 
3131
  msgid "View Entry"
3132
  msgstr ""
3133
 
3134
+ #: pro/includes/admin/entries/class-entries-single.php:409
3135
  msgid "Back to All Entries"
3136
  msgstr ""
3137
 
3138
+ #: pro/includes/admin/entries/class-entries-single.php:413
3139
  msgid "Entry %s of %s"
3140
  msgstr ""
3141
 
3142
+ #: pro/includes/admin/entries/class-entries-single.php:416
3143
  msgid "Previous form entry"
3144
  msgstr ""
3145
 
3146
+ #: pro/includes/admin/entries/class-entries-single.php:417
3147
  msgid "Current form entry"
3148
  msgstr ""
3149
 
3150
+ #: pro/includes/admin/entries/class-entries-single.php:418
3151
  msgid "Next form entry"
3152
  msgstr ""
3153
 
3154
+ #: pro/includes/admin/entries/class-entries-single.php:544
3155
+ #: pro/includes/admin/entries/class-entries-single.php:559
 
 
 
 
3156
  msgid "Add Note"
3157
  msgstr ""
3158
 
3159
+ #: pro/includes/admin/entries/class-entries-single.php:568
3160
  msgid "No notes."
3161
  msgstr ""
3162
 
3163
+ #: pro/includes/admin/entries/class-entries-single.php:596
3164
  msgid "Added by"
3165
  msgstr ""
3166
 
3167
+ #: pro/includes/admin/entries/class-entries-single.php:596
3168
  msgid "on"
3169
  msgstr ""
3170
 
3171
+ #: pro/includes/admin/entries/class-entries-single.php:629
3172
  msgid "Debug Information"
3173
  msgstr ""
3174
 
3175
+ #: pro/includes/admin/entries/class-entries-single.php:656
3176
  msgid "Entry Details"
3177
  msgstr ""
3178
 
3179
+ #: pro/includes/admin/entries/class-entries-single.php:664
3180
  msgid "Entry ID:"
3181
  msgstr ""
3182
 
3183
+ #: pro/includes/admin/entries/class-entries-single.php:670
3184
  msgid "Submitted:"
3185
  msgstr ""
3186
 
3187
+ #: pro/includes/admin/entries/class-entries-single.php:677
3188
  msgid "Modified :"
3189
  msgstr ""
3190
 
3191
+ #: pro/includes/admin/entries/class-entries-single.php:678
3192
  msgid "M j, Y @ H:i"
3193
  msgstr ""
3194
 
3195
+ #: pro/includes/admin/entries/class-entries-single.php:686
3196
  msgid "User:"
3197
  msgstr ""
3198
 
3199
+ #: pro/includes/admin/entries/class-entries-single.php:698
3200
  msgid "User IP:"
3201
  msgstr ""
3202
 
3203
+ #: pro/includes/admin/entries/class-entries-single.php:706
3204
  msgid "Status:"
3205
  msgstr ""
3206
 
3207
+ #: pro/includes/admin/entries/class-entries-single.php:763
 
 
 
 
3208
  msgid "PayPal Standard"
3209
  msgstr ""
3210
 
3211
+ #: pro/includes/admin/entries/class-entries-single.php:775
3212
  msgid "Payment Details"
3213
  msgstr ""
3214
 
3215
+ #: pro/includes/admin/entries/class-entries-single.php:782
3216
  msgid " Status:"
3217
  msgstr ""
3218
 
3219
+ #: pro/includes/admin/entries/class-entries-single.php:786
3220
  msgid " Total:"
3221
  msgstr ""
3222
 
3223
+ #: pro/includes/admin/entries/class-entries-single.php:791
3224
  msgid " Gateway:"
3225
  msgstr ""
3226
 
3227
+ #: pro/includes/admin/entries/class-entries-single.php:793
3228
  msgid "Test"
3229
  msgstr ""
3230
 
3231
+ #: pro/includes/admin/entries/class-entries-single.php:799
3232
  msgid "Transaction ID:"
3233
  msgstr ""
3234
 
3235
+ #: pro/includes/admin/entries/class-entries-single.php:804
3236
  msgid "Note:"
3237
  msgstr ""
3238
 
3239
+ #: pro/includes/admin/entries/class-entries-single.php:903
 
 
 
 
3240
  msgid "Export (CSV)"
3241
  msgstr ""
3242
 
3243
+ #: pro/includes/admin/entries/class-entries-single.php:908
3244
  msgid "Resend Notifications"
3245
  msgstr ""
3246
 
3247
+ #: pro/includes/admin/entries/class-entries-single.php:975
3248
  msgid "Related Entries"
3249
  msgstr ""
3250
 
3251
+ #: pro/includes/admin/entries/class-entries-single.php:979
3252
  msgid "The user who created this entry also submitted the entries below."
3253
  msgstr ""
3254
 
3255
+ #: pro/includes/admin/entries/class-entries-single.php:994
3256
  msgid "(Abandoned)"
3257
  msgstr ""
3258
 
3364
  msgid "Date Dropdown"
3365
  msgstr ""
3366
 
 
 
 
 
3367
  #: pro/includes/fields/class-date-time.php:152
3368
  msgid "15 minutes"
3369
  msgstr ""
3507
  msgid "Connector"
3508
  msgstr ""
3509
 
3510
+ #: pro/includes/fields/class-page-break.php:274
3511
+ msgid "None"
3512
+ msgstr ""
3513
+
3514
  #: pro/includes/fields/class-page-break.php:281
3515
  msgid "Progress Indicator"
3516
  msgstr ""
3604
  msgid "Confirm Password"
3605
  msgstr ""
3606
 
3607
+ #: pro/includes/fields/class-password.php:188
3608
+ msgid "Enable Password Confirmation"
3609
+ msgstr ""
3610
+
3611
+ #: pro/includes/fields/class-password.php:189
3612
+ msgid "Check this option ask the user to provide their password twice."
3613
+ msgstr ""
3614
+
3615
+ #: pro/includes/fields/class-payment-credit-card.php:21 pro/wpforms-pro.php:208
3616
+ msgid "Credit Card"
3617
+ msgstr ""
3618
+
3619
  #: pro/includes/fields/class-payment-credit-card.php:73
3620
  #: pro/includes/fields/class-payment-credit-card.php:277
3621
  msgid "Card Number"
3910
  msgid "Request"
3911
  msgstr ""
3912
 
3913
+ #: pro/wpforms-pro.php:178
3914
+ msgid "File Extension"
3915
+ msgstr ""
3916
+
3917
+ #: pro/wpforms-pro.php:184
3918
+ msgid "File Size"
3919
+ msgstr ""
3920
+
3921
+ #: pro/wpforms-pro.php:190
3922
+ msgid "Time (12 hour)"
3923
+ msgstr ""
3924
+
3925
+ #: pro/wpforms-pro.php:196
3926
+ msgid "Time (24 hour)"
3927
+ msgstr ""
3928
+
3929
+ #: pro/wpforms-pro.php:202
3930
+ msgid "Payment Required"
3931
+ msgstr ""
3932
+
3933
+ #: pro/wpforms-pro.php:223
3934
+ msgid "Currency"
3935
+ msgstr ""
3936
+
3937
+ #: pro/wpforms-pro.php:293
3938
  msgid "Disable storing entry information in WordPress"
3939
  msgstr ""
3940
 
3941
+ #: pro/wpforms-pro.php:354
3942
  msgid "Add New Notification"
3943
  msgstr ""
3944
 
3945
+ #: pro/wpforms-pro.php:509
3946
  msgid "Send"
3947
  msgstr ""
3948
 
3949
+ #: pro/wpforms-pro.php:510
3950
  msgid "Don't send"
3951
  msgstr ""
3952
 
3953
+ #: pro/wpforms-pro.php:512
3954
  msgid "this notification if"
3955
  msgstr ""
3956
 
3957
+ #: pro/wpforms-pro.php:513
3958
  msgid "Email notifications"
3959
  msgstr ""
3960
 
3961
+ #: pro/wpforms-pro.php:516
3962
  msgid ""
3963
  "Install the <a href=\"%s\">Conditional Logic add-on</a> to enable "
3964
  "conditional logic for Email Notifications."
3965
  msgstr ""
3966
 
3967
+ #: pro/wpforms-pro.php:559
3968
  msgid ""
3969
  "Conditional logic functionality is now included in the core WPForms plugin! "
3970
  "The WPForms Conditional Logic addon can be removed without affecting your "
3972
  "noreferrer\">read our annoucement</a>."
3973
  msgstr ""
3974
 
3975
+ #: wpforms.php:58
3976
  msgid "Please deactivate WPForms Lite before activating WPForms"
3977
  msgstr ""
3978
 
3979
+ #. #-#-#-#-# wpforms.pot (WPForms 1.3.9.1) #-#-#-#-#
3980
  #. Plugin URI of the plugin/theme
3981
+ #. #-#-#-#-# wpforms.pot (WPForms 1.3.9.1) #-#-#-#-#
3982
  #. Author URI of the plugin/theme
3983
  msgid "https://wpforms.com"
3984
  msgstr ""
lite/includes/admin/class-settings.php DELETED
@@ -1,699 +0,0 @@
1
- <?php
2
- /**
3
- * Settings class.
4
- *
5
- * @package WPForms
6
- * @author WPForms
7
- * @since 1.0.0
8
- * @license GPL-2.0+
9
- * @copyright Copyright (c) 2016, WPForms LLC
10
- */
11
- class WPForms_Settings {
12
-
13
- /**
14
- * Holds the plugin settings.
15
- *
16
- * @since 1.0.0
17
- * @var array
18
- */
19
- protected $options;
20
-
21
- /**
22
- * The available forms.
23
- *
24
- * @since 1.3.7
25
- * @var array
26
- */
27
- public $forms = false;
28
-
29
- /**
30
- * Primary class constructor.
31
- *
32
- * @since 1.0.0
33
- */
34
- public function __construct() {
35
-
36
- // Maybe load settings page
37
- add_action( 'admin_init', array( $this, 'init' ) );
38
-
39
- // Plugin settings link
40
- add_filter( 'plugin_action_links_' . plugin_basename( WPFORMS_PLUGIN_DIR . 'wpforms.php' ), array( $this, 'settings_link' ) );
41
- }
42
-
43
- /**
44
- * Get the value of a specific setting.
45
- *
46
- * @since 1.0.0
47
- * @param string $key
48
- * @param bool $default
49
- * @param string $option
50
- * @return mixed
51
- */
52
- public function get( $key, $default = false, $option = 'wpforms_settings' ) {
53
-
54
- if ( 'wpforms_settings' === $option && ! empty( $this->options ) ) {
55
- $options = $this->options;
56
- } else {
57
- $options = get_option( $option, false );
58
- }
59
-
60
- return ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
61
- }
62
-
63
- /**
64
- * Determing if the user is viewing the settings page, if so, party on.
65
- *
66
- * @since 1.0.0
67
- */
68
- public function init() {
69
-
70
- // Check what page we are on.
71
- $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
72
-
73
- // Only load if we are actually on the settings page.
74
- if ( 'wpforms-settings' === $page ) {
75
-
76
- // Retrieve settings.
77
- $this->options = get_option( 'wpforms_settings', array() );
78
-
79
- // Retrieve available forms.
80
- $args = array(
81
- 'orderby' => 'title',
82
- );
83
- $this->forms = wpforms()->form->get( '', $args );
84
-
85
- add_action( 'wpforms_tab_settings_general', array( $this, 'settings_page_tab_general' ) );
86
- add_action( 'wpforms_tab_settings_providers', array( $this, 'settings_page_tab_providers' ) );
87
- add_action( 'wpforms_tab_settings_system', array( $this, 'settings_page_tab_system' ) );
88
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
89
- add_action( 'wpforms_admin_page', array( $this, 'output' ) );
90
-
91
- // Hook for add-ons
92
- do_action( 'wpforms_settings_init' );
93
- }
94
- }
95
-
96
- /**
97
- * Enqueue assets for the settings page.
98
- *
99
- * @since 1.0.0
100
- */
101
- public function enqueues() {
102
-
103
- wp_enqueue_media();
104
-
105
- // CSS
106
- wp_enqueue_style(
107
- 'font-awesome',
108
- WPFORMS_PLUGIN_URL . 'assets/css/font-awesome.min.css',
109
- null,
110
- '4.4.0'
111
- );
112
-
113
- wp_enqueue_style(
114
- 'wpforms-settings',
115
- WPFORMS_PLUGIN_URL . 'assets/css/admin-settings.css',
116
- null,
117
- WPFORMS_VERSION
118
- );
119
-
120
- wp_enqueue_style(
121
- 'minicolors',
122
- WPFORMS_PLUGIN_URL . 'assets/css/jquery.minicolors.css',
123
- null,
124
- '2.2.3'
125
- );
126
-
127
- // JS
128
- wp_enqueue_script(
129
- 'minicolors',
130
- WPFORMS_PLUGIN_URL . 'assets/js/jquery.minicolors.min.js',
131
- array( 'jquery' ),
132
- '2.2.3',
133
- false
134
- );
135
-
136
- wp_enqueue_script(
137
- 'wpforms-settings',
138
- WPFORMS_PLUGIN_URL . 'assets/js/admin-settings.js',
139
- array( 'jquery' ),
140
- WPFORMS_VERSION,
141
- false
142
- );
143
- wp_localize_script(
144
- 'wpforms-settings',
145
- 'wpforms_settings',
146
- array(
147
- 'ajax_url' => admin_url( 'admin-ajax.php' ),
148
- 'nonce' => wp_create_nonce( 'wpforms-settings' ),
149
- 'saving' => __( 'Saving ...', 'wpforms' ),
150
- 'provider_disconnect' => __( 'Are you sure you want to disconnect this account?', 'wpforms' ),
151
- 'upload_title' => __( 'Upload or Choose Your Image', 'wpforms' ),
152
- 'upload_button' => __( 'Use Image', 'wpforms' ),
153
- )
154
- );
155
-
156
- // Hook for add-ons.
157
- do_action( 'wpforms_settings_enqueue' );
158
- }
159
-
160
- /**
161
- * Handles generating the appropriate tabs and setting sections.
162
- *
163
- * @since 1.0.0
164
- * @return array
165
- */
166
- public function setting_page_tabs() {
167
-
168
- // Define our base tabs.
169
- $tabs = array(
170
- 'general' => __( 'General', 'wpforms' ),
171
- 'providers' => __( 'Integrations', 'wpforms' ),
172
- 'system' => __( 'System Info', 'wpforms' ),
173
- );
174
-
175
- // Allow for addons and extensions to add additional tabs.
176
- $tabs = apply_filters( 'wpform_settings_tabs', $tabs );
177
-
178
- return $tabs;
179
- }
180
-
181
- /**
182
- * Build the output for General tab on the settings page and check for save.
183
- *
184
- * @since 1.0.0
185
- */
186
- public function settings_page_tab_general() {
187
-
188
- // Check for save, if found let's dance.
189
- if ( ! empty( $_POST['wpforms-settings-general-nonce'] ) ) {
190
-
191
- // Do we have a valid nonce and permission?.
192
- if ( ! wp_verify_nonce( $_POST['wpforms-settings-general-nonce'], 'wpforms-settings-general-nonce' ) || ! current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
193
-
194
- // No funny business.
195
- printf( '<div class="error below-h2"><p>%s</p></div>', __( 'Settings check failed.', 'wpforms' ) );
196
-
197
- } else {
198
-
199
- // Save General Settings.
200
- if ( isset( $_POST['submit-general'] ) ) {
201
-
202
- // Prep and sanatize settings for save.
203
- $this->options['email-template'] = ! empty( $_POST['email-template'] ) ? esc_attr( $_POST['email-template'] ) : 'default';
204
- $this->options['email-header-image'] = ! empty( $_POST['email-header-image'] ) ? esc_url_raw( $_POST['email-header-image'] ) : '';
205
- $this->options['email-background-color'] = ! empty( $_POST['email-background-color'] ) ? wpforms_sanitize_hex_color( $_POST['email-background-color'] ) : '#e9eaec';
206
- $this->options['email-carbon-copy'] = ! empty( $_POST['email-carbon-copy'] ) ? '1' : false;
207
- $this->options['disable-css'] = ! empty( $_POST['disable-css'] ) ? intval( $_POST['disable-css'] ) : '1';
208
- $this->options['global-assets'] = ! empty( $_POST['global-assets'] ) ? '1' : false;
209
- $this->options['recaptcha-type'] = ! empty( $_POST['recaptcha-type'] ) ? esc_html( $_POST['recaptcha-type'] ) : 'v2';
210
- $this->options['recaptcha-site-key'] = ! empty( $_POST['recaptcha-site-key'] ) ? esc_html( $_POST['recaptcha-site-key'] ) : '';
211
- $this->options['recaptcha-secret-key'] = ! empty( $_POST['recaptcha-secret-key'] ) ? esc_html( $_POST['recaptcha-secret-key'] ) : '';
212
- $this->options['validation-required'] = ! empty( $_POST['validation-required'] ) ? sanitize_text_field( $_POST['validation-required'] ) : '';
213
- $this->options['validation-url'] = ! empty( $_POST['validation-url'] ) ? sanitize_text_field( $_POST['validation-url'] ) : '';
214
- $this->options['validation-email'] = ! empty( $_POST['validation-email'] ) ? sanitize_text_field( $_POST['validation-email'] ) : '';
215
- $this->options['validation-number'] = ! empty( $_POST['validation-number'] ) ? sanitize_text_field( $_POST['validation-number'] ) : '';
216
- $this->options['validation-confirm'] = ! empty( $_POST['validation-confirm'] ) ? sanitize_text_field( $_POST['validation-confirm'] ) : '';
217
-
218
- $this->options = apply_filters( 'wpforms_settings_save', $this->options, $_POST, 'general' );
219
-
220
- // Update settings in DB.
221
- update_option( 'wpforms_settings' , $this->options );
222
-
223
- printf( '<div class="updated below-h2"><p>%s</p></div>', __( 'General settings updated.', 'wpforms' ) );
224
-
225
- }
226
- } // End if().
227
- } // End if().
228
- ?>
229
-
230
- <div id="wpforms-settings-general">
231
-
232
- <form method="post">
233
-
234
- <?php wp_nonce_field( 'wpforms-settings-general-nonce', 'wpforms-settings-general-nonce' ); ?>
235
-
236
- <table class="form-table">
237
- <tbody>
238
- <tr>
239
- <th scope="row">
240
- <label for="wpforms-settings-general-css"><?php _e( 'Include Form Styling', 'wpforms' ); ?></label>
241
- </th>
242
- <td>
243
- <select name="disable-css" id="wpforms-settings-general-css">
244
- <option value="1" <?php selected( '1', $this->get( 'disable-css' ) ); ?>><?php _e( 'Base and form theme styling', 'wpforms' ); ?></option>
245
- <option value="2" <?php selected( '2', $this->get( 'disable-css' ) ); ?>><?php _e( 'Base styling only', 'wpforms' ); ?></option>
246
- <option value="3" <?php selected( '3', $this->get( 'disable-css' ) ); ?>><?php _e( 'None', 'wpforms' ); ?></option>
247
- </select>
248
- <p class="description"><?php _e( 'Determines which CSS files to load for the site.', 'wpforms' ); ?></p>
249
- </td>
250
- </tr>
251
- <tr>
252
- <th scope="row">
253
- <label for="wpforms-settings-general-global-assets"><?php _e( 'Load Assets Globally', 'wpforms' ); ?></label>
254
- </th>
255
- <td>
256
- <input type="checkbox" name="global-assets" id="wpforms-settings-general-global-assets" value="1" <?php checked( '1', $this->get( 'global-assets' ) ); ?>>
257
- <label for="wpforms-settings-general-global-assets"><?php _e( 'Check this if you would like to load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support.', 'wpforms' ); ?></label>
258
- </td>
259
- </tr>
260
- <tr>
261
- <td class="section" colspan="2">
262
- <hr>
263
- <h4><?php _e( 'Email', 'wpforms' ); ?></h4>
264
- </td>
265
- </tr>
266
- <tr>
267
- <th scope="row">
268
- <label for="wpforms-settings-general-email-template"><?php _e( 'Email Template', 'wpforms' ); ?></label>
269
- </th>
270
- <td>
271
- <select name="email-template" id="wpforms-settings-general-email-template">
272
- <option value="default" <?php selected( 'default', $this->get( 'email-template' ) ); ?>><?php _e( 'Default HTML template', 'wpforms' ); ?></option>
273
- <option value="none" <?php selected( 'none', $this->get( 'email-template' ) ); ?>><?php _e( 'Plain Text', 'wpforms' ); ?></option>
274
- </select>
275
- <p class="description"><?php _e( 'Determines how email notifications will be formatted.', 'wpforms' ); ?></p>
276
- </td>
277
- </tr>
278
- <tr>
279
- <th scope="row">
280
- <label for="wpforms-settings-general-email-header-image"><?php _e( 'Email Header Image ', 'wpforms' ); ?></label>
281
- </th>
282
- <td>
283
- <label for="wpforms-settings-general-email-header-image" class="wpforms-settings-upload-image-display">
284
- <?php
285
- $email_header = $this->get( 'email-header-image' );
286
- if ( $email_header ) {
287
- echo '<img src="' . esc_url_raw( $email_header ) . '">';
288
- }
289
- ?>
290
- </label>
291
- <input type="text" name="email-header-image" id="wpforms-settings-general-email-header-image" class="wpforms-settings-upload-image-value" value="<?php echo esc_url_raw( $this->get( 'email-header-image' ) ); ?>" />
292
- <a href="#" class="button button-secondary wpforms-settings-upload-image"><?php _e( 'Upload Image', 'wpforms' ); ?></a>
293
- <p class="description">
294
- <?php _e( 'Upload or choose a logo to be displayed at the top of email notifications.', 'wpforms' ); ?><br>
295
- <?php _e( 'Recommended size is 300x100 or smaller for best support on all devices.', 'wpforms' ); ?>
296
- </p>
297
- </td>
298
- </tr>
299
- <tr>
300
- <th scope="row">
301
- <label for="wpforms-settings-general-email-background-color"><?php _e( 'Email Background Color', 'wpforms' ); ?></label>
302
- </th>
303
- <td>
304
- <input type="text" name="email-background-color" value="<?php echo esc_attr( $this->get( 'email-background-color', '#e9eaec' ) ); ?>" id="wpforms-settings-general-email-background-color" class="wpforms-color-picker">
305
- <p class="description"><?php _e( 'Customize the background color of the HTML email template.', 'wpforms' ); ?></p>
306
- </td>
307
- </tr>
308
- <tr>
309
- <th scope="row">
310
- <label for="wpforms-settings-general-email-carbon-copy"><?php _e( 'Email Carbon Copy', 'wpforms' ); ?></label>
311
- </th>
312
- <td>
313
- <input type="checkbox" name="email-carbon-copy" id="wpforms-settings-general-email-carbon-copy" value="1" <?php checked( '1', $this->get( 'email-carbon-copy' ) ); ?>>
314
- <label for="wpforms-settings-general-email-carbon-copy"><?php _e( 'Check this if you would like to enable the ability to CC: email addresses in the form notification settings.', 'wpforms' ); ?></label>
315
- </td>
316
- </tr>
317
- <tr>
318
- <td class="section" colspan="2">
319
- <hr>
320
- <h4><?php _e( 'reCAPTCHA', 'wpforms' ); ?></h4>
321
- <p><?php _e( 'reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease.', 'wpforms' ); ?></p>
322
- <p><?php _e( 'Google\'s original <a href="https://www.google.com/recaptcha/intro/" rel="noopener noreferrer">v2 reCAPTCHA</a> prompts users to check a box to prove they\'re human, whereas <a href="https://www.google.com/recaptcha/intro/invisible.html" rel="noopener noreferrer">Invisible reCAPTCHA</a> uses advanced technology to detect real users without requiring any input.', 'wpforms' ); ?></p>
323
- <p><?php _e( 'Sites already using v2 reCAPTCHA will need to create new site keys before switching to the Invisible reCAPTCHA.', 'wpforms' ); ?></p>
324
- <p><?php _e( '<a href="https://wpforms.com/docs/setup-captcha-wpforms/" rel="noopener noreferrer">Read our walk through</a> to learn more and for step-by-step directions.', 'wpforms' ); ?></p>
325
- </td>
326
- </tr>
327
- <tr>
328
- <th scope="row">
329
- <label for="wpforms-settings-general-recaptcha-type"><?php _e( 'reCAPTCHA Type', 'wpforms' ); ?></label>
330
- </th>
331
- <td>
332
- <select name="recaptcha-type" id="wpforms-settings-general-recaptcha-type">
333
- <?php
334
- $options = array(
335
- 'v2' => 'v2 reCAPTCHA',
336
- 'invisible' => 'Invisible reCAPTCHA',
337
- );
338
- $selected = $this->get( 'recaptcha-type' );
339
- foreach ( $options as $key => $option ) {
340
- printf( '<option value="%s" %s>%s</option>', esc_attr( $key ), selected( $selected, $key, false ), esc_html( $option ) );
341
- }
342
- ?>
343
- </select>
344
- </td>
345
- </tr>
346
- <tr>
347
- <th scope="row">
348
- <label for="wpforms-settings-general-recaptcha-site-key"><?php _e( 'reCAPTCHA Site key', 'wpforms' ); ?></label>
349
- </th>
350
- <td>
351
- <input type="text" name="recaptcha-site-key" value="<?php echo esc_attr( $this->get( 'recaptcha-site-key' ) ); ?>" id="wpforms-settings-general-recaptcha-site-key">
352
- </td>
353
- </tr>
354
- <tr>
355
- <th scope="row">
356
- <label for="wpforms-settings-general-recaptcha-secret-key"><?php _e( 'reCAPTCHA Secret key', 'wpforms' ); ?></label>
357
- </th>
358
- <td>
359
- <input type="text" name="recaptcha-secret-key" value="<?php echo esc_attr( $this->get( 'recaptcha-secret-key' ) ); ?>" id="wpforms-settings-general-recaptcha-secret-key">
360
- </td>
361
- </tr>
362
- <tr>
363
- <td class="section" colspan="2">
364
- <hr>
365
- <h4><?php _e( 'Validation Messages', 'wpforms' ); ?></h4>
366
- </td>
367
- </tr>
368
- <tr>
369
- <th scope="row">
370
- <label for="wpforms-settings-general-validation-required"><?php _e( 'Required', 'wpforms' ); ?></label>
371
- </th>
372
- <td>
373
- <input type="text" name="validation-required" value="<?php echo esc_attr( $this->get( 'validation-required', __( 'This field is required.', 'wpforms' ) ) ); ?>" id="wpforms-settings-general-validation-required">
374
- </td>
375
- </tr>
376
- <tr>
377
- <th scope="row">
378
- <label for="wpforms-settings-general-validation-url"><?php _e( 'Website URL', 'wpforms' ); ?></label>
379
- </th>
380
- <td>
381
- <input type="text" name="validation-url" value="<?php echo esc_attr( $this->get( 'validation-url', __( 'Please enter a valid URL.', 'wpforms' ) ) ); ?>" id="wpforms-settings-general-validation-url">
382
- </td>
383
- </tr>
384
- <tr>
385
- <th scope="row">
386
- <label for="wpforms-settings-general-validation-email"><?php _e( 'Email', 'wpforms' ); ?></label>
387
- </th>
388
- <td>
389
- <input type="text" name="validation-email" value="<?php echo esc_attr( $this->get( 'validation-email', __( 'Please enter a valid email address.', 'wpforms' ) ) ); ?>" id="wpforms-settings-general-validation-email">
390
- </td>
391
- </tr>
392
- <tr>
393
- <th scope="row">
394
- <label for="wpforms-settings-general-validation-number"><?php _e( 'Number', 'wpforms' ); ?></label>
395
- </th>
396
- <td>
397
- <input type="text" name="validation-number" value="<?php echo esc_attr( $this->get( 'validation-number', __( 'Please enter a valid number.', 'wpforms' ) ) ); ?>" id="wpforms-settings-general-validation-number">
398
- </td>
399
- </tr>
400
- <tr>
401
- <th scope="row">
402
- <label for="wpforms-settings-general-validation-confirm"><?php _e( 'Confirm Value', 'wpforms' ); ?></label>
403
- </th>
404
- <td>
405
- <input type="text" name="validation-confirm" value="<?php echo esc_attr( $this->get( 'validation-confirm', __( 'Field values do not match.', 'wpforms' ) ) ); ?>" id="wpforms-settings-general-validation-confirm">
406
- </td>
407
- </tr>
408
- </tbody>
409
- </table>
410
-
411
- <?php submit_button( __( 'Save General Settings', 'wpforms'), 'primary', 'submit-general' ); ?>
412
-
413
- </form>
414
-
415
- </div>
416
- <?php
417
- }
418
-
419
- /**
420
- * Build the output for Integrations (providers) tab on the settings page and check for save.
421
- *
422
- * @since 1.0.0
423
- */
424
- public function settings_page_tab_providers() {
425
-
426
- $providers = get_option( 'wpforms_providers', false );
427
- $active = apply_filters( 'wpforms_providers_available', array() );
428
-
429
- // If no provider addons are activated display a message and bail.
430
- if ( empty( $active ) ) {
431
- echo '<div class="notice notice-info below-h2"><p>' . sprintf( __( 'You do not have any marketing add-ons activated. You can head over to the <a href="%s">Add-Ons page</a> to install and activate the add-on for your provider.', 'wpforms' ), admin_url( 'admin.php?page=wpforms-addons' ) ) . '</p></div>';
432
- return;
433
- }
434
- ?>
435
-
436
- <div id="wpforms-settings-providers">
437
- <?php do_action( 'wpforms_settings_providers', $active, $providers ); ?>
438
- </div>
439
- <?php
440
- }
441
-
442
- /**
443
- * Build the output for System Info (system) tab on the settings page.
444
- *
445
- * @since 1.2.3
446
- */
447
- public function settings_page_tab_system() {
448
-
449
- ?>
450
- <div id="wpforms-settings-system">
451
- <textarea readonly="readonly" class="system-info-textarea"><?php echo $this->get_system_info(); ?></textarea>
452
- </div>
453
- <?php
454
- }
455
-
456
- /**
457
- * Build the output for the plugin settings page.
458
- *
459
- * @since 1.0.0
460
- */
461
- public function output() {
462
-
463
- ?>
464
- <div id="wpforms-settings" class="wrap">
465
-
466
- <h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
467
-
468
- <div class="wpforms-circle-loader">
469
- <div class="wpforms-circle-1 wpforms-circle"></div>
470
- <div class="wpforms-circle-2 wpforms-circle"></div>
471
- <div class="wpforms-circle-3 wpforms-circle"></div>
472
- <div class="wpforms-circle-4 wpforms-circle"></div>
473
- <div class="wpforms-circle-5 wpforms-circle"></div>
474
- <div class="wpforms-circle-6 wpforms-circle"></div>
475
- <div class="wpforms-circle-7 wpforms-circle"></div>
476
- <div class="wpforms-circle-8 wpforms-circle"></div>
477
- <div class="wpforms-circle-9 wpforms-circle"></div>
478
- <div class="wpforms-circle-10 wpforms-circle"></div>
479
- <div class="wpforms-circle-11 wpforms-circle"></div>
480
- <div class="wpforms-circle-12 wpforms-circle"></div>
481
- </div>
482
-
483
- <div id="wpforms-tabs" class="wpforms-clear">
484
-
485
- <!-- Output tabs navigation -->
486
- <h2 id="wpforms-tabs-nav" class="wpforms-clear nav-tab-wrapper">
487
- <?php $i = 0; foreach ( (array) $this->setting_page_tabs() as $id => $title ) : $class = 0 === $i ? 'wpforms-active nav-tab-active' : ''; ?>
488
- <a class="nav-tab <?php echo $class; ?>" href="#wpforms-tab-<?php echo $id; ?>" title="<?php echo $title; ?>"><?php echo $title; ?></a>
489
- <?php $i++; endforeach; ?>
490
- </h2>
491
-
492
- <!-- Output tab sections -->
493
- <?php $i = 0; foreach ( (array) $this->setting_page_tabs() as $id => $title ) : $class = 0 === $i ? 'wpforms-active' : ''; ?>
494
- <div id="wpforms-tab-<?php echo $id; ?>" class="wpforms-tab wpforms-clear <?php echo $class; ?>">
495
- <?php do_action( 'wpforms_tab_settings_' . $id ); ?>
496
- </div>
497
- <?php $i++; endforeach; ?>
498
-
499
- </div>
500
-
501
- </div>
502
- <?php
503
- }
504
-
505
- /**
506
- * Add settings link to the Plugins page.
507
- *
508
- * @since 1.0.0
509
- * @param array $links
510
- * @return array $links
511
- */
512
- public function settings_link( $links ) {
513
-
514
- $admin_link = add_query_arg(
515
- array(
516
- 'page' => 'wpforms-settings',
517
- ),
518
- admin_url( 'admin.php' )
519
- );
520
-
521
- $setting_link = sprintf(
522
- '<a href="%s">%s</a>',
523
- $admin_link ,
524
- __( 'Settings', 'wpforms' )
525
- );
526
-
527
- array_unshift( $links, $setting_link );
528
-
529
- return $links;
530
- }
531
-
532
- /**
533
- * Get system information.
534
- *
535
- * Based on a function from Easy Digital Downloads by Pippin Williamson.
536
- *
537
- * @link https://github.com/easydigitaldownloads/easy-digital-downloads/blob/master/includes/admin/tools.php#L470
538
- * @since 1.2.3
539
- * @return string
540
- */
541
- public function get_system_info() {
542
-
543
- global $wpdb;
544
-
545
- // Get theme info.
546
- $theme_data = wp_get_theme();
547
- $theme = $theme_data->Name . ' ' . $theme_data->Version;
548
-
549
- $return = '### Begin System Info ###' . "\n\n";
550
-
551
- // WPForms info.
552
- $activated = get_option( 'wpforms_activated', array() );
553
- $return .= '-- WPForms Info' . "\n\n";
554
- if ( ! empty( $activated['pro'] ) ) {
555
- $date = $activated['pro'] + ( get_option( 'gmt_offset' ) * 3600 );
556
- $return .= 'Pro: ' . date_i18n( __( 'M j, Y @ g:ia' ), $date ) . "\n";
557
- }
558
- if ( ! empty( $activated['lite'] ) ) {
559
- $date = $activated['lite'] + ( get_option( 'gmt_offset' ) * 3600 );
560
- $return .= 'Lite: ' . date_i18n( __( 'M j, Y @ g:ia' ), $date ) . "\n";
561
- }
562
-
563
- // Now the basics...
564
- $return .= '-- Site Info' . "\n\n";
565
- $return .= 'Site URL: ' . site_url() . "\n";
566
- $return .= 'Home URL: ' . home_url() . "\n";
567
- $return .= 'Multisite: ' . ( is_multisite() ? 'Yes' : 'No' ) . "\n";
568
-
569
- // WordPress configuration.
570
- $return .= "\n" . '-- WordPress Configuration' . "\n\n";
571
- $return .= 'Version: ' . get_bloginfo( 'version' ) . "\n";
572
- $return .= 'Language: ' . ( defined( 'WPLANG' ) && WPLANG ? WPLANG : 'en_US' ) . "\n";
573
- $return .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n";
574
- $return .= 'Active Theme: ' . $theme . "\n";
575
- $return .= 'Show On Front: ' . get_option( 'show_on_front' ) . "\n";
576
- // Only show page specs if frontpage is set to 'page'.
577
- if ( get_option( 'show_on_front' ) === 'page' ) {
578
- $front_page_id = get_option( 'page_on_front' );
579
- $blog_page_id = get_option( 'page_for_posts' );
580
- $return .= 'Page On Front: ' . ( 0 != $front_page_id ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' ) . "\n";
581
- $return .= 'Page For Posts: ' . ( 0 != $blog_page_id ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' ) . "\n";
582
- }
583
- $return .= 'ABSPATH: ' . ABSPATH . "\n";
584
- $return .= 'Table Prefix: ' . 'Length: ' . strlen( $wpdb->prefix ) . ' Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ) . "\n";
585
- $return .= 'WP_DEBUG: ' . ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
586
- $return .= 'WPFORMS_DEBUG: ' . ( defined( 'WPFORMS_DEBUG' ) ? WPFORMS_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
587
- $return .= 'Memory Limit: ' . WP_MEMORY_LIMIT . "\n";
588
- $return .= 'Registered Post Stati: ' . implode( ', ', get_post_stati() ) . "\n";
589
-
590
- // @todo WPForms configuration/specific details.
591
- $return .= "\n" . '-- WordPress Uploads/Constants' . "\n\n";
592
- $return .= 'WP_CONTENT_DIR: ' . ( defined( 'WP_CONTENT_DIR' ) ? WP_CONTENT_DIR ? WP_CONTENT_DIR : 'Disabled' : 'Not set' ) . "\n";
593
- $return .= 'WP_CONTENT_URL: ' . ( defined( 'WP_CONTENT_URL' ) ? WP_CONTENT_URL ? WP_CONTENT_URL : 'Disabled' : 'Not set' ) . "\n";
594
- $return .= 'UPLOADS: ' . ( defined( 'UPLOADS' ) ? UPLOADS ? UPLOADS : 'Disabled' : 'Not set' ) . "\n";
595
- $uploads_dir = wp_upload_dir();
596
- $return .= 'wp_uploads_dir() path: ' . $uploads_dir['path'] . "\n";
597
- $return .= 'wp_uploads_dir() url: ' . $uploads_dir['url'] . "\n";
598
- $return .= 'wp_uploads_dir() basedir: ' . $uploads_dir['basedir'] . "\n";
599
- $return .= 'wp_uploads_dir() baseurl: ' . $uploads_dir['baseurl'] . "\n";
600
-
601
- // Get plugins that have an update.
602
- $updates = get_plugin_updates();
603
-
604
- // Must-use plugins.
605
- // NOTE: MU plugins can't show updates!
606
- $muplugins = get_mu_plugins();
607
- if ( count( $muplugins ) > 0 && ! empty( $muplugins ) ) {
608
- $return .= "\n" . '-- Must-Use Plugins' . "\n\n";
609
-
610
- foreach ( $muplugins as $plugin => $plugin_data ) {
611
- $return .= $plugin_data['Name'] . ': ' . $plugin_data['Version'] . "\n";
612
- }
613
- }
614
-
615
- // WordPress active plugins.
616
- $return .= "\n" . '-- WordPress Active Plugins' . "\n\n";
617
-
618
- $plugins = get_plugins();
619
- $active_plugins = get_option( 'active_plugins', array() );
620
-
621
- foreach ( $plugins as $plugin_path => $plugin ) {
622
- if ( ! in_array( $plugin_path, $active_plugins, true ) ) {
623
- continue;
624
- }
625
- $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
626
- $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
627
- }
628
-
629
- // WordPress inactive plugins.
630
- $return .= "\n" . '-- WordPress Inactive Plugins' . "\n\n";
631
-
632
- foreach ( $plugins as $plugin_path => $plugin ) {
633
- if ( in_array( $plugin_path, $active_plugins ) ) {
634
- continue;
635
- }
636
- $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
637
- $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
638
- }
639
-
640
- if ( is_multisite() ) {
641
- // WordPress Multisite active plugins.
642
- $return .= "\n" . '-- Network Active Plugins' . "\n\n";
643
-
644
- $plugins = wp_get_active_network_plugins();
645
- $active_plugins = get_site_option( 'active_sitewide_plugins', array() );
646
-
647
- foreach ( $plugins as $plugin_path ) {
648
- $plugin_base = plugin_basename( $plugin_path );
649
- if ( ! array_key_exists( $plugin_base, $active_plugins ) ) {
650
- continue;
651
- }
652
- $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
653
- $plugin = get_plugin_data( $plugin_path );
654
- $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
655
- }
656
- }
657
-
658
- // Server configuration (really just versioning).
659
- $return .= "\n" . '-- Webserver Configuration' . "\n\n";
660
- $return .= 'PHP Version: ' . PHP_VERSION . "\n";
661
- $return .= 'MySQL Version: ' . $wpdb->db_version() . "\n";
662
- $return .= 'Webserver Info: ' . $_SERVER['SERVER_SOFTWARE'] . "\n";
663
-
664
- // PHP configs... now we're getting to the important stuff.
665
- $return .= "\n" . '-- PHP Configuration' . "\n\n";
666
- $return .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n";
667
- $return .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n";
668
- $return .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n";
669
- $return .= 'Upload Max Filesize: ' . ini_get( 'upload_max_filesize' ) . "\n";
670
- $return .= 'Time Limit: ' . ini_get( 'max_execution_time' ) . "\n";
671
- $return .= 'Max Input Vars: ' . ini_get( 'max_input_vars' ) . "\n";
672
- $return .= 'Display Errors: ' . ( ini_get( 'display_errors' ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A' ) . "\n";
673
-
674
- // PHP extensions and such.
675
- $return .= "\n" . '-- PHP Extensions' . "\n\n";
676
- $return .= 'cURL: ' . ( function_exists( 'curl_init' ) ? 'Supported' : 'Not Supported' ) . "\n";
677
- $return .= 'fsockopen: ' . ( function_exists( 'fsockopen' ) ? 'Supported' : 'Not Supported' ) . "\n";
678
- $return .= 'SOAP Client: ' . ( class_exists( 'SoapClient' ) ? 'Installed' : 'Not Installed' ) . "\n";
679
- $return .= 'Suhosin: ' . ( extension_loaded( 'suhosin' ) ? 'Installed' : 'Not Installed' ) . "\n";
680
-
681
- // Session stuff
682
- $return .= "\n" . '-- Session Configuration' . "\n\n";
683
- $return .= 'Session: ' . ( isset( $_SESSION ) ? 'Enabled' : 'Disabled' ) . "\n";
684
-
685
- // The rest of this is only relevant is session is enabled.
686
- if ( isset( $_SESSION ) ) {
687
- $return .= 'Session Name: ' . esc_html( ini_get( 'session.name' ) ) . "\n";
688
- $return .= 'Cookie Path: ' . esc_html( ini_get( 'session.cookie_path' ) ) . "\n";
689
- $return .= 'Save Path: ' . esc_html( ini_get( 'session.save_path' ) ) . "\n";
690
- $return .= 'Use Cookies: ' . ( ini_get( 'session.use_cookies' ) ? 'On' : 'Off' ) . "\n";
691
- $return .= 'Use Only Cookies: ' . ( ini_get( 'session.use_only_cookies' ) ? 'On' : 'Off' ) . "\n";
692
- }
693
-
694
- $return .= "\n" . '### End System Info ###';
695
-
696
- return $return;
697
- }
698
- }
699
- new WPForms_Settings;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lite/wpforms-lite.php CHANGED
@@ -34,10 +34,7 @@ class WPForms_Lite {
34
  */
35
  private function includes() {
36
 
37
- if ( is_admin() ) {
38
- require_once WPFORMS_PLUGIN_DIR . 'lite/includes/admin/class-settings.php';
39
- require_once WPFORMS_PLUGIN_DIR . 'lite/includes/admin/class-review.php';
40
- }
41
  }
42
 
43
  /**
@@ -64,7 +61,7 @@ class WPForms_Lite {
64
  _e( 'Notifications', 'wpforms' );
65
  echo '</div>';
66
 
67
- echo '<p class="wpforms-alert wpforms-alert-info">Want multiple notifications with smart conditional logic?<br><a href="' . $this->upgrade_link() . 'target="_blank" rel="noopener"><strong>Upgrade to PRO</strong></a> to unlock it and more awesome features.</p>';
68
 
69
  wpforms_panel_field(
70
  'select',
@@ -269,7 +266,7 @@ class WPForms_Lite {
269
  )
270
  );
271
  ?>
272
- <div class="wpforms-setup-title">Unlock Pre-Made Form Templates <a href="<?php echo $this->upgrade_link(); ?>" target="_blank" rel="noopener" class="btn-green" style="text-transform:uppercase;font-size:13px;font-weight:700;padding:5px 10px;vertical-align:text-bottom;">Upgrade</a></div>
273
  <p class="wpforms-setup-desc">While WPForms Lite allows you to create any type of form, you can speed up the process by unlocking our other pre-built form templates among other features, so you never have to start from scratch again...</p>
274
  <div class="wpforms-setup-templates wpforms-clear" style="opacity:0.5;">
275
  <?php
@@ -439,7 +436,7 @@ class WPForms_Lite {
439
  'upgrade_title' => __( 'is a PRO Feature', 'wpforms' ),
440
  'upgrade_message' => __( 'We\'re sorry, %name% is not available on your plan.<br><br>Please upgrade to the PRO plan to unlock all these awesome features.', 'wpforms' ),
441
  'upgrade_button' => __( 'Upgrade to PRO', 'wpforms' ),
442
- 'upgrade_url' => $this->upgrade_link()
443
  )
444
  );
445
  }
@@ -496,29 +493,326 @@ class WPForms_Lite {
496
  */
497
  public function entries_page() {
498
 
499
- if ( !isset( $_GET['page'] ) || 'wpforms-entries' != $_GET['page'] ) {
500
  return;
501
  }
502
  ?>
503
-
504
- <div id="wpforms-entries" class="wrap">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
505
  <h1 class="page-title">Entries</h1>
506
- <div class="notice notice-info below-h2">
507
- <p><strong>Entry management and storage is a PRO feature.</strong></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
508
  </div>
509
-
510
- <h3>Want to be able to view and manage all your form entries right from your WordPress dashboard?</h3>
511
-
512
- <p>Once you upgrade to the Pro version of WPForms, all future form entries will be stored in your WordPress database and displayed right here.</p>
513
-
514
- <p>You’ll be able to easily sort entries by form, favorite your leads, mark entries as read, and even delete the ones you don’t want.</p>
515
-
516
- <p>With WPForms Pro, all entries can be exported to CSV files (Excel) as well.</p>
517
-
518
- <p>To unlock the full power of WPForms and start saving your entries here, click here to upgrade:</p>
519
-
520
- <p><a href="<?php echo $this->upgrade_link(); ?>" class="button button-primary" target="_blank" rel="noopener">Upgrade Now</a></p>
521
  </div>
 
522
  <?php
523
  }
524
 
@@ -529,21 +823,17 @@ class WPForms_Lite {
529
  */
530
  public function addon_page_enqueues() {
531
 
532
- if ( !isset( $_GET['page'] ) || $_GET['page'] != 'wpforms-addons' )
533
  return;
 
534
 
535
- // CSS
536
- wp_enqueue_style(
537
- 'font-awesome',
538
- WPFORMS_PLUGIN_URL . 'assets/css/font-awesome.min.css',
539
- null,
540
- '4.4.0'
541
- );
542
- wp_enqueue_style(
543
- 'wpforms-addons',
544
- WPFORMS_PLUGIN_URL . 'assets/css/admin-addons.css',
545
- null,
546
- WPFORMS_VERSION
547
  );
548
  }
549
 
@@ -554,11 +844,11 @@ class WPForms_Lite {
554
  */
555
  public function addons_page() {
556
 
557
- if ( !isset( $_GET['page'] ) || 'wpforms-addons' != $_GET['page'] ) {
558
  return;
559
  }
560
 
561
- $upgrade = $this->upgrade_link();
562
  $addons = array(
563
  array(
564
  'name' => 'Aweber',
@@ -627,24 +917,31 @@ class WPForms_Lite {
627
  ),
628
  )
629
  ?>
630
- <div id="wpforms-addons" class="wrap">
631
- <h1 class="page-title">Addons</h1>
632
- <div class="notice notice-info below-h2">
633
  <p><strong>Form Addons are a PRO feature.</strong></p>
634
  <p>Please upgrade to the PRO plan to unlock them and more awesome features.</p>
635
- <p><a href="<?php echo $upgrade; ?>" class="button button-primary">Upgrade Now</a></p>
636
  </div>
637
- <?php foreach( $addons as $addon ) : ?>
638
- <div class="wpforms-addon-item wpforms-addon-status-upgrade">
639
- <div class="wpforms-addon-image"><img src="https://wpforms.com/images/<?php echo $addon['icon']; ?>"></div>
640
- <div class="wpforms-addon-text">
641
- <h4><?php echo $addon['name']; ?> Addon</h4>
642
- <p class="desc"><?php echo $addon['desc']; ?></p>
 
 
 
 
 
 
 
 
 
 
643
  </div>
644
- <div class="wpforms-addon-action"><a href="<?php echo $upgrade; ?>" target="_blank" rel="noopener">Upgrade Now</a></div>
645
  </div>
646
- <?php endforeach; ?>
647
- <div style="clear:both"></div>
648
  </div>
649
  <?php
650
  }
34
  */
35
  private function includes() {
36
 
37
+ // Bliss.
 
 
 
38
  }
39
 
40
  /**
61
  _e( 'Notifications', 'wpforms' );
62
  echo '</div>';
63
 
64
+ echo '<p class="wpforms-alert wpforms-alert-info">Want multiple notifications with smart conditional logic?<br><a href="' . wpforms_admin_upgrade_link() . 'target="_blank" rel="noopener"><strong>Upgrade to PRO</strong></a> to unlock it and more awesome features.</p>';
65
 
66
  wpforms_panel_field(
67
  'select',
266
  )
267
  );
268
  ?>
269
+ <div class="wpforms-setup-title">Unlock Pre-Made Form Templates <a href="<?php echo wpforms_admin_upgrade_link(); ?>" target="_blank" rel="noopener" class="btn-green" style="text-transform:uppercase;font-size:13px;font-weight:700;padding:5px 10px;vertical-align:text-bottom;">Upgrade</a></div>
270
  <p class="wpforms-setup-desc">While WPForms Lite allows you to create any type of form, you can speed up the process by unlocking our other pre-built form templates among other features, so you never have to start from scratch again...</p>
271
  <div class="wpforms-setup-templates wpforms-clear" style="opacity:0.5;">
272
  <?php
436
  'upgrade_title' => __( 'is a PRO Feature', 'wpforms' ),
437
  'upgrade_message' => __( 'We\'re sorry, %name% is not available on your plan.<br><br>Please upgrade to the PRO plan to unlock all these awesome features.', 'wpforms' ),
438
  'upgrade_button' => __( 'Upgrade to PRO', 'wpforms' ),
439
+ 'upgrade_url' => wpforms_admin_upgrade_link()
440
  )
441
  );
442
  }
493
  */
494
  public function entries_page() {
495
 
496
+ if ( ! isset( $_GET['page'] ) || 'wpforms-entries' !== $_GET['page'] ) {
497
  return;
498
  }
499
  ?>
500
+ <style type="text/css">
501
+ .wpforms-admin-content {
502
+ -webkit-filter: blur(3px);
503
+ -moz-filter: blur(3px);
504
+ -ms-filter: blur(3px);
505
+ -o-filter: blur(3px);
506
+ filter: blur(3px);
507
+ }
508
+ .wpforms-admin-content a {
509
+ pointer-events: none;
510
+ cursor: default;
511
+ }
512
+ .ie-detected {
513
+ position: absolute;
514
+ top:0;
515
+ width: 100%;
516
+ height: 100%;
517
+ left: 0;
518
+ background-color: #f1f1f1;
519
+ opacity: 0.65;
520
+ z-index: 10;
521
+ }
522
+ .wpforms-admin-content,
523
+ .wpforms-admin-content-wrap {
524
+ position: relative;
525
+ }
526
+ .entries-modal {
527
+ text-align: center;
528
+ width: 730px;
529
+ margin: 0 auto;
530
+ box-shadow: 0 0 60px 30px rgba(0,0,0,0.15);
531
+ border-radius: 3px;
532
+ position: absolute;
533
+ top: 75px;
534
+ left: 50%;
535
+ margin-left: -365px;
536
+ z-index: 100;
537
+ }
538
+ .entries-modal *,
539
+ .entries-modal *::before,
540
+ .entries-modal *::after {
541
+ -webkit-box-sizing: border-box;
542
+ -moz-box-sizing: border-box;
543
+ box-sizing: border-box;
544
+ }
545
+ .entries-modal h2 {
546
+ font-size: 20px;
547
+ margin: 0 0 16px 0;
548
+ padding: 0;
549
+ }
550
+ .entries-modal p {
551
+ font-size: 16px;
552
+ color: #666;
553
+ margin: 0 0 30px 0;
554
+ padding: 0;
555
+ }
556
+ .entries-modal-content {
557
+ background-color: #fff;
558
+ border-radius: 3px 3px 0 0;
559
+ padding: 40px;
560
+ }
561
+ .entries-modal ul {
562
+ float: left;
563
+ width: 50%;
564
+ margin: 0;
565
+ padding: 0 0 0 30px;
566
+ text-align: left;
567
+ }
568
+ .entries-modal li {
569
+ color: #666;
570
+ font-size: 16px;
571
+ padding: 6px 0;
572
+ }
573
+ .entries-modal li .fa {
574
+ color: #2a9b39;
575
+ margin: 0 8px 0 0;
576
+ }
577
+ .entries-modal-button {
578
+ border-radius: 0 0 3px 3px;
579
+ padding: 30px;
580
+ background: #f5f5f5;
581
+ text-align: center;
582
+ }
583
+ </style>
584
+ <script type="text/javascript">
585
+ jQuery(function($){
586
+ var userAgent = window.navigator.userAgent,
587
+ onlyIEorEdge = /msie\s|trident\/|edge\//i.test(userAgent) && !!( document.uniqueID || window.MSInputMethodContext),
588
+ checkVersion = (onlyIEorEdge && +(/(edge\/|rv:|msie\s)([\d.]+)/i.exec(userAgent)[2])) || NaN;
589
+ if ( !isNaN(checkVersion) ) {
590
+ $('#ie-wrap').addClass('ie-detected');
591
+ }
592
+ })
593
+ </script>
594
+ <div id="wpforms-entries-list" class="wrap wpforms-admin-wrap">
595
  <h1 class="page-title">Entries</h1>
596
+ <div class="wpforms-admin-content-wrap">
597
+ <div class="entries-modal">
598
+ <div class="entries-modal-content">
599
+ <h2>View and Manage All Your Form Entries inside WordPress</h2>
600
+ <p>Once you upgrade to WPForms Pro, all future form entries will be stored in your WordPress database and displayed on this Entries screen.</p>
601
+ <div class="wpforms-clear">
602
+ <ul class="left">
603
+ <li><i class="fa fa-check" aria-hidden="true"></i> View Entries in Dashboard</li>
604
+ <li><i class="fa fa-check" aria-hidden="true"></i> Export Entries in a CSV File</li>
605
+ <li><i class="fa fa-check" aria-hidden="true"></i> Add Notes / Comments</li>
606
+ <li><i class="fa fa-check" aria-hidden="true"></i> Save Favorite Entries</li>
607
+ </ul>
608
+ <ul class="right">
609
+ <li><i class="fa fa-check" aria-hidden="true"></i> Mark Read / Unread</li>
610
+ <li><i class="fa fa-check" aria-hidden="true"></i> Print Entries</li>
611
+ <li><i class="fa fa-check" aria-hidden="true"></i> Resend Notifications</li>
612
+ <li><i class="fa fa-check" aria-hidden="true"></i> See Geolocation Data</li>
613
+ </ul>
614
+ </div>
615
+ </div>
616
+ <div class="entries-modal-button">
617
+ <a href="<?php echo wpforms_admin_upgrade_link(); ?>" target="_blank" rel="noopener noreferrer" class="wpforms-btn wpforms-btn-lg wpforms-btn-orange">Upgrade to WPForms Pro Now</a>
618
+ </div>
619
+ </div>
620
+ <div class="wpforms-admin-content">
621
+ <div id="ie-wrap"></div>
622
+ <div class="form-details wpforms-clear">
623
+ <span class="form-details-sub">Select Form</span>
624
+ <h3 class="form-details-title">
625
+ Contact Us
626
+ <div class="form-selector">
627
+ <a href="#" title="Open form selector" class="toggle dashicons dashicons-arrow-down-alt2"></a>
628
+ <div class="form-list" style="display: none;">
629
+ <ul><li></li></ul>
630
+ </div>
631
+ </div>
632
+ </h3>
633
+ <div class="form-details-actions">
634
+ <a href="#" class="form-details-actions-edit"><span class="dashicons dashicons-edit"></span> Edit This Form</a>
635
+ <a href="#" class="form-details-actions-preview" target="_blank" rel="noopener"><span class="dashicons dashicons-visibility"></span> Preview Form</a>
636
+ <a href="#" class="form-details-actions-export"><span class="dashicons dashicons-migrate"></span> Download Export (CSV)</a>
637
+ <a href="#" class="form-details-actions-read"><span class="dashicons dashicons-marker"></span> Mark All Read</a>
638
+ </div>
639
+ </div>
640
+ <form id="wpforms-entries-table">
641
+ <ul class="subsubsub">
642
+ <li class="all"><a href="#" class="current">All&nbsp;<span class="count">(<span class="total-num">10</span>)</span></a> |</li>
643
+ <li class="unread"><a href="#">Unread&nbsp;<span class="count">(<span class="unread-num">10</span>)</span></a> |</li>
644
+ <li class="starred"><a href="#">Starred&nbsp;<span class="count">(<span class="starred-num">0</span>)</span></a></li>
645
+ </ul>
646
+ <div class="tablenav top">
647
+ <div class="alignleft actions bulkactions">
648
+ <label for="bulk-action-selector-top" class="screen-reader-text">Select bulk action</label>
649
+ <select name="action" id="bulk-action-selector-top">
650
+ <option value="-1">Bulk Actions</option>
651
+ </select>
652
+ <input type="submit" id="doaction" class="button action" value="Apply">
653
+ </div>
654
+ <div class="tablenav-pages one-page">
655
+ <span class="displaying-num">10 items</span>
656
+ <span class="pagination-links"><span class="tablenav-pages-navspan" aria-hidden="true">«</span>
657
+ <span class="tablenav-pages-navspan" aria-hidden="true">‹</span>
658
+ <span class="paging-input"><label for="current-page-selector" class="screen-reader-text">Current Page</label><input class="current-page" id="current-page-selector" type="text" name="paged" value="1" size="1" aria-describedby="table-paging"><span class="tablenav-paging-text"> of <span class="total-pages">1</span></span>
659
+ </span>
660
+ <span class="tablenav-pages-navspan" aria-hidden="true">›</span>
661
+ <span class="tablenav-pages-navspan" aria-hidden="true">»</span></span>
662
+ </div>
663
+ <br class="clear">
664
+ </div>
665
+ <table class="wp-list-table widefat fixed striped entries">
666
+ <thead>
667
+ <tr>
668
+ <td id="cb" class="manage-column column-cb check-column"><label class="screen-reader-text" for="cb-select-all-1">Select All</label><input id="cb-select-all-1" type="checkbox"></td>
669
+ <th scope="col" id="indicators" class="manage-column column-indicators column-primary"></th>
670
+ <th scope="col" id="wpforms_field_0" class="manage-column column-wpforms_field_0">Name</th>
671
+ <th scope="col" id="wpforms_field_1" class="manage-column column-wpforms_field_1">E-mail</th>
672
+ <th scope="col" id="wpforms_field_2" class="manage-column column-wpforms_field_2">Comment or Message</th>
673
+ <th scope="col" id="date" class="manage-column column-date sortable desc"><a href="#"><span>Date</span><span class="sorting-indicator"></span></a></th>
674
+ <th scope="col" id="actions" class="manage-column column-actions">Actions</th>
675
+ </tr>
676
+ </thead>
677
+ <tbody id="the-list" data-wp-lists="list:entry">
678
+ <tr>
679
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1088"></th>
680
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1088" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1088" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
681
+ <button
682
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
683
+ </td>
684
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">David Wells</td>
685
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">DavidMWells@example.com</td>
686
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Vivamus sit amet dolor arcu. Praesent fermentum semper justo, nec scelerisq…</td>
687
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
688
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
689
+ </tr>
690
+ <tr>
691
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1087"></th>
692
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1087" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1087" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
693
+ <button
694
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
695
+ </td>
696
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Jennifer Selzer</td>
697
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">JenniferLSelzer@example.com</td>
698
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Maecenas sollicitudin felis et justo elementum, et lobortis justo vulputate…</td>
699
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
700
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
701
+ </tr>
702
+ <tr>
703
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1086"></th>
704
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1086" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1086" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
705
+ <button
706
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
707
+ </td>
708
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Philip Norton</td>
709
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">PhilipTNorton@example.com</td>
710
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Etiam cursus orci tellus, ut vehicula odio mattis sit amet. Curabitur eros …</td>
711
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
712
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
713
+ </tr>
714
+ <tr>
715
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1085"></th>
716
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1085" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1085" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
717
+ <button
718
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
719
+ </td>
720
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Kevin Gregory</td>
721
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">KevinJGregory@example.com</td>
722
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Cras vel orci congue, tincidunt eros vitae, consectetur risus. Proin enim m…</td>
723
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
724
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
725
+ </tr>
726
+ <tr>
727
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1084"></th>
728
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1084" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1084" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
729
+ <button
730
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
731
+ </td>
732
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">John Heiden</td>
733
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">JohnCHeiden@example.com</td>
734
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Fusce consequat dui ut orci tempus cursus. Vivamus ut neque id ipsum tempor…</td>
735
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
736
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
737
+ </tr>
738
+ <tr>
739
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1083"></th>
740
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1083" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1083" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
741
+ <button
742
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
743
+ </td>
744
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Laura Shuler</td>
745
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">LauraDShuler@example.com</td>
746
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">In ac finibus erat. Curabitur sit amet ante nec tellus commodo commodo non …</td>
747
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
748
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
749
+ </tr>
750
+ <tr>
751
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1082"></th>
752
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1082" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1082" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
753
+ <button
754
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
755
+ </td>
756
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Walter Sullivan</td>
757
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">WalterPSullivan@example.com</td>
758
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Phasellus semper magna leo, ut porta nibh pretium sed. Interdum et malesuad…</td>
759
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
760
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
761
+ </tr>
762
+ <tr>
763
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1081"></th>
764
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1081" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1081" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
765
+ <button
766
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
767
+ </td>
768
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Gary Austin</td>
769
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">GaryJAustin@example.com</td>
770
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet ero…</td>
771
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
772
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
773
+ </tr>
774
+ <tr>
775
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1080"></th>
776
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1080" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1080" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
777
+ <button
778
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
779
+ </td>
780
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Mark Frahm</td>
781
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">MarkTFrahm@example.com</td>
782
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Proin euismod tellus quis tortor bibendum, a pulvinar libero fringilla. Cur…</td>
783
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
784
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
785
+ </tr>
786
+ <tr>
787
+ <th scope="row" class="check-column"><input type="checkbox" name="entry_id[]" value="1079"></th>
788
+ <td class="indicators column-indicators has-row-actions column-primary" data-colname=""><a href="#" class="indicator-star star" data-id="1079" title="Star entry"><span class="dashicons dashicons-star-filled"></span></a><a href="#" class="indicator-read read" data-id="1079" title="Mark entry read"><span class="dashicons dashicons-marker"></span></a>
789
+ <button
790
+ type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>
791
+ </td>
792
+ <td class="wpforms_field_0 column-wpforms_field_0" data-colname="Name">Linda Reynolds</td>
793
+ <td class="wpforms_field_1 column-wpforms_field_1" data-colname="E-mail">LindaJReynolds@example.com</td>
794
+ <td class="wpforms_field_2 column-wpforms_field_2" data-colname="Comment or Message">Cras sodales sagittis maximus. Nunc vestibulum orci quis orci pulvinar vulp…</td>
795
+ <td class="date column-date" data-colname="Date">July 27, 2017</td>
796
+ <td class="actions column-actions" data-colname="Actions"><a href="#" title="View Form Entry" class="view">View</a> <span class="sep">|</span> <a href="#" title="Delete Form Entry" class="delete">Delete</a></td>
797
+ </tr>
798
+ </tbody>
799
+ <tfoot>
800
+ <tr>
801
+ <td class="manage-column column-cb check-column"><label class="screen-reader-text" for="cb-select-all-2">Select All</label><input id="cb-select-all-2" type="checkbox"></td>
802
+ <th scope="col" class="manage-column column-indicators column-primary"></th>
803
+ <th scope="col" class="manage-column column-wpforms_field_0">Name</th>
804
+ <th scope="col" class="manage-column column-wpforms_field_1">E-mail</th>
805
+ <th scope="col" class="manage-column column-wpforms_field_2">Comment or Message</th>
806
+ <th scope="col" class="manage-column column-date sortable desc"><a href="#"><span>Date</span><span class="sorting-indicator"></span></a></th>
807
+ <th scope="col" class="manage-column column-actions">Actions</th>
808
+ </tr>
809
+ </tfoot>
810
+ </table>
811
+ </form>
812
+ </div>
813
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
814
  </div>
815
+ <div class="clear"></div>
816
  <?php
817
  }
818
 
823
  */
824
  public function addon_page_enqueues() {
825
 
826
+ if ( ! isset( $_GET['page'] ) || 'wpforms-addons' !== $_GET['page'] ) {
827
  return;
828
+ }
829
 
830
+ // JS
831
+ wp_enqueue_script(
832
+ 'jquery-matchheight',
833
+ WPFORMS_PLUGIN_URL . 'assets/js/jQuery.matchHeight-min.js',
834
+ array( 'jquery' ),
835
+ '0.7.0',
836
+ false
 
 
 
 
 
837
  );
838
  }
839
 
844
  */
845
  public function addons_page() {
846
 
847
+ if ( ! isset( $_GET['page'] ) || 'wpforms-addons' !== $_GET['page'] ) {
848
  return;
849
  }
850
 
851
+ $upgrade = wpforms_admin_upgrade_link();
852
  $addons = array(
853
  array(
854
  'name' => 'Aweber',
917
  ),
918
  )
919
  ?>
920
+ <div id="wpforms-admin-addons" class="wrap wpforms-admin-wrap">
921
+ <h1 class="page-title">WPForms Addons</h1>
922
+ <div class="notice notice-info" style="display: block;">
923
  <p><strong>Form Addons are a PRO feature.</strong></p>
924
  <p>Please upgrade to the PRO plan to unlock them and more awesome features.</p>
925
+ <p><a href="https://wpforms.com/lite-upgrade/?utm_source=WordPress&amp;utm_medium=link&amp;utm_campaign=liteplugin" class="wpforms-btn wpforms-btn-orange wpforms-btn-md">Upgrade Now</a></p>
926
  </div>
927
+ <div class="wpforms-admin-content">
928
+ <div class="addons-container">
929
+ <?php foreach( $addons as $addon ) : ?>
930
+ <div class="addon-container">
931
+ <div class="addon-item">
932
+ <div class="details wpforms-clear" style=""><img src="https://wpforms.com/images/<?php echo $addon['icon']; ?>">
933
+ <h5><?php echo $addon['name']; ?> Addon</h5>
934
+ <p><?php echo $addon['desc']; ?></p>
935
+ </div>
936
+ <div class="actions wpforms-clear">
937
+ <div class="upgrade-button"><a href="<?php echo $upgrade; ?>" target="_blank" rel="noopener noreferrer" class="wpforms-btn wpforms-btn-light-grey">Upgrade Now</a></div>
938
+ </div>
939
+ </div>
940
+ </div>
941
+ <?php endforeach; ?>
942
+ <div style="clear:both;"></div>
943
  </div>
 
944
  </div>
 
 
945
  </div>
946
  <?php
947
  }
readme.txt CHANGED
@@ -44,7 +44,7 @@ Building contact forms in WordPress can be time consuming. Why?
44
 
45
  Because every other WordPress contact form builder plugin requires you to build your contact form from scratch. The truth is it's often not necessary to create a contact form completely from scratch unless you really want to.
46
 
47
- Whether you’re looking to create a simple contact form, request a quote form, donation form, payment order form, or a subscription form, we have a form template for you inside our contact form builder.
48
 
49
  WPForms comes with <a href="https://wpforms.com/features/form-templates/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">pre-built form templates</a> to help you save time. You can add, remove, or re-arrange fields as necessary.
50
 
@@ -209,6 +209,22 @@ Syed Balkhi
209
 
210
  == Changelog ==
211
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  = 1.3.8 =
213
  - Changed: Available conditional logic rules/functionality with Providers have been updated
214
  - Changed: Updated form builder modals (jquery-confirm.js)
44
 
45
  Because every other WordPress contact form builder plugin requires you to build your contact form from scratch. The truth is it's often not necessary to create a contact form completely from scratch unless you really want to.
46
 
47
+ Whether you're looking to create a simple contact form, request a quote form, donation form, payment order form, or a subscription form, we have a form template for you inside our contact form builder.
48
 
49
  WPForms comes with <a href="https://wpforms.com/features/form-templates/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">pre-built form templates</a> to help you save time. You can add, remove, or re-arrange fields as necessary.
50
 
209
 
210
  == Changelog ==
211
 
212
+ = 1.3.9.1 =
213
+ - Changed: Template Export excludes array items with empty strings
214
+ - Fixed: Admin notices displaying on plugin Welcome/activation screen
215
+ - Fixed: WPForms admin pages displaying blank due to conflicts with a few other plugins
216
+
217
+ = 1.3.9 =
218
+ - Added: Complete redesign and refactor of admin area
219
+ - Added: New Settings API
220
+ - Added: Entry print preview compact mode
221
+ - Added: Entry print preview view entry notes
222
+ - Added: Dynamic field choices nest hierarchical items
223
+ - Added: Form import/export to Tools sub page
224
+ - Added: Form template export to Tools sub page
225
+ - Changed: System Info content to new Tools sub-page
226
+ - Changed: Shortcode provided in form builder now includes title/description arguments
227
+
228
  = 1.3.8 =
229
  - Changed: Available conditional logic rules/functionality with Providers have been updated
230
  - Changed: Updated form builder modals (jquery-confirm.js)
wpforms.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms.
6
  * Author: WPForms
7
  * Author URI: https://wpforms.com
8
- * Version: 1.3.8
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
@@ -29,11 +29,13 @@
29
  * @copyright Copyright (c) 2016, WPForms LLC
30
  */
31
 
32
- // Exit if accessed directly
33
- if ( ! defined( 'ABSPATH' ) ) exit;
 
 
34
 
35
  // Don't allow multiple versions to be active
36
- if ( class_exists( 'WPForms' ) ) :
37
 
38
  /**
39
  * Deactivate if WPForms already activated.
@@ -41,6 +43,7 @@ if ( class_exists( 'WPForms' ) ) :
41
  * @since 1.0.0
42
  */
43
  function wpforms_deactivate() {
 
44
  deactivate_plugins( plugin_basename( __FILE__ ) );
45
  }
46
  add_action( 'admin_init', 'wpforms_deactivate' );
@@ -51,268 +54,300 @@ if ( class_exists( 'WPForms' ) ) :
51
  * @since 1.0.0
52
  */
53
  function wpforms_lite_notice() {
 
54
  echo '<div class="notice notice-warning"><p>' . __( 'Please deactivate WPForms Lite before activating WPForms', 'wpforms' ) . '</p></div>';
55
- if ( isset( $_GET['activate'] ) )
 
56
  unset( $_GET['activate'] );
 
57
  }
58
  add_action( 'admin_notices', 'wpforms_lite_notice' );
59
 
60
- else :
61
-
62
- /**
63
- * Main WPForms class.
64
- *
65
- * @since 1.0.0
66
- * @package WPForms
67
- */
68
- final class WPForms {
69
-
70
- /**
71
- * One is the loneliest number that you'll ever do.
72
- *
73
- * @since 1.0.0
74
- * @var object
75
- */
76
- private static $instance;
77
-
78
- /**
79
- * Plugin version for enqueueing, etc.
80
- *
81
- * @since 1.0.0
82
- * @var sting
83
- */
84
- public $version = '1.3.8';
85
-
86
- /**
87
- * The form data handler instance.
88
- *
89
- * @var object WPForms_Form_Handler
90
- * @since 1.0.0
91
- */
92
- public $form;
93
-
94
- /**
95
- * The entry data handler instance (Pro).
96
- *
97
- * @var object WPForms_Entry_Handler
98
- * @since 1.0.0
99
- */
100
- public $entry;
101
-
102
- /**
103
- * The entry meta data handler instance (Pro).
104
- *
105
- * @var object WPForms_Entry_Meta_Handler
106
- * @since 1.1.6
107
- */
108
- public $entry_meta;
109
-
110
- /**
111
- * The front-end instance.
112
- *
113
- * @var object WPForms_Frontend
114
- * @since 1.0.0
115
- */
116
- public $frontend;
117
-
118
- /**
119
- * The process instance.
120
- *
121
- * @var object WPForms_Process
122
- * @since 1.0.0
123
- */
124
- public $process;
125
 
126
  /**
127
- * The smart tags instance.
128
  *
129
- * @var object WPForms_Smart_Tags
130
  * @since 1.0.0
 
131
  */
132
- public $smart_tags;
133
-
134
- /**
135
- * The Logging instance.
136
- *
137
- * @var object WPForms_Logging
138
- * @since 1.0.0
139
- */
140
- public $logs;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
- /**
143
- * The Preview instance.
144
- *
145
- * @var object WPForms_Preview
146
- * @since 1.1.9
147
- */
148
- public $preview;
149
 
150
- /**
151
- * The License class instance (Pro).
152
- *
153
- * @var object WPForms_License
154
- * @since 1.0.0
155
- */
156
- public $license;
157
 
158
- /**
159
- * Main WPForms Instance.
160
- *
161
- * Insures that only one instance of WPForms exists in memory at any one
162
- * time. Also prevents needing to define globals all over the place.
163
- *
164
- * @since 1.0.0
165
- * @return WPForms
166
- */
167
- public static function instance() {
168
 
169
- if ( ! isset( self::$instance ) && ! ( self::$instance instanceof WPForms ) ) {
 
 
 
170
 
171
- self::$instance = new WPForms;
172
- self::$instance->constants();
173
- self::$instance->load_textdomain();
174
- self::$instance->conditional_logic_addon_check();
175
- self::$instance->includes();
176
 
177
- // Load Pro or Lite specific files
178
  if ( file_exists( WPFORMS_PLUGIN_DIR . 'pro/wpforms-pro.php' ) ) {
179
- require_once WPFORMS_PLUGIN_DIR . 'pro/wpforms-pro.php';
 
180
  } else {
181
- require_once WPFORMS_PLUGIN_DIR . 'lite/wpforms-lite.php';
182
  }
183
-
184
- add_action( 'plugins_loaded', array( self::$instance, 'objects' ), 10 );
185
  }
186
- return self::$instance;
187
- }
188
 
189
- /**
190
- * Setup plugin constants.
191
- *
192
- * @since 1.0.0
193
- */
194
- private function constants() {
195
 
196
- // Plugin version
197
- if ( ! defined( 'WPFORMS_VERSION' ) ) {
198
- define( 'WPFORMS_VERSION', $this->version );
199
  }
200
 
201
- // Plugin Folder Path
202
- if ( ! defined( 'WPFORMS_PLUGIN_DIR' ) ) {
203
- define( 'WPFORMS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
204
- }
 
 
 
205
 
206
- // Plugin Folder URL
207
- if ( ! defined( 'WPFORMS_PLUGIN_URL' ) ) {
208
- define( 'WPFORMS_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
209
- }
210
 
211
- // Plugin Root File
212
- if ( ! defined( 'WPFORMS_PLUGIN_FILE' ) ) {
213
- define( 'WPFORMS_PLUGIN_FILE', __FILE__ );
214
- }
215
- }
216
 
217
- /**
218
- * Loads the plugin language files.
219
- *
220
- * @since 1.0.0
221
- */
222
- public function load_textdomain() {
223
 
224
- load_plugin_textdomain( 'wpforms', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
225
- }
 
 
 
 
226
 
227
- /**
228
- * Check to see if the conditional logic addon is running, if so then
229
- * deactivate the plugin to prevent conflicts.
230
- *
231
- * @since 1.3.8
232
- */
233
- private function conditional_logic_addon_check() {
234
-
235
- if ( function_exists( 'wpforms_conditional_logic' ) ) {
236
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
237
- require_once( ABSPATH . 'wp-includes/pluggable.php' );
238
- deactivate_plugins( 'wpforms-conditional-logic/wpforms-conditional-logic.php' );
239
- $url = esc_url_raw( remove_query_arg( 'wpforms-test' ) );
240
- wp_redirect( $url );
241
- exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  }
243
- }
244
 
245
- /**
246
- * Include files.
247
- *
248
- * @since 1.0.0
249
- */
250
- private function includes() {
251
-
252
- // Global includes
253
- require_once WPFORMS_PLUGIN_DIR . 'includes/functions.php';
254
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-install.php';
255
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-form.php';
256
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-fields.php';
257
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-frontend.php';
258
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-templates.php';
259
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-providers.php';
260
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-process.php';
261
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-smart-tags.php';
262
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-logging.php';
263
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-widget.php';
264
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-preview.php';
265
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-conditional-logic-core.php';
266
- require_once WPFORMS_PLUGIN_DIR . 'includes/emails/class-emails.php';
267
- require_once WPFORMS_PLUGIN_DIR . 'includes/integrations.php';
268
-
269
- // Admin/Dashboard only includes
270
- if ( is_admin() ) {
271
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-menu.php';
272
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/overview/class-overview.php';
273
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/class-builder.php';
274
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/functions.php';
275
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-welcome.php';
276
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-editor.php';
277
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/ajax-actions.php';
278
  }
279
  }
280
 
281
  /**
282
- * Setup objects.
283
  *
284
  * @since 1.0.0
 
285
  */
286
- public function objects() {
287
-
288
- // Global objects
289
- $this->form = new WPForms_Form_Handler;
290
- $this->frontend = new WPForms_Frontend;
291
- $this->process = new WPForms_Process;
292
- $this->smart_tags = new WPForms_Smart_Tags;
293
- $this->logs = new WPForms_Logging;
294
- $this->preview = new WPForms_Preview;
295
-
296
- // Hook now that all of the WPForms stuff is loaded.
297
- do_action( 'wpforms_loaded' );
298
- }
299
- }
300
 
301
- /**
302
- * The function which returns the one WPForms instance.
303
- *
304
- * Use this function like you would a global variable, except without needing
305
- * to declare the global.
306
- *
307
- * Example: <?php $wpforms = wpforms(); ?>
308
- *
309
- * @since 1.0.0
310
- * @return object
311
- */
312
- function wpforms() {
313
-
314
- return WPForms::instance();
315
- }
316
- wpforms();
317
 
318
- endif;
5
  * Description: Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms.
6
  * Author: WPForms
7
  * Author URI: https://wpforms.com
8
+ * Version: 1.3.9.1
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
29
  * @copyright Copyright (c) 2016, WPForms LLC
30
  */
31
 
32
+ // Exit if accessed directly.
33
+ if ( ! defined( 'ABSPATH' ) ) {
34
+ exit;
35
+ }
36
 
37
  // Don't allow multiple versions to be active
38
+ if ( class_exists( 'WPForms' ) ) {
39
 
40
  /**
41
  * Deactivate if WPForms already activated.
43
  * @since 1.0.0
44
  */
45
  function wpforms_deactivate() {
46
+
47
  deactivate_plugins( plugin_basename( __FILE__ ) );
48
  }
49
  add_action( 'admin_init', 'wpforms_deactivate' );
54
  * @since 1.0.0
55
  */
56
  function wpforms_lite_notice() {
57
+
58
  echo '<div class="notice notice-warning"><p>' . __( 'Please deactivate WPForms Lite before activating WPForms', 'wpforms' ) . '</p></div>';
59
+
60
+ if ( isset( $_GET['activate'] ) ) {
61
  unset( $_GET['activate'] );
62
+ }
63
  }
64
  add_action( 'admin_notices', 'wpforms_lite_notice' );
65
 
66
+ } else {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
  /**
69
+ * Main WPForms class.
70
  *
 
71
  * @since 1.0.0
72
+ * @package WPForms
73
  */
74
+ final class WPForms {
75
+
76
+ /**
77
+ * One is the loneliest number that you'll ever do.
78
+ *
79
+ * @since 1.0.0
80
+ * @var object
81
+ */
82
+ private static $instance;
83
+
84
+ /**
85
+ * Plugin version for enqueueing, etc.
86
+ *
87
+ * @since 1.0.0
88
+ * @var sting
89
+ */
90
+ public $version = '1.3.9.1';
91
+
92
+ /**
93
+ * The form data handler instance.
94
+ *
95
+ * @var object WPForms_Form_Handler
96
+ * @since 1.0.0
97
+ */
98
+ public $form;
99
+
100
+ /**
101
+ * The entry data handler instance (Pro).
102
+ *
103
+ * @var object WPForms_Entry_Handler
104
+ * @since 1.0.0
105
+ */
106
+ public $entry;
107
+
108
+ /**
109
+ * The entry meta data handler instance (Pro).
110
+ *
111
+ * @var object WPForms_Entry_Meta_Handler
112
+ * @since 1.1.6
113
+ */
114
+ public $entry_meta;
115
+
116
+ /**
117
+ * The front-end instance.
118
+ *
119
+ * @var object WPForms_Frontend
120
+ * @since 1.0.0
121
+ */
122
+ public $frontend;
123
+
124
+ /**
125
+ * The process instance.
126
+ *
127
+ * @var object WPForms_Process
128
+ * @since 1.0.0
129
+ */
130
+ public $process;
131
+
132
+ /**
133
+ * The smart tags instance.
134
+ *
135
+ * @var object WPForms_Smart_Tags
136
+ * @since 1.0.0
137
+ */
138
+ public $smart_tags;
139
+
140
+ /**
141
+ * The Logging instance.
142
+ *
143
+ * @var object WPForms_Logging
144
+ * @since 1.0.0
145
+ */
146
+ public $logs;
147
+
148
+ /**
149
+ * The Preview instance.
150
+ *
151
+ * @var object WPForms_Preview
152
+ * @since 1.1.9
153
+ */
154
+ public $preview;
155
+
156
+ /**
157
+ * The License class instance (Pro).
158
+ *
159
+ * @var object WPForms_License
160
+ * @since 1.0.0
161
+ */
162
+ public $license;
163
+
164
+ /**
165
+ * Paid returns true, free (Lite) returns false.
166
+ *
167
+ * @var boolean
168
+ * @since 1.3.9
169
+ */
170
+ public $pro = false;
171
+
172
+ /**
173
+ * Main WPForms Instance.
174
+ *
175
+ * Insures that only one instance of WPForms exists in memory at any one
176
+ * time. Also prevents needing to define globals all over the place.
177
+ *
178
+ * @since 1.0.0
179
+ * @return WPForms
180
+ */
181
+ public static function instance() {
182
+
183
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof WPForms ) ) {
184
+
185
+ self::$instance = new WPForms;
186
+ self::$instance->constants();
187
+ self::$instance->load_textdomain();
188
+ self::$instance->conditional_logic_addon_check();
189
+ self::$instance->includes();
190
+
191
+ // Load Pro or Lite specific files
192
+ if ( self::$instance->pro ) {
193
+ require_once WPFORMS_PLUGIN_DIR . 'pro/wpforms-pro.php';
194
+ } else {
195
+ require_once WPFORMS_PLUGIN_DIR . 'lite/wpforms-lite.php';
196
+ }
197
+
198
+ add_action( 'plugins_loaded', array( self::$instance, 'objects' ), 10 );
199
+ }
200
+ return self::$instance;
201
+ }
202
 
203
+ /**
204
+ * Setup plugin constants.
205
+ *
206
+ * @since 1.0.0
207
+ */
208
+ private function constants() {
 
209
 
210
+ // Plugin version.
211
+ if ( ! defined( 'WPFORMS_VERSION' ) ) {
212
+ define( 'WPFORMS_VERSION', $this->version );
213
+ }
 
 
 
214
 
215
+ // Plugin Folder Path.
216
+ if ( ! defined( 'WPFORMS_PLUGIN_DIR' ) ) {
217
+ define( 'WPFORMS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
218
+ }
 
 
 
 
 
 
219
 
220
+ // Plugin Folder URL.
221
+ if ( ! defined( 'WPFORMS_PLUGIN_URL' ) ) {
222
+ define( 'WPFORMS_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
223
+ }
224
 
225
+ // Plugin Root File.
226
+ if ( ! defined( 'WPFORMS_PLUGIN_FILE' ) ) {
227
+ define( 'WPFORMS_PLUGIN_FILE', __FILE__ );
228
+ }
 
229
 
230
+ // Plugin Slug - Determine plugin type and set slug accordingly.
231
  if ( file_exists( WPFORMS_PLUGIN_DIR . 'pro/wpforms-pro.php' ) ) {
232
+ $this->pro = true;
233
+ define( 'WPFORMS_PLUGIN_SLUG', 'wpforms' );
234
  } else {
235
+ define( 'WPFORMS_PLUGIN_SLUG', 'wpforms-lite' );
236
  }
 
 
237
  }
 
 
238
 
239
+ /**
240
+ * Loads the plugin language files.
241
+ *
242
+ * @since 1.0.0
243
+ */
244
+ public function load_textdomain() {
245
 
246
+ load_plugin_textdomain( 'wpforms', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
 
 
247
  }
248
 
249
+ /**
250
+ * Check to see if the conditional logic addon is running, if so then
251
+ * deactivate the plugin to prevent conflicts.
252
+ *
253
+ * @since 1.3.8
254
+ */
255
+ private function conditional_logic_addon_check() {
256
 
257
+ if ( function_exists( 'wpforms_conditional_logic' ) ) {
 
 
 
258
 
259
+ // Load core files needed to activate deactivate_plugins().
260
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
261
+ require_once( ABSPATH . 'wp-includes/pluggable.php' );
 
 
262
 
263
+ // Deactivate Conditional Logic addon.
264
+ deactivate_plugins( 'wpforms-conditional-logic/wpforms-conditional-logic.php' );
 
 
 
 
265
 
266
+ // To avoid namespace collisions, reload current page.
267
+ $url = esc_url_raw( remove_query_arg( 'wpforms-test' ) );
268
+ wp_redirect( $url );
269
+ exit;
270
+ }
271
+ }
272
 
273
+ /**
274
+ * Include files.
275
+ *
276
+ * @since 1.0.0
277
+ */
278
+ private function includes() {
279
+
280
+ // Global includes.
281
+ require_once WPFORMS_PLUGIN_DIR . 'includes/functions.php';
282
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-install.php';
283
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-form.php';
284
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-fields.php';
285
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-frontend.php';
286
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-templates.php';
287
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-providers.php';
288
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-process.php';
289
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-smart-tags.php';
290
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-logging.php';
291
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-widget.php';
292
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-preview.php';
293
+ require_once WPFORMS_PLUGIN_DIR . 'includes/class-conditional-logic-core.php';
294
+ require_once WPFORMS_PLUGIN_DIR . 'includes/emails/class-emails.php';
295
+ require_once WPFORMS_PLUGIN_DIR . 'includes/integrations.php';
296
+
297
+ // Admin/Dashboard only includes.
298
+ if ( is_admin() ) {
299
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/admin.php';
300
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-notices.php';
301
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-menu.php';
302
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/overview/class-overview.php';
303
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/class-builder.php';
304
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/functions.php';
305
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-settings.php';
306
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-welcome.php';
307
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-tools.php';
308
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-editor.php';
309
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-review.php';
310
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/ajax-actions.php';
311
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-am-notification.php';
312
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-am-deactivation-survey.php';
313
+ }
314
  }
 
315
 
316
+ /**
317
+ * Setup objects.
318
+ *
319
+ * @since 1.0.0
320
+ */
321
+ public function objects() {
322
+
323
+ // Global objects.
324
+ $this->form = new WPForms_Form_Handler;
325
+ $this->frontend = new WPForms_Frontend;
326
+ $this->process = new WPForms_Process;
327
+ $this->smart_tags = new WPForms_Smart_Tags;
328
+ $this->logs = new WPForms_Logging;
329
+ $this->preview = new WPForms_Preview;
330
+
331
+ if ( is_admin() ) {
332
+ new AM_Notification( WPFORMS_PLUGIN_SLUG, $this->version );
333
+ new AM_Deactivation_Survey( 'WPForms', basename( __DIR__ ) );
334
+ }
335
+
336
+ // Hook now that all of the WPForms stuff is loaded.
337
+ do_action( 'wpforms_loaded' );
 
 
 
 
 
 
 
 
 
 
 
338
  }
339
  }
340
 
341
  /**
342
+ * The function which returns the one WPForms instance.
343
  *
344
  * @since 1.0.0
345
+ * @return object
346
  */
347
+ function wpforms() {
 
 
 
 
 
 
 
 
 
 
 
 
 
348
 
349
+ return WPForms::instance();
350
+ }
351
+ wpforms();
 
 
 
 
 
 
 
 
 
 
 
 
 
352
 
353
+ } // End if().