Version Description
Download this release
Release Info
Developer | cklosows |
Plugin | Easy Digital Downloads |
Version | 2.11.4 |
Comparing to | |
See all releases |
Code changes from version 2.11.3.1 to 2.11.4
- assets/css/edd-admin.css +645 -77
- assets/css/edd-admin.min.css +1 -1
- assets/css/extension-manager.css +143 -0
- assets/css/extension-manager.min.css +1 -0
- assets/js/admin-notifications.js +118 -0
- assets/js/admin-notifications.min.js +1 -0
- assets/js/admin-scripts.js +10 -79
- assets/js/admin-scripts.min.js +1 -1
- assets/js/alpine.min.js +5 -0
- assets/js/extension-manager.js +75 -0
- assets/js/extension-manager.min.js +1 -0
- easy-digital-downloads.php +83 -15
- includes/admin/admin-pages.php +5 -0
- includes/admin/class-edd-notices.php +3 -3
- includes/admin/class-pass-manager.php +117 -13
- includes/admin/dashboard-widgets.php +12 -2
- includes/admin/downloads/metabox.php +1 -103
- includes/admin/extensions/abstract-extension.php +344 -0
- includes/admin/extensions/class-extension-manager.php +485 -0
- includes/admin/extensions/class-extension-product-data.php +111 -0
- includes/admin/extensions/class-extensions-api.php +222 -0
- includes/admin/extensions/product-education/class-email-marketing.php +127 -0
- includes/admin/extensions/product-education/class-invoices.php +116 -0
- includes/admin/extensions/product-education/class-recurring.php +116 -0
- includes/admin/extensions/product-education/class-reviews.php +144 -0
- includes/admin/extensions/product-education/class-wpsmtp.php +232 -0
- includes/admin/installers/class-install-skin.php +29 -0
- includes/admin/installers/class-plugin-silent-upgrader-skin.php +57 -0
- includes/admin/installers/class-plugin-silent-upgrader.php +608 -0
- includes/admin/promos/class-promo-handler.php +49 -6
- includes/admin/promos/notices/abstract-notice.php +7 -2
- includes/admin/promos/notices/class-five-star-review-dashboard.php +189 -0
- includes/admin/promos/notices/class-five-star-review-settings.php +68 -0
- includes/admin/promos/notices/class-license-upgrade-notice.php +1 -4
- includes/admin/reporting/export/class-batch-export-customers.php +27 -18
- includes/admin/reporting/export/class-batch-export-earnings-report.php +10 -19
- includes/admin/settings/contextual-help.php +26 -15
- includes/admin/settings/display-settings.php +43 -6
- includes/admin/settings/register-settings.php +46 -142
- includes/admin/settings/settings-compatibility.php +164 -0
- includes/admin/upload-functions.php +1 -1
- includes/admin/views/notifications.php +106 -0
- includes/ajax-functions.php +7 -0
- includes/api/v3/Endpoint.php +26 -0
- includes/api/v3/Notifications.php +124 -0
- includes/class-edd-cli.php +3 -2
- includes/class-edd-license-handler.php +19 -6
- includes/database/NotificationsDB.php +258 -0
- includes/deprecated-functions.php +284 -0
- includes/download-functions.php +42 -25
- includes/emails/actions.php +10 -2
- includes/emails/class-edd-emails.php +2 -0
- includes/emails/functions.php +4 -97
- includes/extensions/ExtensionRegistry.php +74 -0
- includes/extensions/licensing-functions.php +97 -0
- includes/gateways/paypal-standard.php +1 -1
- includes/gateways/stripe/edd-stripe.php +4 -4
- includes/gateways/stripe/includes/admin/admin-actions.php +23 -0
- includes/gateways/stripe/includes/admin/admin-filters.php +33 -19
- includes/gateways/stripe/includes/admin/settings/stripe-connect.php +3 -11
- includes/gateways/stripe/includes/admin/upgrade-functions.php +24 -1
- includes/gateways/stripe/includes/class-edd-stripe.php +22 -10
- includes/gateways/stripe/includes/payment-methods/buy-now/functions.php +5 -3
- includes/gateways/stripe/includes/scripts.php +1 -1
- includes/gateways/stripe/vendor/composer/ClassLoader.php +4 -40
- includes/gateways/stripe/vendor/composer/LICENSE +0 -2
- includes/gateways/stripe/vendor/composer/autoload_classmap.php +0 -1
- includes/gateways/stripe/vendor/composer/autoload_real.php +2 -4
- includes/gateways/stripe/vendor/composer/autoload_static.php +0 -5
- includes/gateways/stripe/vendor/composer/installed.json +213 -219
- includes/gateways/stripe/vendor/composer/installed.php +2 -2
- includes/install.php +8 -0
- includes/misc-functions.php +39 -19
- includes/models/Notification.php +192 -0
- includes/process-download.php +1 -0
- includes/scripts.php +19 -0
- includes/utils/EnvironmentChecker.php +227 -0
- includes/utils/NotificationImporter.php +228 -0
- languages/easy-digital-downloads.pot +820 -592
- readme.txt +33 -9
assets/css/edd-admin.css
CHANGED
@@ -10,6 +10,7 @@
|
|
10 |
.edd-hidden {
|
11 |
display: none;
|
12 |
}
|
|
|
13 |
.edd-clearfix:after {
|
14 |
content: ".";
|
15 |
display: block;
|
@@ -17,13 +18,16 @@
|
|
17 |
text-indent: -9999px;
|
18 |
visibility: hidden;
|
19 |
}
|
|
|
20 |
.edd-wrap a,
|
21 |
.edd-notice .notice-dismiss {
|
22 |
text-decoration: none;
|
23 |
}
|
|
|
24 |
a.edd-delete {
|
25 |
color: #a00;
|
26 |
}
|
|
|
27 |
a.edd-delete:hover {
|
28 |
color: #f00;
|
29 |
}
|
@@ -47,11 +51,69 @@ body.post-type-download #screen-meta {
|
|
47 |
background: #fff;
|
48 |
}
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
#edd-header img {
|
51 |
display: block;
|
52 |
margin: 0;
|
53 |
max-width: 300px;
|
54 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
}
|
56 |
|
57 |
.edd-settings-sub-nav {
|
@@ -134,10 +196,13 @@ body.post-type-download #screen-meta {
|
|
134 |
margin: 4px 0 0;
|
135 |
}
|
136 |
|
137 |
-
.download_page_edd-settings .form-table input.small-text
|
138 |
-
.download_page_edd-settings .form-table input[type="checkbox"]
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
141 |
font-size: 1.2em;
|
142 |
font-weight: 600;
|
143 |
margin: 0 auto;
|
@@ -153,7 +218,7 @@ body.post-type-download #screen-meta {
|
|
153 |
background: #333 !important;
|
154 |
border-width: 1px !important;
|
155 |
border-radius: 3px !important;
|
156 |
-
box-shadow: 1px 1px 2px 1px rgba(214,214,214,0.5) !important;
|
157 |
color: #dedede !important;
|
158 |
max-width: 300px !important;
|
159 |
padding: 7px !important;
|
@@ -163,9 +228,9 @@ body.post-type-download #screen-meta {
|
|
163 |
}
|
164 |
|
165 |
.download_page_edd-settings .edd-settings-payment-icon-wrapper {
|
166 |
-
margin-right:10px;
|
167 |
-
line-height:16px;
|
168 |
-
height:16px;
|
169 |
display: table;
|
170 |
}
|
171 |
|
@@ -181,18 +246,23 @@ body.post-type-download #screen-meta {
|
|
181 |
right: 0;
|
182 |
position: absolute;
|
183 |
}
|
|
|
184 |
.edd-add-ons-footer {
|
185 |
padding-top: 10px;
|
186 |
}
|
|
|
187 |
#edd-add-ons h2 {
|
188 |
margin: 0 0 15px;
|
189 |
}
|
|
|
190 |
.edd-add-ons-view-wrapper {
|
191 |
height: 50px;
|
192 |
}
|
|
|
193 |
#edd-add-ons h2 .button-primary {
|
194 |
position: absolute;
|
195 |
}
|
|
|
196 |
#edd-add-ons .edd-extension {
|
197 |
background: #fff;
|
198 |
border: 1px solid #ccc;
|
@@ -203,30 +273,37 @@ body.post-type-download #screen-meta {
|
|
203 |
width: 320px;
|
204 |
height: 315px;
|
205 |
}
|
|
|
206 |
#edd-add-ons .edd-extension h3 {
|
207 |
font-size: 13px;
|
208 |
margin: 0 0 8px;
|
209 |
}
|
|
|
210 |
#edd-add-ons .edd-extension .button-secondary {
|
211 |
position: absolute;
|
212 |
bottom: 14px;
|
213 |
left: 14px;
|
214 |
}
|
|
|
215 |
#edd-add-ons .edd-browse-all {
|
216 |
-
clear:both;
|
217 |
-
width:100%;
|
218 |
}
|
|
|
219 |
#edd-add-ons .edd-extension .third-party {
|
220 |
display: none;
|
221 |
}
|
|
|
222 |
#edd-add-ons .edd-starter-package {
|
223 |
background-color: #85c0e5;
|
224 |
border-color: #62a9d7;
|
225 |
color: #fff;
|
226 |
}
|
|
|
227 |
#edd-add-ons .edd-starter-package h3 {
|
228 |
color: #fff;
|
229 |
}
|
|
|
230 |
#edd-add-ons .edd-extension .wp-post-image {
|
231 |
width: 100%;
|
232 |
height: auto;
|
@@ -240,6 +317,7 @@ body.post-type-download #screen-meta {
|
|
240 |
height: 100px;
|
241 |
min-width: 200px;
|
242 |
}
|
|
|
243 |
#edd-add-discount input[type="text"],
|
244 |
#edd-edit-discount input[type="text"] {
|
245 |
width: 300px;
|
@@ -259,8 +337,8 @@ body.post-type-download #screen-meta {
|
|
259 |
clear: both;
|
260 |
background-image: -webkit-gradient(linear, left bottom, left top, from(#f5f5f5), to(#fafafa));
|
261 |
background-image: -webkit-linear-gradient(bottom, #f5f5f5, #fafafa);
|
262 |
-
background-image:
|
263 |
-
background-image:
|
264 |
background-image: linear-gradient(to top, #f5f5f5, #fafafa);
|
265 |
border-color: #dfdfdf;
|
266 |
border-width: 1px;
|
@@ -272,45 +350,56 @@ body.post-type-download #screen-meta {
|
|
272 |
padding: 12px;
|
273 |
margin: 8px 0;
|
274 |
}
|
|
|
275 |
#edd-payments-filter ul.subsubsub {
|
276 |
margin-bottom: 8px;
|
277 |
}
|
|
|
278 |
#edd-payment-filters p {
|
279 |
color: #777;
|
280 |
}
|
|
|
281 |
#edd-payment-date-filters input {
|
282 |
vertical-align: middle;
|
283 |
}
|
|
|
284 |
tr.status-refunded td {
|
285 |
background: #cecece;
|
286 |
border-top-color: #ccc;
|
287 |
}
|
|
|
288 |
.wp-list-table.downloads th#ID {
|
289 |
width: 80px;
|
290 |
}
|
|
|
291 |
.wp-list-table.downloads th#details {
|
292 |
width: 130px;
|
293 |
}
|
|
|
294 |
.wp-list-table.downloads th#date {
|
295 |
width: 140px;
|
296 |
}
|
|
|
297 |
.wp-list-table.downloads th#user {
|
298 |
width: 130px;
|
299 |
}
|
|
|
300 |
.edd-mobile-link {
|
301 |
line-height: 32px;
|
302 |
vertical-align: middle;
|
303 |
}
|
|
|
304 |
.edd-mobile-link img {
|
305 |
max-width: 80%;
|
306 |
height: auto;
|
307 |
float: left;
|
308 |
}
|
309 |
|
310 |
-
@media handheld,
|
|
|
311 |
|
312 |
.wp-list-table.downloads th {
|
313 |
-
width: auto!important;
|
314 |
}
|
315 |
|
316 |
}
|
@@ -319,6 +408,7 @@ tr.status-refunded td {
|
|
319 |
margin-left: -8px;
|
320 |
margin-top: -8px;
|
321 |
}
|
|
|
322 |
#edd-download-link-textarea {
|
323 |
width: 100%;
|
324 |
}
|
@@ -330,51 +420,64 @@ tr.status-refunded td {
|
|
330 |
width: 225px;
|
331 |
float: left;
|
332 |
}
|
|
|
333 |
.edd_files_url_label {
|
334 |
width: 220px;
|
335 |
float: left;
|
336 |
}
|
|
|
337 |
#postbox-container-1 .edd_files_name_label {
|
338 |
width: 80px;
|
339 |
}
|
|
|
340 |
#postbox-container-1 .edd_files_url_label {
|
341 |
width: 80px;
|
342 |
}
|
|
|
343 |
.edd-add-repeatable-row {
|
344 |
margin: 10px 0;
|
345 |
}
|
|
|
346 |
.edd-add-repeatable-row .submit {
|
347 |
padding: 0 !important;
|
348 |
}
|
|
|
349 |
.edd_variable_prices_wrapper:not(:first-child),
|
350 |
.edd_repeatable_upload_wrapper:not(:first-child) {
|
351 |
margin-top: 12px;
|
352 |
}
|
|
|
353 |
.edd-repeatable-row-actions {
|
354 |
color: #777;
|
355 |
font-size: 12px;
|
356 |
}
|
|
|
357 |
.edd-repeatable-row-actions a {
|
358 |
text-decoration: none;
|
359 |
width: auto;
|
360 |
cursor: pointer;
|
361 |
vertical-align: middle;
|
362 |
}
|
|
|
363 |
.edd-repeatable-row-actions .toggle-custom-price-option-section {
|
364 |
color: #777;
|
365 |
}
|
|
|
366 |
.edd-repeatable-row-actions .toggle-custom-price-option-section:hover {
|
367 |
color: #444;
|
368 |
}
|
|
|
369 |
.edd-repeatable-row-header,
|
370 |
.edd-bundle-products-header {
|
371 |
clear: both;
|
372 |
background: #f1f1f1;
|
373 |
border: 1px solid #e5e5e5;
|
374 |
}
|
|
|
375 |
.edd-repeatable-row-header {
|
376 |
cursor: move;
|
377 |
}
|
|
|
378 |
.edd-repeatable-row-header:before,
|
379 |
.edd-repeatable-row-header:after,
|
380 |
.edd-bundled-product-row:before,
|
@@ -382,14 +485,17 @@ tr.status-refunded td {
|
|
382 |
content: '';
|
383 |
display: table;
|
384 |
}
|
|
|
385 |
.edd-repeatable-row-header:after,
|
386 |
.edd-bundled-product-row:after {
|
387 |
clear: both;
|
388 |
}
|
|
|
389 |
.edd-repeatable-row-title {
|
390 |
float: left;
|
391 |
font-weight: 600;
|
392 |
}
|
|
|
393 |
.edd-bundled-product-item-reorder .edd-product-file-reorder {
|
394 |
color: #e5e5e5;
|
395 |
font-family: "dashicons";
|
@@ -400,25 +506,30 @@ tr.status-refunded td {
|
|
400 |
vertical-align: top;
|
401 |
transition: .2s color;
|
402 |
}
|
|
|
403 |
.edd-bundled-product-item-reorder .edd-product-file-reorder:hover {
|
404 |
color: #bbb;
|
405 |
}
|
|
|
406 |
.edd-repeatable-row-title,
|
407 |
.edd-repeatable-row-actions {
|
408 |
padding: 8px;
|
409 |
box-sizing: border-box;
|
410 |
}
|
|
|
411 |
.edd-repeatable-row-actions {
|
412 |
float: right;
|
413 |
text-align: right;
|
414 |
padding: 8px;
|
415 |
}
|
|
|
416 |
.edd-repeatable-row-actions .edd-remove-row,
|
417 |
.edd-bundled-product-row .edd-remove-row {
|
418 |
font-size: 12px;
|
419 |
width: auto;
|
420 |
cursor: pointer;
|
421 |
}
|
|
|
422 |
.edd-repeatable-row-standard-fields,
|
423 |
.edd-bundled-product-row {
|
424 |
background: #f9f9f9;
|
@@ -427,14 +538,17 @@ tr.status-refunded td {
|
|
427 |
border-style: solid;
|
428 |
border-color: #e5e5e5;
|
429 |
}
|
|
|
430 |
.edd-repeatable-row-setting-label {
|
431 |
display: block;
|
432 |
margin-bottom: 4px;
|
433 |
}
|
|
|
434 |
.edd-repeatable-row-setting-label .edd-help-tip {
|
435 |
display: inline-block;
|
436 |
margin-left: 4px;
|
437 |
}
|
|
|
438 |
.edd-option-name,
|
439 |
.edd-option-price,
|
440 |
.edd_repeatable_default,
|
@@ -448,34 +562,43 @@ tr.status-refunded td {
|
|
448 |
display: inline-block;
|
449 |
vertical-align: top;
|
450 |
}
|
|
|
451 |
.edd-option-name {
|
452 |
width: 38%;
|
453 |
margin-right: 5%;
|
454 |
}
|
|
|
455 |
.edd-option-price {
|
456 |
min-width: 100px;
|
457 |
}
|
|
|
458 |
.edd_repeatable_default {
|
459 |
text-align: center;
|
460 |
min-width: 80px;
|
461 |
}
|
|
|
462 |
.edd-file-name {
|
463 |
width: 18%;
|
464 |
margin-right: 3%;
|
465 |
}
|
|
|
466 |
.edd-file-url {
|
467 |
width: 65%;
|
468 |
}
|
|
|
469 |
.edd-repeatable-row-standard-fields.has-variable-pricing .edd-file-url {
|
470 |
width: 38%;
|
471 |
margin-right: 5%;
|
472 |
}
|
|
|
473 |
.edd-file-assignment {
|
474 |
width: 27%;
|
475 |
}
|
|
|
476 |
.edd-file-assignment .edd-repeatable-row-setting-label {
|
477 |
margin-bottom: 0;
|
478 |
}
|
|
|
479 |
.edd-custom-price-option-sections-wrap {
|
480 |
display: none;
|
481 |
border-width: 0 1px 1px;
|
@@ -484,64 +607,80 @@ tr.status-refunded td {
|
|
484 |
box-sizing: border-box;
|
485 |
width: 100%;
|
486 |
}
|
|
|
487 |
.edd-custom-price-option-section {
|
488 |
display: block;
|
489 |
padding: 10px 8px;
|
490 |
-
border-bottom: 1px solid rgba(
|
491 |
}
|
|
|
492 |
.edd-custom-price-option-section:last-child {
|
493 |
border-bottom: none;
|
494 |
}
|
495 |
-
|
|
|
|
|
496 |
display: none !important;
|
497 |
}
|
|
|
498 |
.edd-custom-price-option-section-title {
|
499 |
display: block;
|
500 |
font-size: 14px;
|
501 |
font-weight: 600;
|
502 |
padding: 0 0 10px;
|
503 |
}
|
504 |
-
|
|
|
505 |
display: inline-block;
|
506 |
padding-right: 20px;
|
507 |
vertical-align: top;
|
508 |
margin-bottom: 4px;
|
509 |
}
|
510 |
-
|
|
|
511 |
display: block;
|
512 |
margin-bottom: 2px;
|
513 |
}
|
|
|
514 |
.edd-bundle-products-header {
|
515 |
font-weight: 600;
|
516 |
padding: 8px;
|
517 |
}
|
|
|
518 |
.edd-bundled-product-row .edd-bundled-product-item-reorder {
|
519 |
min-width: 30px;
|
520 |
margin-right: 8px;
|
521 |
}
|
|
|
522 |
.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder {
|
523 |
font-size: 20px;
|
524 |
font-weight: 300;
|
525 |
padding: 16px 4px 0;
|
526 |
cursor: move;
|
527 |
}
|
|
|
528 |
.edd-bundled-product-row .edd-bundled-product-item {
|
529 |
width: 60%;
|
530 |
margin-right: 3%;
|
531 |
}
|
|
|
532 |
.edd-bundled-product-row.has-variable-pricing .edd-bundled-product-item {
|
533 |
width: 47%;
|
534 |
}
|
|
|
535 |
.edd-bundled-product-row .edd-bundled-product-price-assignment {
|
536 |
width: 23%;
|
537 |
margin-right: 3%;
|
538 |
}
|
|
|
539 |
.edd-bundled-product-row .edd-bundled-product-actions {
|
540 |
float: right;
|
541 |
}
|
|
|
542 |
.edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container {
|
543 |
position: relative;
|
544 |
}
|
|
|
545 |
.edd_upload_file {
|
546 |
background: #fff;
|
547 |
display: block;
|
@@ -550,41 +689,51 @@ label.edd_prices_shipping { /* remove once Simple Shipping markup is improved */
|
|
550 |
top: 3px;
|
551 |
right: 7px;
|
552 |
}
|
|
|
553 |
.edd_upload_field {
|
554 |
padding-right: 8em !important;
|
555 |
}
|
|
|
556 |
textarea#edd-payment-note {
|
557 |
width: 100%;
|
558 |
height: 4em;
|
559 |
margin: 0;
|
560 |
}
|
|
|
561 |
#edd-purchased-files .row .edd-purchased-files-list-wrapper .download {
|
562 |
line-height: 1.4;
|
563 |
}
|
|
|
564 |
#edd-purchased-files .edd-purchased-files-list-wrapper .edd-purchased-option {
|
565 |
color: #666;
|
566 |
}
|
|
|
567 |
input[class*="edd-price-field"] {
|
568 |
padding: 3px 5px;
|
569 |
width: 75px;
|
570 |
}
|
|
|
571 |
[class*="item_"] [class*="edd-payment-details-download-"][type="number"].small-text,
|
572 |
#edd-order-download-quantity[type="number"].small-text,
|
573 |
#edd-order-download-tax[type="text"].small-text {
|
574 |
height: 25px;
|
575 |
}
|
|
|
576 |
.item_price .edd-payment-details-download-quantity[type="number"].small-text,
|
577 |
#edd-order-download-quantity[type="number"].small-text {
|
578 |
width: 55px;
|
579 |
}
|
|
|
580 |
.item_tax .edd-payment-details-download-item-tax[type="number"].small-text,
|
581 |
#edd-order-download-tax[type="text"].small-text {
|
582 |
width: 75px;
|
583 |
}
|
|
|
584 |
.edd_repeatable_upload_wrapper .pricing select,
|
585 |
.edd_repeatable_product_wrapper .edd-select {
|
586 |
min-width: 100%;
|
587 |
}
|
|
|
588 |
#edd_product_notes_field {
|
589 |
display: block;
|
590 |
margin: 12px 0 0;
|
@@ -604,9 +753,10 @@ input[class*="edd-price-field"] {
|
|
604 |
width: 10px;
|
605 |
height: 10px;
|
606 |
}
|
|
|
607 |
.edd_remove_repeatable:active,
|
608 |
.edd_remove_repeatable:hover,
|
609 |
-
.edd_remove_repeatable:focus
|
610 |
background-position: -10px 0 !important;
|
611 |
}
|
612 |
|
@@ -616,35 +766,45 @@ input[class*="edd-price-field"] {
|
|
616 |
#edd-edit-order-form .column {
|
617 |
width: 32%;
|
618 |
}
|
|
|
619 |
.edd-edit-purchase-element[class*="columns-"] ul li {
|
620 |
padding-right: 1%;
|
621 |
}
|
|
|
622 |
#edd-edit-order-form .columns-4 .column:nth-child(2n+1),
|
623 |
#edd-edit-order-form .columns-5 .column:nth-child(3n+1),
|
624 |
#edd-edit-order-form .column:nth-child(2n+1) {
|
625 |
margin-right: 0;
|
626 |
}
|
|
|
627 |
#edd-edit-order-form input.large-text {
|
628 |
width: 90%;
|
629 |
}
|
|
|
630 |
.edd-edit-purchase-element ul li.download {
|
631 |
width: 35%;
|
632 |
}
|
|
|
633 |
.edd-edit-purchase-element ul li.item_price {
|
634 |
width: 15%;
|
635 |
}
|
|
|
636 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
637 |
width: 25%;
|
638 |
}
|
|
|
639 |
.edd-edit-purchase-element ul li.item_tax {
|
640 |
width: 15%;
|
641 |
}
|
|
|
642 |
.edd-edit-purchase-element ul li.price {
|
643 |
width: 20%;
|
644 |
}
|
|
|
645 |
.edd-admin-box .label {
|
646 |
font-weight: 600;
|
647 |
}
|
|
|
648 |
.edd-admin-box-inside {
|
649 |
border-bottom: 1px solid #eee;
|
650 |
clear: both;
|
@@ -652,57 +812,73 @@ input[class*="edd-price-field"] {
|
|
652 |
margin: 0;
|
653 |
word-break: break-word;
|
654 |
}
|
|
|
655 |
.rtl .edd-admin-box-inside {
|
656 |
padding: 5px 10px 5px 0;
|
657 |
}
|
|
|
658 |
.edd-admin-box-inside .strong {
|
659 |
font-weight: 600;
|
660 |
}
|
|
|
661 |
.edd-payment-fees .fee-label {
|
662 |
color: #666;
|
663 |
font-weight: normal;
|
664 |
}
|
|
|
665 |
.edd-admin-box .right {
|
666 |
float: right;
|
667 |
}
|
|
|
668 |
.rtl .edd-admin-box .right {
|
669 |
float: left;
|
670 |
margin-left: 10px;
|
671 |
}
|
|
|
672 |
#edd-order-update .inside,
|
673 |
#edd-order-details .inside {
|
674 |
margin: 0;
|
675 |
padding: 0;
|
676 |
}
|
|
|
677 |
#edd-order-update input.edd_datepicker {
|
678 |
width: 180px;
|
679 |
}
|
|
|
680 |
#edd-order-update input[type="number"].edd-payment-time-hour,
|
681 |
#edd-order-update input[type="number"].edd-payment-time-min {
|
682 |
width: 50px;
|
683 |
}
|
|
|
684 |
#edd-order-update .edd-tax-rate {
|
685 |
color: #9c9c9c;
|
686 |
font-style: italic;
|
687 |
}
|
|
|
688 |
#edd-order-resend-receipt .inside {
|
689 |
margin-top: 11px;
|
690 |
}
|
|
|
691 |
#edd-order-resend-receipt .edd-order-resend-receipt-addresses {
|
692 |
margin-top: 10px;
|
693 |
}
|
|
|
694 |
.edd-admin-box-inside:last-child {
|
695 |
border-bottom: 0;
|
696 |
}
|
|
|
697 |
#edd-edit-order-form .data-payment-key {
|
698 |
word-break: break-all;
|
699 |
}
|
|
|
700 |
.edd-order-update-box #major-publishing-actions .button-secondary {
|
701 |
margin-right: 10px;
|
702 |
}
|
|
|
703 |
.edd-edit-purchase-element .edd-select-chosen {
|
704 |
width: 196px;
|
705 |
}
|
|
|
706 |
.edd-edit-purchase-element ul,
|
707 |
#edd-order-address-country-wrap select,
|
708 |
#edd-customer-details .order-data-address input,
|
@@ -711,29 +887,37 @@ input[class*="edd-price-field"] {
|
|
711 |
clear: both;
|
712 |
display: block;
|
713 |
}
|
|
|
714 |
#edd-customer-details .customer-info .column {
|
715 |
width: 49%;
|
716 |
}
|
|
|
717 |
#edd-customer-details .actions {
|
718 |
float: right;
|
719 |
}
|
|
|
720 |
.edd-order-data input.small-text {
|
721 |
margin: 0;
|
722 |
}
|
|
|
723 |
.edd-order-data input.med-text {
|
724 |
margin: 0;
|
725 |
width: 100px;
|
726 |
}
|
|
|
727 |
#edd-order-update span.label {
|
728 |
display: inline;
|
729 |
width: 50px;
|
730 |
}
|
|
|
731 |
.edd-order-update-box .button-primary {
|
732 |
margin-right: 0;
|
733 |
}
|
|
|
734 |
#edd-edit-order-form .column .description {
|
735 |
padding-right: 10px;
|
736 |
}
|
|
|
737 |
#edd-edit-order-form .column,
|
738 |
.edd-edit-purchase-element ul li {
|
739 |
display: inline-block;
|
@@ -742,104 +926,132 @@ input[class*="edd-price-field"] {
|
|
742 |
margin: 0;
|
743 |
vertical-align: middle;
|
744 |
}
|
|
|
745 |
.edd-edit-purchase-element .row {
|
746 |
padding: 12px;
|
747 |
}
|
|
|
748 |
.edd-edit-purchase-element .row:not(:last-child) {
|
749 |
border-bottom: 1px solid #eee;
|
750 |
}
|
|
|
751 |
.edd-edit-purchase-element .row:nth-child(odd):not(.header) {
|
752 |
background-color: #f9f9f9;
|
753 |
}
|
|
|
754 |
.edd-edit-purchase-element .row.header {
|
755 |
padding: 6px 12px;
|
756 |
font-weight: 600;
|
757 |
vertical-align: top;
|
758 |
}
|
|
|
759 |
.edd-edit-purchase-element ul {
|
760 |
font-size: 0;
|
761 |
}
|
|
|
762 |
.edd-edit-purchase-element ul li {
|
763 |
font-size: 13px;
|
764 |
}
|
|
|
765 |
#edd-order-data .data span {
|
766 |
color: #666;
|
767 |
font-weight: 600;
|
768 |
}
|
|
|
769 |
.edd-edit-purchase-element .inside {
|
770 |
padding: 12px;
|
771 |
}
|
|
|
772 |
.edd-edit-purchase-element .edd-purchased-download-title {
|
773 |
font-size: 14px;
|
774 |
font-weight: 500;
|
775 |
}
|
|
|
776 |
.edd-edit-purchase-element .edd-purchased-download-title .deleted {
|
777 |
color: #777;
|
778 |
}
|
|
|
779 |
.edd-edit-purchase-element .edd-purchased-download-actions {
|
780 |
color: #777;
|
781 |
line-height: 1.4;
|
782 |
}
|
|
|
783 |
.edd-edit-purchase-element .edd-purchased-download-actions .edd-purchased-download-actions-label {
|
784 |
font-weight: 500;
|
785 |
}
|
|
|
786 |
.edd-edit-purchase-element .edd-purchased-download-actions a {
|
787 |
color: #777;
|
788 |
font-size: 12px;
|
789 |
}
|
|
|
790 |
.edd-edit-purchase-element .edd-purchased-download-actions a:hover {
|
791 |
color: #444;
|
792 |
}
|
|
|
793 |
.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download {
|
794 |
color: #a00;
|
795 |
}
|
|
|
796 |
.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download:hover {
|
797 |
color: #f00;
|
798 |
}
|
|
|
799 |
#edd-order-recalc-total {
|
800 |
float: right;
|
801 |
}
|
|
|
802 |
.edd_repeatable_upload_wrapper .pricing select,
|
803 |
.edd_repeatable_product_wrapper .edd-select,
|
804 |
#edd_products .edd-select {
|
805 |
min-width: 100%;
|
806 |
max-width: 200px;
|
807 |
}
|
|
|
808 |
.edd_repeatable_product_wrapper td {
|
809 |
overflow: visible;
|
810 |
}
|
|
|
811 |
.edd-payment-details-label-mobile {
|
812 |
display: none;
|
813 |
}
|
814 |
|
815 |
-
@media screen and (
|
816 |
|
817 |
.edd-edit-purchase-element ul li.download {
|
818 |
padding-bottom: 15px;
|
819 |
width: 100%;
|
820 |
}
|
|
|
821 |
.edd-edit-purchase-element .edd-purchased-download-title {
|
822 |
font-size: 16px;
|
823 |
}
|
|
|
824 |
.edd-edit-purchase-element ul li.item_price {
|
825 |
width: 22%;
|
826 |
}
|
|
|
827 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
828 |
width: 35%;
|
829 |
}
|
|
|
830 |
.edd-edit-purchase-element ul li.item_tax {
|
831 |
width: 25%;
|
832 |
}
|
|
|
833 |
.edd-edit-purchase-element ul li.price {
|
834 |
width: 20%;
|
835 |
}
|
|
|
836 |
.edd-edit-purchase-element .edd-purchased-download-actions {
|
837 |
padding-top: 10px;
|
838 |
}
|
|
|
839 |
.edd-purchased-files-header,
|
840 |
.edd-add-download-to-purchase-header {
|
841 |
display: none;
|
842 |
}
|
|
|
843 |
.edd-payment-details-label-mobile {
|
844 |
display: block;
|
845 |
font-weight: 500;
|
@@ -848,17 +1060,20 @@ input[class*="edd-price-field"] {
|
|
848 |
|
849 |
}
|
850 |
|
851 |
-
@media screen and (
|
852 |
|
853 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
854 |
width: 40%;
|
855 |
}
|
|
|
856 |
.edd-edit-purchase-element ul li.price {
|
857 |
width: 24%;
|
858 |
}
|
|
|
859 |
.edd-edit-purchase-element .edd-purchased-download-actions {
|
860 |
padding-top: 15px;
|
861 |
}
|
|
|
862 |
.edd-edit-purchase-element .edd-purchased-download-actions,
|
863 |
.edd-edit-purchase-element .edd-purchased-download-actions a {
|
864 |
font-size: 14px;
|
@@ -866,38 +1081,44 @@ input[class*="edd-price-field"] {
|
|
866 |
|
867 |
}
|
868 |
|
869 |
-
@media screen and (
|
870 |
|
871 |
#edd-edit-order-form .column {
|
872 |
width: 49%;
|
873 |
}
|
|
|
874 |
.edd-edit-purchase-element ul li.item_price,
|
875 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
876 |
padding-bottom: 10px;
|
877 |
}
|
|
|
878 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
879 |
width: 35%;
|
880 |
}
|
|
|
881 |
.edd-edit-purchase-element ul li.item_tax,
|
882 |
.edd-edit-purchase-element ul li.price {
|
883 |
width: 20%;
|
884 |
padding-bottom: 10px;
|
885 |
}
|
|
|
886 |
.edd-payment-details-label-mobile {
|
887 |
font-size: 14px;
|
888 |
font-weight: 500;
|
889 |
}
|
|
|
890 |
.edd-price-currency,
|
891 |
.edd-payment-details-download-amount {
|
892 |
font-size: 16px;
|
893 |
}
|
|
|
894 |
.order-data-column input[type="email"] {
|
895 |
padding: 6px 10px;
|
896 |
}
|
897 |
|
898 |
}
|
899 |
|
900 |
-
@media screen and (
|
901 |
|
902 |
.edd-edit-purchase-element ul li.item_price,
|
903 |
.edd-edit-purchase-element ul li.item_price.item_quantity,
|
@@ -905,14 +1126,17 @@ input[class*="edd-price-field"] {
|
|
905 |
width: 100%;
|
906 |
padding-bottom: 20px;
|
907 |
}
|
|
|
908 |
.edd-edit-purchase-element ul li.price,
|
909 |
.edd-edit-purchase-element .edd-add-download-to-purchase ul li.item_tax {
|
910 |
width: 100%;
|
911 |
padding-bottom: 0;
|
912 |
}
|
|
|
913 |
.edd-edit-purchase-element .edd-add-download-to-purchase-actions {
|
914 |
padding-top: 15px;
|
915 |
}
|
|
|
916 |
#edd-edit-order-form .column {
|
917 |
width: 100%;
|
918 |
}
|
@@ -922,12 +1146,14 @@ input[class*="edd-price-field"] {
|
|
922 |
/** Stats */
|
923 |
#edd_product_stats .label {
|
924 |
display: inline-block;
|
925 |
-
|
|
|
926 |
#edd_product_stats hr {
|
927 |
border-style: solid;
|
928 |
border-width: 1px;
|
929 |
border-color: #ccc #fff #fff #ccc;
|
930 |
}
|
|
|
931 |
#edd_product_stats .product-sales-stats:before,
|
932 |
#edd_product_stats .product-earnings-stats:before {
|
933 |
color: #82878c;
|
@@ -943,9 +1169,11 @@ input[class*="edd-price-field"] {
|
|
943 |
-webkit-font-smoothing: antialiased;
|
944 |
-moz-osx-font-smoothing: grayscale;
|
945 |
}
|
|
|
946 |
#edd_product_stats .product-sales-stats:before {
|
947 |
content: '\f174';
|
948 |
}
|
|
|
949 |
#edd_product_stats .product-earnings-stats:before {
|
950 |
content: '\f239';
|
951 |
}
|
@@ -953,41 +1181,49 @@ input[class*="edd-price-field"] {
|
|
953 |
/* Dashboard Widget Styles
|
954 |
-------------------------------------------------------------- */
|
955 |
|
956 |
-
.edd_dashboard_widget table thead td{
|
957 |
border-bottom: 1px solid #ececec;
|
958 |
color: #777;
|
959 |
}
|
|
|
960 |
.edd_dashboard_widget .table_left {
|
961 |
float: left;
|
962 |
width: 45%;
|
963 |
}
|
|
|
964 |
.edd_dashboard_widget .table_right {
|
965 |
float: right;
|
966 |
width: 45%;
|
967 |
}
|
|
|
968 |
.edd_dashboard_widget .inside {
|
969 |
font-size: 12px;
|
970 |
}
|
|
|
971 |
.edd_dashboard_widget td {
|
972 |
padding: 3px 0;
|
973 |
}
|
|
|
974 |
.edd_dashboard_widget .b,
|
975 |
.edd_dashboard_widget .t {
|
976 |
line-height: 1.5;
|
977 |
vertical-align: middle;
|
978 |
}
|
|
|
979 |
.edd_dashboard_widget .b {
|
980 |
font-size: 14px;
|
981 |
-
font-family: Georgia,"Times New Roman","Bitstream Charter",Times,serif;
|
982 |
padding-right: 6px;
|
983 |
width: auto;
|
984 |
}
|
|
|
985 |
.edd_dashboard_widget .t {
|
986 |
font-size: 12px;
|
987 |
padding-right: 12px;
|
988 |
color: #777;
|
989 |
width: 100%;
|
990 |
}
|
|
|
991 |
.edd_dashboard_widget .label_heading {
|
992 |
border-top: 1px solid #ececec;
|
993 |
color: #8f8f8f;
|
@@ -998,6 +1234,7 @@ input[class*="edd-price-field"] {
|
|
998 |
padding-top: 10px;
|
999 |
margin: 0 0 8px 12px;
|
1000 |
}
|
|
|
1001 |
.edd_dashboard_widget .edd_dashboard_widget_subheading {
|
1002 |
border-top: 1px solid #ececec;
|
1003 |
color: #8f8f8f;
|
@@ -1005,9 +1242,11 @@ input[class*="edd-price-field"] {
|
|
1005 |
padding-top: 10px;
|
1006 |
margin: 1em 0 0 0;
|
1007 |
}
|
1008 |
-
|
|
|
1009 |
margin: 8px 0 0 0;
|
1010 |
}
|
|
|
1011 |
.edd_dashboard_widget .edd_price_label {
|
1012 |
background: rgb(0, 118, 156);
|
1013 |
border-radius: 3px;
|
@@ -1016,19 +1255,23 @@ input[class*="edd-price-field"] {
|
|
1016 |
padding: 2px 4px;
|
1017 |
margin-right: 2px;
|
1018 |
}
|
|
|
1019 |
.edd_dashboard_widget table {
|
1020 |
width: 100%;
|
1021 |
margin-left: 0;
|
1022 |
margin-bottom: 1em;
|
1023 |
}
|
|
|
1024 |
td.edd_order_label {
|
1025 |
width: 80%;
|
1026 |
}
|
|
|
1027 |
td.edd_order_price {
|
1028 |
text-align: right;
|
1029 |
}
|
1030 |
|
1031 |
-
@media handheld,
|
|
|
1032 |
|
1033 |
.edd_dashboard_widget .edd-recent-email {
|
1034 |
display: none;
|
@@ -1042,19 +1285,23 @@ td.edd_order_price {
|
|
1042 |
#edd-dashboard-widgets-wrap .postbox h3 {
|
1043 |
cursor: default;
|
1044 |
}
|
|
|
1045 |
#edd-graphs-date-options,
|
1046 |
#edd-date-range-options {
|
1047 |
float: left;
|
1048 |
}
|
|
|
1049 |
#edd-date-range-options span {
|
1050 |
float: left;
|
1051 |
line-height: 24px;
|
1052 |
height: 24px;
|
1053 |
margin-right: 6px;
|
1054 |
}
|
|
|
1055 |
.edd-import-export-form {
|
1056 |
position: relative;
|
1057 |
}
|
|
|
1058 |
.edd-import-export-form .edd-progress {
|
1059 |
background: #ddd;
|
1060 |
position: absolute;
|
@@ -1062,11 +1309,13 @@ td.edd_order_price {
|
|
1062 |
width: 95%;
|
1063 |
height: 15px;
|
1064 |
}
|
|
|
1065 |
.edd-import-export-form .edd-progress div {
|
1066 |
background: #ccc;
|
1067 |
height: 100%;
|
1068 |
width: 0;
|
1069 |
}
|
|
|
1070 |
.edd-import-export-form .notice-wrap {
|
1071 |
background-color: #f4f4f4;
|
1072 |
border-style: solid;
|
@@ -1078,63 +1327,80 @@ td.edd_order_price {
|
|
1078 |
position: relative;
|
1079 |
width: 100%;
|
1080 |
}
|
|
|
1081 |
.edd-import-export-form .notice-wrap .spinner {
|
1082 |
margin: 4px 10px 8px;
|
1083 |
float: right;
|
1084 |
}
|
|
|
1085 |
.admin-color-fresh .edd-import-export-form .edd-progress div {
|
1086 |
background: #0073aa;
|
1087 |
}
|
|
|
1088 |
.admin-color-light .edd-import-export-form .edd-progress div {
|
1089 |
background: #888;
|
1090 |
}
|
|
|
1091 |
.admin-color-blue .edd-import-export-form .edd-progress div {
|
1092 |
background: #096484;
|
1093 |
}
|
|
|
1094 |
.admin-color-coffee .edd-import-export-form .edd-progress div {
|
1095 |
background: #c7a589;
|
1096 |
}
|
|
|
1097 |
.admin-color-ectoplasm .edd-import-export-form .edd-progress div {
|
1098 |
background: #a3b745;
|
1099 |
}
|
|
|
1100 |
.admin-color-midnight .edd-import-export-form .edd-progress div {
|
1101 |
background: #e14d43;
|
1102 |
}
|
|
|
1103 |
.admin-color-sunrise .edd-import-export-form .edd-progress div {
|
1104 |
background: #dd823b;
|
1105 |
}
|
|
|
1106 |
#edd-graphs-filter label {
|
1107 |
vertical-align: inherit;
|
1108 |
}
|
|
|
1109 |
#edd-graphs-filter .graph-option-section {
|
1110 |
float: left;
|
1111 |
line-height: 2.5em;
|
1112 |
padding-right: 5px;
|
1113 |
}
|
|
|
1114 |
.edd-mix-totals {
|
1115 |
background-color: #fff;
|
1116 |
border: 1px solid #e5e5e5;
|
1117 |
-
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
1118 |
padding: 10px;
|
1119 |
}
|
|
|
1120 |
.edd-mix-chart {
|
1121 |
display: inline-block;
|
1122 |
width: 49%;
|
1123 |
vertical-align: top;
|
1124 |
}
|
|
|
1125 |
.edd-graph-notes {
|
1126 |
color: #9c9c9c;
|
1127 |
}
|
|
|
1128 |
.edd-graph-notes span {
|
1129 |
display: block;
|
1130 |
}
|
|
|
1131 |
.edd-pie-graph .legend {
|
1132 |
display: none;
|
1133 |
}
|
|
|
1134 |
.edd-pie-legend {
|
1135 |
overflow: auto;
|
1136 |
margin-top: 10px;
|
1137 |
}
|
|
|
1138 |
.edd-legend-item-wrapper {
|
1139 |
color: #333;
|
1140 |
display: inline-block;
|
@@ -1143,6 +1409,7 @@ td.edd_order_price {
|
|
1143 |
width: 48%;
|
1144 |
height: 20px;
|
1145 |
}
|
|
|
1146 |
.edd-legend-color {
|
1147 |
border: 1px solid #cfcfcf;
|
1148 |
display: inline-block;
|
@@ -1150,6 +1417,7 @@ td.edd_order_price {
|
|
1150 |
width: 20px;
|
1151 |
height: 15px;
|
1152 |
}
|
|
|
1153 |
.edd-pie-legend-item {
|
1154 |
display: inline-block;
|
1155 |
vertical-align: top;
|
@@ -1161,21 +1429,18 @@ td.edd_order_price {
|
|
1161 |
|
1162 |
/* Settings page styles
|
1163 |
-------------------------------------------------------------- */
|
1164 |
-
|
1165 |
-
[id*="edd-sendwp-"].button,
|
1166 |
[id*="edd-recapture-"].button {
|
1167 |
font-size: 16px;
|
1168 |
height: auto;
|
1169 |
padding: 8px 14px;
|
1170 |
margin: 6px 0 0;
|
1171 |
}
|
1172 |
-
|
1173 |
[id*="edd-recapture-"].button .dashicons {
|
1174 |
line-height: 29px;
|
1175 |
margin-right: 8px;
|
1176 |
}
|
1177 |
-
|
1178 |
-
[id*="edd-sendwp-"].button .edd-loading:after,
|
1179 |
[id*="edd-recapture-"].button .edd-loading,
|
1180 |
[id*="edd-recapture-"].button .edd-loading:after {
|
1181 |
border-radius: 50%;
|
@@ -1183,14 +1448,14 @@ td.edd_order_price {
|
|
1183 |
width: 14px;
|
1184 |
height: 14px;
|
1185 |
}
|
1186 |
-
|
1187 |
[id*="edd-recapture-"].button .edd-loading {
|
1188 |
position: relative;
|
1189 |
top: 3px;
|
1190 |
margin-left: 4px;
|
1191 |
-
box-shadow: 0 0 2px rgba(0,0,0
|
1192 |
}
|
1193 |
-
|
1194 |
[id*="edd-recapture-"].button .edd-loading {
|
1195 |
-webkit-animation: edd-spinning 1.1s infinite linear;
|
1196 |
animation: edd-spinning 1.1s infinite linear;
|
@@ -1203,7 +1468,7 @@ td.edd_order_price {
|
|
1203 |
-ms-transform: translateZ(0);
|
1204 |
transform: translateZ(0);
|
1205 |
}
|
1206 |
-
|
1207 |
#edd-recapture-disconnect.button .edd-loading.dark {
|
1208 |
border-top-color: rgba(0, 0, 0, 0.2);
|
1209 |
border-right-color: rgba(0, 0, 0, 0.2);
|
@@ -1211,46 +1476,57 @@ td.edd_order_price {
|
|
1211 |
border-left-color: #666;
|
1212 |
box-shadow: none;
|
1213 |
}
|
|
|
1214 |
.recapture-notice {
|
1215 |
position: relative;
|
1216 |
}
|
|
|
1217 |
@-webkit-keyframes edd-spinning {
|
1218 |
0% {
|
1219 |
-webkit-transform: rotate(0deg);
|
1220 |
transform: rotate(0deg);
|
1221 |
}
|
|
|
1222 |
100% {
|
1223 |
-webkit-transform: rotate(360deg);
|
1224 |
transform: rotate(360deg);
|
1225 |
}
|
1226 |
}
|
|
|
1227 |
@keyframes edd-spinning {
|
1228 |
0% {
|
1229 |
-webkit-transform: rotate(0deg);
|
1230 |
transform: rotate(0deg);
|
1231 |
}
|
|
|
1232 |
100% {
|
1233 |
-webkit-transform: rotate(360deg);
|
1234 |
transform: rotate(360deg);
|
1235 |
}
|
1236 |
}
|
|
|
1237 |
#edd_tax_rates {
|
1238 |
margin: 1em 0 0;
|
1239 |
}
|
|
|
1240 |
#edd_tax_rates .edd_tax_country *,
|
1241 |
#edd_tax_rates .edd_tax_state * {
|
1242 |
max-width: 100%;
|
1243 |
}
|
|
|
1244 |
#edd_tax_rates .edd_tax_country,
|
1245 |
#edd_tax_rates .edd_tax_state {
|
1246 |
width: 180px;
|
1247 |
}
|
|
|
1248 |
#edd_tax_rates .edd_tax_rate {
|
1249 |
width: 80px;
|
1250 |
}
|
|
|
1251 |
#edd_tax_rates th {
|
1252 |
padding: 15px 10px;
|
1253 |
}
|
|
|
1254 |
.wrap-licenses .form-table,
|
1255 |
.wrap-licenses thead,
|
1256 |
.wrap-licenses tbody,
|
@@ -1261,6 +1537,7 @@ td.edd_order_price {
|
|
1261 |
.wrap-licenses caption {
|
1262 |
display: block;
|
1263 |
}
|
|
|
1264 |
.wrap-licenses .form-table tr {
|
1265 |
float: left;
|
1266 |
margin: 0 15px 15px 0;
|
@@ -1273,6 +1550,7 @@ td.edd_order_price {
|
|
1273 |
position: relative;
|
1274 |
box-sizing: border-box;
|
1275 |
}
|
|
|
1276 |
.wrap-licenses .form-table th {
|
1277 |
background: #f9f9f9;
|
1278 |
padding: 14px;
|
@@ -1280,13 +1558,16 @@ td.edd_order_price {
|
|
1280 |
margin: -14px -14px 20px;
|
1281 |
width: 100%;
|
1282 |
}
|
|
|
1283 |
.wrap-licenses .form-table td {
|
1284 |
padding: 0;
|
1285 |
}
|
|
|
1286 |
.wrap-licenses td input.regular-text {
|
1287 |
margin: 0 0 8px;
|
1288 |
width: 100%;
|
1289 |
}
|
|
|
1290 |
.wrap-licenses .edd-license-data[class*="edd-license-"] {
|
1291 |
position: absolute;
|
1292 |
background: #fafafa;
|
@@ -1298,22 +1579,27 @@ td.edd_order_price {
|
|
1298 |
bottom: 14px;
|
1299 |
box-sizing: border-box;
|
1300 |
}
|
|
|
1301 |
.wrap-licenses .edd-license-data[class*="edd-license-"] a {
|
1302 |
color: #444;
|
1303 |
}
|
|
|
1304 |
.wrap-licenses .edd-license-data[class*="edd-license-"] a:hover {
|
1305 |
text-decoration: none;
|
1306 |
}
|
|
|
1307 |
.wrap-licenses .edd-license-data.license-expires-soon-notice {
|
1308 |
background-color: #00a0d2;
|
1309 |
color: #fff;
|
1310 |
border-color: #00a0d2;
|
1311 |
}
|
|
|
1312 |
.wrap-licenses .edd-license-data.edd-license-expired {
|
1313 |
background-color: #e24e4e;
|
1314 |
color: #fff;
|
1315 |
border-color: #e24e4e;
|
1316 |
}
|
|
|
1317 |
.wrap-licenses .edd-license-data.edd-license-error,
|
1318 |
.wrap-licenses .edd-license-data.edd-license-missing,
|
1319 |
.wrap-licenses .edd-license-data.edd-license-invalid,
|
@@ -1322,18 +1608,22 @@ td.edd_order_price {
|
|
1322 |
background-color: #ffebcd;
|
1323 |
border-color: #ffebcd;
|
1324 |
}
|
|
|
1325 |
.wrap-licenses .edd-license-data p {
|
1326 |
font-size: 13px;
|
1327 |
margin-top: 0;
|
1328 |
}
|
|
|
1329 |
.wrap-licenses .edd-license-data.license-expires-soon-notice a,
|
1330 |
.wrap-licenses .edd-license-data.edd-license-expired a {
|
1331 |
color: #fff;
|
1332 |
}
|
|
|
1333 |
.wrap-licenses .edd-license-data.license-expires-soon-notice a:hover,
|
1334 |
.wrap-licenses .edd-license-data.edd-license-expired a:hover {
|
1335 |
text-decoration: none;
|
1336 |
}
|
|
|
1337 |
.wrap-licenses p.submit {
|
1338 |
clear: both;
|
1339 |
}
|
@@ -1364,10 +1654,11 @@ td.edd_order_price {
|
|
1364 |
-------------------------------------------------------------- */
|
1365 |
|
1366 |
.edd-graph .y1Axis {
|
1367 |
-
color: rgb(
|
1368 |
}
|
|
|
1369 |
.edd-graph .y2Axis {
|
1370 |
-
color: rgb(
|
1371 |
}
|
1372 |
|
1373 |
/* API Table Styles
|
@@ -1384,28 +1675,34 @@ td.edd_order_price {
|
|
1384 |
width: 100%;
|
1385 |
max-width: 300px;
|
1386 |
}
|
|
|
1387 |
.chosen-container-multi .chosen-choices {
|
1388 |
background-image: none;
|
1389 |
border-color: #dfdfdf;
|
1390 |
-webkit-border-radius: 3px;
|
1391 |
border-radius: 3px;
|
1392 |
}
|
|
|
1393 |
.chosen-container-multi .chosen-choices input {
|
1394 |
border-color: #dfdfdf;
|
1395 |
-
height:27px!important;
|
1396 |
-
margin:2px;
|
1397 |
}
|
|
|
1398 |
.chosen-container .chosen-drop {
|
1399 |
border-color: #aaa;
|
1400 |
-webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
1401 |
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
1402 |
}
|
|
|
1403 |
.chosen-container .search-field {
|
1404 |
-
float: none!important;
|
1405 |
}
|
|
|
1406 |
.chosen-container .search-field input {
|
1407 |
-
width: 90
|
1408 |
}
|
|
|
1409 |
.chosen-container-active .chosen-choices {
|
1410 |
border-color: #aaa;
|
1411 |
-webkit-border-top-left-radius: 3px;
|
@@ -1422,20 +1719,24 @@ td.edd_order_price {
|
|
1422 |
.download_page_edd-tools .tablenav .actions {
|
1423 |
overflow: visible;
|
1424 |
}
|
|
|
1425 |
.edd_user_search_wrap {
|
1426 |
position: relative;
|
1427 |
overflow: visible;
|
1428 |
}
|
|
|
1429 |
.edd_user_search_results {
|
1430 |
position: absolute;
|
1431 |
left: 0;
|
1432 |
top: 27px;
|
1433 |
}
|
|
|
1434 |
.edd_user_search_results a.edd-ajax-user-cancel {
|
1435 |
position: absolute;
|
1436 |
right: 6px;
|
1437 |
top: 2px;
|
1438 |
}
|
|
|
1439 |
.edd_user_search_results ul {
|
1440 |
background: #f0f0f0;
|
1441 |
border: 1px solid #dfdfdf;
|
@@ -1450,7 +1751,7 @@ td.edd_order_price {
|
|
1450 |
color: #999;
|
1451 |
}
|
1452 |
|
1453 |
-
@media screen and (
|
1454 |
|
1455 |
.edd-mix-chart {
|
1456 |
display: block;
|
@@ -1465,27 +1766,30 @@ td.edd_order_price {
|
|
1465 |
|
1466 |
}
|
1467 |
|
1468 |
-
@media screen and (
|
1469 |
|
1470 |
.post-type-download .nav-tab-wrapper a {
|
1471 |
font-size: 70%;
|
1472 |
padding: 2px 4px;
|
1473 |
}
|
|
|
1474 |
.download_page_edd-tools .apikeys .column-user {
|
1475 |
width: 80px;
|
1476 |
}
|
|
|
1477 |
.license-lifetime-notice,
|
1478 |
.license-expiration-date-notice,
|
1479 |
.license-null {
|
1480 |
padding-left: 0;
|
1481 |
}
|
|
|
1482 |
[class^="license-"] input[type="text"] {
|
1483 |
margin-bottom: 3px;
|
1484 |
}
|
1485 |
|
1486 |
}
|
1487 |
|
1488 |
-
@media screen and (
|
1489 |
.wrap-licenses .form-table tr {
|
1490 |
width: 100%;
|
1491 |
min-height: 230px;
|
@@ -1502,10 +1806,11 @@ td.edd_order_price {
|
|
1502 |
#edd-item-wrapper {
|
1503 |
background: #f5f5f5;
|
1504 |
border: 1px solid #e5e5e5;
|
1505 |
-
webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
1506 |
-
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
1507 |
max-width: 830px;
|
1508 |
}
|
|
|
1509 |
#edd-item-wrapper:after {
|
1510 |
content: "";
|
1511 |
display: block;
|
@@ -1514,15 +1819,18 @@ td.edd_order_price {
|
|
1514 |
font-size: 0;
|
1515 |
height: 0;
|
1516 |
}
|
|
|
1517 |
#edd-item-tab-wrapper {
|
1518 |
-
float:left;
|
1519 |
width: 18%;
|
1520 |
z-index: 1;
|
1521 |
}
|
|
|
1522 |
#edd-item-tab-wrapper-list {
|
1523 |
background: #fff;
|
1524 |
margin: 0;
|
1525 |
}
|
|
|
1526 |
#edd-item-tab-wrapper-list li {
|
1527 |
display: block;
|
1528 |
background-color: #eaeaea;
|
@@ -1536,39 +1844,48 @@ td.edd_order_price {
|
|
1536 |
hyphens: auto;
|
1537 |
word-wrap: break-word;
|
1538 |
}
|
|
|
1539 |
#edd-item-tab-wrapper-list li a {
|
1540 |
display: block;
|
1541 |
padding: 8px 10px 8px 6px;
|
1542 |
}
|
|
|
1543 |
#edd-item-tab-wrapper-list li.active {
|
1544 |
display: block;
|
1545 |
background-color: #fff;
|
1546 |
padding: 8px 10px 8px 6px;
|
1547 |
}
|
|
|
1548 |
#edd-item-tab-wrapper-list .inactive a,
|
1549 |
#edd-item-tab-wrapper-list .inactive a:visited {
|
1550 |
background-color: #f5f5f5;
|
1551 |
color: #444;
|
1552 |
text-decoration: none;
|
1553 |
}
|
|
|
1554 |
#edd-item-tab-wrapper-list .inactive a:hover {
|
1555 |
background-color: #fff;
|
1556 |
}
|
|
|
1557 |
#edd-item-tab-wrapper-list .dashicons {
|
1558 |
color: #444;
|
1559 |
font-size: 16px;
|
1560 |
min-width: 24px;
|
1561 |
height: auto;
|
1562 |
}
|
|
|
1563 |
#edd-item-card-wrapper .left {
|
1564 |
float: left;
|
1565 |
}
|
|
|
1566 |
#edd-item-card-wrapper .right {
|
1567 |
float: right;
|
1568 |
}
|
|
|
1569 |
#edd-item-card-wrapper input {
|
1570 |
font-weight: normal;
|
1571 |
}
|
|
|
1572 |
#edd-item-card-wrapper {
|
1573 |
background-color: #fff;
|
1574 |
border: 1px solid #e5e5e5;
|
@@ -1578,206 +1895,257 @@ td.edd_order_price {
|
|
1578 |
width: 700px;
|
1579 |
z-index: 2;
|
1580 |
}
|
|
|
1581 |
.edd-item-has-tabs #edd-item-card-wrapper {
|
1582 |
border-width: 0 0 0 1px;
|
1583 |
width: 82%;
|
1584 |
}
|
|
|
1585 |
#edd-item-card-wrapper .customer-section {
|
1586 |
border-bottom: 1px solid #eee;
|
1587 |
margin-bottom: 10px;
|
1588 |
overflow: auto;
|
1589 |
}
|
|
|
1590 |
#edd-item-card-wrapper .customer-section table {
|
1591 |
margin-bottom: 20px;
|
1592 |
}
|
1593 |
-
|
|
|
1594 |
padding: 0px 20px;
|
1595 |
}
|
1596 |
-
|
|
|
1597 |
padding-top: 20px;
|
1598 |
}
|
1599 |
-
|
|
|
1600 |
border: none;
|
1601 |
padding-bottom: 20px;
|
1602 |
}
|
|
|
1603 |
#edd-item-card-wrapper .avatar-wrap {
|
1604 |
padding-right: 10px;
|
1605 |
text-align: center;
|
1606 |
}
|
|
|
1607 |
#edd-item-card-wrapper .customer-id {
|
1608 |
font-size: 24px;
|
1609 |
font-weight: 600;
|
1610 |
}
|
|
|
1611 |
#edd-item-card-wrapper .customer-main-wrapper input {
|
1612 |
width: 200px;
|
1613 |
}
|
|
|
1614 |
#edd-item-card-wrapper .customer-address-wrapper {
|
1615 |
margin-right: 25px;
|
1616 |
max-width: 33%;
|
1617 |
width: 202px;
|
1618 |
}
|
|
|
1619 |
#edd-item-card-wrapper .customer-address-wrapper select {
|
1620 |
width: 200px;
|
1621 |
}
|
|
|
1622 |
#edd-item-card-wrapper .customer-info {
|
1623 |
margin-top: 5px;
|
1624 |
margin-bottom: 10px;
|
1625 |
min-height: 185px;
|
1626 |
}
|
|
|
1627 |
#edd-item-card-wrapper .info-wrapper {
|
1628 |
min-height: 125px;
|
1629 |
overflow: visible;
|
1630 |
}
|
|
|
1631 |
#edd-item-card-wrapper a.delete {
|
1632 |
color: #ff0000;
|
1633 |
margin-right: 5px;
|
1634 |
text-decoration: none;
|
1635 |
}
|
|
|
1636 |
.customer-info .customer-name {
|
1637 |
font-size: 24px;
|
1638 |
font-weight: 600;
|
1639 |
}
|
|
|
1640 |
.customer-edit-link a,
|
1641 |
.disconnect-user a {
|
1642 |
font-size: 12px;
|
1643 |
font-weight: normal;
|
1644 |
text-decoration: none;
|
1645 |
}
|
|
|
1646 |
#customer-edit-actions {
|
1647 |
line-height: 28px;
|
1648 |
margin-bottom: 20px;
|
1649 |
text-align: center;
|
1650 |
}
|
|
|
1651 |
#customer-edit-actions .button-secondary {
|
1652 |
margin-right: 10px;
|
1653 |
}
|
|
|
1654 |
#edd-item-card-wrapper .row-title {
|
1655 |
width: 30%;
|
1656 |
}
|
|
|
1657 |
#edd-item-card-wrapper .info-item {
|
1658 |
display: block;
|
1659 |
line-height: 16px;
|
1660 |
padding-bottom: 5px;
|
1661 |
}
|
|
|
1662 |
#edd-item-card-wrapper .edit-item {
|
1663 |
display: none;
|
1664 |
}
|
|
|
1665 |
#edd-item-card-wrapper .edd_user_search_results {
|
1666 |
left: 1px;
|
1667 |
top: 16px;
|
1668 |
}
|
|
|
1669 |
#edd-item-card-wrapper .edd_user_search_results ul {
|
1670 |
width: 200px;
|
1671 |
}
|
|
|
1672 |
#edd-item-stats-wrapper {
|
1673 |
margin: 0 auto;
|
1674 |
min-height: 30px;
|
1675 |
text-align: center;
|
1676 |
}
|
|
|
1677 |
#edd-item-stats-wrapper li {
|
1678 |
font-size: 14px;
|
1679 |
float: left;
|
1680 |
line-height: 22px;
|
1681 |
width: 50%;
|
1682 |
}
|
|
|
1683 |
#edd-item-stats-wrapper a {
|
1684 |
text-decoration: none;
|
1685 |
}
|
|
|
1686 |
#edd-item-stats-wrapper .dashicons {
|
1687 |
color: #888;
|
1688 |
}
|
|
|
1689 |
#edd-item-tables-wrapper table {
|
1690 |
text-align: center;
|
1691 |
width: 100%;
|
1692 |
}
|
|
|
1693 |
#edd-item-tables-wrapper th {
|
1694 |
text-align: center;
|
1695 |
}
|
1696 |
-
|
1697 |
-
#edd-item-tables-wrapper .downloads tr
|
1698 |
-
#edd-item-tables-wrapper .
|
1699 |
-
#edd-item-tables-wrapper .emails tr
|
|
|
1700 |
text-align: left;
|
1701 |
}
|
1702 |
-
|
|
|
1703 |
text-align: center;
|
1704 |
}
|
|
|
1705 |
#edd-item-tables-wrapper .emails .add-customer-email-row td {
|
1706 |
background-color: #f9f9f9;
|
1707 |
border-top: 1px solid #e5e5e5;
|
1708 |
}
|
|
|
1709 |
#edd-item-tables-wrapper .emails .primary-email-icon {
|
1710 |
font-size: 13px;
|
1711 |
vertical-align: middle;
|
1712 |
line-height: 1.5em;
|
1713 |
}
|
|
|
1714 |
#edd-item-tables-wrapper .emails input {
|
1715 |
vertical-align: middle;
|
1716 |
margin: 6px 0;
|
1717 |
}
|
|
|
1718 |
#edd-item-tables-wrapper .emails .spinner {
|
1719 |
float: none;
|
1720 |
}
|
|
|
1721 |
#edd-item-notes-wrapper {
|
1722 |
min-height: 50px;
|
1723 |
}
|
|
|
1724 |
.edd-item-notes-header span,
|
1725 |
.edd-item-notes-header img {
|
1726 |
font-weight: 600;
|
1727 |
line-height: 30px;
|
1728 |
vertical-align: middle;
|
1729 |
}
|
|
|
1730 |
.customer-note-input {
|
1731 |
margin-bottom: 5px;
|
1732 |
width: 100%;
|
1733 |
}
|
|
|
1734 |
#edd-customer-notes div:nth-of-type(even) {
|
1735 |
background-color: #fcfcfc;
|
1736 |
}
|
|
|
1737 |
.customer-note-wrapper {
|
1738 |
border-bottom: 1px solid #f9f9f9;
|
1739 |
min-height: 38px;
|
1740 |
padding: 7px 0 7px 7px;
|
1741 |
}
|
|
|
1742 |
.customer-note-wrapper span {
|
1743 |
display: block;
|
1744 |
}
|
|
|
1745 |
.note-content-wrap {
|
1746 |
padding-top: 7px;
|
1747 |
}
|
|
|
1748 |
.delete-customer {
|
1749 |
text-align: center;
|
1750 |
}
|
|
|
1751 |
#edd-item-card-wrapper .notice-container {
|
1752 |
padding-left: 20px;
|
1753 |
padding-right: 20px;
|
1754 |
margin-left: -20px;
|
1755 |
margin-right: -20px;
|
1756 |
}
|
1757 |
-
|
|
|
1758 |
vertical-align: middle;
|
1759 |
}
|
1760 |
|
1761 |
-
@media screen and (
|
1762 |
.customer-info .customer-name {
|
1763 |
font-size: 16px;
|
1764 |
}
|
1765 |
-
|
|
|
|
|
1766 |
padding: 4px 6px;
|
1767 |
-
max-width: 100px!important;
|
1768 |
display: table-cell;
|
1769 |
}
|
1770 |
}
|
1771 |
-
|
|
|
|
|
1772 |
#edd-item-tab-wrapper,
|
1773 |
#edd-item-card-wrapper {
|
1774 |
margin: 0;
|
1775 |
width: 100%;
|
1776 |
}
|
|
|
1777 |
#edd-item-tab-wrapper-list {
|
1778 |
background: #fff;
|
1779 |
margin: 0;
|
1780 |
}
|
|
|
1781 |
#edd-item-tab-wrapper-list li {
|
1782 |
float: left;
|
1783 |
display: inline;
|
@@ -1788,26 +2156,32 @@ td.edd_order_price {
|
|
1788 |
border-color: #e5e5e5;
|
1789 |
width: 33.33333%;
|
1790 |
}
|
|
|
1791 |
#edd-item-tab-wrapper-list li:nth-child(3n+3) {
|
1792 |
border-width: 0 0 1px 0;
|
1793 |
}
|
|
|
1794 |
#edd-item-tab-wrapper-list .dashicons {
|
1795 |
font-size: 18px;
|
1796 |
}
|
1797 |
-
|
|
|
1798 |
border-top: 1px solid #e5e5e5;
|
1799 |
border-left: 0;
|
1800 |
margin-top: -1px;
|
1801 |
width: 100%;
|
1802 |
}
|
1803 |
}
|
1804 |
-
|
|
|
1805 |
#edd-item-card-wrapper .customer-info {
|
1806 |
min-height: 220px;
|
1807 |
}
|
|
|
1808 |
.edd-item-info.customer-info {
|
1809 |
position: relative;
|
1810 |
}
|
|
|
1811 |
#edd-item-card-wrapper .customer-address-wrapper {
|
1812 |
float: none;
|
1813 |
position: absolute;
|
@@ -1815,50 +2189,62 @@ td.edd_order_price {
|
|
1815 |
left: 110px;
|
1816 |
max-width: 200px;
|
1817 |
}
|
|
|
1818 |
#edd-item-card-wrapper .customer-main-wrapper {
|
1819 |
float: none;
|
1820 |
position: absolute;
|
1821 |
left: 110px;
|
1822 |
}
|
|
|
1823 |
.customer-info .customer-name {
|
1824 |
font-size: 16px;
|
1825 |
}
|
|
|
1826 |
#edd-item-card-wrapper #edd-item-stats-wrapper {
|
1827 |
padding-left: 0;
|
1828 |
padding-right: 0;
|
1829 |
}
|
|
|
1830 |
#edd-item-card-wrapper .customer-section {
|
1831 |
margin-bottom: 0;
|
1832 |
}
|
|
|
1833 |
#edd-item-card-wrapper .widefat td,
|
1834 |
#edd-item-card-wrapper .widefat th {
|
1835 |
padding: 4px 6px;
|
1836 |
-
max-width: 100px!important;
|
1837 |
display: table-cell;
|
1838 |
overflow: hidden;
|
1839 |
}
|
|
|
1840 |
#edd-item-card-wrapper .customer-id {
|
1841 |
font-size: 16px;
|
1842 |
}
|
1843 |
}
|
1844 |
-
|
|
|
1845 |
#edd-item-tab-wrapper-list li {
|
1846 |
width: 50%;
|
1847 |
}
|
|
|
1848 |
#edd-item-tab-wrapper-list li:nth-child(3n+3) {
|
1849 |
border-width: 0 1px 1px 0;
|
1850 |
}
|
|
|
1851 |
#edd-item-tab-wrapper-list li:nth-child(even) {
|
1852 |
border-width: 0 0 1px 0;
|
1853 |
}
|
|
|
1854 |
.edd-repeatable-row-title,
|
1855 |
.edd-repeatable-row-actions {
|
1856 |
text-align: left;
|
1857 |
width: 100%;
|
1858 |
}
|
|
|
1859 |
.edd-repeatable-row-title {
|
1860 |
padding-bottom: 0;
|
1861 |
}
|
|
|
1862 |
.edd-option-name,
|
1863 |
.edd-option-price,
|
1864 |
.edd_repeatable_default,
|
@@ -1873,9 +2259,11 @@ td.edd_order_price {
|
|
1873 |
width: 100% !important;
|
1874 |
margin: 10px 0;
|
1875 |
}
|
|
|
1876 |
.edd-bundled-product-row .edd-bundled-product-actions {
|
1877 |
float: none;
|
1878 |
}
|
|
|
1879 |
.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder {
|
1880 |
padding: 0;
|
1881 |
}
|
@@ -1893,7 +2281,8 @@ td.edd_order_price {
|
|
1893 |
#edd-payment-date-filters span {
|
1894 |
display: block;
|
1895 |
}
|
1896 |
-
|
|
|
1897 |
float: right;
|
1898 |
}
|
1899 |
|
@@ -1941,13 +2330,14 @@ td.edd_order_price {
|
|
1941 |
.recount-stats-controls form {
|
1942 |
display: inline;
|
1943 |
}
|
|
|
1944 |
.edd-recount-stats-descriptions span {
|
1945 |
display: none;
|
1946 |
line-height: 24px;
|
1947 |
}
|
1948 |
|
1949 |
#edd-debug-log p.submit {
|
1950 |
-
margin:
|
1951 |
padding: 0;
|
1952 |
}
|
1953 |
|
@@ -2075,7 +2465,7 @@ td.edd_order_price {
|
|
2075 |
}
|
2076 |
|
2077 |
/* Settings sidebar responsive behavior */
|
2078 |
-
@media all and (
|
2079 |
|
2080 |
.edd-has-sidebar .edd-settings-content {
|
2081 |
float: left;
|
@@ -2088,7 +2478,7 @@ td.edd_order_price {
|
|
2088 |
}
|
2089 |
}
|
2090 |
|
2091 |
-
@media all and (
|
2092 |
|
2093 |
.edd-has-sidebar .edd-settings-content {
|
2094 |
width: 74%;
|
@@ -2141,22 +2531,27 @@ td.edd_order_price {
|
|
2141 |
background: #2d6ca2;
|
2142 |
display: none;
|
2143 |
}
|
2144 |
-
|
|
|
2145 |
.edd-admin-notice-top-of-page {
|
2146 |
padding: 10px 46px 10px 22px;
|
2147 |
}
|
2148 |
}
|
2149 |
-
|
|
|
2150 |
.edd-admin-notice-top-of-page {
|
2151 |
text-align: center;
|
2152 |
}
|
2153 |
}
|
|
|
2154 |
.edd-admin-notice-top-of-page a {
|
2155 |
color: #fff;
|
2156 |
}
|
|
|
2157 |
.edd-admin-notice-top-of-page a:hover {
|
2158 |
text-decoration: none;
|
2159 |
}
|
|
|
2160 |
.edd-admin-notice-top-of-page .button-link {
|
2161 |
position: absolute;
|
2162 |
top: 48px;
|
@@ -2168,18 +2563,21 @@ td.edd_order_price {
|
|
2168 |
margin-left: 5px;
|
2169 |
padding: 6px 10px;
|
2170 |
}
|
|
|
2171 |
.edd-admin-notice-top-of-page .button-link:hover,
|
2172 |
.edd-admin-notice-top-of-page .button-link:active,
|
2173 |
.edd-admin-notice-top-of-page .button-link:focus {
|
2174 |
color: #fff;
|
2175 |
text-decoration: none;
|
2176 |
}
|
2177 |
-
|
|
|
2178 |
.edd-admin-notice-top-of-page .button-link {
|
2179 |
top: 1px;
|
2180 |
}
|
2181 |
}
|
2182 |
-
|
|
|
2183 |
.edd-admin-notice-top-of-page .button-link {
|
2184 |
right: 9px;
|
2185 |
}
|
@@ -2190,19 +2588,189 @@ td.edd_order_price {
|
|
2190 |
.edd-paypal-account-status ul {
|
2191 |
margin-left: 25px;
|
2192 |
}
|
2193 |
-
|
|
|
2194 |
margin-bottom: 1em;
|
2195 |
}
|
|
|
2196 |
.edd-paypal-account-status ul:not(.edd-paypal-webhook-events) {
|
2197 |
list-style: disc;
|
2198 |
list-style-position: inside;
|
2199 |
}
|
|
|
2200 |
.edd-paypal-account-status ul:not(.edd-paypal-webhook-events) li {
|
2201 |
margin: .25em 0;
|
2202 |
}
|
|
|
2203 |
.edd-paypal-account-status .dashicons-yes {
|
2204 |
color: #008a20;
|
2205 |
}
|
|
|
2206 |
.edd-paypal-account-status .dashicons-no {
|
2207 |
color: #d63638;
|
2208 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
.edd-hidden {
|
11 |
display: none;
|
12 |
}
|
13 |
+
|
14 |
.edd-clearfix:after {
|
15 |
content: ".";
|
16 |
display: block;
|
18 |
text-indent: -9999px;
|
19 |
visibility: hidden;
|
20 |
}
|
21 |
+
|
22 |
.edd-wrap a,
|
23 |
.edd-notice .notice-dismiss {
|
24 |
text-decoration: none;
|
25 |
}
|
26 |
+
|
27 |
a.edd-delete {
|
28 |
color: #a00;
|
29 |
}
|
30 |
+
|
31 |
a.edd-delete:hover {
|
32 |
color: #f00;
|
33 |
}
|
51 |
background: #fff;
|
52 |
}
|
53 |
|
54 |
+
#edd-header-wrapper {
|
55 |
+
display: flex;
|
56 |
+
justify-content: space-between;
|
57 |
+
padding: 0 20px;
|
58 |
+
}
|
59 |
+
|
60 |
#edd-header img {
|
61 |
display: block;
|
62 |
margin: 0;
|
63 |
max-width: 300px;
|
64 |
+
}
|
65 |
+
|
66 |
+
.no-js #edd-header-actions {
|
67 |
+
display: none;
|
68 |
+
}
|
69 |
+
|
70 |
+
#edd-header .edd-round {
|
71 |
+
position: relative;
|
72 |
+
background-color: #f3f4f5;
|
73 |
+
border-radius: 50%;
|
74 |
+
width: 40px;
|
75 |
+
height: 40px;
|
76 |
+
display: flex;
|
77 |
+
align-items: center;
|
78 |
+
justify-content: center;
|
79 |
+
margin-left: 10px;
|
80 |
+
cursor: pointer;
|
81 |
+
transition: background-color .2s ease;
|
82 |
+
}
|
83 |
+
|
84 |
+
button.edd-round {
|
85 |
+
border: none;
|
86 |
+
}
|
87 |
+
#edd-header button.edd-round:hover {
|
88 |
+
background-color: #e5e5e5;
|
89 |
+
}
|
90 |
+
button.edd-round:focus, button.edd-round:active {
|
91 |
+
outline: 2px solid #0c5d95;
|
92 |
+
}
|
93 |
+
|
94 |
+
#edd-header .edd-number {
|
95 |
+
position: absolute;
|
96 |
+
background-color: #df2a4a;
|
97 |
+
width: 16px;
|
98 |
+
height: 16px;
|
99 |
+
font-weight: 600;
|
100 |
+
font-size: 10px;
|
101 |
+
color: #fff;
|
102 |
+
top: -8px;
|
103 |
+
left: 50%;
|
104 |
+
transform: translateX(-50%);
|
105 |
+
margin: 0;
|
106 |
+
-webkit-animation: bounce 2s 5;
|
107 |
+
animation: bounce 2s 5;
|
108 |
+
}
|
109 |
+
|
110 |
+
#edd-header .edd-number.edd-hidden {
|
111 |
+
display: none !important;
|
112 |
+
}
|
113 |
+
|
114 |
+
#edd-header .edd-round svg {
|
115 |
+
width: 20px;
|
116 |
+
height: 20px;
|
117 |
}
|
118 |
|
119 |
.edd-settings-sub-nav {
|
196 |
margin: 4px 0 0;
|
197 |
}
|
198 |
|
199 |
+
.download_page_edd-settings .form-table input.small-text~label,
|
200 |
+
.download_page_edd-settings .form-table input[type="checkbox"]+label {
|
201 |
+
display: inline;
|
202 |
+
}
|
203 |
+
|
204 |
+
.download_page_edd-settings .form-table tr>th>strong,
|
205 |
+
.download_page_edd-settings .form-table tr>th>h3 {
|
206 |
font-size: 1.2em;
|
207 |
font-weight: 600;
|
208 |
margin: 0 auto;
|
218 |
background: #333 !important;
|
219 |
border-width: 1px !important;
|
220 |
border-radius: 3px !important;
|
221 |
+
box-shadow: 1px 1px 2px 1px rgba(214, 214, 214, 0.5) !important;
|
222 |
color: #dedede !important;
|
223 |
max-width: 300px !important;
|
224 |
padding: 7px !important;
|
228 |
}
|
229 |
|
230 |
.download_page_edd-settings .edd-settings-payment-icon-wrapper {
|
231 |
+
margin-right: 10px;
|
232 |
+
line-height: 16px;
|
233 |
+
height: 16px;
|
234 |
display: table;
|
235 |
}
|
236 |
|
246 |
right: 0;
|
247 |
position: absolute;
|
248 |
}
|
249 |
+
|
250 |
.edd-add-ons-footer {
|
251 |
padding-top: 10px;
|
252 |
}
|
253 |
+
|
254 |
#edd-add-ons h2 {
|
255 |
margin: 0 0 15px;
|
256 |
}
|
257 |
+
|
258 |
.edd-add-ons-view-wrapper {
|
259 |
height: 50px;
|
260 |
}
|
261 |
+
|
262 |
#edd-add-ons h2 .button-primary {
|
263 |
position: absolute;
|
264 |
}
|
265 |
+
|
266 |
#edd-add-ons .edd-extension {
|
267 |
background: #fff;
|
268 |
border: 1px solid #ccc;
|
273 |
width: 320px;
|
274 |
height: 315px;
|
275 |
}
|
276 |
+
|
277 |
#edd-add-ons .edd-extension h3 {
|
278 |
font-size: 13px;
|
279 |
margin: 0 0 8px;
|
280 |
}
|
281 |
+
|
282 |
#edd-add-ons .edd-extension .button-secondary {
|
283 |
position: absolute;
|
284 |
bottom: 14px;
|
285 |
left: 14px;
|
286 |
}
|
287 |
+
|
288 |
#edd-add-ons .edd-browse-all {
|
289 |
+
clear: both;
|
290 |
+
width: 100%;
|
291 |
}
|
292 |
+
|
293 |
#edd-add-ons .edd-extension .third-party {
|
294 |
display: none;
|
295 |
}
|
296 |
+
|
297 |
#edd-add-ons .edd-starter-package {
|
298 |
background-color: #85c0e5;
|
299 |
border-color: #62a9d7;
|
300 |
color: #fff;
|
301 |
}
|
302 |
+
|
303 |
#edd-add-ons .edd-starter-package h3 {
|
304 |
color: #fff;
|
305 |
}
|
306 |
+
|
307 |
#edd-add-ons .edd-extension .wp-post-image {
|
308 |
width: 100%;
|
309 |
height: auto;
|
317 |
height: 100px;
|
318 |
min-width: 200px;
|
319 |
}
|
320 |
+
|
321 |
#edd-add-discount input[type="text"],
|
322 |
#edd-edit-discount input[type="text"] {
|
323 |
width: 300px;
|
337 |
clear: both;
|
338 |
background-image: -webkit-gradient(linear, left bottom, left top, from(#f5f5f5), to(#fafafa));
|
339 |
background-image: -webkit-linear-gradient(bottom, #f5f5f5, #fafafa);
|
340 |
+
background-image: -moz-linear-gradient(bottom, #f5f5f5, #fafafa);
|
341 |
+
background-image: -o-linear-gradient(bottom, #f5f5f5, #fafafa);
|
342 |
background-image: linear-gradient(to top, #f5f5f5, #fafafa);
|
343 |
border-color: #dfdfdf;
|
344 |
border-width: 1px;
|
350 |
padding: 12px;
|
351 |
margin: 8px 0;
|
352 |
}
|
353 |
+
|
354 |
#edd-payments-filter ul.subsubsub {
|
355 |
margin-bottom: 8px;
|
356 |
}
|
357 |
+
|
358 |
#edd-payment-filters p {
|
359 |
color: #777;
|
360 |
}
|
361 |
+
|
362 |
#edd-payment-date-filters input {
|
363 |
vertical-align: middle;
|
364 |
}
|
365 |
+
|
366 |
tr.status-refunded td {
|
367 |
background: #cecece;
|
368 |
border-top-color: #ccc;
|
369 |
}
|
370 |
+
|
371 |
.wp-list-table.downloads th#ID {
|
372 |
width: 80px;
|
373 |
}
|
374 |
+
|
375 |
.wp-list-table.downloads th#details {
|
376 |
width: 130px;
|
377 |
}
|
378 |
+
|
379 |
.wp-list-table.downloads th#date {
|
380 |
width: 140px;
|
381 |
}
|
382 |
+
|
383 |
.wp-list-table.downloads th#user {
|
384 |
width: 130px;
|
385 |
}
|
386 |
+
|
387 |
.edd-mobile-link {
|
388 |
line-height: 32px;
|
389 |
vertical-align: middle;
|
390 |
}
|
391 |
+
|
392 |
.edd-mobile-link img {
|
393 |
max-width: 80%;
|
394 |
height: auto;
|
395 |
float: left;
|
396 |
}
|
397 |
|
398 |
+
@media handheld,
|
399 |
+
only screen and (max-width: 640px) {
|
400 |
|
401 |
.wp-list-table.downloads th {
|
402 |
+
width: auto !important;
|
403 |
}
|
404 |
|
405 |
}
|
408 |
margin-left: -8px;
|
409 |
margin-top: -8px;
|
410 |
}
|
411 |
+
|
412 |
#edd-download-link-textarea {
|
413 |
width: 100%;
|
414 |
}
|
420 |
width: 225px;
|
421 |
float: left;
|
422 |
}
|
423 |
+
|
424 |
.edd_files_url_label {
|
425 |
width: 220px;
|
426 |
float: left;
|
427 |
}
|
428 |
+
|
429 |
#postbox-container-1 .edd_files_name_label {
|
430 |
width: 80px;
|
431 |
}
|
432 |
+
|
433 |
#postbox-container-1 .edd_files_url_label {
|
434 |
width: 80px;
|
435 |
}
|
436 |
+
|
437 |
.edd-add-repeatable-row {
|
438 |
margin: 10px 0;
|
439 |
}
|
440 |
+
|
441 |
.edd-add-repeatable-row .submit {
|
442 |
padding: 0 !important;
|
443 |
}
|
444 |
+
|
445 |
.edd_variable_prices_wrapper:not(:first-child),
|
446 |
.edd_repeatable_upload_wrapper:not(:first-child) {
|
447 |
margin-top: 12px;
|
448 |
}
|
449 |
+
|
450 |
.edd-repeatable-row-actions {
|
451 |
color: #777;
|
452 |
font-size: 12px;
|
453 |
}
|
454 |
+
|
455 |
.edd-repeatable-row-actions a {
|
456 |
text-decoration: none;
|
457 |
width: auto;
|
458 |
cursor: pointer;
|
459 |
vertical-align: middle;
|
460 |
}
|
461 |
+
|
462 |
.edd-repeatable-row-actions .toggle-custom-price-option-section {
|
463 |
color: #777;
|
464 |
}
|
465 |
+
|
466 |
.edd-repeatable-row-actions .toggle-custom-price-option-section:hover {
|
467 |
color: #444;
|
468 |
}
|
469 |
+
|
470 |
.edd-repeatable-row-header,
|
471 |
.edd-bundle-products-header {
|
472 |
clear: both;
|
473 |
background: #f1f1f1;
|
474 |
border: 1px solid #e5e5e5;
|
475 |
}
|
476 |
+
|
477 |
.edd-repeatable-row-header {
|
478 |
cursor: move;
|
479 |
}
|
480 |
+
|
481 |
.edd-repeatable-row-header:before,
|
482 |
.edd-repeatable-row-header:after,
|
483 |
.edd-bundled-product-row:before,
|
485 |
content: '';
|
486 |
display: table;
|
487 |
}
|
488 |
+
|
489 |
.edd-repeatable-row-header:after,
|
490 |
.edd-bundled-product-row:after {
|
491 |
clear: both;
|
492 |
}
|
493 |
+
|
494 |
.edd-repeatable-row-title {
|
495 |
float: left;
|
496 |
font-weight: 600;
|
497 |
}
|
498 |
+
|
499 |
.edd-bundled-product-item-reorder .edd-product-file-reorder {
|
500 |
color: #e5e5e5;
|
501 |
font-family: "dashicons";
|
506 |
vertical-align: top;
|
507 |
transition: .2s color;
|
508 |
}
|
509 |
+
|
510 |
.edd-bundled-product-item-reorder .edd-product-file-reorder:hover {
|
511 |
color: #bbb;
|
512 |
}
|
513 |
+
|
514 |
.edd-repeatable-row-title,
|
515 |
.edd-repeatable-row-actions {
|
516 |
padding: 8px;
|
517 |
box-sizing: border-box;
|
518 |
}
|
519 |
+
|
520 |
.edd-repeatable-row-actions {
|
521 |
float: right;
|
522 |
text-align: right;
|
523 |
padding: 8px;
|
524 |
}
|
525 |
+
|
526 |
.edd-repeatable-row-actions .edd-remove-row,
|
527 |
.edd-bundled-product-row .edd-remove-row {
|
528 |
font-size: 12px;
|
529 |
width: auto;
|
530 |
cursor: pointer;
|
531 |
}
|
532 |
+
|
533 |
.edd-repeatable-row-standard-fields,
|
534 |
.edd-bundled-product-row {
|
535 |
background: #f9f9f9;
|
538 |
border-style: solid;
|
539 |
border-color: #e5e5e5;
|
540 |
}
|
541 |
+
|
542 |
.edd-repeatable-row-setting-label {
|
543 |
display: block;
|
544 |
margin-bottom: 4px;
|
545 |
}
|
546 |
+
|
547 |
.edd-repeatable-row-setting-label .edd-help-tip {
|
548 |
display: inline-block;
|
549 |
margin-left: 4px;
|
550 |
}
|
551 |
+
|
552 |
.edd-option-name,
|
553 |
.edd-option-price,
|
554 |
.edd_repeatable_default,
|
562 |
display: inline-block;
|
563 |
vertical-align: top;
|
564 |
}
|
565 |
+
|
566 |
.edd-option-name {
|
567 |
width: 38%;
|
568 |
margin-right: 5%;
|
569 |
}
|
570 |
+
|
571 |
.edd-option-price {
|
572 |
min-width: 100px;
|
573 |
}
|
574 |
+
|
575 |
.edd_repeatable_default {
|
576 |
text-align: center;
|
577 |
min-width: 80px;
|
578 |
}
|
579 |
+
|
580 |
.edd-file-name {
|
581 |
width: 18%;
|
582 |
margin-right: 3%;
|
583 |
}
|
584 |
+
|
585 |
.edd-file-url {
|
586 |
width: 65%;
|
587 |
}
|
588 |
+
|
589 |
.edd-repeatable-row-standard-fields.has-variable-pricing .edd-file-url {
|
590 |
width: 38%;
|
591 |
margin-right: 5%;
|
592 |
}
|
593 |
+
|
594 |
.edd-file-assignment {
|
595 |
width: 27%;
|
596 |
}
|
597 |
+
|
598 |
.edd-file-assignment .edd-repeatable-row-setting-label {
|
599 |
margin-bottom: 0;
|
600 |
}
|
601 |
+
|
602 |
.edd-custom-price-option-sections-wrap {
|
603 |
display: none;
|
604 |
border-width: 0 1px 1px;
|
607 |
box-sizing: border-box;
|
608 |
width: 100%;
|
609 |
}
|
610 |
+
|
611 |
.edd-custom-price-option-section {
|
612 |
display: block;
|
613 |
padding: 10px 8px;
|
614 |
+
border-bottom: 1px solid rgba(222, 222, 222, 0.3);
|
615 |
}
|
616 |
+
|
617 |
.edd-custom-price-option-section:last-child {
|
618 |
border-bottom: none;
|
619 |
}
|
620 |
+
|
621 |
+
label.edd_prices_shipping {
|
622 |
+
/* remove once Simple Shipping markup is improved */
|
623 |
display: none !important;
|
624 |
}
|
625 |
+
|
626 |
.edd-custom-price-option-section-title {
|
627 |
display: block;
|
628 |
font-size: 14px;
|
629 |
font-weight: 600;
|
630 |
padding: 0 0 10px;
|
631 |
}
|
632 |
+
|
633 |
+
.edd-custom-price-option-section>*:not(.edd-custom-price-option-section-title) {
|
634 |
display: inline-block;
|
635 |
padding-right: 20px;
|
636 |
vertical-align: top;
|
637 |
margin-bottom: 4px;
|
638 |
}
|
639 |
+
|
640 |
+
.edd-custom-price-option-section>*:not(.edd-custom-price-option-section-title) label {
|
641 |
display: block;
|
642 |
margin-bottom: 2px;
|
643 |
}
|
644 |
+
|
645 |
.edd-bundle-products-header {
|
646 |
font-weight: 600;
|
647 |
padding: 8px;
|
648 |
}
|
649 |
+
|
650 |
.edd-bundled-product-row .edd-bundled-product-item-reorder {
|
651 |
min-width: 30px;
|
652 |
margin-right: 8px;
|
653 |
}
|
654 |
+
|
655 |
.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder {
|
656 |
font-size: 20px;
|
657 |
font-weight: 300;
|
658 |
padding: 16px 4px 0;
|
659 |
cursor: move;
|
660 |
}
|
661 |
+
|
662 |
.edd-bundled-product-row .edd-bundled-product-item {
|
663 |
width: 60%;
|
664 |
margin-right: 3%;
|
665 |
}
|
666 |
+
|
667 |
.edd-bundled-product-row.has-variable-pricing .edd-bundled-product-item {
|
668 |
width: 47%;
|
669 |
}
|
670 |
+
|
671 |
.edd-bundled-product-row .edd-bundled-product-price-assignment {
|
672 |
width: 23%;
|
673 |
margin-right: 3%;
|
674 |
}
|
675 |
+
|
676 |
.edd-bundled-product-row .edd-bundled-product-actions {
|
677 |
float: right;
|
678 |
}
|
679 |
+
|
680 |
.edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container {
|
681 |
position: relative;
|
682 |
}
|
683 |
+
|
684 |
.edd_upload_file {
|
685 |
background: #fff;
|
686 |
display: block;
|
689 |
top: 3px;
|
690 |
right: 7px;
|
691 |
}
|
692 |
+
|
693 |
.edd_upload_field {
|
694 |
padding-right: 8em !important;
|
695 |
}
|
696 |
+
|
697 |
textarea#edd-payment-note {
|
698 |
width: 100%;
|
699 |
height: 4em;
|
700 |
margin: 0;
|
701 |
}
|
702 |
+
|
703 |
#edd-purchased-files .row .edd-purchased-files-list-wrapper .download {
|
704 |
line-height: 1.4;
|
705 |
}
|
706 |
+
|
707 |
#edd-purchased-files .edd-purchased-files-list-wrapper .edd-purchased-option {
|
708 |
color: #666;
|
709 |
}
|
710 |
+
|
711 |
input[class*="edd-price-field"] {
|
712 |
padding: 3px 5px;
|
713 |
width: 75px;
|
714 |
}
|
715 |
+
|
716 |
[class*="item_"] [class*="edd-payment-details-download-"][type="number"].small-text,
|
717 |
#edd-order-download-quantity[type="number"].small-text,
|
718 |
#edd-order-download-tax[type="text"].small-text {
|
719 |
height: 25px;
|
720 |
}
|
721 |
+
|
722 |
.item_price .edd-payment-details-download-quantity[type="number"].small-text,
|
723 |
#edd-order-download-quantity[type="number"].small-text {
|
724 |
width: 55px;
|
725 |
}
|
726 |
+
|
727 |
.item_tax .edd-payment-details-download-item-tax[type="number"].small-text,
|
728 |
#edd-order-download-tax[type="text"].small-text {
|
729 |
width: 75px;
|
730 |
}
|
731 |
+
|
732 |
.edd_repeatable_upload_wrapper .pricing select,
|
733 |
.edd_repeatable_product_wrapper .edd-select {
|
734 |
min-width: 100%;
|
735 |
}
|
736 |
+
|
737 |
#edd_product_notes_field {
|
738 |
display: block;
|
739 |
margin: 12px 0 0;
|
753 |
width: 10px;
|
754 |
height: 10px;
|
755 |
}
|
756 |
+
|
757 |
.edd_remove_repeatable:active,
|
758 |
.edd_remove_repeatable:hover,
|
759 |
+
.edd_remove_repeatable:focus {
|
760 |
background-position: -10px 0 !important;
|
761 |
}
|
762 |
|
766 |
#edd-edit-order-form .column {
|
767 |
width: 32%;
|
768 |
}
|
769 |
+
|
770 |
.edd-edit-purchase-element[class*="columns-"] ul li {
|
771 |
padding-right: 1%;
|
772 |
}
|
773 |
+
|
774 |
#edd-edit-order-form .columns-4 .column:nth-child(2n+1),
|
775 |
#edd-edit-order-form .columns-5 .column:nth-child(3n+1),
|
776 |
#edd-edit-order-form .column:nth-child(2n+1) {
|
777 |
margin-right: 0;
|
778 |
}
|
779 |
+
|
780 |
#edd-edit-order-form input.large-text {
|
781 |
width: 90%;
|
782 |
}
|
783 |
+
|
784 |
.edd-edit-purchase-element ul li.download {
|
785 |
width: 35%;
|
786 |
}
|
787 |
+
|
788 |
.edd-edit-purchase-element ul li.item_price {
|
789 |
width: 15%;
|
790 |
}
|
791 |
+
|
792 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
793 |
width: 25%;
|
794 |
}
|
795 |
+
|
796 |
.edd-edit-purchase-element ul li.item_tax {
|
797 |
width: 15%;
|
798 |
}
|
799 |
+
|
800 |
.edd-edit-purchase-element ul li.price {
|
801 |
width: 20%;
|
802 |
}
|
803 |
+
|
804 |
.edd-admin-box .label {
|
805 |
font-weight: 600;
|
806 |
}
|
807 |
+
|
808 |
.edd-admin-box-inside {
|
809 |
border-bottom: 1px solid #eee;
|
810 |
clear: both;
|
812 |
margin: 0;
|
813 |
word-break: break-word;
|
814 |
}
|
815 |
+
|
816 |
.rtl .edd-admin-box-inside {
|
817 |
padding: 5px 10px 5px 0;
|
818 |
}
|
819 |
+
|
820 |
.edd-admin-box-inside .strong {
|
821 |
font-weight: 600;
|
822 |
}
|
823 |
+
|
824 |
.edd-payment-fees .fee-label {
|
825 |
color: #666;
|
826 |
font-weight: normal;
|
827 |
}
|
828 |
+
|
829 |
.edd-admin-box .right {
|
830 |
float: right;
|
831 |
}
|
832 |
+
|
833 |
.rtl .edd-admin-box .right {
|
834 |
float: left;
|
835 |
margin-left: 10px;
|
836 |
}
|
837 |
+
|
838 |
#edd-order-update .inside,
|
839 |
#edd-order-details .inside {
|
840 |
margin: 0;
|
841 |
padding: 0;
|
842 |
}
|
843 |
+
|
844 |
#edd-order-update input.edd_datepicker {
|
845 |
width: 180px;
|
846 |
}
|
847 |
+
|
848 |
#edd-order-update input[type="number"].edd-payment-time-hour,
|
849 |
#edd-order-update input[type="number"].edd-payment-time-min {
|
850 |
width: 50px;
|
851 |
}
|
852 |
+
|
853 |
#edd-order-update .edd-tax-rate {
|
854 |
color: #9c9c9c;
|
855 |
font-style: italic;
|
856 |
}
|
857 |
+
|
858 |
#edd-order-resend-receipt .inside {
|
859 |
margin-top: 11px;
|
860 |
}
|
861 |
+
|
862 |
#edd-order-resend-receipt .edd-order-resend-receipt-addresses {
|
863 |
margin-top: 10px;
|
864 |
}
|
865 |
+
|
866 |
.edd-admin-box-inside:last-child {
|
867 |
border-bottom: 0;
|
868 |
}
|
869 |
+
|
870 |
#edd-edit-order-form .data-payment-key {
|
871 |
word-break: break-all;
|
872 |
}
|
873 |
+
|
874 |
.edd-order-update-box #major-publishing-actions .button-secondary {
|
875 |
margin-right: 10px;
|
876 |
}
|
877 |
+
|
878 |
.edd-edit-purchase-element .edd-select-chosen {
|
879 |
width: 196px;
|
880 |
}
|
881 |
+
|
882 |
.edd-edit-purchase-element ul,
|
883 |
#edd-order-address-country-wrap select,
|
884 |
#edd-customer-details .order-data-address input,
|
887 |
clear: both;
|
888 |
display: block;
|
889 |
}
|
890 |
+
|
891 |
#edd-customer-details .customer-info .column {
|
892 |
width: 49%;
|
893 |
}
|
894 |
+
|
895 |
#edd-customer-details .actions {
|
896 |
float: right;
|
897 |
}
|
898 |
+
|
899 |
.edd-order-data input.small-text {
|
900 |
margin: 0;
|
901 |
}
|
902 |
+
|
903 |
.edd-order-data input.med-text {
|
904 |
margin: 0;
|
905 |
width: 100px;
|
906 |
}
|
907 |
+
|
908 |
#edd-order-update span.label {
|
909 |
display: inline;
|
910 |
width: 50px;
|
911 |
}
|
912 |
+
|
913 |
.edd-order-update-box .button-primary {
|
914 |
margin-right: 0;
|
915 |
}
|
916 |
+
|
917 |
#edd-edit-order-form .column .description {
|
918 |
padding-right: 10px;
|
919 |
}
|
920 |
+
|
921 |
#edd-edit-order-form .column,
|
922 |
.edd-edit-purchase-element ul li {
|
923 |
display: inline-block;
|
926 |
margin: 0;
|
927 |
vertical-align: middle;
|
928 |
}
|
929 |
+
|
930 |
.edd-edit-purchase-element .row {
|
931 |
padding: 12px;
|
932 |
}
|
933 |
+
|
934 |
.edd-edit-purchase-element .row:not(:last-child) {
|
935 |
border-bottom: 1px solid #eee;
|
936 |
}
|
937 |
+
|
938 |
.edd-edit-purchase-element .row:nth-child(odd):not(.header) {
|
939 |
background-color: #f9f9f9;
|
940 |
}
|
941 |
+
|
942 |
.edd-edit-purchase-element .row.header {
|
943 |
padding: 6px 12px;
|
944 |
font-weight: 600;
|
945 |
vertical-align: top;
|
946 |
}
|
947 |
+
|
948 |
.edd-edit-purchase-element ul {
|
949 |
font-size: 0;
|
950 |
}
|
951 |
+
|
952 |
.edd-edit-purchase-element ul li {
|
953 |
font-size: 13px;
|
954 |
}
|
955 |
+
|
956 |
#edd-order-data .data span {
|
957 |
color: #666;
|
958 |
font-weight: 600;
|
959 |
}
|
960 |
+
|
961 |
.edd-edit-purchase-element .inside {
|
962 |
padding: 12px;
|
963 |
}
|
964 |
+
|
965 |
.edd-edit-purchase-element .edd-purchased-download-title {
|
966 |
font-size: 14px;
|
967 |
font-weight: 500;
|
968 |
}
|
969 |
+
|
970 |
.edd-edit-purchase-element .edd-purchased-download-title .deleted {
|
971 |
color: #777;
|
972 |
}
|
973 |
+
|
974 |
.edd-edit-purchase-element .edd-purchased-download-actions {
|
975 |
color: #777;
|
976 |
line-height: 1.4;
|
977 |
}
|
978 |
+
|
979 |
.edd-edit-purchase-element .edd-purchased-download-actions .edd-purchased-download-actions-label {
|
980 |
font-weight: 500;
|
981 |
}
|
982 |
+
|
983 |
.edd-edit-purchase-element .edd-purchased-download-actions a {
|
984 |
color: #777;
|
985 |
font-size: 12px;
|
986 |
}
|
987 |
+
|
988 |
.edd-edit-purchase-element .edd-purchased-download-actions a:hover {
|
989 |
color: #444;
|
990 |
}
|
991 |
+
|
992 |
.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download {
|
993 |
color: #a00;
|
994 |
}
|
995 |
+
|
996 |
.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download:hover {
|
997 |
color: #f00;
|
998 |
}
|
999 |
+
|
1000 |
#edd-order-recalc-total {
|
1001 |
float: right;
|
1002 |
}
|
1003 |
+
|
1004 |
.edd_repeatable_upload_wrapper .pricing select,
|
1005 |
.edd_repeatable_product_wrapper .edd-select,
|
1006 |
#edd_products .edd-select {
|
1007 |
min-width: 100%;
|
1008 |
max-width: 200px;
|
1009 |
}
|
1010 |
+
|
1011 |
.edd_repeatable_product_wrapper td {
|
1012 |
overflow: visible;
|
1013 |
}
|
1014 |
+
|
1015 |
.edd-payment-details-label-mobile {
|
1016 |
display: none;
|
1017 |
}
|
1018 |
|
1019 |
+
@media screen and (max-width: 1284px) {
|
1020 |
|
1021 |
.edd-edit-purchase-element ul li.download {
|
1022 |
padding-bottom: 15px;
|
1023 |
width: 100%;
|
1024 |
}
|
1025 |
+
|
1026 |
.edd-edit-purchase-element .edd-purchased-download-title {
|
1027 |
font-size: 16px;
|
1028 |
}
|
1029 |
+
|
1030 |
.edd-edit-purchase-element ul li.item_price {
|
1031 |
width: 22%;
|
1032 |
}
|
1033 |
+
|
1034 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
1035 |
width: 35%;
|
1036 |
}
|
1037 |
+
|
1038 |
.edd-edit-purchase-element ul li.item_tax {
|
1039 |
width: 25%;
|
1040 |
}
|
1041 |
+
|
1042 |
.edd-edit-purchase-element ul li.price {
|
1043 |
width: 20%;
|
1044 |
}
|
1045 |
+
|
1046 |
.edd-edit-purchase-element .edd-purchased-download-actions {
|
1047 |
padding-top: 10px;
|
1048 |
}
|
1049 |
+
|
1050 |
.edd-purchased-files-header,
|
1051 |
.edd-add-download-to-purchase-header {
|
1052 |
display: none;
|
1053 |
}
|
1054 |
+
|
1055 |
.edd-payment-details-label-mobile {
|
1056 |
display: block;
|
1057 |
font-weight: 500;
|
1060 |
|
1061 |
}
|
1062 |
|
1063 |
+
@media screen and (max-width: 1024px) {
|
1064 |
|
1065 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
1066 |
width: 40%;
|
1067 |
}
|
1068 |
+
|
1069 |
.edd-edit-purchase-element ul li.price {
|
1070 |
width: 24%;
|
1071 |
}
|
1072 |
+
|
1073 |
.edd-edit-purchase-element .edd-purchased-download-actions {
|
1074 |
padding-top: 15px;
|
1075 |
}
|
1076 |
+
|
1077 |
.edd-edit-purchase-element .edd-purchased-download-actions,
|
1078 |
.edd-edit-purchase-element .edd-purchased-download-actions a {
|
1079 |
font-size: 14px;
|
1081 |
|
1082 |
}
|
1083 |
|
1084 |
+
@media screen and (max-width: 782px) {
|
1085 |
|
1086 |
#edd-edit-order-form .column {
|
1087 |
width: 49%;
|
1088 |
}
|
1089 |
+
|
1090 |
.edd-edit-purchase-element ul li.item_price,
|
1091 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
1092 |
padding-bottom: 10px;
|
1093 |
}
|
1094 |
+
|
1095 |
.edd-edit-purchase-element ul li.item_price.item_quantity {
|
1096 |
width: 35%;
|
1097 |
}
|
1098 |
+
|
1099 |
.edd-edit-purchase-element ul li.item_tax,
|
1100 |
.edd-edit-purchase-element ul li.price {
|
1101 |
width: 20%;
|
1102 |
padding-bottom: 10px;
|
1103 |
}
|
1104 |
+
|
1105 |
.edd-payment-details-label-mobile {
|
1106 |
font-size: 14px;
|
1107 |
font-weight: 500;
|
1108 |
}
|
1109 |
+
|
1110 |
.edd-price-currency,
|
1111 |
.edd-payment-details-download-amount {
|
1112 |
font-size: 16px;
|
1113 |
}
|
1114 |
+
|
1115 |
.order-data-column input[type="email"] {
|
1116 |
padding: 6px 10px;
|
1117 |
}
|
1118 |
|
1119 |
}
|
1120 |
|
1121 |
+
@media screen and (max-width: 600px) {
|
1122 |
|
1123 |
.edd-edit-purchase-element ul li.item_price,
|
1124 |
.edd-edit-purchase-element ul li.item_price.item_quantity,
|
1126 |
width: 100%;
|
1127 |
padding-bottom: 20px;
|
1128 |
}
|
1129 |
+
|
1130 |
.edd-edit-purchase-element ul li.price,
|
1131 |
.edd-edit-purchase-element .edd-add-download-to-purchase ul li.item_tax {
|
1132 |
width: 100%;
|
1133 |
padding-bottom: 0;
|
1134 |
}
|
1135 |
+
|
1136 |
.edd-edit-purchase-element .edd-add-download-to-purchase-actions {
|
1137 |
padding-top: 15px;
|
1138 |
}
|
1139 |
+
|
1140 |
#edd-edit-order-form .column {
|
1141 |
width: 100%;
|
1142 |
}
|
1146 |
/** Stats */
|
1147 |
#edd_product_stats .label {
|
1148 |
display: inline-block;
|
1149 |
+
}
|
1150 |
+
|
1151 |
#edd_product_stats hr {
|
1152 |
border-style: solid;
|
1153 |
border-width: 1px;
|
1154 |
border-color: #ccc #fff #fff #ccc;
|
1155 |
}
|
1156 |
+
|
1157 |
#edd_product_stats .product-sales-stats:before,
|
1158 |
#edd_product_stats .product-earnings-stats:before {
|
1159 |
color: #82878c;
|
1169 |
-webkit-font-smoothing: antialiased;
|
1170 |
-moz-osx-font-smoothing: grayscale;
|
1171 |
}
|
1172 |
+
|
1173 |
#edd_product_stats .product-sales-stats:before {
|
1174 |
content: '\f174';
|
1175 |
}
|
1176 |
+
|
1177 |
#edd_product_stats .product-earnings-stats:before {
|
1178 |
content: '\f239';
|
1179 |
}
|
1181 |
/* Dashboard Widget Styles
|
1182 |
-------------------------------------------------------------- */
|
1183 |
|
1184 |
+
.edd_dashboard_widget table thead td {
|
1185 |
border-bottom: 1px solid #ececec;
|
1186 |
color: #777;
|
1187 |
}
|
1188 |
+
|
1189 |
.edd_dashboard_widget .table_left {
|
1190 |
float: left;
|
1191 |
width: 45%;
|
1192 |
}
|
1193 |
+
|
1194 |
.edd_dashboard_widget .table_right {
|
1195 |
float: right;
|
1196 |
width: 45%;
|
1197 |
}
|
1198 |
+
|
1199 |
.edd_dashboard_widget .inside {
|
1200 |
font-size: 12px;
|
1201 |
}
|
1202 |
+
|
1203 |
.edd_dashboard_widget td {
|
1204 |
padding: 3px 0;
|
1205 |
}
|
1206 |
+
|
1207 |
.edd_dashboard_widget .b,
|
1208 |
.edd_dashboard_widget .t {
|
1209 |
line-height: 1.5;
|
1210 |
vertical-align: middle;
|
1211 |
}
|
1212 |
+
|
1213 |
.edd_dashboard_widget .b {
|
1214 |
font-size: 14px;
|
1215 |
+
font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
|
1216 |
padding-right: 6px;
|
1217 |
width: auto;
|
1218 |
}
|
1219 |
+
|
1220 |
.edd_dashboard_widget .t {
|
1221 |
font-size: 12px;
|
1222 |
padding-right: 12px;
|
1223 |
color: #777;
|
1224 |
width: 100%;
|
1225 |
}
|
1226 |
+
|
1227 |
.edd_dashboard_widget .label_heading {
|
1228 |
border-top: 1px solid #ececec;
|
1229 |
color: #8f8f8f;
|
1234 |
padding-top: 10px;
|
1235 |
margin: 0 0 8px 12px;
|
1236 |
}
|
1237 |
+
|
1238 |
.edd_dashboard_widget .edd_dashboard_widget_subheading {
|
1239 |
border-top: 1px solid #ececec;
|
1240 |
color: #8f8f8f;
|
1242 |
padding-top: 10px;
|
1243 |
margin: 1em 0 0 0;
|
1244 |
}
|
1245 |
+
|
1246 |
+
.edd_dashboard_widget .edd_dashboard_widget_subheading+.table {
|
1247 |
margin: 8px 0 0 0;
|
1248 |
}
|
1249 |
+
|
1250 |
.edd_dashboard_widget .edd_price_label {
|
1251 |
background: rgb(0, 118, 156);
|
1252 |
border-radius: 3px;
|
1255 |
padding: 2px 4px;
|
1256 |
margin-right: 2px;
|
1257 |
}
|
1258 |
+
|
1259 |
.edd_dashboard_widget table {
|
1260 |
width: 100%;
|
1261 |
margin-left: 0;
|
1262 |
margin-bottom: 1em;
|
1263 |
}
|
1264 |
+
|
1265 |
td.edd_order_label {
|
1266 |
width: 80%;
|
1267 |
}
|
1268 |
+
|
1269 |
td.edd_order_price {
|
1270 |
text-align: right;
|
1271 |
}
|
1272 |
|
1273 |
+
@media handheld,
|
1274 |
+
only screen and (max-width: 1000px) {
|
1275 |
|
1276 |
.edd_dashboard_widget .edd-recent-email {
|
1277 |
display: none;
|
1285 |
#edd-dashboard-widgets-wrap .postbox h3 {
|
1286 |
cursor: default;
|
1287 |
}
|
1288 |
+
|
1289 |
#edd-graphs-date-options,
|
1290 |
#edd-date-range-options {
|
1291 |
float: left;
|
1292 |
}
|
1293 |
+
|
1294 |
#edd-date-range-options span {
|
1295 |
float: left;
|
1296 |
line-height: 24px;
|
1297 |
height: 24px;
|
1298 |
margin-right: 6px;
|
1299 |
}
|
1300 |
+
|
1301 |
.edd-import-export-form {
|
1302 |
position: relative;
|
1303 |
}
|
1304 |
+
|
1305 |
.edd-import-export-form .edd-progress {
|
1306 |
background: #ddd;
|
1307 |
position: absolute;
|
1309 |
width: 95%;
|
1310 |
height: 15px;
|
1311 |
}
|
1312 |
+
|
1313 |
.edd-import-export-form .edd-progress div {
|
1314 |
background: #ccc;
|
1315 |
height: 100%;
|
1316 |
width: 0;
|
1317 |
}
|
1318 |
+
|
1319 |
.edd-import-export-form .notice-wrap {
|
1320 |
background-color: #f4f4f4;
|
1321 |
border-style: solid;
|
1327 |
position: relative;
|
1328 |
width: 100%;
|
1329 |
}
|
1330 |
+
|
1331 |
.edd-import-export-form .notice-wrap .spinner {
|
1332 |
margin: 4px 10px 8px;
|
1333 |
float: right;
|
1334 |
}
|
1335 |
+
|
1336 |
.admin-color-fresh .edd-import-export-form .edd-progress div {
|
1337 |
background: #0073aa;
|
1338 |
}
|
1339 |
+
|
1340 |
.admin-color-light .edd-import-export-form .edd-progress div {
|
1341 |
background: #888;
|
1342 |
}
|
1343 |
+
|
1344 |
.admin-color-blue .edd-import-export-form .edd-progress div {
|
1345 |
background: #096484;
|
1346 |
}
|
1347 |
+
|
1348 |
.admin-color-coffee .edd-import-export-form .edd-progress div {
|
1349 |
background: #c7a589;
|
1350 |
}
|
1351 |
+
|
1352 |
.admin-color-ectoplasm .edd-import-export-form .edd-progress div {
|
1353 |
background: #a3b745;
|
1354 |
}
|
1355 |
+
|
1356 |
.admin-color-midnight .edd-import-export-form .edd-progress div {
|
1357 |
background: #e14d43;
|
1358 |
}
|
1359 |
+
|
1360 |
.admin-color-sunrise .edd-import-export-form .edd-progress div {
|
1361 |
background: #dd823b;
|
1362 |
}
|
1363 |
+
|
1364 |
#edd-graphs-filter label {
|
1365 |
vertical-align: inherit;
|
1366 |
}
|
1367 |
+
|
1368 |
#edd-graphs-filter .graph-option-section {
|
1369 |
float: left;
|
1370 |
line-height: 2.5em;
|
1371 |
padding-right: 5px;
|
1372 |
}
|
1373 |
+
|
1374 |
.edd-mix-totals {
|
1375 |
background-color: #fff;
|
1376 |
border: 1px solid #e5e5e5;
|
1377 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
1378 |
padding: 10px;
|
1379 |
}
|
1380 |
+
|
1381 |
.edd-mix-chart {
|
1382 |
display: inline-block;
|
1383 |
width: 49%;
|
1384 |
vertical-align: top;
|
1385 |
}
|
1386 |
+
|
1387 |
.edd-graph-notes {
|
1388 |
color: #9c9c9c;
|
1389 |
}
|
1390 |
+
|
1391 |
.edd-graph-notes span {
|
1392 |
display: block;
|
1393 |
}
|
1394 |
+
|
1395 |
.edd-pie-graph .legend {
|
1396 |
display: none;
|
1397 |
}
|
1398 |
+
|
1399 |
.edd-pie-legend {
|
1400 |
overflow: auto;
|
1401 |
margin-top: 10px;
|
1402 |
}
|
1403 |
+
|
1404 |
.edd-legend-item-wrapper {
|
1405 |
color: #333;
|
1406 |
display: inline-block;
|
1409 |
width: 48%;
|
1410 |
height: 20px;
|
1411 |
}
|
1412 |
+
|
1413 |
.edd-legend-color {
|
1414 |
border: 1px solid #cfcfcf;
|
1415 |
display: inline-block;
|
1417 |
width: 20px;
|
1418 |
height: 15px;
|
1419 |
}
|
1420 |
+
|
1421 |
.edd-pie-legend-item {
|
1422 |
display: inline-block;
|
1423 |
vertical-align: top;
|
1429 |
|
1430 |
/* Settings page styles
|
1431 |
-------------------------------------------------------------- */
|
|
|
|
|
1432 |
[id*="edd-recapture-"].button {
|
1433 |
font-size: 16px;
|
1434 |
height: auto;
|
1435 |
padding: 8px 14px;
|
1436 |
margin: 6px 0 0;
|
1437 |
}
|
1438 |
+
|
1439 |
[id*="edd-recapture-"].button .dashicons {
|
1440 |
line-height: 29px;
|
1441 |
margin-right: 8px;
|
1442 |
}
|
1443 |
+
|
|
|
1444 |
[id*="edd-recapture-"].button .edd-loading,
|
1445 |
[id*="edd-recapture-"].button .edd-loading:after {
|
1446 |
border-radius: 50%;
|
1448 |
width: 14px;
|
1449 |
height: 14px;
|
1450 |
}
|
1451 |
+
|
1452 |
[id*="edd-recapture-"].button .edd-loading {
|
1453 |
position: relative;
|
1454 |
top: 3px;
|
1455 |
margin-left: 4px;
|
1456 |
+
box-shadow: 0 0 2px rgba(0, 0, 0, .2);
|
1457 |
}
|
1458 |
+
|
1459 |
[id*="edd-recapture-"].button .edd-loading {
|
1460 |
-webkit-animation: edd-spinning 1.1s infinite linear;
|
1461 |
animation: edd-spinning 1.1s infinite linear;
|
1468 |
-ms-transform: translateZ(0);
|
1469 |
transform: translateZ(0);
|
1470 |
}
|
1471 |
+
|
1472 |
#edd-recapture-disconnect.button .edd-loading.dark {
|
1473 |
border-top-color: rgba(0, 0, 0, 0.2);
|
1474 |
border-right-color: rgba(0, 0, 0, 0.2);
|
1476 |
border-left-color: #666;
|
1477 |
box-shadow: none;
|
1478 |
}
|
1479 |
+
|
1480 |
.recapture-notice {
|
1481 |
position: relative;
|
1482 |
}
|
1483 |
+
|
1484 |
@-webkit-keyframes edd-spinning {
|
1485 |
0% {
|
1486 |
-webkit-transform: rotate(0deg);
|
1487 |
transform: rotate(0deg);
|
1488 |
}
|
1489 |
+
|
1490 |
100% {
|
1491 |
-webkit-transform: rotate(360deg);
|
1492 |
transform: rotate(360deg);
|
1493 |
}
|
1494 |
}
|
1495 |
+
|
1496 |
@keyframes edd-spinning {
|
1497 |
0% {
|
1498 |
-webkit-transform: rotate(0deg);
|
1499 |
transform: rotate(0deg);
|
1500 |
}
|
1501 |
+
|
1502 |
100% {
|
1503 |
-webkit-transform: rotate(360deg);
|
1504 |
transform: rotate(360deg);
|
1505 |
}
|
1506 |
}
|
1507 |
+
|
1508 |
#edd_tax_rates {
|
1509 |
margin: 1em 0 0;
|
1510 |
}
|
1511 |
+
|
1512 |
#edd_tax_rates .edd_tax_country *,
|
1513 |
#edd_tax_rates .edd_tax_state * {
|
1514 |
max-width: 100%;
|
1515 |
}
|
1516 |
+
|
1517 |
#edd_tax_rates .edd_tax_country,
|
1518 |
#edd_tax_rates .edd_tax_state {
|
1519 |
width: 180px;
|
1520 |
}
|
1521 |
+
|
1522 |
#edd_tax_rates .edd_tax_rate {
|
1523 |
width: 80px;
|
1524 |
}
|
1525 |
+
|
1526 |
#edd_tax_rates th {
|
1527 |
padding: 15px 10px;
|
1528 |
}
|
1529 |
+
|
1530 |
.wrap-licenses .form-table,
|
1531 |
.wrap-licenses thead,
|
1532 |
.wrap-licenses tbody,
|
1537 |
.wrap-licenses caption {
|
1538 |
display: block;
|
1539 |
}
|
1540 |
+
|
1541 |
.wrap-licenses .form-table tr {
|
1542 |
float: left;
|
1543 |
margin: 0 15px 15px 0;
|
1550 |
position: relative;
|
1551 |
box-sizing: border-box;
|
1552 |
}
|
1553 |
+
|
1554 |
.wrap-licenses .form-table th {
|
1555 |
background: #f9f9f9;
|
1556 |
padding: 14px;
|
1558 |
margin: -14px -14px 20px;
|
1559 |
width: 100%;
|
1560 |
}
|
1561 |
+
|
1562 |
.wrap-licenses .form-table td {
|
1563 |
padding: 0;
|
1564 |
}
|
1565 |
+
|
1566 |
.wrap-licenses td input.regular-text {
|
1567 |
margin: 0 0 8px;
|
1568 |
width: 100%;
|
1569 |
}
|
1570 |
+
|
1571 |
.wrap-licenses .edd-license-data[class*="edd-license-"] {
|
1572 |
position: absolute;
|
1573 |
background: #fafafa;
|
1579 |
bottom: 14px;
|
1580 |
box-sizing: border-box;
|
1581 |
}
|
1582 |
+
|
1583 |
.wrap-licenses .edd-license-data[class*="edd-license-"] a {
|
1584 |
color: #444;
|
1585 |
}
|
1586 |
+
|
1587 |
.wrap-licenses .edd-license-data[class*="edd-license-"] a:hover {
|
1588 |
text-decoration: none;
|
1589 |
}
|
1590 |
+
|
1591 |
.wrap-licenses .edd-license-data.license-expires-soon-notice {
|
1592 |
background-color: #00a0d2;
|
1593 |
color: #fff;
|
1594 |
border-color: #00a0d2;
|
1595 |
}
|
1596 |
+
|
1597 |
.wrap-licenses .edd-license-data.edd-license-expired {
|
1598 |
background-color: #e24e4e;
|
1599 |
color: #fff;
|
1600 |
border-color: #e24e4e;
|
1601 |
}
|
1602 |
+
|
1603 |
.wrap-licenses .edd-license-data.edd-license-error,
|
1604 |
.wrap-licenses .edd-license-data.edd-license-missing,
|
1605 |
.wrap-licenses .edd-license-data.edd-license-invalid,
|
1608 |
background-color: #ffebcd;
|
1609 |
border-color: #ffebcd;
|
1610 |
}
|
1611 |
+
|
1612 |
.wrap-licenses .edd-license-data p {
|
1613 |
font-size: 13px;
|
1614 |
margin-top: 0;
|
1615 |
}
|
1616 |
+
|
1617 |
.wrap-licenses .edd-license-data.license-expires-soon-notice a,
|
1618 |
.wrap-licenses .edd-license-data.edd-license-expired a {
|
1619 |
color: #fff;
|
1620 |
}
|
1621 |
+
|
1622 |
.wrap-licenses .edd-license-data.license-expires-soon-notice a:hover,
|
1623 |
.wrap-licenses .edd-license-data.edd-license-expired a:hover {
|
1624 |
text-decoration: none;
|
1625 |
}
|
1626 |
+
|
1627 |
.wrap-licenses p.submit {
|
1628 |
clear: both;
|
1629 |
}
|
1654 |
-------------------------------------------------------------- */
|
1655 |
|
1656 |
.edd-graph .y1Axis {
|
1657 |
+
color: rgb(237, 194, 64) !important;
|
1658 |
}
|
1659 |
+
|
1660 |
.edd-graph .y2Axis {
|
1661 |
+
color: rgb(175, 216, 248) !important;
|
1662 |
}
|
1663 |
|
1664 |
/* API Table Styles
|
1675 |
width: 100%;
|
1676 |
max-width: 300px;
|
1677 |
}
|
1678 |
+
|
1679 |
.chosen-container-multi .chosen-choices {
|
1680 |
background-image: none;
|
1681 |
border-color: #dfdfdf;
|
1682 |
-webkit-border-radius: 3px;
|
1683 |
border-radius: 3px;
|
1684 |
}
|
1685 |
+
|
1686 |
.chosen-container-multi .chosen-choices input {
|
1687 |
border-color: #dfdfdf;
|
1688 |
+
height: 27px !important;
|
1689 |
+
margin: 2px;
|
1690 |
}
|
1691 |
+
|
1692 |
.chosen-container .chosen-drop {
|
1693 |
border-color: #aaa;
|
1694 |
-webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
1695 |
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
1696 |
}
|
1697 |
+
|
1698 |
.chosen-container .search-field {
|
1699 |
+
float: none !important;
|
1700 |
}
|
1701 |
+
|
1702 |
.chosen-container .search-field input {
|
1703 |
+
width: 90% !important;
|
1704 |
}
|
1705 |
+
|
1706 |
.chosen-container-active .chosen-choices {
|
1707 |
border-color: #aaa;
|
1708 |
-webkit-border-top-left-radius: 3px;
|
1719 |
.download_page_edd-tools .tablenav .actions {
|
1720 |
overflow: visible;
|
1721 |
}
|
1722 |
+
|
1723 |
.edd_user_search_wrap {
|
1724 |
position: relative;
|
1725 |
overflow: visible;
|
1726 |
}
|
1727 |
+
|
1728 |
.edd_user_search_results {
|
1729 |
position: absolute;
|
1730 |
left: 0;
|
1731 |
top: 27px;
|
1732 |
}
|
1733 |
+
|
1734 |
.edd_user_search_results a.edd-ajax-user-cancel {
|
1735 |
position: absolute;
|
1736 |
right: 6px;
|
1737 |
top: 2px;
|
1738 |
}
|
1739 |
+
|
1740 |
.edd_user_search_results ul {
|
1741 |
background: #f0f0f0;
|
1742 |
border: 1px solid #dfdfdf;
|
1751 |
color: #999;
|
1752 |
}
|
1753 |
|
1754 |
+
@media screen and (max-width: 1100px) {
|
1755 |
|
1756 |
.edd-mix-chart {
|
1757 |
display: block;
|
1766 |
|
1767 |
}
|
1768 |
|
1769 |
+
@media screen and (max-width: 782px) {
|
1770 |
|
1771 |
.post-type-download .nav-tab-wrapper a {
|
1772 |
font-size: 70%;
|
1773 |
padding: 2px 4px;
|
1774 |
}
|
1775 |
+
|
1776 |
.download_page_edd-tools .apikeys .column-user {
|
1777 |
width: 80px;
|
1778 |
}
|
1779 |
+
|
1780 |
.license-lifetime-notice,
|
1781 |
.license-expiration-date-notice,
|
1782 |
.license-null {
|
1783 |
padding-left: 0;
|
1784 |
}
|
1785 |
+
|
1786 |
[class^="license-"] input[type="text"] {
|
1787 |
margin-bottom: 3px;
|
1788 |
}
|
1789 |
|
1790 |
}
|
1791 |
|
1792 |
+
@media screen and (max-width: 600px) {
|
1793 |
.wrap-licenses .form-table tr {
|
1794 |
width: 100%;
|
1795 |
min-height: 230px;
|
1806 |
#edd-item-wrapper {
|
1807 |
background: #f5f5f5;
|
1808 |
border: 1px solid #e5e5e5;
|
1809 |
+
webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
1810 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
1811 |
max-width: 830px;
|
1812 |
}
|
1813 |
+
|
1814 |
#edd-item-wrapper:after {
|
1815 |
content: "";
|
1816 |
display: block;
|
1819 |
font-size: 0;
|
1820 |
height: 0;
|
1821 |
}
|
1822 |
+
|
1823 |
#edd-item-tab-wrapper {
|
1824 |
+
float: left;
|
1825 |
width: 18%;
|
1826 |
z-index: 1;
|
1827 |
}
|
1828 |
+
|
1829 |
#edd-item-tab-wrapper-list {
|
1830 |
background: #fff;
|
1831 |
margin: 0;
|
1832 |
}
|
1833 |
+
|
1834 |
#edd-item-tab-wrapper-list li {
|
1835 |
display: block;
|
1836 |
background-color: #eaeaea;
|
1844 |
hyphens: auto;
|
1845 |
word-wrap: break-word;
|
1846 |
}
|
1847 |
+
|
1848 |
#edd-item-tab-wrapper-list li a {
|
1849 |
display: block;
|
1850 |
padding: 8px 10px 8px 6px;
|
1851 |
}
|
1852 |
+
|
1853 |
#edd-item-tab-wrapper-list li.active {
|
1854 |
display: block;
|
1855 |
background-color: #fff;
|
1856 |
padding: 8px 10px 8px 6px;
|
1857 |
}
|
1858 |
+
|
1859 |
#edd-item-tab-wrapper-list .inactive a,
|
1860 |
#edd-item-tab-wrapper-list .inactive a:visited {
|
1861 |
background-color: #f5f5f5;
|
1862 |
color: #444;
|
1863 |
text-decoration: none;
|
1864 |
}
|
1865 |
+
|
1866 |
#edd-item-tab-wrapper-list .inactive a:hover {
|
1867 |
background-color: #fff;
|
1868 |
}
|
1869 |
+
|
1870 |
#edd-item-tab-wrapper-list .dashicons {
|
1871 |
color: #444;
|
1872 |
font-size: 16px;
|
1873 |
min-width: 24px;
|
1874 |
height: auto;
|
1875 |
}
|
1876 |
+
|
1877 |
#edd-item-card-wrapper .left {
|
1878 |
float: left;
|
1879 |
}
|
1880 |
+
|
1881 |
#edd-item-card-wrapper .right {
|
1882 |
float: right;
|
1883 |
}
|
1884 |
+
|
1885 |
#edd-item-card-wrapper input {
|
1886 |
font-weight: normal;
|
1887 |
}
|
1888 |
+
|
1889 |
#edd-item-card-wrapper {
|
1890 |
background-color: #fff;
|
1891 |
border: 1px solid #e5e5e5;
|
1895 |
width: 700px;
|
1896 |
z-index: 2;
|
1897 |
}
|
1898 |
+
|
1899 |
.edd-item-has-tabs #edd-item-card-wrapper {
|
1900 |
border-width: 0 0 0 1px;
|
1901 |
width: 82%;
|
1902 |
}
|
1903 |
+
|
1904 |
#edd-item-card-wrapper .customer-section {
|
1905 |
border-bottom: 1px solid #eee;
|
1906 |
margin-bottom: 10px;
|
1907 |
overflow: auto;
|
1908 |
}
|
1909 |
+
|
1910 |
#edd-item-card-wrapper .customer-section table {
|
1911 |
margin-bottom: 20px;
|
1912 |
}
|
1913 |
+
|
1914 |
+
#edd-item-card-wrapper>div {
|
1915 |
padding: 0px 20px;
|
1916 |
}
|
1917 |
+
|
1918 |
+
#edd-item-card-wrapper>div:first-child {
|
1919 |
padding-top: 20px;
|
1920 |
}
|
1921 |
+
|
1922 |
+
#edd-item-card-wrapper>div:last-child {
|
1923 |
border: none;
|
1924 |
padding-bottom: 20px;
|
1925 |
}
|
1926 |
+
|
1927 |
#edd-item-card-wrapper .avatar-wrap {
|
1928 |
padding-right: 10px;
|
1929 |
text-align: center;
|
1930 |
}
|
1931 |
+
|
1932 |
#edd-item-card-wrapper .customer-id {
|
1933 |
font-size: 24px;
|
1934 |
font-weight: 600;
|
1935 |
}
|
1936 |
+
|
1937 |
#edd-item-card-wrapper .customer-main-wrapper input {
|
1938 |
width: 200px;
|
1939 |
}
|
1940 |
+
|
1941 |
#edd-item-card-wrapper .customer-address-wrapper {
|
1942 |
margin-right: 25px;
|
1943 |
max-width: 33%;
|
1944 |
width: 202px;
|
1945 |
}
|
1946 |
+
|
1947 |
#edd-item-card-wrapper .customer-address-wrapper select {
|
1948 |
width: 200px;
|
1949 |
}
|
1950 |
+
|
1951 |
#edd-item-card-wrapper .customer-info {
|
1952 |
margin-top: 5px;
|
1953 |
margin-bottom: 10px;
|
1954 |
min-height: 185px;
|
1955 |
}
|
1956 |
+
|
1957 |
#edd-item-card-wrapper .info-wrapper {
|
1958 |
min-height: 125px;
|
1959 |
overflow: visible;
|
1960 |
}
|
1961 |
+
|
1962 |
#edd-item-card-wrapper a.delete {
|
1963 |
color: #ff0000;
|
1964 |
margin-right: 5px;
|
1965 |
text-decoration: none;
|
1966 |
}
|
1967 |
+
|
1968 |
.customer-info .customer-name {
|
1969 |
font-size: 24px;
|
1970 |
font-weight: 600;
|
1971 |
}
|
1972 |
+
|
1973 |
.customer-edit-link a,
|
1974 |
.disconnect-user a {
|
1975 |
font-size: 12px;
|
1976 |
font-weight: normal;
|
1977 |
text-decoration: none;
|
1978 |
}
|
1979 |
+
|
1980 |
#customer-edit-actions {
|
1981 |
line-height: 28px;
|
1982 |
margin-bottom: 20px;
|
1983 |
text-align: center;
|
1984 |
}
|
1985 |
+
|
1986 |
#customer-edit-actions .button-secondary {
|
1987 |
margin-right: 10px;
|
1988 |
}
|
1989 |
+
|
1990 |
#edd-item-card-wrapper .row-title {
|
1991 |
width: 30%;
|
1992 |
}
|
1993 |
+
|
1994 |
#edd-item-card-wrapper .info-item {
|
1995 |
display: block;
|
1996 |
line-height: 16px;
|
1997 |
padding-bottom: 5px;
|
1998 |
}
|
1999 |
+
|
2000 |
#edd-item-card-wrapper .edit-item {
|
2001 |
display: none;
|
2002 |
}
|
2003 |
+
|
2004 |
#edd-item-card-wrapper .edd_user_search_results {
|
2005 |
left: 1px;
|
2006 |
top: 16px;
|
2007 |
}
|
2008 |
+
|
2009 |
#edd-item-card-wrapper .edd_user_search_results ul {
|
2010 |
width: 200px;
|
2011 |
}
|
2012 |
+
|
2013 |
#edd-item-stats-wrapper {
|
2014 |
margin: 0 auto;
|
2015 |
min-height: 30px;
|
2016 |
text-align: center;
|
2017 |
}
|
2018 |
+
|
2019 |
#edd-item-stats-wrapper li {
|
2020 |
font-size: 14px;
|
2021 |
float: left;
|
2022 |
line-height: 22px;
|
2023 |
width: 50%;
|
2024 |
}
|
2025 |
+
|
2026 |
#edd-item-stats-wrapper a {
|
2027 |
text-decoration: none;
|
2028 |
}
|
2029 |
+
|
2030 |
#edd-item-stats-wrapper .dashicons {
|
2031 |
color: #888;
|
2032 |
}
|
2033 |
+
|
2034 |
#edd-item-tables-wrapper table {
|
2035 |
text-align: center;
|
2036 |
width: 100%;
|
2037 |
}
|
2038 |
+
|
2039 |
#edd-item-tables-wrapper th {
|
2040 |
text-align: center;
|
2041 |
}
|
2042 |
+
|
2043 |
+
#edd-item-tables-wrapper .downloads tr>th:first-child,
|
2044 |
+
#edd-item-tables-wrapper .downloads tr>td:first-child,
|
2045 |
+
#edd-item-tables-wrapper .emails tr>th:first-child,
|
2046 |
+
#edd-item-tables-wrapper .emails tr>td:first-child {
|
2047 |
text-align: left;
|
2048 |
}
|
2049 |
+
|
2050 |
+
#edd-item-tables-wrapper .downloads tr>td:only-child {
|
2051 |
text-align: center;
|
2052 |
}
|
2053 |
+
|
2054 |
#edd-item-tables-wrapper .emails .add-customer-email-row td {
|
2055 |
background-color: #f9f9f9;
|
2056 |
border-top: 1px solid #e5e5e5;
|
2057 |
}
|
2058 |
+
|
2059 |
#edd-item-tables-wrapper .emails .primary-email-icon {
|
2060 |
font-size: 13px;
|
2061 |
vertical-align: middle;
|
2062 |
line-height: 1.5em;
|
2063 |
}
|
2064 |
+
|
2065 |
#edd-item-tables-wrapper .emails input {
|
2066 |
vertical-align: middle;
|
2067 |
margin: 6px 0;
|
2068 |
}
|
2069 |
+
|
2070 |
#edd-item-tables-wrapper .emails .spinner {
|
2071 |
float: none;
|
2072 |
}
|
2073 |
+
|
2074 |
#edd-item-notes-wrapper {
|
2075 |
min-height: 50px;
|
2076 |
}
|
2077 |
+
|
2078 |
.edd-item-notes-header span,
|
2079 |
.edd-item-notes-header img {
|
2080 |
font-weight: 600;
|
2081 |
line-height: 30px;
|
2082 |
vertical-align: middle;
|
2083 |
}
|
2084 |
+
|
2085 |
.customer-note-input {
|
2086 |
margin-bottom: 5px;
|
2087 |
width: 100%;
|
2088 |
}
|
2089 |
+
|
2090 |
#edd-customer-notes div:nth-of-type(even) {
|
2091 |
background-color: #fcfcfc;
|
2092 |
}
|
2093 |
+
|
2094 |
.customer-note-wrapper {
|
2095 |
border-bottom: 1px solid #f9f9f9;
|
2096 |
min-height: 38px;
|
2097 |
padding: 7px 0 7px 7px;
|
2098 |
}
|
2099 |
+
|
2100 |
.customer-note-wrapper span {
|
2101 |
display: block;
|
2102 |
}
|
2103 |
+
|
2104 |
.note-content-wrap {
|
2105 |
padding-top: 7px;
|
2106 |
}
|
2107 |
+
|
2108 |
.delete-customer {
|
2109 |
text-align: center;
|
2110 |
}
|
2111 |
+
|
2112 |
#edd-item-card-wrapper .notice-container {
|
2113 |
padding-left: 20px;
|
2114 |
padding-right: 20px;
|
2115 |
margin-left: -20px;
|
2116 |
margin-right: -20px;
|
2117 |
}
|
2118 |
+
|
2119 |
+
#edd-item-card-wrapper .add-customer-email-wrapper>#add-customer-email {
|
2120 |
vertical-align: middle;
|
2121 |
}
|
2122 |
|
2123 |
+
@media screen and (max-width: 810px) and (min-width: 656px) {
|
2124 |
.customer-info .customer-name {
|
2125 |
font-size: 16px;
|
2126 |
}
|
2127 |
+
|
2128 |
+
#edd-item-card-wrapper .widefat td,
|
2129 |
+
.widefat th {
|
2130 |
padding: 4px 6px;
|
2131 |
+
max-width: 100px !important;
|
2132 |
display: table-cell;
|
2133 |
}
|
2134 |
}
|
2135 |
+
|
2136 |
+
@media screen and (max-width: 781px) {
|
2137 |
+
|
2138 |
#edd-item-tab-wrapper,
|
2139 |
#edd-item-card-wrapper {
|
2140 |
margin: 0;
|
2141 |
width: 100%;
|
2142 |
}
|
2143 |
+
|
2144 |
#edd-item-tab-wrapper-list {
|
2145 |
background: #fff;
|
2146 |
margin: 0;
|
2147 |
}
|
2148 |
+
|
2149 |
#edd-item-tab-wrapper-list li {
|
2150 |
float: left;
|
2151 |
display: inline;
|
2156 |
border-color: #e5e5e5;
|
2157 |
width: 33.33333%;
|
2158 |
}
|
2159 |
+
|
2160 |
#edd-item-tab-wrapper-list li:nth-child(3n+3) {
|
2161 |
border-width: 0 0 1px 0;
|
2162 |
}
|
2163 |
+
|
2164 |
#edd-item-tab-wrapper-list .dashicons {
|
2165 |
font-size: 18px;
|
2166 |
}
|
2167 |
+
|
2168 |
+
.edd-item-has-tabs #edd-item-card-wrapper {
|
2169 |
border-top: 1px solid #e5e5e5;
|
2170 |
border-left: 0;
|
2171 |
margin-top: -1px;
|
2172 |
width: 100%;
|
2173 |
}
|
2174 |
}
|
2175 |
+
|
2176 |
+
@media screen and (max-width: 656px) {
|
2177 |
#edd-item-card-wrapper .customer-info {
|
2178 |
min-height: 220px;
|
2179 |
}
|
2180 |
+
|
2181 |
.edd-item-info.customer-info {
|
2182 |
position: relative;
|
2183 |
}
|
2184 |
+
|
2185 |
#edd-item-card-wrapper .customer-address-wrapper {
|
2186 |
float: none;
|
2187 |
position: absolute;
|
2189 |
left: 110px;
|
2190 |
max-width: 200px;
|
2191 |
}
|
2192 |
+
|
2193 |
#edd-item-card-wrapper .customer-main-wrapper {
|
2194 |
float: none;
|
2195 |
position: absolute;
|
2196 |
left: 110px;
|
2197 |
}
|
2198 |
+
|
2199 |
.customer-info .customer-name {
|
2200 |
font-size: 16px;
|
2201 |
}
|
2202 |
+
|
2203 |
#edd-item-card-wrapper #edd-item-stats-wrapper {
|
2204 |
padding-left: 0;
|
2205 |
padding-right: 0;
|
2206 |
}
|
2207 |
+
|
2208 |
#edd-item-card-wrapper .customer-section {
|
2209 |
margin-bottom: 0;
|
2210 |
}
|
2211 |
+
|
2212 |
#edd-item-card-wrapper .widefat td,
|
2213 |
#edd-item-card-wrapper .widefat th {
|
2214 |
padding: 4px 6px;
|
2215 |
+
max-width: 100px !important;
|
2216 |
display: table-cell;
|
2217 |
overflow: hidden;
|
2218 |
}
|
2219 |
+
|
2220 |
#edd-item-card-wrapper .customer-id {
|
2221 |
font-size: 16px;
|
2222 |
}
|
2223 |
}
|
2224 |
+
|
2225 |
+
@media screen and (max-width: 480px) {
|
2226 |
#edd-item-tab-wrapper-list li {
|
2227 |
width: 50%;
|
2228 |
}
|
2229 |
+
|
2230 |
#edd-item-tab-wrapper-list li:nth-child(3n+3) {
|
2231 |
border-width: 0 1px 1px 0;
|
2232 |
}
|
2233 |
+
|
2234 |
#edd-item-tab-wrapper-list li:nth-child(even) {
|
2235 |
border-width: 0 0 1px 0;
|
2236 |
}
|
2237 |
+
|
2238 |
.edd-repeatable-row-title,
|
2239 |
.edd-repeatable-row-actions {
|
2240 |
text-align: left;
|
2241 |
width: 100%;
|
2242 |
}
|
2243 |
+
|
2244 |
.edd-repeatable-row-title {
|
2245 |
padding-bottom: 0;
|
2246 |
}
|
2247 |
+
|
2248 |
.edd-option-name,
|
2249 |
.edd-option-price,
|
2250 |
.edd_repeatable_default,
|
2259 |
width: 100% !important;
|
2260 |
margin: 10px 0;
|
2261 |
}
|
2262 |
+
|
2263 |
.edd-bundled-product-row .edd-bundled-product-actions {
|
2264 |
float: none;
|
2265 |
}
|
2266 |
+
|
2267 |
.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder {
|
2268 |
padding: 0;
|
2269 |
}
|
2281 |
#edd-payment-date-filters span {
|
2282 |
display: block;
|
2283 |
}
|
2284 |
+
|
2285 |
+
#edd-payment-date-filters span>input {
|
2286 |
float: right;
|
2287 |
}
|
2288 |
|
2330 |
.recount-stats-controls form {
|
2331 |
display: inline;
|
2332 |
}
|
2333 |
+
|
2334 |
.edd-recount-stats-descriptions span {
|
2335 |
display: none;
|
2336 |
line-height: 24px;
|
2337 |
}
|
2338 |
|
2339 |
#edd-debug-log p.submit {
|
2340 |
+
margin: 20px 0 0;
|
2341 |
padding: 0;
|
2342 |
}
|
2343 |
|
2465 |
}
|
2466 |
|
2467 |
/* Settings sidebar responsive behavior */
|
2468 |
+
@media all and (min-width: 1080px) {
|
2469 |
|
2470 |
.edd-has-sidebar .edd-settings-content {
|
2471 |
float: left;
|
2478 |
}
|
2479 |
}
|
2480 |
|
2481 |
+
@media all and (min-width: 1240px) {
|
2482 |
|
2483 |
.edd-has-sidebar .edd-settings-content {
|
2484 |
width: 74%;
|
2531 |
background: #2d6ca2;
|
2532 |
display: none;
|
2533 |
}
|
2534 |
+
|
2535 |
+
@media screen and (min-width: 783px) {
|
2536 |
.edd-admin-notice-top-of-page {
|
2537 |
padding: 10px 46px 10px 22px;
|
2538 |
}
|
2539 |
}
|
2540 |
+
|
2541 |
+
@media screen and (min-width: 961px) {
|
2542 |
.edd-admin-notice-top-of-page {
|
2543 |
text-align: center;
|
2544 |
}
|
2545 |
}
|
2546 |
+
|
2547 |
.edd-admin-notice-top-of-page a {
|
2548 |
color: #fff;
|
2549 |
}
|
2550 |
+
|
2551 |
.edd-admin-notice-top-of-page a:hover {
|
2552 |
text-decoration: none;
|
2553 |
}
|
2554 |
+
|
2555 |
.edd-admin-notice-top-of-page .button-link {
|
2556 |
position: absolute;
|
2557 |
top: 48px;
|
2563 |
margin-left: 5px;
|
2564 |
padding: 6px 10px;
|
2565 |
}
|
2566 |
+
|
2567 |
.edd-admin-notice-top-of-page .button-link:hover,
|
2568 |
.edd-admin-notice-top-of-page .button-link:active,
|
2569 |
.edd-admin-notice-top-of-page .button-link:focus {
|
2570 |
color: #fff;
|
2571 |
text-decoration: none;
|
2572 |
}
|
2573 |
+
|
2574 |
+
@media screen and (min-width: 601px) {
|
2575 |
.edd-admin-notice-top-of-page .button-link {
|
2576 |
top: 1px;
|
2577 |
}
|
2578 |
}
|
2579 |
+
|
2580 |
+
@media screen and (min-width: 783px) {
|
2581 |
.edd-admin-notice-top-of-page .button-link {
|
2582 |
right: 9px;
|
2583 |
}
|
2588 |
.edd-paypal-account-status ul {
|
2589 |
margin-left: 25px;
|
2590 |
}
|
2591 |
+
|
2592 |
+
.edd-paypal-account-status>li {
|
2593 |
margin-bottom: 1em;
|
2594 |
}
|
2595 |
+
|
2596 |
.edd-paypal-account-status ul:not(.edd-paypal-webhook-events) {
|
2597 |
list-style: disc;
|
2598 |
list-style-position: inside;
|
2599 |
}
|
2600 |
+
|
2601 |
.edd-paypal-account-status ul:not(.edd-paypal-webhook-events) li {
|
2602 |
margin: .25em 0;
|
2603 |
}
|
2604 |
+
|
2605 |
.edd-paypal-account-status .dashicons-yes {
|
2606 |
color: #008a20;
|
2607 |
}
|
2608 |
+
|
2609 |
.edd-paypal-account-status .dashicons-no {
|
2610 |
color: #d63638;
|
2611 |
}
|
2612 |
+
/* Five Star Review Request
|
2613 |
+
------------------------------------------------------------- */
|
2614 |
+
#edd-admin-notice-five-star-review {
|
2615 |
+
display: grid;
|
2616 |
+
}
|
2617 |
+
|
2618 |
+
#edd_dashboard_sales .edd-promo-notice {
|
2619 |
+
border-bottom: 1px solid #c3c4c7;
|
2620 |
+
}
|
2621 |
+
|
2622 |
+
.edd-review-actions {
|
2623 |
+
display: flex;
|
2624 |
+
gap: 6px;
|
2625 |
+
margin: 0 0 16px 0;
|
2626 |
+
}
|
2627 |
+
|
2628 |
+
.edd-promo-notice .edd-peeking {
|
2629 |
+
align-self: flex-end;
|
2630 |
+
justify-self: flex-end;
|
2631 |
+
margin-right: 16px;
|
2632 |
+
margin-bottom: -1px;
|
2633 |
+
}
|
2634 |
+
|
2635 |
+
@media screen and (max-width: 782px) {
|
2636 |
+
#edd-admin-notice-five-star-review.notice .edd-peeking {
|
2637 |
+
margin-bottom: -6px;
|
2638 |
+
}
|
2639 |
+
}
|
2640 |
+
|
2641 |
+
@media screen and (min-width: 400px) {
|
2642 |
+
.edd-promo-notice .edd-peeking {
|
2643 |
+
justify-self: flex-start;
|
2644 |
+
margin-right: 0;
|
2645 |
+
margin-left: 200px;
|
2646 |
+
}
|
2647 |
+
}
|
2648 |
+
|
2649 |
+
.edd-review-step,
|
2650 |
+
.edd-promo-notice .edd-peeking {
|
2651 |
+
grid-area: 1/-1;
|
2652 |
+
}
|
2653 |
+
|
2654 |
+
/* Notifications
|
2655 |
+
-------------------------------------------------------------- */
|
2656 |
+
.edd-overlay {
|
2657 |
+
position: fixed;
|
2658 |
+
z-index: 1052;
|
2659 |
+
top: 0;
|
2660 |
+
right: 0;
|
2661 |
+
bottom: 0;
|
2662 |
+
left: 160px;
|
2663 |
+
background-color: #141b38;
|
2664 |
+
opacity: .5;
|
2665 |
+
transition: .5s;
|
2666 |
+
}
|
2667 |
+
|
2668 |
+
.edd-slide-in {
|
2669 |
+
transform: translateX(100%) !important;
|
2670 |
+
-webkit-transform: translateX(100%) !important;
|
2671 |
+
}
|
2672 |
+
|
2673 |
+
#edd-notifications-panel {
|
2674 |
+
background-color: white;
|
2675 |
+
height: 100%;
|
2676 |
+
width: 100%;
|
2677 |
+
max-width: 570px;
|
2678 |
+
position: fixed;
|
2679 |
+
z-index: 1053;
|
2680 |
+
top: 0;
|
2681 |
+
right: 0;
|
2682 |
+
bottom: 0;
|
2683 |
+
overflow-x: hidden;
|
2684 |
+
transition: .5s;
|
2685 |
+
|
2686 |
+
transform: translateX(0%);
|
2687 |
+
-webkit-transform: translateX(0%);
|
2688 |
+
}
|
2689 |
+
body.admin-bar #edd-notifications-panel {
|
2690 |
+
top: 32px;
|
2691 |
+
}
|
2692 |
+
@media screen and (max-width: 600px) {
|
2693 |
+
body.admin-bar #edd-notifications-panel {
|
2694 |
+
top: 46px;
|
2695 |
+
}
|
2696 |
+
}
|
2697 |
+
|
2698 |
+
#edd-notifications-header {
|
2699 |
+
display: flex;
|
2700 |
+
align-items: center;
|
2701 |
+
padding: 0 30px;
|
2702 |
+
color: #fff;
|
2703 |
+
background-color: #0c5d95;
|
2704 |
+
}
|
2705 |
+
#edd-notifications-header h3 {
|
2706 |
+
color: #fff;
|
2707 |
+
flex: 1;
|
2708 |
+
}
|
2709 |
+
#edd-notifications-header .edd-close {
|
2710 |
+
background: none;
|
2711 |
+
border: none;
|
2712 |
+
color: #fff;
|
2713 |
+
cursor: pointer;
|
2714 |
+
}
|
2715 |
+
|
2716 |
+
#edd-notifications-body {
|
2717 |
+
padding: 30px;
|
2718 |
+
}
|
2719 |
+
|
2720 |
+
.edd-notification {
|
2721 |
+
display: flex;
|
2722 |
+
gap: 20px;
|
2723 |
+
margin-bottom: 20px;
|
2724 |
+
}
|
2725 |
+
.edd-notification--icon {
|
2726 |
+
color: #00aa63;
|
2727 |
+
}
|
2728 |
+
.edd-notification--icon.edd-notification--icon-info {
|
2729 |
+
color: #005ae0;
|
2730 |
+
}
|
2731 |
+
.edd-notification--icon.edd-notification--icon-warning {
|
2732 |
+
color: #f18200;
|
2733 |
+
}
|
2734 |
+
.edd-notification--icon.edd-notification--icon-error {
|
2735 |
+
color: #df2a4a;
|
2736 |
+
}
|
2737 |
+
.edd-notification--body {
|
2738 |
+
flex: 1;
|
2739 |
+
}
|
2740 |
+
.edd-notification--header {
|
2741 |
+
align-items: center;
|
2742 |
+
display: flex;
|
2743 |
+
justify-content: space-between;
|
2744 |
+
gap: 5px;
|
2745 |
+
margin-bottom: 7px;
|
2746 |
+
}
|
2747 |
+
.edd-notification--title {
|
2748 |
+
color: #141b38;
|
2749 |
+
flex: 1;
|
2750 |
+
font-size: 16px;
|
2751 |
+
font-weight: 600;
|
2752 |
+
margin: 0;
|
2753 |
+
}
|
2754 |
+
.edd-notification--date {
|
2755 |
+
color: #71747e;
|
2756 |
+
font-size: 12px;
|
2757 |
+
}
|
2758 |
+
.edd-notification--actions {
|
2759 |
+
flex-wrap: wrap;
|
2760 |
+
display: flex;
|
2761 |
+
align-items: center;
|
2762 |
+
gap: 5px;
|
2763 |
+
margin-top: 10px;
|
2764 |
+
}
|
2765 |
+
.edd-notification--dismiss {
|
2766 |
+
background: none !important;
|
2767 |
+
border: none !important;
|
2768 |
+
box-shadow: none !important;
|
2769 |
+
color: #71747e !important;
|
2770 |
+
cursor: pointer;
|
2771 |
+
padding: 0 10px;
|
2772 |
+
text-decoration: underline;
|
2773 |
+
}
|
2774 |
+
.edd-notification--dismiss:hover {
|
2775 |
+
text-decoration: none;
|
2776 |
+
}
|
assets/css/edd-admin.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.edd-hidden{display:none}.edd-clearfix:after{content:".";display:block;height:0;text-indent:-9999px;visibility:hidden}.edd-notice .notice-dismiss,.edd-wrap a{text-decoration:none}a.edd-delete{color:#a00}a.edd-delete:hover{color:red}body.post-type-download #contextual-help-link-wrap,body.post-type-download #screen-options-link-wrap{top:5px!important}body.post-type-download #screen-meta{margin:0 0 -1px -20px}#edd-header{border-top:5px solid #0c5d95;border-bottom:1px solid #c3c4c7;padding:22px 0;margin-left:-20px;background:#fff}#edd-header img{display:block;margin:0;max-width:300px;margin-left:20px}.edd-settings-sub-nav{margin:0 0 10px 0;width:100%;border-bottom:1px solid #ccc;box-shadow:0 1px 1px rgba(0,0,0,.04)}.edd-settings-sub-nav a{padding:13px;display:block}.edd-settings-sub-nav a.current{border-bottom:4px solid #000;padding-bottom:9px}.admin-color-fresh .edd-settings-sub-nav a.current{border-bottom-color:#00a0d2}.admin-color-blue .edd-settings-sub-nav a.current{border-bottom-color:#096484}.admin-color-coffee .edd-settings-sub-nav a.current{border-bottom-color:#c7a589}.admin-color-ectoplasm .edd-settings-sub-nav a.current{border-bottom-color:#a3b745}.admin-color-midnight .edd-settings-sub-nav a.current{border-bottom-color:#e14d43}.admin-color-ocean .edd-settings-sub-nav a.current{border-bottom-color:#627c83}.admin-color-sunrise .edd-settings-sub-nav a.current{border-bottom-color:#be3631}.admin-color-light .edd-settings-sub-nav a.current{border-bottom-color:#888}.admin-color-evergreen .edd-settings-sub-nav a.current{border-bottom-color:#36533f}.admin-color-mint .edd-settings-sub-nav a.current{border-bottom-color:#4f6d59}.admin-color-modern .edd-settings-sub-nav a.current{border-bottom-color:#3858e9}.download_page_edd-settings .form-table label{color:#666;font-size:14px;font-style:italic;margin:4px 0 0}.download_page_edd-settings .form-table input.small-text~label,.download_page_edd-settings .form-table input[type=checkbox]+label{display:inline}.download_page_edd-settings .form-table tr>th>h3,.download_page_edd-settings .form-table tr>th>strong{font-size:1.2em;font-weight:600;margin:0 auto}.edd-help-tip{cursor:help}.edd-ui-tooltip{position:absolute;background:#333!important;border-width:1px!important;border-radius:3px!important;box-shadow:1px 1px 2px 1px rgba(214,214,214,.5)!important;color:#dedede!important;max-width:300px!important;padding:7px!important;text-rendering:optimizeLegibility;text-shadow:none!important;z-index:9999!important}.download_page_edd-settings .edd-settings-payment-icon-wrapper{margin-right:10px;line-height:16px;height:16px;display:table}#edd-add-ons h2.nav-tab-wrapper{position:relative}.edd-tab-span{top:-6px;right:0;position:absolute}.edd-add-ons-footer{padding-top:10px}#edd-add-ons h2{margin:0 0 15px}.edd-add-ons-view-wrapper{height:50px}#edd-add-ons h2 .button-primary{position:absolute}#edd-add-ons .edd-extension{background:#fff;border:1px solid #ccc;float:left;padding:14px;position:relative;margin:0 15px 15px 0;width:320px;height:315px}#edd-add-ons .edd-extension h3{font-size:13px;margin:0 0 8px}#edd-add-ons .edd-extension .button-secondary{position:absolute;bottom:14px;left:14px}#edd-add-ons .edd-browse-all{clear:both;width:100%}#edd-add-ons .edd-extension .third-party{display:none}#edd-add-ons .edd-starter-package{background-color:#85c0e5;border-color:#62a9d7;color:#fff}#edd-add-ons .edd-starter-package h3{color:#fff}#edd-add-ons .edd-extension .wp-post-image{width:100%;height:auto;vertical-align:bottom}#edd-products{height:100px;min-width:200px}#edd-add-discount input[type=text],#edd-edit-discount input[type=text]{width:300px}#edd-add-discount input.edd-price-field,#edd-edit-discount input.edd-price-field{padding:3px 5px;width:75px}#edd-payment-filters{background:#f5f5f5;clear:both;background-image:-webkit-gradient(linear,left bottom,left top,from(#f5f5f5),to(#fafafa));background-image:-webkit-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-moz-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-o-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:linear-gradient(to top,#f5f5f5,#fafafa);border-color:#dfdfdf;border-width:1px;border-style:solid;border-radius:3px;font-size:13px;line-height:2.1em;overflow:auto;padding:12px;margin:8px 0}#edd-payments-filter ul.subsubsub{margin-bottom:8px}#edd-payment-filters p{color:#777}#edd-payment-date-filters input{vertical-align:middle}tr.status-refunded td{background:#cecece;border-top-color:#ccc}.wp-list-table.downloads th#ID{width:80px}.wp-list-table.downloads th#details{width:130px}.wp-list-table.downloads th#date{width:140px}.wp-list-table.downloads th#user{width:130px}.edd-mobile-link{line-height:32px;vertical-align:middle}.edd-mobile-link img{max-width:80%;height:auto;float:left}@media handheld,only screen and (max-width:640px){.wp-list-table.downloads th{width:auto!important}}.download_page_edd-payment-history .ui-dialog .ui-dialog-titlebar-close span{margin-left:-8px;margin-top:-8px}#edd-download-link-textarea{width:100%}.edd_files_name_label{width:225px;float:left}.edd_files_url_label{width:220px;float:left}#postbox-container-1 .edd_files_name_label{width:80px}#postbox-container-1 .edd_files_url_label{width:80px}.edd-add-repeatable-row{margin:10px 0}.edd-add-repeatable-row .submit{padding:0!important}.edd_repeatable_upload_wrapper:not(:first-child),.edd_variable_prices_wrapper:not(:first-child){margin-top:12px}.edd-repeatable-row-actions{color:#777;font-size:12px}.edd-repeatable-row-actions a{text-decoration:none;width:auto;cursor:pointer;vertical-align:middle}.edd-repeatable-row-actions .toggle-custom-price-option-section{color:#777}.edd-repeatable-row-actions .toggle-custom-price-option-section:hover{color:#444}.edd-bundle-products-header,.edd-repeatable-row-header{clear:both;background:#f1f1f1;border:1px solid #e5e5e5}.edd-repeatable-row-header{cursor:move}.edd-bundled-product-row:after,.edd-bundled-product-row:before,.edd-repeatable-row-header:after,.edd-repeatable-row-header:before{content:'';display:table}.edd-bundled-product-row:after,.edd-repeatable-row-header:after{clear:both}.edd-repeatable-row-title{float:left;font-weight:600}.edd-bundled-product-item-reorder .edd-product-file-reorder{color:#e5e5e5;font-family:dashicons;content:"\f545";font-size:18px;font-weight:300;margin-left:4px;vertical-align:top;transition:.2s color}.edd-bundled-product-item-reorder .edd-product-file-reorder:hover{color:#bbb}.edd-repeatable-row-actions,.edd-repeatable-row-title{padding:8px;box-sizing:border-box}.edd-repeatable-row-actions{float:right;text-align:right;padding:8px}.edd-bundled-product-row .edd-remove-row,.edd-repeatable-row-actions .edd-remove-row{font-size:12px;width:auto;cursor:pointer}.edd-bundled-product-row,.edd-repeatable-row-standard-fields{background:#f9f9f9;padding:8px;border-width:0 1px 1px;border-style:solid;border-color:#e5e5e5}.edd-repeatable-row-setting-label{display:block;margin-bottom:4px}.edd-repeatable-row-setting-label .edd-help-tip{display:inline-block;margin-left:4px}.edd-bundled-product-row .edd-bundled-product-actions,.edd-bundled-product-row .edd-bundled-product-item,.edd-bundled-product-row .edd-bundled-product-item-reorder,.edd-bundled-product-row .edd-bundled-product-price-assignment,.edd-file-assignment,.edd-file-name,.edd-file-url,.edd-option-name,.edd-option-price,.edd_repeatable_default{display:inline-block;vertical-align:top}.edd-option-name{width:38%;margin-right:5%}.edd-option-price{min-width:100px}.edd_repeatable_default{text-align:center;min-width:80px}.edd-file-name{width:18%;margin-right:3%}.edd-file-url{width:65%}.edd-repeatable-row-standard-fields.has-variable-pricing .edd-file-url{width:38%;margin-right:5%}.edd-file-assignment{width:27%}.edd-file-assignment .edd-repeatable-row-setting-label{margin-bottom:0}.edd-custom-price-option-sections-wrap{display:none;border-width:0 1px 1px;border-style:solid;border-color:#e5e5e5;box-sizing:border-box;width:100%}.edd-custom-price-option-section{display:block;padding:10px 8px;border-bottom:1px solid rgba(222,222,222,.3)}.edd-custom-price-option-section:last-child{border-bottom:none}label.edd_prices_shipping{display:none!important}.edd-custom-price-option-section-title{display:block;font-size:14px;font-weight:600;padding:0 0 10px}.edd-custom-price-option-section>:not(.edd-custom-price-option-section-title){display:inline-block;padding-right:20px;vertical-align:top;margin-bottom:4px}.edd-custom-price-option-section>:not(.edd-custom-price-option-section-title) label{display:block;margin-bottom:2px}.edd-bundle-products-header{font-weight:600;padding:8px}.edd-bundled-product-row .edd-bundled-product-item-reorder{min-width:30px;margin-right:8px}.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder{font-size:20px;font-weight:300;padding:16px 4px 0;cursor:move}.edd-bundled-product-row .edd-bundled-product-item{width:60%;margin-right:3%}.edd-bundled-product-row.has-variable-pricing .edd-bundled-product-item{width:47%}.edd-bundled-product-row .edd-bundled-product-price-assignment{width:23%;margin-right:3%}.edd-bundled-product-row .edd-bundled-product-actions{float:right}.edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container{position:relative}.edd_upload_file{background:#fff;display:block;padding:2px 8px 2px;position:absolute;top:3px;right:7px}.edd_upload_field{padding-right:8em!important}textarea#edd-payment-note{width:100%;height:4em;margin:0}#edd-purchased-files .row .edd-purchased-files-list-wrapper .download{line-height:1.4}#edd-purchased-files .edd-purchased-files-list-wrapper .edd-purchased-option{color:#666}input[class*=edd-price-field]{padding:3px 5px;width:75px}#edd-order-download-quantity[type=number].small-text,#edd-order-download-tax[type=text].small-text,[class*=item_] [class*=edd-payment-details-download-][type=number].small-text{height:25px}#edd-order-download-quantity[type=number].small-text,.item_price .edd-payment-details-download-quantity[type=number].small-text{width:55px}#edd-order-download-tax[type=text].small-text,.item_tax .edd-payment-details-download-item-tax[type=number].small-text{width:75px}.edd_repeatable_product_wrapper .edd-select,.edd_repeatable_upload_wrapper .pricing select{min-width:100%}#edd_product_notes_field{display:block;margin:12px 0 0;height:4em;width:100%}.edd_remove_repeatable{border:none;cursor:pointer;display:inline-block;padding:0;overflow:hidden;margin:8px 0 0 0;text-indent:-9999px;width:10px;height:10px}.edd_remove_repeatable:active,.edd_remove_repeatable:focus,.edd_remove_repeatable:hover{background-position:-10px 0!important}#edd-edit-order-form .column{width:32%}.edd-edit-purchase-element[class*=columns-] ul li{padding-right:1%}#edd-edit-order-form .column:nth-child(2n+1),#edd-edit-order-form .columns-4 .column:nth-child(2n+1),#edd-edit-order-form .columns-5 .column:nth-child(3n+1){margin-right:0}#edd-edit-order-form input.large-text{width:90%}.edd-edit-purchase-element ul li.download{width:35%}.edd-edit-purchase-element ul li.item_price{width:15%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:25%}.edd-edit-purchase-element ul li.item_tax{width:15%}.edd-edit-purchase-element ul li.price{width:20%}.edd-admin-box .label{font-weight:600}.edd-admin-box-inside{border-bottom:1px solid #eee;clear:both;padding:3px 12px;margin:0;word-break:break-word}.rtl .edd-admin-box-inside{padding:5px 10px 5px 0}.edd-admin-box-inside .strong{font-weight:600}.edd-payment-fees .fee-label{color:#666;font-weight:400}.edd-admin-box .right{float:right}.rtl .edd-admin-box .right{float:left;margin-left:10px}#edd-order-details .inside,#edd-order-update .inside{margin:0;padding:0}#edd-order-update input.edd_datepicker{width:180px}#edd-order-update input[type=number].edd-payment-time-hour,#edd-order-update input[type=number].edd-payment-time-min{width:50px}#edd-order-update .edd-tax-rate{color:#9c9c9c;font-style:italic}#edd-order-resend-receipt .inside{margin-top:11px}#edd-order-resend-receipt .edd-order-resend-receipt-addresses{margin-top:10px}.edd-admin-box-inside:last-child{border-bottom:0}#edd-edit-order-form .data-payment-key{word-break:break-all}.edd-order-update-box #major-publishing-actions .button-secondary{margin-right:10px}.edd-edit-purchase-element .edd-select-chosen{width:196px}#edd-customer-details .order-data-address input,#edd-customer-details .order-data-column p.data input,#edd-edit-order-form .column input,#edd-order-address-country-wrap select,.edd-edit-purchase-element ul{clear:both;display:block}#edd-customer-details .customer-info .column{width:49%}#edd-customer-details .actions{float:right}.edd-order-data input.small-text{margin:0}.edd-order-data input.med-text{margin:0;width:100px}#edd-order-update span.label{display:inline;width:50px}.edd-order-update-box .button-primary{margin-right:0}#edd-edit-order-form .column .description{padding-right:10px}#edd-edit-order-form .column,.edd-edit-purchase-element ul li{display:inline-block;line-height:1.4;position:relative;margin:0;vertical-align:middle}.edd-edit-purchase-element .row{padding:12px}.edd-edit-purchase-element .row:not(:last-child){border-bottom:1px solid #eee}.edd-edit-purchase-element .row:nth-child(odd):not(.header){background-color:#f9f9f9}.edd-edit-purchase-element .row.header{padding:6px 12px;font-weight:600;vertical-align:top}.edd-edit-purchase-element ul{font-size:0}.edd-edit-purchase-element ul li{font-size:13px}#edd-order-data .data span{color:#666;font-weight:600}.edd-edit-purchase-element .inside{padding:12px}.edd-edit-purchase-element .edd-purchased-download-title{font-size:14px;font-weight:500}.edd-edit-purchase-element .edd-purchased-download-title .deleted{color:#777}.edd-edit-purchase-element .edd-purchased-download-actions{color:#777;line-height:1.4}.edd-edit-purchase-element .edd-purchased-download-actions .edd-purchased-download-actions-label{font-weight:500}.edd-edit-purchase-element .edd-purchased-download-actions a{color:#777;font-size:12px}.edd-edit-purchase-element .edd-purchased-download-actions a:hover{color:#444}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download{color:#a00}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download:hover{color:red}#edd-order-recalc-total{float:right}#edd_products .edd-select,.edd_repeatable_product_wrapper .edd-select,.edd_repeatable_upload_wrapper .pricing select{min-width:100%;max-width:200px}.edd_repeatable_product_wrapper td{overflow:visible}.edd-payment-details-label-mobile{display:none}@media screen and (max-width:1284px){.edd-edit-purchase-element ul li.download{padding-bottom:15px;width:100%}.edd-edit-purchase-element .edd-purchased-download-title{font-size:16px}.edd-edit-purchase-element ul li.item_price{width:22%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax{width:25%}.edd-edit-purchase-element ul li.price{width:20%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:10px}.edd-add-download-to-purchase-header,.edd-purchased-files-header{display:none}.edd-payment-details-label-mobile{display:block;font-weight:500;padding-bottom:6px}}@media screen and (max-width:1024px){.edd-edit-purchase-element ul li.item_price.item_quantity{width:40%}.edd-edit-purchase-element ul li.price{width:24%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:15px}.edd-edit-purchase-element .edd-purchased-download-actions,.edd-edit-purchase-element .edd-purchased-download-actions a{font-size:14px}}@media screen and (max-width:782px){#edd-edit-order-form .column{width:49%}.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity{padding-bottom:10px}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax,.edd-edit-purchase-element ul li.price{width:20%;padding-bottom:10px}.edd-payment-details-label-mobile{font-size:14px;font-weight:500}.edd-payment-details-download-amount,.edd-price-currency{font-size:16px}.order-data-column input[type=email]{padding:6px 10px}}@media screen and (max-width:600px){.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity,.edd-edit-purchase-element ul li.item_tax{width:100%;padding-bottom:20px}.edd-edit-purchase-element .edd-add-download-to-purchase ul li.item_tax,.edd-edit-purchase-element ul li.price{width:100%;padding-bottom:0}.edd-edit-purchase-element .edd-add-download-to-purchase-actions{padding-top:15px}#edd-edit-order-form .column{width:100%}}#edd_product_stats .label{display:inline-block}#edd_product_stats hr{border-style:solid;border-width:1px;border-color:#ccc #fff #fff #ccc}#edd_product_stats .product-earnings-stats:before,#edd_product_stats .product-sales-stats:before{color:#82878c;font:normal 20px/1 dashicons;display:inline-block;padding:0 2px 0 0;position:relative;top:0;left:-1px;speak:none;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#edd_product_stats .product-sales-stats:before{content:'\f174'}#edd_product_stats .product-earnings-stats:before{content:'\f239'}.edd_dashboard_widget table thead td{border-bottom:1px solid #ececec;color:#777}.edd_dashboard_widget .table_left{float:left;width:45%}.edd_dashboard_widget .table_right{float:right;width:45%}.edd_dashboard_widget .inside{font-size:12px}.edd_dashboard_widget td{padding:3px 0}.edd_dashboard_widget .b,.edd_dashboard_widget .t{line-height:1.5;vertical-align:middle}.edd_dashboard_widget .b{font-size:14px;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;padding-right:6px;width:auto}.edd_dashboard_widget .t{font-size:12px;padding-right:12px;color:#777;width:100%}.edd_dashboard_widget .label_heading{border-top:1px solid #ececec;color:#8f8f8f;font-family:Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;display:block;padding-top:10px;margin:0 0 8px 12px}.edd_dashboard_widget .edd_dashboard_widget_subheading{border-top:1px solid #ececec;color:#8f8f8f;font-size:14px;padding-top:10px;margin:1em 0 0 0}.edd_dashboard_widget .edd_dashboard_widget_subheading+.table{margin:8px 0 0 0}.edd_dashboard_widget .edd_price_label{background:#00769c;border-radius:3px;color:#fff;font-size:10px;padding:2px 4px;margin-right:2px}.edd_dashboard_widget table{width:100%;margin-left:0;margin-bottom:1em}td.edd_order_label{width:80%}td.edd_order_price{text-align:right}@media handheld,only screen and (max-width:1000px){.edd_dashboard_widget .edd-recent-email{display:none}}#edd-dashboard-widgets-wrap .postbox h3{cursor:default}#edd-date-range-options,#edd-graphs-date-options{float:left}#edd-date-range-options span{float:left;line-height:24px;height:24px;margin-right:6px}.edd-import-export-form{position:relative}.edd-import-export-form .edd-progress{background:#ddd;position:absolute;bottom:15px;width:95%;height:15px}.edd-import-export-form .edd-progress div{background:#ccc;height:100%;width:0}.edd-import-export-form .notice-wrap{background-color:#f4f4f4;border-style:solid;border-width:1px 0;border-color:#eae9e9;padding:12px 12px 4px;overflow:auto;margin:20px -12px -23px;position:relative;width:100%}.edd-import-export-form .notice-wrap .spinner{margin:4px 10px 8px;float:right}.admin-color-fresh .edd-import-export-form .edd-progress div{background:#0073aa}.admin-color-light .edd-import-export-form .edd-progress div{background:#888}.admin-color-blue .edd-import-export-form .edd-progress div{background:#096484}.admin-color-coffee .edd-import-export-form .edd-progress div{background:#c7a589}.admin-color-ectoplasm .edd-import-export-form .edd-progress div{background:#a3b745}.admin-color-midnight .edd-import-export-form .edd-progress div{background:#e14d43}.admin-color-sunrise .edd-import-export-form .edd-progress div{background:#dd823b}#edd-graphs-filter label{vertical-align:inherit}#edd-graphs-filter .graph-option-section{float:left;line-height:2.5em;padding-right:5px}.edd-mix-totals{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);padding:10px}.edd-mix-chart{display:inline-block;width:49%;vertical-align:top}.edd-graph-notes{color:#9c9c9c}.edd-graph-notes span{display:block}.edd-pie-graph .legend{display:none}.edd-pie-legend{overflow:auto;margin-top:10px}.edd-legend-item-wrapper{color:#333;display:inline-block;font-size:8pt;padding:2px 5px 0 5px;width:48%;height:20px}.edd-legend-color{border:1px solid #cfcfcf;display:inline-block;margin-right:5px;width:20px;height:15px}.edd-pie-legend-item{display:inline-block;vertical-align:top;width:80%}[id*=edd-recapture-].button,[id*=edd-sendwp-].button{font-size:16px;height:auto;padding:8px 14px;margin:6px 0 0}[id*=edd-recapture-].button .dashicons,[id*=edd-sendwp-].button .dashicons{line-height:29px;margin-right:8px}[id*=edd-recapture-].button .edd-loading,[id*=edd-recapture-].button .edd-loading:after,[id*=edd-sendwp-].button .edd-loading,[id*=edd-sendwp-].button .edd-loading:after{border-radius:50%;display:inline-block;width:14px;height:14px}[id*=edd-recapture-].button .edd-loading,[id*=edd-sendwp-].button .edd-loading{position:relative;top:3px;margin-left:4px;box-shadow:0 0 2px rgba(0,0,0,.2)}[id*=edd-recapture-].button .edd-loading,[id*=edd-sendwp-].button .edd-loading{-webkit-animation:edd-spinning 1.1s infinite linear;animation:edd-spinning 1.1s infinite linear;border-top:2px solid rgba(255,255,255,.5);border-right:2px solid rgba(255,255,255,.5);border-bottom:2px solid rgba(255,255,255,.5);border-left:2px solid #fff;font-size:14px;-ms-transform:translateZ(0);transform:translateZ(0)}#edd-recapture-disconnect.button .edd-loading.dark,#edd-sendwp-disconnect.button .edd-loading.dark{border-top-color:rgba(0,0,0,.2);border-right-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);border-left-color:#666;box-shadow:none}.recapture-notice{position:relative}@-webkit-keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}#edd_tax_rates{margin:1em 0 0}#edd_tax_rates .edd_tax_country *,#edd_tax_rates .edd_tax_state *{max-width:100%}#edd_tax_rates .edd_tax_country,#edd_tax_rates .edd_tax_state{width:180px}#edd_tax_rates .edd_tax_rate{width:80px}#edd_tax_rates th{padding:15px 10px}.wrap-licenses .form-table,.wrap-licenses caption,.wrap-licenses tbody,.wrap-licenses td,.wrap-licenses tfoot,.wrap-licenses th,.wrap-licenses thead,.wrap-licenses tr{display:block}.wrap-licenses .form-table tr{float:left;margin:0 15px 15px 0;background:#fff;border:1px solid #ccc;width:30.5%;max-width:350px;padding:14px;min-height:220px;position:relative;box-sizing:border-box}.wrap-licenses .form-table th{background:#f9f9f9;padding:14px;border-bottom:1px solid #ccc;margin:-14px -14px 20px;width:100%}.wrap-licenses .form-table td{padding:0}.wrap-licenses td input.regular-text{margin:0 0 8px;width:100%}.wrap-licenses .edd-license-data[class*=edd-license-]{position:absolute;background:#fafafa;padding:14px;border-top:1px solid #eee;margin:20px -14px -14px;min-height:67px;width:100%;bottom:14px;box-sizing:border-box}.wrap-licenses .edd-license-data[class*=edd-license-] a{color:#444}.wrap-licenses .edd-license-data[class*=edd-license-] a:hover{text-decoration:none}.wrap-licenses .edd-license-data.license-expires-soon-notice{background-color:#00a0d2;color:#fff;border-color:#00a0d2}.wrap-licenses .edd-license-data.edd-license-expired{background-color:#e24e4e;color:#fff;border-color:#e24e4e}.wrap-licenses .edd-license-data.edd-license-error,.wrap-licenses .edd-license-data.edd-license-invalid,.wrap-licenses .edd-license-data.edd-license-item_name_mismatch,.wrap-licenses .edd-license-data.edd-license-missing,.wrap-licenses .edd-license-data.edd-license-site_inactive{background-color:#ffebcd;border-color:#ffebcd}.wrap-licenses .edd-license-data p{font-size:13px;margin-top:0}.wrap-licenses .edd-license-data.edd-license-expired a,.wrap-licenses .edd-license-data.license-expires-soon-notice a{color:#fff}.wrap-licenses .edd-license-data.edd-license-expired a:hover,.wrap-licenses .edd-license-data.license-expires-soon-notice a:hover{text-decoration:none}.wrap-licenses p.submit{clear:both}#system-info-textarea{background:0 0;font-family:Menlo,Monaco,monospace;display:block;overflow:auto;white-space:pre;width:800px;height:400px}#TB_window #edd-add-download:active,#TB_window #edd-add-download:focus,#TB_window #edd-add-download:hover{color:#fff}.edd-graph .y1Axis{color:#edc240!important}.edd-graph .y2Axis{color:#afd8f8!important}.download_page_edd-tools .apikeys .column-user{width:192px}.edd-select-chosen{width:100%;max-width:300px}.chosen-container-multi .chosen-choices{background-image:none;border-color:#dfdfdf;-webkit-border-radius:3px;border-radius:3px}.chosen-container-multi .chosen-choices input{border-color:#dfdfdf;height:27px!important;margin:2px}.chosen-container .chosen-drop{border-color:#aaa;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.1)}.chosen-container .search-field{float:none!important}.chosen-container .search-field input{width:90%!important}.chosen-container-active .chosen-choices{border-color:#aaa;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.1)}.download_page_edd-tools .tablenav .actions{overflow:visible}.edd_user_search_wrap{position:relative;overflow:visible}.edd_user_search_results{position:absolute;left:0;top:27px}.edd_user_search_results a.edd-ajax-user-cancel{position:absolute;right:6px;top:2px}.edd_user_search_results ul{background:#f0f0f0;border:1px solid #dfdfdf;overflow-y:scroll;padding:10px 10px 4px;margin:0;max-height:200px;width:300px}.wp-list-table .type-download .row-actions{color:#999}@media screen and (max-width:1100px){.edd-mix-chart{display:block;width:100%}.wrap-licenses .form-table tr{width:46%;max-width:none;min-height:230px}}@media screen and (max-width:782px){.post-type-download .nav-tab-wrapper a{font-size:70%;padding:2px 4px}.download_page_edd-tools .apikeys .column-user{width:80px}.license-expiration-date-notice,.license-lifetime-notice,.license-null{padding-left:0}[class^=license-] input[type=text]{margin-bottom:3px}}@media screen and (max-width:600px){.wrap-licenses .form-table tr{width:100%;min-height:230px}#edd-edit-order-form input.large-text{width:100%}}#edd-item-wrapper{background:#f5f5f5;border:1px solid #e5e5e5;webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,.04);max-width:830px}#edd-item-wrapper:after{content:"";display:block;clear:both;visibility:hidden;font-size:0;height:0}#edd-item-tab-wrapper{float:left;width:18%;z-index:1}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{display:block;background-color:#eaeaea;color:#444;font-size:12px;border-bottom:1px solid #e5e5e5;margin-bottom:0;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word}#edd-item-tab-wrapper-list li a{display:block;padding:8px 10px 8px 6px}#edd-item-tab-wrapper-list li.active{display:block;background-color:#fff;padding:8px 10px 8px 6px}#edd-item-tab-wrapper-list .inactive a,#edd-item-tab-wrapper-list .inactive a:visited{background-color:#f5f5f5;color:#444;text-decoration:none}#edd-item-tab-wrapper-list .inactive a:hover{background-color:#fff}#edd-item-tab-wrapper-list .dashicons{color:#444;font-size:16px;min-width:24px;height:auto}#edd-item-card-wrapper .left{float:left}#edd-item-card-wrapper .right{float:right}#edd-item-card-wrapper input{font-weight:400}#edd-item-card-wrapper{background-color:#fff;border:1px solid #e5e5e5;display:inline-block;margin-left:-1px;min-height:200px;width:700px;z-index:2}.edd-item-has-tabs #edd-item-card-wrapper{border-width:0 0 0 1px;width:82%}#edd-item-card-wrapper .customer-section{border-bottom:1px solid #eee;margin-bottom:10px;overflow:auto}#edd-item-card-wrapper .customer-section table{margin-bottom:20px}#edd-item-card-wrapper>div{padding:0 20px}#edd-item-card-wrapper>div:first-child{padding-top:20px}#edd-item-card-wrapper>div:last-child{border:none;padding-bottom:20px}#edd-item-card-wrapper .avatar-wrap{padding-right:10px;text-align:center}#edd-item-card-wrapper .customer-id{font-size:24px;font-weight:600}#edd-item-card-wrapper .customer-main-wrapper input{width:200px}#edd-item-card-wrapper .customer-address-wrapper{margin-right:25px;max-width:33%;width:202px}#edd-item-card-wrapper .customer-address-wrapper select{width:200px}#edd-item-card-wrapper .customer-info{margin-top:5px;margin-bottom:10px;min-height:185px}#edd-item-card-wrapper .info-wrapper{min-height:125px;overflow:visible}#edd-item-card-wrapper a.delete{color:red;margin-right:5px;text-decoration:none}.customer-info .customer-name{font-size:24px;font-weight:600}.customer-edit-link a,.disconnect-user a{font-size:12px;font-weight:400;text-decoration:none}#customer-edit-actions{line-height:28px;margin-bottom:20px;text-align:center}#customer-edit-actions .button-secondary{margin-right:10px}#edd-item-card-wrapper .row-title{width:30%}#edd-item-card-wrapper .info-item{display:block;line-height:16px;padding-bottom:5px}#edd-item-card-wrapper .edit-item{display:none}#edd-item-card-wrapper .edd_user_search_results{left:1px;top:16px}#edd-item-card-wrapper .edd_user_search_results ul{width:200px}#edd-item-stats-wrapper{margin:0 auto;min-height:30px;text-align:center}#edd-item-stats-wrapper li{font-size:14px;float:left;line-height:22px;width:50%}#edd-item-stats-wrapper a{text-decoration:none}#edd-item-stats-wrapper .dashicons{color:#888}#edd-item-tables-wrapper table{text-align:center;width:100%}#edd-item-tables-wrapper th{text-align:center}#edd-item-tables-wrapper .downloads tr>td:first-child,#edd-item-tables-wrapper .downloads tr>th:first-child,#edd-item-tables-wrapper .emails tr>td:first-child,#edd-item-tables-wrapper .emails tr>th:first-child{text-align:left}#edd-item-tables-wrapper .downloads tr>td:only-child{text-align:center}#edd-item-tables-wrapper .emails .add-customer-email-row td{background-color:#f9f9f9;border-top:1px solid #e5e5e5}#edd-item-tables-wrapper .emails .primary-email-icon{font-size:13px;vertical-align:middle;line-height:1.5em}#edd-item-tables-wrapper .emails input{vertical-align:middle;margin:6px 0}#edd-item-tables-wrapper .emails .spinner{float:none}#edd-item-notes-wrapper{min-height:50px}.edd-item-notes-header img,.edd-item-notes-header span{font-weight:600;line-height:30px;vertical-align:middle}.customer-note-input{margin-bottom:5px;width:100%}#edd-customer-notes div:nth-of-type(even){background-color:#fcfcfc}.customer-note-wrapper{border-bottom:1px solid #f9f9f9;min-height:38px;padding:7px 0 7px 7px}.customer-note-wrapper span{display:block}.note-content-wrap{padding-top:7px}.delete-customer{text-align:center}#edd-item-card-wrapper .notice-container{padding-left:20px;padding-right:20px;margin-left:-20px;margin-right:-20px}#edd-item-card-wrapper .add-customer-email-wrapper>#add-customer-email{vertical-align:middle}@media screen and (max-width:810px) and (min-width:656px){.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper .widefat td,.widefat th{padding:4px 6px;max-width:100px!important;display:table-cell}}@media screen and (max-width:781px){#edd-item-card-wrapper,#edd-item-tab-wrapper{margin:0;width:100%}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{float:left;display:inline;font-size:14px;box-sizing:border-box;border-width:0 1px 1px 0;border-style:solid;border-color:#e5e5e5;width:33.33333%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 0 1px 0}#edd-item-tab-wrapper-list .dashicons{font-size:18px}.edd-item-has-tabs #edd-item-card-wrapper{border-top:1px solid #e5e5e5;border-left:0;margin-top:-1px;width:100%}}@media screen and (max-width:656px){#edd-item-card-wrapper .customer-info{min-height:220px}.edd-item-info.customer-info{position:relative}#edd-item-card-wrapper .customer-address-wrapper{float:none;position:absolute;top:84px;left:110px;max-width:200px}#edd-item-card-wrapper .customer-main-wrapper{float:none;position:absolute;left:110px}.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper #edd-item-stats-wrapper{padding-left:0;padding-right:0}#edd-item-card-wrapper .customer-section{margin-bottom:0}#edd-item-card-wrapper .widefat td,#edd-item-card-wrapper .widefat th{padding:4px 6px;max-width:100px!important;display:table-cell;overflow:hidden}#edd-item-card-wrapper .customer-id{font-size:16px}}@media screen and (max-width:480px){#edd-item-tab-wrapper-list li{width:50%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 1px 1px 0}#edd-item-tab-wrapper-list li:nth-child(even){border-width:0 0 1px 0}.edd-repeatable-row-actions,.edd-repeatable-row-title{text-align:left;width:100%}.edd-repeatable-row-title{padding-bottom:0}.edd-bundled-product-item-reorder,.edd-bundled-product-row .edd-bundled-product-item,.edd-bundled-product-row .edd-bundled-product-price-assignment,.edd-file-assignment,.edd-file-name,.edd-file-url,.edd-option-name,.edd-option-price,.edd_repeatable_default{float:none;text-align:left;width:100%!important;margin:10px 0}.edd-bundled-product-row .edd-bundled-product-actions{float:none}.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder{padding:0}#edd-payment-filters span{display:block;margin:2px 0}#edd-payment-filters a,.download_page_edd-reports .button{text-align:center}#edd-payment-date-filters span{display:block}#edd-payment-date-filters span>input{float:right}#edd-add-discount select[multiple] option,#edd-edit-discount select[multiple] option{height:20px}#edd-add-discount input[type=text],#edd-edit-discount input[type=text],#edd-payment-filters a,#edd-payment-filters input:not([type=radio]),#edd-payment-filters select,#system-info-textarea,.download_page_edd-reports .inside .button,.download_page_edd-reports .inside input[type=submit],.download_page_edd-reports .inside input[type=text],.download_page_edd-reports .inside select,.download_page_edd-settings .inside input[type=button],.download_page_edd-tools .inside input[type=submit],.download_page_edd-tools .inside input[type=text],.download_page_edd-tools .inside select{width:100%}#edd-add-discount select[multiple],#edd-edit-discount select[multiple],.download_page_edd-tools select[multiple]{height:200px!important}.download_page_edd-settings input[type=checkbox]{margin:2px 0}.post-type-download input[type=checkbox]{margin-left:2px}}.recount-stats-controls form{display:inline}.edd-recount-stats-descriptions span{display:none;line-height:24px}#edd-debug-log p.submit{margin:20px 0 0;padding:0}#edd-debug-log .edd-inline-button{margin-left:5px}.edd-settings-sidebar{padding-top:27px}.edd-settings-sidebar-content{background-color:#fff;text-align:center;border:1px solid #ddd;box-sizing:border-box;max-width:300px}.edd-settings-sidebar-content p{font-size:14px;line-height:1.5;margin-top:0}.edd-sidebar-header-section{background-color:#35495c;line-height:1;padding:26px 20px 24px;border-bottom:3px dashed #fafafa}.edd-sidebar-description-section{background-color:#fafafa;padding:16px 20px;border-bottom:1px solid #ddd}.edd-sidebar-description-section .edd-sidebar-description{margin:0}.edd-sidebar-coupon-section{font-size:14px;padding:16px 20px}.edd-sidebar-coupon-section label{display:block;line-height:1.4;margin-bottom:6px}.edd-sidebar-coupon-section label strong{color:#253b51;font-weight:700}.edd-sidebar-coupon-section input{background:#f4f7fa;font-size:22px;font-weight:600;text-align:center;padding:10px;border:2px dashed #2794da;border-radius:4px;margin-bottom:16px;box-shadow:none;width:100%}.edd-sidebar-coupon-section input:focus{border:2px dashed #2794da;box-shadow:none}.edd-settings-sidebar-content .edd-coupon-note{color:#6c7883;font-size:13px;font-style:italic;margin:0}.edd-settings-sidebar-content .edd-coupon-note a{color:#253b51}.edd-settings-sidebar-content .edd-coupon-note a:hover{text-decoration:none}.edd-sidebar-footer-section{background-color:#fafafa;padding:16px 20px;border-top:1px solid #ddd}.edd-sidebar-footer-section .edd-cta-button{display:block;background-color:#2794da;color:#fff;text-decoration:none;font-size:20px;font-weight:700;text-transform:uppercase;padding:17px 10px;border:none;border-radius:4px;width:100%;box-sizing:border-box;box-shadow:none;transition:background-color .2s}.edd-sidebar-footer-section .edd-cta-button:hover{background-color:#2386c5}@media all and (min-width:1080px){.edd-has-sidebar .edd-settings-content{float:left;width:67%}.edd-has-sidebar .edd-settings-sidebar{float:right;width:31%}}@media all and (min-width:1240px){.edd-has-sidebar .edd-settings-content{width:74%}.edd-has-sidebar .edd-settings-sidebar{width:23%}}.taxes-tab .edd-has-sidebar .edd-settings-content,.taxes-tab .edd-has-sidebar .edd-settings-sidebar{float:none;width:100%}.bfcm-promo-img-container{background-color:#35495c;width:100%;height:160px}.bfcm-code{color:#2794da;font-weight:700}.sale-ends{position:absolute;bottom:9px;right:14px;display:inline-block;color:#6c7883;font-size:12px;text-align:right;font-style:italic;width:150px}.edd-admin-notice-top-of-page{font-size:15px;line-height:1.4;color:#fff;margin-left:-20px;padding:12px 32px 12px 20px;background:#2d6ca2;display:none}@media screen and (min-width:783px){.edd-admin-notice-top-of-page{padding:10px 46px 10px 22px}}@media screen and (min-width:961px){.edd-admin-notice-top-of-page{text-align:center}}.edd-admin-notice-top-of-page a{color:#fff}.edd-admin-notice-top-of-page a:hover{text-decoration:none}.edd-admin-notice-top-of-page .button-link{position:absolute;top:48px;right:-1px;font-size:20px;color:#fff;font-weight:700;text-decoration:none;margin-left:5px;padding:6px 10px}.edd-admin-notice-top-of-page .button-link:active,.edd-admin-notice-top-of-page .button-link:focus,.edd-admin-notice-top-of-page .button-link:hover{color:#fff;text-decoration:none}@media screen and (min-width:601px){.edd-admin-notice-top-of-page .button-link{top:1px}}@media screen and (min-width:783px){.edd-admin-notice-top-of-page .button-link{right:9px}}.edd-paypal-account-status ul{margin-left:25px}.edd-paypal-account-status>li{margin-bottom:1em}.edd-paypal-account-status ul:not(.edd-paypal-webhook-events){list-style:disc;list-style-position:inside}.edd-paypal-account-status ul:not(.edd-paypal-webhook-events) li{margin:.25em 0}.edd-paypal-account-status .dashicons-yes{color:#008a20}.edd-paypal-account-status .dashicons-no{color:#d63638}
|
1 |
+
.edd-hidden{display:none}.edd-clearfix:after{content:".";display:block;height:0;text-indent:-9999px;visibility:hidden}.edd-notice .notice-dismiss,.edd-wrap a{text-decoration:none}a.edd-delete{color:#a00}a.edd-delete:hover{color:red}body.post-type-download #contextual-help-link-wrap,body.post-type-download #screen-options-link-wrap{top:5px!important}body.post-type-download #screen-meta{margin:0 0 -1px -20px}#edd-header{border-top:5px solid #0c5d95;border-bottom:1px solid #c3c4c7;padding:22px 0;margin-left:-20px;background:#fff}#edd-header-wrapper{display:flex;justify-content:space-between;padding:0 20px}#edd-header img{display:block;margin:0;max-width:300px}.no-js #edd-header-actions{display:none}#edd-header .edd-round{position:relative;background-color:#f3f4f5;border-radius:50%;width:40px;height:40px;display:flex;align-items:center;justify-content:center;margin-left:10px;cursor:pointer;transition:background-color .2s ease}button.edd-round{border:none}#edd-header button.edd-round:hover{background-color:#e5e5e5}button.edd-round:active,button.edd-round:focus{outline:2px solid #0c5d95}#edd-header .edd-number{position:absolute;background-color:#df2a4a;width:16px;height:16px;font-weight:600;font-size:10px;color:#fff;top:-8px;left:50%;transform:translateX(-50%);margin:0;-webkit-animation:bounce 2s 5;animation:bounce 2s 5}#edd-header .edd-number.edd-hidden{display:none!important}#edd-header .edd-round svg{width:20px;height:20px}.edd-settings-sub-nav{margin:0 0 10px 0;width:100%;border-bottom:1px solid #ccc;box-shadow:0 1px 1px rgba(0,0,0,.04)}.edd-settings-sub-nav a{padding:13px;display:block}.edd-settings-sub-nav a.current{border-bottom:4px solid #000;padding-bottom:9px}.admin-color-fresh .edd-settings-sub-nav a.current{border-bottom-color:#00a0d2}.admin-color-blue .edd-settings-sub-nav a.current{border-bottom-color:#096484}.admin-color-coffee .edd-settings-sub-nav a.current{border-bottom-color:#c7a589}.admin-color-ectoplasm .edd-settings-sub-nav a.current{border-bottom-color:#a3b745}.admin-color-midnight .edd-settings-sub-nav a.current{border-bottom-color:#e14d43}.admin-color-ocean .edd-settings-sub-nav a.current{border-bottom-color:#627c83}.admin-color-sunrise .edd-settings-sub-nav a.current{border-bottom-color:#be3631}.admin-color-light .edd-settings-sub-nav a.current{border-bottom-color:#888}.admin-color-evergreen .edd-settings-sub-nav a.current{border-bottom-color:#36533f}.admin-color-mint .edd-settings-sub-nav a.current{border-bottom-color:#4f6d59}.admin-color-modern .edd-settings-sub-nav a.current{border-bottom-color:#3858e9}.download_page_edd-settings .form-table label{color:#666;font-size:14px;font-style:italic;margin:4px 0 0}.download_page_edd-settings .form-table input.small-text~label,.download_page_edd-settings .form-table input[type=checkbox]+label{display:inline}.download_page_edd-settings .form-table tr>th>h3,.download_page_edd-settings .form-table tr>th>strong{font-size:1.2em;font-weight:600;margin:0 auto}.edd-help-tip{cursor:help}.edd-ui-tooltip{position:absolute;background:#333!important;border-width:1px!important;border-radius:3px!important;box-shadow:1px 1px 2px 1px rgba(214,214,214,.5)!important;color:#dedede!important;max-width:300px!important;padding:7px!important;text-rendering:optimizeLegibility;text-shadow:none!important;z-index:9999!important}.download_page_edd-settings .edd-settings-payment-icon-wrapper{margin-right:10px;line-height:16px;height:16px;display:table}#edd-add-ons h2.nav-tab-wrapper{position:relative}.edd-tab-span{top:-6px;right:0;position:absolute}.edd-add-ons-footer{padding-top:10px}#edd-add-ons h2{margin:0 0 15px}.edd-add-ons-view-wrapper{height:50px}#edd-add-ons h2 .button-primary{position:absolute}#edd-add-ons .edd-extension{background:#fff;border:1px solid #ccc;float:left;padding:14px;position:relative;margin:0 15px 15px 0;width:320px;height:315px}#edd-add-ons .edd-extension h3{font-size:13px;margin:0 0 8px}#edd-add-ons .edd-extension .button-secondary{position:absolute;bottom:14px;left:14px}#edd-add-ons .edd-browse-all{clear:both;width:100%}#edd-add-ons .edd-extension .third-party{display:none}#edd-add-ons .edd-starter-package{background-color:#85c0e5;border-color:#62a9d7;color:#fff}#edd-add-ons .edd-starter-package h3{color:#fff}#edd-add-ons .edd-extension .wp-post-image{width:100%;height:auto;vertical-align:bottom}#edd-products{height:100px;min-width:200px}#edd-add-discount input[type=text],#edd-edit-discount input[type=text]{width:300px}#edd-add-discount input.edd-price-field,#edd-edit-discount input.edd-price-field{padding:3px 5px;width:75px}#edd-payment-filters{background:#f5f5f5;clear:both;background-image:-webkit-gradient(linear,left bottom,left top,from(#f5f5f5),to(#fafafa));background-image:-webkit-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-moz-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-o-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:linear-gradient(to top,#f5f5f5,#fafafa);border-color:#dfdfdf;border-width:1px;border-style:solid;border-radius:3px;font-size:13px;line-height:2.1em;overflow:auto;padding:12px;margin:8px 0}#edd-payments-filter ul.subsubsub{margin-bottom:8px}#edd-payment-filters p{color:#777}#edd-payment-date-filters input{vertical-align:middle}tr.status-refunded td{background:#cecece;border-top-color:#ccc}.wp-list-table.downloads th#ID{width:80px}.wp-list-table.downloads th#details{width:130px}.wp-list-table.downloads th#date{width:140px}.wp-list-table.downloads th#user{width:130px}.edd-mobile-link{line-height:32px;vertical-align:middle}.edd-mobile-link img{max-width:80%;height:auto;float:left}@media handheld,only screen and (max-width:640px){.wp-list-table.downloads th{width:auto!important}}.download_page_edd-payment-history .ui-dialog .ui-dialog-titlebar-close span{margin-left:-8px;margin-top:-8px}#edd-download-link-textarea{width:100%}.edd_files_name_label{width:225px;float:left}.edd_files_url_label{width:220px;float:left}#postbox-container-1 .edd_files_name_label{width:80px}#postbox-container-1 .edd_files_url_label{width:80px}.edd-add-repeatable-row{margin:10px 0}.edd-add-repeatable-row .submit{padding:0!important}.edd_repeatable_upload_wrapper:not(:first-child),.edd_variable_prices_wrapper:not(:first-child){margin-top:12px}.edd-repeatable-row-actions{color:#777;font-size:12px}.edd-repeatable-row-actions a{text-decoration:none;width:auto;cursor:pointer;vertical-align:middle}.edd-repeatable-row-actions .toggle-custom-price-option-section{color:#777}.edd-repeatable-row-actions .toggle-custom-price-option-section:hover{color:#444}.edd-bundle-products-header,.edd-repeatable-row-header{clear:both;background:#f1f1f1;border:1px solid #e5e5e5}.edd-repeatable-row-header{cursor:move}.edd-bundled-product-row:after,.edd-bundled-product-row:before,.edd-repeatable-row-header:after,.edd-repeatable-row-header:before{content:'';display:table}.edd-bundled-product-row:after,.edd-repeatable-row-header:after{clear:both}.edd-repeatable-row-title{float:left;font-weight:600}.edd-bundled-product-item-reorder .edd-product-file-reorder{color:#e5e5e5;font-family:dashicons;content:"\f545";font-size:18px;font-weight:300;margin-left:4px;vertical-align:top;transition:.2s color}.edd-bundled-product-item-reorder .edd-product-file-reorder:hover{color:#bbb}.edd-repeatable-row-actions,.edd-repeatable-row-title{padding:8px;box-sizing:border-box}.edd-repeatable-row-actions{float:right;text-align:right;padding:8px}.edd-bundled-product-row .edd-remove-row,.edd-repeatable-row-actions .edd-remove-row{font-size:12px;width:auto;cursor:pointer}.edd-bundled-product-row,.edd-repeatable-row-standard-fields{background:#f9f9f9;padding:8px;border-width:0 1px 1px;border-style:solid;border-color:#e5e5e5}.edd-repeatable-row-setting-label{display:block;margin-bottom:4px}.edd-repeatable-row-setting-label .edd-help-tip{display:inline-block;margin-left:4px}.edd-bundled-product-row .edd-bundled-product-actions,.edd-bundled-product-row .edd-bundled-product-item,.edd-bundled-product-row .edd-bundled-product-item-reorder,.edd-bundled-product-row .edd-bundled-product-price-assignment,.edd-file-assignment,.edd-file-name,.edd-file-url,.edd-option-name,.edd-option-price,.edd_repeatable_default{display:inline-block;vertical-align:top}.edd-option-name{width:38%;margin-right:5%}.edd-option-price{min-width:100px}.edd_repeatable_default{text-align:center;min-width:80px}.edd-file-name{width:18%;margin-right:3%}.edd-file-url{width:65%}.edd-repeatable-row-standard-fields.has-variable-pricing .edd-file-url{width:38%;margin-right:5%}.edd-file-assignment{width:27%}.edd-file-assignment .edd-repeatable-row-setting-label{margin-bottom:0}.edd-custom-price-option-sections-wrap{display:none;border-width:0 1px 1px;border-style:solid;border-color:#e5e5e5;box-sizing:border-box;width:100%}.edd-custom-price-option-section{display:block;padding:10px 8px;border-bottom:1px solid rgba(222,222,222,.3)}.edd-custom-price-option-section:last-child{border-bottom:none}label.edd_prices_shipping{display:none!important}.edd-custom-price-option-section-title{display:block;font-size:14px;font-weight:600;padding:0 0 10px}.edd-custom-price-option-section>:not(.edd-custom-price-option-section-title){display:inline-block;padding-right:20px;vertical-align:top;margin-bottom:4px}.edd-custom-price-option-section>:not(.edd-custom-price-option-section-title) label{display:block;margin-bottom:2px}.edd-bundle-products-header{font-weight:600;padding:8px}.edd-bundled-product-row .edd-bundled-product-item-reorder{min-width:30px;margin-right:8px}.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder{font-size:20px;font-weight:300;padding:16px 4px 0;cursor:move}.edd-bundled-product-row .edd-bundled-product-item{width:60%;margin-right:3%}.edd-bundled-product-row.has-variable-pricing .edd-bundled-product-item{width:47%}.edd-bundled-product-row .edd-bundled-product-price-assignment{width:23%;margin-right:3%}.edd-bundled-product-row .edd-bundled-product-actions{float:right}.edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container{position:relative}.edd_upload_file{background:#fff;display:block;padding:2px 8px 2px;position:absolute;top:3px;right:7px}.edd_upload_field{padding-right:8em!important}textarea#edd-payment-note{width:100%;height:4em;margin:0}#edd-purchased-files .row .edd-purchased-files-list-wrapper .download{line-height:1.4}#edd-purchased-files .edd-purchased-files-list-wrapper .edd-purchased-option{color:#666}input[class*=edd-price-field]{padding:3px 5px;width:75px}#edd-order-download-quantity[type=number].small-text,#edd-order-download-tax[type=text].small-text,[class*=item_] [class*=edd-payment-details-download-][type=number].small-text{height:25px}#edd-order-download-quantity[type=number].small-text,.item_price .edd-payment-details-download-quantity[type=number].small-text{width:55px}#edd-order-download-tax[type=text].small-text,.item_tax .edd-payment-details-download-item-tax[type=number].small-text{width:75px}.edd_repeatable_product_wrapper .edd-select,.edd_repeatable_upload_wrapper .pricing select{min-width:100%}#edd_product_notes_field{display:block;margin:12px 0 0;height:4em;width:100%}.edd_remove_repeatable{border:none;cursor:pointer;display:inline-block;padding:0;overflow:hidden;margin:8px 0 0 0;text-indent:-9999px;width:10px;height:10px}.edd_remove_repeatable:active,.edd_remove_repeatable:focus,.edd_remove_repeatable:hover{background-position:-10px 0!important}#edd-edit-order-form .column{width:32%}.edd-edit-purchase-element[class*=columns-] ul li{padding-right:1%}#edd-edit-order-form .column:nth-child(2n+1),#edd-edit-order-form .columns-4 .column:nth-child(2n+1),#edd-edit-order-form .columns-5 .column:nth-child(3n+1){margin-right:0}#edd-edit-order-form input.large-text{width:90%}.edd-edit-purchase-element ul li.download{width:35%}.edd-edit-purchase-element ul li.item_price{width:15%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:25%}.edd-edit-purchase-element ul li.item_tax{width:15%}.edd-edit-purchase-element ul li.price{width:20%}.edd-admin-box .label{font-weight:600}.edd-admin-box-inside{border-bottom:1px solid #eee;clear:both;padding:3px 12px;margin:0;word-break:break-word}.rtl .edd-admin-box-inside{padding:5px 10px 5px 0}.edd-admin-box-inside .strong{font-weight:600}.edd-payment-fees .fee-label{color:#666;font-weight:400}.edd-admin-box .right{float:right}.rtl .edd-admin-box .right{float:left;margin-left:10px}#edd-order-details .inside,#edd-order-update .inside{margin:0;padding:0}#edd-order-update input.edd_datepicker{width:180px}#edd-order-update input[type=number].edd-payment-time-hour,#edd-order-update input[type=number].edd-payment-time-min{width:50px}#edd-order-update .edd-tax-rate{color:#9c9c9c;font-style:italic}#edd-order-resend-receipt .inside{margin-top:11px}#edd-order-resend-receipt .edd-order-resend-receipt-addresses{margin-top:10px}.edd-admin-box-inside:last-child{border-bottom:0}#edd-edit-order-form .data-payment-key{word-break:break-all}.edd-order-update-box #major-publishing-actions .button-secondary{margin-right:10px}.edd-edit-purchase-element .edd-select-chosen{width:196px}#edd-customer-details .order-data-address input,#edd-customer-details .order-data-column p.data input,#edd-edit-order-form .column input,#edd-order-address-country-wrap select,.edd-edit-purchase-element ul{clear:both;display:block}#edd-customer-details .customer-info .column{width:49%}#edd-customer-details .actions{float:right}.edd-order-data input.small-text{margin:0}.edd-order-data input.med-text{margin:0;width:100px}#edd-order-update span.label{display:inline;width:50px}.edd-order-update-box .button-primary{margin-right:0}#edd-edit-order-form .column .description{padding-right:10px}#edd-edit-order-form .column,.edd-edit-purchase-element ul li{display:inline-block;line-height:1.4;position:relative;margin:0;vertical-align:middle}.edd-edit-purchase-element .row{padding:12px}.edd-edit-purchase-element .row:not(:last-child){border-bottom:1px solid #eee}.edd-edit-purchase-element .row:nth-child(odd):not(.header){background-color:#f9f9f9}.edd-edit-purchase-element .row.header{padding:6px 12px;font-weight:600;vertical-align:top}.edd-edit-purchase-element ul{font-size:0}.edd-edit-purchase-element ul li{font-size:13px}#edd-order-data .data span{color:#666;font-weight:600}.edd-edit-purchase-element .inside{padding:12px}.edd-edit-purchase-element .edd-purchased-download-title{font-size:14px;font-weight:500}.edd-edit-purchase-element .edd-purchased-download-title .deleted{color:#777}.edd-edit-purchase-element .edd-purchased-download-actions{color:#777;line-height:1.4}.edd-edit-purchase-element .edd-purchased-download-actions .edd-purchased-download-actions-label{font-weight:500}.edd-edit-purchase-element .edd-purchased-download-actions a{color:#777;font-size:12px}.edd-edit-purchase-element .edd-purchased-download-actions a:hover{color:#444}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download{color:#a00}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download:hover{color:red}#edd-order-recalc-total{float:right}#edd_products .edd-select,.edd_repeatable_product_wrapper .edd-select,.edd_repeatable_upload_wrapper .pricing select{min-width:100%;max-width:200px}.edd_repeatable_product_wrapper td{overflow:visible}.edd-payment-details-label-mobile{display:none}@media screen and (max-width:1284px){.edd-edit-purchase-element ul li.download{padding-bottom:15px;width:100%}.edd-edit-purchase-element .edd-purchased-download-title{font-size:16px}.edd-edit-purchase-element ul li.item_price{width:22%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax{width:25%}.edd-edit-purchase-element ul li.price{width:20%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:10px}.edd-add-download-to-purchase-header,.edd-purchased-files-header{display:none}.edd-payment-details-label-mobile{display:block;font-weight:500;padding-bottom:6px}}@media screen and (max-width:1024px){.edd-edit-purchase-element ul li.item_price.item_quantity{width:40%}.edd-edit-purchase-element ul li.price{width:24%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:15px}.edd-edit-purchase-element .edd-purchased-download-actions,.edd-edit-purchase-element .edd-purchased-download-actions a{font-size:14px}}@media screen and (max-width:782px){#edd-edit-order-form .column{width:49%}.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity{padding-bottom:10px}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax,.edd-edit-purchase-element ul li.price{width:20%;padding-bottom:10px}.edd-payment-details-label-mobile{font-size:14px;font-weight:500}.edd-payment-details-download-amount,.edd-price-currency{font-size:16px}.order-data-column input[type=email]{padding:6px 10px}}@media screen and (max-width:600px){.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity,.edd-edit-purchase-element ul li.item_tax{width:100%;padding-bottom:20px}.edd-edit-purchase-element .edd-add-download-to-purchase ul li.item_tax,.edd-edit-purchase-element ul li.price{width:100%;padding-bottom:0}.edd-edit-purchase-element .edd-add-download-to-purchase-actions{padding-top:15px}#edd-edit-order-form .column{width:100%}}#edd_product_stats .label{display:inline-block}#edd_product_stats hr{border-style:solid;border-width:1px;border-color:#ccc #fff #fff #ccc}#edd_product_stats .product-earnings-stats:before,#edd_product_stats .product-sales-stats:before{color:#82878c;font:normal 20px/1 dashicons;display:inline-block;padding:0 2px 0 0;position:relative;top:0;left:-1px;speak:none;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#edd_product_stats .product-sales-stats:before{content:'\f174'}#edd_product_stats .product-earnings-stats:before{content:'\f239'}.edd_dashboard_widget table thead td{border-bottom:1px solid #ececec;color:#777}.edd_dashboard_widget .table_left{float:left;width:45%}.edd_dashboard_widget .table_right{float:right;width:45%}.edd_dashboard_widget .inside{font-size:12px}.edd_dashboard_widget td{padding:3px 0}.edd_dashboard_widget .b,.edd_dashboard_widget .t{line-height:1.5;vertical-align:middle}.edd_dashboard_widget .b{font-size:14px;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;padding-right:6px;width:auto}.edd_dashboard_widget .t{font-size:12px;padding-right:12px;color:#777;width:100%}.edd_dashboard_widget .label_heading{border-top:1px solid #ececec;color:#8f8f8f;font-family:Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;display:block;padding-top:10px;margin:0 0 8px 12px}.edd_dashboard_widget .edd_dashboard_widget_subheading{border-top:1px solid #ececec;color:#8f8f8f;font-size:14px;padding-top:10px;margin:1em 0 0 0}.edd_dashboard_widget .edd_dashboard_widget_subheading+.table{margin:8px 0 0 0}.edd_dashboard_widget .edd_price_label{background:#00769c;border-radius:3px;color:#fff;font-size:10px;padding:2px 4px;margin-right:2px}.edd_dashboard_widget table{width:100%;margin-left:0;margin-bottom:1em}td.edd_order_label{width:80%}td.edd_order_price{text-align:right}@media handheld,only screen and (max-width:1000px){.edd_dashboard_widget .edd-recent-email{display:none}}#edd-dashboard-widgets-wrap .postbox h3{cursor:default}#edd-date-range-options,#edd-graphs-date-options{float:left}#edd-date-range-options span{float:left;line-height:24px;height:24px;margin-right:6px}.edd-import-export-form{position:relative}.edd-import-export-form .edd-progress{background:#ddd;position:absolute;bottom:15px;width:95%;height:15px}.edd-import-export-form .edd-progress div{background:#ccc;height:100%;width:0}.edd-import-export-form .notice-wrap{background-color:#f4f4f4;border-style:solid;border-width:1px 0;border-color:#eae9e9;padding:12px 12px 4px;overflow:auto;margin:20px -12px -23px;position:relative;width:100%}.edd-import-export-form .notice-wrap .spinner{margin:4px 10px 8px;float:right}.admin-color-fresh .edd-import-export-form .edd-progress div{background:#0073aa}.admin-color-light .edd-import-export-form .edd-progress div{background:#888}.admin-color-blue .edd-import-export-form .edd-progress div{background:#096484}.admin-color-coffee .edd-import-export-form .edd-progress div{background:#c7a589}.admin-color-ectoplasm .edd-import-export-form .edd-progress div{background:#a3b745}.admin-color-midnight .edd-import-export-form .edd-progress div{background:#e14d43}.admin-color-sunrise .edd-import-export-form .edd-progress div{background:#dd823b}#edd-graphs-filter label{vertical-align:inherit}#edd-graphs-filter .graph-option-section{float:left;line-height:2.5em;padding-right:5px}.edd-mix-totals{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);padding:10px}.edd-mix-chart{display:inline-block;width:49%;vertical-align:top}.edd-graph-notes{color:#9c9c9c}.edd-graph-notes span{display:block}.edd-pie-graph .legend{display:none}.edd-pie-legend{overflow:auto;margin-top:10px}.edd-legend-item-wrapper{color:#333;display:inline-block;font-size:8pt;padding:2px 5px 0 5px;width:48%;height:20px}.edd-legend-color{border:1px solid #cfcfcf;display:inline-block;margin-right:5px;width:20px;height:15px}.edd-pie-legend-item{display:inline-block;vertical-align:top;width:80%}[id*=edd-recapture-].button{font-size:16px;height:auto;padding:8px 14px;margin:6px 0 0}[id*=edd-recapture-].button .dashicons{line-height:29px;margin-right:8px}[id*=edd-recapture-].button .edd-loading,[id*=edd-recapture-].button .edd-loading:after{border-radius:50%;display:inline-block;width:14px;height:14px}[id*=edd-recapture-].button .edd-loading{position:relative;top:3px;margin-left:4px;box-shadow:0 0 2px rgba(0,0,0,.2)}[id*=edd-recapture-].button .edd-loading{-webkit-animation:edd-spinning 1.1s infinite linear;animation:edd-spinning 1.1s infinite linear;border-top:2px solid rgba(255,255,255,.5);border-right:2px solid rgba(255,255,255,.5);border-bottom:2px solid rgba(255,255,255,.5);border-left:2px solid #fff;font-size:14px;-ms-transform:translateZ(0);transform:translateZ(0)}#edd-recapture-disconnect.button .edd-loading.dark{border-top-color:rgba(0,0,0,.2);border-right-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);border-left-color:#666;box-shadow:none}.recapture-notice{position:relative}@-webkit-keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}#edd_tax_rates{margin:1em 0 0}#edd_tax_rates .edd_tax_country *,#edd_tax_rates .edd_tax_state *{max-width:100%}#edd_tax_rates .edd_tax_country,#edd_tax_rates .edd_tax_state{width:180px}#edd_tax_rates .edd_tax_rate{width:80px}#edd_tax_rates th{padding:15px 10px}.wrap-licenses .form-table,.wrap-licenses caption,.wrap-licenses tbody,.wrap-licenses td,.wrap-licenses tfoot,.wrap-licenses th,.wrap-licenses thead,.wrap-licenses tr{display:block}.wrap-licenses .form-table tr{float:left;margin:0 15px 15px 0;background:#fff;border:1px solid #ccc;width:30.5%;max-width:350px;padding:14px;min-height:220px;position:relative;box-sizing:border-box}.wrap-licenses .form-table th{background:#f9f9f9;padding:14px;border-bottom:1px solid #ccc;margin:-14px -14px 20px;width:100%}.wrap-licenses .form-table td{padding:0}.wrap-licenses td input.regular-text{margin:0 0 8px;width:100%}.wrap-licenses .edd-license-data[class*=edd-license-]{position:absolute;background:#fafafa;padding:14px;border-top:1px solid #eee;margin:20px -14px -14px;min-height:67px;width:100%;bottom:14px;box-sizing:border-box}.wrap-licenses .edd-license-data[class*=edd-license-] a{color:#444}.wrap-licenses .edd-license-data[class*=edd-license-] a:hover{text-decoration:none}.wrap-licenses .edd-license-data.license-expires-soon-notice{background-color:#00a0d2;color:#fff;border-color:#00a0d2}.wrap-licenses .edd-license-data.edd-license-expired{background-color:#e24e4e;color:#fff;border-color:#e24e4e}.wrap-licenses .edd-license-data.edd-license-error,.wrap-licenses .edd-license-data.edd-license-invalid,.wrap-licenses .edd-license-data.edd-license-item_name_mismatch,.wrap-licenses .edd-license-data.edd-license-missing,.wrap-licenses .edd-license-data.edd-license-site_inactive{background-color:#ffebcd;border-color:#ffebcd}.wrap-licenses .edd-license-data p{font-size:13px;margin-top:0}.wrap-licenses .edd-license-data.edd-license-expired a,.wrap-licenses .edd-license-data.license-expires-soon-notice a{color:#fff}.wrap-licenses .edd-license-data.edd-license-expired a:hover,.wrap-licenses .edd-license-data.license-expires-soon-notice a:hover{text-decoration:none}.wrap-licenses p.submit{clear:both}#system-info-textarea{background:0 0;font-family:Menlo,Monaco,monospace;display:block;overflow:auto;white-space:pre;width:800px;height:400px}#TB_window #edd-add-download:active,#TB_window #edd-add-download:focus,#TB_window #edd-add-download:hover{color:#fff}.edd-graph .y1Axis{color:#edc240!important}.edd-graph .y2Axis{color:#afd8f8!important}.download_page_edd-tools .apikeys .column-user{width:192px}.edd-select-chosen{width:100%;max-width:300px}.chosen-container-multi .chosen-choices{background-image:none;border-color:#dfdfdf;-webkit-border-radius:3px;border-radius:3px}.chosen-container-multi .chosen-choices input{border-color:#dfdfdf;height:27px!important;margin:2px}.chosen-container .chosen-drop{border-color:#aaa;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.1)}.chosen-container .search-field{float:none!important}.chosen-container .search-field input{width:90%!important}.chosen-container-active .chosen-choices{border-color:#aaa;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.1)}.download_page_edd-tools .tablenav .actions{overflow:visible}.edd_user_search_wrap{position:relative;overflow:visible}.edd_user_search_results{position:absolute;left:0;top:27px}.edd_user_search_results a.edd-ajax-user-cancel{position:absolute;right:6px;top:2px}.edd_user_search_results ul{background:#f0f0f0;border:1px solid #dfdfdf;overflow-y:scroll;padding:10px 10px 4px;margin:0;max-height:200px;width:300px}.wp-list-table .type-download .row-actions{color:#999}@media screen and (max-width:1100px){.edd-mix-chart{display:block;width:100%}.wrap-licenses .form-table tr{width:46%;max-width:none;min-height:230px}}@media screen and (max-width:782px){.post-type-download .nav-tab-wrapper a{font-size:70%;padding:2px 4px}.download_page_edd-tools .apikeys .column-user{width:80px}.license-expiration-date-notice,.license-lifetime-notice,.license-null{padding-left:0}[class^=license-] input[type=text]{margin-bottom:3px}}@media screen and (max-width:600px){.wrap-licenses .form-table tr{width:100%;min-height:230px}#edd-edit-order-form input.large-text{width:100%}}#edd-item-wrapper{background:#f5f5f5;border:1px solid #e5e5e5;webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,.04);max-width:830px}#edd-item-wrapper:after{content:"";display:block;clear:both;visibility:hidden;font-size:0;height:0}#edd-item-tab-wrapper{float:left;width:18%;z-index:1}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{display:block;background-color:#eaeaea;color:#444;font-size:12px;border-bottom:1px solid #e5e5e5;margin-bottom:0;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word}#edd-item-tab-wrapper-list li a{display:block;padding:8px 10px 8px 6px}#edd-item-tab-wrapper-list li.active{display:block;background-color:#fff;padding:8px 10px 8px 6px}#edd-item-tab-wrapper-list .inactive a,#edd-item-tab-wrapper-list .inactive a:visited{background-color:#f5f5f5;color:#444;text-decoration:none}#edd-item-tab-wrapper-list .inactive a:hover{background-color:#fff}#edd-item-tab-wrapper-list .dashicons{color:#444;font-size:16px;min-width:24px;height:auto}#edd-item-card-wrapper .left{float:left}#edd-item-card-wrapper .right{float:right}#edd-item-card-wrapper input{font-weight:400}#edd-item-card-wrapper{background-color:#fff;border:1px solid #e5e5e5;display:inline-block;margin-left:-1px;min-height:200px;width:700px;z-index:2}.edd-item-has-tabs #edd-item-card-wrapper{border-width:0 0 0 1px;width:82%}#edd-item-card-wrapper .customer-section{border-bottom:1px solid #eee;margin-bottom:10px;overflow:auto}#edd-item-card-wrapper .customer-section table{margin-bottom:20px}#edd-item-card-wrapper>div{padding:0 20px}#edd-item-card-wrapper>div:first-child{padding-top:20px}#edd-item-card-wrapper>div:last-child{border:none;padding-bottom:20px}#edd-item-card-wrapper .avatar-wrap{padding-right:10px;text-align:center}#edd-item-card-wrapper .customer-id{font-size:24px;font-weight:600}#edd-item-card-wrapper .customer-main-wrapper input{width:200px}#edd-item-card-wrapper .customer-address-wrapper{margin-right:25px;max-width:33%;width:202px}#edd-item-card-wrapper .customer-address-wrapper select{width:200px}#edd-item-card-wrapper .customer-info{margin-top:5px;margin-bottom:10px;min-height:185px}#edd-item-card-wrapper .info-wrapper{min-height:125px;overflow:visible}#edd-item-card-wrapper a.delete{color:red;margin-right:5px;text-decoration:none}.customer-info .customer-name{font-size:24px;font-weight:600}.customer-edit-link a,.disconnect-user a{font-size:12px;font-weight:400;text-decoration:none}#customer-edit-actions{line-height:28px;margin-bottom:20px;text-align:center}#customer-edit-actions .button-secondary{margin-right:10px}#edd-item-card-wrapper .row-title{width:30%}#edd-item-card-wrapper .info-item{display:block;line-height:16px;padding-bottom:5px}#edd-item-card-wrapper .edit-item{display:none}#edd-item-card-wrapper .edd_user_search_results{left:1px;top:16px}#edd-item-card-wrapper .edd_user_search_results ul{width:200px}#edd-item-stats-wrapper{margin:0 auto;min-height:30px;text-align:center}#edd-item-stats-wrapper li{font-size:14px;float:left;line-height:22px;width:50%}#edd-item-stats-wrapper a{text-decoration:none}#edd-item-stats-wrapper .dashicons{color:#888}#edd-item-tables-wrapper table{text-align:center;width:100%}#edd-item-tables-wrapper th{text-align:center}#edd-item-tables-wrapper .downloads tr>td:first-child,#edd-item-tables-wrapper .downloads tr>th:first-child,#edd-item-tables-wrapper .emails tr>td:first-child,#edd-item-tables-wrapper .emails tr>th:first-child{text-align:left}#edd-item-tables-wrapper .downloads tr>td:only-child{text-align:center}#edd-item-tables-wrapper .emails .add-customer-email-row td{background-color:#f9f9f9;border-top:1px solid #e5e5e5}#edd-item-tables-wrapper .emails .primary-email-icon{font-size:13px;vertical-align:middle;line-height:1.5em}#edd-item-tables-wrapper .emails input{vertical-align:middle;margin:6px 0}#edd-item-tables-wrapper .emails .spinner{float:none}#edd-item-notes-wrapper{min-height:50px}.edd-item-notes-header img,.edd-item-notes-header span{font-weight:600;line-height:30px;vertical-align:middle}.customer-note-input{margin-bottom:5px;width:100%}#edd-customer-notes div:nth-of-type(even){background-color:#fcfcfc}.customer-note-wrapper{border-bottom:1px solid #f9f9f9;min-height:38px;padding:7px 0 7px 7px}.customer-note-wrapper span{display:block}.note-content-wrap{padding-top:7px}.delete-customer{text-align:center}#edd-item-card-wrapper .notice-container{padding-left:20px;padding-right:20px;margin-left:-20px;margin-right:-20px}#edd-item-card-wrapper .add-customer-email-wrapper>#add-customer-email{vertical-align:middle}@media screen and (max-width:810px) and (min-width:656px){.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper .widefat td,.widefat th{padding:4px 6px;max-width:100px!important;display:table-cell}}@media screen and (max-width:781px){#edd-item-card-wrapper,#edd-item-tab-wrapper{margin:0;width:100%}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{float:left;display:inline;font-size:14px;box-sizing:border-box;border-width:0 1px 1px 0;border-style:solid;border-color:#e5e5e5;width:33.33333%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 0 1px 0}#edd-item-tab-wrapper-list .dashicons{font-size:18px}.edd-item-has-tabs #edd-item-card-wrapper{border-top:1px solid #e5e5e5;border-left:0;margin-top:-1px;width:100%}}@media screen and (max-width:656px){#edd-item-card-wrapper .customer-info{min-height:220px}.edd-item-info.customer-info{position:relative}#edd-item-card-wrapper .customer-address-wrapper{float:none;position:absolute;top:84px;left:110px;max-width:200px}#edd-item-card-wrapper .customer-main-wrapper{float:none;position:absolute;left:110px}.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper #edd-item-stats-wrapper{padding-left:0;padding-right:0}#edd-item-card-wrapper .customer-section{margin-bottom:0}#edd-item-card-wrapper .widefat td,#edd-item-card-wrapper .widefat th{padding:4px 6px;max-width:100px!important;display:table-cell;overflow:hidden}#edd-item-card-wrapper .customer-id{font-size:16px}}@media screen and (max-width:480px){#edd-item-tab-wrapper-list li{width:50%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 1px 1px 0}#edd-item-tab-wrapper-list li:nth-child(even){border-width:0 0 1px 0}.edd-repeatable-row-actions,.edd-repeatable-row-title{text-align:left;width:100%}.edd-repeatable-row-title{padding-bottom:0}.edd-bundled-product-item-reorder,.edd-bundled-product-row .edd-bundled-product-item,.edd-bundled-product-row .edd-bundled-product-price-assignment,.edd-file-assignment,.edd-file-name,.edd-file-url,.edd-option-name,.edd-option-price,.edd_repeatable_default{float:none;text-align:left;width:100%!important;margin:10px 0}.edd-bundled-product-row .edd-bundled-product-actions{float:none}.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder{padding:0}#edd-payment-filters span{display:block;margin:2px 0}#edd-payment-filters a,.download_page_edd-reports .button{text-align:center}#edd-payment-date-filters span{display:block}#edd-payment-date-filters span>input{float:right}#edd-add-discount select[multiple] option,#edd-edit-discount select[multiple] option{height:20px}#edd-add-discount input[type=text],#edd-edit-discount input[type=text],#edd-payment-filters a,#edd-payment-filters input:not([type=radio]),#edd-payment-filters select,#system-info-textarea,.download_page_edd-reports .inside .button,.download_page_edd-reports .inside input[type=submit],.download_page_edd-reports .inside input[type=text],.download_page_edd-reports .inside select,.download_page_edd-settings .inside input[type=button],.download_page_edd-tools .inside input[type=submit],.download_page_edd-tools .inside input[type=text],.download_page_edd-tools .inside select{width:100%}#edd-add-discount select[multiple],#edd-edit-discount select[multiple],.download_page_edd-tools select[multiple]{height:200px!important}.download_page_edd-settings input[type=checkbox]{margin:2px 0}.post-type-download input[type=checkbox]{margin-left:2px}}.recount-stats-controls form{display:inline}.edd-recount-stats-descriptions span{display:none;line-height:24px}#edd-debug-log p.submit{margin:20px 0 0;padding:0}#edd-debug-log .edd-inline-button{margin-left:5px}.edd-settings-sidebar{padding-top:27px}.edd-settings-sidebar-content{background-color:#fff;text-align:center;border:1px solid #ddd;box-sizing:border-box;max-width:300px}.edd-settings-sidebar-content p{font-size:14px;line-height:1.5;margin-top:0}.edd-sidebar-header-section{background-color:#35495c;line-height:1;padding:26px 20px 24px;border-bottom:3px dashed #fafafa}.edd-sidebar-description-section{background-color:#fafafa;padding:16px 20px;border-bottom:1px solid #ddd}.edd-sidebar-description-section .edd-sidebar-description{margin:0}.edd-sidebar-coupon-section{font-size:14px;padding:16px 20px}.edd-sidebar-coupon-section label{display:block;line-height:1.4;margin-bottom:6px}.edd-sidebar-coupon-section label strong{color:#253b51;font-weight:700}.edd-sidebar-coupon-section input{background:#f4f7fa;font-size:22px;font-weight:600;text-align:center;padding:10px;border:2px dashed #2794da;border-radius:4px;margin-bottom:16px;box-shadow:none;width:100%}.edd-sidebar-coupon-section input:focus{border:2px dashed #2794da;box-shadow:none}.edd-settings-sidebar-content .edd-coupon-note{color:#6c7883;font-size:13px;font-style:italic;margin:0}.edd-settings-sidebar-content .edd-coupon-note a{color:#253b51}.edd-settings-sidebar-content .edd-coupon-note a:hover{text-decoration:none}.edd-sidebar-footer-section{background-color:#fafafa;padding:16px 20px;border-top:1px solid #ddd}.edd-sidebar-footer-section .edd-cta-button{display:block;background-color:#2794da;color:#fff;text-decoration:none;font-size:20px;font-weight:700;text-transform:uppercase;padding:17px 10px;border:none;border-radius:4px;width:100%;box-sizing:border-box;box-shadow:none;transition:background-color .2s}.edd-sidebar-footer-section .edd-cta-button:hover{background-color:#2386c5}@media all and (min-width:1080px){.edd-has-sidebar .edd-settings-content{float:left;width:67%}.edd-has-sidebar .edd-settings-sidebar{float:right;width:31%}}@media all and (min-width:1240px){.edd-has-sidebar .edd-settings-content{width:74%}.edd-has-sidebar .edd-settings-sidebar{width:23%}}.taxes-tab .edd-has-sidebar .edd-settings-content,.taxes-tab .edd-has-sidebar .edd-settings-sidebar{float:none;width:100%}.bfcm-promo-img-container{background-color:#35495c;width:100%;height:160px}.bfcm-code{color:#2794da;font-weight:700}.sale-ends{position:absolute;bottom:9px;right:14px;display:inline-block;color:#6c7883;font-size:12px;text-align:right;font-style:italic;width:150px}.edd-admin-notice-top-of-page{font-size:15px;line-height:1.4;color:#fff;margin-left:-20px;padding:12px 32px 12px 20px;background:#2d6ca2;display:none}@media screen and (min-width:783px){.edd-admin-notice-top-of-page{padding:10px 46px 10px 22px}}@media screen and (min-width:961px){.edd-admin-notice-top-of-page{text-align:center}}.edd-admin-notice-top-of-page a{color:#fff}.edd-admin-notice-top-of-page a:hover{text-decoration:none}.edd-admin-notice-top-of-page .button-link{position:absolute;top:48px;right:-1px;font-size:20px;color:#fff;font-weight:700;text-decoration:none;margin-left:5px;padding:6px 10px}.edd-admin-notice-top-of-page .button-link:active,.edd-admin-notice-top-of-page .button-link:focus,.edd-admin-notice-top-of-page .button-link:hover{color:#fff;text-decoration:none}@media screen and (min-width:601px){.edd-admin-notice-top-of-page .button-link{top:1px}}@media screen and (min-width:783px){.edd-admin-notice-top-of-page .button-link{right:9px}}.edd-paypal-account-status ul{margin-left:25px}.edd-paypal-account-status>li{margin-bottom:1em}.edd-paypal-account-status ul:not(.edd-paypal-webhook-events){list-style:disc;list-style-position:inside}.edd-paypal-account-status ul:not(.edd-paypal-webhook-events) li{margin:.25em 0}.edd-paypal-account-status .dashicons-yes{color:#008a20}.edd-paypal-account-status .dashicons-no{color:#d63638}#edd-admin-notice-five-star-review{display:grid}#edd_dashboard_sales .edd-promo-notice{border-bottom:1px solid #c3c4c7}.edd-review-actions{display:flex;gap:6px;margin:0 0 16px 0}.edd-promo-notice .edd-peeking{align-self:flex-end;justify-self:flex-end;margin-right:16px;margin-bottom:-1px}@media screen and (max-width:782px){#edd-admin-notice-five-star-review.notice .edd-peeking{margin-bottom:-6px}}@media screen and (min-width:400px){.edd-promo-notice .edd-peeking{justify-self:flex-start;margin-right:0;margin-left:200px}}.edd-promo-notice .edd-peeking,.edd-review-step{grid-area:1/-1}.edd-overlay{position:fixed;z-index:1052;top:0;right:0;bottom:0;left:160px;background-color:#141b38;opacity:.5;transition:.5s}.edd-slide-in{transform:translateX(100%)!important;-webkit-transform:translateX(100%)!important}#edd-notifications-panel{background-color:#fff;height:100%;width:100%;max-width:570px;position:fixed;z-index:1053;top:0;right:0;bottom:0;overflow-x:hidden;transition:.5s;transform:translateX(0);-webkit-transform:translateX(0)}body.admin-bar #edd-notifications-panel{top:32px}@media screen and (max-width:600px){body.admin-bar #edd-notifications-panel{top:46px}}#edd-notifications-header{display:flex;align-items:center;padding:0 30px;color:#fff;background-color:#0c5d95}#edd-notifications-header h3{color:#fff;flex:1}#edd-notifications-header .edd-close{background:0 0;border:none;color:#fff;cursor:pointer}#edd-notifications-body{padding:30px}.edd-notification{display:flex;gap:20px;margin-bottom:20px}.edd-notification--icon{color:#00aa63}.edd-notification--icon.edd-notification--icon-info{color:#005ae0}.edd-notification--icon.edd-notification--icon-warning{color:#f18200}.edd-notification--icon.edd-notification--icon-error{color:#df2a4a}.edd-notification--body{flex:1}.edd-notification--header{align-items:center;display:flex;justify-content:space-between;gap:5px;margin-bottom:7px}.edd-notification--title{color:#141b38;flex:1;font-size:16px;font-weight:600;margin:0}.edd-notification--date{color:#71747e;font-size:12px}.edd-notification--actions{flex-wrap:wrap;display:flex;align-items:center;gap:5px;margin-top:10px}.edd-notification--dismiss{background:0 0!important;border:none!important;box-shadow:none!important;color:#71747e!important;cursor:pointer;padding:0 10px;text-decoration:underline}.edd-notification--dismiss:hover{text-decoration:none}
|
assets/css/extension-manager.css
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Extension Manager
|
2 |
+
------------------------------------------------------------- */
|
3 |
+
|
4 |
+
.edd-extension-manager__card {
|
5 |
+
background-color: #fff;
|
6 |
+
padding: 2em;
|
7 |
+
margin: 0;
|
8 |
+
display: flex;
|
9 |
+
flex-direction: column;
|
10 |
+
justify-content: space-between;
|
11 |
+
}
|
12 |
+
|
13 |
+
.edd-extension-manager__card-group .edd-extension-manager__card {
|
14 |
+
float: left;
|
15 |
+
max-width: 360px;
|
16 |
+
margin: 1em;
|
17 |
+
}
|
18 |
+
|
19 |
+
@supports(grid-area: auto) {
|
20 |
+
.edd-extension-manager__card-group {
|
21 |
+
display: grid;
|
22 |
+
grid-template-columns: auto;
|
23 |
+
gap: 1em;
|
24 |
+
margin-top: 24px;
|
25 |
+
}
|
26 |
+
|
27 |
+
.edd-extension-manager__card-group .edd-extension-manager__card {
|
28 |
+
float: none;
|
29 |
+
margin: 0;
|
30 |
+
max-width: unset;
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
.inside .edd-extension-manager__card {
|
35 |
+
padding: 0;
|
36 |
+
}
|
37 |
+
|
38 |
+
.edd-extension-manager__title {
|
39 |
+
margin: 0 0 1em 0;
|
40 |
+
}
|
41 |
+
|
42 |
+
.edd-extension-manager__group {
|
43 |
+
display: grid;
|
44 |
+
}
|
45 |
+
|
46 |
+
.edd-extension-manager__step {
|
47 |
+
grid-area: 1/-1;
|
48 |
+
margin: 0;
|
49 |
+
}
|
50 |
+
|
51 |
+
.edd-extension-manager__step:not(:first-of-type) {
|
52 |
+
display: none;
|
53 |
+
}
|
54 |
+
|
55 |
+
.edd-extension-manager__step .button {
|
56 |
+
display: table;
|
57 |
+
margin: 0 auto;
|
58 |
+
text-align: center;
|
59 |
+
white-space: normal;
|
60 |
+
}
|
61 |
+
|
62 |
+
td .edd-extension-manager__step .button {
|
63 |
+
display: inline-block;
|
64 |
+
}
|
65 |
+
|
66 |
+
.edd-extension-manager__body {
|
67 |
+
display: grid;
|
68 |
+
gap: 1.5em;
|
69 |
+
grid-template-rows: auto 1fr;
|
70 |
+
flex-grow: 1;
|
71 |
+
}
|
72 |
+
|
73 |
+
.edd-extension-manager__image img {
|
74 |
+
display: block;
|
75 |
+
margin: 0 auto;
|
76 |
+
max-width: 500px;
|
77 |
+
width: 100%;
|
78 |
+
}
|
79 |
+
|
80 |
+
.edd-extension-manager__features ul {
|
81 |
+
display: grid;
|
82 |
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
83 |
+
}
|
84 |
+
|
85 |
+
.edd-extension-manager__features .dashicons-yes {
|
86 |
+
color: #008a20;
|
87 |
+
margin-right: .25em;
|
88 |
+
}
|
89 |
+
|
90 |
+
.edd-extension-manager__body .notice {
|
91 |
+
max-width: 320px;
|
92 |
+
}
|
93 |
+
|
94 |
+
/* Extension Manager Style Variations
|
95 |
+
--------------------------------------- */
|
96 |
+
.edd-extension-manager__card--horizontal {
|
97 |
+
margin: 24px 0;
|
98 |
+
max-width: 700px;
|
99 |
+
}
|
100 |
+
|
101 |
+
.edd-extension-manager__card--detailed {
|
102 |
+
background-color: transparent;
|
103 |
+
max-width: 700px;
|
104 |
+
}
|
105 |
+
|
106 |
+
.edd-extension-manager__card--detailed-2col {
|
107 |
+
background-color: transparent;
|
108 |
+
max-width: 900px;
|
109 |
+
}
|
110 |
+
|
111 |
+
.edd-extension-manager__card--detailed .edd-extension-manager__title,
|
112 |
+
.edd-extension-manager__card--detailed-2col .edd-extension-manager__title {
|
113 |
+
border-bottom: 1px solid #ccc;
|
114 |
+
padding-bottom: 1em;
|
115 |
+
}
|
116 |
+
|
117 |
+
@media screen and (min-width: 601px) {
|
118 |
+
.edd-extension-manager__card-group {
|
119 |
+
grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
|
120 |
+
}
|
121 |
+
|
122 |
+
.edd-extension-manager__card--horizontal .edd-extension-manager__body {
|
123 |
+
grid-template-columns: minmax(0, 300px) 1fr;
|
124 |
+
grid-template-rows: 1fr auto;
|
125 |
+
grid-auto-flow: column;
|
126 |
+
}
|
127 |
+
|
128 |
+
.edd-extension-manager__card--horizontal .edd-extension-manager__image {
|
129 |
+
grid-row: 1 / 4;
|
130 |
+
}
|
131 |
+
|
132 |
+
.edd-extension-manager__features,
|
133 |
+
.edd-extension-manager__card--horizontal .edd-extension-manager__description {
|
134 |
+
align-self: center;
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
@media screen and (min-width: 783px) {
|
139 |
+
.edd-extension-manager__card--detailed-2col .edd-extension-manager__body {
|
140 |
+
grid-template-columns: minmax(0, 375px) 1fr;
|
141 |
+
grid-auto-flow: column;
|
142 |
+
}
|
143 |
+
}
|
assets/css/extension-manager.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.edd-extension-manager__card{background-color:#fff;padding:2em;margin:0;display:flex;flex-direction:column;justify-content:space-between}.edd-extension-manager__card-group .edd-extension-manager__card{float:left;max-width:360px;margin:1em}@supports(grid-area:auto){.edd-extension-manager__card-group{display:grid;grid-template-columns:auto;gap:1em;margin-top:24px}.edd-extension-manager__card-group .edd-extension-manager__card{float:none;margin:0;max-width:unset}}.inside .edd-extension-manager__card{padding:0}.edd-extension-manager__title{margin:0 0 1em 0}.edd-extension-manager__group{display:grid}.edd-extension-manager__step{grid-area:1/-1;margin:0}.edd-extension-manager__step:not(:first-of-type){display:none}.edd-extension-manager__step .button{display:table;margin:0 auto;text-align:center;white-space:normal}td .edd-extension-manager__step .button{display:inline-block}.edd-extension-manager__body{display:grid;gap:1.5em;grid-template-rows:auto 1fr;flex-grow:1}.edd-extension-manager__image img{display:block;margin:0 auto;max-width:500px;width:100%}.edd-extension-manager__features ul{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.edd-extension-manager__features .dashicons-yes{color:#008a20;margin-right:.25em}.edd-extension-manager__body .notice{max-width:320px}.edd-extension-manager__card--horizontal{margin:24px 0;max-width:700px}.edd-extension-manager__card--detailed{background-color:transparent;max-width:700px}.edd-extension-manager__card--detailed-2col{background-color:transparent;max-width:900px}.edd-extension-manager__card--detailed .edd-extension-manager__title,.edd-extension-manager__card--detailed-2col .edd-extension-manager__title{border-bottom:1px solid #ccc;padding-bottom:1em}@media screen and (min-width:601px){.edd-extension-manager__card-group{grid-template-columns:repeat(auto-fill,minmax(360px,1fr))}.edd-extension-manager__card--horizontal .edd-extension-manager__body{grid-template-columns:minmax(0,300px) 1fr;grid-template-rows:1fr auto;grid-auto-flow:column}.edd-extension-manager__card--horizontal .edd-extension-manager__image{grid-row:1/4}.edd-extension-manager__card--horizontal .edd-extension-manager__description,.edd-extension-manager__features{align-self:center}}@media screen and (min-width:783px){.edd-extension-manager__card--detailed-2col .edd-extension-manager__body{grid-template-columns:minmax(0,375px) 1fr;grid-auto-flow:column}}
|
assets/js/admin-notifications.js
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* global eddNotificationsVars */
|
2 |
+
|
3 |
+
document.addEventListener( 'alpine:init', () => {
|
4 |
+
Alpine.store( 'eddNotifications', {
|
5 |
+
isPanelOpen: false,
|
6 |
+
notificationsLoaded: false,
|
7 |
+
numberActiveNotifications: 0,
|
8 |
+
activeNotifications: [],
|
9 |
+
inactiveNotifications: [],
|
10 |
+
|
11 |
+
init: function() {
|
12 |
+
const eddNotifications = this;
|
13 |
+
|
14 |
+
/*
|
15 |
+
* The bubble starts out hidden until AlpineJS is initialized. Once it is, we remove
|
16 |
+
* the hidden class. This prevents a flash of the bubble's visibility in the event that there
|
17 |
+
* are no notifications.
|
18 |
+
*/
|
19 |
+
const notificationCountBubble = document.querySelector( '#edd-notification-button .edd-number' );
|
20 |
+
if ( notificationCountBubble ) {
|
21 |
+
notificationCountBubble.classList.remove( 'edd-hidden' );
|
22 |
+
}
|
23 |
+
|
24 |
+
document.addEventListener( 'keydown', function( e ) {
|
25 |
+
if ( e.key === 'Escape' ) {
|
26 |
+
eddNotifications.closePanel();
|
27 |
+
}
|
28 |
+
} );
|
29 |
+
},
|
30 |
+
|
31 |
+
openPanel: function() {
|
32 |
+
const panelHeader = document.getElementById( 'edd-notifications-header' );
|
33 |
+
|
34 |
+
if ( this.notificationsLoaded ) {
|
35 |
+
this.isPanelOpen = true;
|
36 |
+
if ( panelHeader ) {
|
37 |
+
setTimeout( function() {
|
38 |
+
panelHeader.focus();
|
39 |
+
} );
|
40 |
+
}
|
41 |
+
|
42 |
+
return;
|
43 |
+
}
|
44 |
+
|
45 |
+
this.isPanelOpen = true;
|
46 |
+
|
47 |
+
this.apiRequest( '/notifications', 'GET' )
|
48 |
+
.then( data => {
|
49 |
+
this.activeNotifications = data.active;
|
50 |
+
this.inactiveNotifications = data.dismissed;
|
51 |
+
this.notificationsLoaded = true;
|
52 |
+
|
53 |
+
if ( panelHeader ) {
|
54 |
+
panelHeader.focus();
|
55 |
+
}
|
56 |
+
} )
|
57 |
+
.catch( error => {
|
58 |
+
console.log( 'Notification error', error );
|
59 |
+
} );
|
60 |
+
},
|
61 |
+
|
62 |
+
closePanel: function() {
|
63 |
+
if ( ! this.isPanelOpen ) {
|
64 |
+
return;
|
65 |
+
}
|
66 |
+
|
67 |
+
this.isPanelOpen = false;
|
68 |
+
|
69 |
+
const notificationButton = document.getElementById( 'edd-notification-button' );
|
70 |
+
if ( notificationButton ) {
|
71 |
+
notificationButton.focus();
|
72 |
+
}
|
73 |
+
},
|
74 |
+
|
75 |
+
apiRequest: function( endpoint, method ) {
|
76 |
+
return fetch( eddNotificationsVars.restBase + endpoint, {
|
77 |
+
method: method,
|
78 |
+
credentials: 'same-origin',
|
79 |
+
headers: {
|
80 |
+
'Content-Type': 'application/json',
|
81 |
+
'X-WP-Nonce': eddNotificationsVars.restNonce
|
82 |
+
}
|
83 |
+
} ).then( response => {
|
84 |
+
if ( ! response.ok ) {
|
85 |
+
return Promise.reject( response );
|
86 |
+
}
|
87 |
+
|
88 |
+
/*
|
89 |
+
* Returning response.text() instead of response.json() because dismissing
|
90 |
+
* a notification doesn't return a JSON response, so response.json() will break.
|
91 |
+
*/
|
92 |
+
return response.text();
|
93 |
+
//return response.json();
|
94 |
+
} ).then( data => {
|
95 |
+
return data ? JSON.parse( data ) : null;
|
96 |
+
} );
|
97 |
+
} ,
|
98 |
+
|
99 |
+
dismiss: function( event, index ) {
|
100 |
+
if ( 'undefined' === typeof this.activeNotifications[ index ] ) {
|
101 |
+
return;
|
102 |
+
}
|
103 |
+
|
104 |
+
event.target.disabled = true;
|
105 |
+
|
106 |
+
const notification = this.activeNotifications[ index ];
|
107 |
+
|
108 |
+
this.apiRequest( '/notifications/' + notification.id, 'DELETE' )
|
109 |
+
.then( response => {
|
110 |
+
this.activeNotifications.splice( index, 1 );
|
111 |
+
this.numberActiveNotifications = this.activeNotifications.length;
|
112 |
+
} )
|
113 |
+
.catch( error => {
|
114 |
+
console.log( 'Dismiss error', error );
|
115 |
+
} );
|
116 |
+
}
|
117 |
+
} );
|
118 |
+
} );
|
assets/js/admin-notifications.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
document.addEventListener("alpine:init",()=>{Alpine.store("eddNotifications",{isPanelOpen:!1,notificationsLoaded:!1,numberActiveNotifications:0,activeNotifications:[],inactiveNotifications:[],init:function(){const eddNotifications=this,notificationCountBubble=document.querySelector("#edd-notification-button .edd-number");notificationCountBubble&¬ificationCountBubble.classList.remove("edd-hidden"),document.addEventListener("keydown",function(e){"Escape"===e.key&&eddNotifications.closePanel()})},openPanel:function(){const panelHeader=document.getElementById("edd-notifications-header");if(this.notificationsLoaded)return this.isPanelOpen=!0,void(panelHeader&&setTimeout(function(){panelHeader.focus()}));this.isPanelOpen=!0,this.apiRequest("/notifications","GET").then(data=>{this.activeNotifications=data.active,this.inactiveNotifications=data.dismissed,this.notificationsLoaded=!0,panelHeader&&panelHeader.focus()}).catch(error=>{console.log("Notification error",error)})},closePanel:function(){if(this.isPanelOpen){this.isPanelOpen=!1;const notificationButton=document.getElementById("edd-notification-button");notificationButton&¬ificationButton.focus()}},apiRequest:function(endpoint,method){return fetch(eddNotificationsVars.restBase+endpoint,{method:method,credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":eddNotificationsVars.restNonce}}).then(response=>response.ok?response.text():Promise.reject(response)).then(data=>data?JSON.parse(data):null)},dismiss:function(notification,index){void 0!==this.activeNotifications[index]&&(notification.target.disabled=!0,notification=this.activeNotifications[index],this.apiRequest("/notifications/"+notification.id,"DELETE").then(response=>{this.activeNotifications.splice(index,1),this.numberActiveNotifications=this.activeNotifications.length}).catch(error=>{console.log("Dismiss error",error)}))}})});
|
assets/js/admin-scripts.js
CHANGED
@@ -86,6 +86,10 @@ jQuery(document).ready(function ($) {
|
|
86 |
$( this ).val( parseInt( key ) ).removeAttr('checked');
|
87 |
});
|
88 |
|
|
|
|
|
|
|
|
|
89 |
clone.find( '.edd_repeatable_condition_field' ).each ( function() {
|
90 |
$( this ).find( 'option:eq(0)' ).prop( 'selected', 'selected' );
|
91 |
});
|
@@ -1204,23 +1208,6 @@ jQuery(document).ready(function ($) {
|
|
1204 |
|
1205 |
emails : function() {
|
1206 |
|
1207 |
-
$('#edd-sendwp-connect').on('click', function(e) {
|
1208 |
-
|
1209 |
-
e.preventDefault();
|
1210 |
-
$(this).html( edd_vars.wait + ' <span class="edd-loading"></span>' );
|
1211 |
-
document.body.style.cursor = 'wait';
|
1212 |
-
easy_digital_downloads_sendwp_remote_install();
|
1213 |
-
|
1214 |
-
});
|
1215 |
-
|
1216 |
-
$('#edd-sendwp-disconnect').on('click', function(e) {
|
1217 |
-
e.preventDefault();
|
1218 |
-
$(this).html( edd_vars.wait + ' <span class="edd-loading dark"></span>' );
|
1219 |
-
document.body.style.cursor = 'wait';
|
1220 |
-
easy_digital_downloads_sendwp_disconnect();
|
1221 |
-
|
1222 |
-
});
|
1223 |
-
|
1224 |
$('#edd-recapture-connect').on('click', function(e) {
|
1225 |
|
1226 |
e.preventDefault();
|
@@ -1250,7 +1237,7 @@ jQuery(document).ready(function ($) {
|
|
1250 |
} else {
|
1251 |
symlink.show();
|
1252 |
}
|
1253 |
-
});
|
1254 |
}
|
1255 |
|
1256 |
}
|
@@ -2059,7 +2046,10 @@ jQuery(document).ready(function ($) {
|
|
2059 |
var notice = $( this );
|
2060 |
|
2061 |
notice.on( 'click', '.edd-promo-notice-dismiss', function( e ) {
|
2062 |
-
|
|
|
|
|
|
|
2063 |
|
2064 |
$.ajax( {
|
2065 |
type: 'POST',
|
@@ -2137,7 +2127,7 @@ jQuery(document).ready(function ($) {
|
|
2137 |
},
|
2138 |
url: ajaxurl,
|
2139 |
success: function (response) {
|
2140 |
-
$('#edd_dashboard_sales .
|
2141 |
}
|
2142 |
});
|
2143 |
}
|
@@ -2215,65 +2205,6 @@ function edd_attach_tooltips( selector ) {
|
|
2215 |
});
|
2216 |
}
|
2217 |
|
2218 |
-
function easy_digital_downloads_sendwp_remote_install() {
|
2219 |
-
var data = {
|
2220 |
-
'action': 'edd_sendwp_remote_install',
|
2221 |
-
};
|
2222 |
-
|
2223 |
-
// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
|
2224 |
-
jQuery.post(ajaxurl, data, function( response ) {
|
2225 |
-
|
2226 |
-
if( ! response.success ) {
|
2227 |
-
|
2228 |
-
if( confirm( response.data.error ) ) {
|
2229 |
-
location.reload();
|
2230 |
-
return;
|
2231 |
-
}
|
2232 |
-
}
|
2233 |
-
|
2234 |
-
easy_digital_downloads_sendwp_register_client(
|
2235 |
-
response.data.register_url,
|
2236 |
-
response.data.client_name,
|
2237 |
-
response.data.client_secret,
|
2238 |
-
response.data.client_redirect,
|
2239 |
-
response.data.partner_id
|
2240 |
-
);
|
2241 |
-
});
|
2242 |
-
}
|
2243 |
-
|
2244 |
-
function easy_digital_downloads_sendwp_disconnect() {
|
2245 |
-
var data = {
|
2246 |
-
'action': 'edd_sendwp_disconnect',
|
2247 |
-
};
|
2248 |
-
|
2249 |
-
jQuery.post(ajaxurl, data, function( response ) {
|
2250 |
-
location.reload();
|
2251 |
-
});
|
2252 |
-
}
|
2253 |
-
|
2254 |
-
function easy_digital_downloads_sendwp_register_client(register_url, client_name, client_secret, client_redirect, partner_id) {
|
2255 |
-
|
2256 |
-
var form = document.createElement("form");
|
2257 |
-
form.setAttribute("method", 'POST');
|
2258 |
-
form.setAttribute("action", register_url);
|
2259 |
-
|
2260 |
-
function easy_digital_downloads_sendwp_append_form_input(name, value) {
|
2261 |
-
var input = document.createElement("input");
|
2262 |
-
input.setAttribute("type", "hidden");
|
2263 |
-
input.setAttribute("name", name);
|
2264 |
-
input.setAttribute("value", value);
|
2265 |
-
form.appendChild(input);
|
2266 |
-
}
|
2267 |
-
|
2268 |
-
easy_digital_downloads_sendwp_append_form_input('client_name', client_name);
|
2269 |
-
easy_digital_downloads_sendwp_append_form_input('client_secret', client_secret);
|
2270 |
-
easy_digital_downloads_sendwp_append_form_input('client_redirect', client_redirect);
|
2271 |
-
easy_digital_downloads_sendwp_append_form_input('partner_id', partner_id);
|
2272 |
-
|
2273 |
-
document.body.appendChild(form);
|
2274 |
-
form.submit();
|
2275 |
-
}
|
2276 |
-
|
2277 |
function easy_digital_downloads_recapture_remote_install() {
|
2278 |
var data = {
|
2279 |
'action': 'edd_recapture_remote_install',
|
86 |
$( this ).val( parseInt( key ) ).removeAttr('checked');
|
87 |
});
|
88 |
|
89 |
+
clone.find( '.edd_repeatable_index' ).each( function () {
|
90 |
+
$( this ).val( parseInt( key ) );
|
91 |
+
} );
|
92 |
+
|
93 |
clone.find( '.edd_repeatable_condition_field' ).each ( function() {
|
94 |
$( this ).find( 'option:eq(0)' ).prop( 'selected', 'selected' );
|
95 |
});
|
1208 |
|
1209 |
emails : function() {
|
1210 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1211 |
$('#edd-recapture-connect').on('click', function(e) {
|
1212 |
|
1213 |
e.preventDefault();
|
1237 |
} else {
|
1238 |
symlink.show();
|
1239 |
}
|
1240 |
+
} );
|
1241 |
}
|
1242 |
|
1243 |
}
|
2046 |
var notice = $( this );
|
2047 |
|
2048 |
notice.on( 'click', '.edd-promo-notice-dismiss', function( e ) {
|
2049 |
+
// Only prevent default behavior for buttons, not links.
|
2050 |
+
if ( !$( this ).attr( 'href' ) ) {
|
2051 |
+
e.preventDefault();
|
2052 |
+
}
|
2053 |
|
2054 |
$.ajax( {
|
2055 |
type: 'POST',
|
2127 |
},
|
2128 |
url: ajaxurl,
|
2129 |
success: function (response) {
|
2130 |
+
$( '#edd_dashboard_sales .edd-loading' ).html( response );
|
2131 |
}
|
2132 |
});
|
2133 |
}
|
2205 |
});
|
2206 |
}
|
2207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2208 |
function easy_digital_downloads_recapture_remote_install() {
|
2209 |
var data = {
|
2210 |
'action': 'edd_recapture_remote_install',
|
assets/js/admin-scripts.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(document).ready(function($){edd_attach_tooltips($(".edd-help-tip"));var EDD_Download_Configuration={init:function(){this.add(),this.move(),this.remove(),this.type(),this.prices(),this.files(),this.updatePrices()},clone_repeatable:function(row){var key;highest=1;return row.parent().find(".edd_repeatable_row").each(function(){var current=$(this).data("key");parseInt(current)>highest&&(highest=current)}),key=highest+=1,clone=row.clone(),clone.removeClass("edd_add_blank"),clone.attr("data-key",key),clone.find("input, select, textarea").val("").each(function(){var name=$(this).attr("name"),id=$(this).attr("id");name&&(name=name.replace(/\[(\d+)\]/,"["+parseInt(key)+"]"),$(this).attr("name",name)),$(this).attr("data-key",key),void 0!==id&&(id=id.replace(/(\d+)/,parseInt(key)),$(this).attr("id",id))}),clone.find("select").each(function(){$(this).val(row.find('select[name="'+$(this).attr("name")+'"]').val())}),clone.find('input[type="checkbox"]').each(function(){$(this).is(":checked")&&$(this).prop("checked",!1),$(this).val(1)}),clone.find("span.edd_price_id").each(function(){$(this).text(parseInt(key))}),clone.find("span.edd_file_id").each(function(){$(this).text(parseInt(key))}),clone.find(".edd_repeatable_default_input").each(function(){$(this).val(parseInt(key)).removeAttr("checked")}),clone.find(".edd_repeatable_condition_field").each(function(){$(this).find("option:eq(0)").prop("selected","selected")}),clone.find(".search-choice").remove(),clone.find(".chosen-container").remove(),edd_attach_tooltips(clone.find(".edd-help-tip")),clone},add:function(){$(document.body).on("click",".submit .edd_add_repeatable",function(clone){clone.preventDefault();var row=$(this).parent().parent().prev(".edd_repeatable_row"),clone=EDD_Download_Configuration.clone_repeatable(row);clone.insertAfter(row).find("input, textarea, select").filter(":visible").eq(0).focus(),clone.find(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),clone.find(".edd-select-chosen").css("width","100%"),clone.find(".edd-select-chosen .chosen-search input").attr("placeholder",edd_vars.search_placeholder)})},move:function(){$(".edd_repeatable_table .edd-repeatables-wrap").sortable({handle:".edd-draghandle-anchor",items:".edd_repeatable_row",opacity:.6,cursor:"move",axis:"y",update:function(){var count=0;$(this).find(".edd_repeatable_row").each(function(){$(this).find("input.edd_repeatable_index").each(function(){$(this).val(count)}),count++})}})},remove:function(){$(document.body).on("click",".edd-remove-row, .edd_remove_repeatable",function(firstFocusable){firstFocusable.preventDefault();var row=$(this).parents(".edd_repeatable_row"),count=row.parent().find(".edd_repeatable_row").length,type=$(this).data("type"),repeatable="div.edd_repeatable_"+type+"s",price_row_id=$(this).is(".ui-sortable .edd_repeatable_row:first-child .edd-remove-row, .ui-sortable .edd_repeatable_row:first-child .edd_remove_repeatable")?row.next(".edd_repeatable_row"):row.prev(".edd_repeatable_row"),firstFocusable=price_row_id.find("select, input, textarea, button").filter(":visible").eq(0);if("price"===type&&(price_row_id=row.data("key"),$('.edd_repeatable_condition_field option[value="'+price_row_id+'"]').remove()),1<count)$("input, select",row).val(""),row.fadeOut("fast").remove(),firstFocusable.focus();else switch(type){case"price":alert(edd_vars.one_price_min);break;case"file":$("input, select",row).val("");break;default:alert(edd_vars.one_field_min)}$(repeatable).each(function(rowIndex){$(this).find("input, select").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+rowIndex+"]");$(this).attr("name",name).attr("id",name)})})})},type:function(){$(document.body).on("change","#_edd_product_type",function(e){var edd_products=$("#edd_products"),edd_download_files=$("#edd_download_files"),edd_download_limit_wrap=$("#edd_download_limit_wrap");"bundle"===$(this).val()?(edd_products.show(),edd_download_files.hide(),edd_download_limit_wrap.hide()):(edd_products.hide(),edd_download_files.show(),edd_download_limit_wrap.show())})},prices:function(){$(document.body).on("change","#edd_variable_pricing",function(e){var checked=$(this).is(":checked"),single=$("#edd_regular_price_field"),variable=$("#edd_variable_price_fields, .edd_repeatable_table .pricing"),bundleRow=$(".edd-bundled-product-row, .edd-repeatable-row-standard-fields");checked?(single.hide(),variable.show(),bundleRow.addClass("has-variable-pricing")):(single.show(),variable.hide(),bundleRow.removeClass("has-variable-pricing"))})},files:function(){var file_frame;window.formfield="",$(document.body).on("click",".edd_upload_file_button",function(button){button.preventDefault();button=$(this);window.formfield=$(this).closest(".edd_repeatable_upload_wrapper"),file_frame||((file_frame=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:button.data("uploader-title"),button:{text:button.data("uploader-button-text")},multiple:"0"!=$(this).data("multiple")})).on("menu:render:default",function(view){view.unset("library-separator"),view.unset("gallery"),view.unset("featured-image"),view.unset("embed"),view.set({})}),file_frame.on("insert",function(){file_frame.state().get("selection").each(function(attachment,clone){var row,selectedSize="image"===(attachment=attachment.toJSON()).type&&$(".attachment-display-settings .size option:selected").val(),selectedURL=attachment.url,selectedName=0<attachment.title.length?attachment.title:attachment.filename;selectedSize&&void 0!==attachment.sizes[selectedSize]&&(selectedURL=attachment.sizes[selectedSize].url),"image"===attachment.type&&(selectedName=selectedSize&&void 0!==attachment.sizes[selectedSize]?selectedName+"-"+attachment.sizes[selectedSize].width+"x"+attachment.sizes[selectedSize].height:selectedName+"-"+attachment.width+"x"+attachment.height),0===clone?(window.formfield.find(".edd_repeatable_attachment_id_field").val(attachment.id),window.formfield.find(".edd_repeatable_thumbnail_size_field").val(selectedSize),window.formfield.find(".edd_repeatable_upload_field").val(selectedURL),window.formfield.find(".edd_repeatable_name_field").val(selectedName)):(row=window.formfield,(clone=EDD_Download_Configuration.clone_repeatable(row)).find(".edd_repeatable_attachment_id_field").val(attachment.id),clone.find(".edd_repeatable_thumbnail_size_field").val(selectedSize),clone.find(".edd_repeatable_upload_field").val(selectedURL),clone.find(".edd_repeatable_name_field").val(selectedName),clone.insertAfter(row))})})),file_frame.open()}),window.formfield=""},updatePrices:function(){$("#edd_price_fields").on("keyup",".edd_variable_prices_name",function(){var key=$(this).parents(".edd_repeatable_row").data("key"),name=$(this).val(),field_option=$(".edd_repeatable_condition_field option[value="+key+"]");0<field_option.length?field_option.text(name):$(".edd_repeatable_condition_field").append($("<option></option>").attr("value",key).text(name))})}};$(document.body).on("click",".toggle-custom-price-option-section",function(header){header.preventDefault();var show=$(this).html()==edd_vars.show_advanced_settings;show?$(this).html(edd_vars.hide_advanced_settings):$(this).html(edd_vars.show_advanced_settings);header=$(this).parents(".edd-repeatable-row-header");header.siblings(".edd-custom-price-option-sections-wrap").slideToggle(),$(":input:not(input[type=button],input[type=submit],button):visible:first",show?header.siblings(".edd-custom-price-option-sections-wrap"):header.siblings(".edd-repeatable-row-standard-fields")).focus()}),EDD_Download_Configuration.init();var typingTimer,edd_datepicker=$(".edd_datepicker");0<edd_datepicker.length&&edd_datepicker.datepicker({dateFormat:"mm/dd/yy"}),{init:function(){this.edit_address(),this.remove_download(),this.add_download(),this.change_customer(),this.new_customer(),this.edit_price(),this.recalculate_total(),this.variable_prices_check(),this.add_note(),this.remove_note(),this.resend_receipt(),this.copy_download_link()},edit_address:function(){$('select[name="edd-payment-address[0][country]"]').change(function(){var data=$(this),data={action:"edd_get_shop_states",country:data.val(),nonce:data.data("nonce"),field_name:"edd-payment-address[0][state]"};return $.post(ajaxurl,data,function(response){var state_wrapper=$("#edd-order-address-state-wrap select, #edd-order-address-state-wrap input");$("#edd-order-address-state-wrap .chosen-container").remove(),"nostates"==response?state_wrapper.replaceWith('<input type="text" name="edd-payment-address[0][state]" value="" class="edd-edit-toggles medium-text"/>'):state_wrapper.replaceWith(response)}),!1})},remove_download:function(){$("#edd-purchased-files").on("click",".edd-order-remove-download",function(){var key,download_id,price_id,quantity,amount,fees,currently_removed;return 1===$(document.body).find("#edd-purchased-files > .row:not(.header)").length?alert(edd_vars.one_download_min):confirm(edd_vars.delete_payment_download)&&(key=$(this).data("key"),$(".edd-payment-id").val(),download_id=$('input[name="edd-payment-details-downloads['+key+'][id]"]').val(),price_id=$('input[name="edd-payment-details-downloads['+key+'][price_id]"]').val(),quantity=$('input[name="edd-payment-details-downloads['+key+'][quantity]"]').val(),amount=$('input[name="edd-payment-details-downloads['+key+'][amount]"]').val(),$('input[name="edd-payment-details-downloads['+key+'][tax]"]').length&&(fees=$('input[name="edd-payment-details-downloads['+key+'][tax]"]').val()),$('input[name="edd-payment-details-downloads['+key+'][fees]"]').length&&(fees=$.parseJSON($('input[name="edd-payment-details-downloads['+key+'][fees]"]').val())),currently_removed=$('input[name="edd-payment-removed"]').val(),(currently_removed=(currently_removed=$.parseJSON(currently_removed)).length<1?{}:currently_removed)[key]=[{id:download_id,price_id:price_id,quantity:quantity,amount:amount,cart_index:key}],$('input[name="edd-payment-removed"]').val(JSON.stringify(currently_removed)),$(this).parent().parent().remove(),fees&&fees.length&&$.each(fees,function(key,value){$('*li[data-fee-id="'+value+'"]').remove()}),$("#edd-payment-downloads-changed").val(1),$(".edd-order-payment-recalc-totals").show()),!1})},change_customer:function(){$("#edd-customer-details").on("click",".edd-payment-change-customer, .edd-payment-change-customer-cancel",function(cancel){cancel.preventDefault();var change_customer=$(this).hasClass("edd-payment-change-customer"),cancel=$(this).hasClass("edd-payment-change-customer-cancel");change_customer?($(".customer-info").hide(),$(".change-customer").show(),$(".edd-payment-change-customer-input").css("width","auto")):cancel&&($(".customer-info").show(),$(".change-customer").hide())})},new_customer:function(){$("#edd-customer-details").on("click",".edd-payment-new-customer, .edd-payment-new-customer-cancel",function(cancel){cancel.preventDefault();var new_customer=$(this).hasClass("edd-payment-new-customer"),cancel=$(this).hasClass("edd-payment-new-customer-cancel");new_customer?($(".customer-info").hide(),$(".new-customer").show()):cancel&&($(".customer-info").show(),$(".new-customer").hide());new_customer=$("#edd-new-customer");$(".new-customer").is(":visible")?new_customer.val(1):new_customer.val(0)})},add_download:function(){$(".edd-edit-purchase-element").on("click","#edd-order-add-download",function(download_title){download_title.preventDefault();var quantity=$("#edd_order_download_select"),item_price=$("#edd-order-download-quantity"),item_total=$("#edd-order-download-price"),price_id=$("#edd-order-download-tax"),clone=$(".edd_price_options_select option:selected"),download_id=quantity.val(),download_title=quantity.find(":selected").text(),quantity=item_price.val(),item_price=item_total.val(),item_total=price_id.val(),price_id=clone.val(),clone=clone.text();if(download_id<1)return!1;if(item_price=item_price||0,item_price=parseFloat(item_price),isNaN(item_price))return alert(edd_vars.numeric_item_price),!1;if(item_total=parseFloat(item_total),isNaN(item_total))return alert(edd_vars.numeric_item_tax),!1;if(isNaN(parseInt(quantity)))return alert(edd_vars.numeric_quantity),!1;clone&&(download_title=download_title+" - "+clone);var count=$("#edd-purchased-files div.row:not(.edd-purchased-files-header)").length;0==count&&alert(edd_vars.no_downloads_error);clone=$("#edd-purchased-files div.row:not(.edd-purchased-files-header):last").clone();clone.find(".download span").html('<a href="post.php?post='+download_id+'&action=edit"></a>'),clone.find(".download span a").text(download_title),clone.find(".edd-payment-details-download-item-price").val(item_price.toFixed(edd_vars.currency_decimals)),clone.find(".edd-payment-details-download-item-tax").val(item_total.toFixed(edd_vars.currency_decimals)),clone.find("input.edd-payment-details-download-id").val(download_id),clone.find("input.edd-payment-details-download-price-id").val(price_id);item_total=(item_total=item_price*quantity+item_total).toFixed(edd_vars.currency_decimals);clone.find("span.edd-payment-details-download-amount").text(item_total),clone.find("input.edd-payment-details-download-amount").val(item_total),clone.find("input.edd-payment-details-download-quantity").val(quantity),clone.find("input.edd-payment-details-download-has-log").val(0),clone.find(".edd-copy-download-link-wrapper").remove(),clone.find("input").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+parseInt(count)+"]");$(this).attr("name",name).attr("id",name)}),clone.find("a.edd-order-remove-download").attr("data-key",parseInt(count)),$("#edd-payment-downloads-changed").val(1),$("#edd-purchased-files div.row .edd-purchased-download-title .deleted").length&&$("#edd-purchased-files div.row:last").remove(),$(clone).insertAfter("#edd-purchased-files div.row:last"),$(".edd-order-payment-recalc-totals").show(),$(".edd-add-download-field").val("")})},edit_price:function(){$(document.body).on("change keyup",".edd-payment-item-input",function(){var row=$(this).parents("ul.edd-purchased-files-list-wrapper");$(".edd-order-payment-recalc-totals").show();var quantity=row.find("input.edd-payment-details-download-quantity").val().replace(edd_vars.thousands_separator,""),item_price=row.find("input.edd-payment-details-download-item-price").val().replace(edd_vars.thousands_separator,""),item_total=row.find("input.edd-payment-details-download-item-tax").val().replace(edd_vars.thousands_separator,""),item_price=parseFloat(item_price);if(isNaN(item_price))return alert(edd_vars.numeric_item_price),!1;item_total=parseFloat(item_total),isNaN(item_total)&&(item_total=0);item_total=(item_total=item_price*(quantity=isNaN(parseInt(quantity))?1:quantity)+item_total).toFixed(edd_vars.currency_decimals);row.find("input.edd-payment-details-download-amount").val(item_total),row.find("span.edd-payment-details-download-amount").text(item_total)})},recalculate_total:function(){$("#edd-order-recalc-total").on("click",function(taxes){taxes.preventDefault();var total=0,tax=0,totals=$("#edd-purchased-files .row input.edd-payment-details-download-amount"),taxes=$("#edd-purchased-files .row input.edd-payment-details-download-item-tax");totals.length&&totals.each(function(){total+=parseFloat($(this).val())}),taxes.length&&taxes.each(function(){tax+=parseFloat($(this).val())}),$(".edd-payment-fees").length&&$(".edd-payment-fees span.fee-amount").each(function(){total+=parseFloat($(this).data("fee"))}),$("input[name=edd-payment-total]").val(total.toFixed(edd_vars.currency_decimals)),$("input[name=edd-payment-tax]").val(tax.toFixed(edd_vars.currency_decimals))})},variable_prices_check:function(){$(".edd-edit-purchase-element").on("change","select#edd_order_download_select",function(){var $this=$(this),download_id=$this.val();0<parseInt(download_id)&&$.ajax({type:"POST",data:{action:"edd_check_for_download_price_variations",download_id:download_id},url:ajaxurl,success:function(response){$(".edd_price_options_select").remove(),$(response).insertAfter($this.next())}}).fail(function(data){window.console&&window.console.log&&console.log(data)})})},add_note:function(){$("#edd-add-payment-note").on("click",function(postData){postData.preventDefault();var border_color,postData={action:"edd_insert_payment_note",payment_id:$(this).data("payment-id"),note:$("#edd-payment-note").val()};postData.note?$.ajax({type:"POST",data:postData,url:ajaxurl,success:function(response){$("#edd-payment-notes-inner").append(response),$(".edd-no-payment-notes").hide(),$("#edd-payment-note").val("")}}).fail(function(data){window.console&&window.console.log&&console.log(data)}):(border_color=$("#edd-payment-note").css("border-color"),$("#edd-payment-note").css("border-color","red"),setTimeout(function(){$("#edd-payment-note").css("border-color",border_color)},500))})},remove_note:function(){$(document.body).on("click",".edd-delete-payment-note",function(e){if(e.preventDefault(),confirm(edd_vars.delete_payment_note)){var postData={action:"edd_delete_payment_note",payment_id:$(this).data("payment-id"),note_id:$(this).data("note-id")};return $.ajax({type:"POST",data:postData,url:ajaxurl,success:function(response){return $("#edd-payment-note-"+postData.note_id).remove(),$(".edd-payment-note").length||$(".edd-no-payment-notes").show(),!1}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!0}})},resend_receipt:function(){var emails_wrap=$(".edd-order-resend-receipt-addresses");$(document.body).on("click","#edd-select-receipt-email",function(e){e.preventDefault(),emails_wrap.slideDown()}),$(document.body).on("change",".edd-order-resend-receipt-email",function(){var href=$("#edd-select-receipt-email").prop("href")+"&email="+$(this).val();confirm(edd_vars.resend_receipt)&&(window.location=href)}),$(document.body).on("click","#edd-resend-receipt",function(e){return confirm(edd_vars.resend_receipt)})},copy_download_link:function(){$(document.body).on("click",".edd-copy-download-link",function(postData){postData.preventDefault();postData=$(this),postData={action:"edd_get_file_download_link",payment_id:$('input[name="edd_payment_id"]').val(),download_id:postData.data("download-id"),price_id:postData.data("price-id")};$.ajax({type:"POST",data:postData,url:ajaxurl,success:function(link){return $("#edd-download-link").dialog({width:400}).html('<textarea rows="10" cols="40" id="edd-download-link-textarea">'+link+"</textarea>"),$("#edd-download-link-textarea").focus().select(),!1}}).fail(function(data){window.console&&window.console.log&&console.log(data)})})}}.init(),{init:function(){this.type_select(),this.product_requirements()},type_select:function(){$("#edd-edit-discount #edd-type, #edd-add-discount #edd-type").change(function(){var val=$(this).val();$(".edd-amount-description").hide(),$(".edd-amount-description."+val+"-discount").show()})},product_requirements:function(){$("#products").change(function(){var product_conditions=$("#edd-discount-product-conditions");$(this).val()?product_conditions.show():product_conditions.hide()})}}.init(),{init:function(){this.date_options(),this.customers_export()},date_options:function(){$("#edd-graphs-date-options").change(function(){var $this=$(this),date_range_options=$("#edd-date-range-options");"other"===$this.val()?date_range_options.show():date_range_options.hide()})},customers_export:function(){$("#edd_customer_export_download").change(function(){var price_options_select,$this=$(this),data=$("option:selected",$this).val(),customer_export_option=$("#edd_customer_export_option");"0"===$this.val()?customer_export_option.show():customer_export_option.hide(),0!=parseInt(data)?(data={action:"edd_check_for_download_price_variations",download_id:data,all_prices:!0},price_options_select=$(".edd_price_options_select"),$.post(ajaxurl,data,function(response){price_options_select.remove(),$("#edd_customer_export_download_chosen").after(response)})):price_options_select.remove()})}}.init(),{init:function(){this.general(),this.taxes(),this.emails(),this.misc()},general:function(){var file_frame,edd_settings_upload_button=$(".edd-color-picker");edd_settings_upload_button.length&&edd_settings_upload_button.wpColorPicker(),"undefined"==typeof wp||"1"!==edd_vars.new_media_ui?0<(edd_settings_upload_button=$(".edd_settings_upload_button")).length&&(window.formfield="",$(document.body).on("click",edd_settings_upload_button,function(e){e.preventDefault(),window.formfield=$(this).parent().prev(),window.tbframe_interval=setInterval(function(){jQuery("#TB_iframeContent").contents().find(".savesend .button").val(edd_vars.use_this_file).end().find("#insert-gallery, .wp-post-thumbnail").hide()},2e3),tb_show(edd_vars.add_new_download,"media-upload.php?TB_iframe=true")}),window.edd_send_to_editor=window.send_to_editor,window.send_to_editor=function(html){window.formfield?(imgurl=$("a","<div>"+html+"</div>").attr("href"),window.formfield.val(imgurl),window.clearInterval(window.tbframe_interval),tb_remove()):window.edd_send_to_editor(html),window.send_to_editor=window.edd_send_to_editor,window.formfield="",window.imagefield=!1}):(window.formfield="",$(document.body).on("click",".edd_settings_upload_button",function(button){button.preventDefault();button=$(this);window.formfield=$(this).parent().prev(),file_frame||((file_frame=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:button.data("uploader_title"),button:{text:button.data("uploader_button_text")},multiple:!1})).on("menu:render:default",function(view){view.unset("library-separator"),view.unset("gallery"),view.unset("featured-image"),view.unset("embed"),view.set({})}),file_frame.on("insert",function(){file_frame.state().get("selection").each(function(attachment,index){attachment=attachment.toJSON(),window.formfield.val(attachment.url)})})),file_frame.open()}),window.formfield="")},taxes:function(){var no_states=$("select.edd-no-states");no_states.length&&no_states.closest("tr").addClass("hidden"),$('select[name="edd_settings[base_country]"]').change(function(){var data=$(this),$tr=data.closest("tr"),data={action:"edd_get_shop_states",country:data.val(),nonce:data.data("nonce"),field_name:"edd_settings[base_state]"};return $.post(ajaxurl,data,function(response){"nostates"==response?$tr.next().addClass("hidden"):($tr.next().removeClass("hidden"),$tr.next().find("select").replaceWith(response))}),!1}),$(document.body).on("change","#edd_tax_rates select.edd-tax-country",function(){var $this=$(this),data={action:"edd_get_shop_states",country:$this.val(),nonce:$this.data("nonce"),field_name:$this.attr("name").replace("country","state")};return $.post(ajaxurl,data,function(response){var text_field;"nostates"==response?(text_field='<input type="text" name="'+data.field_name+'" value=""/>',$this.parent().next().find("select").replaceWith(text_field)):($this.parent().next().find("input,select").show(),$this.parent().next().find("input,select").replaceWith(response))}),!1}),$("#edd_add_tax_rate").on("click",function(){var row=$("#edd_tax_rates tr:last"),clone=row.clone(),count=row.parent().find("tr").length;return clone.find("td input").not(":input[type=checkbox]").val(""),clone.find('td [type="checkbox"]').attr("checked",!1),clone.find("input, select").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+parseInt(count)+"]");$(this).attr("name",name).attr("id",name)}),clone.find("label").each(function(){var name=(name=$(this).attr("for")).replace(/\[(\d+)\]/,"["+parseInt(count)+"]");$(this).attr("for",name)}),clone.insertAfter(row),!1}),$(document.body).on("click","#edd_tax_rates .edd_remove_tax_rate",function(){return confirm(edd_vars.delete_tax_rate)&&(2===$("#edd_tax_rates tr:visible").length?($("#edd_tax_rates select").val(""),$('#edd_tax_rates input[type="text"]').val(""),$('#edd_tax_rates input[type="number"]').val(""),$('#edd_tax_rates input[type="checkbox"]').attr("checked",!1)):$(this).closest("tr").remove(),$("#edd_tax_rates tr").each(function(rowIndex){$(this).children().find("input, select").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+(rowIndex-1)+"]");$(this).attr("name",name).attr("id",name)})})),!1})},emails:function(){$("#edd-sendwp-connect").on("click",function(e){e.preventDefault(),$(this).html(edd_vars.wait+' <span class="edd-loading"></span>'),document.body.style.cursor="wait",easy_digital_downloads_sendwp_remote_install()}),$("#edd-sendwp-disconnect").on("click",function(e){e.preventDefault(),$(this).html(edd_vars.wait+' <span class="edd-loading dark"></span>'),document.body.style.cursor="wait",easy_digital_downloads_sendwp_disconnect()}),$("#edd-recapture-connect").on("click",function(e){e.preventDefault(),$(this).html(edd_vars.wait+' <span class="edd-loading"></span>'),document.body.style.cursor="wait",easy_digital_downloads_recapture_remote_install()})},misc:function(){var downloadMethod=$('select[name="edd_settings[download_method]"]'),symlink=downloadMethod.parent().parent().next();"direct"==downloadMethod.val()&&(symlink.hide(),symlink.find("input").prop("checked",!1)),downloadMethod.on("change",function(){"direct"==$(this).val()?(symlink.hide(),symlink.find("input").prop("checked",!1)):symlink.show()})}}.init(),$(".download_page_edd-payment-history .row-actions .delete a, a.edd-delete-payment").on("click",function(){return!!confirm(edd_vars.delete_payment)}),$("body").on("click","#the-list .editinline",function(){var post_id=(post_id=$(this).closest("tr").attr("id")).replace("post-",""),regprice=$("#post-"+post_id).find(".column-price .downloadprice-"+post_id).val();regprice!=$("#post-"+post_id+".column-price .downloadprice-"+post_id).val()?$(".regprice","#edd-download-data").val(regprice).attr("disabled",!1):$(".regprice","#edd-download-data").val(edd_vars.quick_edit_warning).attr("disabled","disabled")}),$(document.body).on("click","#bulk_edit",function(){var $price=$("#bulk-edit"),$post_ids=new Array;$price.find("#bulk-titles").children().each(function(){$post_ids.push($(this).attr("id").replace(/^(ttle)/i,""))});$price=$('#edd-download-data input[name="_edd_regprice"]').val();$.post(ajaxurl,{action:"edd_save_bulk_edit",edd_bulk_nonce:$post_ids,post_ids:$post_ids,price:$price})}),$(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),$(".edd-select-chosen .chosen-search input").each(function(){var placeholder=$(this).parent().parent().parent().prev("select.edd-select-chosen"),placeholder=(placeholder.data("search-type"),placeholder.data("search-placeholder"));$(this).attr("placeholder",placeholder)}),$(".chosen-choices").on("click",function(){var placeholder=$(this).parent().prev().data("search-placeholder");void 0===placeholder&&(placeholder=edd_vars.type_to_search),$(this).children("li").children("input").attr("placeholder",placeholder)});$(document.body).on("keyup",".edd-select.chosen-container .chosen-search input, .edd-select.chosen-container .search-field input",function(lastKey){var val=$(this).val(),container=$(this).closest(".edd-select-chosen"),select=(container.attr("id").replace("_chosen",""),container.prev()),no_bundles=container.hasClass("no-bundles"),variations=container.hasClass("variations"),lastKey=lastKey.which,search_type="edd_download_search";if(container.prev().data("search-type")){if("no_ajax"==select.data("search-type"))return;search_type="edd_"+select.data("search-type")+"_search"}val.length<=3&&"edd_download_search"==search_type||16==lastKey||13==lastKey||91==lastKey||17==lastKey||37==lastKey||38==lastKey||39==lastKey||40==lastKey||(clearTimeout(typingTimer),typingTimer=setTimeout(function(){$.ajax({type:"GET",url:ajaxurl,data:{action:search_type,s:val,no_bundles:no_bundles,variations:variations},dataType:"json",beforeSend:function(){select.closest("ul.chosen-results").empty()},success:function(data){$("option:not(:selected)",select).remove(),$.each(data,function(key,item){$('option[value="'+item.id+'"]',select).length||select.prepend('<option value="'+item.id+'">'+item.name+"</option>")}),$(".edd-select-chosen").trigger("chosen:updated"),select.next().find("input").val(val)}}).fail(function(response){window.console&&window.console.log&&console.log(response)}).done(function(response){})},342))}),$("#post").on("click",".edd-thickbox",function(){$(".edd-select-chosen","#choose-download").css("width","100%")}),{init:function(){this.revoke_api_key(),this.regenerate_api_key(),this.create_api_key(),this.recount_stats()},revoke_api_key:function(){$(document.body).on("click",".edd-revoke-api-key",function(e){return confirm(edd_vars.revoke_api_key)})},regenerate_api_key:function(){$(document.body).on("click",".edd-regenerate-api-key",function(e){return confirm(edd_vars.regenerate_api_key)})},create_api_key:function(){$(document.body).on("submit","#api-key-generate-form",function(e){var input=$('input[type="text"][name="user_id"]');input.css("border-color","#ddd");var user_id=input.val();if(user_id.length<1||0==user_id)return input.css("border-color","#ff0000"),!1})},recount_stats:function(){$(document.body).on("change","#recount-stats-type",function(){var export_form=$("#edd-tools-recount-form"),selected_type=$("option:selected",this).data("type"),submit_button=$("#recount-stats-submit"),products=$("#tools-product-dropdown");export_form.find(".notice-wrap").remove(),submit_button.removeClass("button-disabled").attr("disabled",!1),products.hide(),$(".edd-recount-stats-descriptions span").hide(),"recount-download"===selected_type?(products.show(),products.find(".edd-select-chosen").css("width","auto")):"reset-stats"===selected_type?(export_form.append('<div class="notice-wrap"></div>'),export_form.find(".notice-wrap").html('<div class="notice notice-warning"><p><input type="checkbox" id="confirm-reset" name="confirm_reset_store" value="1" /> <label for="confirm-reset">'+edd_vars.reset_stats_warn+"</label></p></div>"),$("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")):(products.hide(),products.val(0)),$("#"+selected_type).show()}),$(document.body).on("change","#confirm-reset",function(){$(this).is(":checked")?$("#recount-stats-submit").removeClass("button-disabled").removeAttr("disabled"):$("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")}),$("#edd-tools-recount-form").submit(function(e){var selection=$("#recount-stats-type").val(),export_form=$(this),selected_type=$("option:selected",this).data("type");if("reset-stats"===selected_type){if($("#confirm-reset").is(":checked"))return!0;has_errors=!0}export_form.find(".notice-wrap").remove(),export_form.append('<div class="notice-wrap"></div>');var notice_wrap=export_form.find(".notice-wrap"),has_errors=!1;if(null!==selection&&0!==selection||(notice_wrap.html('<div class="updated error"><p>'+edd_vars.batch_export_no_class+"</p></div>"),has_errors=!0),"recount-download"===selected_type&&0==$('select[name="download_id"]').val()&&(notice_wrap.html('<div class="updated error"><p>'+edd_vars.batch_export_no_reqs+"</p></div>"),has_errors=!0),has_errors)return export_form.find(".button-disabled").removeClass("button-disabled"),!1})}}.init(),{init:function(){this.submit(),this.dismiss_message()},submit:function(){var self=this;$(document.body).on("submit",".edd-export-form",function(data){data.preventDefault();var submitButton=$(this).find('input[type="submit"]');submitButton.hasClass("button-disabled")||(data=$(this).serialize(),submitButton.addClass("button-disabled"),$(this).find(".notice-wrap").remove(),$(this).append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),self.process_step(1,data,self))})},process_step:function(step,data,self){$.ajax({type:"POST",url:ajaxurl,data:{form:data,action:"edd_do_ajax_export",step:step},dataType:"json",success:function(response){var export_form,notice_wrap,success_message;"done"==response.step||response.error||response.success?(notice_wrap=(export_form=$(".edd-export-form").find(".edd-progress").parent().parent()).find(".notice-wrap"),export_form.find(".button-disabled").removeClass("button-disabled"),response.error?(success_message=response.message,notice_wrap.html('<div class="updated error"><p>'+success_message+"</p></div>")):response.success?(success_message=response.message,notice_wrap.html('<div id="edd-batch-success" class="updated notice is-dismissible"><p>'+success_message+'<span class="notice-dismiss"></span></p></div>')):(notice_wrap.remove(),window.location=response.url)):($(".edd-progress div").animate({width:response.percentage+"%"},50,function(){}),self.process_step(parseInt(response.step),data,self))}}).fail(function(response){window.console&&window.console.log&&console.log(response)})},dismiss_message:function(){$(document.body).on("click","#edd-batch-success .notice-dismiss",function(){$("#edd-batch-success").parent().slideUp("fast")})}}.init();var EDD_Import={init:function(){this.submit()},submit:function(){$(".edd-import-form").ajaxForm({beforeSubmit:this.before_submit,success:this.success,complete:this.complete,dataType:"json",error:this.error})},before_submit:function(arr,notice_wrap,options){if(notice_wrap.find(".notice-wrap").remove(),notice_wrap.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),!(window.File&&window.FileReader&&window.FileList&&window.Blob)){var import_form=$(".edd-import-form").find(".edd-progress").parent().parent(),notice_wrap=import_form.find(".notice-wrap");return import_form.find(".button-disabled").removeClass("button-disabled"),notice_wrap.html('<div class="update error"><p>'+edd_vars.unsupported_browser+"</p></div>"),!1}},success:function(responseText,statusText,xhr,$form){},complete:function(xhr){var $form,select,options,columns,response=jQuery.parseJSON(xhr.responseText);response.success?(($form=$(".edd-import-form .notice-wrap").parent()).find(".edd-import-file-wrap,.notice-wrap").remove(),$form.find(".edd-import-options").slideDown(),(select=$form.find("select.edd-import-csv-column")).parents("tr").first(),options="",columns=response.data.columns.sort(function(a,b){return a<b?-1:b<a?1:0}),$.each(columns,function(key,value){options+='<option value="'+value+'">'+value+"</option>"}),select.append(options),select.on("change",function(){var $key=$(this).val();$key&&0!=response.data.first_row[$key]?$(this).parent().next().html(response.data.first_row[$key]):$(this).parent().next().html("")}),$.each(select,function(){$(this).val($(this).attr("data-field")).change()}),$(document.body).on("click",".edd-import-proceed",function(e){e.preventDefault(),$form.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),response.data.mapping=$form.serialize(),EDD_Import.process_step(1,response.data,self)})):EDD_Import.error(xhr)},error:function(notice_wrap){var response=jQuery.parseJSON(notice_wrap.responseText),import_form=$(".edd-import-form").find(".edd-progress").parent().parent(),notice_wrap=import_form.find(".notice-wrap");import_form.find(".button-disabled").removeClass("button-disabled"),response.data.error?notice_wrap.html('<div class="update error"><p>'+response.data.error+"</p></div>"):notice_wrap.remove()},process_step:function(step,import_data,self){$.ajax({type:"POST",url:ajaxurl,data:{form:import_data.form,nonce:import_data.nonce,class:import_data.class,upload:import_data.upload,mapping:import_data.mapping,action:"edd_do_ajax_import",step:step},dataType:"json",success:function(response){var import_form,notice_wrap;"done"==response.data.step||response.data.error?(notice_wrap=(import_form=$(".edd-import-form").find(".edd-progress").parent().parent()).find(".notice-wrap"),import_form.find(".button-disabled").removeClass("button-disabled"),response.data.error?notice_wrap.html('<div class="update error"><p>'+response.data.error+"</p></div>"):(import_form.find(".edd-import-options").hide(),$("html, body").animate({scrollTop:import_form.parent().offset().top},500),notice_wrap.html('<div class="updated"><p>'+response.data.message+"</p></div>"))):($(".edd-progress div").animate({width:response.data.percentage+"%"},50,function(){}),EDD_Import.process_step(parseInt(response.data.step),import_data,self))}}).fail(function(response){window.console&&window.console.log&&console.log(response)})}};EDD_Import.init();var EDD_Customer={vars:{customer_card_wrap_editable:$(".edd-customer-card-wrapper .editable"),customer_card_wrap_edit_item:$(".edd-customer-card-wrapper .edit-item"),user_id:$('input[name="customerinfo[user_id]"]'),state_input:$(':input[name="customerinfo[state]"]'),note:$("#customer-note")},init:function(){this.edit_customer(),this.add_email(),this.user_search(),this.remove_user(),this.cancel_edit(),this.change_country(),this.add_note(),this.delete_checked()},edit_customer:function(){$(document.body).on("click","#edit-customer",function(e){e.preventDefault(),EDD_Customer.vars.customer_card_wrap_editable.hide(),EDD_Customer.vars.customer_card_wrap_edit_item.fadeIn().css("display","block")})},add_email:function(){$(document.body).on("click","#add-customer-email",function(nonce){nonce.preventDefault();var button=$(this),wrapper=button.parent();wrapper.parent().find(".notice-container").remove(),wrapper.find(".spinner").css("visibility","visible"),button.attr("disabled",!0);var customer_id=wrapper.find('input[name="customer-id"]').val(),email=wrapper.find('input[name="additional-email"]').val(),primary=wrapper.find('input[name="make-additional-primary"]').is(":checked"),nonce=wrapper.find('input[name="add_email_nonce"]').val();$.post(ajaxurl,{edd_action:"customer-add-email",customer_id:customer_id,email:email,primary:primary,_wpnonce:nonce},function(response){!0===response.success?window.location.href=response.redirect:(button.attr("disabled",!1),wrapper.after('<div class="notice-container"><div class="notice notice-error inline"><p>'+response.message+"</p></div></div>"),wrapper.find(".spinner").css("visibility","hidden"))},"json")})},user_search:function(){$(document.body).on("click.eddSelectUser",".edd_user_search_results a",function(user_id){user_id.preventDefault();user_id=$(this).data("userid");EDD_Customer.vars.user_id.val(user_id)})},remove_user:function(){$(document.body).on("click","#disconnect-customer",function(postData){postData.preventDefault(),confirm(edd_vars.disconnect_customer)&&(postData={edd_action:"disconnect-userid",customer_id:$('input[name="customerinfo[id]"]').val(),_wpnonce:$("#edit-customer-info #_wpnonce").val()},$.post(ajaxurl,postData,function(response){window.location.href=window.location.href},"json"))})},cancel_edit:function(){$(document.body).on("click","#edd-edit-customer-cancel",function(e){e.preventDefault(),EDD_Customer.vars.customer_card_wrap_edit_item.hide(),EDD_Customer.vars.customer_card_wrap_editable.show(),$(".edd_user_search_results").html("")})},change_country:function(){$('select[name="customerinfo[country]"]').change(function(){var $this=$(this),data={action:"edd_get_shop_states",country:$this.val(),nonce:$this.data("nonce"),field_name:"customerinfo[state]"};return $.post(ajaxurl,data,function(response){"nostates"==response?EDD_Customer.vars.state_input.replaceWith('<input type="text" name="'+data.field_name+'" value="" class="edd-edit-toggles medium-text"/>'):EDD_Customer.vars.state_input.replaceWith(response)}),!1})},add_note:function(){$(document.body).on("click","#add-customer-note",function(postData){postData.preventDefault();var border_color,postData={edd_action:"add-customer-note",customer_id:$("#customer-id").val(),customer_note:EDD_Customer.vars.note.val(),add_customer_note_nonce:$("#add_customer_note_nonce").val()};postData.customer_note?$.ajax({type:"POST",data:postData,url:ajaxurl,success:function(response){$("#edd-customer-notes").prepend(response),$(".edd-no-customer-notes").hide(),EDD_Customer.vars.note.val("")}}).fail(function(data){window.console&&window.console.log&&console.log(data)}):(border_color=EDD_Customer.vars.note.css("border-color"),EDD_Customer.vars.note.css("border-color","red"),setTimeout(function(){EDD_Customer.vars.note.css("border-color",border_color)},500))})},delete_checked:function(){$("#edd-customer-delete-confirm").change(function(){var records_input=$("#edd-customer-delete-records"),submit_button=$("#edd-delete-customer");$(this).prop("checked")?(records_input.attr("disabled",!1),submit_button.attr("disabled",!1)):(records_input.attr("disabled",!0),records_input.prop("checked",!1),submit_button.attr("disabled",!0))})}};EDD_Customer.init();var EDD_Promo_Notices={init:function(){EDD_Promo_Notices.displayNotices(),EDD_Promo_Notices.dismissNotices()},displayNotices:function(){var topOfPageNoticeEl,topOfPageNotice=$(".edd-admin-notice-top-of-page");topOfPageNotice&&(topOfPageNoticeEl=topOfPageNotice.detach(),$("#wpbody-content").prepend(topOfPageNoticeEl),topOfPageNotice.delay(1e3).slideDown())},dismissNotices:function(){$(".edd-promo-notice").each(function(){var notice=$(this);notice.on("click",".edd-promo-notice-dismiss",function(e){e.preventDefault(),$.ajax({type:"POST",data:{action:"edd_dismiss_promo_notice",notice_id:notice.data("id"),nonce:notice.data("nonce"),lifespan:notice.data("lifespan")},url:ajaxurl,success:function(response){notice.slideUp()}})})})}};EDD_Promo_Notices.init(),$(".edd-ajax-user-search").keyup(function(){var user_search=$(this).val(),data="";$(this).data("exclude")&&(data=$(this).data("exclude")),$(".edd-ajax").show();data={action:"edd_search_users",user_name:user_search,exclude:data};document.body.style.cursor="wait",$.ajax({type:"POST",data:data,dataType:"json",url:ajaxurl,success:function(search_response){$(".edd-ajax").hide(),$(".edd_user_search_results").removeClass("hidden"),$(".edd_user_search_results span").html(""),$(search_response.results).appendTo(".edd_user_search_results span"),document.body.style.cursor="default"}})}),$(document.body).on("click.eddSelectUser",".edd_user_search_results span a",function(login){login.preventDefault();login=$(this).data("login");$(".edd-ajax-user-search").val(login),$(".edd_user_search_results").addClass("hidden"),$(".edd_user_search_results span").html("")}),$(document.body).on("click.eddCancelUserSearch",".edd_user_search_results a.edd-ajax-user-cancel",function(e){e.preventDefault(),$(".edd-ajax-user-search").val(""),$(".edd_user_search_results").addClass("hidden"),$(".edd_user_search_results span").html("")}),$("#edd_dashboard_sales").length&&$.ajax({type:"GET",data:{action:"edd_load_dashboard_widget"},url:ajaxurl,success:function(response){$("#edd_dashboard_sales .inside").html(response)}}),$(document.body).on("keydown",".customer-note-input",function(e){13==e.keyCode&&(e.metaKey||e.ctrlKey)&&$("#add-customer-note").click()})});var eddFormatCurrency=function(decimalPlaces){var numeric=parseFloat(decimalPlaces),storeCurrency=edd_vars.currency,decimalPlaces=edd_vars.currency_decimals;return numeric.toLocaleString(storeCurrency,{style:"currency",currency:storeCurrency,minimumFractionDigits:decimalPlaces,maximumFractionDigits:decimalPlaces})},eddFormatNumber=function(storeCurrency){var numeric=parseFloat(storeCurrency),storeCurrency=edd_vars.currency;edd_vars.currency_decimals;return numeric.toLocaleString(storeCurrency,{style:"decimal",minimumFractionDigits:0,maximumFractionDigits:0})},eddLabelFormatter=function(label,series){return'<div style="font-size:12px; text-align:center; padding:2px">'+label+"</div>"},eddLegendFormatterSales=function(item,series){var slug=item.toLowerCase().replace(/\s/g,"-"),color='<div class="edd-legend-color" style="background-color: '+series.color+'"></div>',item='<div class="edd-pie-legend-item">'+item+": "+Math.round(series.percent)+"% ("+eddFormatNumber(series.data[0][1])+")</div>",item='<div id="'+series.edd_vars.id+slug+'" class="edd-legend-item-wrapper">'+color+item+"</div>";return jQuery("#edd-pie-legend-"+series.edd_vars.id).append(item),item},eddLegendFormatterEarnings=function(item,series){var slug=item.toLowerCase().replace(/\s/g,"-"),color='<div class="edd-legend-color" style="background-color: '+series.color+'"></div>',item='<div class="edd-pie-legend-item">'+item+": "+Math.round(series.percent)+"% ("+eddFormatCurrency(series.data[0][1])+")</div>",item='<div id="'+series.edd_vars.id+slug+'" class="edd-legend-item-wrapper">'+color+item+"</div>";return jQuery("#edd-pie-legend-"+series.edd_vars.id).append(item),item};function edd_attach_tooltips(selector){selector.tooltip({content:function(){return jQuery(this).prop("title")},tooltipClass:"edd-ui-tooltip",position:{my:"center top",at:"center bottom+10",collision:"flipfit"},hide:{duration:200},show:{duration:200}})}function easy_digital_downloads_sendwp_remote_install(){jQuery.post(ajaxurl,{action:"edd_sendwp_remote_install"},function(response){response.success||!confirm(response.data.error)?easy_digital_downloads_sendwp_register_client(response.data.register_url,response.data.client_name,response.data.client_secret,response.data.client_redirect,response.data.partner_id):location.reload()})}function easy_digital_downloads_sendwp_disconnect(){jQuery.post(ajaxurl,{action:"edd_sendwp_disconnect"},function(response){location.reload()})}function easy_digital_downloads_sendwp_register_client(register_url,client_name,client_secret,client_redirect,partner_id){var form=document.createElement("form");function easy_digital_downloads_sendwp_append_form_input(name,value){var input=document.createElement("input");input.setAttribute("type","hidden"),input.setAttribute("name",name),input.setAttribute("value",value),form.appendChild(input)}form.setAttribute("method","POST"),form.setAttribute("action",register_url),easy_digital_downloads_sendwp_append_form_input("client_name",client_name),easy_digital_downloads_sendwp_append_form_input("client_secret",client_secret),easy_digital_downloads_sendwp_append_form_input("client_redirect",client_redirect),easy_digital_downloads_sendwp_append_form_input("partner_id",partner_id),document.body.appendChild(form),form.submit()}function easy_digital_downloads_recapture_remote_install(){jQuery.post(ajaxurl,{action:"edd_recapture_remote_install"},function(response){0==response.success&&confirm(response.data.error)?location.reload():window.location.href="https://recapture.io/register"})}
|
1 |
+
jQuery(document).ready(function($){edd_attach_tooltips($(".edd-help-tip"));var EDD_Download_Configuration={init:function(){this.add(),this.move(),this.remove(),this.type(),this.prices(),this.files(),this.updatePrices()},clone_repeatable:function(row){var key;highest=1;return row.parent().find(".edd_repeatable_row").each(function(){var current=$(this).data("key");parseInt(current)>highest&&(highest=current)}),key=highest+=1,clone=row.clone(),clone.removeClass("edd_add_blank"),clone.attr("data-key",key),clone.find("input, select, textarea").val("").each(function(){var name=$(this).attr("name"),id=$(this).attr("id");name&&(name=name.replace(/\[(\d+)\]/,"["+parseInt(key)+"]"),$(this).attr("name",name)),$(this).attr("data-key",key),void 0!==id&&(id=id.replace(/(\d+)/,parseInt(key)),$(this).attr("id",id))}),clone.find("select").each(function(){$(this).val(row.find('select[name="'+$(this).attr("name")+'"]').val())}),clone.find('input[type="checkbox"]').each(function(){$(this).is(":checked")&&$(this).prop("checked",!1),$(this).val(1)}),clone.find("span.edd_price_id").each(function(){$(this).text(parseInt(key))}),clone.find("span.edd_file_id").each(function(){$(this).text(parseInt(key))}),clone.find(".edd_repeatable_default_input").each(function(){$(this).val(parseInt(key)).removeAttr("checked")}),clone.find(".edd_repeatable_index").each(function(){$(this).val(parseInt(key))}),clone.find(".edd_repeatable_condition_field").each(function(){$(this).find("option:eq(0)").prop("selected","selected")}),clone.find(".search-choice").remove(),clone.find(".chosen-container").remove(),edd_attach_tooltips(clone.find(".edd-help-tip")),clone},add:function(){$(document.body).on("click",".submit .edd_add_repeatable",function(clone){clone.preventDefault();var row=$(this).parent().parent().prev(".edd_repeatable_row"),clone=EDD_Download_Configuration.clone_repeatable(row);clone.insertAfter(row).find("input, textarea, select").filter(":visible").eq(0).focus(),clone.find(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),clone.find(".edd-select-chosen").css("width","100%"),clone.find(".edd-select-chosen .chosen-search input").attr("placeholder",edd_vars.search_placeholder)})},move:function(){$(".edd_repeatable_table .edd-repeatables-wrap").sortable({handle:".edd-draghandle-anchor",items:".edd_repeatable_row",opacity:.6,cursor:"move",axis:"y",update:function(){var count=0;$(this).find(".edd_repeatable_row").each(function(){$(this).find("input.edd_repeatable_index").each(function(){$(this).val(count)}),count++})}})},remove:function(){$(document.body).on("click",".edd-remove-row, .edd_remove_repeatable",function(firstFocusable){firstFocusable.preventDefault();var row=$(this).parents(".edd_repeatable_row"),count=row.parent().find(".edd_repeatable_row").length,type=$(this).data("type"),repeatable="div.edd_repeatable_"+type+"s",price_row_id=$(this).is(".ui-sortable .edd_repeatable_row:first-child .edd-remove-row, .ui-sortable .edd_repeatable_row:first-child .edd_remove_repeatable")?row.next(".edd_repeatable_row"):row.prev(".edd_repeatable_row"),firstFocusable=price_row_id.find("select, input, textarea, button").filter(":visible").eq(0);if("price"===type&&(price_row_id=row.data("key"),$('.edd_repeatable_condition_field option[value="'+price_row_id+'"]').remove()),1<count)$("input, select",row).val(""),row.fadeOut("fast").remove(),firstFocusable.focus();else switch(type){case"price":alert(edd_vars.one_price_min);break;case"file":$("input, select",row).val("");break;default:alert(edd_vars.one_field_min)}$(repeatable).each(function(rowIndex){$(this).find("input, select").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+rowIndex+"]");$(this).attr("name",name).attr("id",name)})})})},type:function(){$(document.body).on("change","#_edd_product_type",function(e){var edd_products=$("#edd_products"),edd_download_files=$("#edd_download_files"),edd_download_limit_wrap=$("#edd_download_limit_wrap");"bundle"===$(this).val()?(edd_products.show(),edd_download_files.hide(),edd_download_limit_wrap.hide()):(edd_products.hide(),edd_download_files.show(),edd_download_limit_wrap.show())})},prices:function(){$(document.body).on("change","#edd_variable_pricing",function(e){var checked=$(this).is(":checked"),single=$("#edd_regular_price_field"),variable=$("#edd_variable_price_fields, .edd_repeatable_table .pricing"),bundleRow=$(".edd-bundled-product-row, .edd-repeatable-row-standard-fields");checked?(single.hide(),variable.show(),bundleRow.addClass("has-variable-pricing")):(single.show(),variable.hide(),bundleRow.removeClass("has-variable-pricing"))})},files:function(){var file_frame;window.formfield="",$(document.body).on("click",".edd_upload_file_button",function(button){button.preventDefault();button=$(this);window.formfield=$(this).closest(".edd_repeatable_upload_wrapper"),file_frame||((file_frame=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:button.data("uploader-title"),button:{text:button.data("uploader-button-text")},multiple:"0"!=$(this).data("multiple")})).on("menu:render:default",function(view){view.unset("library-separator"),view.unset("gallery"),view.unset("featured-image"),view.unset("embed"),view.set({})}),file_frame.on("insert",function(){file_frame.state().get("selection").each(function(attachment,clone){var row,selectedSize="image"===(attachment=attachment.toJSON()).type&&$(".attachment-display-settings .size option:selected").val(),selectedURL=attachment.url,selectedName=0<attachment.title.length?attachment.title:attachment.filename;selectedSize&&void 0!==attachment.sizes[selectedSize]&&(selectedURL=attachment.sizes[selectedSize].url),"image"===attachment.type&&(selectedName=selectedSize&&void 0!==attachment.sizes[selectedSize]?selectedName+"-"+attachment.sizes[selectedSize].width+"x"+attachment.sizes[selectedSize].height:selectedName+"-"+attachment.width+"x"+attachment.height),0===clone?(window.formfield.find(".edd_repeatable_attachment_id_field").val(attachment.id),window.formfield.find(".edd_repeatable_thumbnail_size_field").val(selectedSize),window.formfield.find(".edd_repeatable_upload_field").val(selectedURL),window.formfield.find(".edd_repeatable_name_field").val(selectedName)):(row=window.formfield,(clone=EDD_Download_Configuration.clone_repeatable(row)).find(".edd_repeatable_attachment_id_field").val(attachment.id),clone.find(".edd_repeatable_thumbnail_size_field").val(selectedSize),clone.find(".edd_repeatable_upload_field").val(selectedURL),clone.find(".edd_repeatable_name_field").val(selectedName),clone.insertAfter(row))})})),file_frame.open()}),window.formfield=""},updatePrices:function(){$("#edd_price_fields").on("keyup",".edd_variable_prices_name",function(){var key=$(this).parents(".edd_repeatable_row").data("key"),name=$(this).val(),field_option=$(".edd_repeatable_condition_field option[value="+key+"]");0<field_option.length?field_option.text(name):$(".edd_repeatable_condition_field").append($("<option></option>").attr("value",key).text(name))})}};$(document.body).on("click",".toggle-custom-price-option-section",function(header){header.preventDefault();var show=$(this).html()==edd_vars.show_advanced_settings;show?$(this).html(edd_vars.hide_advanced_settings):$(this).html(edd_vars.show_advanced_settings);header=$(this).parents(".edd-repeatable-row-header");header.siblings(".edd-custom-price-option-sections-wrap").slideToggle(),$(":input:not(input[type=button],input[type=submit],button):visible:first",show?header.siblings(".edd-custom-price-option-sections-wrap"):header.siblings(".edd-repeatable-row-standard-fields")).focus()}),EDD_Download_Configuration.init();var typingTimer,edd_datepicker=$(".edd_datepicker");0<edd_datepicker.length&&edd_datepicker.datepicker({dateFormat:"mm/dd/yy"}),{init:function(){this.edit_address(),this.remove_download(),this.add_download(),this.change_customer(),this.new_customer(),this.edit_price(),this.recalculate_total(),this.variable_prices_check(),this.add_note(),this.remove_note(),this.resend_receipt(),this.copy_download_link()},edit_address:function(){$('select[name="edd-payment-address[0][country]"]').change(function(){var data=$(this),data={action:"edd_get_shop_states",country:data.val(),nonce:data.data("nonce"),field_name:"edd-payment-address[0][state]"};return $.post(ajaxurl,data,function(response){var state_wrapper=$("#edd-order-address-state-wrap select, #edd-order-address-state-wrap input");$("#edd-order-address-state-wrap .chosen-container").remove(),"nostates"==response?state_wrapper.replaceWith('<input type="text" name="edd-payment-address[0][state]" value="" class="edd-edit-toggles medium-text"/>'):state_wrapper.replaceWith(response)}),!1})},remove_download:function(){$("#edd-purchased-files").on("click",".edd-order-remove-download",function(){var key,download_id,price_id,quantity,amount,fees,currently_removed;return 1===$(document.body).find("#edd-purchased-files > .row:not(.header)").length?alert(edd_vars.one_download_min):confirm(edd_vars.delete_payment_download)&&(key=$(this).data("key"),$(".edd-payment-id").val(),download_id=$('input[name="edd-payment-details-downloads['+key+'][id]"]').val(),price_id=$('input[name="edd-payment-details-downloads['+key+'][price_id]"]').val(),quantity=$('input[name="edd-payment-details-downloads['+key+'][quantity]"]').val(),amount=$('input[name="edd-payment-details-downloads['+key+'][amount]"]').val(),$('input[name="edd-payment-details-downloads['+key+'][tax]"]').length&&(fees=$('input[name="edd-payment-details-downloads['+key+'][tax]"]').val()),$('input[name="edd-payment-details-downloads['+key+'][fees]"]').length&&(fees=$.parseJSON($('input[name="edd-payment-details-downloads['+key+'][fees]"]').val())),currently_removed=$('input[name="edd-payment-removed"]').val(),(currently_removed=(currently_removed=$.parseJSON(currently_removed)).length<1?{}:currently_removed)[key]=[{id:download_id,price_id:price_id,quantity:quantity,amount:amount,cart_index:key}],$('input[name="edd-payment-removed"]').val(JSON.stringify(currently_removed)),$(this).parent().parent().remove(),fees&&fees.length&&$.each(fees,function(key,value){$('*li[data-fee-id="'+value+'"]').remove()}),$("#edd-payment-downloads-changed").val(1),$(".edd-order-payment-recalc-totals").show()),!1})},change_customer:function(){$("#edd-customer-details").on("click",".edd-payment-change-customer, .edd-payment-change-customer-cancel",function(cancel){cancel.preventDefault();var change_customer=$(this).hasClass("edd-payment-change-customer"),cancel=$(this).hasClass("edd-payment-change-customer-cancel");change_customer?($(".customer-info").hide(),$(".change-customer").show(),$(".edd-payment-change-customer-input").css("width","auto")):cancel&&($(".customer-info").show(),$(".change-customer").hide())})},new_customer:function(){$("#edd-customer-details").on("click",".edd-payment-new-customer, .edd-payment-new-customer-cancel",function(cancel){cancel.preventDefault();var new_customer=$(this).hasClass("edd-payment-new-customer"),cancel=$(this).hasClass("edd-payment-new-customer-cancel");new_customer?($(".customer-info").hide(),$(".new-customer").show()):cancel&&($(".customer-info").show(),$(".new-customer").hide());new_customer=$("#edd-new-customer");$(".new-customer").is(":visible")?new_customer.val(1):new_customer.val(0)})},add_download:function(){$(".edd-edit-purchase-element").on("click","#edd-order-add-download",function(download_title){download_title.preventDefault();var quantity=$("#edd_order_download_select"),item_price=$("#edd-order-download-quantity"),item_total=$("#edd-order-download-price"),price_id=$("#edd-order-download-tax"),clone=$(".edd_price_options_select option:selected"),download_id=quantity.val(),download_title=quantity.find(":selected").text(),quantity=item_price.val(),item_price=item_total.val(),item_total=price_id.val(),price_id=clone.val(),clone=clone.text();if(download_id<1)return!1;if(item_price=item_price||0,item_price=parseFloat(item_price),isNaN(item_price))return alert(edd_vars.numeric_item_price),!1;if(item_total=parseFloat(item_total),isNaN(item_total))return alert(edd_vars.numeric_item_tax),!1;if(isNaN(parseInt(quantity)))return alert(edd_vars.numeric_quantity),!1;clone&&(download_title=download_title+" - "+clone);var count=$("#edd-purchased-files div.row:not(.edd-purchased-files-header)").length;0==count&&alert(edd_vars.no_downloads_error);clone=$("#edd-purchased-files div.row:not(.edd-purchased-files-header):last").clone();clone.find(".download span").html('<a href="post.php?post='+download_id+'&action=edit"></a>'),clone.find(".download span a").text(download_title),clone.find(".edd-payment-details-download-item-price").val(item_price.toFixed(edd_vars.currency_decimals)),clone.find(".edd-payment-details-download-item-tax").val(item_total.toFixed(edd_vars.currency_decimals)),clone.find("input.edd-payment-details-download-id").val(download_id),clone.find("input.edd-payment-details-download-price-id").val(price_id);item_total=(item_total=item_price*quantity+item_total).toFixed(edd_vars.currency_decimals);clone.find("span.edd-payment-details-download-amount").text(item_total),clone.find("input.edd-payment-details-download-amount").val(item_total),clone.find("input.edd-payment-details-download-quantity").val(quantity),clone.find("input.edd-payment-details-download-has-log").val(0),clone.find(".edd-copy-download-link-wrapper").remove(),clone.find("input").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+parseInt(count)+"]");$(this).attr("name",name).attr("id",name)}),clone.find("a.edd-order-remove-download").attr("data-key",parseInt(count)),$("#edd-payment-downloads-changed").val(1),$("#edd-purchased-files div.row .edd-purchased-download-title .deleted").length&&$("#edd-purchased-files div.row:last").remove(),$(clone).insertAfter("#edd-purchased-files div.row:last"),$(".edd-order-payment-recalc-totals").show(),$(".edd-add-download-field").val("")})},edit_price:function(){$(document.body).on("change keyup",".edd-payment-item-input",function(){var row=$(this).parents("ul.edd-purchased-files-list-wrapper");$(".edd-order-payment-recalc-totals").show();var quantity=row.find("input.edd-payment-details-download-quantity").val().replace(edd_vars.thousands_separator,""),item_price=row.find("input.edd-payment-details-download-item-price").val().replace(edd_vars.thousands_separator,""),item_total=row.find("input.edd-payment-details-download-item-tax").val().replace(edd_vars.thousands_separator,""),item_price=parseFloat(item_price);if(isNaN(item_price))return alert(edd_vars.numeric_item_price),!1;item_total=parseFloat(item_total),isNaN(item_total)&&(item_total=0);item_total=(item_total=item_price*(quantity=isNaN(parseInt(quantity))?1:quantity)+item_total).toFixed(edd_vars.currency_decimals);row.find("input.edd-payment-details-download-amount").val(item_total),row.find("span.edd-payment-details-download-amount").text(item_total)})},recalculate_total:function(){$("#edd-order-recalc-total").on("click",function(taxes){taxes.preventDefault();var total=0,tax=0,totals=$("#edd-purchased-files .row input.edd-payment-details-download-amount"),taxes=$("#edd-purchased-files .row input.edd-payment-details-download-item-tax");totals.length&&totals.each(function(){total+=parseFloat($(this).val())}),taxes.length&&taxes.each(function(){tax+=parseFloat($(this).val())}),$(".edd-payment-fees").length&&$(".edd-payment-fees span.fee-amount").each(function(){total+=parseFloat($(this).data("fee"))}),$("input[name=edd-payment-total]").val(total.toFixed(edd_vars.currency_decimals)),$("input[name=edd-payment-tax]").val(tax.toFixed(edd_vars.currency_decimals))})},variable_prices_check:function(){$(".edd-edit-purchase-element").on("change","select#edd_order_download_select",function(){var $this=$(this),download_id=$this.val();0<parseInt(download_id)&&$.ajax({type:"POST",data:{action:"edd_check_for_download_price_variations",download_id:download_id},url:ajaxurl,success:function(response){$(".edd_price_options_select").remove(),$(response).insertAfter($this.next())}}).fail(function(data){window.console&&window.console.log&&console.log(data)})})},add_note:function(){$("#edd-add-payment-note").on("click",function(postData){postData.preventDefault();var border_color,postData={action:"edd_insert_payment_note",payment_id:$(this).data("payment-id"),note:$("#edd-payment-note").val()};postData.note?$.ajax({type:"POST",data:postData,url:ajaxurl,success:function(response){$("#edd-payment-notes-inner").append(response),$(".edd-no-payment-notes").hide(),$("#edd-payment-note").val("")}}).fail(function(data){window.console&&window.console.log&&console.log(data)}):(border_color=$("#edd-payment-note").css("border-color"),$("#edd-payment-note").css("border-color","red"),setTimeout(function(){$("#edd-payment-note").css("border-color",border_color)},500))})},remove_note:function(){$(document.body).on("click",".edd-delete-payment-note",function(e){if(e.preventDefault(),confirm(edd_vars.delete_payment_note)){var postData={action:"edd_delete_payment_note",payment_id:$(this).data("payment-id"),note_id:$(this).data("note-id")};return $.ajax({type:"POST",data:postData,url:ajaxurl,success:function(response){return $("#edd-payment-note-"+postData.note_id).remove(),$(".edd-payment-note").length||$(".edd-no-payment-notes").show(),!1}}).fail(function(data){window.console&&window.console.log&&console.log(data)}),!0}})},resend_receipt:function(){var emails_wrap=$(".edd-order-resend-receipt-addresses");$(document.body).on("click","#edd-select-receipt-email",function(e){e.preventDefault(),emails_wrap.slideDown()}),$(document.body).on("change",".edd-order-resend-receipt-email",function(){var href=$("#edd-select-receipt-email").prop("href")+"&email="+$(this).val();confirm(edd_vars.resend_receipt)&&(window.location=href)}),$(document.body).on("click","#edd-resend-receipt",function(e){return confirm(edd_vars.resend_receipt)})},copy_download_link:function(){$(document.body).on("click",".edd-copy-download-link",function(postData){postData.preventDefault();postData=$(this),postData={action:"edd_get_file_download_link",payment_id:$('input[name="edd_payment_id"]').val(),download_id:postData.data("download-id"),price_id:postData.data("price-id")};$.ajax({type:"POST",data:postData,url:ajaxurl,success:function(link){return $("#edd-download-link").dialog({width:400}).html('<textarea rows="10" cols="40" id="edd-download-link-textarea">'+link+"</textarea>"),$("#edd-download-link-textarea").focus().select(),!1}}).fail(function(data){window.console&&window.console.log&&console.log(data)})})}}.init(),{init:function(){this.type_select(),this.product_requirements()},type_select:function(){$("#edd-edit-discount #edd-type, #edd-add-discount #edd-type").change(function(){var val=$(this).val();$(".edd-amount-description").hide(),$(".edd-amount-description."+val+"-discount").show()})},product_requirements:function(){$("#products").change(function(){var product_conditions=$("#edd-discount-product-conditions");$(this).val()?product_conditions.show():product_conditions.hide()})}}.init(),{init:function(){this.date_options(),this.customers_export()},date_options:function(){$("#edd-graphs-date-options").change(function(){var $this=$(this),date_range_options=$("#edd-date-range-options");"other"===$this.val()?date_range_options.show():date_range_options.hide()})},customers_export:function(){$("#edd_customer_export_download").change(function(){var price_options_select,$this=$(this),data=$("option:selected",$this).val(),customer_export_option=$("#edd_customer_export_option");"0"===$this.val()?customer_export_option.show():customer_export_option.hide(),0!=parseInt(data)?(data={action:"edd_check_for_download_price_variations",download_id:data,all_prices:!0},price_options_select=$(".edd_price_options_select"),$.post(ajaxurl,data,function(response){price_options_select.remove(),$("#edd_customer_export_download_chosen").after(response)})):price_options_select.remove()})}}.init(),{init:function(){this.general(),this.taxes(),this.emails(),this.misc()},general:function(){var file_frame,edd_settings_upload_button=$(".edd-color-picker");edd_settings_upload_button.length&&edd_settings_upload_button.wpColorPicker(),"undefined"==typeof wp||"1"!==edd_vars.new_media_ui?0<(edd_settings_upload_button=$(".edd_settings_upload_button")).length&&(window.formfield="",$(document.body).on("click",edd_settings_upload_button,function(e){e.preventDefault(),window.formfield=$(this).parent().prev(),window.tbframe_interval=setInterval(function(){jQuery("#TB_iframeContent").contents().find(".savesend .button").val(edd_vars.use_this_file).end().find("#insert-gallery, .wp-post-thumbnail").hide()},2e3),tb_show(edd_vars.add_new_download,"media-upload.php?TB_iframe=true")}),window.edd_send_to_editor=window.send_to_editor,window.send_to_editor=function(html){window.formfield?(imgurl=$("a","<div>"+html+"</div>").attr("href"),window.formfield.val(imgurl),window.clearInterval(window.tbframe_interval),tb_remove()):window.edd_send_to_editor(html),window.send_to_editor=window.edd_send_to_editor,window.formfield="",window.imagefield=!1}):(window.formfield="",$(document.body).on("click",".edd_settings_upload_button",function(button){button.preventDefault();button=$(this);window.formfield=$(this).parent().prev(),file_frame||((file_frame=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:button.data("uploader_title"),button:{text:button.data("uploader_button_text")},multiple:!1})).on("menu:render:default",function(view){view.unset("library-separator"),view.unset("gallery"),view.unset("featured-image"),view.unset("embed"),view.set({})}),file_frame.on("insert",function(){file_frame.state().get("selection").each(function(attachment,index){attachment=attachment.toJSON(),window.formfield.val(attachment.url)})})),file_frame.open()}),window.formfield="")},taxes:function(){var no_states=$("select.edd-no-states");no_states.length&&no_states.closest("tr").addClass("hidden"),$('select[name="edd_settings[base_country]"]').change(function(){var data=$(this),$tr=data.closest("tr"),data={action:"edd_get_shop_states",country:data.val(),nonce:data.data("nonce"),field_name:"edd_settings[base_state]"};return $.post(ajaxurl,data,function(response){"nostates"==response?$tr.next().addClass("hidden"):($tr.next().removeClass("hidden"),$tr.next().find("select").replaceWith(response))}),!1}),$(document.body).on("change","#edd_tax_rates select.edd-tax-country",function(){var $this=$(this),data={action:"edd_get_shop_states",country:$this.val(),nonce:$this.data("nonce"),field_name:$this.attr("name").replace("country","state")};return $.post(ajaxurl,data,function(response){var text_field;"nostates"==response?(text_field='<input type="text" name="'+data.field_name+'" value=""/>',$this.parent().next().find("select").replaceWith(text_field)):($this.parent().next().find("input,select").show(),$this.parent().next().find("input,select").replaceWith(response))}),!1}),$("#edd_add_tax_rate").on("click",function(){var row=$("#edd_tax_rates tr:last"),clone=row.clone(),count=row.parent().find("tr").length;return clone.find("td input").not(":input[type=checkbox]").val(""),clone.find('td [type="checkbox"]').attr("checked",!1),clone.find("input, select").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+parseInt(count)+"]");$(this).attr("name",name).attr("id",name)}),clone.find("label").each(function(){var name=(name=$(this).attr("for")).replace(/\[(\d+)\]/,"["+parseInt(count)+"]");$(this).attr("for",name)}),clone.insertAfter(row),!1}),$(document.body).on("click","#edd_tax_rates .edd_remove_tax_rate",function(){return confirm(edd_vars.delete_tax_rate)&&(2===$("#edd_tax_rates tr:visible").length?($("#edd_tax_rates select").val(""),$('#edd_tax_rates input[type="text"]').val(""),$('#edd_tax_rates input[type="number"]').val(""),$('#edd_tax_rates input[type="checkbox"]').attr("checked",!1)):$(this).closest("tr").remove(),$("#edd_tax_rates tr").each(function(rowIndex){$(this).children().find("input, select").each(function(){var name=(name=$(this).attr("name")).replace(/\[(\d+)\]/,"["+(rowIndex-1)+"]");$(this).attr("name",name).attr("id",name)})})),!1})},emails:function(){$("#edd-recapture-connect").on("click",function(e){e.preventDefault(),$(this).html(edd_vars.wait+' <span class="edd-loading"></span>'),document.body.style.cursor="wait",easy_digital_downloads_recapture_remote_install()})},misc:function(){var downloadMethod=$('select[name="edd_settings[download_method]"]'),symlink=downloadMethod.parent().parent().next();"direct"==downloadMethod.val()&&(symlink.hide(),symlink.find("input").prop("checked",!1)),downloadMethod.on("change",function(){"direct"==$(this).val()?(symlink.hide(),symlink.find("input").prop("checked",!1)):symlink.show()})}}.init(),$(".download_page_edd-payment-history .row-actions .delete a, a.edd-delete-payment").on("click",function(){return!!confirm(edd_vars.delete_payment)}),$("body").on("click","#the-list .editinline",function(){var post_id=(post_id=$(this).closest("tr").attr("id")).replace("post-",""),regprice=$("#post-"+post_id).find(".column-price .downloadprice-"+post_id).val();regprice!=$("#post-"+post_id+".column-price .downloadprice-"+post_id).val()?$(".regprice","#edd-download-data").val(regprice).attr("disabled",!1):$(".regprice","#edd-download-data").val(edd_vars.quick_edit_warning).attr("disabled","disabled")}),$(document.body).on("click","#bulk_edit",function(){var $price=$("#bulk-edit"),$post_ids=new Array;$price.find("#bulk-titles").children().each(function(){$post_ids.push($(this).attr("id").replace(/^(ttle)/i,""))});$price=$('#edd-download-data input[name="_edd_regprice"]').val();$.post(ajaxurl,{action:"edd_save_bulk_edit",edd_bulk_nonce:$post_ids,post_ids:$post_ids,price:$price})}),$(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),$(".edd-select-chosen .chosen-search input").each(function(){var placeholder=$(this).parent().parent().parent().prev("select.edd-select-chosen"),placeholder=(placeholder.data("search-type"),placeholder.data("search-placeholder"));$(this).attr("placeholder",placeholder)}),$(".chosen-choices").on("click",function(){var placeholder=$(this).parent().prev().data("search-placeholder");void 0===placeholder&&(placeholder=edd_vars.type_to_search),$(this).children("li").children("input").attr("placeholder",placeholder)});$(document.body).on("keyup",".edd-select.chosen-container .chosen-search input, .edd-select.chosen-container .search-field input",function(lastKey){var val=$(this).val(),container=$(this).closest(".edd-select-chosen"),select=(container.attr("id").replace("_chosen",""),container.prev()),no_bundles=container.hasClass("no-bundles"),variations=container.hasClass("variations"),lastKey=lastKey.which,search_type="edd_download_search";if(container.prev().data("search-type")){if("no_ajax"==select.data("search-type"))return;search_type="edd_"+select.data("search-type")+"_search"}val.length<=3&&"edd_download_search"==search_type||16==lastKey||13==lastKey||91==lastKey||17==lastKey||37==lastKey||38==lastKey||39==lastKey||40==lastKey||(clearTimeout(typingTimer),typingTimer=setTimeout(function(){$.ajax({type:"GET",url:ajaxurl,data:{action:search_type,s:val,no_bundles:no_bundles,variations:variations},dataType:"json",beforeSend:function(){select.closest("ul.chosen-results").empty()},success:function(data){$("option:not(:selected)",select).remove(),$.each(data,function(key,item){$('option[value="'+item.id+'"]',select).length||select.prepend('<option value="'+item.id+'">'+item.name+"</option>")}),$(".edd-select-chosen").trigger("chosen:updated"),select.next().find("input").val(val)}}).fail(function(response){window.console&&window.console.log&&console.log(response)}).done(function(response){})},342))}),$("#post").on("click",".edd-thickbox",function(){$(".edd-select-chosen","#choose-download").css("width","100%")}),{init:function(){this.revoke_api_key(),this.regenerate_api_key(),this.create_api_key(),this.recount_stats()},revoke_api_key:function(){$(document.body).on("click",".edd-revoke-api-key",function(e){return confirm(edd_vars.revoke_api_key)})},regenerate_api_key:function(){$(document.body).on("click",".edd-regenerate-api-key",function(e){return confirm(edd_vars.regenerate_api_key)})},create_api_key:function(){$(document.body).on("submit","#api-key-generate-form",function(e){var input=$('input[type="text"][name="user_id"]');input.css("border-color","#ddd");var user_id=input.val();if(user_id.length<1||0==user_id)return input.css("border-color","#ff0000"),!1})},recount_stats:function(){$(document.body).on("change","#recount-stats-type",function(){var export_form=$("#edd-tools-recount-form"),selected_type=$("option:selected",this).data("type"),submit_button=$("#recount-stats-submit"),products=$("#tools-product-dropdown");export_form.find(".notice-wrap").remove(),submit_button.removeClass("button-disabled").attr("disabled",!1),products.hide(),$(".edd-recount-stats-descriptions span").hide(),"recount-download"===selected_type?(products.show(),products.find(".edd-select-chosen").css("width","auto")):"reset-stats"===selected_type?(export_form.append('<div class="notice-wrap"></div>'),export_form.find(".notice-wrap").html('<div class="notice notice-warning"><p><input type="checkbox" id="confirm-reset" name="confirm_reset_store" value="1" /> <label for="confirm-reset">'+edd_vars.reset_stats_warn+"</label></p></div>"),$("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")):(products.hide(),products.val(0)),$("#"+selected_type).show()}),$(document.body).on("change","#confirm-reset",function(){$(this).is(":checked")?$("#recount-stats-submit").removeClass("button-disabled").removeAttr("disabled"):$("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")}),$("#edd-tools-recount-form").submit(function(e){var selection=$("#recount-stats-type").val(),export_form=$(this),selected_type=$("option:selected",this).data("type");if("reset-stats"===selected_type){if($("#confirm-reset").is(":checked"))return!0;has_errors=!0}export_form.find(".notice-wrap").remove(),export_form.append('<div class="notice-wrap"></div>');var notice_wrap=export_form.find(".notice-wrap"),has_errors=!1;if(null!==selection&&0!==selection||(notice_wrap.html('<div class="updated error"><p>'+edd_vars.batch_export_no_class+"</p></div>"),has_errors=!0),"recount-download"===selected_type&&0==$('select[name="download_id"]').val()&&(notice_wrap.html('<div class="updated error"><p>'+edd_vars.batch_export_no_reqs+"</p></div>"),has_errors=!0),has_errors)return export_form.find(".button-disabled").removeClass("button-disabled"),!1})}}.init(),{init:function(){this.submit(),this.dismiss_message()},submit:function(){var self=this;$(document.body).on("submit",".edd-export-form",function(data){data.preventDefault();var submitButton=$(this).find('input[type="submit"]');submitButton.hasClass("button-disabled")||(data=$(this).serialize(),submitButton.addClass("button-disabled"),$(this).find(".notice-wrap").remove(),$(this).append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),self.process_step(1,data,self))})},process_step:function(step,data,self){$.ajax({type:"POST",url:ajaxurl,data:{form:data,action:"edd_do_ajax_export",step:step},dataType:"json",success:function(response){var export_form,notice_wrap,success_message;"done"==response.step||response.error||response.success?(notice_wrap=(export_form=$(".edd-export-form").find(".edd-progress").parent().parent()).find(".notice-wrap"),export_form.find(".button-disabled").removeClass("button-disabled"),response.error?(success_message=response.message,notice_wrap.html('<div class="updated error"><p>'+success_message+"</p></div>")):response.success?(success_message=response.message,notice_wrap.html('<div id="edd-batch-success" class="updated notice is-dismissible"><p>'+success_message+'<span class="notice-dismiss"></span></p></div>')):(notice_wrap.remove(),window.location=response.url)):($(".edd-progress div").animate({width:response.percentage+"%"},50,function(){}),self.process_step(parseInt(response.step),data,self))}}).fail(function(response){window.console&&window.console.log&&console.log(response)})},dismiss_message:function(){$(document.body).on("click","#edd-batch-success .notice-dismiss",function(){$("#edd-batch-success").parent().slideUp("fast")})}}.init();var EDD_Import={init:function(){this.submit()},submit:function(){$(".edd-import-form").ajaxForm({beforeSubmit:this.before_submit,success:this.success,complete:this.complete,dataType:"json",error:this.error})},before_submit:function(arr,notice_wrap,options){if(notice_wrap.find(".notice-wrap").remove(),notice_wrap.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),!(window.File&&window.FileReader&&window.FileList&&window.Blob)){var import_form=$(".edd-import-form").find(".edd-progress").parent().parent(),notice_wrap=import_form.find(".notice-wrap");return import_form.find(".button-disabled").removeClass("button-disabled"),notice_wrap.html('<div class="update error"><p>'+edd_vars.unsupported_browser+"</p></div>"),!1}},success:function(responseText,statusText,xhr,$form){},complete:function(xhr){var $form,select,options,columns,response=jQuery.parseJSON(xhr.responseText);response.success?(($form=$(".edd-import-form .notice-wrap").parent()).find(".edd-import-file-wrap,.notice-wrap").remove(),$form.find(".edd-import-options").slideDown(),(select=$form.find("select.edd-import-csv-column")).parents("tr").first(),options="",columns=response.data.columns.sort(function(a,b){return a<b?-1:b<a?1:0}),$.each(columns,function(key,value){options+='<option value="'+value+'">'+value+"</option>"}),select.append(options),select.on("change",function(){var $key=$(this).val();$key&&0!=response.data.first_row[$key]?$(this).parent().next().html(response.data.first_row[$key]):$(this).parent().next().html("")}),$.each(select,function(){$(this).val($(this).attr("data-field")).change()}),$(document.body).on("click",".edd-import-proceed",function(e){e.preventDefault(),$form.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),response.data.mapping=$form.serialize(),EDD_Import.process_step(1,response.data,self)})):EDD_Import.error(xhr)},error:function(notice_wrap){var response=jQuery.parseJSON(notice_wrap.responseText),import_form=$(".edd-import-form").find(".edd-progress").parent().parent(),notice_wrap=import_form.find(".notice-wrap");import_form.find(".button-disabled").removeClass("button-disabled"),response.data.error?notice_wrap.html('<div class="update error"><p>'+response.data.error+"</p></div>"):notice_wrap.remove()},process_step:function(step,import_data,self){$.ajax({type:"POST",url:ajaxurl,data:{form:import_data.form,nonce:import_data.nonce,class:import_data.class,upload:import_data.upload,mapping:import_data.mapping,action:"edd_do_ajax_import",step:step},dataType:"json",success:function(response){var import_form,notice_wrap;"done"==response.data.step||response.data.error?(notice_wrap=(import_form=$(".edd-import-form").find(".edd-progress").parent().parent()).find(".notice-wrap"),import_form.find(".button-disabled").removeClass("button-disabled"),response.data.error?notice_wrap.html('<div class="update error"><p>'+response.data.error+"</p></div>"):(import_form.find(".edd-import-options").hide(),$("html, body").animate({scrollTop:import_form.parent().offset().top},500),notice_wrap.html('<div class="updated"><p>'+response.data.message+"</p></div>"))):($(".edd-progress div").animate({width:response.data.percentage+"%"},50,function(){}),EDD_Import.process_step(parseInt(response.data.step),import_data,self))}}).fail(function(response){window.console&&window.console.log&&console.log(response)})}};EDD_Import.init();var EDD_Customer={vars:{customer_card_wrap_editable:$(".edd-customer-card-wrapper .editable"),customer_card_wrap_edit_item:$(".edd-customer-card-wrapper .edit-item"),user_id:$('input[name="customerinfo[user_id]"]'),state_input:$(':input[name="customerinfo[state]"]'),note:$("#customer-note")},init:function(){this.edit_customer(),this.add_email(),this.user_search(),this.remove_user(),this.cancel_edit(),this.change_country(),this.add_note(),this.delete_checked()},edit_customer:function(){$(document.body).on("click","#edit-customer",function(e){e.preventDefault(),EDD_Customer.vars.customer_card_wrap_editable.hide(),EDD_Customer.vars.customer_card_wrap_edit_item.fadeIn().css("display","block")})},add_email:function(){$(document.body).on("click","#add-customer-email",function(nonce){nonce.preventDefault();var button=$(this),wrapper=button.parent();wrapper.parent().find(".notice-container").remove(),wrapper.find(".spinner").css("visibility","visible"),button.attr("disabled",!0);var customer_id=wrapper.find('input[name="customer-id"]').val(),email=wrapper.find('input[name="additional-email"]').val(),primary=wrapper.find('input[name="make-additional-primary"]').is(":checked"),nonce=wrapper.find('input[name="add_email_nonce"]').val();$.post(ajaxurl,{edd_action:"customer-add-email",customer_id:customer_id,email:email,primary:primary,_wpnonce:nonce},function(response){!0===response.success?window.location.href=response.redirect:(button.attr("disabled",!1),wrapper.after('<div class="notice-container"><div class="notice notice-error inline"><p>'+response.message+"</p></div></div>"),wrapper.find(".spinner").css("visibility","hidden"))},"json")})},user_search:function(){$(document.body).on("click.eddSelectUser",".edd_user_search_results a",function(user_id){user_id.preventDefault();user_id=$(this).data("userid");EDD_Customer.vars.user_id.val(user_id)})},remove_user:function(){$(document.body).on("click","#disconnect-customer",function(postData){postData.preventDefault(),confirm(edd_vars.disconnect_customer)&&(postData={edd_action:"disconnect-userid",customer_id:$('input[name="customerinfo[id]"]').val(),_wpnonce:$("#edit-customer-info #_wpnonce").val()},$.post(ajaxurl,postData,function(response){window.location.href=window.location.href},"json"))})},cancel_edit:function(){$(document.body).on("click","#edd-edit-customer-cancel",function(e){e.preventDefault(),EDD_Customer.vars.customer_card_wrap_edit_item.hide(),EDD_Customer.vars.customer_card_wrap_editable.show(),$(".edd_user_search_results").html("")})},change_country:function(){$('select[name="customerinfo[country]"]').change(function(){var $this=$(this),data={action:"edd_get_shop_states",country:$this.val(),nonce:$this.data("nonce"),field_name:"customerinfo[state]"};return $.post(ajaxurl,data,function(response){"nostates"==response?EDD_Customer.vars.state_input.replaceWith('<input type="text" name="'+data.field_name+'" value="" class="edd-edit-toggles medium-text"/>'):EDD_Customer.vars.state_input.replaceWith(response)}),!1})},add_note:function(){$(document.body).on("click","#add-customer-note",function(postData){postData.preventDefault();var border_color,postData={edd_action:"add-customer-note",customer_id:$("#customer-id").val(),customer_note:EDD_Customer.vars.note.val(),add_customer_note_nonce:$("#add_customer_note_nonce").val()};postData.customer_note?$.ajax({type:"POST",data:postData,url:ajaxurl,success:function(response){$("#edd-customer-notes").prepend(response),$(".edd-no-customer-notes").hide(),EDD_Customer.vars.note.val("")}}).fail(function(data){window.console&&window.console.log&&console.log(data)}):(border_color=EDD_Customer.vars.note.css("border-color"),EDD_Customer.vars.note.css("border-color","red"),setTimeout(function(){EDD_Customer.vars.note.css("border-color",border_color)},500))})},delete_checked:function(){$("#edd-customer-delete-confirm").change(function(){var records_input=$("#edd-customer-delete-records"),submit_button=$("#edd-delete-customer");$(this).prop("checked")?(records_input.attr("disabled",!1),submit_button.attr("disabled",!1)):(records_input.attr("disabled",!0),records_input.prop("checked",!1),submit_button.attr("disabled",!0))})}};EDD_Customer.init();var EDD_Promo_Notices={init:function(){EDD_Promo_Notices.displayNotices(),EDD_Promo_Notices.dismissNotices()},displayNotices:function(){var topOfPageNoticeEl,topOfPageNotice=$(".edd-admin-notice-top-of-page");topOfPageNotice&&(topOfPageNoticeEl=topOfPageNotice.detach(),$("#wpbody-content").prepend(topOfPageNoticeEl),topOfPageNotice.delay(1e3).slideDown())},dismissNotices:function(){$(".edd-promo-notice").each(function(){var notice=$(this);notice.on("click",".edd-promo-notice-dismiss",function(e){$(this).attr("href")||e.preventDefault(),$.ajax({type:"POST",data:{action:"edd_dismiss_promo_notice",notice_id:notice.data("id"),nonce:notice.data("nonce"),lifespan:notice.data("lifespan")},url:ajaxurl,success:function(response){notice.slideUp()}})})})}};EDD_Promo_Notices.init(),$(".edd-ajax-user-search").keyup(function(){var user_search=$(this).val(),data="";$(this).data("exclude")&&(data=$(this).data("exclude")),$(".edd-ajax").show();data={action:"edd_search_users",user_name:user_search,exclude:data};document.body.style.cursor="wait",$.ajax({type:"POST",data:data,dataType:"json",url:ajaxurl,success:function(search_response){$(".edd-ajax").hide(),$(".edd_user_search_results").removeClass("hidden"),$(".edd_user_search_results span").html(""),$(search_response.results).appendTo(".edd_user_search_results span"),document.body.style.cursor="default"}})}),$(document.body).on("click.eddSelectUser",".edd_user_search_results span a",function(login){login.preventDefault();login=$(this).data("login");$(".edd-ajax-user-search").val(login),$(".edd_user_search_results").addClass("hidden"),$(".edd_user_search_results span").html("")}),$(document.body).on("click.eddCancelUserSearch",".edd_user_search_results a.edd-ajax-user-cancel",function(e){e.preventDefault(),$(".edd-ajax-user-search").val(""),$(".edd_user_search_results").addClass("hidden"),$(".edd_user_search_results span").html("")}),$("#edd_dashboard_sales").length&&$.ajax({type:"GET",data:{action:"edd_load_dashboard_widget"},url:ajaxurl,success:function(response){$("#edd_dashboard_sales .edd-loading").html(response)}}),$(document.body).on("keydown",".customer-note-input",function(e){13==e.keyCode&&(e.metaKey||e.ctrlKey)&&$("#add-customer-note").click()})});var eddFormatCurrency=function(decimalPlaces){var numeric=parseFloat(decimalPlaces),storeCurrency=edd_vars.currency,decimalPlaces=edd_vars.currency_decimals;return numeric.toLocaleString(storeCurrency,{style:"currency",currency:storeCurrency,minimumFractionDigits:decimalPlaces,maximumFractionDigits:decimalPlaces})},eddFormatNumber=function(storeCurrency){var numeric=parseFloat(storeCurrency),storeCurrency=edd_vars.currency;edd_vars.currency_decimals;return numeric.toLocaleString(storeCurrency,{style:"decimal",minimumFractionDigits:0,maximumFractionDigits:0})},eddLabelFormatter=function(label,series){return'<div style="font-size:12px; text-align:center; padding:2px">'+label+"</div>"},eddLegendFormatterSales=function(item,series){var slug=item.toLowerCase().replace(/\s/g,"-"),color='<div class="edd-legend-color" style="background-color: '+series.color+'"></div>',item='<div class="edd-pie-legend-item">'+item+": "+Math.round(series.percent)+"% ("+eddFormatNumber(series.data[0][1])+")</div>",item='<div id="'+series.edd_vars.id+slug+'" class="edd-legend-item-wrapper">'+color+item+"</div>";return jQuery("#edd-pie-legend-"+series.edd_vars.id).append(item),item},eddLegendFormatterEarnings=function(item,series){var slug=item.toLowerCase().replace(/\s/g,"-"),color='<div class="edd-legend-color" style="background-color: '+series.color+'"></div>',item='<div class="edd-pie-legend-item">'+item+": "+Math.round(series.percent)+"% ("+eddFormatCurrency(series.data[0][1])+")</div>",item='<div id="'+series.edd_vars.id+slug+'" class="edd-legend-item-wrapper">'+color+item+"</div>";return jQuery("#edd-pie-legend-"+series.edd_vars.id).append(item),item};function edd_attach_tooltips(selector){selector.tooltip({content:function(){return jQuery(this).prop("title")},tooltipClass:"edd-ui-tooltip",position:{my:"center top",at:"center bottom+10",collision:"flipfit"},hide:{duration:200},show:{duration:200}})}function easy_digital_downloads_recapture_remote_install(){jQuery.post(ajaxurl,{action:"edd_recapture_remote_install"},function(response){0==response.success&&confirm(response.data.error)?location.reload():window.location.href="https://recapture.io/register"})}
|
assets/js/alpine.min.js
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(()=>{var Fe=!1,je=!1,J=[];function wt(e){Kr(e)}function Kr(e){J.includes(e)||J.push(e),zr()}function zr(){!je&&!Fe&&(Fe=!0,queueMicrotask(Vr))}function Vr(){Fe=!1,je=!0;for(let e=0;e<J.length;e++)J[e]();J.length=0,je=!1}var v,C,V,Ke,ze=!0;function Et(e){ze=!1,e(),ze=!0}function St(e){v=e.reactive,V=e.release,C=t=>e.effect(t,{scheduler:r=>{ze?wt(r):r()}}),Ke=e.raw}function Ve(e){C=e}function At(e){let t=()=>{};return[n=>{let i=C(n);e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),V(i))}},()=>{t()}]}var Ot=[],Tt=[],Rt=[];function Ct(e){Rt.push(e)}function Mt(e){Tt.push(e)}function Nt(e){Ot.push(e)}function kt(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function Be(e,t){!e._x_attributeCleanups||Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(i=>i()),delete e._x_attributeCleanups[r])})}var qe=new MutationObserver(He),Ue=!1;function We(){qe.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),Ue=!0}function Hr(){Br(),qe.disconnect(),Ue=!1}var Z=[],Ge=!1;function Br(){Z=Z.concat(qe.takeRecords()),Z.length&&!Ge&&(Ge=!0,queueMicrotask(()=>{qr(),Ge=!1}))}function qr(){He(Z),Z.length=0}function m(e){if(!Ue)return e();Hr();let t=e();return We(),t}var Ye=!1,pe=[];function Dt(){Ye=!0}function Pt(){Ye=!1,He(pe),pe=[]}function He(e){if(Ye){pe=pe.concat(e);return}let t=[],r=[],n=new Map,i=new Map;for(let o=0;o<e.length;o++)if(!e[o].target._x_ignoreMutationObserver&&(e[o].type==="childList"&&(e[o].addedNodes.forEach(s=>s.nodeType===1&&t.push(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&r.push(s))),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{Be(s,o)}),n.forEach((o,s)=>{Ot.forEach(a=>a(s,o))});for(let o of t)r.includes(o)||Rt.forEach(s=>s(o));for(let o of r)t.includes(o)||Tt.forEach(s=>s(o));t=null,r=null,n=null,i=null}function B(e,t,r){return e._x_dataStack=[t,...Q(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function Je(e,t){let r=e._x_dataStack[0];Object.entries(t).forEach(([n,i])=>{r[n]=i})}function Q(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?Q(e.host):e.parentNode?Q(e.parentNode):[]}function X(e){let t=new Proxy({},{ownKeys:()=>Array.from(new Set(e.flatMap(r=>Object.keys(r)))),has:(r,n)=>e.some(i=>i.hasOwnProperty(n)),get:(r,n)=>(e.find(i=>{if(i.hasOwnProperty(n)){let o=Object.getOwnPropertyDescriptor(i,n);if(o.get&&o.get._x_alreadyBound||o.set&&o.set._x_alreadyBound)return!0;if((o.get||o.set)&&o.enumerable){let s=o.get,a=o.set,c=o;s=s&&s.bind(t),a=a&&a.bind(t),s&&(s._x_alreadyBound=!0),a&&(a._x_alreadyBound=!0),Object.defineProperty(i,n,{...c,get:s,set:a})}return!0}return!1})||{})[n],set:(r,n,i)=>{let o=e.find(s=>s.hasOwnProperty(n));return o?o[n]=i:e[e.length-1][n]=i,!0}});return t}function It(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(n).forEach(([o,s])=>{let a=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(e,a,o):t(s)&&s!==n&&!(s instanceof Element)&&r(s,a)})};return r(e)}function me(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return e(this.initialValue,()=>Ur(n,i),s=>Ze(n,i,s),i,o)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function Ur(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function Ze(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),Ze(e[t[0]],t.slice(1),r)}}var Lt={};function x(e,t){Lt[e]=t}function ee(e,t){return Object.entries(Lt).forEach(([r,n])=>{Object.defineProperty(e,`$${r}`,{get(){return n(t,{Alpine:S,interceptor:me})},enumerable:!1})}),e}function b(e,t,r={}){let n;return h(e,t)(i=>n=i,r),n}function h(...e){return $t(...e)}var $t=Qe;function Ft(e){$t=e}function Qe(e,t){let r={};ee(r,e);let n=[r,...Q(e)];if(typeof t=="function")return Wr(n,t);let i=Gr(n,t);return Yr.bind(null,e,t,i)}function Wr(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(X([n,...e]),i);he(r,o)}}var Xe={};function Jr(e){if(Xe[e])return Xe[e];let t=Object.getPrototypeOf(async function(){}).constructor,r=/^[\n\s]*if.*\(.*\)/.test(e)||/^(let|const)/.test(e)?`(() => { ${e} })()`:e,n=new t(["__self","scope"],`with (scope) { __self.result = ${r} }; __self.finished = true; return __self.result;`);return Xe[e]=n,n}function Gr(e,t){let r=Jr(t);return(n=()=>{},{scope:i={},params:o=[]}={})=>{r.result=void 0,r.finished=!1;let s=X([i,...e]),a=r(r,s);r.finished?he(n,r.result,s,o):a.then(c=>{he(n,c,s,o)})}}function he(e,t,r,n){if(typeof t=="function"){let i=t.apply(r,n);i instanceof Promise?i.then(o=>he(e,o,r,n)):e(i)}else e(t)}function Yr(e,t,r,...n){try{return r(...n)}catch(i){throw console.warn(`Alpine Expression Error: ${i.message}
|
2 |
+
|
3 |
+
Expression: "${t}"
|
4 |
+
|
5 |
+
`,e),i}}var et="x-";function A(e=""){return et+e}function jt(e){et=e}var Kt={};function p(e,t){Kt[e]=t}function te(e,t,r){let n={};return Array.from(t).map(zt((o,s)=>n[o]=s)).filter(Vt).map(Qr(n,r)).sort(Xr).map(o=>Zr(e,o))}function Bt(e){return Array.from(e).map(zt()).filter(t=>!Vt(t))}var tt=!1,re=new Map,Ht=Symbol();function qt(e){tt=!0;let t=Symbol();Ht=t,re.set(t,[]);let r=()=>{for(;re.get(t).length;)re.get(t).shift()();re.delete(t)},n=()=>{tt=!1,r()};e(r),n()}function Zr(e,t){let r=()=>{},n=Kt[t.type]||r,i=[],o=d=>i.push(d),[s,a]=At(e);i.push(a);let c={Alpine:S,effect:s,cleanup:o,evaluateLater:h.bind(h,e),evaluate:b.bind(b,e)},l=()=>i.forEach(d=>d());kt(e,t.original,l);let u=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,c),n=n.bind(n,e,t,c),tt?re.get(Ht).push(n):n())};return u.runCleanups=l,u}var ge=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),_e=e=>e;function zt(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=Ut.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var Ut=[];function H(e){Ut.push(e)}function Vt({name:e}){return Wt().test(e)}var Wt=()=>new RegExp(`^${et}([^:^.]+)\\b`);function Qr(e,t){return({name:r,value:n})=>{let i=r.match(Wt()),o=r.match(/:([a-zA-Z0-9\-:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var rt="DEFAULT",ye=["ignore","ref","data","bind","init","for","model","transition","show","if",rt,"element"];function Xr(e,t){let r=ye.indexOf(e.type)===-1?rt:e.type,n=ye.indexOf(t.type)===-1?rt:t.type;return ye.indexOf(r)-ye.indexOf(n)}function $(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}var nt=[],it=!1;function q(e){nt.push(e),queueMicrotask(()=>{it||setTimeout(()=>{xe()})})}function xe(){for(it=!1;nt.length;)nt.shift()()}function Gt(){it=!0}function N(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>N(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)N(n,t,!1),n=n.nextElementSibling}function be(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}function Jt(){document.body||be("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?"),$(document,"alpine:init"),$(document,"alpine:initializing"),We(),Ct(t=>O(t,N)),Mt(t=>q(()=>en(t))),Nt((t,r)=>{te(t,r).forEach(n=>n())});let e=t=>!k(t.parentElement,!0);Array.from(document.querySelectorAll(Yt())).filter(e).forEach(t=>{O(t)}),$(document,"alpine:initialized")}var ot=[],Zt=[];function Qt(){return ot.map(e=>e())}function Yt(){return ot.concat(Zt).map(e=>e())}function ve(e){ot.push(e)}function Xt(e){Zt.push(e)}function k(e,t=!1){if(!e)return;if((t?Yt():Qt()).some(n=>e.matches(n)))return e;if(!!e.parentElement)return k(e.parentElement,t)}function er(e){return Qt().some(t=>e.matches(t))}function O(e,t=N){qt(()=>{t(e,(r,n)=>{te(r,r.attributes).forEach(i=>i()),r._x_ignore&&n()})})}function en(e){N(e,t=>Be(t))}function ne(e,t){return Array.isArray(t)?tr(e,t.join(" ")):typeof t=="object"&&t!==null?tn(e,t):typeof t=="function"?ne(e,t()):tr(e,t)}function tr(e,t){let r=o=>o.split(" ").filter(Boolean),n=o=>o.split(" ").filter(s=>!e.classList.contains(s)).filter(Boolean),i=o=>(e.classList.add(...o),()=>{e.classList.remove(...o)});return t=t===!0?t="":t||"",i(n(t))}function tn(e,t){let r=a=>a.split(" ").filter(Boolean),n=Object.entries(t).flatMap(([a,c])=>c?r(a):!1).filter(Boolean),i=Object.entries(t).flatMap(([a,c])=>c?!1:r(a)).filter(Boolean),o=[],s=[];return i.forEach(a=>{e.classList.contains(a)&&(e.classList.remove(a),s.push(a))}),n.forEach(a=>{e.classList.contains(a)||(e.classList.add(a),o.push(a))}),()=>{s.forEach(a=>e.classList.add(a)),o.forEach(a=>e.classList.remove(a))}}function F(e,t){return typeof t=="object"&&t!==null?rn(e,t):nn(e,t)}function rn(e,t){let r={};return Object.entries(t).forEach(([n,i])=>{r[n]=e.style[n],e.style.setProperty(on(n),i)}),setTimeout(()=>{e.style.length===0&&e.removeAttribute("style")}),()=>{F(e,r)}}function nn(e,t){let r=e.getAttribute("style",t);return e.setAttribute("style",t),()=>{e.setAttribute("style",r)}}function on(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function ie(e,t=()=>{}){let r=!1;return function(){r?t.apply(this,arguments):(r=!0,e.apply(this,arguments))}}p("transition",(e,{value:t,modifiers:r,expression:n},{evaluate:i})=>{typeof n=="function"&&(n=i(n)),n?sn(e,n,t):an(e,r,t)});function sn(e,t,r){rr(e,ne,""),{enter:i=>{e._x_transition.enter.during=i},"enter-start":i=>{e._x_transition.enter.start=i},"enter-end":i=>{e._x_transition.enter.end=i},leave:i=>{e._x_transition.leave.during=i},"leave-start":i=>{e._x_transition.leave.start=i},"leave-end":i=>{e._x_transition.leave.end=i}}[r](t)}function an(e,t,r){rr(e,F);let n=!t.includes("in")&&!t.includes("out")&&!r,i=n||t.includes("in")||["enter"].includes(r),o=n||t.includes("out")||["leave"].includes(r);t.includes("in")&&!n&&(t=t.filter((_,y)=>y<t.indexOf("out"))),t.includes("out")&&!n&&(t=t.filter((_,y)=>y>t.indexOf("out")));let s=!t.includes("opacity")&&!t.includes("scale"),a=s||t.includes("opacity"),c=s||t.includes("scale"),l=a?0:1,u=c?oe(t,"scale",95)/100:1,d=oe(t,"delay",0),E=oe(t,"origin","center"),L="opacity, transform",K=oe(t,"duration",150)/1e3,fe=oe(t,"duration",75)/1e3,f="cubic-bezier(0.4, 0.0, 0.2, 1)";i&&(e._x_transition.enter.during={transformOrigin:E,transitionDelay:d,transitionProperty:L,transitionDuration:`${K}s`,transitionTimingFunction:f},e._x_transition.enter.start={opacity:l,transform:`scale(${u})`},e._x_transition.enter.end={opacity:1,transform:"scale(1)"}),o&&(e._x_transition.leave.during={transformOrigin:E,transitionDelay:d,transitionProperty:L,transitionDuration:`${fe}s`,transitionTimingFunction:f},e._x_transition.leave.start={opacity:1,transform:"scale(1)"},e._x_transition.leave.end={opacity:l,transform:`scale(${u})`})}function rr(e,t,r={}){e._x_transition||(e._x_transition={enter:{during:r,start:r,end:r},leave:{during:r,start:r,end:r},in(n=()=>{},i=()=>{}){we(e,t,{during:this.enter.during,start:this.enter.start,end:this.enter.end},n,i)},out(n=()=>{},i=()=>{}){we(e,t,{during:this.leave.during,start:this.leave.start,end:this.leave.end},n,i)}})}window.Element.prototype._x_toggleAndCascadeWithTransitions=function(e,t,r,n){let i=()=>{document.visibilityState==="visible"?requestAnimationFrame(r):setTimeout(r)};if(t){e._x_transition?e._x_transition.in(r):i();return}e._x_hidePromise=e._x_transition?new Promise((o,s)=>{e._x_transition.out(()=>{},()=>o(n)),e._x_transitioning.beforeCancel(()=>s({isFromCancelledTransition:!0}))}):Promise.resolve(n),queueMicrotask(()=>{let o=nr(e);o?(o._x_hideChildren||(o._x_hideChildren=[]),o._x_hideChildren.push(e)):queueMicrotask(()=>{let s=a=>{let c=Promise.all([a._x_hidePromise,...(a._x_hideChildren||[]).map(s)]).then(([l])=>l());return delete a._x_hidePromise,delete a._x_hideChildren,c};s(e).catch(a=>{if(!a.isFromCancelledTransition)throw a})})})};function nr(e){let t=e.parentNode;if(!!t)return t._x_hidePromise?t:nr(t)}function we(e,t,{during:r,start:n,end:i}={},o=()=>{},s=()=>{}){if(e._x_transitioning&&e._x_transitioning.cancel(),Object.keys(r).length===0&&Object.keys(n).length===0&&Object.keys(i).length===0){o(),s();return}let a,c,l;cn(e,{start(){a=t(e,n)},during(){c=t(e,r)},before:o,end(){a(),l=t(e,i)},after:s,cleanup(){c(),l()}})}function cn(e,t){let r,n,i,o=ie(()=>{m(()=>{r=!0,n||t.before(),i||(t.end(),xe()),t.after(),e.isConnected&&t.cleanup(),delete e._x_transitioning})});e._x_transitioning={beforeCancels:[],beforeCancel(s){this.beforeCancels.push(s)},cancel:ie(function(){for(;this.beforeCancels.length;)this.beforeCancels.shift()();o()}),finish:o},m(()=>{t.start(),t.during()}),Gt(),requestAnimationFrame(()=>{if(r)return;let s=Number(getComputedStyle(e).transitionDuration.replace(/,.*/,"").replace("s",""))*1e3,a=Number(getComputedStyle(e).transitionDelay.replace(/,.*/,"").replace("s",""))*1e3;s===0&&(s=Number(getComputedStyle(e).animationDuration.replace("s",""))*1e3),m(()=>{t.before()}),n=!0,requestAnimationFrame(()=>{r||(m(()=>{t.end()}),xe(),setTimeout(e._x_transitioning.finish,s+a),i=!0)})})}function oe(e,t,r){if(e.indexOf(t)===-1)return r;let n=e[e.indexOf(t)+1];if(!n||t==="scale"&&isNaN(n))return r;if(t==="duration"){let i=n.match(/([0-9]+)ms/);if(i)return i[1]}return t==="origin"&&["top","right","left","center","bottom"].includes(e[e.indexOf(t)+2])?[n,e[e.indexOf(t)+2]].join(" "):n}function Ee(e,t){var r;return function(){var n=this,i=arguments,o=function(){r=null,e.apply(n,i)};clearTimeout(r),r=setTimeout(o,t)}}function Se(e,t){let r;return function(){let n=this,i=arguments;r||(e.apply(n,i),r=!0,setTimeout(()=>r=!1,t))}}function ir(e){e(S)}var U={},or=!1;function sr(e,t){if(or||(U=v(U),or=!0),t===void 0)return U[e];U[e]=t,typeof t=="object"&&t!==null&&t.hasOwnProperty("init")&&typeof t.init=="function"&&U[e].init()}function ar(){return U}var st=!1;function W(e){return(...t)=>st||e(...t)}function cr(e,t){t._x_dataStack=e._x_dataStack,st=!0,un(()=>{ln(t)}),st=!1}function ln(e){let t=!1;O(e,(n,i)=>{N(n,(o,s)=>{if(t&&er(o))return s();t=!0,i(o,s)})})}function un(e){let t=C;Ve((r,n)=>{let i=t(r);return V(i),()=>{}}),e(),Ve(t)}var lr={};function ur(e,t){lr[e]=t}function fr(e,t){return Object.entries(lr).forEach(([r,n])=>{Object.defineProperty(e,r,{get(){return(...i)=>n.bind(t)(...i)},enumerable:!1})}),e}var fn={get reactive(){return v},get release(){return V},get effect(){return C},get raw(){return Ke},version:"3.4.2",flushAndStopDeferringMutations:Pt,disableEffectScheduling:Et,setReactivityEngine:St,addRootSelector:ve,deferMutations:Dt,mapAttributes:H,evaluateLater:h,setEvaluator:Ft,closestRoot:k,interceptor:me,transition:we,setStyles:F,mutateDom:m,directive:p,throttle:Se,debounce:Ee,evaluate:b,initTree:O,nextTick:q,prefix:jt,plugin:ir,magic:x,store:sr,start:Jt,clone:cr,data:ur},S=fn;function at(e,t){let r=Object.create(null),n=e.split(",");for(let i=0;i<n.length;i++)r[n[i]]=!0;return t?i=>!!r[i.toLowerCase()]:i=>!!r[i]}var So={[1]:"TEXT",[2]:"CLASS",[4]:"STYLE",[8]:"PROPS",[16]:"FULL_PROPS",[32]:"HYDRATE_EVENTS",[64]:"STABLE_FRAGMENT",[128]:"KEYED_FRAGMENT",[256]:"UNKEYED_FRAGMENT",[512]:"NEED_PATCH",[1024]:"DYNAMIC_SLOTS",[2048]:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},Ao={[1]:"STABLE",[2]:"DYNAMIC",[3]:"FORWARDED"};var dn="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly";var Oo=at(dn+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected");var dr=Object.freeze({}),To=Object.freeze([]);var ct=Object.assign;var pn=Object.prototype.hasOwnProperty,se=(e,t)=>pn.call(e,t),D=Array.isArray,G=e=>pr(e)==="[object Map]";var mn=e=>typeof e=="string",Ae=e=>typeof e=="symbol",ae=e=>e!==null&&typeof e=="object";var hn=Object.prototype.toString,pr=e=>hn.call(e),lt=e=>pr(e).slice(8,-1);var Oe=e=>mn(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e;var Te=e=>{let t=Object.create(null);return r=>t[r]||(t[r]=e(r))},gn=/-(\w)/g,Ro=Te(e=>e.replace(gn,(t,r)=>r?r.toUpperCase():"")),_n=/\B([A-Z])/g,Co=Te(e=>e.replace(_n,"-$1").toLowerCase()),ut=Te(e=>e.charAt(0).toUpperCase()+e.slice(1)),Mo=Te(e=>e?`on${ut(e)}`:""),ft=(e,t)=>e!==t&&(e===e||t===t);var dt=new WeakMap,ce=[],T,j=Symbol("iterate"),pt=Symbol("Map key iterate");function yn(e){return e&&e._isEffect===!0}function mr(e,t=dr){yn(e)&&(e=e.raw);let r=xn(e,t);return t.lazy||r(),r}function gr(e){e.active&&(hr(e),e.options.onStop&&e.options.onStop(),e.active=!1)}var bn=0;function xn(e,t){let r=function(){if(!r.active)return e();if(!ce.includes(r)){hr(r);try{return vn(),ce.push(r),T=r,e()}finally{ce.pop(),_r(),T=ce[ce.length-1]}}};return r.id=bn++,r.allowRecurse=!!t.allowRecurse,r._isEffect=!0,r.active=!0,r.raw=e,r.deps=[],r.options=t,r}function hr(e){let{deps:t}=e;if(t.length){for(let r=0;r<t.length;r++)t[r].delete(e);t.length=0}}var Y=!0,mt=[];function wn(){mt.push(Y),Y=!1}function vn(){mt.push(Y),Y=!0}function _r(){let e=mt.pop();Y=e===void 0?!0:e}function w(e,t,r){if(!Y||T===void 0)return;let n=dt.get(e);n||dt.set(e,n=new Map);let i=n.get(r);i||n.set(r,i=new Set),i.has(T)||(i.add(T),T.deps.push(i),T.options.onTrack&&T.options.onTrack({effect:T,target:e,type:t,key:r}))}function P(e,t,r,n,i,o){let s=dt.get(e);if(!s)return;let a=new Set,c=u=>{u&&u.forEach(d=>{(d!==T||d.allowRecurse)&&a.add(d)})};if(t==="clear")s.forEach(c);else if(r==="length"&&D(e))s.forEach((u,d)=>{(d==="length"||d>=n)&&c(u)});else switch(r!==void 0&&c(s.get(r)),t){case"add":D(e)?Oe(r)&&c(s.get("length")):(c(s.get(j)),G(e)&&c(s.get(pt)));break;case"delete":D(e)||(c(s.get(j)),G(e)&&c(s.get(pt)));break;case"set":G(e)&&c(s.get(j));break}let l=u=>{u.options.onTrigger&&u.options.onTrigger({effect:u,target:e,key:r,type:t,newValue:n,oldValue:i,oldTarget:o}),u.options.scheduler?u.options.scheduler(u):u()};a.forEach(l)}var En=at("__proto__,__v_isRef,__isVue"),yr=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(Ae)),Sn=Re(),An=Re(!1,!0),On=Re(!0),Tn=Re(!0,!0),Ce={};["includes","indexOf","lastIndexOf"].forEach(e=>{let t=Array.prototype[e];Ce[e]=function(...r){let n=g(this);for(let o=0,s=this.length;o<s;o++)w(n,"get",o+"");let i=t.apply(n,r);return i===-1||i===!1?t.apply(n,r.map(g)):i}});["push","pop","shift","unshift","splice"].forEach(e=>{let t=Array.prototype[e];Ce[e]=function(...r){wn();let n=t.apply(this,r);return _r(),n}});function Re(e=!1,t=!1){return function(n,i,o){if(i==="__v_isReactive")return!e;if(i==="__v_isReadonly")return e;if(i==="__v_raw"&&o===(e?t?Cn:br:t?Rn:xr).get(n))return n;let s=D(n);if(!e&&s&&se(Ce,i))return Reflect.get(Ce,i,o);let a=Reflect.get(n,i,o);return(Ae(i)?yr.has(i):En(i))||(e||w(n,"get",i),t)?a:ht(a)?!s||!Oe(i)?a.value:a:ae(a)?e?vr(a):Me(a):a}}var Mn=wr(),Nn=wr(!0);function wr(e=!1){return function(r,n,i,o){let s=r[n];if(!e&&(i=g(i),s=g(s),!D(r)&&ht(s)&&!ht(i)))return s.value=i,!0;let a=D(r)&&Oe(n)?Number(n)<r.length:se(r,n),c=Reflect.set(r,n,i,o);return r===g(o)&&(a?ft(i,s)&&P(r,"set",n,i,s):P(r,"add",n,i)),c}}function kn(e,t){let r=se(e,t),n=e[t],i=Reflect.deleteProperty(e,t);return i&&r&&P(e,"delete",t,void 0,n),i}function Dn(e,t){let r=Reflect.has(e,t);return(!Ae(t)||!yr.has(t))&&w(e,"has",t),r}function Pn(e){return w(e,"iterate",D(e)?"length":j),Reflect.ownKeys(e)}var Er={get:Sn,set:Mn,deleteProperty:kn,has:Dn,ownKeys:Pn},Sr={get:On,set(e,t){return console.warn(`Set operation on key "${String(t)}" failed: target is readonly.`,e),!0},deleteProperty(e,t){return console.warn(`Delete operation on key "${String(t)}" failed: target is readonly.`,e),!0}},Lo=ct({},Er,{get:An,set:Nn}),$o=ct({},Sr,{get:Tn}),gt=e=>ae(e)?Me(e):e,_t=e=>ae(e)?vr(e):e,yt=e=>e,Ne=e=>Reflect.getPrototypeOf(e);function ke(e,t,r=!1,n=!1){e=e.__v_raw;let i=g(e),o=g(t);t!==o&&!r&&w(i,"get",t),!r&&w(i,"get",o);let{has:s}=Ne(i),a=n?yt:r?_t:gt;if(s.call(i,t))return a(e.get(t));if(s.call(i,o))return a(e.get(o));e!==i&&e.get(t)}function De(e,t=!1){let r=this.__v_raw,n=g(r),i=g(e);return e!==i&&!t&&w(n,"has",e),!t&&w(n,"has",i),e===i?r.has(e):r.has(e)||r.has(i)}function Pe(e,t=!1){return e=e.__v_raw,!t&&w(g(e),"iterate",j),Reflect.get(e,"size",e)}function Ar(e){e=g(e);let t=g(this);return Ne(t).has.call(t,e)||(t.add(e),P(t,"add",e,e)),this}function Tr(e,t){t=g(t);let r=g(this),{has:n,get:i}=Ne(r),o=n.call(r,e);o?Or(r,n,e):(e=g(e),o=n.call(r,e));let s=i.call(r,e);return r.set(e,t),o?ft(t,s)&&P(r,"set",e,t,s):P(r,"add",e,t),this}function Rr(e){let t=g(this),{has:r,get:n}=Ne(t),i=r.call(t,e);i?Or(t,r,e):(e=g(e),i=r.call(t,e));let o=n?n.call(t,e):void 0,s=t.delete(e);return i&&P(t,"delete",e,void 0,o),s}function Cr(){let e=g(this),t=e.size!==0,r=G(e)?new Map(e):new Set(e),n=e.clear();return t&&P(e,"clear",void 0,void 0,r),n}function Ie(e,t){return function(n,i){let o=this,s=o.__v_raw,a=g(s),c=t?yt:e?_t:gt;return!e&&w(a,"iterate",j),s.forEach((l,u)=>n.call(i,c(l),c(u),o))}}function Le(e,t,r){return function(...n){let i=this.__v_raw,o=g(i),s=G(o),a=e==="entries"||e===Symbol.iterator&&s,c=e==="keys"&&s,l=i[e](...n),u=r?yt:t?_t:gt;return!t&&w(o,"iterate",c?pt:j),{next(){let{value:d,done:E}=l.next();return E?{value:d,done:E}:{value:a?[u(d[0]),u(d[1])]:u(d),done:E}},[Symbol.iterator](){return this}}}}function I(e){return function(...t){{let r=t[0]?`on key "${t[0]}" `:"";console.warn(`${ut(e)} operation ${r}failed: target is readonly.`,g(this))}return e==="delete"?!1:this}}var Mr={get(e){return ke(this,e)},get size(){return Pe(this)},has:De,add:Ar,set:Tr,delete:Rr,clear:Cr,forEach:Ie(!1,!1)},Nr={get(e){return ke(this,e,!1,!0)},get size(){return Pe(this)},has:De,add:Ar,set:Tr,delete:Rr,clear:Cr,forEach:Ie(!1,!0)},kr={get(e){return ke(this,e,!0)},get size(){return Pe(this,!0)},has(e){return De.call(this,e,!0)},add:I("add"),set:I("set"),delete:I("delete"),clear:I("clear"),forEach:Ie(!0,!1)},Dr={get(e){return ke(this,e,!0,!0)},get size(){return Pe(this,!0)},has(e){return De.call(this,e,!0)},add:I("add"),set:I("set"),delete:I("delete"),clear:I("clear"),forEach:Ie(!0,!0)},In=["keys","values","entries",Symbol.iterator];In.forEach(e=>{Mr[e]=Le(e,!1,!1),kr[e]=Le(e,!0,!1),Nr[e]=Le(e,!1,!0),Dr[e]=Le(e,!0,!0)});function $e(e,t){let r=t?e?Dr:Nr:e?kr:Mr;return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(se(r,i)&&i in n?r:n,i,o)}var Ln={get:$e(!1,!1)},Fo={get:$e(!1,!0)},$n={get:$e(!0,!1)},jo={get:$e(!0,!0)};function Or(e,t,r){let n=g(r);if(n!==r&&t.call(e,n)){let i=lt(e);console.warn(`Reactive ${i} contains both the raw and reactive versions of the same object${i==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var xr=new WeakMap,Rn=new WeakMap,br=new WeakMap,Cn=new WeakMap;function Fn(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function jn(e){return e.__v_skip||!Object.isExtensible(e)?0:Fn(lt(e))}function Me(e){return e&&e.__v_isReadonly?e:Pr(e,!1,Er,Ln,xr)}function vr(e){return Pr(e,!0,Sr,$n,br)}function Pr(e,t,r,n,i){if(!ae(e))return console.warn(`value cannot be made reactive: ${String(e)}`),e;if(e.__v_raw&&!(t&&e.__v_isReactive))return e;let o=i.get(e);if(o)return o;let s=jn(e);if(s===0)return e;let a=new Proxy(e,s===2?n:r);return i.set(e,a),a}function g(e){return e&&g(e.__v_raw)||e}function ht(e){return Boolean(e&&e.__v_isRef===!0)}x("nextTick",()=>q);x("dispatch",e=>$.bind($,e));x("watch",e=>(t,r)=>{let n=h(e,t),i=!0,o;C(()=>n(s=>{let a=document.createElement("div");a.dataset.throwAway=s,i?o=s:queueMicrotask(()=>{r(s,o),o=s}),i=!1}))});x("store",ar);x("root",e=>k(e));x("refs",e=>(e._x_refs_proxy||(e._x_refs_proxy=X(Kn(e))),e._x_refs_proxy));function Kn(e){let t=[],r=e;for(;r;)r._x_refs&&t.push(r._x_refs),r=r.parentNode;return t}x("el",e=>e);var Ir=()=>{};Ir.inline=(e,{modifiers:t},{cleanup:r})=>{t.includes("self")?e._x_ignoreSelf=!0:e._x_ignore=!0,r(()=>{t.includes("self")?delete e._x_ignoreSelf:delete e._x_ignore})};p("ignore",Ir);p("effect",(e,{expression:t},{effect:r})=>r(h(e,t)));function le(e,t,r,n=[]){switch(e._x_bindings||(e._x_bindings=v({})),e._x_bindings[t]=r,t=n.includes("camel")?qn(t):t,t){case"value":zn(e,r);break;case"style":Bn(e,r);break;case"class":Vn(e,r);break;default:Hn(e,t,r);break}}function zn(e,t){if(e.type==="radio")e.attributes.value===void 0&&(e.value=t),window.fromModel&&(e.checked=Lr(e.value,t));else if(e.type==="checkbox")Number.isInteger(t)?e.value=t:!Number.isInteger(t)&&!Array.isArray(t)&&typeof t!="boolean"&&![null,void 0].includes(t)?e.value=String(t):Array.isArray(t)?e.checked=t.some(r=>Lr(r,e.value)):e.checked=!!t;else if(e.tagName==="SELECT")Un(e,t);else{if(e.value===t)return;e.value=t}}function Vn(e,t){e._x_undoAddedClasses&&e._x_undoAddedClasses(),e._x_undoAddedClasses=ne(e,t)}function Bn(e,t){e._x_undoAddedStyles&&e._x_undoAddedStyles(),e._x_undoAddedStyles=F(e,t)}function Hn(e,t,r){[null,void 0,!1].includes(r)&&Yn(t)?e.removeAttribute(t):(Gn(t)&&(r=t),Wn(e,t,r))}function Wn(e,t,r){e.getAttribute(t)!=r&&e.setAttribute(t,r)}function Un(e,t){let r=[].concat(t).map(n=>n+"");Array.from(e.options).forEach(n=>{n.selected=r.includes(n.value)})}function qn(e){return e.toLowerCase().replace(/-(\w)/g,(t,r)=>r.toUpperCase())}function Lr(e,t){return e==t}function Gn(e){return["disabled","checked","required","readonly","hidden","open","selected","autofocus","itemscope","multiple","novalidate","allowfullscreen","allowpaymentrequest","formnovalidate","autoplay","controls","loop","muted","playsinline","default","ismap","reversed","async","defer","nomodule"].includes(e)}function Yn(e){return!["aria-pressed","aria-checked","aria-expanded"].includes(e)}function ue(e,t,r,n){let i=e,o=c=>n(c),s={},a=(c,l)=>u=>l(c,u);if(r.includes("dot")&&(t=Jn(t)),r.includes("camel")&&(t=Zn(t)),r.includes("passive")&&(s.passive=!0),r.includes("capture")&&(s.capture=!0),r.includes("window")&&(i=window),r.includes("document")&&(i=document),r.includes("prevent")&&(o=a(o,(c,l)=>{l.preventDefault(),c(l)})),r.includes("stop")&&(o=a(o,(c,l)=>{l.stopPropagation(),c(l)})),r.includes("self")&&(o=a(o,(c,l)=>{l.target===e&&c(l)})),(r.includes("away")||r.includes("outside"))&&(i=document,o=a(o,(c,l)=>{e.contains(l.target)||e.offsetWidth<1&&e.offsetHeight<1||c(l)})),o=a(o,(c,l)=>{Qn(t)&&Xn(l,r)||c(l)}),r.includes("debounce")){let c=r[r.indexOf("debounce")+1]||"invalid-wait",l=xt(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=Ee(o,l)}if(r.includes("throttle")){let c=r[r.indexOf("throttle")+1]||"invalid-wait",l=xt(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=Se(o,l)}return r.includes("once")&&(o=a(o,(c,l)=>{c(l),i.removeEventListener(t,o,s)})),i.addEventListener(t,o,s),()=>{i.removeEventListener(t,o,s)}}function Jn(e){return e.replace(/-/g,".")}function Zn(e){return e.toLowerCase().replace(/-(\w)/g,(t,r)=>r.toUpperCase())}function xt(e){return!Array.isArray(e)&&!isNaN(e)}function ei(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]/,"-").toLowerCase()}function Qn(e){return["keydown","keyup"].includes(e)}function Xn(e,t){let r=t.filter(o=>!["window","document","prevent","stop","once"].includes(o));if(r.includes("debounce")){let o=r.indexOf("debounce");r.splice(o,xt((r[o+1]||"invalid-wait").split("ms")[0])?2:1)}if(r.length===0||r.length===1&&$r(e.key).includes(r[0]))return!1;let i=["ctrl","shift","alt","meta","cmd","super"].filter(o=>r.includes(o));return r=r.filter(o=>!i.includes(o)),!(i.length>0&&i.filter(s=>((s==="cmd"||s==="super")&&(s="meta"),e[`${s}Key`])).length===i.length&&$r(e.key).includes(r[0]))}function $r(e){if(!e)return[];e=ei(e);let t={ctrl:"control",slash:"/",space:"-",spacebar:"-",cmd:"meta",esc:"escape",up:"arrow-up",down:"arrow-down",left:"arrow-left",right:"arrow-right",period:".",equal:"="};return t[e]=e,Object.keys(t).map(r=>{if(t[r]===e)return r}).filter(r=>r)}p("model",(e,{modifiers:t,expression:r},{effect:n,cleanup:i})=>{let o=h(e,r),s=`${r} = rightSideOfExpression($event, ${r})`,a=h(e,s);var c=e.tagName.toLowerCase()==="select"||["checkbox","radio"].includes(e.type)||t.includes("lazy")?"change":"input";let l=ti(e,t,r),u=ue(e,c,t,d=>{a(()=>{},{scope:{$event:d,rightSideOfExpression:l}})});i(()=>u()),e._x_forceModelUpdate=()=>{o(d=>{d===void 0&&r.match(/\./)&&(d=""),window.fromModel=!0,m(()=>le(e,"value",d)),delete window.fromModel})},n(()=>{t.includes("unintrusive")&&document.activeElement.isSameNode(e)||e._x_forceModelUpdate()})});function ti(e,t,r){return e.type==="radio"&&m(()=>{e.hasAttribute("name")||e.setAttribute("name",r)}),(n,i)=>m(()=>{if(n instanceof CustomEvent&&n.detail!==void 0)return n.detail||n.target.value;if(e.type==="checkbox")if(Array.isArray(i)){let o=t.includes("number")?bt(n.target.value):n.target.value;return n.target.checked?i.concat([o]):i.filter(s=>!ri(s,o))}else return n.target.checked;else{if(e.tagName.toLowerCase()==="select"&&e.multiple)return t.includes("number")?Array.from(n.target.selectedOptions).map(o=>{let s=o.value||o.text;return bt(s)}):Array.from(n.target.selectedOptions).map(o=>o.value||o.text);{let o=n.target.value;return t.includes("number")?bt(o):t.includes("trim")?o.trim():o}}})}function bt(e){let t=e?parseFloat(e):null;return ni(t)?t:e}function ri(e,t){return e==t}function ni(e){return!Array.isArray(e)&&!isNaN(e)}p("cloak",e=>queueMicrotask(()=>m(()=>e.removeAttribute(A("cloak")))));Xt(()=>`[${A("init")}]`);p("init",W((e,{expression:t})=>typeof t=="string"?!!t.trim()&&b(e,t,{},!1):b(e,t,{},!1)));p("text",(e,{expression:t},{effect:r,evaluateLater:n})=>{let i=n(t);r(()=>{i(o=>{m(()=>{e.textContent=o})})})});p("html",(e,{expression:t},{effect:r,evaluateLater:n})=>{let i=n(t);r(()=>{i(o=>{e.innerHTML=o})})});H(ge(":",_e(A("bind:"))));p("bind",(e,{value:t,modifiers:r,expression:n,original:i},{effect:o})=>{if(!t)return ii(e,n,i,o);if(t==="key")return oi(e,n);let s=h(e,n);o(()=>s(a=>{a===void 0&&n.match(/\./)&&(a=""),m(()=>le(e,t,a,r))}))});function ii(e,t,r,n){let i=h(e,t),o=[];n(()=>{for(;o.length;)o.pop()();i(s=>{let a=Object.entries(s).map(([c,l])=>({name:c,value:l}));Bt(a).forEach(({name:c,value:l},u)=>{a[u]={name:`x-bind:${c}`,value:`"${l}"`}}),te(e,a,r).map(c=>{o.push(c.runCleanups),c()})})})}function oi(e,t){e._x_keyExpression=t}ve(()=>`[${A("data")}]`);p("data",W((e,{expression:t},{cleanup:r})=>{t=t===""?"{}":t;let n={};ee(n,e);let i={};fr(i,n);let o=b(e,t,{scope:i});ee(o,e);let s=v(o);It(s);let a=B(e,s);s.init&&b(e,s.init),r(()=>{a(),s.destroy&&b(e,s.destroy)})}));p("show",(e,{modifiers:t,expression:r},{effect:n})=>{let i=h(e,r),o=()=>m(()=>{e.style.display="none",e._x_isShown=!1}),s=()=>m(()=>{e.style.length===1&&e.style.display==="none"?e.removeAttribute("style"):e.style.removeProperty("display"),e._x_isShown=!0}),a=()=>setTimeout(s),c=ie(d=>d?s():o(),d=>{typeof e._x_toggleAndCascadeWithTransitions=="function"?e._x_toggleAndCascadeWithTransitions(e,d,s,o):d?a():o()}),l,u=!0;n(()=>i(d=>{!u&&d===l||(t.includes("immediate")&&(d?a():o()),c(d),l=d,u=!1)}))});p("for",(e,{expression:t},{effect:r,cleanup:n})=>{let i=ai(t),o=h(e,i.items),s=h(e,e._x_keyExpression||"index");e._x_prevKeys=[],e._x_lookup={},r(()=>si(e,i,o,s)),n(()=>{Object.values(e._x_lookup).forEach(a=>a.remove()),delete e._x_prevKeys,delete e._x_lookup})});function si(e,t,r,n){let i=s=>typeof s=="object"&&!Array.isArray(s),o=e;r(s=>{ci(s)&&s>=0&&(s=Array.from(Array(s).keys(),f=>f+1)),s===void 0&&(s=[]);let a=e._x_lookup,c=e._x_prevKeys,l=[],u=[];if(i(s))s=Object.entries(s).map(([f,_])=>{let y=Fr(t,_,f,s);n(R=>u.push(R),{scope:{index:f,...y}}),l.push(y)});else for(let f=0;f<s.length;f++){let _=Fr(t,s[f],f,s);n(y=>u.push(y),{scope:{index:f,..._}}),l.push(_)}let d=[],E=[],L=[],K=[];for(let f=0;f<c.length;f++){let _=c[f];u.indexOf(_)===-1&&L.push(_)}c=c.filter(f=>!L.includes(f));let fe="template";for(let f=0;f<u.length;f++){let _=u[f],y=c.indexOf(_);if(y===-1)c.splice(f,0,_),d.push([fe,f]);else if(y!==f){let R=c.splice(f,1)[0],M=c.splice(y-1,1)[0];c.splice(f,0,M),c.splice(y,0,R),E.push([R,M])}else K.push(_);fe=_}for(let f=0;f<L.length;f++){let _=L[f];a[_].remove(),a[_]=null,delete a[_]}for(let f=0;f<E.length;f++){let[_,y]=E[f],R=a[_],M=a[y],z=document.createElement("div");m(()=>{M.after(z),R.after(M),z.before(R),z.remove()}),Je(M,l[u.indexOf(y)])}for(let f=0;f<d.length;f++){let[_,y]=d[f],R=_==="template"?o:a[_],M=l[y],z=u[y],de=document.importNode(o.content,!0).firstElementChild;B(de,v(M),o),m(()=>{R.after(de),O(de)}),typeof z=="object"&&be("x-for key cannot be an object, it must be a string or an integer",o),a[z]=de}for(let f=0;f<K.length;f++)Je(a[K[f]],l[u.indexOf(K[f])]);o._x_prevKeys=u})}function ai(e){let t=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=/^\s*\(|\)\s*$/g,n=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,i=e.match(n);if(!i)return;let o={};o.items=i[2].trim();let s=i[1].replace(r,"").trim(),a=s.match(t);return a?(o.item=s.replace(t,"").trim(),o.index=a[1].trim(),a[2]&&(o.collection=a[2].trim())):o.item=s,o}function Fr(e,t,r,n){let i={};return/^\[.*\]$/.test(e.item)&&Array.isArray(t)?e.item.replace("[","").replace("]","").split(",").map(s=>s.trim()).forEach((s,a)=>{i[s]=t[a]}):/^\{.*\}$/.test(e.item)&&!Array.isArray(t)&&typeof t=="object"?e.item.replace("{","").replace("}","").split(",").map(s=>s.trim()).forEach(s=>{i[s]=t[s]}):i[e.item]=t,e.index&&(i[e.index]=r),e.collection&&(i[e.collection]=n),i}function ci(e){return!Array.isArray(e)&&!isNaN(e)}function jr(){}jr.inline=(e,{expression:t},{cleanup:r})=>{let n=k(e);n._x_refs||(n._x_refs={}),n._x_refs[t]=e,r(()=>delete n._x_refs[t])};p("ref",jr);p("if",(e,{expression:t},{effect:r,cleanup:n})=>{let i=h(e,t),o=()=>{if(e._x_currentIfEl)return e._x_currentIfEl;let a=e.content.cloneNode(!0).firstElementChild;return B(a,{},e),m(()=>{e.after(a),O(a)}),e._x_currentIfEl=a,e._x_undoIf=()=>{a.remove(),delete e._x_currentIfEl},a},s=()=>{!e._x_undoIf||(e._x_undoIf(),delete e._x_undoIf)};r(()=>i(a=>{a?o():s()})),n(()=>e._x_undoIf&&e._x_undoIf())});H(ge("@",_e(A("on:"))));p("on",W((e,{value:t,modifiers:r,expression:n},{cleanup:i})=>{let o=n?h(e,n):()=>{},s=ue(e,t,r,a=>{o(()=>{},{scope:{$event:a},params:[a]})});i(()=>s())}));S.setEvaluator(Qe);S.setReactivityEngine({reactive:Me,effect:mr,release:gr,raw:g});var vt=S;window.Alpine=vt;queueMicrotask(()=>{vt.start()});})();
|
assets/js/extension-manager.js
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* global EDDExtensionManager, ajaxurl */
|
2 |
+
|
3 |
+
; ( function ( document, $ ) {
|
4 |
+
'use strict';
|
5 |
+
|
6 |
+
$( '.edd-extension-manager__action' ).on( 'click', function ( e ) {
|
7 |
+
e.preventDefault();
|
8 |
+
|
9 |
+
var $btn = $( this ),
|
10 |
+
action = $btn.attr( 'data-action' ),
|
11 |
+
plugin = $btn.attr( 'data-plugin' ),
|
12 |
+
type = $btn.attr( 'data-type' ),
|
13 |
+
ajaxAction = '';
|
14 |
+
|
15 |
+
if ( $btn.attr( 'disabled' ) ) {
|
16 |
+
return;
|
17 |
+
}
|
18 |
+
|
19 |
+
switch ( action ) {
|
20 |
+
case 'activate':
|
21 |
+
ajaxAction = 'edd_activate_extension';
|
22 |
+
$btn.text( EDDExtensionManager.activating );
|
23 |
+
break;
|
24 |
+
|
25 |
+
case 'install':
|
26 |
+
ajaxAction = 'edd_install_extension';
|
27 |
+
$btn.text( EDDExtensionManager.installing );
|
28 |
+
break;
|
29 |
+
|
30 |
+
default:
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
|
34 |
+
$btn.removeClass( 'button-primary' ).attr( 'disabled', true ).addClass( 'updating-message' );
|
35 |
+
|
36 |
+
var data = {
|
37 |
+
action: ajaxAction,
|
38 |
+
nonce: EDDExtensionManager.extension_manager_nonce,
|
39 |
+
plugin: plugin,
|
40 |
+
type: type,
|
41 |
+
pass: $btn.attr( 'data-pass' ),
|
42 |
+
id: $btn.attr( 'data-id' ),
|
43 |
+
product: $btn.attr( 'data-product' ),
|
44 |
+
};
|
45 |
+
|
46 |
+
$.post( ajaxurl, data )
|
47 |
+
.done( function ( res ) {
|
48 |
+
console.log( res );
|
49 |
+
var thisStep = $btn.closest( '.edd-extension-manager__step' );
|
50 |
+
if ( res.success ) {
|
51 |
+
var nextStep = thisStep.next();
|
52 |
+
if ( nextStep.length ) {
|
53 |
+
thisStep.fadeOut();
|
54 |
+
nextStep.prepend( '<div class="notice inline-notice notice-success"><p>' + res.data.message + '</p></div>' );
|
55 |
+
nextStep.fadeIn();
|
56 |
+
}
|
57 |
+
} else {
|
58 |
+
thisStep.fadeOut();
|
59 |
+
var message = res.data.message;
|
60 |
+
/**
|
61 |
+
* The install class returns an array of error messages, and res.data.message will be undefined.
|
62 |
+
* In that case, we'll use the standard failure messages.
|
63 |
+
*/
|
64 |
+
if ( ! message ) {
|
65 |
+
if ( 'plugin' !== type ) {
|
66 |
+
message = EDDExtensionManager.extension_install_failed;
|
67 |
+
} else {
|
68 |
+
message = EDDExtensionManager.plugin_install_failed;
|
69 |
+
}
|
70 |
+
}
|
71 |
+
thisStep.after( '<div class="notice inline-notice notice-warning"><p>' + message + '</p></div>' );
|
72 |
+
}
|
73 |
+
} );
|
74 |
+
} );
|
75 |
+
} )( document, jQuery );
|
assets/js/extension-manager.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
!function($){"use strict";$(".edd-extension-manager__action").on("click",function(data){data.preventDefault();var $btn=$(this),action=$btn.attr("data-action"),data=$btn.attr("data-plugin"),type=$btn.attr("data-type"),ajaxAction="";if(!$btn.attr("disabled")){switch(action){case"activate":ajaxAction="edd_activate_extension",$btn.text(EDDExtensionManager.activating);break;case"install":ajaxAction="edd_install_extension",$btn.text(EDDExtensionManager.installing);break;default:return}$btn.removeClass("button-primary").attr("disabled",!0).addClass("updating-message");data={action:ajaxAction,nonce:EDDExtensionManager.extension_manager_nonce,plugin:data,type:type,pass:$btn.attr("data-pass"),id:$btn.attr("data-id"),product:$btn.attr("data-product")};$.post(ajaxurl,data).done(function(message){console.log(message);var nextStep,thisStep=$btn.closest(".edd-extension-manager__step");message.success?(nextStep=thisStep.next()).length&&(thisStep.fadeOut(),nextStep.prepend('<div class="notice inline-notice notice-success"><p>'+message.data.message+"</p></div>"),nextStep.fadeIn()):(thisStep.fadeOut(),message=(message=message.data.message)||("plugin"!==type?EDDExtensionManager.extension_install_failed:EDDExtensionManager.plugin_install_failed),thisStep.after('<div class="notice inline-notice notice-warning"><p>'+message+"</p></div>"))})}})}((document,jQuery));
|
easy-digital-downloads.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Description: The easiest way to sell digital products with WordPress.
|
6 |
* Author: Easy Digital Downloads
|
7 |
* Author URI: https://easydigitaldownloads.com
|
8 |
-
* Version: 2.11.
|
9 |
* Text Domain: easy-digital-downloads
|
10 |
* Domain Path: languages
|
11 |
*
|
@@ -25,7 +25,7 @@
|
|
25 |
* @package EDD
|
26 |
* @category Core
|
27 |
* @author Easy Digital Downloads
|
28 |
-
* @version 2.11.
|
29 |
*/
|
30 |
|
31 |
// Exit if accessed directly.
|
@@ -121,6 +121,11 @@ final class Easy_Digital_Downloads {
|
|
121 |
*/
|
122 |
public $customer_meta;
|
123 |
|
|
|
|
|
|
|
|
|
|
|
124 |
/**
|
125 |
* EDD Cart Object
|
126 |
*
|
@@ -129,6 +134,22 @@ final class Easy_Digital_Downloads {
|
|
129 |
*/
|
130 |
public $cart;
|
131 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
/**
|
133 |
* Main Easy_Digital_Downloads Instance.
|
134 |
*
|
@@ -152,17 +173,21 @@ final class Easy_Digital_Downloads {
|
|
152 |
add_action( 'plugins_loaded', array( self::$instance, 'load_textdomain' ) );
|
153 |
|
154 |
self::$instance->includes();
|
155 |
-
self::$instance->roles
|
156 |
-
self::$instance->fees
|
157 |
-
self::$instance->api
|
158 |
-
self::$instance->session
|
159 |
-
self::$instance->html
|
160 |
-
self::$instance->emails
|
161 |
-
self::$instance->email_tags
|
162 |
-
self::$instance->customers
|
163 |
-
self::$instance->customer_meta
|
164 |
-
self::$instance->
|
165 |
-
self::$instance->
|
|
|
|
|
|
|
|
|
166 |
}
|
167 |
|
168 |
return self::$instance;
|
@@ -206,7 +231,7 @@ final class Easy_Digital_Downloads {
|
|
206 |
|
207 |
// Plugin version.
|
208 |
if ( ! defined( 'EDD_VERSION' ) ) {
|
209 |
-
define( 'EDD_VERSION', '2.11.
|
210 |
}
|
211 |
|
212 |
// Plugin Folder Path.
|
@@ -249,6 +274,7 @@ final class Easy_Digital_Downloads {
|
|
249 |
}
|
250 |
require_once EDD_PLUGIN_DIR . 'includes/ajax-functions.php';
|
251 |
require_once EDD_PLUGIN_DIR . 'includes/api/class-edd-api.php';
|
|
|
252 |
require_once EDD_PLUGIN_DIR . 'includes/template-functions.php';
|
253 |
require_once EDD_PLUGIN_DIR . 'includes/template-actions.php';
|
254 |
require_once EDD_PLUGIN_DIR . 'includes/checkout/template.php';
|
@@ -258,6 +284,7 @@ final class Easy_Digital_Downloads {
|
|
258 |
require_once EDD_PLUGIN_DIR . 'includes/cart/template.php';
|
259 |
require_once EDD_PLUGIN_DIR . 'includes/cart/actions.php';
|
260 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-db.php';
|
|
|
261 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customers.php';
|
262 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customer-meta.php';
|
263 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-customer-query.php';
|
@@ -277,6 +304,8 @@ final class Easy_Digital_Downloads {
|
|
277 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-stats.php';
|
278 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-roles.php';
|
279 |
require_once EDD_PLUGIN_DIR . 'includes/country-functions.php';
|
|
|
|
|
280 |
require_once EDD_PLUGIN_DIR . 'includes/formatting.php';
|
281 |
require_once EDD_PLUGIN_DIR . 'includes/widgets.php';
|
282 |
require_once EDD_PLUGIN_DIR . 'includes/misc-functions.php';
|
@@ -321,13 +350,16 @@ final class Easy_Digital_Downloads {
|
|
321 |
require_once EDD_PLUGIN_DIR . 'includes/admin/tracking.php'; // Must be loaded on frontend to ensure cron runs
|
322 |
require_once EDD_PLUGIN_DIR . 'includes/privacy-functions.php';
|
323 |
require_once EDD_PLUGIN_DIR . 'includes/utils/class-tokenizer.php';
|
|
|
|
|
|
|
|
|
324 |
|
325 |
if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
|
326 |
require_once EDD_PLUGIN_DIR . 'includes/admin/add-ons.php';
|
327 |
require_once EDD_PLUGIN_DIR . 'includes/admin/admin-footer.php';
|
328 |
require_once EDD_PLUGIN_DIR . 'includes/admin/admin-actions.php';
|
329 |
require_once EDD_PLUGIN_DIR . 'includes/admin/class-edd-notices.php';
|
330 |
-
require_once EDD_PLUGIN_DIR . 'includes/admin/class-pass-manager.php';
|
331 |
require_once EDD_PLUGIN_DIR . 'includes/admin/admin-pages.php';
|
332 |
require_once EDD_PLUGIN_DIR . 'includes/admin/dashboard-widgets.php';
|
333 |
require_once EDD_PLUGIN_DIR . 'includes/admin/thickbox.php';
|
@@ -361,6 +393,15 @@ final class Easy_Digital_Downloads {
|
|
361 |
require_once EDD_PLUGIN_DIR . 'includes/admin/upgrades/upgrades.php';
|
362 |
require_once EDD_PLUGIN_DIR . 'includes/admin/class-edd-heartbeat.php';
|
363 |
require_once EDD_PLUGIN_DIR . 'includes/admin/tools/tools-actions.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
364 |
|
365 |
require_once EDD_PLUGIN_DIR . 'includes/libraries/class-persistent-dismissible.php';
|
366 |
require_once EDD_PLUGIN_DIR . 'includes/admin/promos/class-promo-handler.php';
|
@@ -373,6 +414,33 @@ final class Easy_Digital_Downloads {
|
|
373 |
require_once EDD_PLUGIN_DIR . 'includes/install.php';
|
374 |
}
|
375 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
376 |
/**
|
377 |
* Loads the plugin language files.
|
378 |
*
|
5 |
* Description: The easiest way to sell digital products with WordPress.
|
6 |
* Author: Easy Digital Downloads
|
7 |
* Author URI: https://easydigitaldownloads.com
|
8 |
+
* Version: 2.11.4
|
9 |
* Text Domain: easy-digital-downloads
|
10 |
* Domain Path: languages
|
11 |
*
|
25 |
* @package EDD
|
26 |
* @category Core
|
27 |
* @author Easy Digital Downloads
|
28 |
+
* @version 2.11.4
|
29 |
*/
|
30 |
|
31 |
// Exit if accessed directly.
|
121 |
*/
|
122 |
public $customer_meta;
|
123 |
|
124 |
+
/**
|
125 |
+
* @var \EDD\Database\NotificationsDB
|
126 |
+
*/
|
127 |
+
public $notifications;
|
128 |
+
|
129 |
/**
|
130 |
* EDD Cart Object
|
131 |
*
|
134 |
*/
|
135 |
public $cart;
|
136 |
|
137 |
+
/**
|
138 |
+
* EDD Payment Stats Object
|
139 |
+
*
|
140 |
+
* @var EDD_Payment_Stats
|
141 |
+
* @since 1.8
|
142 |
+
*/
|
143 |
+
public $payment_stats;
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Holds registered premium EDD extensions.
|
147 |
+
*
|
148 |
+
* @var \EDD\Extensions\ExtensionRegistry
|
149 |
+
* @since 2.11.4
|
150 |
+
*/
|
151 |
+
public $extensionRegistry;
|
152 |
+
|
153 |
/**
|
154 |
* Main Easy_Digital_Downloads Instance.
|
155 |
*
|
173 |
add_action( 'plugins_loaded', array( self::$instance, 'load_textdomain' ) );
|
174 |
|
175 |
self::$instance->includes();
|
176 |
+
self::$instance->roles = new EDD_Roles();
|
177 |
+
self::$instance->fees = new EDD_Fees();
|
178 |
+
self::$instance->api = new EDD_API();
|
179 |
+
self::$instance->session = new EDD_Session();
|
180 |
+
self::$instance->html = new EDD_HTML_Elements();
|
181 |
+
self::$instance->emails = new EDD_Emails();
|
182 |
+
self::$instance->email_tags = new EDD_Email_Template_Tags();
|
183 |
+
self::$instance->customers = new EDD_DB_Customers();
|
184 |
+
self::$instance->customer_meta = new EDD_DB_Customer_Meta();
|
185 |
+
self::$instance->notifications = new \EDD\Database\NotificationsDB();
|
186 |
+
self::$instance->payment_stats = new EDD_Payment_Stats();
|
187 |
+
self::$instance->cart = new EDD_Cart();
|
188 |
+
self::$instance->extensionRegistry = new \EDD\Extensions\ExtensionRegistry();
|
189 |
+
|
190 |
+
self::$instance->registerApiEndpoints();
|
191 |
}
|
192 |
|
193 |
return self::$instance;
|
231 |
|
232 |
// Plugin version.
|
233 |
if ( ! defined( 'EDD_VERSION' ) ) {
|
234 |
+
define( 'EDD_VERSION', '2.11.4' );
|
235 |
}
|
236 |
|
237 |
// Plugin Folder Path.
|
274 |
}
|
275 |
require_once EDD_PLUGIN_DIR . 'includes/ajax-functions.php';
|
276 |
require_once EDD_PLUGIN_DIR . 'includes/api/class-edd-api.php';
|
277 |
+
require_once EDD_PLUGIN_DIR . 'includes/api/v3/Endpoint.php';
|
278 |
require_once EDD_PLUGIN_DIR . 'includes/template-functions.php';
|
279 |
require_once EDD_PLUGIN_DIR . 'includes/template-actions.php';
|
280 |
require_once EDD_PLUGIN_DIR . 'includes/checkout/template.php';
|
284 |
require_once EDD_PLUGIN_DIR . 'includes/cart/template.php';
|
285 |
require_once EDD_PLUGIN_DIR . 'includes/cart/actions.php';
|
286 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-db.php';
|
287 |
+
require_once EDD_PLUGIN_DIR . 'includes/database/NotificationsDB.php';
|
288 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customers.php';
|
289 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customer-meta.php';
|
290 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-customer-query.php';
|
304 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-stats.php';
|
305 |
require_once EDD_PLUGIN_DIR . 'includes/class-edd-roles.php';
|
306 |
require_once EDD_PLUGIN_DIR . 'includes/country-functions.php';
|
307 |
+
require_once EDD_PLUGIN_DIR . 'includes/extensions/licensing-functions.php';
|
308 |
+
require_once EDD_PLUGIN_DIR . 'includes/extensions/ExtensionRegistry.php';
|
309 |
require_once EDD_PLUGIN_DIR . 'includes/formatting.php';
|
310 |
require_once EDD_PLUGIN_DIR . 'includes/widgets.php';
|
311 |
require_once EDD_PLUGIN_DIR . 'includes/misc-functions.php';
|
350 |
require_once EDD_PLUGIN_DIR . 'includes/admin/tracking.php'; // Must be loaded on frontend to ensure cron runs
|
351 |
require_once EDD_PLUGIN_DIR . 'includes/privacy-functions.php';
|
352 |
require_once EDD_PLUGIN_DIR . 'includes/utils/class-tokenizer.php';
|
353 |
+
require_once EDD_PLUGIN_DIR . 'includes/models/Notification.php';
|
354 |
+
require_once EDD_PLUGIN_DIR . 'includes/utils/EnvironmentChecker.php';
|
355 |
+
require_once EDD_PLUGIN_DIR . 'includes/utils/NotificationImporter.php';
|
356 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/class-pass-manager.php';
|
357 |
|
358 |
if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
|
359 |
require_once EDD_PLUGIN_DIR . 'includes/admin/add-ons.php';
|
360 |
require_once EDD_PLUGIN_DIR . 'includes/admin/admin-footer.php';
|
361 |
require_once EDD_PLUGIN_DIR . 'includes/admin/admin-actions.php';
|
362 |
require_once EDD_PLUGIN_DIR . 'includes/admin/class-edd-notices.php';
|
|
|
363 |
require_once EDD_PLUGIN_DIR . 'includes/admin/admin-pages.php';
|
364 |
require_once EDD_PLUGIN_DIR . 'includes/admin/dashboard-widgets.php';
|
365 |
require_once EDD_PLUGIN_DIR . 'includes/admin/thickbox.php';
|
393 |
require_once EDD_PLUGIN_DIR . 'includes/admin/upgrades/upgrades.php';
|
394 |
require_once EDD_PLUGIN_DIR . 'includes/admin/class-edd-heartbeat.php';
|
395 |
require_once EDD_PLUGIN_DIR . 'includes/admin/tools/tools-actions.php';
|
396 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/class-extension-manager.php';
|
397 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/abstract-extension.php';
|
398 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/class-extension-product-data.php';
|
399 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/product-education/class-wpsmtp.php';
|
400 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/product-education/class-recurring.php';
|
401 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/product-education/class-reviews.php';
|
402 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/product-education/class-email-marketing.php';
|
403 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/product-education/class-invoices.php';
|
404 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/settings/settings-compatibility.php';
|
405 |
|
406 |
require_once EDD_PLUGIN_DIR . 'includes/libraries/class-persistent-dismissible.php';
|
407 |
require_once EDD_PLUGIN_DIR . 'includes/admin/promos/class-promo-handler.php';
|
414 |
require_once EDD_PLUGIN_DIR . 'includes/install.php';
|
415 |
}
|
416 |
|
417 |
+
/**
|
418 |
+
* Registers REST API endpoints.
|
419 |
+
*
|
420 |
+
* @todo move this somewhere better
|
421 |
+
*
|
422 |
+
* @since 2.11.4
|
423 |
+
*/
|
424 |
+
private function registerApiEndpoints() {
|
425 |
+
add_action( 'rest_api_init', function() {
|
426 |
+
$endpoints = array(
|
427 |
+
'\\EDD\\API\\v3\\Notifications',
|
428 |
+
);
|
429 |
+
|
430 |
+
foreach( $endpoints as $endpointClassName ) {
|
431 |
+
$endpointNamePieces = explode( '\\', $endpointClassName );
|
432 |
+
$endpointName = end( $endpointNamePieces );
|
433 |
+
|
434 |
+
require_once EDD_PLUGIN_DIR . 'includes/api/v3/' . $endpointName . '.php';
|
435 |
+
|
436 |
+
if ( class_exists( $endpointClassName ) ) {
|
437 |
+
$endpoint = new $endpointClassName();
|
438 |
+
$endpoint->register();
|
439 |
+
}
|
440 |
+
}
|
441 |
+
} );
|
442 |
+
}
|
443 |
+
|
444 |
/**
|
445 |
* Loads the plugin language files.
|
446 |
*
|
includes/admin/admin-pages.php
CHANGED
@@ -279,6 +279,11 @@ function edd_is_admin_page( $passed_page = '', $passed_view = '', $include_non_e
|
|
279 |
$found = true;
|
280 |
}
|
281 |
break;
|
|
|
|
|
|
|
|
|
|
|
282 |
default:
|
283 |
if ( ( 'download' == $typenow || 'download' === $post_type ) && $pagenow == 'edit.php' && 'edd-settings' === $page ) {
|
284 |
$found = true;
|
279 |
$found = true;
|
280 |
}
|
281 |
break;
|
282 |
+
case 'marketing':
|
283 |
+
if ( ( 'download' == $typenow || 'download' === $post_type ) && $pagenow == 'edit.php' && 'edd-settings' === $page && 'marketing' === $tab ) {
|
284 |
+
$found = true;
|
285 |
+
}
|
286 |
+
break;
|
287 |
default:
|
288 |
if ( ( 'download' == $typenow || 'download' === $post_type ) && $pagenow == 'edit.php' && 'edd-settings' === $page ) {
|
289 |
$found = true;
|
includes/admin/class-edd-notices.php
CHANGED
@@ -221,6 +221,9 @@ class EDD_Notices {
|
|
221 |
case 'email_sent' :
|
222 |
$notices['updated']['edd-payment-sent'] = __( 'The purchase receipt has been resent.', 'easy-digital-downloads' );
|
223 |
break;
|
|
|
|
|
|
|
224 |
case 'refreshed-reports' :
|
225 |
$notices['updated']['edd-refreshed-reports'] = __( 'The reports have been refreshed.', 'easy-digital-downloads' );
|
226 |
break;
|
@@ -248,9 +251,6 @@ class EDD_Notices {
|
|
248 |
case 'api-key-revoked' :
|
249 |
$notices['updated']['edd-api-key-revoked'] = __( 'API keys successfully revoked.', 'easy-digital-downloads' );
|
250 |
break;
|
251 |
-
case 'sendwp-connected' :
|
252 |
-
$notices['updated']['edd-sendwp-connected'] = __( 'SendWP has been successfully connected!', 'easy-digital-downloads' );
|
253 |
-
break;
|
254 |
}
|
255 |
}
|
256 |
|
221 |
case 'email_sent' :
|
222 |
$notices['updated']['edd-payment-sent'] = __( 'The purchase receipt has been resent.', 'easy-digital-downloads' );
|
223 |
break;
|
224 |
+
case 'email_send_failed':
|
225 |
+
$notices['error']['edd-payment-sent'] = __( 'Failed to send purchase receipt.', 'easy-digital-downloads' );
|
226 |
+
break;
|
227 |
case 'refreshed-reports' :
|
228 |
$notices['updated']['edd-refreshed-reports'] = __( 'The reports have been refreshed.', 'easy-digital-downloads' );
|
229 |
break;
|
251 |
case 'api-key-revoked' :
|
252 |
$notices['updated']['edd-api-key-revoked'] = __( 'API keys successfully revoked.', 'easy-digital-downloads' );
|
253 |
break;
|
|
|
|
|
|
|
254 |
}
|
255 |
}
|
256 |
|
includes/admin/class-pass-manager.php
CHANGED
@@ -25,7 +25,14 @@ class Pass_Manager {
|
|
25 |
*
|
26 |
* @var int|null
|
27 |
*/
|
28 |
-
public $highest_pass_id;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
/**
|
31 |
* Pass data from the database. This will be an array with
|
@@ -50,6 +57,13 @@ class Pass_Manager {
|
|
50 |
*/
|
51 |
public $has_pass_data = false;
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
/**
|
54 |
* Hierarchy of passes. This helps us determine if one pass
|
55 |
* is "higher" than another.
|
@@ -76,24 +90,28 @@ class Pass_Manager {
|
|
76 |
$this->has_pass_data = true;
|
77 |
}
|
78 |
|
79 |
-
|
|
|
|
|
|
|
80 |
}
|
81 |
|
82 |
/**
|
83 |
-
*
|
84 |
-
*
|
85 |
-
* @since 2.10.6
|
86 |
*
|
87 |
-
* @
|
|
|
88 |
*/
|
89 |
-
private function
|
90 |
-
$highest_pass_id = null;
|
91 |
|
92 |
if ( ! $this->has_pass_data || ! is_array( $this->pass_data ) ) {
|
93 |
-
return
|
94 |
}
|
95 |
|
96 |
-
|
|
|
|
|
|
|
97 |
/*
|
98 |
* If this pass was last verified more than 2 months ago, we're not using it.
|
99 |
* This ensures we never deal with a "stale" record for a pass that's no longer
|
@@ -112,17 +130,20 @@ class Pass_Manager {
|
|
112 |
|
113 |
// If we don't yet have a "highest pass", then this one is it automatically.
|
114 |
if ( empty( $highest_pass_id ) ) {
|
115 |
-
$
|
|
|
116 |
continue;
|
117 |
}
|
118 |
|
119 |
// Otherwise, this pass only takes over the highest pass if it's actually higher.
|
120 |
if ( self::pass_compare( (int) $pass_data['pass_id'], $highest_pass_id, '>' ) ) {
|
121 |
-
$
|
|
|
122 |
}
|
123 |
}
|
124 |
|
125 |
-
|
|
|
126 |
}
|
127 |
|
128 |
/**
|
@@ -136,6 +157,89 @@ class Pass_Manager {
|
|
136 |
return ! empty( $this->highest_pass_id );
|
137 |
}
|
138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
/**
|
140 |
* Compares two passes with each other according to the supplied operator.
|
141 |
*
|
25 |
*
|
26 |
* @var int|null
|
27 |
*/
|
28 |
+
public $highest_pass_id = null;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* License key of the highest tier pass that's activated.
|
32 |
+
*
|
33 |
+
* @var string|null
|
34 |
+
*/
|
35 |
+
public $highest_license_key = null;
|
36 |
|
37 |
/**
|
38 |
* Pass data from the database. This will be an array with
|
57 |
*/
|
58 |
public $has_pass_data = false;
|
59 |
|
60 |
+
/**
|
61 |
+
* Number of license keys entered on this site.
|
62 |
+
*
|
63 |
+
* @var int
|
64 |
+
*/
|
65 |
+
public $number_license_keys;
|
66 |
+
|
67 |
/**
|
68 |
* Hierarchy of passes. This helps us determine if one pass
|
69 |
* is "higher" than another.
|
90 |
$this->has_pass_data = true;
|
91 |
}
|
92 |
|
93 |
+
// Set up the highest pass data.
|
94 |
+
$this->set_highest_pass_data();
|
95 |
+
|
96 |
+
$this->number_license_keys = count( \EDD\Extensions\get_licensed_extension_slugs() );
|
97 |
}
|
98 |
|
99 |
/**
|
100 |
+
* Gets the highest pass and defines its data.
|
|
|
|
|
101 |
*
|
102 |
+
* @since 2.11.4
|
103 |
+
* @return void
|
104 |
*/
|
105 |
+
private function set_highest_pass_data() {
|
|
|
106 |
|
107 |
if ( ! $this->has_pass_data || ! is_array( $this->pass_data ) ) {
|
108 |
+
return;
|
109 |
}
|
110 |
|
111 |
+
$highest_license_key = null;
|
112 |
+
$highest_pass_id = null;
|
113 |
+
|
114 |
+
foreach ( $this->pass_data as $license_key => $pass_data ) {
|
115 |
/*
|
116 |
* If this pass was last verified more than 2 months ago, we're not using it.
|
117 |
* This ensures we never deal with a "stale" record for a pass that's no longer
|
130 |
|
131 |
// If we don't yet have a "highest pass", then this one is it automatically.
|
132 |
if ( empty( $highest_pass_id ) ) {
|
133 |
+
$highest_license_key = $license_key;
|
134 |
+
$highest_pass_id = intval( $pass_data['pass_id'] );
|
135 |
continue;
|
136 |
}
|
137 |
|
138 |
// Otherwise, this pass only takes over the highest pass if it's actually higher.
|
139 |
if ( self::pass_compare( (int) $pass_data['pass_id'], $highest_pass_id, '>' ) ) {
|
140 |
+
$highest_license_key = $license_key;
|
141 |
+
$highest_pass_id = intval( $pass_data['pass_id'] );
|
142 |
}
|
143 |
}
|
144 |
|
145 |
+
$this->highest_license_key = $highest_license_key;
|
146 |
+
$this->highest_pass_id = $highest_pass_id;
|
147 |
}
|
148 |
|
149 |
/**
|
157 |
return ! empty( $this->highest_pass_id );
|
158 |
}
|
159 |
|
160 |
+
/**
|
161 |
+
* If this is a "free install". That means there are no à la carte or pass licenses activated.
|
162 |
+
*
|
163 |
+
* @since 2.11.4
|
164 |
+
*
|
165 |
+
* @return bool
|
166 |
+
*/
|
167 |
+
public function isFree() {
|
168 |
+
return 0 === $this->number_license_keys;
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* If this site has an individual product license active (à la carte), but no pass active.
|
173 |
+
*
|
174 |
+
* @since 2.11.4
|
175 |
+
*
|
176 |
+
* @return bool
|
177 |
+
*/
|
178 |
+
public function hasIndividualLicense() {
|
179 |
+
return ! $this->isFree() && ! $this->has_pass();
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* If this site has a Personal Pass active.
|
184 |
+
*
|
185 |
+
* @since 2.11.4
|
186 |
+
*
|
187 |
+
* @return bool
|
188 |
+
*/
|
189 |
+
public function hasPersonalPass() {
|
190 |
+
try {
|
191 |
+
return self::pass_compare( $this->highest_pass_id, self::PERSONAL_PASS_ID, '=' );
|
192 |
+
} catch ( \Exception $e ) {
|
193 |
+
return false;
|
194 |
+
}
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* If this site has an Extended Pass active.
|
199 |
+
*
|
200 |
+
* @since 2.11.4
|
201 |
+
*
|
202 |
+
* @return bool
|
203 |
+
*/
|
204 |
+
public function hasExtendedPass() {
|
205 |
+
try {
|
206 |
+
return self::pass_compare( $this->highest_pass_id, self::EXTENDED_PASS_ID, '=' );
|
207 |
+
} catch ( \Exception $e ) {
|
208 |
+
return false;
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* If this site has a Professional Pass active.
|
214 |
+
*
|
215 |
+
* @since 2.11.4
|
216 |
+
*
|
217 |
+
* @return bool
|
218 |
+
*/
|
219 |
+
public function hasProfessionalPass() {
|
220 |
+
try {
|
221 |
+
return self::pass_compare( $this->highest_pass_id, self::PROFESSIONAL_PASS_ID, '=' );
|
222 |
+
} catch( \Exception $e ) {
|
223 |
+
return false;
|
224 |
+
}
|
225 |
+
}
|
226 |
+
|
227 |
+
/**
|
228 |
+
* If this site has an All Access Pass active.
|
229 |
+
* Note: This uses >= to account for both All Access and lifetime All Access.
|
230 |
+
*
|
231 |
+
* @since 2.11.4
|
232 |
+
*
|
233 |
+
* @return bool
|
234 |
+
*/
|
235 |
+
public function hasAllAccessPass() {
|
236 |
+
try {
|
237 |
+
return self::pass_compare( $this->highest_pass_id, self::ALL_ACCESS_PASS_ID, '>=' );
|
238 |
+
} catch( \Exception $e ) {
|
239 |
+
return false;
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
/**
|
244 |
* Compares two passes with each other according to the supplied operator.
|
245 |
*
|
includes/admin/dashboard-widgets.php
CHANGED
@@ -37,8 +37,18 @@ add_action('wp_dashboard_setup', 'edd_register_dashboard_widgets', 10 );
|
|
37 |
* @since 1.2.2
|
38 |
* @return void
|
39 |
*/
|
40 |
-
function edd_dashboard_sales_widget(
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
}
|
43 |
|
44 |
/**
|
37 |
* @since 1.2.2
|
38 |
* @return void
|
39 |
*/
|
40 |
+
function edd_dashboard_sales_widget() {
|
41 |
+
/**
|
42 |
+
* Action hook to add content to the dashboard widget.
|
43 |
+
* This content will not be replaced by the AJAX function:
|
44 |
+
* only the "edd-loading" content will.
|
45 |
+
*
|
46 |
+
* @since 2.11.4
|
47 |
+
*/
|
48 |
+
do_action( 'edd_dashboard_sales_widget' );
|
49 |
+
?>
|
50 |
+
<p class="edd-loading"><img src="<?php echo esc_url( EDD_PLUGIN_URL . 'assets/images/loading.gif' ); ?>"></p>
|
51 |
+
<?php
|
52 |
}
|
53 |
|
54 |
/**
|
includes/admin/downloads/metabox.php
CHANGED
@@ -21,9 +21,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
|
|
21 |
* @return void
|
22 |
*/
|
23 |
function edd_add_download_meta_box() {
|
24 |
-
$
|
25 |
-
$is_promo_active = edd_is_promo_active();
|
26 |
-
$post_types = apply_filters( 'edd_download_metabox_post_types', array( 'download' ) );
|
27 |
|
28 |
foreach ( $post_types as $post_type ) {
|
29 |
|
@@ -43,17 +41,6 @@ function edd_add_download_meta_box() {
|
|
43 |
/** Product Stats */
|
44 |
add_meta_box( 'edd_product_stats', sprintf( __( '%1$s Stats', 'easy-digital-downloads' ), edd_get_label_singular(), edd_get_label_plural() ), 'edd_render_stats_meta_box', $post_type, 'side', 'high' );
|
45 |
}
|
46 |
-
|
47 |
-
if ( ! class_exists( 'EDD_Reviews' ) ) {
|
48 |
-
add_meta_box( 'edd-reviews-status', __( 'Product Reviews', 'easy-digital-downloads' ), 'edd_render_review_status_metabox', 'download', 'side', 'low' );
|
49 |
-
}
|
50 |
-
|
51 |
-
// If a promotion is active and Product Reviews is either activated or installed but not activated, show promo.
|
52 |
-
if ( true === $is_promo_active ) {
|
53 |
-
if ( class_exists( 'EDD_Reviews' ) || ( ! class_exists( 'EDD_Reviews' ) && ! empty( $reviews_location ) ) ) {
|
54 |
-
add_meta_box( 'edd-promo', __( 'Black Friday & Cyber Monday sale!', 'easy-digital-downloads' ), 'edd_render_promo_metabox', 'download', 'side', 'low' );
|
55 |
-
}
|
56 |
-
}
|
57 |
}
|
58 |
}
|
59 |
add_action( 'add_meta_boxes', 'edd_add_download_meta_box' );
|
@@ -1219,95 +1206,6 @@ function edd_render_stats_meta_box() {
|
|
1219 |
do_action('edd_stats_meta_box');
|
1220 |
}
|
1221 |
|
1222 |
-
/**
|
1223 |
-
* Get the path of the Product Reviews plugin
|
1224 |
-
*
|
1225 |
-
* @since 2.9.20
|
1226 |
-
*
|
1227 |
-
* @return mixed|string
|
1228 |
-
*/
|
1229 |
-
function edd_reviews_location() {
|
1230 |
-
$possible_locations = array( 'edd-reviews/edd-reviews.php', 'EDD-Reviews/edd-reviews.php' );
|
1231 |
-
$reviews_location = '';
|
1232 |
-
|
1233 |
-
foreach ( $possible_locations as $location ) {
|
1234 |
-
|
1235 |
-
if ( 0 !== validate_plugin( $location ) ) {
|
1236 |
-
continue;
|
1237 |
-
}
|
1238 |
-
$reviews_location = $location;
|
1239 |
-
}
|
1240 |
-
|
1241 |
-
return $reviews_location;
|
1242 |
-
}
|
1243 |
-
|
1244 |
-
/**
|
1245 |
-
* Outputs a metabox for the Product Reviews extension to show or activate it.
|
1246 |
-
*
|
1247 |
-
* @since 2.8
|
1248 |
-
* @return void
|
1249 |
-
*/
|
1250 |
-
function edd_render_review_status_metabox() {
|
1251 |
-
$reviews_location = edd_reviews_location();
|
1252 |
-
$is_promo_active = edd_is_promo_active();
|
1253 |
-
|
1254 |
-
ob_start();
|
1255 |
-
|
1256 |
-
if ( ! empty( $reviews_location ) ) {
|
1257 |
-
$review_path = '';
|
1258 |
-
$base_url = wp_nonce_url( admin_url( 'plugins.php' ), 'activate-plugin_' . $reviews_location );
|
1259 |
-
$args = array(
|
1260 |
-
'action' => 'activate',
|
1261 |
-
'plugin' => sanitize_text_field( $reviews_location ),
|
1262 |
-
'plugin_status' => 'all',
|
1263 |
-
);
|
1264 |
-
$activate_url = add_query_arg( $args, $base_url );
|
1265 |
-
?><p style="text-align: center;"><a href="<?php echo esc_url( $activate_url ); ?>" class="button-secondary"><?php _e( 'Activate Reviews', 'easy-digital-downloads' ); ?></a></p><?php
|
1266 |
-
|
1267 |
-
} else {
|
1268 |
-
|
1269 |
-
// Adjust UTM params based on state of promotion.
|
1270 |
-
if ( true === $is_promo_active ) {
|
1271 |
-
$args = array(
|
1272 |
-
'utm_source' => 'download-metabox',
|
1273 |
-
'utm_medium' => 'wp-admin',
|
1274 |
-
'utm_campaign' => 'bfcm2019',
|
1275 |
-
'utm_content' => 'product-reviews-metabox-bfcm',
|
1276 |
-
);
|
1277 |
-
} else {
|
1278 |
-
$args = array(
|
1279 |
-
'utm_source' => 'edit-download',
|
1280 |
-
'utm_medium' => 'enable-reviews',
|
1281 |
-
'utm_campaign' => 'admin',
|
1282 |
-
);
|
1283 |
-
}
|
1284 |
-
|
1285 |
-
$base_url = 'https://easydigitaldownloads.com/downloads/product-reviews';
|
1286 |
-
$url = add_query_arg( $args, $base_url );
|
1287 |
-
?>
|
1288 |
-
<p>
|
1289 |
-
<?php
|
1290 |
-
// Translators: The %s represents the link to the Product Reviews extension.
|
1291 |
-
echo wp_kses_post( sprintf( __( 'Would you like to enable reviews for this product? Check out our <a target="_blank" href="%s">Product Reviews</a> extension.', 'easy-digital-downloads' ), esc_url( $url ) ) );
|
1292 |
-
?>
|
1293 |
-
</p>
|
1294 |
-
<?php
|
1295 |
-
// Add an additional note if a promotion is active.
|
1296 |
-
if ( true === $is_promo_active ) {
|
1297 |
-
?>
|
1298 |
-
<p>
|
1299 |
-
<?php echo wp_kses_post( __( 'Act now and <strong>SAVE 25%</strong> on your purchase. Sale ends <em>23:59 PM December 6th CST</em>. Use code <code>BFCM2019</code> at checkout.', 'easy-digital-downloads' ) ); ?>
|
1300 |
-
</p>
|
1301 |
-
<?php
|
1302 |
-
}
|
1303 |
-
}
|
1304 |
-
|
1305 |
-
$rendered = ob_get_contents();
|
1306 |
-
ob_end_clean();
|
1307 |
-
|
1308 |
-
echo wp_kses_post( $rendered );
|
1309 |
-
}
|
1310 |
-
|
1311 |
/**
|
1312 |
* Outputs a metabox for promotional content.
|
1313 |
*
|
21 |
* @return void
|
22 |
*/
|
23 |
function edd_add_download_meta_box() {
|
24 |
+
$post_types = apply_filters( 'edd_download_metabox_post_types', array( 'download' ) );
|
|
|
|
|
25 |
|
26 |
foreach ( $post_types as $post_type ) {
|
27 |
|
41 |
/** Product Stats */
|
42 |
add_meta_box( 'edd_product_stats', sprintf( __( '%1$s Stats', 'easy-digital-downloads' ), edd_get_label_singular(), edd_get_label_plural() ), 'edd_render_stats_meta_box', $post_type, 'side', 'high' );
|
43 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
45 |
}
|
46 |
add_action( 'add_meta_boxes', 'edd_add_download_meta_box' );
|
1206 |
do_action('edd_stats_meta_box');
|
1207 |
}
|
1208 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1209 |
/**
|
1210 |
* Outputs a metabox for promotional content.
|
1211 |
*
|
includes/admin/extensions/abstract-extension.php
ADDED
@@ -0,0 +1,344 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace EDD\Admin\Extensions;
|
4 |
+
|
5 |
+
use \EDD\Admin\Pass_Manager;
|
6 |
+
|
7 |
+
abstract class Extension {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* The product ID. This only needs to be set if the extending class is
|
11 |
+
* for a single product.
|
12 |
+
*
|
13 |
+
* @since 2.11.4
|
14 |
+
* @var int
|
15 |
+
*/
|
16 |
+
protected $item_id;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* The settings tab where this item will show.
|
20 |
+
*
|
21 |
+
* @since 2.11.4
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
protected $settings_tab = '';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The required AA pass level.
|
28 |
+
*/
|
29 |
+
const PASS_LEVEL = Pass_Manager::PERSONAL_PASS_ID;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* The Extension Manager
|
33 |
+
*
|
34 |
+
* @var \EDD\Admin\Extensions\Extension_Manager
|
35 |
+
*/
|
36 |
+
protected $manager;
|
37 |
+
|
38 |
+
public function __construct() {
|
39 |
+
$this->manager = new \EDD\Admin\Extensions\Extension_Manager( static::PASS_LEVEL );
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Whether the extension is activated.
|
44 |
+
*
|
45 |
+
* @since 2.11.4
|
46 |
+
* @return bool
|
47 |
+
*/
|
48 |
+
abstract protected function is_activated();
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Output the settings field (installation helper).
|
52 |
+
*
|
53 |
+
* @return void
|
54 |
+
*/
|
55 |
+
public function settings_field() {
|
56 |
+
if ( $this->is_activated() ) {
|
57 |
+
return;
|
58 |
+
}
|
59 |
+
$this->do_single_extension_card();
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Outputs a single extension card.
|
64 |
+
*
|
65 |
+
* @since 2.11.4
|
66 |
+
* @param false|int $item_id Optional: the individual extension product ID.
|
67 |
+
* @return void
|
68 |
+
*/
|
69 |
+
public function do_single_extension_card( $item_id = false ) {
|
70 |
+
if ( empty( $item_id ) && empty( $this->item_id ) ) {
|
71 |
+
return;
|
72 |
+
}
|
73 |
+
$product_data = $this->get_product_data( $item_id );
|
74 |
+
if ( ! $product_data || empty( $product_data->title ) ) {
|
75 |
+
return;
|
76 |
+
}
|
77 |
+
$this->manager->do_extension_card(
|
78 |
+
$product_data,
|
79 |
+
$this->get_button_parameters( $product_data, $item_id ),
|
80 |
+
$this->get_link_parameters( $product_data ),
|
81 |
+
$this->get_configuration( $product_data )
|
82 |
+
);
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Gets the product data for a specific extension.
|
87 |
+
*
|
88 |
+
* @param false|int $item_id
|
89 |
+
* @return bool|ProductData|array False if there is no data; product data object if there is, or possibly an array of arrays.
|
90 |
+
*/
|
91 |
+
public function get_product_data( $item_id = false ) {
|
92 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/extensions/class-extensions-api.php';
|
93 |
+
$api = new ExtensionsAPI();
|
94 |
+
$body = $this->get_api_body();
|
95 |
+
$api_item_id = $item_id ?: $this->item_id;
|
96 |
+
$product_data = $api->get_product_data( $body, $api_item_id );
|
97 |
+
if ( ! $product_data ) {
|
98 |
+
return false;
|
99 |
+
}
|
100 |
+
|
101 |
+
if ( $api_item_id ) {
|
102 |
+
return $product_data;
|
103 |
+
}
|
104 |
+
|
105 |
+
if ( $item_id && ! empty( $product_data[ $item_id ] ) ) {
|
106 |
+
return $product_data[ $item_id ];
|
107 |
+
}
|
108 |
+
|
109 |
+
return $product_data;
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Gets the custom configuration for the extension.
|
114 |
+
*
|
115 |
+
* @since 2.11.4
|
116 |
+
* @param ProductData $product_data Optionally allows the product data to be parsed in the configuration.
|
117 |
+
* @return array
|
118 |
+
*/
|
119 |
+
protected function get_configuration( ProductData $product_data ) {
|
120 |
+
return array();
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Formats a custom description array by running wpautop and converting it to a string.
|
125 |
+
*
|
126 |
+
* @since 2.11.4
|
127 |
+
* @param array $description The custom product description.
|
128 |
+
* @return string
|
129 |
+
*/
|
130 |
+
protected function format_description( array $description ) {
|
131 |
+
return implode( '', array_map( 'wpautop', $description ) );
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Whether the current screen is an EDD setings screen.
|
136 |
+
*
|
137 |
+
* @since 2.11.4
|
138 |
+
* @return bool
|
139 |
+
*/
|
140 |
+
protected function is_edd_settings_screen() {
|
141 |
+
return edd_is_admin_page( 'settings', $this->settings_tab );
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Whether the current screen is a download new/edit screen.
|
146 |
+
*
|
147 |
+
* @since 2.11.4
|
148 |
+
* @return bool
|
149 |
+
*/
|
150 |
+
protected function is_download_edit_screen() {
|
151 |
+
return edd_is_admin_page( 'download', 'edit' ) || edd_is_admin_page( 'download', 'new' );
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Whether the section for an individual product can be registered/shown.
|
156 |
+
*
|
157 |
+
* @since 2.11.4
|
158 |
+
* @return bool
|
159 |
+
*/
|
160 |
+
protected function can_show_product_section() {
|
161 |
+
if ( ! $this->is_edd_settings_screen() ) {
|
162 |
+
return false;
|
163 |
+
}
|
164 |
+
if ( $this->is_activated() ) {
|
165 |
+
return false;
|
166 |
+
}
|
167 |
+
if ( ! $this->get_product_data() ) {
|
168 |
+
return false;
|
169 |
+
}
|
170 |
+
|
171 |
+
return true;
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Gets the array for the body of the API request.
|
176 |
+
* Classes may need to override this (for example, to query a specific tag).
|
177 |
+
* Note that the first array key/value pair are used to create the option name.
|
178 |
+
*
|
179 |
+
* @return array
|
180 |
+
*/
|
181 |
+
protected function get_api_body() {
|
182 |
+
return array();
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Gets the type for the button data-type attribute.
|
187 |
+
* This is intended to sync with the Products API request.
|
188 |
+
* Default is product.
|
189 |
+
*
|
190 |
+
* Really a shim for array_key_first.
|
191 |
+
*
|
192 |
+
* @param array $array
|
193 |
+
* @return string
|
194 |
+
*/
|
195 |
+
private function get_type( array $array ) {
|
196 |
+
$type = 'product';
|
197 |
+
if ( empty( $array ) ) {
|
198 |
+
return $type;
|
199 |
+
}
|
200 |
+
if ( function_exists( 'array_key_first' ) ) {
|
201 |
+
return array_key_first( $array );
|
202 |
+
}
|
203 |
+
foreach ( $array as $key => $unused ) {
|
204 |
+
return $key;
|
205 |
+
}
|
206 |
+
|
207 |
+
return $type;
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Gets the button parameters.
|
212 |
+
* Classes should not need to replace this method.
|
213 |
+
*
|
214 |
+
* @param ProductData $product_data The extension data returned from the Products API.
|
215 |
+
* @param int|false $item_id Optional: the item ID.
|
216 |
+
* @return array
|
217 |
+
*/
|
218 |
+
protected function get_button_parameters( ProductData $product_data, $item_id = false ) {
|
219 |
+
if ( empty( $item_id ) ) {
|
220 |
+
$item_id = $this->item_id;
|
221 |
+
}
|
222 |
+
$body = $this->get_api_body();
|
223 |
+
$type = $this->get_type( $body );
|
224 |
+
$id = ! empty( $body[ $type ] ) ? $body[ $type ] : $this->item_id;
|
225 |
+
$button = array(
|
226 |
+
'type' => $type,
|
227 |
+
'id' => $id,
|
228 |
+
'product' => $item_id,
|
229 |
+
);
|
230 |
+
// If the extension is not installed, the button will prompt to install and activate it.
|
231 |
+
if ( ! $this->manager->is_plugin_installed( $product_data->basename ) ) {
|
232 |
+
if ( $this->manager->pass_can_download() ) {
|
233 |
+
$button = array(
|
234 |
+
/* translators: The extension name. */
|
235 |
+
'button_text' => sprintf( __( 'Log In to Your Account to Download %s', 'easy-digital-downloads' ), $product_data->title ),
|
236 |
+
'href' => $this->get_upgrade_url( $product_data, $item_id, true ),
|
237 |
+
'new_tab' => true,
|
238 |
+
'type' => $type,
|
239 |
+
);
|
240 |
+
} else {
|
241 |
+
$button = array(
|
242 |
+
/* translators: The extension name. */
|
243 |
+
'button_text' => sprintf( __( 'Upgrade Today to Access %s!', 'easy-digital-downloads' ), $product_data->title ),
|
244 |
+
'href' => $this->get_upgrade_url( $product_data, $item_id ),
|
245 |
+
'new_tab' => true,
|
246 |
+
'type' => $type,
|
247 |
+
);
|
248 |
+
}
|
249 |
+
} elseif ( ! empty( $product_data->basename ) && ! $this->manager->is_plugin_active( $product_data->basename ) ) {
|
250 |
+
// If the extension is installed, but not activated, the button will prompt to activate it.
|
251 |
+
$button['plugin'] = $product_data->basename;
|
252 |
+
$button['action'] = 'activate';
|
253 |
+
/* translators: The extension name. */
|
254 |
+
$button['button_text'] = sprintf( __( 'Activate %s', 'easy-digital-downloads' ), $product_data->title );
|
255 |
+
}
|
256 |
+
|
257 |
+
return $button;
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Gets the upgrade URL for the button.
|
262 |
+
*
|
263 |
+
* @since 2.11.4
|
264 |
+
* @param ProductData $product_data The product data object.
|
265 |
+
* @param int $item_id The item/product ID.
|
266 |
+
* @param bool $has_access Whether the user already has access to the extension (based on pass level).
|
267 |
+
* @return string
|
268 |
+
*/
|
269 |
+
private function get_upgrade_url( ProductData $product_data, $item_id, $has_access = false ) {
|
270 |
+
$url = 'https://easydigitaldownloads.com';
|
271 |
+
$tab = ! empty( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : '';
|
272 |
+
$utm_parameters = array(
|
273 |
+
'p' => urlencode( $item_id ),
|
274 |
+
'utm_source' => 'settings',
|
275 |
+
'utm_medium' => urlencode( $tab ),
|
276 |
+
'utm_campaign' => 'admin',
|
277 |
+
'utm_term' => urlencode( $product_data->slug ),
|
278 |
+
);
|
279 |
+
|
280 |
+
if ( $has_access ) {
|
281 |
+
$url = 'https://easydigitaldownloads.com/your-account/your-downloads/';
|
282 |
+
unset( $utm_parameters['p'] );
|
283 |
+
} elseif ( ! empty( $product_data->upgrade_url ) ) {
|
284 |
+
$url = esc_url_raw( $product_data->upgrade_url );
|
285 |
+
unset( $utm_parameters['p'] );
|
286 |
+
}
|
287 |
+
|
288 |
+
return add_query_arg(
|
289 |
+
$utm_parameters,
|
290 |
+
$url
|
291 |
+
);
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Gets the array of parameters for the link to configure the extension.
|
296 |
+
*
|
297 |
+
* @since 2.11.4
|
298 |
+
* @param ProductData $product_data The product data object.
|
299 |
+
* @return array
|
300 |
+
*/
|
301 |
+
protected function get_link_parameters( ProductData $product_data ) {
|
302 |
+
$configuration = $this->get_configuration( $product_data );
|
303 |
+
$tab = ! empty( $configuration['tab'] ) ? $configuration['tab'] : $product_data->tab;
|
304 |
+
$section = ! empty( $configuration['section'] ) ? $configuration['section'] : $product_data->section;
|
305 |
+
if ( empty( $tab ) && empty( $section ) ) {
|
306 |
+
return array(
|
307 |
+
/* translators: the plural Downloads label. */
|
308 |
+
'button_text' => sprintf( __( 'View %s', 'easy-digital-downloads' ), edd_get_label_plural() ),
|
309 |
+
'href' => add_query_arg(
|
310 |
+
array(
|
311 |
+
'post_type' => 'download',
|
312 |
+
),
|
313 |
+
admin_url( 'edit.php' )
|
314 |
+
),
|
315 |
+
);
|
316 |
+
}
|
317 |
+
|
318 |
+
return array(
|
319 |
+
/* translators: The extension name. */
|
320 |
+
'button_text' => sprintf( __( 'Configure %s', 'easy-digital-downloads' ), $product_data->title ),
|
321 |
+
'href' => add_query_arg(
|
322 |
+
array(
|
323 |
+
'post_type' => 'download',
|
324 |
+
'page' => 'edd-settings',
|
325 |
+
'tab' => urlencode( $tab ),
|
326 |
+
'section' => urlencode( $section ),
|
327 |
+
),
|
328 |
+
admin_url( 'edit.php' )
|
329 |
+
),
|
330 |
+
);
|
331 |
+
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* Optionally hides the submit button on screens where it's not needed.
|
335 |
+
*
|
336 |
+
* @since 2.11.4
|
337 |
+
* @return void
|
338 |
+
*/
|
339 |
+
public function hide_submit_button() {
|
340 |
+
?>
|
341 |
+
<style>p.submit{display:none;}</style>
|
342 |
+
<?php
|
343 |
+
}
|
344 |
+
}
|
includes/admin/extensions/class-extension-manager.php
ADDED
@@ -0,0 +1,485 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace EDD\Admin\Extensions;
|
4 |
+
|
5 |
+
use \EDD\Admin\Pass_Manager;
|
6 |
+
|
7 |
+
class Extension_Manager {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* All of the installed plugins on the site.
|
11 |
+
*
|
12 |
+
* @since 2.11.4
|
13 |
+
* @var array
|
14 |
+
*/
|
15 |
+
public $all_plugins;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* The minimum pass ID required to install the extension.
|
19 |
+
*
|
20 |
+
* @since 2.11.4
|
21 |
+
* @var int
|
22 |
+
*/
|
23 |
+
private $required_pass_id;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Pass Manager class
|
27 |
+
*
|
28 |
+
* @var Pass_Manager
|
29 |
+
*/
|
30 |
+
protected $pass_manager;
|
31 |
+
|
32 |
+
public function __construct( $required_pass_id = null ) {
|
33 |
+
if ( $required_pass_id ) {
|
34 |
+
$this->required_pass_id = $required_pass_id;
|
35 |
+
}
|
36 |
+
$this->pass_manager = new Pass_Manager();
|
37 |
+
|
38 |
+
add_action( 'wp_ajax_edd_activate_extension', array( $this, 'activate' ) );
|
39 |
+
add_action( 'wp_ajax_edd_install_extension', array( $this, 'install' ) );
|
40 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'register_assets' ) );
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Registers the extension manager script and style.
|
45 |
+
*
|
46 |
+
* @since 2.11.4
|
47 |
+
* @return void
|
48 |
+
*/
|
49 |
+
public function register_assets() {
|
50 |
+
if ( wp_script_is( 'edd-extension-manager', 'registered' ) ) {
|
51 |
+
return;
|
52 |
+
}
|
53 |
+
$minify = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
54 |
+
wp_register_style( 'edd-extension-manager', EDD_PLUGIN_URL . "assets/css/extension-manager{$minify}.css", array(), EDD_VERSION );
|
55 |
+
wp_register_script( 'edd-extension-manager', EDD_PLUGIN_URL . "assets/js/extension-manager{$minify}.js", array( 'jquery' ), EDD_VERSION, true );
|
56 |
+
wp_localize_script(
|
57 |
+
'edd-extension-manager',
|
58 |
+
'EDDExtensionManager',
|
59 |
+
array(
|
60 |
+
'activating' => __( 'Activating', 'easy-digital-downloads' ),
|
61 |
+
'installing' => __( 'Installing', 'easy-digital-downloads' ),
|
62 |
+
'plugin_install_failed' => __( 'Could not install the plugin. Please download and install it manually via Plugins > Add New.', 'easy-digital-downloads' ),
|
63 |
+
'extension_install_failed' => sprintf(
|
64 |
+
/* translators: 1. opening anchor tag, do not translate; 2. closing anchor tag, do not translate */
|
65 |
+
__( 'Could not install the extension. Please %1$sdownload it from your account%2$s and install it manually.', 'easy-digital-downloads' ),
|
66 |
+
'<a href="https://easydigitaldownloads.com/your-account/" target="_blank" rel="noopener noreferrer">',
|
67 |
+
'</a>'
|
68 |
+
),
|
69 |
+
'extension_manager_nonce' => wp_create_nonce( 'edd_extensionmanager' ),
|
70 |
+
)
|
71 |
+
);
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Enqueues the extension manager script/style.
|
76 |
+
*
|
77 |
+
* @since 2.11.4
|
78 |
+
* @return void
|
79 |
+
*/
|
80 |
+
public function enqueue() {
|
81 |
+
wp_enqueue_style( 'edd-extension-manager' );
|
82 |
+
wp_enqueue_script( 'edd-extension-manager' );
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Outputs a standard extension card.
|
87 |
+
*
|
88 |
+
* @since 2.11.4
|
89 |
+
* @param ProductData $product The product data object.
|
90 |
+
* @param array $inactive_parameters The array of information to build the button for an inactive/not installed plugin.
|
91 |
+
* @param array $active_parameters The array of information needed to build the link to configure an active plugin.
|
92 |
+
* @param array $configuration The optional array of data to override the product data retrieved from the API.
|
93 |
+
* @return void
|
94 |
+
*/
|
95 |
+
public function do_extension_card( ProductData $product, $inactive_parameters, $active_parameters, $configuration = array() ) {
|
96 |
+
$this->enqueue();
|
97 |
+
if ( ! empty( $configuration ) ) {
|
98 |
+
$product = $product->mergeConfig( $configuration );
|
99 |
+
}
|
100 |
+
?>
|
101 |
+
<div class="<?php echo esc_attr( implode( ' ', array_map( 'sanitize_html_class', $this->get_card_classes( $product ) ) ) ); ?>">
|
102 |
+
<h3 class="edd-extension-manager__title"><?php echo esc_html( $product->title ); ?></h3>
|
103 |
+
<div class="edd-extension-manager__body">
|
104 |
+
<?php if ( ! empty( $product->image ) ) : ?>
|
105 |
+
<div class="edd-extension-manager__image">
|
106 |
+
<img alt="" src="<?php echo esc_url( $product->image ); ?>" />
|
107 |
+
</div>
|
108 |
+
<?php endif; ?>
|
109 |
+
<?php if ( ! empty( $product->description ) ) : ?>
|
110 |
+
<div class="edd-extension-manager__description"><?php echo wp_kses_post( wpautop( $product->description ) ); ?></div>
|
111 |
+
<?php endif; ?>
|
112 |
+
<?php if ( ! empty( $product->features ) && is_array( $product->features ) ) : ?>
|
113 |
+
<div class="edd-extension-manager__features">
|
114 |
+
<ul>
|
115 |
+
<?php foreach ( $product->features as $feature ) : ?>
|
116 |
+
<li><span class="dashicons dashicons-yes"></span><?php echo esc_html( $feature ); ?></li>
|
117 |
+
<?php endforeach; ?>
|
118 |
+
</ul>
|
119 |
+
</div>
|
120 |
+
<?php endif; ?>
|
121 |
+
<div class="edd-extension-manager__group">
|
122 |
+
<?php
|
123 |
+
if ( ! empty( $product->basename ) && ! $this->is_plugin_active( $product->basename ) ) {
|
124 |
+
?>
|
125 |
+
<div class="edd-extension-manager__step">
|
126 |
+
<?php $this->button( $inactive_parameters ); ?>
|
127 |
+
</div>
|
128 |
+
<?php
|
129 |
+
}
|
130 |
+
?>
|
131 |
+
<div class="edd-extension-manager__step">
|
132 |
+
<?php $this->link( $active_parameters ); ?>
|
133 |
+
</div>
|
134 |
+
</div>
|
135 |
+
</div>
|
136 |
+
</div>
|
137 |
+
<?php
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Gets the CSS classes for the single extension card.
|
142 |
+
*
|
143 |
+
* @since 2.11.4
|
144 |
+
* @param ProductData $product The product data object.
|
145 |
+
* @return array The array of CSS classes.
|
146 |
+
*/
|
147 |
+
private function get_card_classes( $product ) {
|
148 |
+
$base_class = 'edd-extension-manager__card';
|
149 |
+
$card_classes = array(
|
150 |
+
$base_class,
|
151 |
+
);
|
152 |
+
$variation = 'stacked';
|
153 |
+
if ( ! empty( $product->style ) ) {
|
154 |
+
$variation = $product->style;
|
155 |
+
}
|
156 |
+
if ( 'detailed-2col' === $variation && ( empty( $product->features ) || ! is_array( $product->features ) ) ) {
|
157 |
+
$variation = 'detailed';
|
158 |
+
}
|
159 |
+
$card_classes[] = "{$base_class}--{$variation}";
|
160 |
+
|
161 |
+
return $card_classes;
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Outputs the button to activate/install a plugin/extension.
|
166 |
+
* If a link is passed in the args, create a button style link instead (@uses $this->link()).
|
167 |
+
*
|
168 |
+
* @since 2.11.4
|
169 |
+
* @param array $args The array of parameters for the button.
|
170 |
+
* @return void
|
171 |
+
*/
|
172 |
+
public function button( $args ) {
|
173 |
+
if ( ! empty( $args['href'] ) ) {
|
174 |
+
$this->link( $args );
|
175 |
+
return;
|
176 |
+
}
|
177 |
+
$defaults = array(
|
178 |
+
'button_class' => 'button-primary',
|
179 |
+
'plugin' => '',
|
180 |
+
'action' => '',
|
181 |
+
'button_text' => '',
|
182 |
+
'type' => 'plugin',
|
183 |
+
'id' => '',
|
184 |
+
'product' => '',
|
185 |
+
'pass' => $this->required_pass_id,
|
186 |
+
);
|
187 |
+
$args = wp_parse_args( $args, $defaults );
|
188 |
+
if ( empty( $args['button_text'] ) ) {
|
189 |
+
return;
|
190 |
+
}
|
191 |
+
?>
|
192 |
+
<button
|
193 |
+
class="button <?php echo esc_attr( $args['button_class'] ); ?> edd-extension-manager__action"
|
194 |
+
<?php
|
195 |
+
foreach ( $args as $key => $attribute ) {
|
196 |
+
if ( empty( $attribute ) || in_array( $key, array( 'button_class', 'button_text' ), true ) ) {
|
197 |
+
continue;
|
198 |
+
}
|
199 |
+
printf(
|
200 |
+
' data-%s="%s"',
|
201 |
+
esc_attr( $key ),
|
202 |
+
esc_attr( $attribute )
|
203 |
+
);
|
204 |
+
}
|
205 |
+
?>
|
206 |
+
>
|
207 |
+
<?php echo esc_html( $args['button_text'] ); ?>
|
208 |
+
</button>
|
209 |
+
<?php
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Outputs the link, if it should be a link.
|
214 |
+
*
|
215 |
+
* @param array $args
|
216 |
+
* @return void
|
217 |
+
*/
|
218 |
+
public function link( $args ) {
|
219 |
+
$defaults = array(
|
220 |
+
'button_class' => 'button-primary',
|
221 |
+
'button_text' => '',
|
222 |
+
);
|
223 |
+
$args = wp_parse_args( $args, $defaults );
|
224 |
+
if ( empty( $args['button_text'] ) ) {
|
225 |
+
return;
|
226 |
+
}
|
227 |
+
?>
|
228 |
+
<a
|
229 |
+
class="button <?php echo esc_attr( $args['button_class'] ); ?>"
|
230 |
+
href="<?php echo esc_url( $args['href'] ); ?>"
|
231 |
+
<?php echo ! empty( $args['new_tab'] ) ? ' target="_blank" rel="noopener noreferrer"' : ''; ?>
|
232 |
+
>
|
233 |
+
<?php echo esc_html( $args['button_text'] ); ?>
|
234 |
+
</a>
|
235 |
+
<?php
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Installs and maybe activates a plugin or extension.
|
240 |
+
*
|
241 |
+
* @since 2.11.4
|
242 |
+
*/
|
243 |
+
public function install() {
|
244 |
+
|
245 |
+
// Run a security check.
|
246 |
+
check_ajax_referer( 'edd_extensionmanager', 'nonce', true );
|
247 |
+
|
248 |
+
$generic_error = esc_html__( 'There was an error while performing your request.', 'easy-digital-downloads' );
|
249 |
+
$type = ! empty( $_POST['type'] ) ? sanitize_text_field( $_POST['type'] ) : '';
|
250 |
+
$required_pass = ! empty( $_POST['pass'] ) ? sanitize_text_field( $_POST['pass'] ) : '';
|
251 |
+
$result = array(
|
252 |
+
'message' => $generic_error,
|
253 |
+
'is_activated' => false,
|
254 |
+
);
|
255 |
+
if ( ! $type ) {
|
256 |
+
wp_send_json_error( $result );
|
257 |
+
}
|
258 |
+
|
259 |
+
// Check if new installations are allowed.
|
260 |
+
if ( ! $this->can_install( $type, $required_pass ) ) {
|
261 |
+
wp_send_json_error( $result );
|
262 |
+
}
|
263 |
+
|
264 |
+
$result['message'] = 'plugin' === $type
|
265 |
+
? __( 'Could not install the plugin. Please download and install it manually via Plugins > Add New.', 'easy-digital-downloads' )
|
266 |
+
: sprintf(
|
267 |
+
/* translators: 1. opening anchor tag, do not translate; 2. closing anchor tag, do not translate */
|
268 |
+
__( 'Could not install the extension. Please %1$sdownload it from your account%2$s and install it manually.', 'easy-digital-downloads' ),
|
269 |
+
'<a href="https://easydigitaldownloads.com/your-account/" target="_blank" rel="noopener noreferrer">',
|
270 |
+
'</a>'
|
271 |
+
);
|
272 |
+
|
273 |
+
$plugin = ! empty( $_POST['plugin'] ) ? sanitize_text_field( $_POST['plugin'] ) : '';
|
274 |
+
if ( empty( $plugin ) ) {
|
275 |
+
wp_send_json_error( $result );
|
276 |
+
}
|
277 |
+
|
278 |
+
// Set the current screen to avoid undefined notices.
|
279 |
+
set_current_screen( 'download_page_edd-settings' );
|
280 |
+
|
281 |
+
// Prepare variables.
|
282 |
+
$url = esc_url_raw(
|
283 |
+
add_query_arg(
|
284 |
+
array(
|
285 |
+
'post_type' => 'download',
|
286 |
+
'page' => 'edd-addons',
|
287 |
+
),
|
288 |
+
admin_url( 'edit.php' )
|
289 |
+
)
|
290 |
+
);
|
291 |
+
|
292 |
+
ob_start();
|
293 |
+
$creds = request_filesystem_credentials( $url, '', false, false, null );
|
294 |
+
|
295 |
+
// Hide the filesystem credentials form.
|
296 |
+
ob_end_clean();
|
297 |
+
|
298 |
+
// Check for file system permissions.
|
299 |
+
if ( ! $creds ) {
|
300 |
+
wp_send_json_error( $result );
|
301 |
+
}
|
302 |
+
|
303 |
+
if ( ! WP_Filesystem( $creds ) ) {
|
304 |
+
wp_send_json_error( $result );
|
305 |
+
}
|
306 |
+
|
307 |
+
/*
|
308 |
+
* We do not need any extra credentials if we have gotten this far, so let's install the plugin.
|
309 |
+
*/
|
310 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/installers/class-plugin-silent-upgrader.php';
|
311 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/installers/class-plugin-silent-upgrader-skin.php';
|
312 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/installers/class-install-skin.php';
|
313 |
+
|
314 |
+
// Do not allow WordPress to search/download translations, as this will break JS output.
|
315 |
+
remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
|
316 |
+
|
317 |
+
// Create the plugin upgrader with our custom skin.
|
318 |
+
$installer = new \EDD\Admin\Installers\PluginSilentUpgrader( new \EDD\Admin\Installers\Install_Skin() );
|
319 |
+
|
320 |
+
// Error check.
|
321 |
+
if ( ! method_exists( $installer, 'install' ) || empty( $plugin ) ) {
|
322 |
+
wp_send_json_error( $result );
|
323 |
+
}
|
324 |
+
|
325 |
+
$installer->install( $plugin ); // phpcs:ignore
|
326 |
+
|
327 |
+
// Flush the cache and return the newly installed plugin basename.
|
328 |
+
wp_cache_flush();
|
329 |
+
|
330 |
+
$plugin_basename = $installer->plugin_info();
|
331 |
+
|
332 |
+
// Check for permissions.
|
333 |
+
if ( ! current_user_can( 'activate_plugins' ) ) {
|
334 |
+
$result['message'] = 'plugin' === $type ? esc_html__( 'Plugin installed.', 'easy-digital-downloads' ) : esc_html__( 'Extension installed.', 'easy-digital-downloads' );
|
335 |
+
|
336 |
+
wp_send_json_error( $result );
|
337 |
+
}
|
338 |
+
|
339 |
+
$this->activate( $plugin_basename );
|
340 |
+
}
|
341 |
+
|
342 |
+
/**
|
343 |
+
* Activates an existing extension.
|
344 |
+
*
|
345 |
+
* @since 2.11.4
|
346 |
+
* @param string $plugin_basename Optional: the plugin basename.
|
347 |
+
*/
|
348 |
+
public function activate( $plugin_basename = '' ) {
|
349 |
+
|
350 |
+
$result = array(
|
351 |
+
'message' => __( 'There was an error while performing your request.', 'easy-digital-downloads' ),
|
352 |
+
'is_activated' => false,
|
353 |
+
);
|
354 |
+
|
355 |
+
// Check for permissions.
|
356 |
+
if ( ! check_ajax_referer( 'edd_extensionmanager', 'nonce', false ) || ! current_user_can( 'activate_plugins' ) ) {
|
357 |
+
$result['message'] = __( 'Plugin activation is not available for you on this site.', 'easy-digital-downloads' );
|
358 |
+
wp_send_json_error( $result );
|
359 |
+
}
|
360 |
+
|
361 |
+
$already_installed = false;
|
362 |
+
if ( empty( $plugin_basename ) ) {
|
363 |
+
$plugin_basename = ! empty( $_POST['plugin'] ) ? sanitize_text_field( $_POST['plugin'] ) : '';
|
364 |
+
$already_installed = true;
|
365 |
+
}
|
366 |
+
|
367 |
+
$plugin_basename = sanitize_text_field( wp_unslash( $plugin_basename ) );
|
368 |
+
$type = ! empty( $_POST['type'] ) ? sanitize_text_field( $_POST['type'] ) : '';
|
369 |
+
if ( 'plugin' !== $type ) {
|
370 |
+
$type = 'extension';
|
371 |
+
}
|
372 |
+
$result = array(
|
373 |
+
/* translators: "extension" or "plugin" as defined by $type */
|
374 |
+
'message' => sprintf( __( 'Could not activate the %s.', 'easy-digital-downloads' ), esc_html( $type ) ),
|
375 |
+
'is_activated' => false,
|
376 |
+
);
|
377 |
+
if ( empty( $plugin_basename ) || empty( $type ) ) {
|
378 |
+
wp_send_json_error( $result );
|
379 |
+
}
|
380 |
+
|
381 |
+
$result['basename'] = $plugin_basename;
|
382 |
+
|
383 |
+
// Activate the plugin silently.
|
384 |
+
$activated = activate_plugin( $plugin_basename );
|
385 |
+
|
386 |
+
if ( ! is_wp_error( $activated ) ) {
|
387 |
+
|
388 |
+
if ( $already_installed ) {
|
389 |
+
$message = 'plugin' === $type ? esc_html__( 'Plugin activated.', 'easy-digital-downloads' ) : esc_html__( 'Extension activated.', 'easy-digital-downloads' );
|
390 |
+
} else {
|
391 |
+
$message = 'plugin' === $type ? esc_html__( 'Plugin installed & activated.', 'easy-digital-downloads' ) : esc_html__( 'Extension installed & activated.', 'easy-digital-downloads' );
|
392 |
+
}
|
393 |
+
$result['is_activated'] = true;
|
394 |
+
$result['message'] = $message;
|
395 |
+
|
396 |
+
wp_send_json_success( $result );
|
397 |
+
}
|
398 |
+
|
399 |
+
// Fallback error just in case.
|
400 |
+
wp_send_json_error( $result );
|
401 |
+
}
|
402 |
+
|
403 |
+
/**
|
404 |
+
* Determine if the plugin/extension installations are allowed.
|
405 |
+
*
|
406 |
+
* @since 2.11.4
|
407 |
+
*
|
408 |
+
* @param string $type Should be `plugin` or `extension`.
|
409 |
+
*
|
410 |
+
* @return bool
|
411 |
+
*/
|
412 |
+
public function can_install( $type, $required_pass_id = false ) {
|
413 |
+
|
414 |
+
if ( ! current_user_can( 'install_plugins' ) ) {
|
415 |
+
return false;
|
416 |
+
}
|
417 |
+
|
418 |
+
// Determine whether file modifications are allowed.
|
419 |
+
if ( ! wp_is_file_mod_allowed( 'edd_can_install' ) ) {
|
420 |
+
return false;
|
421 |
+
}
|
422 |
+
|
423 |
+
// All plugin checks are done.
|
424 |
+
if ( 'plugin' === $type ) {
|
425 |
+
return true;
|
426 |
+
}
|
427 |
+
|
428 |
+
return $this->pass_can_download( $required_pass_id );
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Checks if a user's pass can download an extension.
|
433 |
+
*
|
434 |
+
* @since 2.11.4
|
435 |
+
* @return bool Returns true if the current site has an active pass and it is greater than or equal to the extension's minimum pass.
|
436 |
+
*/
|
437 |
+
public function pass_can_download( $required_pass_id = false ) {
|
438 |
+
$highest_pass_id = $this->pass_manager->highest_pass_id;
|
439 |
+
if ( ! $required_pass_id ) {
|
440 |
+
$required_pass_id = $this->required_pass_id;
|
441 |
+
}
|
442 |
+
|
443 |
+
return ! empty( $highest_pass_id ) && ! empty( $required_pass_id ) && $this->pass_manager->pass_compare( $highest_pass_id, $required_pass_id, '>=' );
|
444 |
+
}
|
445 |
+
|
446 |
+
/**
|
447 |
+
* Get all installed plugins.
|
448 |
+
*
|
449 |
+
* @since 2.11.4
|
450 |
+
* @return array
|
451 |
+
*/
|
452 |
+
public function get_plugins() {
|
453 |
+
if ( $this->all_plugins ) {
|
454 |
+
return $this->all_plugins;
|
455 |
+
}
|
456 |
+
|
457 |
+
$this->all_plugins = get_plugins();
|
458 |
+
|
459 |
+
return $this->all_plugins;
|
460 |
+
}
|
461 |
+
|
462 |
+
/**
|
463 |
+
* Check if a plugin is installed.
|
464 |
+
*
|
465 |
+
* @since 2.11.4
|
466 |
+
* @param string $plugin The path to the main plugin file, eg 'my-plugin/my-plugin.php'.
|
467 |
+
* @return boolean
|
468 |
+
*/
|
469 |
+
public function is_plugin_installed( $plugin ) {
|
470 |
+
return array_key_exists( $plugin, $this->get_plugins() );
|
471 |
+
}
|
472 |
+
|
473 |
+
/**
|
474 |
+
* Whether a given plugin is active or not.
|
475 |
+
*
|
476 |
+
* @since 2.11.4
|
477 |
+
* @param string|ProductData $basename_or_data The path to the main plugin file, eg 'my-plugin/my-plugin.php', or the product data object.
|
478 |
+
* @return boolean
|
479 |
+
*/
|
480 |
+
public function is_plugin_active( $basename_or_data ) {
|
481 |
+
$basename = ! empty( $basename_or_data->basename ) ? $basename_or_data->basename : $basename_or_data;
|
482 |
+
|
483 |
+
return ! empty( $basename ) && is_plugin_active( $basename );
|
484 |
+
}
|
485 |
+
}
|
includes/admin/extensions/class-extension-product-data.php
ADDED
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace EDD\Admin\Extensions;
|
4 |
+
|
5 |
+
class ProductData {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* The product name.
|
9 |
+
*
|
10 |
+
* @since 2.11.4
|
11 |
+
* @var string
|
12 |
+
*/
|
13 |
+
public $title;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* The product slug.
|
17 |
+
*
|
18 |
+
* @since 2.11.4
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
public $slug = '';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* The URL for the product featured image.
|
25 |
+
*
|
26 |
+
* @since 2.11.4
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
public $image;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* The product description.
|
33 |
+
*
|
34 |
+
* @since 2.11.4
|
35 |
+
* @var string
|
36 |
+
*/
|
37 |
+
public $description;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* The extension basename.
|
41 |
+
*
|
42 |
+
* @since 2.11.4
|
43 |
+
* @var string
|
44 |
+
*/
|
45 |
+
public $basename;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* The settings tab where the extension settings will show.
|
49 |
+
*
|
50 |
+
* @since 2.11.4
|
51 |
+
* @var string
|
52 |
+
*/
|
53 |
+
public $tab;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* The settings section for the extension.
|
57 |
+
*
|
58 |
+
* @since 2.11.4
|
59 |
+
* @var string
|
60 |
+
*/
|
61 |
+
public $section;
|
62 |
+
|
63 |
+
/**
|
64 |
+
* The product features.
|
65 |
+
*
|
66 |
+
* @since 2.11.4
|
67 |
+
* @var array
|
68 |
+
*/
|
69 |
+
public $features = array();
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Take array and return object.
|
73 |
+
*
|
74 |
+
* @since 2.11.4
|
75 |
+
* @param array $array
|
76 |
+
* @return ProductData
|
77 |
+
* @throws \InvalidArgumentException
|
78 |
+
*/
|
79 |
+
public function fromArray( $array ) {
|
80 |
+
$expected_keys = array( 'title', 'slug', 'description', 'basename' );
|
81 |
+
$array_to_check = array_intersect_key( $array, array_flip( $expected_keys ) );
|
82 |
+
|
83 |
+
if ( empty( $array_to_check ) ) {
|
84 |
+
throw new \InvalidArgumentException(
|
85 |
+
'Invalid ProductData object, must have the exact following keys: ' . implode( ', ', $expected_keys )
|
86 |
+
);
|
87 |
+
}
|
88 |
+
|
89 |
+
$product_data = new self();
|
90 |
+
foreach ( $array as $key => $value ) {
|
91 |
+
$product_data->$key = $value;
|
92 |
+
}
|
93 |
+
|
94 |
+
return $product_data;
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Merge an array of data into an object.
|
99 |
+
*
|
100 |
+
* @since 2.11.4
|
101 |
+
* @param array $configuration The custom configuration data.
|
102 |
+
* @return ProductData
|
103 |
+
*/
|
104 |
+
public function mergeConfig( array $configuration ) {
|
105 |
+
foreach ( $configuration as $key => $value ) {
|
106 |
+
$this->{$key} = $value;
|
107 |
+
}
|
108 |
+
|
109 |
+
return $this;
|
110 |
+
}
|
111 |
+
}
|
includes/admin/extensions/class-extensions-api.php
ADDED
@@ -0,0 +1,222 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace EDD\Admin\Extensions;
|
4 |
+
|
5 |
+
class ExtensionsAPI {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Gets the product data from the EDD Products API.
|
9 |
+
*
|
10 |
+
* @since 2.11.4
|
11 |
+
* @param array $body The body for the API request.
|
12 |
+
* @param int $item_id The product ID, if querying a single product.
|
13 |
+
* @return false|array|ProductData
|
14 |
+
*/
|
15 |
+
public function get_product_data( $body = array(), $item_id = false ) {
|
16 |
+
if ( empty( $body ) ) {
|
17 |
+
if ( empty( $item_id ) ) {
|
18 |
+
return false;
|
19 |
+
}
|
20 |
+
$body = $this->get_api_body( $item_id );
|
21 |
+
}
|
22 |
+
$key = $this->array_key_first( $body );
|
23 |
+
// The option name is created from the first key/value pair of the API "body".
|
24 |
+
$option_name = sanitize_key( "edd_extension_{$key}_{$body[ $key ]}_data" );
|
25 |
+
$option = get_option( $option_name );
|
26 |
+
$is_stale = $this->option_has_expired( $option );
|
27 |
+
|
28 |
+
// The ProductData class.
|
29 |
+
$product_data = new ProductData();
|
30 |
+
|
31 |
+
// If the data is "fresh" and what we want exists, return it.
|
32 |
+
if ( $option && ! $is_stale ) {
|
33 |
+
if ( $item_id && ! empty( $option[ $item_id ] ) ) {
|
34 |
+
return $product_data->fromArray( $option[ $item_id ] );
|
35 |
+
} elseif ( ! empty( $option['timeout'] ) ) {
|
36 |
+
unset( $option['timeout'] );
|
37 |
+
|
38 |
+
return $option;
|
39 |
+
}
|
40 |
+
}
|
41 |
+
|
42 |
+
// Get all of the product data.
|
43 |
+
$all_product_data = $this->get_all_product_data();
|
44 |
+
|
45 |
+
// If no product data was retrieved, let the option sit for an hour.
|
46 |
+
if ( empty( $all_product_data ) ) {
|
47 |
+
$data = array(
|
48 |
+
'timeout' => strtotime( '+1 hour', time() ),
|
49 |
+
);
|
50 |
+
if ( $option && $is_stale ) {
|
51 |
+
$data = array_merge( $option, $data );
|
52 |
+
}
|
53 |
+
update_option(
|
54 |
+
$option_name,
|
55 |
+
$data,
|
56 |
+
false
|
57 |
+
);
|
58 |
+
|
59 |
+
if ( $item_id && ! empty( $option[ $item_id ] ) ) {
|
60 |
+
return $product_data->fromArray( $option[ $item_id ] );
|
61 |
+
}
|
62 |
+
unset( $option['timeout'] );
|
63 |
+
|
64 |
+
return $option;
|
65 |
+
}
|
66 |
+
|
67 |
+
$value = array(
|
68 |
+
'timeout' => strtotime( '+1 week', time() ),
|
69 |
+
);
|
70 |
+
if ( $item_id && ! empty( $all_product_data->$item_id ) ) {
|
71 |
+
$item = $all_product_data->$item_id;
|
72 |
+
$value[ $item_id ] = $this->get_item_data( $item );
|
73 |
+
} elseif ( in_array( $key, array( 'category', 'tag' ), true ) ) {
|
74 |
+
$term_id = $body[ $key ];
|
75 |
+
foreach ( $all_product_data as $item_id => $item ) {
|
76 |
+
if ( 'category' === $key && ( empty( $item->categories ) || ! in_array( $term_id, $item->categories, true ) ) ) {
|
77 |
+
continue;
|
78 |
+
} elseif ( 'tag' === $key && ( empty( $item->tags ) || ! in_array( $term_id, $item->tags, true ) ) ) {
|
79 |
+
continue;
|
80 |
+
}
|
81 |
+
$value[ $item_id ] = $this->get_item_data( $item );
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
update_option( $option_name, $value, false );
|
86 |
+
unset( $value['timeout'] );
|
87 |
+
|
88 |
+
return $item_id && ! empty( $value[ $item_id ] ) ? $product_data->fromArray( $value[ $item_id ] ) : $value;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Gets all of the product data, either from an option or an API request.
|
93 |
+
* If the option exists and has data, it will be an object.
|
94 |
+
*
|
95 |
+
* @since 2.11.4
|
96 |
+
* @return object|false
|
97 |
+
*/
|
98 |
+
private function get_all_product_data() {
|
99 |
+
// Possibly all product data is in an option. If it is, return it.
|
100 |
+
$all_product_data = get_option( 'edd_all_extension_data' );
|
101 |
+
if ( $all_product_data && ! $this->option_has_expired( $all_product_data ) ) {
|
102 |
+
return ! empty( $all_product_data['products'] ) ? $all_product_data['products'] : false;
|
103 |
+
}
|
104 |
+
|
105 |
+
// Otherwise, query the API.
|
106 |
+
$url = add_query_arg(
|
107 |
+
array(
|
108 |
+
'edd_action' => 'extension_data',
|
109 |
+
),
|
110 |
+
$this->get_products_url()
|
111 |
+
);
|
112 |
+
$request = wp_remote_get(
|
113 |
+
$url,
|
114 |
+
array(
|
115 |
+
'timeout' => 15,
|
116 |
+
'sslverify' => true,
|
117 |
+
)
|
118 |
+
);
|
119 |
+
|
120 |
+
// If there was an API error, set option and return false.
|
121 |
+
if ( is_wp_error( $request ) || ( 200 !== wp_remote_retrieve_response_code( $request ) ) ) {
|
122 |
+
update_option(
|
123 |
+
'edd_all_extension_data',
|
124 |
+
array(
|
125 |
+
'timeout' => strtotime( '+1 hour', time() ),
|
126 |
+
),
|
127 |
+
false
|
128 |
+
);
|
129 |
+
|
130 |
+
return false;
|
131 |
+
}
|
132 |
+
|
133 |
+
// Fresh data has been retrieved, so update the option with a four hour timeout.
|
134 |
+
$all_product_data = json_decode( wp_remote_retrieve_body( $request ) );
|
135 |
+
$data = array(
|
136 |
+
'timeout' => strtotime( '+4 hours', time() ),
|
137 |
+
'products' => $all_product_data,
|
138 |
+
);
|
139 |
+
|
140 |
+
update_option( 'edd_all_extension_data', $data, false );
|
141 |
+
|
142 |
+
return $all_product_data;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Gets the product data as needed for the extension manager.
|
147 |
+
*
|
148 |
+
* @since 2.11.4
|
149 |
+
* @param object $item
|
150 |
+
* @return array
|
151 |
+
*/
|
152 |
+
private function get_item_data( $item ) {
|
153 |
+
return array(
|
154 |
+
'title' => ! empty( $item->title ) ? $item->title : '',
|
155 |
+
'slug' => ! empty( $item->slug ) ? $item->slug : '',
|
156 |
+
'image' => ! empty( $item->image ) ? $item->image : '',
|
157 |
+
'description' => ! empty( $item->excerpt ) ? $item->excerpt : '',
|
158 |
+
'basename' => ! empty( $item->custom_meta->basename ) ? $item->custom_meta->basename : '',
|
159 |
+
'tab' => ! empty( $item->custom_meta->settings_tab ) ? $item->custom_meta->settings_tab : '',
|
160 |
+
'section' => ! empty( $item->custom_meta->settings_section ) ? $item->custom_meta->settings_section : '',
|
161 |
+
);
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Gets the base url for the products remote request.
|
166 |
+
*
|
167 |
+
* @since 2.11.4
|
168 |
+
* @return string
|
169 |
+
*/
|
170 |
+
private function get_products_url() {
|
171 |
+
if ( defined( 'EDD_PRODUCTS_URL' ) ) {
|
172 |
+
return EDD_PRODUCTS_URL;
|
173 |
+
}
|
174 |
+
|
175 |
+
return 'https://easydigitaldownloads.com/';
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Gets the default array for the body of the API request.
|
180 |
+
* A class may override this by setting an array to query a tag or category.
|
181 |
+
* Note that the first array key/value pair are used to create the option name.
|
182 |
+
*
|
183 |
+
* @since 2.11.4
|
184 |
+
* @param int $item_id The product ID.
|
185 |
+
* @return array
|
186 |
+
*/
|
187 |
+
private function get_api_body( $item_id ) {
|
188 |
+
return array(
|
189 |
+
'product' => $item_id,
|
190 |
+
);
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Gets the first key of an array.
|
195 |
+
* (Shims array_key_first for PHP < 7.3)
|
196 |
+
*
|
197 |
+
* @since 2.11.4
|
198 |
+
* @param array $array
|
199 |
+
* @return string|null
|
200 |
+
*/
|
201 |
+
private function array_key_first( array $array ) {
|
202 |
+
if ( function_exists( 'array_key_first' ) ) {
|
203 |
+
return array_key_first( $array );
|
204 |
+
}
|
205 |
+
foreach ( $array as $key => $unused ) {
|
206 |
+
return $key;
|
207 |
+
}
|
208 |
+
|
209 |
+
return null;
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Checks whether a given option has "expired".
|
214 |
+
*
|
215 |
+
* @since 2.11.4
|
216 |
+
* @param array|false $option
|
217 |
+
* @return bool
|
218 |
+
*/
|
219 |
+
private function option_has_expired( $option ) {
|
220 |
+
return empty( $option['timeout'] ) || time() > $option['timeout'];
|
221 |
+
}
|
222 |
+
}
|
includes/admin/extensions/product-education/class-email-marketing.php
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Email Marketing
|
4 |
+
*
|
5 |
+
* Manages automatic installation/activation for email marketing extensions.
|
6 |
+
*
|
7 |
+
* @package EDD
|
8 |
+
* @subpackage EmailMarketing
|
9 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
10 |
+
* @license https://opensource.org/licenses/gpl-2.0.php GNU Public License
|
11 |
+
* @since 2.11.4
|
12 |
+
*/
|
13 |
+
namespace EDD\Admin\Settings;
|
14 |
+
|
15 |
+
use \EDD\Admin\Extensions\Extension;
|
16 |
+
|
17 |
+
class EmailMarketing extends Extension {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The EDD settings tab where this extension should show.
|
21 |
+
*
|
22 |
+
* @since 2.11.4
|
23 |
+
* @var string
|
24 |
+
*/
|
25 |
+
protected $settings_tab = 'marketing';
|
26 |
+
|
27 |
+
public function __construct() {
|
28 |
+
add_filter( 'edd_settings_sections_marketing', array( $this, 'add_section' ) );
|
29 |
+
add_action( 'edd_settings_tab_top_marketing_email_marketing', array( $this, 'field' ) );
|
30 |
+
|
31 |
+
parent::__construct();
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Adds an email marketing section to the Marketing tab.
|
36 |
+
*
|
37 |
+
* @since 2.11.4
|
38 |
+
* @param array $sections
|
39 |
+
* @return array
|
40 |
+
*/
|
41 |
+
public function add_section( $sections ) {
|
42 |
+
if ( ! $this->is_edd_settings_screen() ) {
|
43 |
+
return $sections;
|
44 |
+
}
|
45 |
+
$product_data = $this->get_product_data();
|
46 |
+
if ( ! $product_data || ! is_array( $product_data ) ) {
|
47 |
+
return $sections;
|
48 |
+
}
|
49 |
+
$sections['email_marketing'] = __( 'Email Marketing', 'easy-digital-downloads' );
|
50 |
+
|
51 |
+
return $sections;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Gets the customized configuration for the extension card.
|
56 |
+
*
|
57 |
+
* @since 2.11.4
|
58 |
+
* @param \EDD\Admin\Extensions\ProductData $product_data The product data object.
|
59 |
+
* @return array
|
60 |
+
*/
|
61 |
+
protected function get_configuration( \EDD\Admin\Extensions\ProductData $product_data ) {
|
62 |
+
$configuration = array();
|
63 |
+
if ( ! empty( $product_data->title ) ) {
|
64 |
+
/* translators: the product name */
|
65 |
+
$configuration['title'] = sprintf( __( 'Get %s Today!', 'easy-digital-downloads' ), $product_data->title );
|
66 |
+
}
|
67 |
+
if ( 'mailchimp' === $product_data->slug && ! ( defined( 'EDD_MAILCHIMP_VERSION' ) && version_compare( EDD_MAILCHIMP_VERSION, '3.0.16', '>=' ) ) ) {
|
68 |
+
$configuration['tab'] = 'extensions';
|
69 |
+
}
|
70 |
+
|
71 |
+
return $configuration;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Adds the email marketing extensions as cards.
|
76 |
+
*
|
77 |
+
* @since 2.11.4
|
78 |
+
* @return void
|
79 |
+
*/
|
80 |
+
public function field() {
|
81 |
+
$this->hide_submit_button();
|
82 |
+
if ( $this->is_activated() ) {
|
83 |
+
printf( '<p>%s</p>', esc_html__( 'Looks like you have an email marketing extension installed, but we support more providers!', 'easy-digital-downloads' ) );
|
84 |
+
}
|
85 |
+
?>
|
86 |
+
<div class="edd-extension-manager__card-group">
|
87 |
+
<?php
|
88 |
+
foreach ( $this->get_product_data() as $item_id => $extension ) {
|
89 |
+
$this->do_single_extension_card( $item_id );
|
90 |
+
}
|
91 |
+
?>
|
92 |
+
</div>
|
93 |
+
<?php
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Overrides the body array sent to the Products API.
|
98 |
+
*
|
99 |
+
* @since 2.11.4
|
100 |
+
* @return array
|
101 |
+
*/
|
102 |
+
protected function get_api_body() {
|
103 |
+
return array(
|
104 |
+
'tag' => 1578,
|
105 |
+
);
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Whether any email marketing extension is active.
|
110 |
+
*
|
111 |
+
* @since 2.11.4
|
112 |
+
*
|
113 |
+
* @return bool True if any email marketing extension is active.
|
114 |
+
*/
|
115 |
+
protected function is_activated() {
|
116 |
+
foreach ( $this->get_product_data() as $extension ) {
|
117 |
+
// The data is stored in the database as an array--at this point it has not been converted to an object.
|
118 |
+
if ( ! empty( $extension['basename'] ) && $this->manager->is_plugin_active( $extension['basename'] ) ) {
|
119 |
+
return true;
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
return false;
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
new EmailMarketing();
|
includes/admin/extensions/product-education/class-invoices.php
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Invoices
|
4 |
+
*
|
5 |
+
* Manages automatic installation/activation for Invoices.
|
6 |
+
*
|
7 |
+
* @package EDD
|
8 |
+
* @subpackage Invoices
|
9 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
10 |
+
* @license https://opensource.org/licenses/gpl-2.0.php GNU Public License
|
11 |
+
* @since 2.11.4
|
12 |
+
*/
|
13 |
+
namespace EDD\Admin\Settings;
|
14 |
+
|
15 |
+
use \EDD\Admin\Extensions\Extension;
|
16 |
+
|
17 |
+
class Invoices extends Extension {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The product ID on EDD.
|
21 |
+
*
|
22 |
+
* @var integer
|
23 |
+
*/
|
24 |
+
protected $item_id = 375153;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The EDD settings tab where this extension should show.
|
28 |
+
*
|
29 |
+
* @since 2.11.4
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
protected $settings_tab = 'gateways';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* The pass level required to access this extension.
|
36 |
+
*/
|
37 |
+
const PASS_LEVEL = \EDD\Admin\Pass_Manager::EXTENDED_PASS_ID;
|
38 |
+
|
39 |
+
public function __construct() {
|
40 |
+
add_filter( 'edd_settings_sections_gateways', array( $this, 'add_section' ) );
|
41 |
+
add_action( 'edd_settings_tab_top_gateways_invoices', array( $this, 'settings_field' ) );
|
42 |
+
add_action( 'edd_settings_tab_top_gateways_invoices', array( $this, 'hide_submit_button' ) );
|
43 |
+
|
44 |
+
parent::__construct();
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Gets the custom configuration for Invoices.
|
49 |
+
*
|
50 |
+
* @since 2.11.4
|
51 |
+
* @param \EDD\Admin\Extensions\ProductData $product_data The product data object.
|
52 |
+
* @return array
|
53 |
+
*/
|
54 |
+
protected function get_configuration( \EDD\Admin\Extensions\ProductData $product_data ) {
|
55 |
+
return array(
|
56 |
+
'style' => 'detailed-2col',
|
57 |
+
'title' => 'Attractive Invoices For Your Customers',
|
58 |
+
'description' => $this->get_custom_description(),
|
59 |
+
'features' => array(
|
60 |
+
'Generate Attractive Invoices',
|
61 |
+
'Build Customer Confidence',
|
62 |
+
'PDF Download Support',
|
63 |
+
'Include in Purchase Emails',
|
64 |
+
'Customizable Templates',
|
65 |
+
),
|
66 |
+
);
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Gets a custom description for the Invoices extension card.
|
71 |
+
*
|
72 |
+
* @since 2.11.4
|
73 |
+
* @return string
|
74 |
+
*/
|
75 |
+
private function get_custom_description() {
|
76 |
+
$description = array(
|
77 |
+
'Impress customers and build customer loyalty with attractive invoices. Making it easy to locate, save, and print purchase history builds trust with customers.',
|
78 |
+
'Provide a professional experience with customizable templates and one-click PDF downloads. ',
|
79 |
+
);
|
80 |
+
|
81 |
+
return $this->format_description( $description );
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Adds the Invoices Payments section to the settings.
|
86 |
+
*
|
87 |
+
* @param array $sections
|
88 |
+
* @return array
|
89 |
+
*/
|
90 |
+
public function add_section( $sections ) {
|
91 |
+
if ( ! $this->can_show_product_section() ) {
|
92 |
+
return $sections;
|
93 |
+
}
|
94 |
+
|
95 |
+
$sections['invoices'] = __( 'Invoices', 'easy-digital-downloads' );
|
96 |
+
|
97 |
+
return $sections;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Whether EDD Invoices active or not.
|
102 |
+
*
|
103 |
+
* @since 2.11.4
|
104 |
+
*
|
105 |
+
* @return bool True if Invoices is active.
|
106 |
+
*/
|
107 |
+
protected function is_activated() {
|
108 |
+
if ( $this->manager->is_plugin_active( $this->get_product_data() ) ) {
|
109 |
+
return true;
|
110 |
+
}
|
111 |
+
|
112 |
+
return class_exists( 'EDDInvoices' );
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
new Invoices();
|
includes/admin/extensions/product-education/class-recurring.php
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Recurring Payments
|
4 |
+
*
|
5 |
+
* Manages automatic activation for Recurring Payments.
|
6 |
+
*
|
7 |
+
* @package EDD
|
8 |
+
* @subpackage Recurring
|
9 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
10 |
+
* @license https://opensource.org/licenses/gpl-2.0.php GNU Public License
|
11 |
+
* @since 2.11.4
|
12 |
+
*/
|
13 |
+
namespace EDD\Admin\Settings;
|
14 |
+
|
15 |
+
use \EDD\Admin\Extensions\Extension;
|
16 |
+
|
17 |
+
class Recurring extends Extension {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The product ID on EDD.
|
21 |
+
*
|
22 |
+
* @var integer
|
23 |
+
*/
|
24 |
+
protected $item_id = 28530;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The EDD settings tab where this extension should show.
|
28 |
+
*
|
29 |
+
* @since 2.11.4
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
protected $settings_tab = 'gateways';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* The pass level required to access this extension.
|
36 |
+
*/
|
37 |
+
const PASS_LEVEL = \EDD\Admin\Pass_Manager::EXTENDED_PASS_ID;
|
38 |
+
|
39 |
+
public function __construct() {
|
40 |
+
add_filter( 'edd_settings_sections_gateways', array( $this, 'add_section' ) );
|
41 |
+
add_action( 'edd_settings_tab_top_gateways_recurring', array( $this, 'settings_field' ) );
|
42 |
+
add_action( 'edd_settings_tab_top_gateways_recurring', array( $this, 'hide_submit_button' ) );
|
43 |
+
|
44 |
+
parent::__construct();
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Gets the custom configuration for Recurring.
|
49 |
+
*
|
50 |
+
* @since 2.11.4
|
51 |
+
* @param \EDD\Admin\Extensions\ProductData $product_data The product data object.
|
52 |
+
* @return array
|
53 |
+
*/
|
54 |
+
protected function get_configuration( \EDD\Admin\Extensions\ProductData $product_data ) {
|
55 |
+
return array(
|
56 |
+
'style' => 'detailed-2col',
|
57 |
+
'title' => 'Increase Revenue By Selling Subscriptions!',
|
58 |
+
'description' => $this->get_custom_description(),
|
59 |
+
'features' => array(
|
60 |
+
'Flexible Recurring Payments',
|
61 |
+
'Custom Reminder Emails',
|
62 |
+
'Free Trial Support',
|
63 |
+
'Signup Fees',
|
64 |
+
'Recurring Revenue Reports',
|
65 |
+
),
|
66 |
+
);
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Gets a custom description for the Recurring extension card.
|
71 |
+
*
|
72 |
+
* @since 2.11.4
|
73 |
+
* @return string
|
74 |
+
*/
|
75 |
+
private function get_custom_description() {
|
76 |
+
$description = array(
|
77 |
+
'Grow stable income by selling subscriptions and make renewals hassle free for your customers.',
|
78 |
+
'When your customers are automatically billed, you reduce the risk of missed payments and retain more customers.',
|
79 |
+
);
|
80 |
+
|
81 |
+
return $this->format_description( $description );
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Adds the Recurring Payments section to the settings.
|
86 |
+
*
|
87 |
+
* @param array $sections
|
88 |
+
* @return array
|
89 |
+
*/
|
90 |
+
public function add_section( $sections ) {
|
91 |
+
if ( ! $this->can_show_product_section() ) {
|
92 |
+
return $sections;
|
93 |
+
}
|
94 |
+
|
95 |
+
$sections['recurring'] = __( 'Recurring Payments', 'easy-digital-downloads' );
|
96 |
+
|
97 |
+
return $sections;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Whether EDD Recurring active or not.
|
102 |
+
*
|
103 |
+
* @since 2.11.4
|
104 |
+
*
|
105 |
+
* @return bool True if Recurring is active.
|
106 |
+
*/
|
107 |
+
protected function is_activated() {
|
108 |
+
if ( $this->manager->is_plugin_active( $this->get_product_data() ) ) {
|
109 |
+
return true;
|
110 |
+
}
|
111 |
+
|
112 |
+
return class_exists( 'EDD_Recurring' );
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
new Recurring();
|
includes/admin/extensions/product-education/class-reviews.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Reviews
|
4 |
+
*
|
5 |
+
* Manages automatic activation for Reviews.
|
6 |
+
*
|
7 |
+
* @package EDD
|
8 |
+
* @subpackage Reviews
|
9 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
10 |
+
* @license https://opensource.org/licenses/gpl-2.0.php GNU Public License
|
11 |
+
* @since 2.11.4
|
12 |
+
*/
|
13 |
+
namespace EDD\Admin\Settings;
|
14 |
+
|
15 |
+
use \EDD\Admin\Extensions\Extension;
|
16 |
+
|
17 |
+
class Reviews extends Extension {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The product ID on EDD.
|
21 |
+
*
|
22 |
+
* @var integer
|
23 |
+
*/
|
24 |
+
protected $item_id = 37976;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The EDD settings tab where this extension should show.
|
28 |
+
*
|
29 |
+
* @since 2.11.4
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
protected $settings_tab = 'marketing';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* The pass level required to access this extension.
|
36 |
+
*/
|
37 |
+
const PASS_LEVEL = \EDD\Admin\Pass_Manager::EXTENDED_PASS_ID;
|
38 |
+
|
39 |
+
public function __construct() {
|
40 |
+
add_filter( 'edd_settings_sections_marketing', array( $this, 'add_section' ) );
|
41 |
+
add_action( 'edd_settings_tab_top_marketing_reviews', array( $this, 'settings_field' ) );
|
42 |
+
add_action( 'edd_settings_tab_top_marketing_reviews', array( $this, 'hide_submit_button' ) );
|
43 |
+
add_action( 'add_meta_boxes', array( $this, 'maybe_do_metabox' ) );
|
44 |
+
|
45 |
+
parent::__construct();
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Gets the custom configuration for Reviews.
|
50 |
+
*
|
51 |
+
* @since 2.11.4
|
52 |
+
* @param \EDD\Admin\Extensions\ProductData $product_data The product data object.
|
53 |
+
* @return array
|
54 |
+
*/
|
55 |
+
protected function get_configuration( \EDD\Admin\Extensions\ProductData $product_data ) {
|
56 |
+
$configuration = array(
|
57 |
+
'title' => 'Build Trust With Real Customer Reviews',
|
58 |
+
);
|
59 |
+
$settings_configuration = array(
|
60 |
+
'style' => 'detailed-2col',
|
61 |
+
'description' => $this->get_custom_description(),
|
62 |
+
'features' => array(
|
63 |
+
'Request Reviews',
|
64 |
+
'Incentivize Reviewers',
|
65 |
+
'Full Schema.org Support',
|
66 |
+
'Embed Reviews Via Blocks',
|
67 |
+
'Limit Reviews to Customers',
|
68 |
+
'Vendor Reviews (with Frontend Submissions)',
|
69 |
+
),
|
70 |
+
);
|
71 |
+
return $this->is_edd_settings_screen() ? array_merge( $configuration, $settings_configuration ) : $configuration;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Gets a custom description for the Reviews extension card.
|
76 |
+
*
|
77 |
+
* @since 2.11.4
|
78 |
+
* @return string
|
79 |
+
*/
|
80 |
+
private function get_custom_description() {
|
81 |
+
$description = array(
|
82 |
+
'Increase sales on your site with social proof. 70% of online shoppers don\'t purchase before reading reviews.',
|
83 |
+
'Easily collect, manage, and beautifully display reviews all from your WordPress dashboard.',
|
84 |
+
);
|
85 |
+
|
86 |
+
return $this->format_description( $description );
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Adds the Reviews section to the settings.
|
91 |
+
*
|
92 |
+
* @param array $sections
|
93 |
+
* @return array
|
94 |
+
*/
|
95 |
+
public function add_section( $sections ) {
|
96 |
+
if ( ! $this->can_show_product_section() ) {
|
97 |
+
return $sections;
|
98 |
+
}
|
99 |
+
|
100 |
+
$sections['reviews'] = __( 'Reviews', 'easy-digital-downloads' );
|
101 |
+
|
102 |
+
return $sections;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* If Reviews is not active, registers a metabox on individual download edit screen.
|
107 |
+
*
|
108 |
+
* @since 2.11.4
|
109 |
+
* @return void
|
110 |
+
*/
|
111 |
+
public function maybe_do_metabox() {
|
112 |
+
if ( ! $this->is_download_edit_screen() ) {
|
113 |
+
return;
|
114 |
+
}
|
115 |
+
if ( $this->is_activated() ) {
|
116 |
+
return;
|
117 |
+
}
|
118 |
+
add_meta_box(
|
119 |
+
'edd-reviews-status',
|
120 |
+
__( 'Product Reviews', 'easy-digital-downloads' ),
|
121 |
+
array( $this, 'settings_field' ),
|
122 |
+
'download',
|
123 |
+
'side',
|
124 |
+
'low'
|
125 |
+
);
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Whether EDD Reviews active or not.
|
130 |
+
*
|
131 |
+
* @since 2.11.4
|
132 |
+
*
|
133 |
+
* @return bool True if Reviews is active.
|
134 |
+
*/
|
135 |
+
protected function is_activated() {
|
136 |
+
if ( $this->manager->is_plugin_active( $this->get_product_data() ) ) {
|
137 |
+
return true;
|
138 |
+
}
|
139 |
+
|
140 |
+
return function_exists( 'edd_reviews' );
|
141 |
+
}
|
142 |
+
}
|
143 |
+
|
144 |
+
new Reviews();
|
includes/admin/extensions/product-education/class-wpsmtp.php
ADDED
@@ -0,0 +1,232 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Mail SMTP
|
4 |
+
*
|
5 |
+
* Manages automatic installation/activation for WP Mail SMTP.
|
6 |
+
*
|
7 |
+
* @package EDD
|
8 |
+
* @subpackage WP_SMTP
|
9 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
10 |
+
* @license https://opensource.org/licenses/gpl-2.0.php GNU Public License
|
11 |
+
* @since 2.11.4
|
12 |
+
*/
|
13 |
+
namespace EDD\Admin\Settings;
|
14 |
+
|
15 |
+
class WP_SMTP {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Array of configuration data for WP Mail SMTP.
|
19 |
+
*
|
20 |
+
* @var array
|
21 |
+
*/
|
22 |
+
private $config = array(
|
23 |
+
'lite_plugin' => 'wp-mail-smtp/wp_mail_smtp.php',
|
24 |
+
'lite_wporg_url' => 'https://wordpress.org/plugins/wp-mail-smtp/',
|
25 |
+
'lite_download_url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
|
26 |
+
'pro_plugin' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
|
27 |
+
'smtp_settings' => 'admin.php?page=wp-mail-smtp',
|
28 |
+
'smtp_wizard' => 'admin.php?page=wp-mail-smtp-setup-wizard',
|
29 |
+
);
|
30 |
+
|
31 |
+
/**
|
32 |
+
* The Extension Manager
|
33 |
+
*
|
34 |
+
* @var \EDD\Admin\Extensions\Extension_Manager
|
35 |
+
*/
|
36 |
+
private $manager;
|
37 |
+
|
38 |
+
public function __construct() {
|
39 |
+
add_filter( 'edd_settings_emails', array( $this, 'register_setting' ) );
|
40 |
+
add_action( 'edd_wpsmtp', array( $this, 'settings_field' ) );
|
41 |
+
|
42 |
+
$this->manager = new \EDD\Admin\Extensions\Extension_Manager();
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Register the setting to show the WP SMTP installer if it isn't active.
|
47 |
+
*
|
48 |
+
* @param array $settings
|
49 |
+
* @return array
|
50 |
+
*/
|
51 |
+
public function register_setting( $settings ) {
|
52 |
+
if ( $this->is_smtp_configured() ) {
|
53 |
+
return $settings;
|
54 |
+
}
|
55 |
+
$settings['main']['wpsmtp'] = array(
|
56 |
+
'id' => 'wpsmtp',
|
57 |
+
'name' => __( 'Improve Email Deliverability', 'easy-digital-downloads' ),
|
58 |
+
'desc' => '',
|
59 |
+
'type' => 'hook',
|
60 |
+
);
|
61 |
+
|
62 |
+
return $settings;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Output the settings field (installation helper).
|
67 |
+
*
|
68 |
+
* @param array $args
|
69 |
+
* @return void
|
70 |
+
*/
|
71 |
+
public function settings_field( $args ) {
|
72 |
+
$this->manager->enqueue();
|
73 |
+
?>
|
74 |
+
<div class="edd-extension-manager__body">
|
75 |
+
<p class="edd-extension-manager__description">
|
76 |
+
<?php esc_html_e( 'WP Mail SMTP allows you to easily set up WordPress to use a trusted provider to reliably send emails, including sales notifications.', 'easy-digital-downloads' ); ?>
|
77 |
+
</p>
|
78 |
+
|
79 |
+
<div class="edd-extension-manager__group">
|
80 |
+
<div class="edd-extension-manager__step">
|
81 |
+
<?php $this->manager->button( $this->get_button_parameters() ); ?>
|
82 |
+
</div>
|
83 |
+
|
84 |
+
<?php
|
85 |
+
if ( $this->is_smtp_activated() ) {
|
86 |
+
return;
|
87 |
+
}
|
88 |
+
?>
|
89 |
+
<div class="edd-extension-manager__step" style="display:none;">
|
90 |
+
<?php $this->manager->link( $this->get_link_parameters() ); ?>
|
91 |
+
</div>
|
92 |
+
</div>
|
93 |
+
</div>
|
94 |
+
<?php
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Gets the button parameters.
|
99 |
+
*
|
100 |
+
* @return array
|
101 |
+
*/
|
102 |
+
private function get_button_parameters() {
|
103 |
+
$button = array();
|
104 |
+
// If neither the lite nor pro plugin is installed, the button will prompt to install and activate the lite plugin.
|
105 |
+
if ( ! $this->manager->is_plugin_installed( $this->config['lite_plugin'] ) && ! $this->manager->is_plugin_installed( $this->config['pro_plugin'] ) ) {
|
106 |
+
$button['plugin'] = $this->config['lite_download_url'];
|
107 |
+
$button['action'] = 'install';
|
108 |
+
$button['button_text'] = __( 'Install & Activate WP Mail SMTP', 'easy-digital-downloads' );
|
109 |
+
} elseif ( ! $this->is_smtp_activated() ) {
|
110 |
+
// If one of the SMTP plugins is installed, but not activated, the button will prompt to activate it.
|
111 |
+
$button['plugin'] = $this->config['lite_plugin'];
|
112 |
+
$button['action'] = 'activate';
|
113 |
+
$button['button_text'] = __( 'Activate WP Mail SMTP', 'easy-digital-downloads' );
|
114 |
+
} elseif ( ! $this->is_smtp_configured() ) {
|
115 |
+
// If the plugin is active, but not configured, the button will send them to the setup wizard.
|
116 |
+
$button = $this->get_link_parameters();
|
117 |
+
}
|
118 |
+
|
119 |
+
return $button;
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Gets the array of parameters for the link to configure WP Mail SMTP.
|
124 |
+
*
|
125 |
+
* @since 2.11.4
|
126 |
+
* @return array
|
127 |
+
*/
|
128 |
+
private function get_link_parameters() {
|
129 |
+
return $this->is_smtp_configured() ?
|
130 |
+
array(
|
131 |
+
'button_text' => __( 'Configure WP Mail SMTP', 'easy-digital-downloads' ),
|
132 |
+
'href' => admin_url( $this->config['smtp_settings'] ),
|
133 |
+
) :
|
134 |
+
array(
|
135 |
+
'button_text' => __( 'Run the WP Mail SMTP Setup Wizard', 'easy-digital-downloads' ),
|
136 |
+
'href' => admin_url( $this->config['smtp_wizard'] ),
|
137 |
+
);
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Whether WP Mail SMTP plugin configured or not.
|
142 |
+
*
|
143 |
+
* @since 2.11.4
|
144 |
+
*
|
145 |
+
* @return bool True if some mailer is selected and configured properly.
|
146 |
+
*/
|
147 |
+
protected function is_smtp_configured() {
|
148 |
+
|
149 |
+
if ( ! $this->is_smtp_activated() || ! class_exists( '\\WPMailSMTP\\Options' ) ) {
|
150 |
+
return false;
|
151 |
+
}
|
152 |
+
|
153 |
+
$phpmailer = $this->get_phpmailer();
|
154 |
+
|
155 |
+
$mailer = \WPMailSMTP\Options::init()->get( 'mail', 'mailer' );
|
156 |
+
$is_mailer_complete = ! empty( $mailer ) && wp_mail_smtp()->get_providers()->get_mailer( $mailer, $phpmailer )->is_mailer_complete();
|
157 |
+
|
158 |
+
return 'mail' !== $mailer && $is_mailer_complete;
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Whether WP Mail SMTP plugin active or not.
|
163 |
+
*
|
164 |
+
* @since 2.11.4
|
165 |
+
*
|
166 |
+
* @return bool True if SMTP plugin is active.
|
167 |
+
*/
|
168 |
+
protected function is_smtp_activated() {
|
169 |
+
return function_exists( 'wp_mail_smtp' ) && ( is_plugin_active( $this->config['lite_plugin'] ) || is_plugin_active( $this->config['pro_plugin'] ) );
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Get $phpmailer instance.
|
174 |
+
*
|
175 |
+
* @since 2.11.4
|
176 |
+
*
|
177 |
+
* @return \PHPMailer|\PHPMailer\PHPMailer\PHPMailer Instance of PHPMailer.
|
178 |
+
*/
|
179 |
+
protected function get_phpmailer() {
|
180 |
+
|
181 |
+
if ( version_compare( get_bloginfo( 'version' ), '5.5-alpha', '<' ) ) {
|
182 |
+
$phpmailer = $this->get_phpmailer_v5();
|
183 |
+
} else {
|
184 |
+
$phpmailer = $this->get_phpmailer_v6();
|
185 |
+
}
|
186 |
+
|
187 |
+
return $phpmailer;
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Get $phpmailer v5 instance.
|
192 |
+
*
|
193 |
+
* @since 2.11.4
|
194 |
+
*
|
195 |
+
* @return \PHPMailer Instance of PHPMailer.
|
196 |
+
*/
|
197 |
+
private function get_phpmailer_v5() {
|
198 |
+
|
199 |
+
global $phpmailer;
|
200 |
+
|
201 |
+
if ( ! ( $phpmailer instanceof \PHPMailer ) ) {
|
202 |
+
require_once ABSPATH . WPINC . '/class-phpmailer.php';
|
203 |
+
require_once ABSPATH . WPINC . '/class-smtp.php';
|
204 |
+
$phpmailer = new \PHPMailer( true ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
|
205 |
+
}
|
206 |
+
|
207 |
+
return $phpmailer;
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Get $phpmailer v6 instance.
|
212 |
+
*
|
213 |
+
* @since 2.11.4
|
214 |
+
*
|
215 |
+
* @return \PHPMailer\PHPMailer\PHPMailer Instance of PHPMailer.
|
216 |
+
*/
|
217 |
+
private function get_phpmailer_v6() {
|
218 |
+
|
219 |
+
global $phpmailer;
|
220 |
+
|
221 |
+
if ( ! ( $phpmailer instanceof \PHPMailer\PHPMailer\PHPMailer ) ) {
|
222 |
+
require_once ABSPATH . WPINC . '/PHPMailer/PHPMailer.php';
|
223 |
+
require_once ABSPATH . WPINC . '/PHPMailer/SMTP.php';
|
224 |
+
require_once ABSPATH . WPINC . '/PHPMailer/Exception.php';
|
225 |
+
$phpmailer = new \PHPMailer\PHPMailer\PHPMailer( true ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
|
226 |
+
}
|
227 |
+
|
228 |
+
return $phpmailer;
|
229 |
+
}
|
230 |
+
}
|
231 |
+
|
232 |
+
new WP_SMTP();
|
includes/admin/installers/class-install-skin.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace EDD\Admin\Installers;
|
4 |
+
|
5 |
+
use EDD\Admin\Installers\PluginSilentUpgraderSkin;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Skin for on-the-fly addon installations.
|
9 |
+
*
|
10 |
+
* @since 1.0.0
|
11 |
+
* @since 1.5.6.1 Extend PluginSilentUpgraderSkin and clean up the class.
|
12 |
+
*/
|
13 |
+
class Install_Skin extends PluginSilentUpgraderSkin {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Instead of outputting HTML for errors, json_encode the errors and send them
|
17 |
+
* back to the Ajax script for processing.
|
18 |
+
*
|
19 |
+
* @since 1.0.0
|
20 |
+
*
|
21 |
+
* @param array $errors Array of errors with the install process.
|
22 |
+
*/
|
23 |
+
public function error( $errors ) {
|
24 |
+
|
25 |
+
if ( ! empty( $errors ) ) {
|
26 |
+
wp_send_json_error( $errors );
|
27 |
+
}
|
28 |
+
}
|
29 |
+
}
|
includes/admin/installers/class-plugin-silent-upgrader-skin.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace EDD\Admin\Installers;
|
4 |
+
|
5 |
+
/** \WP_Upgrader_Skin class */
|
6 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Class PluginSilentUpgraderSkin.
|
10 |
+
*
|
11 |
+
* @internal Please do not use this class outside of core WPForms development. May be removed at any time.
|
12 |
+
*
|
13 |
+
* @since 2.11.4
|
14 |
+
*/
|
15 |
+
class PluginSilentUpgraderSkin extends \WP_Upgrader_Skin {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Empty out the header of its HTML content and only check to see if it has
|
19 |
+
* been performed or not.
|
20 |
+
*
|
21 |
+
* @since 2.11.4
|
22 |
+
*/
|
23 |
+
public function header() {
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Empty out the footer of its HTML contents.
|
28 |
+
*
|
29 |
+
* @since 2.11.4
|
30 |
+
*/
|
31 |
+
public function footer() {
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Instead of outputting HTML for errors, just return them.
|
36 |
+
* Ajax request will just ignore it.
|
37 |
+
*
|
38 |
+
* @since 2.11.4
|
39 |
+
*
|
40 |
+
* @param array $errors Array of errors with the install process.
|
41 |
+
*
|
42 |
+
* @return array
|
43 |
+
*/
|
44 |
+
public function error( $errors ) {
|
45 |
+
return $errors;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Empty out JavaScript output that calls function to decrement the update counts.
|
50 |
+
*
|
51 |
+
* @since 2.11.4
|
52 |
+
*
|
53 |
+
* @param string $type Type of update count to decrement.
|
54 |
+
*/
|
55 |
+
public function decrement_update_count( $type ) {
|
56 |
+
}
|
57 |
+
}
|
includes/admin/installers/class-plugin-silent-upgrader.php
ADDED
@@ -0,0 +1,608 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace EDD\Admin\Installers;
|
4 |
+
|
5 |
+
use WP_Error;
|
6 |
+
use WP_Upgrader;
|
7 |
+
use WP_Filesystem_Base;
|
8 |
+
|
9 |
+
/** \WP_Upgrader class */
|
10 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
11 |
+
|
12 |
+
/** \Plugin_Upgrader class */
|
13 |
+
require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* In WP 5.3 a PHP 5.6 splat operator (...$args) was added to \WP_Upgrader_Skin::feedback().
|
17 |
+
* We need to remove all calls to *Skin::feedback() method, as we can't override it in own Skins
|
18 |
+
* without breaking support for PHP 5.3-5.5.
|
19 |
+
*
|
20 |
+
* @internal Please do not use this class outside of core EDD development. May be removed at any time.
|
21 |
+
*
|
22 |
+
* @since 1.5.6.1
|
23 |
+
*/
|
24 |
+
class PluginSilentUpgrader extends \Plugin_Upgrader {
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Run an upgrade/installation.
|
28 |
+
*
|
29 |
+
* Attempt to download the package (if it is not a local file), unpack it, and
|
30 |
+
* install it in the destination folder.
|
31 |
+
*
|
32 |
+
* @since 1.5.6.1
|
33 |
+
*
|
34 |
+
* @param array $options {
|
35 |
+
* Array or string of arguments for upgrading/installing a package.
|
36 |
+
*
|
37 |
+
* @type string $package The full path or URI of the package to install.
|
38 |
+
* Default empty.
|
39 |
+
* @type string $destination The full path to the destination folder.
|
40 |
+
* Default empty.
|
41 |
+
* @type bool $clear_destination Whether to delete any files already in the
|
42 |
+
* destination folder. Default false.
|
43 |
+
* @type bool $clear_working Whether to delete the files form the working
|
44 |
+
* directory after copying to the destination.
|
45 |
+
* Default false.
|
46 |
+
* @type bool $abort_if_destination_exists Whether to abort the installation if the destination
|
47 |
+
* folder already exists. When true, `$clear_destination`
|
48 |
+
* should be false. Default true.
|
49 |
+
* @type bool $is_multi Whether this run is one of multiple upgrade/installation
|
50 |
+
* actions being performed in bulk. When true, the skin
|
51 |
+
* WP_Upgrader::header() and WP_Upgrader::footer()
|
52 |
+
* aren't called. Default false.
|
53 |
+
* @type array $hook_extra Extra arguments to pass to the filter hooks called by
|
54 |
+
* WP_Upgrader::run().
|
55 |
+
* }
|
56 |
+
* @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error,
|
57 |
+
* or false if unable to connect to the filesystem.
|
58 |
+
*/
|
59 |
+
public function run( $options ) {
|
60 |
+
|
61 |
+
$defaults = array(
|
62 |
+
'package' => '', // Please always pass this.
|
63 |
+
'destination' => '', // And this
|
64 |
+
'clear_destination' => false,
|
65 |
+
'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
|
66 |
+
'clear_working' => true,
|
67 |
+
'is_multi' => false,
|
68 |
+
'hook_extra' => array(), // Pass any extra $hook_extra args here, this will be passed to any hooked filters.
|
69 |
+
);
|
70 |
+
|
71 |
+
$options = wp_parse_args( $options, $defaults );
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Filter the package options before running an update.
|
75 |
+
*
|
76 |
+
* See also {@see 'upgrader_process_complete'}.
|
77 |
+
*
|
78 |
+
* @since 4.3.0
|
79 |
+
*
|
80 |
+
* @param array $options {
|
81 |
+
* Options used by the upgrader.
|
82 |
+
*
|
83 |
+
* @type string $package Package for update.
|
84 |
+
* @type string $destination Update location.
|
85 |
+
* @type bool $clear_destination Clear the destination resource.
|
86 |
+
* @type bool $clear_working Clear the working resource.
|
87 |
+
* @type bool $abort_if_destination_exists Abort if the Destination directory exists.
|
88 |
+
* @type bool $is_multi Whether the upgrader is running multiple times.
|
89 |
+
* @type array $hook_extra {
|
90 |
+
* Extra hook arguments.
|
91 |
+
*
|
92 |
+
* @type string $action Type of action. Default 'update'.
|
93 |
+
* @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'.
|
94 |
+
* @type bool $bulk Whether the update process is a bulk update. Default true.
|
95 |
+
* @type string $plugin Path to the plugin file relative to the plugins directory.
|
96 |
+
* @type string $theme The stylesheet or template name of the theme.
|
97 |
+
* @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme',
|
98 |
+
* or 'core'.
|
99 |
+
* @type object $language_update The language pack update offer.
|
100 |
+
* }
|
101 |
+
* }
|
102 |
+
*/
|
103 |
+
$options = apply_filters( 'upgrader_package_options', $options );
|
104 |
+
|
105 |
+
if ( ! $options['is_multi'] ) { // call $this->header separately if running multiple times
|
106 |
+
$this->skin->header();
|
107 |
+
}
|
108 |
+
|
109 |
+
// Connect to the Filesystem first.
|
110 |
+
$res = $this->fs_connect( array( WP_CONTENT_DIR, $options['destination'] ) );
|
111 |
+
// Mainly for non-connected filesystem.
|
112 |
+
if ( ! $res ) {
|
113 |
+
if ( ! $options['is_multi'] ) {
|
114 |
+
$this->skin->footer();
|
115 |
+
}
|
116 |
+
return false;
|
117 |
+
}
|
118 |
+
|
119 |
+
$this->skin->before();
|
120 |
+
|
121 |
+
if ( is_wp_error( $res ) ) {
|
122 |
+
$this->skin->error( $res );
|
123 |
+
$this->skin->after();
|
124 |
+
if ( ! $options['is_multi'] ) {
|
125 |
+
$this->skin->footer();
|
126 |
+
}
|
127 |
+
return $res;
|
128 |
+
}
|
129 |
+
|
130 |
+
/*
|
131 |
+
* Download the package (Note, This just returns the filename
|
132 |
+
* of the file if the package is a local file)
|
133 |
+
*/
|
134 |
+
$download = $this->download_package( $options['package'], true );
|
135 |
+
|
136 |
+
// Allow for signature soft-fail.
|
137 |
+
// WARNING: This may be removed in the future.
|
138 |
+
if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) {
|
139 |
+
|
140 |
+
// Don't output the 'no signature could be found' failure message for now.
|
141 |
+
if ( (string) $download->get_error_code() !== 'signature_verification_no_signature' || WP_DEBUG ) {
|
142 |
+
// Outout the failure error as a normal feedback, and not as an error:
|
143 |
+
//$this->skin->feedback( $download->get_error_message() );
|
144 |
+
|
145 |
+
// Report this failure back to WordPress.org for debugging purposes.
|
146 |
+
wp_version_check(
|
147 |
+
array(
|
148 |
+
'signature_failure_code' => $download->get_error_code(),
|
149 |
+
'signature_failure_data' => $download->get_error_data(),
|
150 |
+
)
|
151 |
+
);
|
152 |
+
}
|
153 |
+
|
154 |
+
// Pretend this error didn't happen.
|
155 |
+
$download = $download->get_error_data( 'softfail-filename' );
|
156 |
+
}
|
157 |
+
|
158 |
+
if ( is_wp_error( $download ) ) {
|
159 |
+
$this->skin->error( $download );
|
160 |
+
$this->skin->after();
|
161 |
+
if ( ! $options['is_multi'] ) {
|
162 |
+
$this->skin->footer();
|
163 |
+
}
|
164 |
+
return $download;
|
165 |
+
}
|
166 |
+
|
167 |
+
$delete_package = ( (string) $download !== (string) $options['package'] ); // Do not delete a "local" file.
|
168 |
+
|
169 |
+
// Unzips the file into a temporary directory.
|
170 |
+
$working_dir = $this->unpack_package( $download, $delete_package );
|
171 |
+
if ( is_wp_error( $working_dir ) ) {
|
172 |
+
$this->skin->error( $working_dir );
|
173 |
+
$this->skin->after();
|
174 |
+
if ( ! $options['is_multi'] ) {
|
175 |
+
$this->skin->footer();
|
176 |
+
}
|
177 |
+
return $working_dir;
|
178 |
+
}
|
179 |
+
|
180 |
+
// With the given options, this installs it to the destination directory.
|
181 |
+
$result = $this->install_package(
|
182 |
+
array(
|
183 |
+
'source' => $working_dir,
|
184 |
+
'destination' => $options['destination'],
|
185 |
+
'clear_destination' => $options['clear_destination'],
|
186 |
+
'abort_if_destination_exists' => $options['abort_if_destination_exists'],
|
187 |
+
'clear_working' => $options['clear_working'],
|
188 |
+
'hook_extra' => $options['hook_extra'],
|
189 |
+
)
|
190 |
+
);
|
191 |
+
|
192 |
+
$this->skin->set_result( $result );
|
193 |
+
if ( is_wp_error( $result ) ) {
|
194 |
+
$this->skin->error( $result );
|
195 |
+
//$this->skin->feedback( 'process_failed' );
|
196 |
+
} else {
|
197 |
+
// Installation succeeded.
|
198 |
+
//$this->skin->feedback( 'process_success' );
|
199 |
+
}
|
200 |
+
|
201 |
+
$this->skin->after();
|
202 |
+
|
203 |
+
if ( ! $options['is_multi'] ) {
|
204 |
+
|
205 |
+
/**
|
206 |
+
* Fire when the upgrader process is complete.
|
207 |
+
*
|
208 |
+
* See also {@see 'upgrader_package_options'}.
|
209 |
+
*
|
210 |
+
* @since 3.6.0
|
211 |
+
* @since 3.7.0 Added to WP_Upgrader::run().
|
212 |
+
* @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`.
|
213 |
+
*
|
214 |
+
* @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a
|
215 |
+
* Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
|
216 |
+
* @param array $hook_extra {
|
217 |
+
* Array of bulk item update data.
|
218 |
+
*
|
219 |
+
* @type string $action Type of action. Default 'update'.
|
220 |
+
* @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'.
|
221 |
+
* @type bool $bulk Whether the update process is a bulk update. Default true.
|
222 |
+
* @type array $plugins Array of the basename paths of the plugins' main files.
|
223 |
+
* @type array $themes The theme slugs.
|
224 |
+
* @type array $translations {
|
225 |
+
* Array of translations update data.
|
226 |
+
*
|
227 |
+
* @type string $language The locale the translation is for.
|
228 |
+
* @type string $type Type of translation. Accepts 'plugin', 'theme', or 'core'.
|
229 |
+
* @type string $slug Text domain the translation is for. The slug of a theme/plugin or
|
230 |
+
* 'default' for core translations.
|
231 |
+
* @type string $version The version of a theme, plugin, or core.
|
232 |
+
* }
|
233 |
+
* }
|
234 |
+
*/
|
235 |
+
do_action( 'upgrader_process_complete', $this, $options['hook_extra'] );
|
236 |
+
|
237 |
+
$this->skin->footer();
|
238 |
+
}
|
239 |
+
|
240 |
+
return $result;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* Toggle maintenance mode for the site.
|
245 |
+
*
|
246 |
+
* Create/delete the maintenance file to enable/disable maintenance mode.
|
247 |
+
*
|
248 |
+
* @since 2.8.0
|
249 |
+
*
|
250 |
+
* @global WP_Filesystem_Base $wp_filesystem Subclass
|
251 |
+
*
|
252 |
+
* @param bool $enable True to enable maintenance mode, false to disable.
|
253 |
+
*/
|
254 |
+
public function maintenance_mode( $enable = false ) {
|
255 |
+
global $wp_filesystem;
|
256 |
+
$file = $wp_filesystem->abspath() . '.maintenance';
|
257 |
+
if ( $enable ) {
|
258 |
+
//$this->skin->feedback( 'maintenance_start' );
|
259 |
+
// Create maintenance file to signal that we are upgrading
|
260 |
+
$maintenance_string = '<?php $upgrading = ' . time() . '; ?>';
|
261 |
+
$wp_filesystem->delete( $file );
|
262 |
+
$wp_filesystem->put_contents( $file, $maintenance_string, FS_CHMOD_FILE );
|
263 |
+
} elseif ( ! $enable && $wp_filesystem->exists( $file ) ) {
|
264 |
+
//$this->skin->feedback( 'maintenance_end' );
|
265 |
+
$wp_filesystem->delete( $file );
|
266 |
+
}
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* Download a package.
|
271 |
+
*
|
272 |
+
* @since 2.8.0
|
273 |
+
* @since 5.5.0 Added the `$hook_extra` parameter.
|
274 |
+
*
|
275 |
+
* @param string $package The URI of the package. If this is the full path to an
|
276 |
+
* existing local file, it will be returned untouched.
|
277 |
+
* @param bool $check_signatures Whether to validate file signatures. Default false.
|
278 |
+
* @param array $hook_extra Extra arguments to pass to the filter hooks. Default empty array.
|
279 |
+
* @return string|WP_Error The full path to the downloaded package file, or a WP_Error object.
|
280 |
+
*/
|
281 |
+
public function download_package( $package, $check_signatures = false, $hook_extra = array() ) {
|
282 |
+
|
283 |
+
/**
|
284 |
+
* Filters whether to return the package.
|
285 |
+
*
|
286 |
+
* @since 3.7.0
|
287 |
+
* @since 5.5.0 Added the `$hook_extra` parameter.
|
288 |
+
*
|
289 |
+
* @param bool $reply Whether to bail without returning the package.
|
290 |
+
* Default false.
|
291 |
+
* @param string $package The package file name.
|
292 |
+
* @param WP_Upgrader $this The WP_Upgrader instance.
|
293 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
294 |
+
*/
|
295 |
+
$reply = apply_filters( 'upgrader_pre_download', false, $package, $this, $hook_extra );
|
296 |
+
if ( false !== $reply ) {
|
297 |
+
return $reply;
|
298 |
+
}
|
299 |
+
|
300 |
+
if ( ! preg_match( '!^(http|https|ftp)://!i', $package ) && file_exists( $package ) ) { // Local file or remote?
|
301 |
+
return $package; // Must be a local file.
|
302 |
+
}
|
303 |
+
|
304 |
+
if ( empty( $package ) ) {
|
305 |
+
return new WP_Error( 'no_package', $this->strings['no_package'] );
|
306 |
+
}
|
307 |
+
|
308 |
+
//$this->skin->feedback( 'downloading_package', $package );
|
309 |
+
|
310 |
+
$download_file = download_url( $package, 300, $check_signatures );
|
311 |
+
|
312 |
+
if ( is_wp_error( $download_file ) && ! $download_file->get_error_data( 'softfail-filename' ) ) {
|
313 |
+
return new WP_Error( 'download_failed', $this->strings['download_failed'], $download_file->get_error_message() );
|
314 |
+
}
|
315 |
+
|
316 |
+
return $download_file;
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* Unpack a compressed package file.
|
321 |
+
*
|
322 |
+
* @since 2.8.0
|
323 |
+
*
|
324 |
+
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
325 |
+
*
|
326 |
+
* @param string $package Full path to the package file.
|
327 |
+
* @param bool $delete_package Optional. Whether to delete the package file after attempting
|
328 |
+
* to unpack it. Default true.
|
329 |
+
* @return string|WP_Error The path to the unpacked contents, or a WP_Error on failure.
|
330 |
+
*/
|
331 |
+
public function unpack_package( $package, $delete_package = true ) {
|
332 |
+
global $wp_filesystem;
|
333 |
+
|
334 |
+
//$this->skin->feedback( 'unpack_package' );
|
335 |
+
|
336 |
+
$upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/';
|
337 |
+
|
338 |
+
//Clean up contents of upgrade directory beforehand.
|
339 |
+
$upgrade_files = $wp_filesystem->dirlist( $upgrade_folder );
|
340 |
+
if ( ! empty( $upgrade_files ) ) {
|
341 |
+
foreach ( $upgrade_files as $file ) {
|
342 |
+
$wp_filesystem->delete( $upgrade_folder . $file['name'], true );
|
343 |
+
}
|
344 |
+
}
|
345 |
+
|
346 |
+
// We need a working directory - Strip off any .tmp or .zip suffixes
|
347 |
+
$working_dir = $upgrade_folder . basename( basename( $package, '.tmp' ), '.zip' );
|
348 |
+
|
349 |
+
// Clean up working directory
|
350 |
+
if ( $wp_filesystem->is_dir( $working_dir ) ) {
|
351 |
+
$wp_filesystem->delete( $working_dir, true );
|
352 |
+
}
|
353 |
+
|
354 |
+
// Unzip package to working directory
|
355 |
+
$result = unzip_file( $package, $working_dir );
|
356 |
+
|
357 |
+
// Once extracted, delete the package if required.
|
358 |
+
if ( $delete_package ) {
|
359 |
+
unlink( $package );
|
360 |
+
}
|
361 |
+
|
362 |
+
if ( is_wp_error( $result ) ) {
|
363 |
+
$wp_filesystem->delete( $working_dir, true );
|
364 |
+
if ( $result->get_error_code() === 'incompatible_archive' ) {
|
365 |
+
return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() );
|
366 |
+
}
|
367 |
+
|
368 |
+
return $result;
|
369 |
+
}
|
370 |
+
|
371 |
+
return $working_dir;
|
372 |
+
}
|
373 |
+
|
374 |
+
/**
|
375 |
+
* Install a package.
|
376 |
+
*
|
377 |
+
* Copies the contents of a package form a source directory, and installs them in
|
378 |
+
* a destination directory. Optionally removes the source. It can also optionally
|
379 |
+
* clear out the destination folder if it already exists.
|
380 |
+
*
|
381 |
+
* @since 2.8.0
|
382 |
+
*
|
383 |
+
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
384 |
+
* @global array $wp_theme_directories
|
385 |
+
*
|
386 |
+
* @param array|string $args {
|
387 |
+
* Optional. Array or string of arguments for installing a package. Default empty array.
|
388 |
+
*
|
389 |
+
* @type string $source Required path to the package source. Default empty.
|
390 |
+
* @type string $destination Required path to a folder to install the package in.
|
391 |
+
* Default empty.
|
392 |
+
* @type bool $clear_destination Whether to delete any files already in the destination
|
393 |
+
* folder. Default false.
|
394 |
+
* @type bool $clear_working Whether to delete the files form the working directory
|
395 |
+
* after copying to the destination. Default false.
|
396 |
+
* @type bool $abort_if_destination_exists Whether to abort the installation if
|
397 |
+
* the destination folder already exists. Default true.
|
398 |
+
* @type array $hook_extra Extra arguments to pass to the filter hooks called by
|
399 |
+
* WP_Upgrader::install_package(). Default empty array.
|
400 |
+
* }
|
401 |
+
*
|
402 |
+
* @return array|WP_Error The result (also stored in `WP_Upgrader::$result`), or a WP_Error on failure.
|
403 |
+
*/
|
404 |
+
public function install_package( $args = array() ) {
|
405 |
+
global $wp_filesystem, $wp_theme_directories;
|
406 |
+
|
407 |
+
$defaults = array(
|
408 |
+
'source' => '', // Please always pass this
|
409 |
+
'destination' => '', // and this
|
410 |
+
'clear_destination' => false,
|
411 |
+
'clear_working' => false,
|
412 |
+
'abort_if_destination_exists' => true,
|
413 |
+
'hook_extra' => array(),
|
414 |
+
);
|
415 |
+
|
416 |
+
$args = wp_parse_args( $args, $defaults );
|
417 |
+
|
418 |
+
// These were previously extract()'d.
|
419 |
+
$source = $args['source'];
|
420 |
+
$destination = $args['destination'];
|
421 |
+
$clear_destination = $args['clear_destination'];
|
422 |
+
|
423 |
+
// @todo does this need to be replaced?
|
424 |
+
// wpforms_set_time_limit( 300 );
|
425 |
+
|
426 |
+
if ( empty( $source ) || empty( $destination ) ) {
|
427 |
+
return new WP_Error( 'bad_request', $this->strings['bad_request'] );
|
428 |
+
}
|
429 |
+
//$this->skin->feedback( 'installing_package' );
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Filter the install response before the installation has started.
|
433 |
+
*
|
434 |
+
* Returning a truthy value, or one that could be evaluated as a WP_Error
|
435 |
+
* will effectively short-circuit the installation, returning that value
|
436 |
+
* instead.
|
437 |
+
*
|
438 |
+
* @since 2.8.0
|
439 |
+
*
|
440 |
+
* @param bool|WP_Error $response Response.
|
441 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
442 |
+
*/
|
443 |
+
$res = apply_filters( 'upgrader_pre_install', true, $args['hook_extra'] );
|
444 |
+
|
445 |
+
if ( is_wp_error( $res ) ) {
|
446 |
+
return $res;
|
447 |
+
}
|
448 |
+
|
449 |
+
// Retain the Original source and destinations.
|
450 |
+
$remote_source = $args['source'];
|
451 |
+
$local_destination = $destination;
|
452 |
+
|
453 |
+
$source_files = array_keys( $wp_filesystem->dirlist( $remote_source ) );
|
454 |
+
$remote_destination = $wp_filesystem->find_folder( $local_destination );
|
455 |
+
$count_source_files = count( $source_files );
|
456 |
+
|
457 |
+
// Locate which directory to copy to the new folder, This is based on the actual folder holding the files.
|
458 |
+
if ( $count_source_files === 1 && $wp_filesystem->is_dir( trailingslashit( $args['source'] ) . $source_files[0] . '/' ) ) { // Only one folder? Then we want its contents.
|
459 |
+
$source = trailingslashit( $args['source'] ) . trailingslashit( $source_files[0] );
|
460 |
+
} elseif ( $count_source_files === 0 ) {
|
461 |
+
return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files?
|
462 |
+
} else { // It's only a single file, the upgrader will use the folder name of this file as the destination folder. Folder name is based on zip filename.
|
463 |
+
$source = trailingslashit( $args['source'] );
|
464 |
+
}
|
465 |
+
|
466 |
+
/**
|
467 |
+
* Filter the source file location for the upgrade package.
|
468 |
+
*
|
469 |
+
* @since 2.8.0
|
470 |
+
* @since 4.4.0 The $hook_extra parameter became available.
|
471 |
+
*
|
472 |
+
* @param string $source File source location.
|
473 |
+
* @param string $remote_source Remote file source location.
|
474 |
+
* @param WP_Upgrader $this WP_Upgrader instance.
|
475 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
476 |
+
*/
|
477 |
+
$source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this, $args['hook_extra'] );
|
478 |
+
|
479 |
+
if ( is_wp_error( $source ) ) {
|
480 |
+
return $source;
|
481 |
+
}
|
482 |
+
|
483 |
+
// Has the source location changed? If so, we need a new source_files list.
|
484 |
+
if ( $source !== $remote_source ) {
|
485 |
+
$source_files = array_keys( $wp_filesystem->dirlist( $source ) );
|
486 |
+
}
|
487 |
+
|
488 |
+
/*
|
489 |
+
* Protection against deleting files in any important base directories.
|
490 |
+
* Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the
|
491 |
+
* destination directory (WP_PLUGIN_DIR / wp-content/themes) intending
|
492 |
+
* to copy the directory into the directory, whilst they pass the source
|
493 |
+
* as the actual files to copy.
|
494 |
+
*/
|
495 |
+
$protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' );
|
496 |
+
|
497 |
+
if ( is_array( $wp_theme_directories ) ) {
|
498 |
+
$protected_directories = array_merge( $protected_directories, $wp_theme_directories );
|
499 |
+
}
|
500 |
+
|
501 |
+
if ( in_array( $destination, $protected_directories ) ) {
|
502 |
+
$remote_destination = trailingslashit( $remote_destination ) . trailingslashit( basename( $source ) );
|
503 |
+
$destination = trailingslashit( $destination ) . trailingslashit( basename( $source ) );
|
504 |
+
}
|
505 |
+
|
506 |
+
if ( $clear_destination ) {
|
507 |
+
// We're going to clear the destination if there's something there.
|
508 |
+
$removed = $this->clear_destination( $remote_destination );
|
509 |
+
|
510 |
+
/**
|
511 |
+
* Filter whether the upgrader cleared the destination.
|
512 |
+
*
|
513 |
+
* @since 2.8.0
|
514 |
+
*
|
515 |
+
* @param mixed $removed Whether the destination was cleared. true on success, WP_Error on failure
|
516 |
+
* @param string $local_destination The local package destination.
|
517 |
+
* @param string $remote_destination The remote package destination.
|
518 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
519 |
+
*/
|
520 |
+
$removed = apply_filters( 'upgrader_clear_destination', $removed, $local_destination, $remote_destination, $args['hook_extra'] );
|
521 |
+
|
522 |
+
if ( is_wp_error( $removed ) ) {
|
523 |
+
return $removed;
|
524 |
+
}
|
525 |
+
} elseif ( $args['abort_if_destination_exists'] && $wp_filesystem->exists( $remote_destination ) ) {
|
526 |
+
// If we're not clearing the destination folder and something exists there already, Bail.
|
527 |
+
// But first check to see if there are actually any files in the folder.
|
528 |
+
$_files = $wp_filesystem->dirlist( $remote_destination );
|
529 |
+
|
530 |
+
if ( ! empty( $_files ) ) {
|
531 |
+
$wp_filesystem->delete( $remote_source, true ); // Clear out the source files.
|
532 |
+
|
533 |
+
return new WP_Error( 'folder_exists', $this->strings['folder_exists'], $remote_destination );
|
534 |
+
}
|
535 |
+
}
|
536 |
+
|
537 |
+
// Create destination if needed.
|
538 |
+
if ( ! $wp_filesystem->exists( $remote_destination ) ) {
|
539 |
+
if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) {
|
540 |
+
return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination );
|
541 |
+
}
|
542 |
+
}
|
543 |
+
|
544 |
+
// Copy new version of item into place.
|
545 |
+
$result = copy_dir( $source, $remote_destination );
|
546 |
+
|
547 |
+
if ( is_wp_error( $result ) ) {
|
548 |
+
if ( $args['clear_working'] ) {
|
549 |
+
$wp_filesystem->delete( $remote_source, true );
|
550 |
+
}
|
551 |
+
|
552 |
+
return $result;
|
553 |
+
}
|
554 |
+
|
555 |
+
// Clear the Working folder?
|
556 |
+
if ( $args['clear_working'] ) {
|
557 |
+
$wp_filesystem->delete( $remote_source, true );
|
558 |
+
}
|
559 |
+
|
560 |
+
$destination_name = basename( str_replace( $local_destination, '', $destination ) );
|
561 |
+
|
562 |
+
if ( $destination_name === '.' ) {
|
563 |
+
$destination_name = '';
|
564 |
+
}
|
565 |
+
|
566 |
+
$this->result = compact( 'source', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination' );
|
567 |
+
|
568 |
+
/**
|
569 |
+
* Filter the installation response after the installation has finished.
|
570 |
+
*
|
571 |
+
* @since 2.8.0
|
572 |
+
*
|
573 |
+
* @param bool $response Installation response.
|
574 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
575 |
+
* @param array $result Installation result data.
|
576 |
+
*/
|
577 |
+
$res = apply_filters( 'upgrader_post_install', true, $args['hook_extra'], $this->result );
|
578 |
+
|
579 |
+
if ( is_wp_error( $res ) ) {
|
580 |
+
$this->result = $res;
|
581 |
+
|
582 |
+
return $res;
|
583 |
+
}
|
584 |
+
|
585 |
+
// Bombard the calling function will all the info which we've just used.
|
586 |
+
return $this->result;
|
587 |
+
}
|
588 |
+
|
589 |
+
/**
|
590 |
+
* Install a plugin package.
|
591 |
+
*
|
592 |
+
* @since 1.6.3
|
593 |
+
*
|
594 |
+
* @param string $package The full local path or URI of the package.
|
595 |
+
* @param array $args Optional. Other arguments for installing a plugin package. Default empty array.
|
596 |
+
*
|
597 |
+
* @return bool|\WP_Error True if the installation was successful, false or a WP_Error otherwise.
|
598 |
+
*/
|
599 |
+
public function install( $package, $args = array() ) {
|
600 |
+
|
601 |
+
$result = parent::install( $package, $args );
|
602 |
+
if ( true === $result ) {
|
603 |
+
do_action( 'edd_plugin_installed', $package );
|
604 |
+
}
|
605 |
+
|
606 |
+
return $result;
|
607 |
+
}
|
608 |
+
}
|
includes/admin/promos/class-promo-handler.php
CHANGED
@@ -23,7 +23,9 @@ class PromoHandler {
|
|
23 |
* @var string[]
|
24 |
*/
|
25 |
private $notices = array(
|
26 |
-
'\\EDD\\Admin\\Promos\\Notices\\License_Upgrade_Notice'
|
|
|
|
|
27 |
);
|
28 |
|
29 |
/**
|
@@ -59,7 +61,7 @@ class PromoHandler {
|
|
59 |
|
60 |
add_action( $notice_class_name::DISPLAY_HOOK, function () use ( $notice_class_name ) {
|
61 |
/** @var Notice $notice */
|
62 |
-
$notice = new $notice_class_name;
|
63 |
if ( $notice->should_display() ) {
|
64 |
$notice->display();
|
65 |
}
|
@@ -105,15 +107,24 @@ class PromoHandler {
|
|
105 |
* @since 2.10.6
|
106 |
*/
|
107 |
public function dismiss_notice() {
|
108 |
-
|
|
|
|
|
|
|
|
|
|
|
109 |
wp_send_json_error( __( 'You do not have permission to perform this action.', 'easy-digital-downloads' ), 403 );
|
110 |
}
|
111 |
|
112 |
-
|
113 |
-
|
|
|
|
|
|
|
114 |
}
|
115 |
|
116 |
-
|
|
|
117 |
wp_send_json_error( __( 'You do not have permission to perform this action.', 'easy-digital-downloads' ), 403 );
|
118 |
}
|
119 |
|
@@ -124,6 +135,38 @@ class PromoHandler {
|
|
124 |
wp_send_json_success();
|
125 |
}
|
126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
}
|
128 |
|
129 |
new PromoHandler();
|
23 |
* @var string[]
|
24 |
*/
|
25 |
private $notices = array(
|
26 |
+
'\\EDD\\Admin\\Promos\\Notices\\License_Upgrade_Notice',
|
27 |
+
'\\EDD\\Admin\\Promos\\Notices\\Five_Star_Review_Dashboard',
|
28 |
+
'\\EDD\\Admin\\Promos\\Notices\\Five_Star_Review_Settings',
|
29 |
);
|
30 |
|
31 |
/**
|
61 |
|
62 |
add_action( $notice_class_name::DISPLAY_HOOK, function () use ( $notice_class_name ) {
|
63 |
/** @var Notice $notice */
|
64 |
+
$notice = new $notice_class_name();
|
65 |
if ( $notice->should_display() ) {
|
66 |
$notice->display();
|
67 |
}
|
107 |
* @since 2.10.6
|
108 |
*/
|
109 |
public function dismiss_notice() {
|
110 |
+
$notice_id = ! empty( $_POST['notice_id'] ) ? sanitize_text_field( $_POST['notice_id'] ) : false;
|
111 |
+
if ( empty( $notice_id ) ) {
|
112 |
+
wp_send_json_error( __( 'Missing notice ID.', 'easy-digital-downloads' ), 400 );
|
113 |
+
}
|
114 |
+
|
115 |
+
if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'edd-dismiss-notice-' . sanitize_key( $_POST['notice_id'] ) ) ) {
|
116 |
wp_send_json_error( __( 'You do not have permission to perform this action.', 'easy-digital-downloads' ), 403 );
|
117 |
}
|
118 |
|
119 |
+
$notice_class_name = $this->get_notice_class_name( $notice_id );
|
120 |
+
|
121 |
+
// No matching notice class was found.
|
122 |
+
if ( ! $notice_class_name ) {
|
123 |
+
wp_send_json_error( __( 'You do not have permission to perform this action.', 'easy-digital-downloads' ), 403 );
|
124 |
}
|
125 |
|
126 |
+
// Check whether the current user can dismiss the notice.
|
127 |
+
if ( ! defined( $notice_class_name . '::CAPABILITY' ) || ! current_user_can( $notice_class_name::CAPABILITY ) ) {
|
128 |
wp_send_json_error( __( 'You do not have permission to perform this action.', 'easy-digital-downloads' ), 403 );
|
129 |
}
|
130 |
|
135 |
wp_send_json_success();
|
136 |
}
|
137 |
|
138 |
+
/**
|
139 |
+
* Gets the notice class name for a given notice ID.
|
140 |
+
*
|
141 |
+
* @since 2.11.4
|
142 |
+
* @param string $notice_id The notice ID to match.
|
143 |
+
* @return bool|string The class name or false if no matching class was found.
|
144 |
+
*/
|
145 |
+
private function get_notice_class_name( $notice_id ) {
|
146 |
+
$notice_class_name = false;
|
147 |
+
// Look through the registered notice classes for the one being dismissed.
|
148 |
+
foreach ( $this->notices as $notice_class_to_check ) {
|
149 |
+
if ( ! class_exists( $notice_class_to_check ) ) {
|
150 |
+
$file_name = strtolower( str_replace( '_', '-', basename( str_replace( '\\', '/', $notice_class_to_check ) ) ) );
|
151 |
+
$file_path = EDD_PLUGIN_DIR . 'includes/admin/promos/notices/class-' . $file_name . '.php';
|
152 |
+
|
153 |
+
if ( file_exists( $file_path ) ) {
|
154 |
+
require_once $file_path;
|
155 |
+
}
|
156 |
+
}
|
157 |
+
|
158 |
+
if ( ! class_exists( $notice_class_to_check ) ) {
|
159 |
+
continue;
|
160 |
+
}
|
161 |
+
$notice = new $notice_class_to_check();
|
162 |
+
if ( $notice->get_id() === $notice_id ) {
|
163 |
+
$notice_class_name = $notice_class_to_check;
|
164 |
+
break;
|
165 |
+
}
|
166 |
+
}
|
167 |
+
|
168 |
+
return $notice_class_name;
|
169 |
+
}
|
170 |
}
|
171 |
|
172 |
new PromoHandler();
|
includes/admin/promos/notices/abstract-notice.php
CHANGED
@@ -29,6 +29,11 @@ abstract class Notice {
|
|
29 |
*/
|
30 |
const DISMISSIBLE = true;
|
31 |
|
|
|
|
|
|
|
|
|
|
|
32 |
/**
|
33 |
* Displays the notice content.
|
34 |
*
|
@@ -44,7 +49,7 @@ abstract class Notice {
|
|
44 |
*
|
45 |
* @return string
|
46 |
*/
|
47 |
-
|
48 |
return strtolower( str_replace( '_', '-', basename( str_replace( '\\', '/', get_class( $this ) ) ) ) );
|
49 |
}
|
50 |
|
@@ -59,7 +64,7 @@ abstract class Notice {
|
|
59 |
* @return bool
|
60 |
*/
|
61 |
public function should_display() {
|
62 |
-
return ! PromoHandler::is_dismissed( $this->get_id() ) && $this->_should_display();
|
63 |
}
|
64 |
|
65 |
/**
|
29 |
*/
|
30 |
const DISMISSIBLE = true;
|
31 |
|
32 |
+
/**
|
33 |
+
* The capability required to view/dismiss the notice.
|
34 |
+
*/
|
35 |
+
const CAPABILITY = 'manage_options';
|
36 |
+
|
37 |
/**
|
38 |
* Displays the notice content.
|
39 |
*
|
49 |
*
|
50 |
* @return string
|
51 |
*/
|
52 |
+
public function get_id() {
|
53 |
return strtolower( str_replace( '_', '-', basename( str_replace( '\\', '/', get_class( $this ) ) ) ) );
|
54 |
}
|
55 |
|
64 |
* @return bool
|
65 |
*/
|
66 |
public function should_display() {
|
67 |
+
return current_user_can( static::CAPABILITY ) && ! PromoHandler::is_dismissed( $this->get_id() ) && $this->_should_display();
|
68 |
}
|
69 |
|
70 |
/**
|
includes/admin/promos/notices/class-five-star-review-dashboard.php
ADDED
@@ -0,0 +1,189 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Dashboard Review Notice
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace EDD\Admin\Promos\Notices;
|
12 |
+
|
13 |
+
class Five_Star_Review_Dashboard extends Notice {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Action hook for displaying the notice.
|
17 |
+
*/
|
18 |
+
const DISPLAY_HOOK = 'edd_dashboard_sales_widget';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Type of promotional notice.
|
22 |
+
*/
|
23 |
+
const TYPE = 'dashboard';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Capability required to view or dismiss the notice.
|
27 |
+
*/
|
28 |
+
const CAPABILITY = 'manage_shop_settings';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* The current screen.
|
32 |
+
*
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
+
protected $screen = 'dashboard';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* The ID of the notice. Defined specifically here as we intend to use it twice.
|
39 |
+
*
|
40 |
+
* @since 2.11.4
|
41 |
+
* @return string
|
42 |
+
*/
|
43 |
+
public function get_id() {
|
44 |
+
return 'five-star-review';
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Display the notice.
|
49 |
+
*
|
50 |
+
* @since 2.11.4
|
51 |
+
* @return void
|
52 |
+
*/
|
53 |
+
public function display() {
|
54 |
+
?>
|
55 |
+
<div
|
56 |
+
id="edd-admin-notice-<?php echo esc_attr( $this->get_id() ); ?>"
|
57 |
+
class="edd-admin-notice-<?php echo esc_attr( sanitize_html_class( static::TYPE ) ); ?> edd-promo-notice"
|
58 |
+
data-nonce="<?php echo esc_attr( wp_create_nonce( 'edd-dismiss-notice-' . $this->get_id() ) ); ?>"
|
59 |
+
data-id="<?php echo esc_attr( $this->get_id() ); ?>"
|
60 |
+
data-lifespan="<?php echo esc_attr( static::dismiss_duration() ); ?>"
|
61 |
+
>
|
62 |
+
<?php
|
63 |
+
$this->_display();
|
64 |
+
?>
|
65 |
+
</div>
|
66 |
+
<?php
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* The promo notice content.
|
71 |
+
*
|
72 |
+
* @since 2.11.4
|
73 |
+
* @return void
|
74 |
+
*/
|
75 |
+
public function _display() {
|
76 |
+
?>
|
77 |
+
<div class="edd-review-step edd-review-step-1">
|
78 |
+
<p><?php esc_html_e( 'Hey, I noticed you\'ve made quite a few sales with Easy Digital Downloads! Are you enjoying Easy Digital Downloads?', 'easy-digital-downloads' ); ?></p>
|
79 |
+
<div class="edd-review-actions">
|
80 |
+
<button class="button-primary edd-review-switch-step" data-step="3"><?php esc_html_e( 'Yes', 'easy-digital-downloads' ); ?></button><br />
|
81 |
+
<button class="button-link edd-review-switch-step" data-step="2"><?php esc_html_e( 'Not Really', 'easy-digital-downloads' ); ?></button>
|
82 |
+
</div>
|
83 |
+
</div>
|
84 |
+
<div class="edd-review-step edd-review-step-2" style="display:none;">
|
85 |
+
<p><?php esc_html_e( 'We\'re sorry to hear you aren\'t enjoying Easy Digital Downloads. We would love a chance to improve. Could you take a minute and let us know what we can do better?', 'easy-digital-downloads' ); ?></p>
|
86 |
+
<div class="edd-review-actions">
|
87 |
+
<a href="<?php echo esc_url( $this->url() ); ?>" class="button button-secondary edd-promo-notice-dismiss" target="_blank"><?php esc_html_e( 'Give Feedback', 'easy-digital-downloads' ); ?></a><br>
|
88 |
+
<button class="button-link edd-promo-notice-dismiss"><?php esc_html_e( 'No thanks', 'easy-digital-downloads' ); ?></button>
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
<div class="edd-review-step edd-review-step-3" style="display:none;">
|
92 |
+
<p><?php esc_html_e( '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?', 'easy-digital-downloads' ); ?></p>
|
93 |
+
<p><strong><?php echo wp_kses( __( '~ Chris Klosowski<br>President of Easy Digital Downloads', 'easy-digital-downloads' ), array( 'br' => array() ) ); ?></strong></p>
|
94 |
+
<div class="edd-review-actions">
|
95 |
+
<a href="https://wordpress.org/support/plugin/easy-digital-downloads/reviews/?filter=5#new-post" class="button button-primary edd-promo-notice-dismiss" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Ok, you deserve it!', 'easy-digital-downloads' ); ?></a><br>
|
96 |
+
<button class="button-link edd-promo-notice-dismiss"><?php esc_html_e( 'No thanks', 'easy-digital-downloads' ); ?></button>
|
97 |
+
</div>
|
98 |
+
</div>
|
99 |
+
<img alt="" class="edd-peeking" src="<?php echo esc_url( EDD_PLUGIN_URL . 'assets/images/edd-peeking.png' ); ?>" />
|
100 |
+
<script type="text/javascript">
|
101 |
+
document.addEventListener( 'DOMContentLoaded', function() {
|
102 |
+
var steps = document.querySelectorAll( '.edd-review-switch-step' );
|
103 |
+
steps.forEach( function(step) {
|
104 |
+
step.addEventListener( 'click', function ( e ) {
|
105 |
+
e.preventDefault();
|
106 |
+
var target = this.getAttribute( 'data-step' );
|
107 |
+
if ( target ) {
|
108 |
+
var notice = this.closest( '.edd-promo-notice' );
|
109 |
+
var review_step = notice.querySelector( '.edd-review-step-' + target );
|
110 |
+
if ( review_step ) {
|
111 |
+
var thisStep = this.closest( '.edd-review-step' );
|
112 |
+
eddFadeOut( thisStep );
|
113 |
+
eddFadeIn( review_step );
|
114 |
+
}
|
115 |
+
}
|
116 |
+
} )
|
117 |
+
} )
|
118 |
+
|
119 |
+
function eddFadeIn( element ) {
|
120 |
+
var op = 0;
|
121 |
+
element.style.opacity = op;
|
122 |
+
element.style.display = 'block';
|
123 |
+
var timer = setInterval( function () {
|
124 |
+
if ( op >= 1 ) {
|
125 |
+
clearInterval( timer );
|
126 |
+
}
|
127 |
+
element.style.opacity = op;
|
128 |
+
element.style.filter = 'alpha(opacity=' + op * 100 + ')';
|
129 |
+
op = op + 0.1;
|
130 |
+
}, 80 );
|
131 |
+
}
|
132 |
+
|
133 |
+
function eddFadeOut( element ) {
|
134 |
+
var op = 1;
|
135 |
+
var timer = setInterval( function () {
|
136 |
+
if ( op <= 0 ) {
|
137 |
+
element.style.display = 'none';
|
138 |
+
clearInterval( timer );
|
139 |
+
}
|
140 |
+
element.style.opacity = op;
|
141 |
+
element.style.filter = 'alpha(opacity=' + op * 100 + ')';
|
142 |
+
op = op - 0.1;
|
143 |
+
}, 80 );
|
144 |
+
}
|
145 |
+
} );
|
146 |
+
</script>
|
147 |
+
<?php
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Whether the notice should display.
|
152 |
+
*
|
153 |
+
* @since 2.11.4
|
154 |
+
* @return bool
|
155 |
+
*/
|
156 |
+
protected function _should_display() {
|
157 |
+
|
158 |
+
$activated = edd_get_activation_date();
|
159 |
+
// Do not show if EDD was activated less than 30 days ago.
|
160 |
+
if ( ! is_numeric( $activated ) || ( $activated + ( DAY_IN_SECONDS * 30 ) ) > time() ) {
|
161 |
+
return false;
|
162 |
+
}
|
163 |
+
// @todo Change this to edd_count_orders in 3.0
|
164 |
+
$payments = edd_count_payments();
|
165 |
+
|
166 |
+
return isset( $payments->publish ) && $payments->publish >= 15;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Builds the UTM parameters for the URLs.
|
171 |
+
*
|
172 |
+
* @since 2.11.4
|
173 |
+
*
|
174 |
+
* @return string
|
175 |
+
*/
|
176 |
+
private function url() {
|
177 |
+
$args = array(
|
178 |
+
'utm_source' => urlencode( $this->screen ),
|
179 |
+
'utm_medium' => urlencode( static::TYPE ),
|
180 |
+
'utm_campaign' => 'Feedback',
|
181 |
+
'utm_content' => 'give-feedback',
|
182 |
+
);
|
183 |
+
|
184 |
+
return add_query_arg(
|
185 |
+
$args,
|
186 |
+
'https://easydigitaldownloads.com/plugin-feedback'
|
187 |
+
);
|
188 |
+
}
|
189 |
+
}
|
includes/admin/promos/notices/class-five-star-review-settings.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Settings Review Notice
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace EDD\Admin\Promos\Notices;
|
12 |
+
|
13 |
+
class Five_Star_Review_Settings extends Five_Star_Review_Dashboard {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Action hook for displaying the notice.
|
17 |
+
*/
|
18 |
+
const DISPLAY_HOOK = 'admin_notices';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Type of promotional notice.
|
22 |
+
*/
|
23 |
+
const TYPE = 'admin-notice';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* The current screen.
|
27 |
+
*
|
28 |
+
* @var string
|
29 |
+
*/
|
30 |
+
protected $screen = 'plugin-settings-page';
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Display the notice.
|
34 |
+
* This extends the parent method because the container classes are different.
|
35 |
+
*
|
36 |
+
* @since 2.11.4
|
37 |
+
* @return void
|
38 |
+
*/
|
39 |
+
public function display() {
|
40 |
+
?>
|
41 |
+
<div
|
42 |
+
id="edd-admin-notice-<?php echo esc_attr( $this->get_id() ); ?>"
|
43 |
+
class="notice notice-info edd-admin-notice-<?php echo esc_attr( sanitize_html_class( static::TYPE ) ); ?> edd-promo-notice"
|
44 |
+
data-nonce="<?php echo esc_attr( wp_create_nonce( 'edd-dismiss-notice-' . $this->get_id() ) ); ?>"
|
45 |
+
data-id="<?php echo esc_attr( $this->get_id() ); ?>"
|
46 |
+
data-lifespan="<?php echo esc_attr( static::dismiss_duration() ); ?>"
|
47 |
+
>
|
48 |
+
<?php
|
49 |
+
parent::_display();
|
50 |
+
?>
|
51 |
+
</div>
|
52 |
+
<?php
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Whether the notice should display.
|
57 |
+
* This extends the general method as this notice should only display on EDD settings screens.
|
58 |
+
*
|
59 |
+
* @since 2.11.4
|
60 |
+
* @return bool
|
61 |
+
*/
|
62 |
+
protected function _should_display() {
|
63 |
+
if ( ! edd_is_admin_page( 'settings' ) ) {
|
64 |
+
return false;
|
65 |
+
}
|
66 |
+
return parent::_should_display();
|
67 |
+
}
|
68 |
+
}
|
includes/admin/promos/notices/class-license-upgrade-notice.php
CHANGED
@@ -61,7 +61,7 @@ class License_Upgrade_Notice extends Notice {
|
|
61 |
|
62 |
$screen = get_current_screen();
|
63 |
|
64 |
-
if ( ! $screen instanceof \WP_Screen || 'dashboard' === $screen->id || ! edd_is_admin_page() ) {
|
65 |
return false;
|
66 |
}
|
67 |
|
@@ -74,9 +74,6 @@ class License_Upgrade_Notice extends Notice {
|
|
74 |
* @return bool
|
75 |
*/
|
76 |
protected function _should_display() {
|
77 |
-
if ( ! current_user_can( 'manage_options' ) ) {
|
78 |
-
return false;
|
79 |
-
}
|
80 |
|
81 |
if ( ! $this->is_edd_admin_page() ) {
|
82 |
return false;
|
61 |
|
62 |
$screen = get_current_screen();
|
63 |
|
64 |
+
if ( ! $screen instanceof \WP_Screen || 'dashboard' === $screen->id || ! edd_is_admin_page( '', '', false ) ) {
|
65 |
return false;
|
66 |
}
|
67 |
|
74 |
* @return bool
|
75 |
*/
|
76 |
protected function _should_display() {
|
|
|
|
|
|
|
77 |
|
78 |
if ( ! $this->is_edd_admin_page() ) {
|
79 |
return false;
|
includes/admin/reporting/export/class-batch-export-customers.php
CHANGED
@@ -37,15 +37,16 @@ class EDD_Batch_Customers_Export extends EDD_Batch_Export {
|
|
37 |
*/
|
38 |
public function csv_cols() {
|
39 |
|
40 |
-
|
41 |
-
'id'
|
42 |
-
'
|
43 |
-
'
|
44 |
-
'
|
45 |
-
'
|
|
|
|
|
|
|
46 |
);
|
47 |
-
|
48 |
-
return $cols;
|
49 |
}
|
50 |
|
51 |
/**
|
@@ -91,11 +92,14 @@ class EDD_Batch_Customers_Export extends EDD_Batch_Export {
|
|
91 |
$customer = new EDD_Customer( $customer_id );
|
92 |
|
93 |
$data[] = array(
|
94 |
-
'id'
|
95 |
-
'
|
96 |
-
'
|
97 |
-
'
|
98 |
-
'
|
|
|
|
|
|
|
99 |
);
|
100 |
}
|
101 |
}
|
@@ -110,11 +114,16 @@ class EDD_Batch_Customers_Export extends EDD_Batch_Export {
|
|
110 |
|
111 |
foreach ( $customers as $customer ) {
|
112 |
|
113 |
-
$data[$i]
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
|
|
|
|
|
|
|
|
|
|
118 |
|
119 |
$i++;
|
120 |
}
|
37 |
*/
|
38 |
public function csv_cols() {
|
39 |
|
40 |
+
return array(
|
41 |
+
'id' => __( 'ID', 'easy-digital-downloads' ),
|
42 |
+
'user_id' => __( 'User ID', 'easy-digital-downloads' ),
|
43 |
+
'name' => __( 'Name', 'easy-digital-downloads' ),
|
44 |
+
'email' => __( 'Email', 'easy-digital-downloads' ),
|
45 |
+
'purchases' => __( 'Number of Purchases', 'easy-digital-downloads' ),
|
46 |
+
'amount' => __( 'Customer Value', 'easy-digital-downloads' ),
|
47 |
+
'payment_ids' => __( 'Payment IDs', 'easy-digital-downloads' ),
|
48 |
+
'date_created' => __( 'Date Created', 'easy-digital-downloads' ),
|
49 |
);
|
|
|
|
|
50 |
}
|
51 |
|
52 |
/**
|
92 |
$customer = new EDD_Customer( $customer_id );
|
93 |
|
94 |
$data[] = array(
|
95 |
+
'id' => $customer->id,
|
96 |
+
'user_id' => $customer->user_id,
|
97 |
+
'name' => $customer->name,
|
98 |
+
'email' => $customer->email,
|
99 |
+
'purchases' => $customer->purchase_count,
|
100 |
+
'amount' => edd_format_amount( $customer->purchase_value ),
|
101 |
+
'payment_ids' => $customer->payment_ids,
|
102 |
+
'date_created' => $customer->date_created,
|
103 |
);
|
104 |
}
|
105 |
}
|
114 |
|
115 |
foreach ( $customers as $customer ) {
|
116 |
|
117 |
+
$data[ $i ] = array(
|
118 |
+
'id' => $customer->id,
|
119 |
+
'user_id' => $customer->user_id,
|
120 |
+
'name' => $customer->name,
|
121 |
+
'email' => $customer->email,
|
122 |
+
'purchases' => $customer->purchase_count,
|
123 |
+
'amount' => edd_format_amount( $customer->purchase_value ),
|
124 |
+
'payment_ids' => $customer->payment_ids,
|
125 |
+
'date_created' => $customer->date_created,
|
126 |
+
);
|
127 |
|
128 |
$i++;
|
129 |
}
|
includes/admin/reporting/export/class-batch-export-earnings-report.php
CHANGED
@@ -119,10 +119,10 @@ class EDD_Batch_Earnings_Report_Export extends EDD_Batch_Export {
|
|
119 |
* @return array $cols CSV header.
|
120 |
*/
|
121 |
public function print_csv_cols() {
|
122 |
-
$cols
|
123 |
-
$col_data
|
124 |
-
|
125 |
-
for ( $i = 0; $i <
|
126 |
$col_data .= $cols[ $i ];
|
127 |
|
128 |
// We don't need an extra space after the first column
|
@@ -131,7 +131,7 @@ class EDD_Batch_Earnings_Report_Export extends EDD_Batch_Export {
|
|
131 |
continue;
|
132 |
}
|
133 |
|
134 |
-
if ( $i == (
|
135 |
$col_data .= "\r\n";
|
136 |
} else {
|
137 |
$col_data .= ",,";
|
@@ -249,21 +249,12 @@ class EDD_Batch_Earnings_Report_Export extends EDD_Batch_Export {
|
|
249 |
$data = array();
|
250 |
|
251 |
$start_date = date( 'Y-m-d 00:00:00', strtotime( $this->start ) );
|
252 |
-
|
253 |
-
if ( $this->count() == 0 ) {
|
254 |
-
$end_date = date( 'Y-m-d 23:59:59', strtotime( $this->end ) );
|
255 |
-
} else {
|
256 |
-
$end_date = date( 'Y-m-d 23:59:59', strtotime( 'first day of +1 month', strtotime( $start_date ) ) );
|
257 |
-
}
|
258 |
|
259 |
if ( $this->step > 1 ) {
|
260 |
-
$
|
261 |
-
|
262 |
-
|
263 |
-
$end_date = date( 'Y-m-d 23:59:59', strtotime( $this->end ) );
|
264 |
-
} else {
|
265 |
-
$end_date = date( 'Y-m-d 23:59:59', strtotime( 'first day of +1 month', strtotime( $start_date ) ) );
|
266 |
-
}
|
267 |
}
|
268 |
|
269 |
if ( strtotime( $start_date ) > strtotime( $this->end ) ) {
|
@@ -278,7 +269,7 @@ class EDD_Batch_Earnings_Report_Export extends EDD_Batch_Export {
|
|
278 |
WHERE posts.post_type IN ('edd_payment')
|
279 |
AND {$wpdb->postmeta}.meta_key = '_edd_payment_total'
|
280 |
AND posts.post_date >= %s
|
281 |
-
AND posts.post_date
|
282 |
GROUP BY YEAR(posts.post_date), MONTH(posts.post_date), posts.post_status
|
283 |
ORDER by posts.post_date ASC", $start_date, $end_date ), ARRAY_A );
|
284 |
|
119 |
* @return array $cols CSV header.
|
120 |
*/
|
121 |
public function print_csv_cols() {
|
122 |
+
$cols = $this->get_csv_cols();
|
123 |
+
$col_data = '';
|
124 |
+
$column_count = count( $cols );
|
125 |
+
for ( $i = 0; $i < $column_count; $i++ ) {
|
126 |
$col_data .= $cols[ $i ];
|
127 |
|
128 |
// We don't need an extra space after the first column
|
131 |
continue;
|
132 |
}
|
133 |
|
134 |
+
if ( $i == ( $column_count - 1 ) ) {
|
135 |
$col_data .= "\r\n";
|
136 |
} else {
|
137 |
$col_data .= ",,";
|
249 |
$data = array();
|
250 |
|
251 |
$start_date = date( 'Y-m-d 00:00:00', strtotime( $this->start ) );
|
252 |
+
$end_date = date( 'Y-m-t 23:59:59', strtotime( $this->start ) );
|
|
|
|
|
|
|
|
|
|
|
253 |
|
254 |
if ( $this->step > 1 ) {
|
255 |
+
$start_timestamp = strtotime( 'first day of +' . ( $this->step - 1 ) . ' month', strtotime( $start_date ) );
|
256 |
+
$start_date = date( 'Y-m-d 00:00:00', $start_timestamp );
|
257 |
+
$end_date = date( 'Y-m-t 23:59:59', $start_timestamp );
|
|
|
|
|
|
|
|
|
258 |
}
|
259 |
|
260 |
if ( strtotime( $start_date ) > strtotime( $this->end ) ) {
|
269 |
WHERE posts.post_type IN ('edd_payment')
|
270 |
AND {$wpdb->postmeta}.meta_key = '_edd_payment_total'
|
271 |
AND posts.post_date >= %s
|
272 |
+
AND posts.post_date <= %s
|
273 |
GROUP BY YEAR(posts.post_date), MONTH(posts.post_date), posts.post_status
|
274 |
ORDER by posts.post_date ASC", $start_date, $end_date ), ARRAY_A );
|
275 |
|
includes/admin/settings/contextual-help.php
CHANGED
@@ -10,7 +10,9 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
14 |
|
15 |
/**
|
16 |
* Settings contextual help.
|
@@ -22,8 +24,9 @@ if ( ! defined( 'ABSPATH' ) ) exit;
|
|
22 |
function edd_settings_contextual_help() {
|
23 |
$screen = get_current_screen();
|
24 |
|
25 |
-
if (
|
26 |
return;
|
|
|
27 |
|
28 |
$screen->set_help_sidebar(
|
29 |
'<p><strong>' . __( 'For more information:', 'easy-digital-downloads' ) . '</strong></p>' .
|
@@ -35,18 +38,19 @@ function edd_settings_contextual_help() {
|
|
35 |
);
|
36 |
|
37 |
$screen->add_help_tab( array(
|
38 |
-
'id'
|
39 |
-
'title'
|
40 |
-
'content'
|
41 |
) );
|
42 |
|
43 |
$screen->add_help_tab( array(
|
44 |
-
'id'
|
45 |
-
'title'
|
46 |
-
'content'
|
47 |
-
'<p>' . __( 'This screen provides ways to toggle payment gateways on or off,
|
48 |
'<p>' . __( '<strong>Test Payment</strong> - This included gateway is great for testing your store, as it requires no payment, and leads straight to product downloads. However, please remember to turn it off once your site is live!', 'easy-digital-downloads' ) . '</p>' .
|
49 |
-
'<p>' . __( '<strong>PayPal</strong> - A PayPal payment gateway is included as standard with Easy Digital Downloads. To test the PayPal gateway, you need a Sandbox account for PayPal and the site must be placed in Test Mode from the
|
|
|
50 |
) );
|
51 |
|
52 |
$screen->add_help_tab( array(
|
@@ -57,6 +61,14 @@ function edd_settings_contextual_help() {
|
|
57 |
'<p>' . __( 'A set of email tags has also been provided to allow the creation of personalized emails. A tag consists of a keyword surrounded by curly braces: <code>{tag}</code>. A description of each of these tags appears below the editor.', 'easy-digital-downloads' ) . '</p>'
|
58 |
) );
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
$screen->add_help_tab( array(
|
61 |
'id' => 'edd-settings-styles',
|
62 |
'title' => __( 'Styles', 'easy-digital-downloads' ),
|
@@ -86,11 +98,10 @@ function edd_settings_contextual_help() {
|
|
86 |
) );
|
87 |
|
88 |
$screen->add_help_tab( array(
|
89 |
-
'id'
|
90 |
-
'title'
|
91 |
-
'content'
|
92 |
-
'<p>' . __( 'This screen provides other miscellaneous options such as
|
93 |
-
'<p>' . __( 'A description of all the options are provided beside their input boxes.', 'easy-digital-downloads' ) . '</p>'
|
94 |
) );
|
95 |
|
96 |
do_action( 'edd_settings_contextual_help', $screen );
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
|
17 |
/**
|
18 |
* Settings contextual help.
|
24 |
function edd_settings_contextual_help() {
|
25 |
$screen = get_current_screen();
|
26 |
|
27 |
+
if ( 'download_page_edd-settings' !== $screen->id ) {
|
28 |
return;
|
29 |
+
}
|
30 |
|
31 |
$screen->set_help_sidebar(
|
32 |
'<p><strong>' . __( 'For more information:', 'easy-digital-downloads' ) . '</strong></p>' .
|
38 |
);
|
39 |
|
40 |
$screen->add_help_tab( array(
|
41 |
+
'id' => 'edd-settings-general',
|
42 |
+
'title' => __( 'General', 'easy-digital-downloads' ),
|
43 |
+
'content' => '<p>' . __( 'This screen provides the most basic settings for configuring your store. You can set the currency, page templates, and general store settings.', 'easy-digital-downloads' ) . '</p>',
|
44 |
) );
|
45 |
|
46 |
$screen->add_help_tab( array(
|
47 |
+
'id' => 'edd-settings-payment-gateways',
|
48 |
+
'title' => __( 'Payments', 'easy-digital-downloads' ),
|
49 |
+
'content' =>
|
50 |
+
'<p>' . __( 'This screen provides ways to enable Test Mode, toggle payment gateways on or off, manage accounting settings, and configure gateway-specific settings. Any extra payment gateway extensions you have installed will appear on this page, and can be configured to suit your needs.', 'easy-digital-downloads' ) . '</p>' .
|
51 |
'<p>' . __( '<strong>Test Payment</strong> - This included gateway is great for testing your store, as it requires no payment, and leads straight to product downloads. However, please remember to turn it off once your site is live!', 'easy-digital-downloads' ) . '</p>' .
|
52 |
+
'<p>' . __( '<strong>PayPal</strong> - A PayPal payment gateway is included as standard with Easy Digital Downloads. To test the PayPal gateway, you need a Sandbox account for PayPal and the site must be placed in Test Mode from the Payments > Gateways tab. Please remember to enter your PayPal account email address in order for payments to get processed.', 'easy-digital-downloads' ) . '</p>' .
|
53 |
+
'<p>' . __( '<strong>Stripe</strong> - The Stripe payment gateway is also included with Easy Digital Downloads. To test the Stripe gateway, you must "Connect with Stripe" and the site must be placed in Test Mode from the Payments > Gateways tab.', 'easy-digital-downloads' ) . '</p>',
|
54 |
) );
|
55 |
|
56 |
$screen->add_help_tab( array(
|
61 |
'<p>' . __( 'A set of email tags has also been provided to allow the creation of personalized emails. A tag consists of a keyword surrounded by curly braces: <code>{tag}</code>. A description of each of these tags appears below the editor.', 'easy-digital-downloads' ) . '</p>'
|
62 |
) );
|
63 |
|
64 |
+
$screen->add_help_tab( array(
|
65 |
+
'id' => 'edd-settings-marketing',
|
66 |
+
'title' => __( 'Marketing', 'easy-digital-downloads' ),
|
67 |
+
'content' =>
|
68 |
+
'<p>' . __( 'Marketing settings will help you connect with your customers.', 'easy-digital-downloads' ) . '</p>' .
|
69 |
+
'<p>' . __( 'Marketing specific extensions will add their settings here as well.', 'easy-digital-downloads' ) . '</p>',
|
70 |
+
) );
|
71 |
+
|
72 |
$screen->add_help_tab( array(
|
73 |
'id' => 'edd-settings-styles',
|
74 |
'title' => __( 'Styles', 'easy-digital-downloads' ),
|
98 |
) );
|
99 |
|
100 |
$screen->add_help_tab( array(
|
101 |
+
'id' => 'edd-settings-misc',
|
102 |
+
'title' => __( 'Miscellaneous', 'easy-digital-downloads' ),
|
103 |
+
'content' =>
|
104 |
+
'<p>' . __( 'This screen provides other miscellaneous options such as configuring your store buttons, file download functionality, and terms of service.', 'easy-digital-downloads' ) . '</p>',
|
|
|
105 |
) );
|
106 |
|
107 |
do_action( 'edd_settings_contextual_help', $screen );
|
includes/admin/settings/display-settings.php
CHANGED
@@ -21,11 +21,43 @@ function edd_admin_header() {
|
|
21 |
if ( ! edd_is_admin_page( '', '', false ) ) {
|
22 |
return;
|
23 |
}
|
|
|
|
|
24 |
?>
|
25 |
<div id="edd-header" class="edd-header">
|
26 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
</div>
|
28 |
<?php
|
|
|
|
|
|
|
29 |
}
|
30 |
add_action( 'admin_notices', 'edd_admin_header', 1 );
|
31 |
|
@@ -50,12 +82,17 @@ function edd_options_page() {
|
|
50 |
$key = key( $sections );
|
51 |
}
|
52 |
|
53 |
-
$
|
54 |
-
$section = isset( $_GET['section'] ) && ! empty( $registered_sections ) && array_key_exists( $_GET['section'], $registered_sections ) ? sanitize_text_field( $_GET['section'] ) : $key;
|
55 |
|
56 |
-
// Unset 'main' if it's empty and default to the first non-empty if it's the chosen section
|
57 |
$all_settings = edd_get_registered_settings();
|
58 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
// Let's verify we have a 'main' section to show
|
60 |
$has_main_settings = true;
|
61 |
if ( empty( $all_settings[ $active_tab ]['main'] ) ) {
|
@@ -75,6 +112,7 @@ function edd_options_page() {
|
|
75 |
}
|
76 |
|
77 |
$override = false;
|
|
|
78 |
if ( false === $has_main_settings ) {
|
79 |
unset( $sections['main'] );
|
80 |
|
@@ -95,7 +133,7 @@ function edd_options_page() {
|
|
95 |
<h1><?php esc_html_e( 'Settings', 'easy-digital-downloads' ); ?></h1>
|
96 |
<h2 class="nav-tab-wrapper">
|
97 |
<?php
|
98 |
-
foreach (
|
99 |
$tab_url = add_query_arg( array(
|
100 |
'settings-updated' => false,
|
101 |
'tab' => $tab_id,
|
@@ -198,7 +236,6 @@ function edd_options_page() {
|
|
198 |
* @return string
|
199 |
*/
|
200 |
function edd_options_sidebar() {
|
201 |
-
|
202 |
// Get settings tab and section info
|
203 |
$active_tab = isset( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : 'general';
|
204 |
$active_tab = array_key_exists( $active_tab, edd_get_settings_tabs() ) ? $active_tab : 'general';
|
21 |
if ( ! edd_is_admin_page( '', '', false ) ) {
|
22 |
return;
|
23 |
}
|
24 |
+
|
25 |
+
$numberNotifications = EDD()->notifications->countActiveNotifications();
|
26 |
?>
|
27 |
<div id="edd-header" class="edd-header">
|
28 |
+
<div id="edd-header-wrapper">
|
29 |
+
<img class="edd-header-logo" alt="" src="<?php echo esc_url( EDD_PLUGIN_URL . '/assets/images/logo-edd-dark.svg' ); ?>" />
|
30 |
+
|
31 |
+
<div id="edd-header-actions">
|
32 |
+
<button
|
33 |
+
id="edd-notification-button"
|
34 |
+
class="edd-round"
|
35 |
+
x-data
|
36 |
+
x-init="$store.eddNotifications.numberActiveNotifications = <?php echo esc_js( $numberNotifications ); ?>"
|
37 |
+
@click="$store.eddNotifications.openPanel()"
|
38 |
+
>
|
39 |
+
<span
|
40 |
+
class="edd-round edd-number<?php echo 0 === $numberNotifications ? ' edd-hidden' : ''; ?>"
|
41 |
+
x-show="$store.eddNotifications.numberActiveNotifications > 0"
|
42 |
+
>
|
43 |
+
<?php echo wp_kses( sprintf(
|
44 |
+
/* Translators: %1$s number of notifications; %2$s opening span tag; %3$s closing span tag */
|
45 |
+
__( '%1$s %2$sunread notifications%3$s', 'easy-digital-downloads' ),
|
46 |
+
'<span x-text="$store.eddNotifications.numberActiveNotifications"></span>',
|
47 |
+
'<span class="screen-reader-text">',
|
48 |
+
'</span>'
|
49 |
+
), array( 'span' => array( 'class' => true, 'x-text' => true ) ) ); ?>
|
50 |
+
</span>
|
51 |
+
|
52 |
+
<svg viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" class="edd-notifications-icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.8333 2.5H4.16667C3.25 2.5 2.5 3.25 2.5 4.16667V15.8333C2.5 16.75 3.24167 17.5 4.16667 17.5H15.8333C16.75 17.5 17.5 16.75 17.5 15.8333V4.16667C17.5 3.25 16.75 2.5 15.8333 2.5ZM15.8333 15.8333H4.16667V13.3333H7.13333C7.70833 14.325 8.775 15 10.0083 15C11.2417 15 12.3 14.325 12.8833 13.3333H15.8333V15.8333ZM11.675 11.6667H15.8333V4.16667H4.16667V11.6667H8.34167C8.34167 12.5833 9.09167 13.3333 10.0083 13.3333C10.925 13.3333 11.675 12.5833 11.675 11.6667Z" fill="currentColor"></path></svg>
|
53 |
+
</button>
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
</div>
|
57 |
<?php
|
58 |
+
add_action( 'admin_footer', function() {
|
59 |
+
require_once EDD_PLUGIN_DIR . 'includes/admin/views/notifications.php';
|
60 |
+
} );
|
61 |
}
|
62 |
add_action( 'admin_notices', 'edd_admin_header', 1 );
|
63 |
|
82 |
$key = key( $sections );
|
83 |
}
|
84 |
|
85 |
+
$section = ! empty( $_GET['section'] ) && ! empty( $sections[ $_GET['section'] ] ) ? sanitize_text_field( $_GET['section'] ) : $key;
|
|
|
86 |
|
|
|
87 |
$all_settings = edd_get_registered_settings();
|
88 |
|
89 |
+
// Remove tabs that don't have settings fields.
|
90 |
+
foreach ( array_keys( $settings_tabs ) as $settings_tab ) {
|
91 |
+
if ( empty( $all_settings[ $settings_tab ] ) ) {
|
92 |
+
unset( $settings_tabs[ $settings_tab ] );
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
// Let's verify we have a 'main' section to show
|
97 |
$has_main_settings = true;
|
98 |
if ( empty( $all_settings[ $active_tab ]['main'] ) ) {
|
112 |
}
|
113 |
|
114 |
$override = false;
|
115 |
+
// Unset 'main' if it's empty and default to the first non-empty if it's the chosen section
|
116 |
if ( false === $has_main_settings ) {
|
117 |
unset( $sections['main'] );
|
118 |
|
133 |
<h1><?php esc_html_e( 'Settings', 'easy-digital-downloads' ); ?></h1>
|
134 |
<h2 class="nav-tab-wrapper">
|
135 |
<?php
|
136 |
+
foreach ( $settings_tabs as $tab_id => $tab_name ) {
|
137 |
$tab_url = add_query_arg( array(
|
138 |
'settings-updated' => false,
|
139 |
'tab' => $tab_id,
|
236 |
* @return string
|
237 |
*/
|
238 |
function edd_options_sidebar() {
|
|
|
239 |
// Get settings tab and section info
|
240 |
$active_tab = isset( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : 'general';
|
241 |
$active_tab = array_key_exists( $active_tab, edd_get_settings_tabs() ) ? $active_tab : 'general';
|
includes/admin/settings/register-settings.php
CHANGED
@@ -488,6 +488,14 @@ function edd_get_registered_settings() {
|
|
488 |
'desc' => __( 'Check this to force users to be redirected to the secure checkout page. You must have an SSL certificate installed to use this option.', 'easy-digital-downloads' ),
|
489 |
'type' => 'checkbox',
|
490 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
491 |
'logged_in_only' => array(
|
492 |
'id' => 'logged_in_only',
|
493 |
'name' => __( 'Require Login', 'easy-digital-downloads' ),
|
@@ -509,12 +517,6 @@ function edd_get_registered_settings() {
|
|
509 |
'none' => __( 'None', 'easy-digital-downloads' ),
|
510 |
),
|
511 |
),
|
512 |
-
'allow_multiple_discounts' => array(
|
513 |
-
'id' => 'allow_multiple_discounts',
|
514 |
-
'name' => __('Multiple Discounts','easy-digital-downloads' ),
|
515 |
-
'desc' => __('Allow customers to use multiple discounts on the same purchase?','easy-digital-downloads' ),
|
516 |
-
'type' => 'checkbox',
|
517 |
-
),
|
518 |
'enable_cart_saving' => array(
|
519 |
'id' => 'enable_cart_saving',
|
520 |
'name' => __( 'Enable Cart Saving', 'easy-digital-downloads' ),
|
@@ -568,28 +570,6 @@ function edd_get_registered_settings() {
|
|
568 |
'desc' => '',
|
569 |
'type' => 'hook',
|
570 |
),
|
571 |
-
'sendwp_header' => array(
|
572 |
-
'id' => 'sendwp_header',
|
573 |
-
'name' => '<strong>' . __( 'SendWP', 'easy-digital-downloads' ) . '</strong>',
|
574 |
-
'type' => 'header',
|
575 |
-
),
|
576 |
-
'sendwp' => array(
|
577 |
-
'id' => 'sendwp',
|
578 |
-
'name' => __( 'Deliverability settings', 'easy-digital-downloads' ),
|
579 |
-
'desc' => '',
|
580 |
-
'type' => 'sendwp',
|
581 |
-
),
|
582 |
-
'recapture_header' => array(
|
583 |
-
'id' => 'recapture_header',
|
584 |
-
'name' => '<strong>' . __( 'Recapture', 'easy-digital-downloads' ) . '</strong>',
|
585 |
-
'type' => 'header',
|
586 |
-
),
|
587 |
-
'recapture' => array(
|
588 |
-
'id' => 'recapture',
|
589 |
-
'name' => __( 'Abandoned cart recovery', 'easy-digital-downloads' ),
|
590 |
-
'desc' => '',
|
591 |
-
'type' => 'recapture',
|
592 |
-
),
|
593 |
),
|
594 |
'purchase_receipts' => array(
|
595 |
'purchase_receipt_email_settings' => array(
|
@@ -658,6 +638,25 @@ function edd_get_registered_settings() {
|
|
658 |
),
|
659 |
)
|
660 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
661 |
/** Styles Settings */
|
662 |
'styles' => apply_filters('edd_settings_styles',
|
663 |
array(
|
@@ -772,14 +771,6 @@ function edd_get_registered_settings() {
|
|
772 |
'misc' => apply_filters('edd_settings_misc',
|
773 |
array(
|
774 |
'main' => array(
|
775 |
-
'redirect_on_add' => array(
|
776 |
-
'id' => 'redirect_on_add',
|
777 |
-
'name' => __( 'Redirect to Checkout', 'easy-digital-downloads' ),
|
778 |
-
'desc' => __( 'Immediately redirect to checkout after adding an item to the cart?', 'easy-digital-downloads' ),
|
779 |
-
'type' => 'checkbox',
|
780 |
-
'tooltip_title' => __( 'Redirect to Checkout', 'easy-digital-downloads' ),
|
781 |
-
'tooltip_desc' => __( 'When enabled, once an item has been added to the cart, the customer will be redirected directly to your checkout page. This is useful for stores that sell single items.', 'easy-digital-downloads' ),
|
782 |
-
),
|
783 |
'item_quantities' => array(
|
784 |
'id' => 'item_quantities',
|
785 |
'name' => __('Cart Item Quantities','easy-digital-downloads' ),
|
@@ -1360,30 +1351,23 @@ function edd_sanitize_html_class( $class = '' ) {
|
|
1360 |
* Retrieve settings tabs
|
1361 |
*
|
1362 |
* @since 1.8
|
|
|
1363 |
* @return array $tabs
|
1364 |
*/
|
1365 |
function edd_get_settings_tabs() {
|
1366 |
|
1367 |
-
|
1368 |
-
|
1369 |
-
|
1370 |
-
|
1371 |
-
|
1372 |
-
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
-
|
1377 |
-
|
1378 |
-
|
1379 |
-
}
|
1380 |
-
if( ! empty( $settings['licenses'] ) ) {
|
1381 |
-
$tabs['licenses'] = __( 'Licenses', 'easy-digital-downloads' );
|
1382 |
-
}
|
1383 |
-
|
1384 |
-
$tabs['misc'] = __( 'Misc', 'easy-digital-downloads' );
|
1385 |
-
|
1386 |
-
return apply_filters( 'edd_settings_tabs', $tabs );
|
1387 |
}
|
1388 |
|
1389 |
/**
|
@@ -1437,6 +1421,9 @@ function edd_get_registered_settings_sections() {
|
|
1437 |
'purchase_receipts' => __( 'Purchase Receipts', 'easy-digital-downloads' ),
|
1438 |
'sale_notifications' => __( 'New Sale Notifications', 'easy-digital-downloads' ),
|
1439 |
) ),
|
|
|
|
|
|
|
1440 |
'styles' => apply_filters( 'edd_settings_sections_styles', array(
|
1441 |
'main' => __( 'General', 'easy-digital-downloads' ),
|
1442 |
) ),
|
@@ -2160,63 +2147,6 @@ function edd_shop_states_callback($args) {
|
|
2160 |
echo apply_filters( 'edd_after_setting_output', $html, $args );
|
2161 |
}
|
2162 |
|
2163 |
-
/**
|
2164 |
-
* SendWP Callback
|
2165 |
-
*
|
2166 |
-
* Renders SendWP Settings
|
2167 |
-
*
|
2168 |
-
* @since 2.9.15
|
2169 |
-
* @param array $args Arguments passed by the setting
|
2170 |
-
* @return void
|
2171 |
-
*/
|
2172 |
-
function edd_sendwp_callback($args) {
|
2173 |
-
|
2174 |
-
// Connection status partial label based on the state of the SendWP email sending setting (Tools -> SendWP)
|
2175 |
-
$connected = '<a href="https://app.sendwp.com/dashboard" target="_blank" rel="noopener noreferrer">';
|
2176 |
-
$connected .= __( 'Access your SendWP account', 'easy-digital-downloads' );
|
2177 |
-
$connected .= '</a>.';
|
2178 |
-
|
2179 |
-
$disconnected = sprintf(
|
2180 |
-
__( '<em><strong>Note:</strong> Email sending is currently disabled. <a href="' . admin_url( '/tools.php?page=sendwp' ) . '">Click here</a> to enable it.</em>', 'easy-digital-downloads' )
|
2181 |
-
);
|
2182 |
-
|
2183 |
-
// Checks if SendWP is connected
|
2184 |
-
$client_connected = function_exists( 'sendwp_client_connected' ) && sendwp_client_connected() ? true : false;
|
2185 |
-
|
2186 |
-
// Checks if email sending is enabled in SendWP
|
2187 |
-
$forwarding_enabled = function_exists( 'sendwp_forwarding_enabled' ) && sendwp_forwarding_enabled() ? true : false;
|
2188 |
-
|
2189 |
-
ob_start();
|
2190 |
-
|
2191 |
-
echo $args['desc'];
|
2192 |
-
|
2193 |
-
// Output the appropriate button and label based on connection status
|
2194 |
-
if( $client_connected ) :
|
2195 |
-
?>
|
2196 |
-
<div class="inline notice notice-success">
|
2197 |
-
<p><?php _e( 'SendWP plugin activated.', 'easy-digital-downloads' ); ?> <?php echo $forwarding_enabled ? $connected : $disconnected ; ?></p>
|
2198 |
-
|
2199 |
-
<p>
|
2200 |
-
<button id="edd-sendwp-disconnect" class="button"><?php _e( 'Disconnect SendWP', 'easy-digital-downloads' ); ?></button>
|
2201 |
-
</p>
|
2202 |
-
</div>
|
2203 |
-
<?php
|
2204 |
-
else :
|
2205 |
-
?>
|
2206 |
-
<p>
|
2207 |
-
<?php _e( 'We recommend SendWP to ensure quick and reliable delivery of all emails sent from your store, such as purchase receipts, subscription renewal reminders, password resets, and more.', 'easy-digital-downloads' ); ?> <?php printf( __( '%sLearn more%s', 'easy-digital-downloads' ), '<a href="https://sendwp.com/" target="_blank" rel="noopener noreferrer">', '</a>' ); ?>
|
2208 |
-
</p>
|
2209 |
-
<p>
|
2210 |
-
<button type="button" id="edd-sendwp-connect" class="button button-primary"><?php esc_html_e( 'Connect with SendWP', 'easy-digital-downloads' ); ?>
|
2211 |
-
</button>
|
2212 |
-
</p>
|
2213 |
-
|
2214 |
-
<?php
|
2215 |
-
endif;
|
2216 |
-
|
2217 |
-
echo ob_get_clean();
|
2218 |
-
}
|
2219 |
-
|
2220 |
/**
|
2221 |
* Recapture Callback
|
2222 |
*
|
@@ -2540,9 +2470,8 @@ if ( ! function_exists( 'edd_license_key_callback' ) ) {
|
|
2540 |
} elseif( $expiration > $now && $expiration - $now < ( DAY_IN_SECONDS * 30 ) ) {
|
2541 |
|
2542 |
$messages[] = sprintf(
|
2543 |
-
__( 'Your license key expires soon! It expires on %s.
|
2544 |
-
date_i18n( get_option( 'date_format' ), strtotime( $license->expires, current_time( 'timestamp' ) ) )
|
2545 |
-
'https://easydigitaldownloads.com/checkout/?edd_license_key=' . $value . '&utm_campaign=admin&utm_source=licenses&utm_medium=renew'
|
2546 |
);
|
2547 |
|
2548 |
$license_status = 'license-expires-soon-notice';
|
@@ -2580,7 +2509,7 @@ if ( ! function_exists( 'edd_license_key_callback' ) ) {
|
|
2580 |
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
|
2581 |
$html = '<input type="password" autocomplete="off" class="' . sanitize_html_class( $size ) . '-text" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" name="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
|
2582 |
|
2583 |
-
if ( ( is_object( $license ) && 'valid' == $license->license ) || 'valid' == $license ) {
|
2584 |
$html .= '<input type="submit" class="button-secondary" name="' . $args['id'] . '_deactivate" value="' . __( 'Deactivate License', 'easy-digital-downloads' ) . '"/>';
|
2585 |
}
|
2586 |
|
@@ -2636,28 +2565,3 @@ function edd_add_setting_tooltip( $html, $args ) {
|
|
2636 |
return $html;
|
2637 |
}
|
2638 |
add_filter( 'edd_after_setting_output', 'edd_add_setting_tooltip', 10, 2 );
|
2639 |
-
|
2640 |
-
|
2641 |
-
/**
|
2642 |
-
* Gives us an area to ensure known compatibility issues with our settings organization by giving us a hook to manage
|
2643 |
-
* and alter hooks and filters that are being run against our primary settings array.
|
2644 |
-
*
|
2645 |
-
* @since 2.11.3
|
2646 |
-
*/
|
2647 |
-
|
2648 |
-
add_action(
|
2649 |
-
'plugins_loaded',
|
2650 |
-
function() {
|
2651 |
-
|
2652 |
-
/**
|
2653 |
-
* Ensures compatibility with EDD 2.11.3 and Recurring payments prior to Recurring being released to move
|
2654 |
-
* settings for 'checkout' from 'misc' to 'payments'.
|
2655 |
-
*/
|
2656 |
-
if ( function_exists( 'edd_recurring_guest_checkout_description' ) && false !== has_filter( 'edd_settings_misc', 'edd_recurring_guest_checkout_description' ) ) {
|
2657 |
-
remove_filter( 'edd_settings_misc', 'edd_recurring_guest_checkout_description', 10 );
|
2658 |
-
add_filter( 'edd_settings_gateways', 'edd_recurring_guest_checkout_description', 10 );
|
2659 |
-
}
|
2660 |
-
|
2661 |
-
},
|
2662 |
-
99
|
2663 |
-
);
|
488 |
'desc' => __( 'Check this to force users to be redirected to the secure checkout page. You must have an SSL certificate installed to use this option.', 'easy-digital-downloads' ),
|
489 |
'type' => 'checkbox',
|
490 |
),
|
491 |
+
'redirect_on_add' => array(
|
492 |
+
'id' => 'redirect_on_add',
|
493 |
+
'name' => __( 'Redirect to Checkout', 'easy-digital-downloads' ),
|
494 |
+
'desc' => __( 'Immediately redirect to checkout after adding an item to the cart?', 'easy-digital-downloads' ),
|
495 |
+
'type' => 'checkbox',
|
496 |
+
'tooltip_title' => __( 'Redirect to Checkout', 'easy-digital-downloads' ),
|
497 |
+
'tooltip_desc' => __( 'When enabled, once an item has been added to the cart, the customer will be redirected directly to your checkout page. This is useful for stores that sell single items.', 'easy-digital-downloads' ),
|
498 |
+
),
|
499 |
'logged_in_only' => array(
|
500 |
'id' => 'logged_in_only',
|
501 |
'name' => __( 'Require Login', 'easy-digital-downloads' ),
|
517 |
'none' => __( 'None', 'easy-digital-downloads' ),
|
518 |
),
|
519 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
520 |
'enable_cart_saving' => array(
|
521 |
'id' => 'enable_cart_saving',
|
522 |
'name' => __( 'Enable Cart Saving', 'easy-digital-downloads' ),
|
570 |
'desc' => '',
|
571 |
'type' => 'hook',
|
572 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
573 |
),
|
574 |
'purchase_receipts' => array(
|
575 |
'purchase_receipt_email_settings' => array(
|
638 |
),
|
639 |
)
|
640 |
),
|
641 |
+
'marketing' => apply_filters(
|
642 |
+
'edd_settings_marketing',
|
643 |
+
array(
|
644 |
+
'main' => array(
|
645 |
+
'recapture' => array(
|
646 |
+
'id' => 'recapture',
|
647 |
+
'name' => __( 'Abandoned Cart Recovery', 'easy-digital-downloads' ),
|
648 |
+
'desc' => '',
|
649 |
+
'type' => 'recapture',
|
650 |
+
),
|
651 |
+
'allow_multiple_discounts' => array(
|
652 |
+
'id' => 'allow_multiple_discounts',
|
653 |
+
'name' => __( 'Multiple Discounts', 'easy-digital-downloads' ),
|
654 |
+
'desc' => __( 'Allow customers to use multiple discounts on the same purchase?', 'easy-digital-downloads' ),
|
655 |
+
'type' => 'checkbox',
|
656 |
+
),
|
657 |
+
),
|
658 |
+
)
|
659 |
+
),
|
660 |
/** Styles Settings */
|
661 |
'styles' => apply_filters('edd_settings_styles',
|
662 |
array(
|
771 |
'misc' => apply_filters('edd_settings_misc',
|
772 |
array(
|
773 |
'main' => array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
774 |
'item_quantities' => array(
|
775 |
'id' => 'item_quantities',
|
776 |
'name' => __('Cart Item Quantities','easy-digital-downloads' ),
|
1351 |
* Retrieve settings tabs
|
1352 |
*
|
1353 |
* @since 1.8
|
1354 |
+
* @since 2.11.4 Any tabs with no registered settings are filtered out in `edd_options_page`.
|
1355 |
* @return array $tabs
|
1356 |
*/
|
1357 |
function edd_get_settings_tabs() {
|
1358 |
|
1359 |
+
return apply_filters( 'edd_settings_tabs', array(
|
1360 |
+
'general' => __( 'General', 'easy-digital-downloads' ),
|
1361 |
+
'gateways' => __( 'Payments', 'easy-digital-downloads' ),
|
1362 |
+
'emails' => __( 'Emails', 'easy-digital-downloads' ),
|
1363 |
+
'marketing' => __( 'Marketing', 'easy-digital-downloads' ),
|
1364 |
+
'styles' => __( 'Styles', 'easy-digital-downloads' ),
|
1365 |
+
'taxes' => __( 'Taxes', 'easy-digital-downloads' ),
|
1366 |
+
'privacy' => __( 'Privacy', 'easy-digital-downloads' ),
|
1367 |
+
'extensions' => __( 'Extensions', 'easy-digital-downloads' ),
|
1368 |
+
'licenses' => __( 'Licenses', 'easy-digital-downloads' ),
|
1369 |
+
'misc' => __( 'Misc', 'easy-digital-downloads' ),
|
1370 |
+
) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1371 |
}
|
1372 |
|
1373 |
/**
|
1421 |
'purchase_receipts' => __( 'Purchase Receipts', 'easy-digital-downloads' ),
|
1422 |
'sale_notifications' => __( 'New Sale Notifications', 'easy-digital-downloads' ),
|
1423 |
) ),
|
1424 |
+
'marketing' => apply_filters( 'edd_settings_sections_marketing', array(
|
1425 |
+
'main' => __( 'General', 'easy-digital-downloads' ),
|
1426 |
+
) ),
|
1427 |
'styles' => apply_filters( 'edd_settings_sections_styles', array(
|
1428 |
'main' => __( 'General', 'easy-digital-downloads' ),
|
1429 |
) ),
|
2147 |
echo apply_filters( 'edd_after_setting_output', $html, $args );
|
2148 |
}
|
2149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2150 |
/**
|
2151 |
* Recapture Callback
|
2152 |
*
|
2470 |
} elseif( $expiration > $now && $expiration - $now < ( DAY_IN_SECONDS * 30 ) ) {
|
2471 |
|
2472 |
$messages[] = sprintf(
|
2473 |
+
__( 'Your license key expires soon! It expires on %s.', 'easy-digital-downloads' ),
|
2474 |
+
date_i18n( get_option( 'date_format' ), strtotime( $license->expires, current_time( 'timestamp' ) ) )
|
|
|
2475 |
);
|
2476 |
|
2477 |
$license_status = 'license-expires-soon-notice';
|
2509 |
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
|
2510 |
$html = '<input type="password" autocomplete="off" class="' . sanitize_html_class( $size ) . '-text" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" name="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
|
2511 |
|
2512 |
+
if ( ( is_object( $license ) && ! empty( $license->license ) && 'valid' == $license->license ) || 'valid' == $license ) {
|
2513 |
$html .= '<input type="submit" class="button-secondary" name="' . $args['id'] . '_deactivate" value="' . __( 'Deactivate License', 'easy-digital-downloads' ) . '"/>';
|
2514 |
}
|
2515 |
|
2565 |
return $html;
|
2566 |
}
|
2567 |
add_filter( 'edd_after_setting_output', 'edd_add_setting_tooltip', 10, 2 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/admin/settings/settings-compatibility.php
ADDED
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Settings Compatibility Functions
|
4 |
+
*
|
5 |
+
* For managing settings compatibility in a reorganized settings structure.
|
6 |
+
*
|
7 |
+
* @package EDD
|
8 |
+
* @subpackage Settings Compatibility
|
9 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
10 |
+
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
11 |
+
* @since 2.11.4
|
12 |
+
*/
|
13 |
+
|
14 |
+
// Exit if accessed directly
|
15 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
16 |
+
exit;
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Gives us an area to ensure known compatibility issues with our settings organization by giving us a hook to manage
|
21 |
+
* and alter hooks and filters that are being run against our primary settings array.
|
22 |
+
*
|
23 |
+
* @since 2.11.3
|
24 |
+
*/
|
25 |
+
add_action(
|
26 |
+
'plugins_loaded',
|
27 |
+
function() {
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Ensures compatibility with EDD 2.11.3 and Recurring payments prior to Recurring being released to move
|
31 |
+
* settings for 'checkout' from 'misc' to 'payments'.
|
32 |
+
*/
|
33 |
+
if ( function_exists( 'edd_recurring_guest_checkout_description' ) && false !== has_filter( 'edd_settings_misc', 'edd_recurring_guest_checkout_description' ) ) {
|
34 |
+
remove_filter( 'edd_settings_misc', 'edd_recurring_guest_checkout_description', 10 );
|
35 |
+
add_filter( 'edd_settings_gateways', 'edd_recurring_guest_checkout_description', 10 );
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Ensures compatibility with EDD 2.11.4 and Recurring payments prior to Recurring being released to move
|
40 |
+
* settings for all extension settings to 'payments'.
|
41 |
+
*/
|
42 |
+
if ( function_exists( 'edd_recurring_settings_section' ) && false !== has_filter( 'edd_settings_sections_extensions', 'edd_recurring_settings_section' ) ) {
|
43 |
+
remove_filter( 'edd_settings_sections_extensions', 'edd_recurring_settings_section' );
|
44 |
+
add_filter( 'edd_settings_sections_gateways', 'edd_recurring_settings_section' );
|
45 |
+
remove_filter( 'edd_settings_extensions', 'edd_recurring_settings' );
|
46 |
+
add_filter( 'edd_settings_gateways', 'edd_recurring_settings' );
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Ensures compatibility with EDD 2.11.4 and Reviews' settings being in the extensions section.
|
51 |
+
*/
|
52 |
+
if ( function_exists( 'edd_reviews' ) ) {
|
53 |
+
$reviews = edd_reviews();
|
54 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', array( $reviews, 'register_reviews_section' ) ) ) {
|
55 |
+
remove_filter( 'edd_settings_sections_extensions', array( $reviews, 'register_reviews_section' ) );
|
56 |
+
add_filter( 'edd_settings_sections_marketing', array( $reviews, 'register_reviews_section' ) );
|
57 |
+
remove_filter( 'edd_settings_extensions', array( $reviews, 'misc_settings' ) );
|
58 |
+
add_filter( 'edd_settings_marketing', array( $reviews, 'misc_settings' ) );
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Move the Free Downloads settings to the Marketing section (EDD 2.11.4).
|
64 |
+
*/
|
65 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', 'edd_free_downloads_add_settings_section' ) ) {
|
66 |
+
remove_filter( 'edd_settings_sections_extensions', 'edd_free_downloads_add_settings_section' );
|
67 |
+
add_filter( 'edd_settings_sections_marketing', 'edd_free_downloads_add_settings_section' );
|
68 |
+
remove_filter( 'edd_settings_extensions', 'edd_free_downloads_add_settings' );
|
69 |
+
add_filter( 'edd_settings_marketing', 'edd_free_downloads_add_settings' );
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Move the ActiveCampaign settings to the Marketing section (EDD 2.11.4).
|
74 |
+
*/
|
75 |
+
if ( function_exists( 'edd_activecampaign' ) ) {
|
76 |
+
$activecampaign = edd_activecampaign();
|
77 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', array( $activecampaign, 'settings_section' ) ) ) {
|
78 |
+
remove_filter( 'edd_settings_sections_extensions', array( $activecampaign, 'settings_section' ) );
|
79 |
+
add_filter( 'edd_settings_sections_marketing', array( $activecampaign, 'settings_section' ) );
|
80 |
+
remove_filter( 'edd_settings_extensions', array( $activecampaign, 'register_settings' ) );
|
81 |
+
add_filter( 'edd_settings_marketing', array( $activecampaign, 'register_settings' ) );
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Move the GetResponse settings to the Marketing section (EDD 2.11.4).
|
87 |
+
*/
|
88 |
+
if ( function_exists( 'edd_getresponse_add_settings_section' ) ) {
|
89 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', 'edd_getresponse_add_settings_section' ) ) {
|
90 |
+
$getresponse = new EDD_GetResponse_Newsletter();
|
91 |
+
remove_filter( 'edd_settings_sections_extensions', 'edd_getresponse_add_settings_section' );
|
92 |
+
add_filter( 'edd_settings_sections_marketing', 'edd_getresponse_add_settings_section' );
|
93 |
+
remove_filter( 'edd_settings_extensions', 'edd_getresponse_add_settings' );
|
94 |
+
add_filter( 'edd_settings_marketing', 'edd_getresponse_add_settings' );
|
95 |
+
remove_filter( 'edd_settings_extensions_sanitize', array( $getresponse, 'save_settings' ) );
|
96 |
+
add_filter( 'edd_settings_marketing_sanitize', array( $getresponse, 'save_settings' ) );
|
97 |
+
remove_filter( 'edd_settings_extensions-getresponse_sanitize', array( $getresponse, 'save_settings' ) );
|
98 |
+
add_filter( 'edd_settings_marketing-getresponse_sanitize', array( $getresponse, 'save_settings' ) );
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Move the Campaign Monitor settings to the Marketing section (EDD 2.11.4).
|
104 |
+
*/
|
105 |
+
if ( function_exists( 'eddcp_settings_section' ) && false !== has_filter( 'edd_settings_sections_extensions', 'eddcp_settings_section' ) ) {
|
106 |
+
remove_filter( 'edd_settings_sections_extensions', 'eddcp_settings_section' );
|
107 |
+
add_filter( 'edd_settings_sections_marketing', 'eddcp_settings_section' );
|
108 |
+
remove_filter( 'edd_settings_extensions', 'eddcp_add_settings' );
|
109 |
+
add_filter( 'edd_settings_marketing', 'eddcp_add_settings' );
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Move the ConvertKit settings to the Marketing section (EDD 2.11.4).
|
114 |
+
*/
|
115 |
+
if ( class_exists( 'EDD_ConvertKit' ) && method_exists( 'EDD_ConvertKit', 'instance' ) ) {
|
116 |
+
$convertkit = EDD_ConvertKit::instance();
|
117 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', array( $convertkit, 'subsection' ) ) ) {
|
118 |
+
remove_filter( 'edd_settings_sections_extensions', array( $convertkit, 'subsection' ) );
|
119 |
+
add_filter( 'edd_settings_sections_marketing', array( $convertkit, 'subsection' ) );
|
120 |
+
remove_filter( 'edd_settings_extensions_sanitize', array( $convertkit, 'save_settings' ) );
|
121 |
+
add_filter( 'edd_settings_marketing_sanitize', array( $convertkit, 'save_settings' ) );
|
122 |
+
remove_filter( 'edd_settings_extensions', array( $convertkit, 'settings' ) );
|
123 |
+
add_filter( 'edd_settings_marketing', array( $convertkit, 'settings' ) );
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Move the AWeber settings to the Marketing section (EDD 2.11.4).
|
129 |
+
*/
|
130 |
+
if ( class_exists( 'EDD_Aweber' ) && method_exists( 'EDD_Aweber', 'instance' ) ) {
|
131 |
+
$aweber = EDD_Aweber::instance();
|
132 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', array( $aweber, 'subsection' ) ) ) {
|
133 |
+
remove_filter( 'edd_settings_sections_extensions', array( $aweber, 'subsection' ) );
|
134 |
+
add_filter( 'edd_settings_sections_marketing', array( $aweber, 'subsection' ) );
|
135 |
+
remove_filter( 'edd_settings_extensions', array( $aweber, 'settings' ) );
|
136 |
+
add_filter( 'edd_settings_marketing', array( $aweber, 'settings' ) );
|
137 |
+
}
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Move the MailPoet settings to the Marketing section (EDD 2.11.4).
|
142 |
+
*/
|
143 |
+
if ( class_exists( 'EDD_MailPoet' ) && method_exists( 'EDD_MailPoet', 'instance' ) ) {
|
144 |
+
$mailpoet = EDD_MailPoet::instance();
|
145 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', array( $mailpoet, 'subsection' ) ) ) {
|
146 |
+
remove_filter( 'edd_settings_sections_extensions', array( $mailpoet, 'subsection' ) );
|
147 |
+
add_filter( 'edd_settings_sections_marketing', array( $mailpoet, 'subsection' ) );
|
148 |
+
remove_filter( 'edd_settings_extensions', array( $mailpoet, 'settings' ) );
|
149 |
+
add_filter( 'edd_settings_marketing', array( $mailpoet, 'settings' ) );
|
150 |
+
}
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Move the Invoices settings to the Payments section (EDD 2.11.4).
|
155 |
+
*/
|
156 |
+
if ( false !== has_filter( 'edd_settings_sections_extensions', 'edd_invoices_register_settings_section' ) ) {
|
157 |
+
remove_filter( 'edd_settings_sections_extensions', 'edd_invoices_register_settings_section' );
|
158 |
+
add_filter( 'edd_settings_sections_gateways', 'edd_invoices_register_settings_section', 10 );
|
159 |
+
remove_filter( 'edd_settings_extensions', 'edd_invoices_register_settings', 1 );
|
160 |
+
add_filter( 'edd_settings_gateways', 'edd_invoices_register_settings', 1 );
|
161 |
+
}
|
162 |
+
},
|
163 |
+
99
|
164 |
+
);
|
includes/admin/upload-functions.php
CHANGED
@@ -150,7 +150,7 @@ function edd_get_htaccess_rules( $method = false ) {
|
|
150 |
case 'direct' :
|
151 |
default :
|
152 |
// Prevent directory browsing and direct access to all files, except images (they must be allowed for featured images / thumbnails)
|
153 |
-
$allowed_filetypes = apply_filters( 'edd_protected_directory_allowed_filetypes', array( 'jpg', 'jpeg', 'png', 'gif', 'mp3', 'ogg' ) );
|
154 |
$rules = "Options -Indexes\n";
|
155 |
$rules .= "deny from all\n";
|
156 |
$rules .= "<FilesMatch '\.(" . implode( '|', $allowed_filetypes ) . ")$'>\n";
|
150 |
case 'direct' :
|
151 |
default :
|
152 |
// Prevent directory browsing and direct access to all files, except images (they must be allowed for featured images / thumbnails)
|
153 |
+
$allowed_filetypes = apply_filters( 'edd_protected_directory_allowed_filetypes', array( 'jpg', 'jpeg', 'png', 'gif', 'mp3', 'ogg', 'webp' ) );
|
154 |
$rules = "Options -Indexes\n";
|
155 |
$rules .= "deny from all\n";
|
156 |
$rules .= "<FilesMatch '\.(" . implode( '|', $allowed_filetypes ) . ")$'>\n";
|
includes/admin/views/notifications.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Displays a list of notifications.
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
?>
|
11 |
+
<div
|
12 |
+
id="edd-notifications"
|
13 |
+
class="edd-hidden"
|
14 |
+
x-data
|
15 |
+
x-init="function() { $el.classList.remove( 'edd-hidden' ) }"
|
16 |
+
>
|
17 |
+
<div
|
18 |
+
class="edd-overlay"
|
19 |
+
x-show="$store.eddNotifications.isPanelOpen"
|
20 |
+
x-on:click="$store.eddNotifications.closePanel()"
|
21 |
+
></div>
|
22 |
+
|
23 |
+
<div
|
24 |
+
id="edd-notifications-panel"
|
25 |
+
x-show="$store.eddNotifications.isPanelOpen"
|
26 |
+
x-transition:enter-start="edd-slide-in"
|
27 |
+
x-transition:leave-end="edd-slide-in"
|
28 |
+
>
|
29 |
+
<div id="edd-notifications-header" tabindex="-1">
|
30 |
+
<h3>
|
31 |
+
<?php
|
32 |
+
echo wp_kses(
|
33 |
+
sprintf(
|
34 |
+
/* Translators: %s - number of notifications */
|
35 |
+
__( '(%s) New Notifications', 'easy-digital-downloads' ),
|
36 |
+
'<span x-text="$store.eddNotifications.numberActiveNotifications"></span>'
|
37 |
+
),
|
38 |
+
array( 'span' => array( 'x-text' => true ) )
|
39 |
+
);
|
40 |
+
?>
|
41 |
+
</h3>
|
42 |
+
|
43 |
+
<button
|
44 |
+
type="button"
|
45 |
+
class="edd-close"
|
46 |
+
x-on:click="$store.eddNotifications.closePanel()"
|
47 |
+
>
|
48 |
+
<span class="dashicons dashicons-no-alt"></span>
|
49 |
+
<span class="screen-reader-text"><?php esc_html_e( 'Close panel', 'easy-digital-downloads' ); ?></span>
|
50 |
+
</button>
|
51 |
+
</div>
|
52 |
+
|
53 |
+
<div id="edd-notifications-body">
|
54 |
+
<template x-if="$store.eddNotifications.notificationsLoaded && $store.eddNotifications.activeNotifications.length">
|
55 |
+
<template x-for="(notification, index) in $store.eddNotifications.activeNotifications" :key="notification.id">
|
56 |
+
<div class="edd-notification">
|
57 |
+
<div class="edd-notification--icon" :class="'edd-notification--icon-' + notification.type">
|
58 |
+
<span class="dashicons" :class="'dashicons-' + notification.icon_name"></span>
|
59 |
+
</div>
|
60 |
+
|
61 |
+
<div class="edd-notification--body">
|
62 |
+
<div class="edd-notification--header">
|
63 |
+
<h4 class="edd-notification--title" x-text="notification.title"></h4>
|
64 |
+
|
65 |
+
<div class="edd-notification--date" x-text="notification.relative_date"></div>
|
66 |
+
</div>
|
67 |
+
|
68 |
+
<div class="edd-notification--content" x-html="notification.content"></div>
|
69 |
+
|
70 |
+
<div class="edd-notification--actions">
|
71 |
+
<template x-for="button in notification.buttons">
|
72 |
+
<a
|
73 |
+
:href="button.url"
|
74 |
+
:class="button.type === 'primary' ? 'button button-primary' : 'button button-secondary'"
|
75 |
+
target="_blank"
|
76 |
+
x-text="button.text"
|
77 |
+
></a>
|
78 |
+
</template>
|
79 |
+
|
80 |
+
<button
|
81 |
+
type="button"
|
82 |
+
class="edd-notification--dismiss"
|
83 |
+
x-on:click="$store.eddNotifications.dismiss( $event, index )"
|
84 |
+
>
|
85 |
+
<?php esc_html_e( 'Dismiss', 'easy-digital-downloads' ); ?>
|
86 |
+
</button>
|
87 |
+
</div>
|
88 |
+
</div>
|
89 |
+
</div>
|
90 |
+
</template>
|
91 |
+
</template>
|
92 |
+
|
93 |
+
<template x-if="$store.eddNotifications.notificationsLoaded && ! $store.eddNotifications.activeNotifications.length">
|
94 |
+
<div id="edd-notifications-none">
|
95 |
+
<?php esc_html_e( 'You have no new notifications.', 'easy-digital-downloads' ); ?>
|
96 |
+
</div>
|
97 |
+
</template>
|
98 |
+
|
99 |
+
<template x-if="! $store.eddNotifications.notificationsLoaded">
|
100 |
+
<div>
|
101 |
+
<?php esc_html_e( 'Loading notifications...', 'easy-digital-downloads' ); ?>
|
102 |
+
</div>
|
103 |
+
</template>
|
104 |
+
</div>
|
105 |
+
</div>
|
106 |
+
</div>
|
includes/ajax-functions.php
CHANGED
@@ -394,6 +394,13 @@ function edd_ajax_remove_discount() {
|
|
394 |
'html' => edd_get_cart_discounts_html()
|
395 |
);
|
396 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
397 |
wp_send_json( $return );
|
398 |
}
|
399 |
edd_die();
|
394 |
'html' => edd_get_cart_discounts_html()
|
395 |
);
|
396 |
|
397 |
+
/**
|
398 |
+
* Allow for custom remove discount code handling.
|
399 |
+
*
|
400 |
+
* @since 2.11.4
|
401 |
+
*/
|
402 |
+
$return = apply_filters( 'edd_ajax_remove_discount_response', $return );
|
403 |
+
|
404 |
wp_send_json( $return );
|
405 |
}
|
406 |
edd_die();
|
includes/api/v3/Endpoint.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Endpoint for API v3
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace EDD\API\v3;
|
12 |
+
|
13 |
+
abstract class Endpoint {
|
14 |
+
|
15 |
+
public static $namespace = 'edd/v3';
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Registers the endpoint(s).
|
19 |
+
*
|
20 |
+
* @since 2.11.4
|
21 |
+
*
|
22 |
+
* @return void
|
23 |
+
*/
|
24 |
+
abstract public function register();
|
25 |
+
|
26 |
+
}
|
includes/api/v3/Notifications.php
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Notifications API Endpoint
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace EDD\API\v3;
|
12 |
+
|
13 |
+
use EDD\Models\Notification;
|
14 |
+
|
15 |
+
class Notifications extends Endpoint {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Registers the endpoints.
|
19 |
+
*
|
20 |
+
* @since 2.11.4
|
21 |
+
*/
|
22 |
+
public function register() {
|
23 |
+
register_rest_route(
|
24 |
+
self::$namespace,
|
25 |
+
'notifications',
|
26 |
+
array(
|
27 |
+
array(
|
28 |
+
'methods' => \WP_REST_Server::READABLE,
|
29 |
+
'callback' => array( $this, 'listNotifications' ),
|
30 |
+
'permission_callback' => array( $this, 'canViewNotification' ),
|
31 |
+
)
|
32 |
+
)
|
33 |
+
);
|
34 |
+
|
35 |
+
register_rest_route(
|
36 |
+
self::$namespace,
|
37 |
+
'notifications/(?P<id>\d+)',
|
38 |
+
array(
|
39 |
+
array(
|
40 |
+
'methods' => \WP_REST_Server::DELETABLE,
|
41 |
+
'callback' => array( $this, 'dismissNotification' ),
|
42 |
+
'permission_callback' => array( $this, 'canViewNotification' ),
|
43 |
+
'args' => array(
|
44 |
+
'id' => array(
|
45 |
+
'description' => __( 'ID of the notification.', 'easy-digital-downloads' ),
|
46 |
+
'type' => 'integer',
|
47 |
+
'required' => true,
|
48 |
+
'validate_callback' => function ( $param, $request, $key ) {
|
49 |
+
$notification = EDD()->notifications->get( intval( $param ) );
|
50 |
+
|
51 |
+
return ! empty( $notification );
|
52 |
+
},
|
53 |
+
'sanitize_callback' => function ( $param, $request, $key ) {
|
54 |
+
return intval( $param );
|
55 |
+
}
|
56 |
+
)
|
57 |
+
),
|
58 |
+
)
|
59 |
+
)
|
60 |
+
);
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Whether the current user can view (and dismiss) notifications.
|
65 |
+
*
|
66 |
+
* @since 2.11.4
|
67 |
+
*
|
68 |
+
* @return bool
|
69 |
+
*/
|
70 |
+
public function canViewNotification() {
|
71 |
+
return current_user_can( 'manage_shop_settings' );
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Returns a list of notifications.
|
76 |
+
*
|
77 |
+
* @since 2.11.4
|
78 |
+
*
|
79 |
+
* @param \WP_REST_Request $request
|
80 |
+
*
|
81 |
+
* @return \WP_REST_Response
|
82 |
+
*/
|
83 |
+
public function listNotifications( \WP_REST_Request $request ) {
|
84 |
+
$active = array_map( function ( Notification $notification ) {
|
85 |
+
return $notification->toArray();
|
86 |
+
}, EDD()->notifications->getActiveNotifications() );
|
87 |
+
|
88 |
+
// @todo At a later date we may want to receive dismissed notifications too.
|
89 |
+
/*$dismissed = array_map( function ( Notification $notification ) {
|
90 |
+
return $notification->toArray();
|
91 |
+
}, EDD()->notifications->getDismissedNotifications() );*/
|
92 |
+
|
93 |
+
return new \WP_REST_Response( array(
|
94 |
+
'active' => $active,
|
95 |
+
//'dismissed' => $dismissed,
|
96 |
+
) );
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Dismisses a single notification.
|
101 |
+
*
|
102 |
+
* @since 2.11.4
|
103 |
+
*
|
104 |
+
* @param \WP_REST_Request $request
|
105 |
+
*
|
106 |
+
* @return \WP_REST_Response
|
107 |
+
*/
|
108 |
+
public function dismissNotification( \WP_REST_Request $request ) {
|
109 |
+
$result = EDD()->notifications->update(
|
110 |
+
$request->get_param( 'id' ),
|
111 |
+
array( 'dismissed' => 1 )
|
112 |
+
);
|
113 |
+
|
114 |
+
if ( ! $result ) {
|
115 |
+
return new \WP_REST_Response( array(
|
116 |
+
'error' => __( 'Failed to dismiss notification.', 'easy-digital-downloads' ),
|
117 |
+
), 500 );
|
118 |
+
}
|
119 |
+
|
120 |
+
wp_cache_delete( 'edd_active_notification_count', 'edd_notifications' );
|
121 |
+
|
122 |
+
return new \WP_REST_Response( null, 204 );
|
123 |
+
}
|
124 |
+
}
|
includes/class-edd-cli.php
CHANGED
@@ -508,8 +508,9 @@ class EDD_CLI extends WP_CLI_Command {
|
|
508 |
$error = __( 'Invalid action specified, did you mean', 'easy-digital-downloads' );
|
509 |
}
|
510 |
|
511 |
-
if( $error ) {
|
512 |
-
|
|
|
513 |
$query .= ' --' . $key . '=' . $value;
|
514 |
}
|
515 |
|
508 |
$error = __( 'Invalid action specified, did you mean', 'easy-digital-downloads' );
|
509 |
}
|
510 |
|
511 |
+
if ( $error ) {
|
512 |
+
$query = '';
|
513 |
+
foreach ( $assoc_args as $key => $value ) {
|
514 |
$query .= ' --' . $key . '=' . $value;
|
515 |
}
|
516 |
|
includes/class-edd-license-handler.php
CHANGED
@@ -18,7 +18,7 @@ if ( ! class_exists( 'EDD_License' ) ) :
|
|
18 |
*/
|
19 |
class EDD_License {
|
20 |
private $file;
|
21 |
-
|
22 |
private $item_name;
|
23 |
private $item_id;
|
24 |
private $item_shortname;
|
@@ -156,11 +156,19 @@ class EDD_License {
|
|
156 |
return;
|
157 |
}
|
158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
$betas = edd_get_option( 'enabled_betas', array() );
|
160 |
|
161 |
$args = array(
|
162 |
'version' => $this->version,
|
163 |
-
'license' => $
|
164 |
'author' => $this->author,
|
165 |
'beta' => function_exists( 'edd_extension_has_beta_support' ) && edd_extension_has_beta_support( $this->item_shortname ),
|
166 |
);
|
@@ -317,7 +325,7 @@ class EDD_License {
|
|
317 |
|
318 |
$details = get_option( $this->item_shortname . '_license_active' );
|
319 |
|
320 |
-
if ( is_object( $details ) && 'valid' === $details->license ) {
|
321 |
return;
|
322 |
}
|
323 |
|
@@ -360,7 +368,12 @@ class EDD_License {
|
|
360 |
// Decode license data
|
361 |
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
|
362 |
|
363 |
-
$this->maybe_set_pass_flag( $
|
|
|
|
|
|
|
|
|
|
|
364 |
|
365 |
update_option( $this->item_shortname . '_license_active', $license_data );
|
366 |
|
@@ -504,7 +517,7 @@ class EDD_License {
|
|
504 |
|
505 |
$license = get_option( $this->item_shortname . '_license_active' );
|
506 |
|
507 |
-
if( is_object( $license ) && 'valid' !== $license->license && empty( $showed_invalid_message ) ) {
|
508 |
|
509 |
if( empty( $_GET['tab'] ) || 'licenses' !== $_GET['tab'] ) {
|
510 |
|
@@ -545,7 +558,7 @@ class EDD_License {
|
|
545 |
|
546 |
$license = get_option( $this->item_shortname . '_license_active' );
|
547 |
|
548 |
-
if( ( ! is_object( $license ) || 'valid' !== $license->license ) && empty( $showed_imissing_key_message[ $this->item_shortname ] ) ) {
|
549 |
|
550 |
echo ' <strong><a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings&tab=licenses' ) ) . '">' . __( 'Enter valid license key for automatic updates.', 'easy-digital-downloads' ) . '</a></strong>';
|
551 |
$showed_imissing_key_message[ $this->item_shortname ] = true;
|
18 |
*/
|
19 |
class EDD_License {
|
20 |
private $file;
|
21 |
+
public $license;
|
22 |
private $item_name;
|
23 |
private $item_id;
|
24 |
private $item_shortname;
|
156 |
return;
|
157 |
}
|
158 |
|
159 |
+
$license = $this->license;
|
160 |
+
// Fall back to the highest license key if one is not saved for this extension.
|
161 |
+
if ( empty( $license ) ) {
|
162 |
+
$pass_manager = new \EDD\Admin\Pass_Manager();
|
163 |
+
if ( $pass_manager->highest_license_key ) {
|
164 |
+
$license = $pass_manager->highest_license_key;
|
165 |
+
}
|
166 |
+
}
|
167 |
$betas = edd_get_option( 'enabled_betas', array() );
|
168 |
|
169 |
$args = array(
|
170 |
'version' => $this->version,
|
171 |
+
'license' => $license,
|
172 |
'author' => $this->author,
|
173 |
'beta' => function_exists( 'edd_extension_has_beta_support' ) && edd_extension_has_beta_support( $this->item_shortname ),
|
174 |
);
|
325 |
|
326 |
$details = get_option( $this->item_shortname . '_license_active' );
|
327 |
|
328 |
+
if ( is_object( $details ) && ! empty( $details->license ) && 'valid' === $details->license ) {
|
329 |
return;
|
330 |
}
|
331 |
|
368 |
// Decode license data
|
369 |
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
|
370 |
|
371 |
+
$this->maybe_set_pass_flag( $license, $license_data );
|
372 |
+
|
373 |
+
// Clear the option for licensed extensions to force regeneration.
|
374 |
+
if ( ! empty( $api_data->license ) && 'valid' === $api_data->license ) {
|
375 |
+
delete_option( 'edd_licensed_extensions' );
|
376 |
+
}
|
377 |
|
378 |
update_option( $this->item_shortname . '_license_active', $license_data );
|
379 |
|
517 |
|
518 |
$license = get_option( $this->item_shortname . '_license_active' );
|
519 |
|
520 |
+
if( is_object( $license ) && ( empty( $license->license ) || 'valid' !== $license->license ) && empty( $showed_invalid_message ) ) {
|
521 |
|
522 |
if( empty( $_GET['tab'] ) || 'licenses' !== $_GET['tab'] ) {
|
523 |
|
558 |
|
559 |
$license = get_option( $this->item_shortname . '_license_active' );
|
560 |
|
561 |
+
if ( ( ! is_object( $license ) || empty( $license->license ) || 'valid' !== $license->license ) && empty( $showed_imissing_key_message[ $this->item_shortname ] ) ) {
|
562 |
|
563 |
echo ' <strong><a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings&tab=licenses' ) ) . '">' . __( 'Enter valid license key for automatic updates.', 'easy-digital-downloads' ) . '</a></strong>';
|
564 |
$showed_imissing_key_message[ $this->item_shortname ] = true;
|
includes/database/NotificationsDB.php
ADDED
@@ -0,0 +1,258 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Notifications Database
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace EDD\Database;
|
12 |
+
|
13 |
+
use EDD\Models\Notification;
|
14 |
+
use EDD\Utils\EnvironmentChecker;
|
15 |
+
use EDD\Utils\NotificationImporter;
|
16 |
+
|
17 |
+
class NotificationsDB extends \EDD_DB {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Constructor
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
global $wpdb;
|
24 |
+
|
25 |
+
$this->table_name = $wpdb->prefix . 'edd_notifications';
|
26 |
+
$this->primary_key = 'id';
|
27 |
+
$this->version = '1.0';
|
28 |
+
|
29 |
+
add_action( 'edd_daily_scheduled_events', array( $this, 'schedule_daily_notification_checks' ) );
|
30 |
+
|
31 |
+
$db_version = get_option( "{$this->table_name}_db_version" );
|
32 |
+
if ( version_compare( $db_version, $this->version, '>=' ) ) {
|
33 |
+
return;
|
34 |
+
}
|
35 |
+
$this->create_table();
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Add a cron event to check for new notifications.
|
40 |
+
*
|
41 |
+
* @since 2.11.4
|
42 |
+
*/
|
43 |
+
public static function schedule_daily_notification_checks() {
|
44 |
+
$importer = new NotificationImporter();
|
45 |
+
$importer->run();
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Columns and their formats.
|
50 |
+
*
|
51 |
+
* @since 2.11.4
|
52 |
+
*
|
53 |
+
* @return string[]
|
54 |
+
*/
|
55 |
+
public function get_columns() {
|
56 |
+
return array(
|
57 |
+
'id' => '%d',
|
58 |
+
'remote_id' => '%d',
|
59 |
+
'title' => '%s',
|
60 |
+
'content' => '%s',
|
61 |
+
'buttons' => '%s',
|
62 |
+
'type' => '%s',
|
63 |
+
'conditions' => '%s',
|
64 |
+
'start' => '%s',
|
65 |
+
'end' => '%s',
|
66 |
+
'dismissed' => '%d',
|
67 |
+
'date_created' => '%s',
|
68 |
+
'date_updated' => '%s',
|
69 |
+
);
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Let MySQL handle most of the defaults.
|
74 |
+
* We just set the dates here to ensure they get saved in UTC.
|
75 |
+
*
|
76 |
+
* @since 2.11.4
|
77 |
+
*
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
public function get_column_defaults() {
|
81 |
+
return array(
|
82 |
+
'date_created' => gmdate( 'Y-m-d H:i:s' ),
|
83 |
+
'date_updated' => gmdate( 'Y-m-d H:i:s' ),
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* JSON-encodes any relevant columns.
|
89 |
+
*
|
90 |
+
* @since 2.11.4
|
91 |
+
*
|
92 |
+
* @param array $data
|
93 |
+
*
|
94 |
+
* @return array
|
95 |
+
*/
|
96 |
+
protected function maybeJsonEncode( $data ) {
|
97 |
+
$jsonColumns = array( 'buttons', 'conditions' );
|
98 |
+
|
99 |
+
foreach ( $jsonColumns as $column ) {
|
100 |
+
if ( ! empty( $data[ $column ] ) && is_array( $data[ $column ] ) ) {
|
101 |
+
$data[ $column ] = json_encode( $data[ $column ] );
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
return $data;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Inserts a new notification.
|
110 |
+
*
|
111 |
+
* @since 2.11.4
|
112 |
+
*
|
113 |
+
* @param array $data
|
114 |
+
* @param string $type
|
115 |
+
*
|
116 |
+
* @return int
|
117 |
+
*/
|
118 |
+
public function insert( $data, $type = 'notification' ) {
|
119 |
+
$result = parent::insert( $this->maybeJsonEncode( $data ), $type );
|
120 |
+
|
121 |
+
wp_cache_delete( 'edd_active_notification_count', 'edd_notifications' );
|
122 |
+
|
123 |
+
return $result;
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Updates an existing notification.
|
128 |
+
*
|
129 |
+
* @since 2.11.4
|
130 |
+
*
|
131 |
+
* @param int $row_id
|
132 |
+
* @param array $data
|
133 |
+
* @param string $where
|
134 |
+
*
|
135 |
+
* @return bool
|
136 |
+
*/
|
137 |
+
public function update( $row_id, $data = array(), $where = '' ) {
|
138 |
+
return parent::update( $row_id, $this->maybeJsonEncode( $data ), $where );
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Returns all notifications that have not been dismissed and should be
|
143 |
+
* displayed on this site.
|
144 |
+
*
|
145 |
+
* @since 2.11.4
|
146 |
+
*
|
147 |
+
* @param bool $conditionsOnly If set to true, then only the `conditions` column is retrieved
|
148 |
+
* for each notification.
|
149 |
+
*
|
150 |
+
* @return Notification[]
|
151 |
+
*/
|
152 |
+
public function getActiveNotifications( $conditionsOnly = false ) {
|
153 |
+
global $wpdb;
|
154 |
+
|
155 |
+
$environmentChecker = new EnvironmentChecker();
|
156 |
+
$notifications = $wpdb->get_results( $this->getActiveQuery( $conditionsOnly ) );
|
157 |
+
|
158 |
+
$models = array();
|
159 |
+
if ( is_array( $notifications ) ) {
|
160 |
+
foreach ( $notifications as $notification ) {
|
161 |
+
$model = new Notification( (array) $notification );
|
162 |
+
|
163 |
+
try {
|
164 |
+
// Only add to the array if all conditions are met or if the notification has no conditions.
|
165 |
+
if (
|
166 |
+
! $model->conditions ||
|
167 |
+
( is_array( $model->conditions ) && $environmentChecker->meetsConditions( $model->conditions ) )
|
168 |
+
) {
|
169 |
+
$models[] = $model;
|
170 |
+
}
|
171 |
+
} catch ( \Exception $e ) {
|
172 |
+
|
173 |
+
}
|
174 |
+
}
|
175 |
+
}
|
176 |
+
|
177 |
+
unset( $notifications );
|
178 |
+
|
179 |
+
return $models;
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Builds the query for selecting or counting active notifications.
|
184 |
+
*
|
185 |
+
* @since 2.11.4
|
186 |
+
*
|
187 |
+
* @param bool $conditionsOnly
|
188 |
+
*
|
189 |
+
* @return string
|
190 |
+
*/
|
191 |
+
private function getActiveQuery( $conditionsOnly = false ) {
|
192 |
+
global $wpdb;
|
193 |
+
|
194 |
+
$select = $conditionsOnly ? 'conditions' : '*';
|
195 |
+
|
196 |
+
return $wpdb->prepare(
|
197 |
+
"SELECT {$select} FROM {$this->table_name}
|
198 |
+
WHERE dismissed = 0
|
199 |
+
AND (start <= %s OR start IS NULL)
|
200 |
+
AND (end >= %s OR end IS NULL)
|
201 |
+
ORDER BY start DESC, id DESC",
|
202 |
+
gmdate( 'Y-m-d H:i:s' ),
|
203 |
+
gmdate( 'Y-m-d H:i:s' )
|
204 |
+
);
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Counts the number of active notifications.
|
209 |
+
* Note: We can't actually do a real `COUNT(*)` on the database, because we want
|
210 |
+
* to double-check the conditions are met before displaying. That's why we use
|
211 |
+
* `getActiveNotifications()` which runs the conditions through the EnvironmentChecker.
|
212 |
+
*
|
213 |
+
* @since 2.11.4
|
214 |
+
*
|
215 |
+
* @return int
|
216 |
+
*/
|
217 |
+
public function countActiveNotifications() {
|
218 |
+
$numberActive = wp_cache_get( 'edd_active_notification_count', 'edd_notifications' );
|
219 |
+
if ( false === $numberActive ) {
|
220 |
+
$numberActive = count( $this->getActiveNotifications( true ) );
|
221 |
+
|
222 |
+
wp_cache_set( 'edd_active_notification_count', $numberActive, 'edd_notifications' );
|
223 |
+
}
|
224 |
+
|
225 |
+
return $numberActive;
|
226 |
+
}
|
227 |
+
|
228 |
+
/**
|
229 |
+
* Creates the table.
|
230 |
+
*
|
231 |
+
* @since 2.11.4
|
232 |
+
*/
|
233 |
+
public function create_table() {
|
234 |
+
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
235 |
+
|
236 |
+
global $wpdb;
|
237 |
+
|
238 |
+
dbDelta( "CREATE TABLE {$this->table_name} (
|
239 |
+
id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
|
240 |
+
remote_id bigint(20) UNSIGNED DEFAULT NULL,
|
241 |
+
title text NOT NULL,
|
242 |
+
content longtext NOT NULL,
|
243 |
+
buttons longtext DEFAULT NULL,
|
244 |
+
type varchar(64) NOT NULL,
|
245 |
+
conditions longtext DEFAULT NULL,
|
246 |
+
start datetime DEFAULT NULL,
|
247 |
+
end datetime DEFAULT NULL,
|
248 |
+
dismissed tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
|
249 |
+
date_created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(),
|
250 |
+
date_updated datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(),
|
251 |
+
PRIMARY KEY (id),
|
252 |
+
KEY dismissed_start_end (dismissed, start, end)
|
253 |
+
) DEFAULT CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate};" );
|
254 |
+
|
255 |
+
update_option( $this->table_name . '_db_version', $this->version );
|
256 |
+
}
|
257 |
+
|
258 |
+
}
|
includes/deprecated-functions.php
CHANGED
@@ -993,3 +993,287 @@ function maybe_add_jilt_notice_to_abandoned_payment( $payment_id ) {
|
|
993 |
<?php
|
994 |
}
|
995 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
993 |
<?php
|
994 |
}
|
995 |
}
|
996 |
+
|
997 |
+
/**
|
998 |
+
* SendWP Callback
|
999 |
+
*
|
1000 |
+
* Renders SendWP Settings
|
1001 |
+
*
|
1002 |
+
* @since 2.9.15
|
1003 |
+
* @param array $args Arguments passed by the setting
|
1004 |
+
* @return void
|
1005 |
+
*/
|
1006 |
+
function edd_sendwp_callback( $args ) {
|
1007 |
+
|
1008 |
+
_edd_deprecated_function( __FUNCTION__, '2.11.4' );
|
1009 |
+
|
1010 |
+
// Connection status partial label based on the state of the SendWP email sending setting (Tools -> SendWP)
|
1011 |
+
$connected = '<a href="https://app.sendwp.com/dashboard" target="_blank" rel="noopener noreferrer">';
|
1012 |
+
$connected .= __( 'Access your SendWP account', 'easy-digital-downloads' );
|
1013 |
+
$connected .= '</a>.';
|
1014 |
+
|
1015 |
+
$disconnected = sprintf(
|
1016 |
+
__( '<em><strong>Note:</strong> Email sending is currently disabled. <a href="' . admin_url( '/tools.php?page=sendwp' ) . '">Click here</a> to enable it.</em>', 'easy-digital-downloads' )
|
1017 |
+
);
|
1018 |
+
|
1019 |
+
// Checks if SendWP is connected
|
1020 |
+
$client_connected = function_exists( 'sendwp_client_connected' ) && sendwp_client_connected() ? true : false;
|
1021 |
+
|
1022 |
+
// Checks if email sending is enabled in SendWP
|
1023 |
+
$forwarding_enabled = function_exists( 'sendwp_forwarding_enabled' ) && sendwp_forwarding_enabled() ? true : false;
|
1024 |
+
|
1025 |
+
ob_start();
|
1026 |
+
|
1027 |
+
echo $args['desc'];
|
1028 |
+
|
1029 |
+
// Output the appropriate button and label based on connection status
|
1030 |
+
if( $client_connected ) :
|
1031 |
+
?>
|
1032 |
+
<div class="inline notice notice-success">
|
1033 |
+
<p><?php _e( 'SendWP plugin activated.', 'easy-digital-downloads' ); ?> <?php echo $forwarding_enabled ? $connected : $disconnected ; ?></p>
|
1034 |
+
|
1035 |
+
<p>
|
1036 |
+
<button id="edd-sendwp-disconnect" class="button"><?php _e( 'Disconnect SendWP', 'easy-digital-downloads' ); ?></button>
|
1037 |
+
</p>
|
1038 |
+
</div>
|
1039 |
+
<?php
|
1040 |
+
else :
|
1041 |
+
?>
|
1042 |
+
<p>
|
1043 |
+
<?php _e( 'We recommend SendWP to ensure quick and reliable delivery of all emails sent from your store, such as purchase receipts, subscription renewal reminders, password resets, and more.', 'easy-digital-downloads' ); ?> <?php printf( __( '%sLearn more%s', 'easy-digital-downloads' ), '<a href="https://sendwp.com/" target="_blank" rel="noopener noreferrer">', '</a>' ); ?>
|
1044 |
+
</p>
|
1045 |
+
<p>
|
1046 |
+
<button type="button" id="edd-sendwp-connect" class="button button-primary"><?php esc_html_e( 'Connect with SendWP', 'easy-digital-downloads' ); ?>
|
1047 |
+
</button>
|
1048 |
+
</p>
|
1049 |
+
|
1050 |
+
<?php
|
1051 |
+
endif;
|
1052 |
+
|
1053 |
+
echo ob_get_clean();
|
1054 |
+
}
|
1055 |
+
|
1056 |
+
/**
|
1057 |
+
* Handle installation and connection for SendWP via ajax
|
1058 |
+
*
|
1059 |
+
* @since 2.9.15
|
1060 |
+
*/
|
1061 |
+
function edd_sendwp_remote_install_handler () {
|
1062 |
+
|
1063 |
+
_edd_deprecated_function( __FUNCTION__, '2.11.4' );
|
1064 |
+
|
1065 |
+
if ( ! current_user_can( 'manage_shop_settings' ) ) {
|
1066 |
+
wp_send_json_error( array(
|
1067 |
+
'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' )
|
1068 |
+
) );
|
1069 |
+
}
|
1070 |
+
|
1071 |
+
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
1072 |
+
include_once ABSPATH . 'wp-admin/includes/file.php';
|
1073 |
+
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
1074 |
+
|
1075 |
+
$plugins = get_plugins();
|
1076 |
+
|
1077 |
+
if( ! array_key_exists( 'sendwp/sendwp.php', $plugins ) ) {
|
1078 |
+
|
1079 |
+
/*
|
1080 |
+
* Use the WordPress Plugins API to get the plugin download link.
|
1081 |
+
*/
|
1082 |
+
$api = plugins_api( 'plugin_information', array(
|
1083 |
+
'slug' => 'sendwp',
|
1084 |
+
) );
|
1085 |
+
|
1086 |
+
if ( is_wp_error( $api ) ) {
|
1087 |
+
wp_send_json_error( array(
|
1088 |
+
'error' => $api->get_error_message(),
|
1089 |
+
'debug' => $api
|
1090 |
+
) );
|
1091 |
+
}
|
1092 |
+
|
1093 |
+
/*
|
1094 |
+
* Use the AJAX Upgrader skin to quietly install the plugin.
|
1095 |
+
*/
|
1096 |
+
$upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
|
1097 |
+
$install = $upgrader->install( $api->download_link );
|
1098 |
+
if ( is_wp_error( $install ) ) {
|
1099 |
+
wp_send_json_error( array(
|
1100 |
+
'error' => $install->get_error_message(),
|
1101 |
+
'debug' => $api
|
1102 |
+
) );
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
$activated = activate_plugin( $upgrader->plugin_info() );
|
1106 |
+
|
1107 |
+
} else {
|
1108 |
+
|
1109 |
+
$activated = activate_plugin( 'sendwp/sendwp.php' );
|
1110 |
+
|
1111 |
+
}
|
1112 |
+
|
1113 |
+
/*
|
1114 |
+
* Final check to see if SendWP is available.
|
1115 |
+
*/
|
1116 |
+
if( ! function_exists('sendwp_get_server_url') ) {
|
1117 |
+
wp_send_json_error( array(
|
1118 |
+
'error' => __( 'Something went wrong. SendWP was not installed correctly.', 'easy-digital-downloads' )
|
1119 |
+
) );
|
1120 |
+
}
|
1121 |
+
|
1122 |
+
wp_send_json_success( array(
|
1123 |
+
'partner_id' => 81,
|
1124 |
+
'register_url' => sendwp_get_server_url() . '_/signup',
|
1125 |
+
'client_name' => sendwp_get_client_name(),
|
1126 |
+
'client_secret' => sendwp_get_client_secret(),
|
1127 |
+
'client_redirect' => admin_url( '/edit.php?post_type=download&page=edd-settings&tab=emails&edd-message=sendwp-connected' ),
|
1128 |
+
) );
|
1129 |
+
}
|
1130 |
+
add_action( 'wp_ajax_edd_sendwp_remote_install', 'edd_sendwp_remote_install_handler' );
|
1131 |
+
|
1132 |
+
/**
|
1133 |
+
* Handle deactivation of SendWP via ajax
|
1134 |
+
*
|
1135 |
+
* @since 2.9.15
|
1136 |
+
*/
|
1137 |
+
function edd_sendwp_disconnect () {
|
1138 |
+
|
1139 |
+
_edd_deprecated_function( __FUNCTION__, '2.11.4' );
|
1140 |
+
|
1141 |
+
if ( ! current_user_can( 'manage_shop_settings' ) ) {
|
1142 |
+
wp_send_json_error( array(
|
1143 |
+
'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' )
|
1144 |
+
) );
|
1145 |
+
}
|
1146 |
+
|
1147 |
+
sendwp_disconnect_client();
|
1148 |
+
|
1149 |
+
deactivate_plugins( 'sendwp/sendwp.php' );
|
1150 |
+
|
1151 |
+
wp_send_json_success();
|
1152 |
+
}
|
1153 |
+
add_action( 'wp_ajax_edd_sendwp_disconnect', 'edd_sendwp_disconnect' );
|
1154 |
+
|
1155 |
+
/**
|
1156 |
+
* Reverts to the original download URL validation.
|
1157 |
+
*
|
1158 |
+
* @since 2.11.4
|
1159 |
+
* @todo Remove this function in 3.0.
|
1160 |
+
*
|
1161 |
+
* @param bool $ret
|
1162 |
+
* @param string $url
|
1163 |
+
* @param array $query_args
|
1164 |
+
* @param string $original_url
|
1165 |
+
*/
|
1166 |
+
add_filter( 'edd_validate_url_token', function( $ret, $url, $query_args, $original_url ) {
|
1167 |
+
// If the URL is already validated, we don't need to validate it again.
|
1168 |
+
if ( $ret ) {
|
1169 |
+
return $ret;
|
1170 |
+
}
|
1171 |
+
$allowed = edd_get_url_token_parameters();
|
1172 |
+
$remove = array();
|
1173 |
+
foreach ( $query_args as $key => $value ) {
|
1174 |
+
if ( ! in_array( $key, $allowed, true ) ) {
|
1175 |
+
$remove[] = $key;
|
1176 |
+
}
|
1177 |
+
}
|
1178 |
+
|
1179 |
+
if ( ! empty( $remove ) ) {
|
1180 |
+
$original_url = remove_query_arg( $remove, $original_url );
|
1181 |
+
}
|
1182 |
+
|
1183 |
+
return isset( $query_args['token'] ) && hash_equals( $query_args['token'], edd_get_download_token( $original_url ) );
|
1184 |
+
}, 10, 4 );
|
1185 |
+
|
1186 |
+
/**
|
1187 |
+
* Get the path of the Product Reviews plugin
|
1188 |
+
*
|
1189 |
+
* @since 2.9.20
|
1190 |
+
*
|
1191 |
+
* @return mixed|string
|
1192 |
+
*/
|
1193 |
+
function edd_reviews_location() {
|
1194 |
+
|
1195 |
+
_edd_deprecated_function( __FUNCTION__, '2.11.4' );
|
1196 |
+
|
1197 |
+
$possible_locations = array( 'edd-reviews/edd-reviews.php', 'EDD-Reviews/edd-reviews.php' );
|
1198 |
+
$reviews_location = '';
|
1199 |
+
|
1200 |
+
foreach ( $possible_locations as $location ) {
|
1201 |
+
|
1202 |
+
if ( 0 !== validate_plugin( $location ) ) {
|
1203 |
+
continue;
|
1204 |
+
}
|
1205 |
+
$reviews_location = $location;
|
1206 |
+
}
|
1207 |
+
|
1208 |
+
return $reviews_location;
|
1209 |
+
}
|
1210 |
+
|
1211 |
+
/**
|
1212 |
+
* Outputs a metabox for the Product Reviews extension to show or activate it.
|
1213 |
+
*
|
1214 |
+
* @since 2.8
|
1215 |
+
* @return void
|
1216 |
+
*/
|
1217 |
+
function edd_render_review_status_metabox() {
|
1218 |
+
|
1219 |
+
_edd_deprecated_function( __FUNCTION__, '2.11.4' );
|
1220 |
+
|
1221 |
+
$reviews_location = edd_reviews_location();
|
1222 |
+
$is_promo_active = edd_is_promo_active();
|
1223 |
+
|
1224 |
+
ob_start();
|
1225 |
+
|
1226 |
+
if ( ! empty( $reviews_location ) ) {
|
1227 |
+
$review_path = '';
|
1228 |
+
$base_url = wp_nonce_url( admin_url( 'plugins.php' ), 'activate-plugin_' . $reviews_location );
|
1229 |
+
$args = array(
|
1230 |
+
'action' => 'activate',
|
1231 |
+
'plugin' => sanitize_text_field( $reviews_location ),
|
1232 |
+
'plugin_status' => 'all',
|
1233 |
+
);
|
1234 |
+
$activate_url = add_query_arg( $args, $base_url );
|
1235 |
+
?><p style="text-align: center;"><a href="<?php echo esc_url( $activate_url ); ?>" class="button-secondary"><?php _e( 'Activate Reviews', 'easy-digital-downloads' ); ?></a></p><?php
|
1236 |
+
|
1237 |
+
} else {
|
1238 |
+
|
1239 |
+
// Adjust UTM params based on state of promotion.
|
1240 |
+
if ( true === $is_promo_active ) {
|
1241 |
+
$args = array(
|
1242 |
+
'utm_source' => 'download-metabox',
|
1243 |
+
'utm_medium' => 'wp-admin',
|
1244 |
+
'utm_campaign' => 'bfcm2019',
|
1245 |
+
'utm_content' => 'product-reviews-metabox-bfcm',
|
1246 |
+
);
|
1247 |
+
} else {
|
1248 |
+
$args = array(
|
1249 |
+
'utm_source' => 'edit-download',
|
1250 |
+
'utm_medium' => 'enable-reviews',
|
1251 |
+
'utm_campaign' => 'admin',
|
1252 |
+
);
|
1253 |
+
}
|
1254 |
+
|
1255 |
+
$base_url = 'https://easydigitaldownloads.com/downloads/product-reviews';
|
1256 |
+
$url = add_query_arg( $args, $base_url );
|
1257 |
+
?>
|
1258 |
+
<p>
|
1259 |
+
<?php
|
1260 |
+
// Translators: The %s represents the link to the Product Reviews extension.
|
1261 |
+
echo wp_kses_post( sprintf( __( 'Would you like to enable reviews for this product? Check out our <a target="_blank" href="%s">Product Reviews</a> extension.', 'easy-digital-downloads' ), esc_url( $url ) ) );
|
1262 |
+
?>
|
1263 |
+
</p>
|
1264 |
+
<?php
|
1265 |
+
// Add an additional note if a promotion is active.
|
1266 |
+
if ( true === $is_promo_active ) {
|
1267 |
+
?>
|
1268 |
+
<p>
|
1269 |
+
<?php echo wp_kses_post( __( 'Act now and <strong>SAVE 25%</strong> on your purchase. Sale ends <em>23:59 PM December 6th CST</em>. Use code <code>BFCM2019</code> at checkout.', 'easy-digital-downloads' ) ); ?>
|
1270 |
+
</p>
|
1271 |
+
<?php
|
1272 |
+
}
|
1273 |
+
}
|
1274 |
+
|
1275 |
+
$rendered = ob_get_contents();
|
1276 |
+
ob_end_clean();
|
1277 |
+
|
1278 |
+
echo wp_kses_post( $rendered );
|
1279 |
+
}
|
includes/download-functions.php
CHANGED
@@ -1033,10 +1033,11 @@ function edd_get_download_file_url( $key, $email, $filekey, $download_id = 0, $p
|
|
1033 |
|
1034 |
if ( ! empty( $payment->ID ) ) {
|
1035 |
|
|
|
|
|
|
|
1036 |
// Simply the URL by concatenating required data using a colon as a delimiter.
|
1037 |
-
$args =
|
1038 |
-
'eddfile' => rawurlencode( sprintf( '%d:%d:%d:%d', $payment->ID, $params['download_id'], $params['file'], $price_id ) )
|
1039 |
-
);
|
1040 |
|
1041 |
if ( isset( $params['expire'] ) ) {
|
1042 |
$args['ttl'] = $params['expire'];
|
@@ -1048,12 +1049,29 @@ function edd_get_download_file_url( $key, $email, $filekey, $download_id = 0, $p
|
|
1048 |
$args = apply_filters( 'edd_get_download_file_url_args', $args, $payment->ID, $params );
|
1049 |
|
1050 |
$args['file'] = $params['file'];
|
1051 |
-
$args['token'] = edd_get_download_token( add_query_arg( $args, untrailingslashit( site_url() ) ) );
|
1052 |
}
|
1053 |
|
1054 |
-
|
|
|
1055 |
|
1056 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1057 |
}
|
1058 |
|
1059 |
/**
|
@@ -1242,8 +1260,10 @@ function edd_get_download_token( $url = '' ) {
|
|
1242 |
*/
|
1243 |
function edd_validate_url_token( $url = '' ) {
|
1244 |
|
1245 |
-
$ret
|
1246 |
-
$parts
|
|
|
|
|
1247 |
|
1248 |
if ( isset( $parts['query'] ) ) {
|
1249 |
|
@@ -1257,37 +1277,34 @@ function edd_validate_url_token( $url = '' ) {
|
|
1257 |
}
|
1258 |
|
1259 |
// These are the only URL parameters that are allowed to affect the token validation.
|
1260 |
-
$
|
1261 |
-
'edd_url_token_allowed_params',
|
1262 |
-
array(
|
1263 |
-
'eddfile',
|
1264 |
-
'ttl',
|
1265 |
-
'file',
|
1266 |
-
'token',
|
1267 |
-
)
|
1268 |
-
);
|
1269 |
|
1270 |
// Collect the allowed tags in proper order, remove all tags, and re-add only the allowed ones.
|
1271 |
-
$
|
1272 |
|
1273 |
-
foreach ( $
|
1274 |
if ( true === array_key_exists( $key, $query_args ) ) {
|
1275 |
-
$
|
1276 |
}
|
1277 |
}
|
1278 |
|
1279 |
// strtok allows a quick clearing of existing query string parameters, so we can re-add the allowed ones.
|
1280 |
-
$url = add_query_arg( $
|
1281 |
|
1282 |
if ( isset( $query_args['token'] ) && hash_equals( $query_args['token'], edd_get_download_token( $url ) ) ) {
|
1283 |
-
|
1284 |
$ret = true;
|
1285 |
-
|
1286 |
}
|
1287 |
-
|
1288 |
}
|
1289 |
|
1290 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1291 |
}
|
1292 |
|
1293 |
/**
|
1033 |
|
1034 |
if ( ! empty( $payment->ID ) ) {
|
1035 |
|
1036 |
+
// Get the array of parameters in the same order in which they will be validated.
|
1037 |
+
$args = array_fill_keys( edd_get_url_token_parameters(), '' );
|
1038 |
+
|
1039 |
// Simply the URL by concatenating required data using a colon as a delimiter.
|
1040 |
+
$args['eddfile'] = rawurlencode( sprintf( '%d:%d:%d:%d', $payment->ID, $params['download_id'], $params['file'], $price_id ) );
|
|
|
|
|
1041 |
|
1042 |
if ( isset( $params['expire'] ) ) {
|
1043 |
$args['ttl'] = $params['expire'];
|
1049 |
$args = apply_filters( 'edd_get_download_file_url_args', $args, $payment->ID, $params );
|
1050 |
|
1051 |
$args['file'] = $params['file'];
|
1052 |
+
$args['token'] = edd_get_download_token( add_query_arg( array_filter( $args ), untrailingslashit( site_url() ) ) );
|
1053 |
}
|
1054 |
|
1055 |
+
return add_query_arg( array_filter( $args ), site_url( 'index.php' ) );
|
1056 |
+
}
|
1057 |
|
1058 |
+
/**
|
1059 |
+
* Gets the array of parameters to be used for the URL token generation and validation.
|
1060 |
+
* Used by `edd_get_download_file_url` and `edd_validate_url_token` so that their parameters are ordered the same.
|
1061 |
+
*
|
1062 |
+
* @since 2.11.4
|
1063 |
+
* @return array
|
1064 |
+
*/
|
1065 |
+
function edd_get_url_token_parameters() {
|
1066 |
+
return apply_filters(
|
1067 |
+
'edd_url_token_allowed_params',
|
1068 |
+
array(
|
1069 |
+
'eddfile',
|
1070 |
+
'ttl',
|
1071 |
+
'file',
|
1072 |
+
'token',
|
1073 |
+
)
|
1074 |
+
);
|
1075 |
}
|
1076 |
|
1077 |
/**
|
1260 |
*/
|
1261 |
function edd_validate_url_token( $url = '' ) {
|
1262 |
|
1263 |
+
$ret = false;
|
1264 |
+
$parts = parse_url( $url );
|
1265 |
+
$query_args = array();
|
1266 |
+
$original_url = $url;
|
1267 |
|
1268 |
if ( isset( $parts['query'] ) ) {
|
1269 |
|
1277 |
}
|
1278 |
|
1279 |
// These are the only URL parameters that are allowed to affect the token validation.
|
1280 |
+
$allowed_args = edd_get_url_token_parameters();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1281 |
|
1282 |
// Collect the allowed tags in proper order, remove all tags, and re-add only the allowed ones.
|
1283 |
+
$validated_query_args = array();
|
1284 |
|
1285 |
+
foreach ( $allowed_args as $key ) {
|
1286 |
if ( true === array_key_exists( $key, $query_args ) ) {
|
1287 |
+
$validated_query_args[ $key ] = $query_args[ $key ];
|
1288 |
}
|
1289 |
}
|
1290 |
|
1291 |
// strtok allows a quick clearing of existing query string parameters, so we can re-add the allowed ones.
|
1292 |
+
$url = add_query_arg( $validated_query_args, strtok( $url, '?' ) );
|
1293 |
|
1294 |
if ( isset( $query_args['token'] ) && hash_equals( $query_args['token'], edd_get_download_token( $url ) ) ) {
|
|
|
1295 |
$ret = true;
|
|
|
1296 |
}
|
|
|
1297 |
}
|
1298 |
|
1299 |
+
/**
|
1300 |
+
* Filters the URL token validation.
|
1301 |
+
*
|
1302 |
+
* @param bool $ret Whether the URL has validated or not.
|
1303 |
+
* @param string $url The URL used for validation.
|
1304 |
+
* @param array $query_args The array of query parameters.
|
1305 |
+
* @param string $original_url The original URL (added 2.11.3).
|
1306 |
+
*/
|
1307 |
+
return apply_filters( 'edd_validate_url_token', $ret, $url, $query_args, $original_url );
|
1308 |
}
|
1309 |
|
1310 |
/**
|
includes/emails/actions.php
CHANGED
@@ -60,7 +60,7 @@ function edd_resend_purchase_receipt( $data ) {
|
|
60 |
$email = $customer->email;
|
61 |
}
|
62 |
|
63 |
-
edd_email_purchase_receipt( $purchase_id, false, $email );
|
64 |
|
65 |
// Grab all downloads of the purchase and update their file download limits, if needed
|
66 |
// This allows admins to resend purchase receipts to grant additional file downloads
|
@@ -75,7 +75,15 @@ function edd_resend_purchase_receipt( $data ) {
|
|
75 |
}
|
76 |
}
|
77 |
|
78 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
exit;
|
80 |
}
|
81 |
add_action( 'edd_email_links', 'edd_resend_purchase_receipt' );
|
60 |
$email = $customer->email;
|
61 |
}
|
62 |
|
63 |
+
$sent = edd_email_purchase_receipt( $purchase_id, false, $email );
|
64 |
|
65 |
// Grab all downloads of the purchase and update their file download limits, if needed
|
66 |
// This allows admins to resend purchase receipts to grant additional file downloads
|
75 |
}
|
76 |
}
|
77 |
|
78 |
+
wp_safe_redirect(
|
79 |
+
add_query_arg(
|
80 |
+
array(
|
81 |
+
'edd-message' => $sent ? 'email_sent' : 'email_send_failed',
|
82 |
+
'edd-action' => false,
|
83 |
+
'purchase_id' => false,
|
84 |
+
)
|
85 |
+
)
|
86 |
+
);
|
87 |
exit;
|
88 |
}
|
89 |
add_action( 'edd_email_links', 'edd_resend_purchase_receipt' );
|
includes/emails/class-edd-emails.php
CHANGED
@@ -283,6 +283,8 @@ class EDD_Emails {
|
|
283 |
* @param string $subject The subject line of the email to send.
|
284 |
* @param string $message The body of the email to send.
|
285 |
* @param string|array $attachments Attachments to the email in a format supported by wp_mail()
|
|
|
|
|
286 |
* @since 2.1
|
287 |
*/
|
288 |
public function send( $to, $subject, $message, $attachments = '' ) {
|
283 |
* @param string $subject The subject line of the email to send.
|
284 |
* @param string $message The body of the email to send.
|
285 |
* @param string|array $attachments Attachments to the email in a format supported by wp_mail()
|
286 |
+
*
|
287 |
+
* @return bool Whether the email was sent successfully.
|
288 |
* @since 2.1
|
289 |
*/
|
290 |
public function send( $to, $subject, $message, $attachments = '' ) {
|
includes/emails/functions.php
CHANGED
@@ -23,7 +23,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
|
|
23 |
* @param bool $admin_notice Whether to send the admin email notification or not (default: true)
|
24 |
* @param EDD_Payment $payment Payment object for payment ID.
|
25 |
* @param EDD_Customer $customer Customer object for associated payment.
|
26 |
-
* @return
|
27 |
*/
|
28 |
function edd_email_purchase_receipt( $payment_id, $admin_notice = true, $to_email = '', $payment = null, $customer = null ) {
|
29 |
if ( is_null( $payment ) ) {
|
@@ -63,11 +63,13 @@ function edd_email_purchase_receipt( $payment_id, $admin_notice = true, $to_emai
|
|
63 |
$headers = apply_filters( 'edd_receipt_headers', $emails->get_headers(), $payment_id, $payment_data );
|
64 |
$emails->__set( 'headers', $headers );
|
65 |
|
66 |
-
$emails->send( $to_email, $subject, $message, $attachments );
|
67 |
|
68 |
if ( $admin_notice && ! edd_admin_notices_disabled( $payment_id ) ) {
|
69 |
do_action( 'edd_admin_sale_notice', $payment_id, $payment_data );
|
70 |
}
|
|
|
|
|
71 |
}
|
72 |
|
73 |
/**
|
@@ -282,101 +284,6 @@ function edd_get_email_names( $user_info, $payment = false ) {
|
|
282 |
return $email_names;
|
283 |
}
|
284 |
|
285 |
-
/**
|
286 |
-
* Handle installation and connection for SendWP via ajax
|
287 |
-
*
|
288 |
-
* @since 2.9.15
|
289 |
-
*/
|
290 |
-
function edd_sendwp_remote_install_handler () {
|
291 |
-
|
292 |
-
if ( ! current_user_can( 'manage_shop_settings' ) ) {
|
293 |
-
wp_send_json_error( array(
|
294 |
-
'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' )
|
295 |
-
) );
|
296 |
-
}
|
297 |
-
|
298 |
-
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
299 |
-
include_once ABSPATH . 'wp-admin/includes/file.php';
|
300 |
-
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
301 |
-
|
302 |
-
$plugins = get_plugins();
|
303 |
-
|
304 |
-
if( ! array_key_exists( 'sendwp/sendwp.php', $plugins ) ) {
|
305 |
-
|
306 |
-
/*
|
307 |
-
* Use the WordPress Plugins API to get the plugin download link.
|
308 |
-
*/
|
309 |
-
$api = plugins_api( 'plugin_information', array(
|
310 |
-
'slug' => 'sendwp',
|
311 |
-
) );
|
312 |
-
|
313 |
-
if ( is_wp_error( $api ) ) {
|
314 |
-
wp_send_json_error( array(
|
315 |
-
'error' => $api->get_error_message(),
|
316 |
-
'debug' => $api
|
317 |
-
) );
|
318 |
-
}
|
319 |
-
|
320 |
-
/*
|
321 |
-
* Use the AJAX Upgrader skin to quietly install the plugin.
|
322 |
-
*/
|
323 |
-
$upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
|
324 |
-
$install = $upgrader->install( $api->download_link );
|
325 |
-
if ( is_wp_error( $install ) ) {
|
326 |
-
wp_send_json_error( array(
|
327 |
-
'error' => $install->get_error_message(),
|
328 |
-
'debug' => $api
|
329 |
-
) );
|
330 |
-
}
|
331 |
-
|
332 |
-
$activated = activate_plugin( $upgrader->plugin_info() );
|
333 |
-
|
334 |
-
} else {
|
335 |
-
|
336 |
-
$activated = activate_plugin( 'sendwp/sendwp.php' );
|
337 |
-
|
338 |
-
}
|
339 |
-
|
340 |
-
/*
|
341 |
-
* Final check to see if SendWP is available.
|
342 |
-
*/
|
343 |
-
if( ! function_exists('sendwp_get_server_url') ) {
|
344 |
-
wp_send_json_error( array(
|
345 |
-
'error' => __( 'Something went wrong. SendWP was not installed correctly.', 'easy-digital-downloads' )
|
346 |
-
) );
|
347 |
-
}
|
348 |
-
|
349 |
-
wp_send_json_success( array(
|
350 |
-
'partner_id' => 81,
|
351 |
-
'register_url' => sendwp_get_server_url() . '_/signup',
|
352 |
-
'client_name' => sendwp_get_client_name(),
|
353 |
-
'client_secret' => sendwp_get_client_secret(),
|
354 |
-
'client_redirect' => admin_url( '/edit.php?post_type=download&page=edd-settings&tab=emails&edd-message=sendwp-connected' ),
|
355 |
-
) );
|
356 |
-
}
|
357 |
-
add_action( 'wp_ajax_edd_sendwp_remote_install', 'edd_sendwp_remote_install_handler' );
|
358 |
-
|
359 |
-
/**
|
360 |
-
* Handle deactivation of SendWP via ajax
|
361 |
-
*
|
362 |
-
* @since 2.9.15
|
363 |
-
*/
|
364 |
-
function edd_sendwp_disconnect () {
|
365 |
-
|
366 |
-
if ( ! current_user_can( 'manage_shop_settings' ) ) {
|
367 |
-
wp_send_json_error( array(
|
368 |
-
'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' )
|
369 |
-
) );
|
370 |
-
}
|
371 |
-
|
372 |
-
sendwp_disconnect_client();
|
373 |
-
|
374 |
-
deactivate_plugins( 'sendwp/sendwp.php' );
|
375 |
-
|
376 |
-
wp_send_json_success();
|
377 |
-
}
|
378 |
-
add_action( 'wp_ajax_edd_sendwp_disconnect', 'edd_sendwp_disconnect' );
|
379 |
-
|
380 |
/**
|
381 |
* Handle installation and connection for Recapture via ajax
|
382 |
*
|
23 |
* @param bool $admin_notice Whether to send the admin email notification or not (default: true)
|
24 |
* @param EDD_Payment $payment Payment object for payment ID.
|
25 |
* @param EDD_Customer $customer Customer object for associated payment.
|
26 |
+
* @return bool Whether the email was sent successfully.
|
27 |
*/
|
28 |
function edd_email_purchase_receipt( $payment_id, $admin_notice = true, $to_email = '', $payment = null, $customer = null ) {
|
29 |
if ( is_null( $payment ) ) {
|
63 |
$headers = apply_filters( 'edd_receipt_headers', $emails->get_headers(), $payment_id, $payment_data );
|
64 |
$emails->__set( 'headers', $headers );
|
65 |
|
66 |
+
$sent = $emails->send( $to_email, $subject, $message, $attachments );
|
67 |
|
68 |
if ( $admin_notice && ! edd_admin_notices_disabled( $payment_id ) ) {
|
69 |
do_action( 'edd_admin_sale_notice', $payment_id, $payment_data );
|
70 |
}
|
71 |
+
|
72 |
+
return $sent;
|
73 |
}
|
74 |
|
75 |
/**
|
284 |
return $email_names;
|
285 |
}
|
286 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
/**
|
288 |
* Handle installation and connection for Recapture via ajax
|
289 |
*
|
includes/extensions/ExtensionRegistry.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* License Registry
|
4 |
+
*
|
5 |
+
* Responsible for holding information about premium EDD extensions in use on this site.
|
6 |
+
*
|
7 |
+
* @package easy-digital-downloads
|
8 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
9 |
+
* @license GPL2+
|
10 |
+
* @since 2.11.4
|
11 |
+
*/
|
12 |
+
|
13 |
+
namespace EDD\Extensions;
|
14 |
+
|
15 |
+
class ExtensionRegistry extends \ArrayObject {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Adds an extension to the registry.
|
19 |
+
*
|
20 |
+
* @since 2.11.4
|
21 |
+
*
|
22 |
+
* @param string $pluginFile Path to the plugin's main file.
|
23 |
+
* @param string $pluginName Display name of the plugin.
|
24 |
+
* @param int $pluginId EDD product ID for the plugin.
|
25 |
+
* @param string $currentVersion Current version number.
|
26 |
+
* @param string|null $optionName Option name where the license key is stored. If omitted, automatically generated.
|
27 |
+
*/
|
28 |
+
public function addExtension( $pluginFile, $pluginName, $pluginId, $currentVersion, $optionName = null ) {
|
29 |
+
if ( $this->offsetExists( $pluginId ) ) {
|
30 |
+
throw new \InvalidArgumentException( sprintf(
|
31 |
+
'The extension %d is already registered.',
|
32 |
+
$pluginId
|
33 |
+
) );
|
34 |
+
}
|
35 |
+
|
36 |
+
$this->offsetSet(
|
37 |
+
$pluginId,
|
38 |
+
new \EDD_License( $pluginFile, $pluginName, $currentVersion, 'Easy Digital Downloads', $optionName, null, $pluginId )
|
39 |
+
);
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Returns all registered extensions, regardless of whether they have licenses activated.
|
44 |
+
*
|
45 |
+
* At some point we could make this public, just making it private for now so that we have
|
46 |
+
* flexibility to change exactly what it returns in the future.
|
47 |
+
*
|
48 |
+
* @since 2.11.4
|
49 |
+
*
|
50 |
+
* @return \EDD_License[]
|
51 |
+
*/
|
52 |
+
private function getExtensions() {
|
53 |
+
return $this->getArrayCopy();
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Counts the number of licensed extensions active on this site.
|
58 |
+
* Note: This only looks at extensions registered via this registry, then filters down
|
59 |
+
* to those that have a license key entered. It does not check to verify if the license
|
60 |
+
* key is actually valid / not expired.
|
61 |
+
*
|
62 |
+
* @since 2.11.4
|
63 |
+
*
|
64 |
+
* @return int
|
65 |
+
*/
|
66 |
+
public function countLicensedExtensions() {
|
67 |
+
$licensedExtensions = array_filter( $this->getExtensions(), function ( \EDD_License $license ) {
|
68 |
+
return ! empty( $license->license );
|
69 |
+
} );
|
70 |
+
|
71 |
+
return count( $licensedExtensions );
|
72 |
+
}
|
73 |
+
|
74 |
+
}
|
includes/extensions/licensing-functions.php
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Licensing Functions
|
4 |
+
*
|
5 |
+
* Functions used for saving and/or retrieving information about EDD licensed products
|
6 |
+
* running on the site.
|
7 |
+
*
|
8 |
+
* @package easy-digital-downloads
|
9 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
10 |
+
* @license GPL2+
|
11 |
+
* @since 2.11.4
|
12 |
+
*/
|
13 |
+
|
14 |
+
namespace EDD\Extensions;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Saves an option in the database with the information from the `$edd_licensed_products`
|
18 |
+
* global. This only runs in the context of WP-Admin, because that's the only place we
|
19 |
+
* can be certain that the information is accurate.
|
20 |
+
*
|
21 |
+
* @link https://github.com/awesomemotive/easy-digital-downloads/issues/8969
|
22 |
+
*
|
23 |
+
* @global $edd_licensed_products
|
24 |
+
*/
|
25 |
+
add_action( 'admin_init', function () {
|
26 |
+
if ( ! is_admin() ) {
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
|
30 |
+
$saved_products = get_option( 'edd_licensed_extensions', array() );
|
31 |
+
|
32 |
+
/*
|
33 |
+
* We only want to update this option once per day. If the timeout has expired
|
34 |
+
* then update it with product information.
|
35 |
+
*
|
36 |
+
* Note: We always save this option, even if `$edd_licensed_products` is empty.
|
37 |
+
* This is to help designate that the information has been checked and saved,
|
38 |
+
* even if there are no licensed products.
|
39 |
+
*/
|
40 |
+
if ( empty( $saved_products['timeout'] ) || $saved_products['timeout'] < time() ) {
|
41 |
+
global $edd_licensed_products;
|
42 |
+
|
43 |
+
update_option( 'edd_licensed_extensions', json_encode( array(
|
44 |
+
'timeout' => strtotime( '+1 day' ),
|
45 |
+
'products' => $edd_licensed_products,
|
46 |
+
) ) );
|
47 |
+
}
|
48 |
+
}, 200 );
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Returns licensed EDD extensions that are active on this site.
|
52 |
+
* Array values are the `$item_shortname` from `\EDD_License`
|
53 |
+
*
|
54 |
+
* @see \EDD_License::$item_shortname
|
55 |
+
*
|
56 |
+
* @since 2.11.4
|
57 |
+
* @return array
|
58 |
+
*/
|
59 |
+
function get_licensed_extension_slugs() {
|
60 |
+
$products = get_option( 'edd_licensed_extensions' );
|
61 |
+
|
62 |
+
/*
|
63 |
+
* If this isn't set for some reason, fall back to trying the global. There are
|
64 |
+
* probably a very limited number of cases where the option would be empty when
|
65 |
+
* the global is not, but worth a shot.
|
66 |
+
*/
|
67 |
+
if ( empty( $products ) ) {
|
68 |
+
global $edd_licensed_products;
|
69 |
+
|
70 |
+
return ! empty( $edd_licensed_products ) && is_array( $edd_licensed_products )
|
71 |
+
? $edd_licensed_products
|
72 |
+
: array();
|
73 |
+
}
|
74 |
+
|
75 |
+
$products = json_decode( $products, true );
|
76 |
+
|
77 |
+
return isset( $products['products'] ) && is_array( $products['products'] )
|
78 |
+
? $products['products']
|
79 |
+
: array();
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Triggers our hook for registering extensions.
|
84 |
+
* This needs to run after all plugins have definitely been loaded.
|
85 |
+
*
|
86 |
+
* @since 2.11.4
|
87 |
+
*/
|
88 |
+
add_action( 'plugins_loaded', function() {
|
89 |
+
/**
|
90 |
+
* Extensions should hook in here to register themselves.
|
91 |
+
*
|
92 |
+
* @since 2.11.4
|
93 |
+
*
|
94 |
+
* @param ExtensionRegistry
|
95 |
+
*/
|
96 |
+
do_action( 'edd_extension_license_init', EDD()->extensionRegistry );
|
97 |
+
}, PHP_INT_MAX );
|
includes/gateways/paypal-standard.php
CHANGED
@@ -1104,7 +1104,7 @@ function edd_paypal_link_transaction_id( $transaction_id, $payment_id ) {
|
|
1104 |
|
1105 |
$payment = new EDD_Payment( $payment_id );
|
1106 |
$sandbox = 'test' === $payment->mode ? 'sandbox.' : '';
|
1107 |
-
$paypal_base_url = 'https://
|
1108 |
$transaction_url = '<a href="' . esc_url( $paypal_base_url . $transaction_id ) . '" target="_blank">' . $transaction_id . '</a>';
|
1109 |
|
1110 |
return apply_filters( 'edd_paypal_link_payment_details_transaction_id', $transaction_url );
|
1104 |
|
1105 |
$payment = new EDD_Payment( $payment_id );
|
1106 |
$sandbox = 'test' === $payment->mode ? 'sandbox.' : '';
|
1107 |
+
$paypal_base_url = 'https://' . $sandbox . 'paypal.com/activity/payment/';
|
1108 |
$transaction_url = '<a href="' . esc_url( $paypal_base_url . $transaction_id ) . '" target="_blank">' . $transaction_id . '</a>';
|
1109 |
|
1110 |
return apply_filters( 'edd_paypal_link_payment_details_transaction_id', $transaction_url );
|
includes/gateways/stripe/edd-stripe.php
CHANGED
@@ -3,9 +3,9 @@
|
|
3 |
* Plugin Name: Easy Digital Downloads - Stripe Pro Payment Gateway
|
4 |
* Plugin URI: https://easydigitaldownloads.com/downloads/stripe-gateway/
|
5 |
* Description: Adds a payment gateway for Stripe.com
|
6 |
-
* Version: 2.8.
|
7 |
-
* Author:
|
8 |
-
* Author URI: https://
|
9 |
* Text Domain: edds
|
10 |
* Domain Path: languages
|
11 |
*/
|
@@ -42,7 +42,7 @@ function edd_stripe_core_bootstrap() {
|
|
42 |
}
|
43 |
|
44 |
if ( ! defined( 'EDD_STRIPE_VERSION' ) ) {
|
45 |
-
define( 'EDD_STRIPE_VERSION', '2.8.
|
46 |
}
|
47 |
|
48 |
if ( ! defined( 'EDD_STRIPE_API_VERSION' ) ) {
|
3 |
* Plugin Name: Easy Digital Downloads - Stripe Pro Payment Gateway
|
4 |
* Plugin URI: https://easydigitaldownloads.com/downloads/stripe-gateway/
|
5 |
* Description: Adds a payment gateway for Stripe.com
|
6 |
+
* Version: 2.8.10
|
7 |
+
* Author: Easy Digital Downloads
|
8 |
+
* Author URI: https://easydigitaldownloads.com
|
9 |
* Text Domain: edds
|
10 |
* Domain Path: languages
|
11 |
*/
|
42 |
}
|
43 |
|
44 |
if ( ! defined( 'EDD_STRIPE_VERSION' ) ) {
|
45 |
+
define( 'EDD_STRIPE_VERSION', '2.8.10' );
|
46 |
}
|
47 |
|
48 |
if ( ! defined( 'EDD_STRIPE_API_VERSION' ) ) {
|
includes/gateways/stripe/includes/admin/admin-actions.php
CHANGED
@@ -68,6 +68,29 @@ function edds_process_preapproved_cancel() {
|
|
68 |
}
|
69 |
add_action( 'edd_cancel_stripe_preapproval', 'edds_process_preapproved_cancel' );
|
70 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
/**
|
72 |
* Admin Messages
|
73 |
*
|
68 |
}
|
69 |
add_action( 'edd_cancel_stripe_preapproval', 'edds_process_preapproved_cancel' );
|
70 |
|
71 |
+
/**
|
72 |
+
* Adds a JS confirmation to check whether a preapproved payment should really be cancelled.
|
73 |
+
*
|
74 |
+
* @since 2.8.10
|
75 |
+
* @return void
|
76 |
+
*/
|
77 |
+
add_action( 'admin_print_footer_scripts-download_page_edd-payment-history', function () {
|
78 |
+
?>
|
79 |
+
<script>
|
80 |
+
document.addEventListener( 'DOMContentLoaded', function() {
|
81 |
+
var cancelLinks = document.querySelectorAll( '.row-actions .cancel-preapproval a' );
|
82 |
+
cancelLinks.forEach( function( link ) {
|
83 |
+
link.addEventListener( 'click', function( e ) {
|
84 |
+
if ( ! confirm( '<?php esc_attr_e( 'Are you sure you want to cancel this order?', 'easy-digital-downloads' ); ?>' ) ) {
|
85 |
+
e.preventDefault();
|
86 |
+
});
|
87 |
+
} );
|
88 |
+
} );
|
89 |
+
} );
|
90 |
+
</script>
|
91 |
+
<?php
|
92 |
+
} );
|
93 |
+
|
94 |
/**
|
95 |
* Admin Messages
|
96 |
*
|
includes/gateways/stripe/includes/admin/admin-filters.php
CHANGED
@@ -73,31 +73,45 @@ function edds_payments_column_data( $value, $payment_id, $column_name ) {
|
|
73 |
|
74 |
$nonce = wp_create_nonce( 'edds-process-preapproval' );
|
75 |
|
76 |
-
$
|
77 |
-
'
|
78 |
-
'
|
79 |
-
'
|
|
|
80 |
);
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
'
|
86 |
-
'edd-action' => 'cancel_stripe_preapproval'
|
87 |
);
|
88 |
|
89 |
-
$actions = array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
|
91 |
$value .= '<p class="row-actions">';
|
92 |
-
|
93 |
-
$actions[] = '<a href="' . esc_url( add_query_arg( $preapproval_args, admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ) ) . '">' . __( 'Process', 'easy-digital-downloads' ) . '</a>';
|
94 |
-
|
95 |
-
if ( 'cancelled' !== $status ) {
|
96 |
-
$actions[] = '<span class="delete"><a href="' . esc_url( add_query_arg( $cancel_args, admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ) ) . '">' . __( 'Cancel', 'easy-digital-downloads' ) . '</a></span>';
|
97 |
-
}
|
98 |
-
|
99 |
$value .= implode( ' | ', $actions );
|
100 |
-
|
101 |
$value .= '</p>';
|
102 |
|
103 |
return $value;
|
73 |
|
74 |
$nonce = wp_create_nonce( 'edds-process-preapproval' );
|
75 |
|
76 |
+
$base_args = array(
|
77 |
+
'post_type' => 'download',
|
78 |
+
'page' => 'edd-payment-history',
|
79 |
+
'payment_id' => urlencode( $payment_id ),
|
80 |
+
'nonce' => urlencode( $nonce ),
|
81 |
);
|
82 |
+
$preapproval_args = array(
|
83 |
+
'edd-action' => 'charge_stripe_preapproval',
|
84 |
+
);
|
85 |
+
$cancel_args = array(
|
86 |
+
'preapproval_key' => urlencode( $customer_id ),
|
87 |
+
'edd-action' => 'cancel_stripe_preapproval',
|
88 |
);
|
89 |
|
90 |
+
$actions = array(
|
91 |
+
sprintf(
|
92 |
+
'<a href="%s">%s</a>',
|
93 |
+
esc_url(
|
94 |
+
add_query_arg(
|
95 |
+
array_merge( $base_args, $preapproval_args ),
|
96 |
+
admin_url( 'edit.php' )
|
97 |
+
)
|
98 |
+
),
|
99 |
+
esc_html__( 'Process', 'easy-digital-downloads' )
|
100 |
+
),
|
101 |
+
sprintf(
|
102 |
+
'<span class="cancel-preapproval"><a href="%s">%s</a></span>',
|
103 |
+
esc_url(
|
104 |
+
add_query_arg(
|
105 |
+
array_merge( $base_args, $cancel_args ),
|
106 |
+
admin_url( 'edit.php' )
|
107 |
+
)
|
108 |
+
),
|
109 |
+
esc_html__( 'Cancel', 'easy-digital-downloads' )
|
110 |
+
),
|
111 |
+
);
|
112 |
|
113 |
$value .= '<p class="row-actions">';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
$value .= implode( ' | ', $actions );
|
|
|
115 |
$value .= '</p>';
|
116 |
|
117 |
return $value;
|
includes/gateways/stripe/includes/admin/settings/stripe-connect.php
CHANGED
@@ -21,19 +21,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
21 |
* @return bool
|
22 |
*/
|
23 |
function edds_stripe_connect_can_manage_keys() {
|
24 |
-
$can_manage = false;
|
25 |
|
26 |
-
|
27 |
-
|
28 |
-
* Stripe API keys.
|
29 |
-
*
|
30 |
-
* @since 2.8.0
|
31 |
-
*
|
32 |
-
* @param bool $can_manage If the current user can manage API keys.
|
33 |
-
*/
|
34 |
-
$can_manage = apply_filters( 'edds_stripe_connect_can_manage_keys', $can_manage );
|
35 |
|
36 |
-
return $
|
37 |
}
|
38 |
|
39 |
/**
|
21 |
* @return bool
|
22 |
*/
|
23 |
function edds_stripe_connect_can_manage_keys() {
|
|
|
24 |
|
25 |
+
$stripe_connect_account_id = edd_get_option( 'stripe_connect_account_id', false );
|
26 |
+
$secret = edd_is_test_mode() ? edd_get_option( 'test_secret_key' ) : edd_get_option( 'live_secret_key' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
+
return empty( $stripe_connect_account_id ) && $secret;
|
29 |
}
|
30 |
|
31 |
/**
|
includes/gateways/stripe/includes/admin/upgrade-functions.php
CHANGED
@@ -1,5 +1,28 @@
|
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
/**
|
4 |
* Stripe Upgrade Notices
|
5 |
*
|
@@ -128,4 +151,4 @@ function edd_stripe_customer_id_migration() {
|
|
128 |
}
|
129 |
|
130 |
}
|
131 |
-
add_action( 'edd_stripe_customer_id_migration', 'edd_stripe_customer_id_migration' );
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
* Handles automatic upgrades behind the scenes.
|
5 |
+
*
|
6 |
+
* @since 2.8.10
|
7 |
+
*/
|
8 |
+
add_action( 'admin_init', function() {
|
9 |
+
/*
|
10 |
+
* Move license data to new option, after product name change.
|
11 |
+
* @link https://github.com/awesomemotive/edd-stripe/issues/715
|
12 |
+
*/
|
13 |
+
$license_key = edd_get_option( 'edd_stripe_payment_gateway_license_key' );
|
14 |
+
if ( $license_key ) {
|
15 |
+
edd_update_option( 'edd_stripe_pro_payment_gateway_license_key', sanitize_text_field( $license_key ) );
|
16 |
+
edd_delete_option( 'edd_stripe_payment_gateway_license_key' );
|
17 |
+
|
18 |
+
$license_status = get_option( 'edd_stripe_payment_gateway_license_active' );
|
19 |
+
if ( $license_status ) {
|
20 |
+
update_option( 'edd_stripe_pro_payment_gateway_license_active', $license_status );
|
21 |
+
delete_option( 'edd_stripe_payment_gateway_license_active' );
|
22 |
+
}
|
23 |
+
}
|
24 |
+
} );
|
25 |
+
|
26 |
/**
|
27 |
* Stripe Upgrade Notices
|
28 |
*
|
151 |
}
|
152 |
|
153 |
}
|
154 |
+
add_action( 'edd_stripe_customer_id_migration', 'edd_stripe_customer_id_migration' );
|
includes/gateways/stripe/includes/class-edd-stripe.php
CHANGED
@@ -51,16 +51,28 @@ class EDD_Stripe {
|
|
51 |
self::$instance->actions();
|
52 |
self::$instance->filters();
|
53 |
|
54 |
-
if (
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
}
|
65 |
}
|
66 |
|
51 |
self::$instance->actions();
|
52 |
self::$instance->filters();
|
53 |
|
54 |
+
if ( true === edds_is_pro() ) {
|
55 |
+
if ( class_exists( '\\EDD\\Extensions\\ExtensionRegistry' ) ) {
|
56 |
+
add_action( 'edd_extension_license_init', function( \EDD\Extensions\ExtensionRegistry $registry ) {
|
57 |
+
$registry->addExtension(
|
58 |
+
EDD_STRIPE_PLUGIN_FILE,
|
59 |
+
'Stripe Pro Payment Gateway',
|
60 |
+
167,
|
61 |
+
EDD_STRIPE_VERSION,
|
62 |
+
'stripe_license_key'
|
63 |
+
);
|
64 |
+
} );
|
65 |
+
} elseif ( class_exists( 'EDD_License' ) ) {
|
66 |
+
new EDD_License(
|
67 |
+
EDD_STRIPE_PLUGIN_FILE,
|
68 |
+
'Stripe Pro Payment Gateway',
|
69 |
+
EDD_STRIPE_VERSION,
|
70 |
+
'Easy Digital Downloads',
|
71 |
+
'stripe_license_key',
|
72 |
+
null,
|
73 |
+
167
|
74 |
+
);
|
75 |
+
}
|
76 |
}
|
77 |
}
|
78 |
|
includes/gateways/stripe/includes/payment-methods/buy-now/functions.php
CHANGED
@@ -46,9 +46,11 @@ function edds_shop_supports_buy_now( $supports ) {
|
|
46 |
return false;
|
47 |
}
|
48 |
|
49 |
-
$gateways
|
50 |
-
$stripe_gateways
|
51 |
-
|
|
|
|
|
52 |
return true;
|
53 |
}
|
54 |
|
46 |
return false;
|
47 |
}
|
48 |
|
49 |
+
$gateways = edd_get_enabled_payment_gateways();
|
50 |
+
$stripe_gateways = array( 'stripe', 'stripe-prb' );
|
51 |
+
$remaining_gateways = array_diff( array_keys( $gateways ), $stripe_gateways );
|
52 |
+
|
53 |
+
if ( empty( $remaining_gateways ) ) {
|
54 |
return true;
|
55 |
}
|
56 |
|
includes/gateways/stripe/includes/scripts.php
CHANGED
@@ -55,7 +55,7 @@ function edd_stripe_js( $force_load_scripts = false ) {
|
|
55 |
true
|
56 |
);
|
57 |
|
58 |
-
$is_checkout = edd_is_checkout();
|
59 |
$restrict_assets = edd_get_option( 'stripe_restrict_assets', false );
|
60 |
|
61 |
if ( $is_checkout || $force_load_scripts || false === $restrict_assets ) {
|
55 |
true
|
56 |
);
|
57 |
|
58 |
+
$is_checkout = edd_is_checkout() && 0 < edd_get_cart_total();
|
59 |
$restrict_assets = edd_get_option( 'stripe_restrict_assets', false );
|
60 |
|
61 |
if ( $is_checkout || $force_load_scripts || false === $restrict_assets ) {
|
includes/gateways/stripe/vendor/composer/ClassLoader.php
CHANGED
@@ -37,13 +37,11 @@ namespace Composer\Autoload;
|
|
37 |
*
|
38 |
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
-
* @see
|
41 |
-
* @see
|
42 |
*/
|
43 |
class ClassLoader
|
44 |
{
|
45 |
-
private $vendorDir;
|
46 |
-
|
47 |
// PSR-4
|
48 |
private $prefixLengthsPsr4 = array();
|
49 |
private $prefixDirsPsr4 = array();
|
@@ -59,17 +57,10 @@ class ClassLoader
|
|
59 |
private $missingClasses = array();
|
60 |
private $apcuPrefix;
|
61 |
|
62 |
-
private static $registeredLoaders = array();
|
63 |
-
|
64 |
-
public function __construct($vendorDir = null)
|
65 |
-
{
|
66 |
-
$this->vendorDir = $vendorDir;
|
67 |
-
}
|
68 |
-
|
69 |
public function getPrefixes()
|
70 |
{
|
71 |
if (!empty($this->prefixesPsr0)) {
|
72 |
-
return call_user_func_array('array_merge',
|
73 |
}
|
74 |
|
75 |
return array();
|
@@ -309,17 +300,6 @@ class ClassLoader
|
|
309 |
public function register($prepend = false)
|
310 |
{
|
311 |
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
312 |
-
|
313 |
-
if (null === $this->vendorDir) {
|
314 |
-
return;
|
315 |
-
}
|
316 |
-
|
317 |
-
if ($prepend) {
|
318 |
-
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
319 |
-
} else {
|
320 |
-
unset(self::$registeredLoaders[$this->vendorDir]);
|
321 |
-
self::$registeredLoaders[$this->vendorDir] = $this;
|
322 |
-
}
|
323 |
}
|
324 |
|
325 |
/**
|
@@ -328,17 +308,13 @@ class ClassLoader
|
|
328 |
public function unregister()
|
329 |
{
|
330 |
spl_autoload_unregister(array($this, 'loadClass'));
|
331 |
-
|
332 |
-
if (null !== $this->vendorDir) {
|
333 |
-
unset(self::$registeredLoaders[$this->vendorDir]);
|
334 |
-
}
|
335 |
}
|
336 |
|
337 |
/**
|
338 |
* Loads the given class or interface.
|
339 |
*
|
340 |
* @param string $class The name of the class
|
341 |
-
* @return
|
342 |
*/
|
343 |
public function loadClass($class)
|
344 |
{
|
@@ -347,8 +323,6 @@ class ClassLoader
|
|
347 |
|
348 |
return true;
|
349 |
}
|
350 |
-
|
351 |
-
return null;
|
352 |
}
|
353 |
|
354 |
/**
|
@@ -393,16 +367,6 @@ class ClassLoader
|
|
393 |
return $file;
|
394 |
}
|
395 |
|
396 |
-
/**
|
397 |
-
* Returns the currently registered loaders indexed by their corresponding vendor directories.
|
398 |
-
*
|
399 |
-
* @return self[]
|
400 |
-
*/
|
401 |
-
public static function getRegisteredLoaders()
|
402 |
-
{
|
403 |
-
return self::$registeredLoaders;
|
404 |
-
}
|
405 |
-
|
406 |
private function findFileWithExtension($class, $ext)
|
407 |
{
|
408 |
// PSR-4 lookup
|
37 |
*
|
38 |
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
+
* @see http://www.php-fig.org/psr/psr-0/
|
41 |
+
* @see http://www.php-fig.org/psr/psr-4/
|
42 |
*/
|
43 |
class ClassLoader
|
44 |
{
|
|
|
|
|
45 |
// PSR-4
|
46 |
private $prefixLengthsPsr4 = array();
|
47 |
private $prefixDirsPsr4 = array();
|
57 |
private $missingClasses = array();
|
58 |
private $apcuPrefix;
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
public function getPrefixes()
|
61 |
{
|
62 |
if (!empty($this->prefixesPsr0)) {
|
63 |
+
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
64 |
}
|
65 |
|
66 |
return array();
|
300 |
public function register($prepend = false)
|
301 |
{
|
302 |
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
303 |
}
|
304 |
|
305 |
/**
|
308 |
public function unregister()
|
309 |
{
|
310 |
spl_autoload_unregister(array($this, 'loadClass'));
|
|
|
|
|
|
|
|
|
311 |
}
|
312 |
|
313 |
/**
|
314 |
* Loads the given class or interface.
|
315 |
*
|
316 |
* @param string $class The name of the class
|
317 |
+
* @return bool|null True if loaded, null otherwise
|
318 |
*/
|
319 |
public function loadClass($class)
|
320 |
{
|
323 |
|
324 |
return true;
|
325 |
}
|
|
|
|
|
326 |
}
|
327 |
|
328 |
/**
|
367 |
return $file;
|
368 |
}
|
369 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
private function findFileWithExtension($class, $ext)
|
371 |
{
|
372 |
// PSR-4 lookup
|
includes/gateways/stripe/vendor/composer/LICENSE
CHANGED
@@ -1,4 +1,3 @@
|
|
1 |
-
|
2 |
Copyright (c) Nils Adermann, Jordi Boggiano
|
3 |
|
4 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
@@ -18,4 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18 |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19 |
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20 |
THE SOFTWARE.
|
21 |
-
|
|
|
1 |
Copyright (c) Nils Adermann, Jordi Boggiano
|
2 |
|
3 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
17 |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
THE SOFTWARE.
|
|
includes/gateways/stripe/vendor/composer/autoload_classmap.php
CHANGED
@@ -6,5 +6,4 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
9 |
-
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
10 |
);
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
9 |
);
|
includes/gateways/stripe/vendor/composer/autoload_real.php
CHANGED
@@ -22,15 +22,13 @@ class ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a
|
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
-
require __DIR__ . '/platform_check.php';
|
26 |
-
|
27 |
spl_autoload_register(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'), true, true);
|
28 |
-
self::$loader = $loader = new \Composer\Autoload\ClassLoader(
|
29 |
spl_autoload_unregister(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'));
|
30 |
|
31 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
32 |
if ($useStaticLoader) {
|
33 |
-
|
34 |
|
35 |
call_user_func(\Composer\Autoload\ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::getInitializer($loader));
|
36 |
} else {
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
|
|
|
|
25 |
spl_autoload_register(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'), true, true);
|
26 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
spl_autoload_unregister(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'));
|
28 |
|
29 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
30 |
if ($useStaticLoader) {
|
31 |
+
require_once __DIR__ . '/autoload_static.php';
|
32 |
|
33 |
call_user_func(\Composer\Autoload\ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::getInitializer($loader));
|
34 |
} else {
|
includes/gateways/stripe/vendor/composer/autoload_static.php
CHANGED
@@ -28,16 +28,11 @@ class ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a
|
|
28 |
),
|
29 |
);
|
30 |
|
31 |
-
public static $classMap = array (
|
32 |
-
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
33 |
-
);
|
34 |
-
|
35 |
public static function getInitializer(ClassLoader $loader)
|
36 |
{
|
37 |
return \Closure::bind(function () use ($loader) {
|
38 |
$loader->prefixLengthsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixLengthsPsr4;
|
39 |
$loader->prefixDirsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixDirsPsr4;
|
40 |
-
$loader->classMap = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$classMap;
|
41 |
|
42 |
}, null, ClassLoader::class);
|
43 |
}
|
28 |
),
|
29 |
);
|
30 |
|
|
|
|
|
|
|
|
|
31 |
public static function getInitializer(ClassLoader $loader)
|
32 |
{
|
33 |
return \Closure::bind(function () use ($loader) {
|
34 |
$loader->prefixLengthsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixLengthsPsr4;
|
35 |
$loader->prefixDirsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixDirsPsr4;
|
|
|
36 |
|
37 |
}, null, ClassLoader::class);
|
38 |
}
|
includes/gateways/stripe/vendor/composer/installed.json
CHANGED
@@ -1,223 +1,217 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
"
|
8 |
-
|
9 |
-
|
10 |
-
"reference": "ae03311f45dfe194412081526be2e003960df74b"
|
11 |
-
},
|
12 |
-
"dist": {
|
13 |
-
"type": "zip",
|
14 |
-
"url": "https://api.github.com/repos/composer/installers/zipball/ae03311f45dfe194412081526be2e003960df74b",
|
15 |
-
"reference": "ae03311f45dfe194412081526be2e003960df74b",
|
16 |
-
"shasum": ""
|
17 |
-
},
|
18 |
-
"require": {
|
19 |
-
"composer-plugin-api": "^1.0 || ^2.0"
|
20 |
-
},
|
21 |
-
"replace": {
|
22 |
-
"roundcube/plugin-installer": "*",
|
23 |
-
"shama/baton": "*"
|
24 |
-
},
|
25 |
-
"require-dev": {
|
26 |
-
"composer/composer": "1.6.* || ^2.0",
|
27 |
-
"composer/semver": "^1 || ^3",
|
28 |
-
"phpstan/phpstan": "^0.12.55",
|
29 |
-
"phpstan/phpstan-phpunit": "^0.12.16",
|
30 |
-
"symfony/phpunit-bridge": "^4.2 || ^5",
|
31 |
-
"symfony/process": "^2.3"
|
32 |
-
},
|
33 |
-
"time": "2021-04-28T06:42:17+00:00",
|
34 |
-
"type": "composer-plugin",
|
35 |
-
"extra": {
|
36 |
-
"class": "Composer\\Installers\\Plugin",
|
37 |
-
"branch-alias": {
|
38 |
-
"dev-main": "1.x-dev"
|
39 |
-
}
|
40 |
-
},
|
41 |
-
"installation-source": "dist",
|
42 |
-
"autoload": {
|
43 |
-
"psr-4": {
|
44 |
-
"Composer\\Installers\\": "src/Composer/Installers"
|
45 |
-
}
|
46 |
-
},
|
47 |
-
"notification-url": "https://packagist.org/downloads/",
|
48 |
-
"license": [
|
49 |
-
"MIT"
|
50 |
-
],
|
51 |
-
"authors": [
|
52 |
-
{
|
53 |
-
"name": "Kyle Robinson Young",
|
54 |
-
"email": "kyle@dontkry.com",
|
55 |
-
"homepage": "https://github.com/shama"
|
56 |
-
}
|
57 |
-
],
|
58 |
-
"description": "A multi-framework Composer library installer",
|
59 |
-
"homepage": "https://composer.github.io/installers/",
|
60 |
-
"keywords": [
|
61 |
-
"Craft",
|
62 |
-
"Dolibarr",
|
63 |
-
"Eliasis",
|
64 |
-
"Hurad",
|
65 |
-
"ImageCMS",
|
66 |
-
"Kanboard",
|
67 |
-
"Lan Management System",
|
68 |
-
"MODX Evo",
|
69 |
-
"MantisBT",
|
70 |
-
"Mautic",
|
71 |
-
"Maya",
|
72 |
-
"OXID",
|
73 |
-
"Plentymarkets",
|
74 |
-
"Porto",
|
75 |
-
"RadPHP",
|
76 |
-
"SMF",
|
77 |
-
"Starbug",
|
78 |
-
"Thelia",
|
79 |
-
"Whmcs",
|
80 |
-
"WolfCMS",
|
81 |
-
"agl",
|
82 |
-
"aimeos",
|
83 |
-
"annotatecms",
|
84 |
-
"attogram",
|
85 |
-
"bitrix",
|
86 |
-
"cakephp",
|
87 |
-
"chef",
|
88 |
-
"cockpit",
|
89 |
-
"codeigniter",
|
90 |
-
"concrete5",
|
91 |
-
"croogo",
|
92 |
-
"dokuwiki",
|
93 |
-
"drupal",
|
94 |
-
"eZ Platform",
|
95 |
-
"elgg",
|
96 |
-
"expressionengine",
|
97 |
-
"fuelphp",
|
98 |
-
"grav",
|
99 |
-
"installer",
|
100 |
-
"itop",
|
101 |
-
"joomla",
|
102 |
-
"known",
|
103 |
-
"kohana",
|
104 |
-
"laravel",
|
105 |
-
"lavalite",
|
106 |
-
"lithium",
|
107 |
-
"magento",
|
108 |
-
"majima",
|
109 |
-
"mako",
|
110 |
-
"mediawiki",
|
111 |
-
"miaoxing",
|
112 |
-
"modulework",
|
113 |
-
"modx",
|
114 |
-
"moodle",
|
115 |
-
"osclass",
|
116 |
-
"phpbb",
|
117 |
-
"piwik",
|
118 |
-
"ppi",
|
119 |
-
"processwire",
|
120 |
-
"puppet",
|
121 |
-
"pxcms",
|
122 |
-
"reindex",
|
123 |
-
"roundcube",
|
124 |
-
"shopware",
|
125 |
-
"silverstripe",
|
126 |
-
"sydes",
|
127 |
-
"sylius",
|
128 |
-
"symfony",
|
129 |
-
"tastyigniter",
|
130 |
-
"typo3",
|
131 |
-
"wordpress",
|
132 |
-
"yawik",
|
133 |
-
"zend",
|
134 |
-
"zikula"
|
135 |
-
],
|
136 |
-
"support": {
|
137 |
-
"issues": "https://github.com/composer/installers/issues",
|
138 |
-
"source": "https://github.com/composer/installers/tree/v1.11.0"
|
139 |
-
},
|
140 |
-
"funding": [
|
141 |
-
{
|
142 |
-
"url": "https://packagist.com",
|
143 |
-
"type": "custom"
|
144 |
-
},
|
145 |
-
{
|
146 |
-
"url": "https://github.com/composer",
|
147 |
-
"type": "github"
|
148 |
-
},
|
149 |
-
{
|
150 |
-
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
|
151 |
-
"type": "tidelift"
|
152 |
-
}
|
153 |
-
],
|
154 |
-
"install-path": "./installers"
|
155 |
},
|
156 |
-
{
|
157 |
-
"
|
158 |
-
"
|
159 |
-
"
|
160 |
-
"
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
"
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
"
|
183 |
-
}
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
196 |
},
|
197 |
-
|
198 |
-
|
199 |
-
"
|
200 |
-
],
|
201 |
-
"authors": [
|
202 |
-
{
|
203 |
-
"name": "Stripe and contributors",
|
204 |
-
"homepage": "https://github.com/stripe/stripe-php/contributors"
|
205 |
-
}
|
206 |
-
],
|
207 |
-
"description": "Stripe PHP Library",
|
208 |
-
"homepage": "https://stripe.com/",
|
209 |
-
"keywords": [
|
210 |
-
"api",
|
211 |
-
"payment processing",
|
212 |
-
"stripe"
|
213 |
-
],
|
214 |
-
"support": {
|
215 |
-
"issues": "https://github.com/stripe/stripe-php/issues",
|
216 |
-
"source": "https://github.com/stripe/stripe-php/tree/v7.47.0"
|
217 |
},
|
218 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
}
|
220 |
-
|
221 |
-
|
222 |
-
"dev-package-names": []
|
223 |
-
}
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"name": "composer/installers",
|
4 |
+
"version": "v1.11.0",
|
5 |
+
"version_normalized": "1.11.0.0",
|
6 |
+
"source": {
|
7 |
+
"type": "git",
|
8 |
+
"url": "https://github.com/composer/installers.git",
|
9 |
+
"reference": "ae03311f45dfe194412081526be2e003960df74b"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
},
|
11 |
+
"dist": {
|
12 |
+
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/composer/installers/zipball/ae03311f45dfe194412081526be2e003960df74b",
|
14 |
+
"reference": "ae03311f45dfe194412081526be2e003960df74b",
|
15 |
+
"shasum": ""
|
16 |
+
},
|
17 |
+
"require": {
|
18 |
+
"composer-plugin-api": "^1.0 || ^2.0"
|
19 |
+
},
|
20 |
+
"replace": {
|
21 |
+
"roundcube/plugin-installer": "*",
|
22 |
+
"shama/baton": "*"
|
23 |
+
},
|
24 |
+
"require-dev": {
|
25 |
+
"composer/composer": "1.6.* || ^2.0",
|
26 |
+
"composer/semver": "^1 || ^3",
|
27 |
+
"phpstan/phpstan": "^0.12.55",
|
28 |
+
"phpstan/phpstan-phpunit": "^0.12.16",
|
29 |
+
"symfony/phpunit-bridge": "^4.2 || ^5",
|
30 |
+
"symfony/process": "^2.3"
|
31 |
+
},
|
32 |
+
"time": "2021-04-28T06:42:17+00:00",
|
33 |
+
"type": "composer-plugin",
|
34 |
+
"extra": {
|
35 |
+
"class": "Composer\\Installers\\Plugin",
|
36 |
+
"branch-alias": {
|
37 |
+
"dev-main": "1.x-dev"
|
38 |
+
}
|
39 |
+
},
|
40 |
+
"installation-source": "dist",
|
41 |
+
"autoload": {
|
42 |
+
"psr-4": {
|
43 |
+
"Composer\\Installers\\": "src/Composer/Installers"
|
44 |
+
}
|
45 |
+
},
|
46 |
+
"notification-url": "https://packagist.org/downloads/",
|
47 |
+
"license": [
|
48 |
+
"MIT"
|
49 |
+
],
|
50 |
+
"authors": [
|
51 |
+
{
|
52 |
+
"name": "Kyle Robinson Young",
|
53 |
+
"email": "kyle@dontkry.com",
|
54 |
+
"homepage": "https://github.com/shama"
|
55 |
+
}
|
56 |
+
],
|
57 |
+
"description": "A multi-framework Composer library installer",
|
58 |
+
"homepage": "https://composer.github.io/installers/",
|
59 |
+
"keywords": [
|
60 |
+
"Craft",
|
61 |
+
"Dolibarr",
|
62 |
+
"Eliasis",
|
63 |
+
"Hurad",
|
64 |
+
"ImageCMS",
|
65 |
+
"Kanboard",
|
66 |
+
"Lan Management System",
|
67 |
+
"MODX Evo",
|
68 |
+
"MantisBT",
|
69 |
+
"Mautic",
|
70 |
+
"Maya",
|
71 |
+
"OXID",
|
72 |
+
"Plentymarkets",
|
73 |
+
"Porto",
|
74 |
+
"RadPHP",
|
75 |
+
"SMF",
|
76 |
+
"Starbug",
|
77 |
+
"Thelia",
|
78 |
+
"Whmcs",
|
79 |
+
"WolfCMS",
|
80 |
+
"agl",
|
81 |
+
"aimeos",
|
82 |
+
"annotatecms",
|
83 |
+
"attogram",
|
84 |
+
"bitrix",
|
85 |
+
"cakephp",
|
86 |
+
"chef",
|
87 |
+
"cockpit",
|
88 |
+
"codeigniter",
|
89 |
+
"concrete5",
|
90 |
+
"croogo",
|
91 |
+
"dokuwiki",
|
92 |
+
"drupal",
|
93 |
+
"eZ Platform",
|
94 |
+
"elgg",
|
95 |
+
"expressionengine",
|
96 |
+
"fuelphp",
|
97 |
+
"grav",
|
98 |
+
"installer",
|
99 |
+
"itop",
|
100 |
+
"joomla",
|
101 |
+
"known",
|
102 |
+
"kohana",
|
103 |
+
"laravel",
|
104 |
+
"lavalite",
|
105 |
+
"lithium",
|
106 |
+
"magento",
|
107 |
+
"majima",
|
108 |
+
"mako",
|
109 |
+
"mediawiki",
|
110 |
+
"miaoxing",
|
111 |
+
"modulework",
|
112 |
+
"modx",
|
113 |
+
"moodle",
|
114 |
+
"osclass",
|
115 |
+
"phpbb",
|
116 |
+
"piwik",
|
117 |
+
"ppi",
|
118 |
+
"processwire",
|
119 |
+
"puppet",
|
120 |
+
"pxcms",
|
121 |
+
"reindex",
|
122 |
+
"roundcube",
|
123 |
+
"shopware",
|
124 |
+
"silverstripe",
|
125 |
+
"sydes",
|
126 |
+
"sylius",
|
127 |
+
"symfony",
|
128 |
+
"tastyigniter",
|
129 |
+
"typo3",
|
130 |
+
"wordpress",
|
131 |
+
"yawik",
|
132 |
+
"zend",
|
133 |
+
"zikula"
|
134 |
+
],
|
135 |
+
"support": {
|
136 |
+
"issues": "https://github.com/composer/installers/issues",
|
137 |
+
"source": "https://github.com/composer/installers/tree/v1.11.0"
|
138 |
+
},
|
139 |
+
"funding": [
|
140 |
+
{
|
141 |
+
"url": "https://packagist.com",
|
142 |
+
"type": "custom"
|
143 |
},
|
144 |
+
{
|
145 |
+
"url": "https://github.com/composer",
|
146 |
+
"type": "github"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
},
|
148 |
+
{
|
149 |
+
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
|
150 |
+
"type": "tidelift"
|
151 |
+
}
|
152 |
+
]
|
153 |
+
},
|
154 |
+
{
|
155 |
+
"name": "stripe/stripe-php",
|
156 |
+
"version": "v7.47.0",
|
157 |
+
"version_normalized": "7.47.0.0",
|
158 |
+
"source": {
|
159 |
+
"type": "git",
|
160 |
+
"url": "https://github.com/stripe/stripe-php.git",
|
161 |
+
"reference": "b51656cb398d081fcee53a76f6edb8fd5c1a5306"
|
162 |
+
},
|
163 |
+
"dist": {
|
164 |
+
"type": "zip",
|
165 |
+
"url": "https://api.github.com/repos/stripe/stripe-php/zipball/b51656cb398d081fcee53a76f6edb8fd5c1a5306",
|
166 |
+
"reference": "b51656cb398d081fcee53a76f6edb8fd5c1a5306",
|
167 |
+
"shasum": ""
|
168 |
+
},
|
169 |
+
"require": {
|
170 |
+
"ext-curl": "*",
|
171 |
+
"ext-json": "*",
|
172 |
+
"ext-mbstring": "*",
|
173 |
+
"php": ">=5.6.0"
|
174 |
+
},
|
175 |
+
"require-dev": {
|
176 |
+
"friendsofphp/php-cs-fixer": "2.16.1",
|
177 |
+
"php-coveralls/php-coveralls": "^2.1",
|
178 |
+
"phpunit/phpunit": "^5.7",
|
179 |
+
"squizlabs/php_codesniffer": "^3.3",
|
180 |
+
"symfony/process": "~3.4"
|
181 |
+
},
|
182 |
+
"time": "2020-08-13T22:35:56+00:00",
|
183 |
+
"type": "library",
|
184 |
+
"extra": {
|
185 |
+
"branch-alias": {
|
186 |
+
"dev-master": "2.0-dev"
|
187 |
+
}
|
188 |
+
},
|
189 |
+
"installation-source": "dist",
|
190 |
+
"autoload": {
|
191 |
+
"psr-4": {
|
192 |
+
"Stripe\\": "lib/"
|
193 |
+
}
|
194 |
+
},
|
195 |
+
"notification-url": "https://packagist.org/downloads/",
|
196 |
+
"license": [
|
197 |
+
"MIT"
|
198 |
+
],
|
199 |
+
"authors": [
|
200 |
+
{
|
201 |
+
"name": "Stripe and contributors",
|
202 |
+
"homepage": "https://github.com/stripe/stripe-php/contributors"
|
203 |
+
}
|
204 |
+
],
|
205 |
+
"description": "Stripe PHP Library",
|
206 |
+
"homepage": "https://stripe.com/",
|
207 |
+
"keywords": [
|
208 |
+
"api",
|
209 |
+
"payment processing",
|
210 |
+
"stripe"
|
211 |
+
],
|
212 |
+
"support": {
|
213 |
+
"issues": "https://github.com/stripe/stripe-php/issues",
|
214 |
+
"source": "https://github.com/stripe/stripe-php/tree/v7.47.0"
|
215 |
}
|
216 |
+
}
|
217 |
+
]
|
|
|
|
includes/gateways/stripe/vendor/composer/installed.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
'type' => 'wordpress-plugin',
|
6 |
'install_path' => __DIR__ . '/../../',
|
7 |
'aliases' => array(),
|
8 |
-
'reference' => '
|
9 |
'name' => 'easy-digital-downloads/edd-stripe',
|
10 |
'dev' => false,
|
11 |
),
|
@@ -25,7 +25,7 @@
|
|
25 |
'type' => 'wordpress-plugin',
|
26 |
'install_path' => __DIR__ . '/../../',
|
27 |
'aliases' => array(),
|
28 |
-
'reference' => '
|
29 |
'dev_requirement' => false,
|
30 |
),
|
31 |
'roundcube/plugin-installer' => array(
|
5 |
'type' => 'wordpress-plugin',
|
6 |
'install_path' => __DIR__ . '/../../',
|
7 |
'aliases' => array(),
|
8 |
+
'reference' => 'e7f98d164d4da798f7126fec7d294fce16299e5d',
|
9 |
'name' => 'easy-digital-downloads/edd-stripe',
|
10 |
'dev' => false,
|
11 |
),
|
25 |
'type' => 'wordpress-plugin',
|
26 |
'install_path' => __DIR__ . '/../../',
|
27 |
'aliases' => array(),
|
28 |
+
'reference' => 'e7f98d164d4da798f7126fec7d294fce16299e5d',
|
29 |
'dev_requirement' => false,
|
30 |
),
|
31 |
'roundcube/plugin-installer' => array(
|
includes/install.php
CHANGED
@@ -191,6 +191,9 @@ function edd_run_install() {
|
|
191 |
update_option( 'edd_settings', $merged_options );
|
192 |
update_option( 'edd_version', EDD_VERSION );
|
193 |
|
|
|
|
|
|
|
194 |
// Create wp-content/uploads/edd/ folder and the .htaccess file
|
195 |
edd_create_protection_files( true );
|
196 |
|
@@ -209,6 +212,7 @@ function edd_run_install() {
|
|
209 |
*/
|
210 |
@EDD()->customers->create_table();
|
211 |
@EDD()->customer_meta->create_table();
|
|
|
212 |
}
|
213 |
|
214 |
// Check for PHP Session support, and enable if available
|
@@ -321,6 +325,10 @@ function edd_after_install() {
|
|
321 |
do_action( 'edd_after_install', $edd_options );
|
322 |
}
|
323 |
|
|
|
|
|
|
|
|
|
324 |
update_option( '_edd_table_check', ( current_time( 'timestamp' ) + WEEK_IN_SECONDS ) );
|
325 |
|
326 |
}
|
191 |
update_option( 'edd_settings', $merged_options );
|
192 |
update_option( 'edd_version', EDD_VERSION );
|
193 |
|
194 |
+
// Set the activation date.
|
195 |
+
edd_get_activation_date();
|
196 |
+
|
197 |
// Create wp-content/uploads/edd/ folder and the .htaccess file
|
198 |
edd_create_protection_files( true );
|
199 |
|
212 |
*/
|
213 |
@EDD()->customers->create_table();
|
214 |
@EDD()->customer_meta->create_table();
|
215 |
+
EDD()->notifications->create_table();
|
216 |
}
|
217 |
|
218 |
// Check for PHP Session support, and enable if available
|
325 |
do_action( 'edd_after_install', $edd_options );
|
326 |
}
|
327 |
|
328 |
+
if ( ! EDD()->notifications->installed() ) {
|
329 |
+
EDD()->notifications->create_table();
|
330 |
+
}
|
331 |
+
|
332 |
update_option( '_edd_table_check', ( current_time( 'timestamp' ) + WEEK_IN_SECONDS ) );
|
333 |
|
334 |
}
|
includes/misc-functions.php
CHANGED
@@ -141,28 +141,14 @@ function edd_get_file_extension( $str ) {
|
|
141 |
* Checks if the string (filename) provided is an image URL
|
142 |
*
|
143 |
* @since 1.0
|
144 |
-
* @param string $
|
145 |
* @return bool Whether or not the filename is an image
|
146 |
*/
|
147 |
-
function edd_string_is_image_url( $
|
148 |
-
$ext
|
|
|
149 |
|
150 |
-
|
151 |
-
case 'jpg';
|
152 |
-
$return = true;
|
153 |
-
break;
|
154 |
-
case 'png';
|
155 |
-
$return = true;
|
156 |
-
break;
|
157 |
-
case 'gif';
|
158 |
-
$return = true;
|
159 |
-
break;
|
160 |
-
default:
|
161 |
-
$return = false;
|
162 |
-
break;
|
163 |
-
}
|
164 |
-
|
165 |
-
return (bool) apply_filters( 'edd_string_is_image', $return, $str );
|
166 |
}
|
167 |
|
168 |
/**
|
@@ -1051,6 +1037,40 @@ function edd_is_promo_active() {
|
|
1051 |
return false;
|
1052 |
}
|
1053 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1054 |
/**
|
1055 |
* Polyfills for is_countable and is_iterable
|
1056 |
*
|
141 |
* Checks if the string (filename) provided is an image URL
|
142 |
*
|
143 |
* @since 1.0
|
144 |
+
* @param string $filename Filename
|
145 |
* @return bool Whether or not the filename is an image
|
146 |
*/
|
147 |
+
function edd_string_is_image_url( $filename ) {
|
148 |
+
$ext = edd_get_file_extension( $filename );
|
149 |
+
$images = array( 'jpg', 'jpeg', 'png', 'gif', 'webp' );
|
150 |
|
151 |
+
return (bool) apply_filters( 'edd_string_is_image', in_array( $ext, $images, true ), $filename );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
}
|
153 |
|
154 |
/**
|
1037 |
return false;
|
1038 |
}
|
1039 |
|
1040 |
+
/**
|
1041 |
+
* Gets the date that this EDD install was activated (for new installs).
|
1042 |
+
* For existing installs, this option is added whenever the function is first used.
|
1043 |
+
*
|
1044 |
+
* @since 2.11.4
|
1045 |
+
* @return int The timestamp when EDD was marked as activated.
|
1046 |
+
*/
|
1047 |
+
function edd_get_activation_date() {
|
1048 |
+
$activation_date = get_option( 'edd_activation_date', '' );
|
1049 |
+
if ( ! $activation_date ) {
|
1050 |
+
$activation_date = time();
|
1051 |
+
// Gets the first order placed in the store (any status).
|
1052 |
+
$payments = edd_get_payments(
|
1053 |
+
array(
|
1054 |
+
'output' => 'posts',
|
1055 |
+
'number' => 1,
|
1056 |
+
'orderby' => 'ID',
|
1057 |
+
'order' => 'ASC',
|
1058 |
+
'no_found_rows' => true,
|
1059 |
+
)
|
1060 |
+
);
|
1061 |
+
if ( $payments ) {
|
1062 |
+
$first_payment = reset( $payments );
|
1063 |
+
// Use just the post date, rather than looking for the completed date (first payment may not be complete).
|
1064 |
+
if ( ! empty( $first_payment->post_date_gmt ) ) {
|
1065 |
+
$activation_date = strtotime( $first_payment->post_date_gmt );
|
1066 |
+
}
|
1067 |
+
}
|
1068 |
+
update_option( 'edd_activation_date', $activation_date );
|
1069 |
+
}
|
1070 |
+
|
1071 |
+
return $activation_date;
|
1072 |
+
}
|
1073 |
+
|
1074 |
/**
|
1075 |
* Polyfills for is_countable and is_iterable
|
1076 |
*
|
includes/models/Notification.php
ADDED
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Notification.php
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace EDD\Models;
|
12 |
+
|
13 |
+
class Notification {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var int Unique internal ID.
|
17 |
+
*/
|
18 |
+
public $id;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @var null|int ID from the remote feed. If `null` then this notification was added internally
|
22 |
+
* and not via the remote import.
|
23 |
+
*/
|
24 |
+
public $remote_id = null;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @var string Title of the notification.
|
28 |
+
*/
|
29 |
+
public $title;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var string Notification content.
|
33 |
+
*/
|
34 |
+
public $content;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @var array|null Button information, if set.
|
38 |
+
*/
|
39 |
+
public $buttons;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @var string Notification type, including: `warning`, `error`, `info`, or `success`.
|
43 |
+
*/
|
44 |
+
public $type;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @var array|null Conditions that must be met to display this notification. If `null`
|
48 |
+
* then there are no conditions.
|
49 |
+
*/
|
50 |
+
public $conditions = null;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @var null|string Date to start displaying the notification.
|
54 |
+
*/
|
55 |
+
public $start = null;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @var null|string Date to stop displaying the notification.
|
59 |
+
*/
|
60 |
+
public $end = null;
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @var bool Whether this notification has been dismissed by the user.
|
64 |
+
*/
|
65 |
+
public $dismissed = false;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* @var string Date the notification was added to the database.
|
69 |
+
*/
|
70 |
+
public $date_created;
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @var string Date the notification was last updated in the database.
|
74 |
+
*/
|
75 |
+
public $date_updated;
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @var string[]
|
79 |
+
*/
|
80 |
+
protected $casts = array(
|
81 |
+
'id' => 'int',
|
82 |
+
'remote_id' => 'int',
|
83 |
+
'buttons' => 'array',
|
84 |
+
'conditions' => 'array',
|
85 |
+
'dismissed' => 'bool',
|
86 |
+
);
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Constructor
|
90 |
+
*
|
91 |
+
* @param array $data Row from the database.
|
92 |
+
*/
|
93 |
+
public function __construct( $data = array() ) {
|
94 |
+
foreach ( $data as $property => $value ) {
|
95 |
+
if ( property_exists( $this, $property ) ) {
|
96 |
+
$this->{$property} = $this->castAttribute( $property, $value );
|
97 |
+
}
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Casts a property to its designated type.
|
103 |
+
*
|
104 |
+
* @todo Move to trait or base class.
|
105 |
+
*
|
106 |
+
* @since 2.11.4
|
107 |
+
*
|
108 |
+
* @param string $propertyName
|
109 |
+
* @param mixed $value
|
110 |
+
*
|
111 |
+
* @return bool|float|int|mixed|string|null
|
112 |
+
*/
|
113 |
+
private function castAttribute( $propertyName, $value ) {
|
114 |
+
if ( ! array_key_exists( $propertyName, $this->casts ) ) {
|
115 |
+
return $value;
|
116 |
+
}
|
117 |
+
|
118 |
+
// Let null be null.
|
119 |
+
if ( is_null( $value ) ) {
|
120 |
+
return null;
|
121 |
+
}
|
122 |
+
|
123 |
+
switch ( $this->casts[ $propertyName ] ) {
|
124 |
+
case 'array' :
|
125 |
+
return json_decode( $value, true );
|
126 |
+
case 'bool' :
|
127 |
+
return (bool) $value;
|
128 |
+
case 'float' :
|
129 |
+
return (float) $value;
|
130 |
+
case 'int' :
|
131 |
+
return (int) $value;
|
132 |
+
case 'string' :
|
133 |
+
return (string) $value;
|
134 |
+
default :
|
135 |
+
return $value;
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Returns the icon name to use for this notification type.
|
141 |
+
*
|
142 |
+
* @since 2.11.4
|
143 |
+
*
|
144 |
+
* @return string
|
145 |
+
*/
|
146 |
+
public function getIcon() {
|
147 |
+
switch ( $this->type ) {
|
148 |
+
case 'warning' :
|
149 |
+
return 'warning';
|
150 |
+
case 'error' :
|
151 |
+
return 'dismiss';
|
152 |
+
case 'info' :
|
153 |
+
return 'admin-generic';
|
154 |
+
case 'success' :
|
155 |
+
default :
|
156 |
+
return 'yes-alt';
|
157 |
+
}
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Converts this model to an array.
|
162 |
+
*
|
163 |
+
* @todo Move to trait.
|
164 |
+
*
|
165 |
+
* @since 2.11.4
|
166 |
+
*
|
167 |
+
* @return array
|
168 |
+
*/
|
169 |
+
public function toArray() {
|
170 |
+
$data = array();
|
171 |
+
|
172 |
+
/*
|
173 |
+
* get_object_vars() returns non-public properties when used within the class
|
174 |
+
* so we're using a ReflectionClass to get the public properties only.
|
175 |
+
*/
|
176 |
+
$object = new \ReflectionClass( $this );
|
177 |
+
|
178 |
+
foreach ( $object->getProperties( \ReflectionProperty::IS_PUBLIC ) as $property ) {
|
179 |
+
if ( $property instanceof \ReflectionProperty && isset( $this->{$property->name} ) ) {
|
180 |
+
$data[ $property->name ] = $this->{$property->name};
|
181 |
+
}
|
182 |
+
}
|
183 |
+
|
184 |
+
$data['icon_name'] = $this->getIcon();
|
185 |
+
|
186 |
+
/* Translators: %s - a length of time (e.g. "1 second") */
|
187 |
+
$data['relative_date'] = sprintf( __( '%s ago', 'easy-digital-downloads' ), human_time_diff( strtotime( $this->date_created ) ) );
|
188 |
+
|
189 |
+
return $data;
|
190 |
+
}
|
191 |
+
|
192 |
+
}
|
includes/process-download.php
CHANGED
@@ -699,6 +699,7 @@ function edd_get_file_ctype( $extension ) {
|
|
699 |
case 'wav' : $ctype = "audio/x-wav"; break;
|
700 |
case 'wbmp' : $ctype = "image/vnd.wap.wbmp"; break;
|
701 |
case 'wbmxl' : $ctype = "application/vnd.wap.wbxml"; break;
|
|
|
702 |
case 'wm' : $ctype = "video/x-ms-wm"; break;
|
703 |
case 'wml' : $ctype = "text/vnd.wap.wml"; break;
|
704 |
case 'wmlc' : $ctype = "application/vnd.wap.wmlc"; break;
|
699 |
case 'wav' : $ctype = "audio/x-wav"; break;
|
700 |
case 'wbmp' : $ctype = "image/vnd.wap.wbmp"; break;
|
701 |
case 'wbmxl' : $ctype = "application/vnd.wap.wbxml"; break;
|
702 |
+
case 'webp' : $ctype = "image/webp"; break;
|
703 |
case 'wm' : $ctype = "video/x-ms-wm"; break;
|
704 |
case 'wml' : $ctype = "text/vnd.wap.wml"; break;
|
705 |
case 'wmlc' : $ctype = "application/vnd.wap.wmlc"; break;
|
includes/scripts.php
CHANGED
@@ -237,6 +237,14 @@ function edd_load_admin_scripts( $hook ) {
|
|
237 |
'wait' => __( 'Please wait …', 'easy-digital-downloads' ),
|
238 |
));
|
239 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
/*
|
241 |
* This bit of JavaScript is to facilitate #2704, in order to not break backwards compatibility with the old Variable Price Rows
|
242 |
* while we transition to an entire new markup. They should not be relied on for long-term usage.
|
@@ -277,6 +285,17 @@ function edd_load_admin_scripts( $hook ) {
|
|
277 |
}
|
278 |
add_action( 'admin_enqueue_scripts', 'edd_load_admin_scripts', 100 );
|
279 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
/**
|
281 |
* Admin Downloads Icon
|
282 |
*
|
237 |
'wait' => __( 'Please wait …', 'easy-digital-downloads' ),
|
238 |
));
|
239 |
|
240 |
+
wp_register_script( 'alpinejs', $js_dir . 'alpine.min.js', array(), '3.4.2', false );
|
241 |
+
wp_register_script( 'edd-admin-notifications', $js_dir . 'admin-notifications.js', array( 'alpinejs' ), EDD_VERSION, false );
|
242 |
+
wp_enqueue_script( 'edd-admin-notifications' );
|
243 |
+
wp_localize_script( 'edd-admin-notifications', 'eddNotificationsVars', array(
|
244 |
+
'restBase' => rest_url( \EDD\API\v3\Endpoint::$namespace ),
|
245 |
+
'restNonce' => wp_create_nonce( 'wp_rest' ),
|
246 |
+
) );
|
247 |
+
|
248 |
/*
|
249 |
* This bit of JavaScript is to facilitate #2704, in order to not break backwards compatibility with the old Variable Price Rows
|
250 |
* while we transition to an entire new markup. They should not be relied on for long-term usage.
|
285 |
}
|
286 |
add_action( 'admin_enqueue_scripts', 'edd_load_admin_scripts', 100 );
|
287 |
|
288 |
+
/**
|
289 |
+
* Add `defer` to the AlpineJS script tag.
|
290 |
+
*/
|
291 |
+
add_filter( 'script_loader_tag', function( $url ) {
|
292 |
+
if ( false !== strpos( $url, EDD_PLUGIN_URL . 'assets/js/alpine.min.js' ) ) {
|
293 |
+
$url = str_replace( ' src', ' defer src', $url );
|
294 |
+
}
|
295 |
+
|
296 |
+
return $url;
|
297 |
+
} );
|
298 |
+
|
299 |
/**
|
300 |
* Admin Downloads Icon
|
301 |
*
|
includes/utils/EnvironmentChecker.php
ADDED
@@ -0,0 +1,227 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* EnvironmentChecker.php
|
4 |
+
*
|
5 |
+
* Checks to see if the environment matches the passed conditions.
|
6 |
+
* Supported conditions include:
|
7 |
+
*
|
8 |
+
* - EDD version number -- either specific versions or wildcards (e.g. "2.x").
|
9 |
+
* - Type of license (pass level, à la carte, free).
|
10 |
+
*
|
11 |
+
* @package easy-digital-downloads
|
12 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
13 |
+
* @license GPL2+
|
14 |
+
* @since 2.11.4
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace EDD\Utils;
|
18 |
+
|
19 |
+
use EDD\Admin\Pass_Manager;
|
20 |
+
|
21 |
+
class EnvironmentChecker {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var Pass_Manager
|
25 |
+
*/
|
26 |
+
protected $passManager;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Types of license/pass conditions that we support.
|
30 |
+
* The key is the condition slug and the value is the corresponding
|
31 |
+
* method to call in the `Pass_Manager` class to check the condition.
|
32 |
+
*
|
33 |
+
* @since 2.11.4
|
34 |
+
*
|
35 |
+
* @var string[]
|
36 |
+
*/
|
37 |
+
protected $validLicenseConditions = array(
|
38 |
+
'free' => 'isFree',
|
39 |
+
'ala-carte' => 'hasIndividualLicense',
|
40 |
+
'pass-personal' => 'hasPersonalPass',
|
41 |
+
'pass-extended' => 'hasExtendedPass',
|
42 |
+
'pass-professional' => 'hasProfessionalPass',
|
43 |
+
'pass-all-access' => 'hasAllAccessPass',
|
44 |
+
'pass-any' => 'has_pass',
|
45 |
+
);
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Constructor.
|
49 |
+
*/
|
50 |
+
public function __construct() {
|
51 |
+
$this->passManager = new Pass_Manager();
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Checks to see if this environment meets the specified condition.
|
56 |
+
*
|
57 |
+
* @since 2.11.4
|
58 |
+
*
|
59 |
+
* @param string $condition Condition to check. Can either be a type of license/pass or a version number.
|
60 |
+
*
|
61 |
+
* @return bool
|
62 |
+
* @throws \InvalidArgumentException
|
63 |
+
*/
|
64 |
+
public function meetsCondition( $condition ) {
|
65 |
+
if ( array_key_exists( $condition, $this->validLicenseConditions ) ) {
|
66 |
+
return $this->hasLicenseType( $condition );
|
67 |
+
} elseif ( $this->isPaymentGateway( $condition ) ) {
|
68 |
+
return $this->paymentGatewayMatch( array_keys( edd_get_enabled_payment_gateways() ), $condition );
|
69 |
+
} elseif ( $this->isVersionNumber( $condition ) ) {
|
70 |
+
return $this->versionNumbersMatch( EDD_VERSION, $condition );
|
71 |
+
}
|
72 |
+
|
73 |
+
throw new \InvalidArgumentException( 'Invalid condition. Must either be a type of license or a version number.' );
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Checks to see if this environment meets all the specified conditions. If any one condition
|
78 |
+
* is not met then this returns false.
|
79 |
+
*
|
80 |
+
* @since 2.11.4
|
81 |
+
*
|
82 |
+
* @param array $conditions
|
83 |
+
*
|
84 |
+
* @return bool
|
85 |
+
*/
|
86 |
+
public function meetsConditions( $conditions ) {
|
87 |
+
foreach ( $conditions as $condition ) {
|
88 |
+
if ( ! $this->meetsCondition( $condition ) ) {
|
89 |
+
return false;
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
return true;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Determines if the site has the specified pass condition.
|
98 |
+
*
|
99 |
+
* @see EnvironmentChecker::$validLicenseConditions
|
100 |
+
*
|
101 |
+
* @since 2.11.4
|
102 |
+
*
|
103 |
+
* @param string $passLevel License type that we're checking to see if the system has.
|
104 |
+
*
|
105 |
+
* @return bool
|
106 |
+
* @throws \InvalidArgumentException
|
107 |
+
*/
|
108 |
+
protected function hasLicenseType( $passLevel ) {
|
109 |
+
$method = isset( $this->validLicenseConditions[ $passLevel ] )
|
110 |
+
? $this->validLicenseConditions[ $passLevel ]
|
111 |
+
: false;
|
112 |
+
|
113 |
+
if ( ! $method || ! method_exists( $this->passManager, $method ) ) {
|
114 |
+
throw new \InvalidArgumentException( sprintf( 'Method %s not found in Pass_Manager.', $method ) );
|
115 |
+
}
|
116 |
+
|
117 |
+
return call_user_func( array( $this->passManager, $method ) );
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Determines if the provided condition is a payment gateway.
|
122 |
+
*
|
123 |
+
* @since 2.11.4
|
124 |
+
*
|
125 |
+
* @param string $condition
|
126 |
+
*
|
127 |
+
* @return bool
|
128 |
+
*/
|
129 |
+
protected function isPaymentGateway( $condition ) {
|
130 |
+
return 'gateway-' === substr( $condition, 0, 8 );
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Determines if the supplied gateway condition is applicable to this site.
|
135 |
+
* Will return `true` if the condition is the slug of a payment gateway (potentially with a `gateway-` prefix)
|
136 |
+
* that's enabled on this site.
|
137 |
+
*
|
138 |
+
* @since 2.11.4
|
139 |
+
*
|
140 |
+
* @param array $enabledGateways Gateways that are enabled on this site.
|
141 |
+
* @param string $condition Gateway we're checking to see if it's enabled.
|
142 |
+
*
|
143 |
+
* @return bool True if the gateway is enabled, false if not.
|
144 |
+
*/
|
145 |
+
public function paymentGatewayMatch( $enabledGateways, $condition ) {
|
146 |
+
$gatewayToCheck = str_replace( 'gateway-', '', $condition );
|
147 |
+
|
148 |
+
return in_array( $gatewayToCheck, $enabledGateways, true );
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Determines if the provided condition is a version number.
|
153 |
+
*
|
154 |
+
* @since 2.11.4
|
155 |
+
*
|
156 |
+
* @param string $condition
|
157 |
+
*
|
158 |
+
* @return bool
|
159 |
+
*/
|
160 |
+
protected function isVersionNumber( $condition ) {
|
161 |
+
// First character should always be numeric.
|
162 |
+
if ( ! is_numeric( substr( $condition, 0, 1 ) ) ) {
|
163 |
+
return false;
|
164 |
+
}
|
165 |
+
|
166 |
+
// Must contain at least one `.` or `-`.
|
167 |
+
return false !== strpos( $condition, '.' ) || false !== strpos( $condition, '-' );
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Determines if two version numbers match, or if the `$currentVersion` falls within the wildcard
|
172 |
+
* range specified by `$compareVersion`.
|
173 |
+
*
|
174 |
+
* @since 2.11.4
|
175 |
+
*
|
176 |
+
* @param string $currentVersion Version number currently in use. This must be a full, exact version number.
|
177 |
+
* @param string $compareVersion Version to compare with. This can either be an exact version number or a
|
178 |
+
* wildcard (e.g. `2.11.3` or `2.x`). Hyphens are also accepted in lieu of
|
179 |
+
* full stops (e.g. `2-11-3` or `2-x`).
|
180 |
+
*
|
181 |
+
* @return bool
|
182 |
+
* @throws \InvalidArgumentException
|
183 |
+
*/
|
184 |
+
public function versionNumbersMatch( $currentVersion, $compareVersion ) {
|
185 |
+
$currentVersionPieces = explode( '.', $currentVersion );
|
186 |
+
|
187 |
+
if ( false !== strpos( $compareVersion, '.' ) ) {
|
188 |
+
$compareVersionPieces = explode( '.', $compareVersion );
|
189 |
+
} else if ( false !== strpos( $compareVersion, '-' ) ) {
|
190 |
+
$compareVersionPieces = explode( '-', $compareVersion );
|
191 |
+
} else {
|
192 |
+
throw new \InvalidArgumentException( sprintf(
|
193 |
+
'Invalid version number: %s',
|
194 |
+
$compareVersion
|
195 |
+
) );
|
196 |
+
}
|
197 |
+
|
198 |
+
$numberCurrentVersionParts = count( $currentVersionPieces );
|
199 |
+
$numberCompareVersionParts = count( $compareVersionPieces );
|
200 |
+
|
201 |
+
/*
|
202 |
+
* Normalize the two parts so that they have the same lengths and
|
203 |
+
* wildcards (`x`) are removed.
|
204 |
+
*/
|
205 |
+
for ( $i = 0; $i < $numberCurrentVersionParts || $i < $numberCompareVersionParts; $i ++ ) {
|
206 |
+
if ( isset( $compareVersionPieces[ $i ] ) && 'x' === strtolower( $compareVersionPieces[ $i ] ) ) {
|
207 |
+
unset( $compareVersionPieces[ $i ] );
|
208 |
+
}
|
209 |
+
|
210 |
+
if ( ! isset( $currentVersionPieces[ $i ] ) ) {
|
211 |
+
unset( $compareVersionPieces[ $i ] );
|
212 |
+
} elseif ( ! isset( $compareVersionPieces[ $i ] ) ) {
|
213 |
+
unset( $currentVersionPieces[ $i ] );
|
214 |
+
}
|
215 |
+
}
|
216 |
+
|
217 |
+
// Now make sure all the numbers match.
|
218 |
+
foreach ( $compareVersionPieces as $index => $versionPiece ) {
|
219 |
+
if ( ! isset( $currentVersionPieces[ $index ] ) || $currentVersionPieces[ $index ] !== $versionPiece ) {
|
220 |
+
return false;
|
221 |
+
}
|
222 |
+
}
|
223 |
+
|
224 |
+
return true;
|
225 |
+
}
|
226 |
+
|
227 |
+
}
|
includes/utils/NotificationImporter.php
ADDED
@@ -0,0 +1,228 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* NotificationImporter.php
|
4 |
+
*
|
5 |
+
* @package easy-digital-downloads
|
6 |
+
* @copyright Copyright (c) 2021, Easy Digital Downloads
|
7 |
+
* @license GPL2+
|
8 |
+
* @since 2.11.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
namespace EDD\Utils;
|
12 |
+
|
13 |
+
class NotificationImporter {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var EnvironmentChecker
|
17 |
+
*/
|
18 |
+
protected $environmentChecker;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Constructor
|
22 |
+
*/
|
23 |
+
public function __construct() {
|
24 |
+
$this->environmentChecker = new EnvironmentChecker();
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Fetches notifications from the API and imports them locally.
|
29 |
+
*
|
30 |
+
* @since 2.11.4
|
31 |
+
*/
|
32 |
+
public function run() {
|
33 |
+
edd_debug_log( 'Fetching notifications via ' . $this->getApiEndpoint() );
|
34 |
+
|
35 |
+
try {
|
36 |
+
$notifications = $this->fetchNotifications();
|
37 |
+
} catch ( \Exception $e ) {
|
38 |
+
edd_debug_log( sprintf( 'Notification fetch exception: %s', $e->getMessage() ) );
|
39 |
+
|
40 |
+
return;
|
41 |
+
}
|
42 |
+
|
43 |
+
foreach ( $notifications as $notification ) {
|
44 |
+
$notificationId = isset( $notification->id ) ? $notification->id : 'unknown';
|
45 |
+
|
46 |
+
edd_debug_log( sprintf( 'Processing notification ID %s', $notificationId ) );
|
47 |
+
|
48 |
+
try {
|
49 |
+
$this->validateNotification( $notification );
|
50 |
+
|
51 |
+
$existingId = EDD()->notifications->get_column_by( 'id', 'remote_id', $notification->id );
|
52 |
+
if ( $existingId ) {
|
53 |
+
edd_debug_log( '-- Updating existing notification.' );
|
54 |
+
|
55 |
+
$this->updateExistingNotification( $existingId, $notification );
|
56 |
+
} else {
|
57 |
+
edd_debug_log( '-- Inserting new notification.' );
|
58 |
+
|
59 |
+
$this->insertNewNotification( $notification );
|
60 |
+
}
|
61 |
+
} catch ( \Exception $e ) {
|
62 |
+
edd_debug_log( sprintf( '-- Notification processing failure for ID %s: %s', $notificationId, $e->getMessage() ) );
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Returns the API endpoint to query.
|
69 |
+
*
|
70 |
+
* @since 2.11.4
|
71 |
+
*
|
72 |
+
* @return string
|
73 |
+
*/
|
74 |
+
protected function getApiEndpoint() {
|
75 |
+
if ( defined( 'EDD_NOTIFICATIONS_API_URL' ) ) {
|
76 |
+
return EDD_NOTIFICATIONS_API_URL;
|
77 |
+
}
|
78 |
+
|
79 |
+
return 'https://plugin.easydigitaldownloads.com/wp-content/notifications.json';
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Retrieves notifications from the remote API endpoint.
|
84 |
+
*
|
85 |
+
* @since 2.11.4
|
86 |
+
*
|
87 |
+
* @return array
|
88 |
+
* @throws \Exception
|
89 |
+
*/
|
90 |
+
public function fetchNotifications() {
|
91 |
+
$response = wp_remote_get( $this->getApiEndpoint() );
|
92 |
+
|
93 |
+
if ( is_wp_error( $response ) ) {
|
94 |
+
throw new \Exception( $response->get_error_message() );
|
95 |
+
}
|
96 |
+
|
97 |
+
$notifications = wp_remote_retrieve_body( $response );
|
98 |
+
|
99 |
+
return ! empty( $notifications ) ? json_decode( $notifications ) : array();
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Validates the notification from the remote API to make sure we actually
|
104 |
+
* want to save it.
|
105 |
+
*
|
106 |
+
* @since 2.11.4
|
107 |
+
*
|
108 |
+
* @param object $notification
|
109 |
+
*
|
110 |
+
* @throws \Exception
|
111 |
+
*/
|
112 |
+
public function validateNotification( $notification ) {
|
113 |
+
// Make sure we have all the required data.
|
114 |
+
$requiredProperties = array(
|
115 |
+
'id',
|
116 |
+
'title',
|
117 |
+
'content',
|
118 |
+
);
|
119 |
+
|
120 |
+
$missing = array_diff( $requiredProperties, array_keys( get_object_vars( $notification ) ) );
|
121 |
+
if ( $missing ) {
|
122 |
+
throw new \Exception( sprintf( 'Missing required properties: %s', json_encode( array_values( $missing ) ) ) );
|
123 |
+
}
|
124 |
+
|
125 |
+
// Don't save the notification if it has expired.
|
126 |
+
if ( ! empty( $notification->end ) && time() > strtotime( $notification->end ) ) {
|
127 |
+
throw new \Exception( 'Notification has expired.' );
|
128 |
+
}
|
129 |
+
|
130 |
+
// Ignore if notification was created before EDD was installed.
|
131 |
+
if ( ! empty( $notification->start ) && edd_get_activation_date() > strtotime( $notification->start ) ) {
|
132 |
+
throw new \Exception( 'Notification created prior to EDD activation.' );
|
133 |
+
}
|
134 |
+
|
135 |
+
if (
|
136 |
+
! empty( $notification->type ) &&
|
137 |
+
is_array( $notification->type ) &&
|
138 |
+
! $this->environmentChecker->meetsConditions( $notification->type )
|
139 |
+
) {
|
140 |
+
throw new \Exception( 'Condition(s) not met.' );
|
141 |
+
}
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Retrieves the array of notification data to insert into the database.
|
146 |
+
* Use in both inserts and updates.
|
147 |
+
*
|
148 |
+
* @since 2.11.4
|
149 |
+
*
|
150 |
+
* @param object $notification
|
151 |
+
*
|
152 |
+
* @return array
|
153 |
+
*/
|
154 |
+
protected function getNotificationData( $notification ) {
|
155 |
+
return array(
|
156 |
+
'remote_id' => $notification->id,
|
157 |
+
'title' => $notification->title,
|
158 |
+
'content' => $notification->content,
|
159 |
+
'buttons' => $this->parseButtons( $notification ),
|
160 |
+
'type' => ! empty( $notification->notification_type ) ? $notification->notification_type : 'success',
|
161 |
+
'conditions' => ! empty( $notification->type ) ? $notification->type : null,
|
162 |
+
'start' => ! empty( $notification->start ) ? $notification->start : null,
|
163 |
+
'end' => ! empty( $notification->end ) ? $notification->end : null,
|
164 |
+
);
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Parses and formats buttons from the remote notification object.
|
169 |
+
*
|
170 |
+
* @since 2.11.4
|
171 |
+
*
|
172 |
+
* @param object $notification
|
173 |
+
*
|
174 |
+
* @return array|null
|
175 |
+
*/
|
176 |
+
protected function parseButtons( $notification ) {
|
177 |
+
if ( empty( $notification->btns ) ) {
|
178 |
+
return null;
|
179 |
+
}
|
180 |
+
|
181 |
+
$buttons = array();
|
182 |
+
|
183 |
+
foreach ( (array) $notification->btns as $buttonType => $buttonInfo ) {
|
184 |
+
if ( empty( $buttonInfo->url ) || empty( $buttonInfo->text ) ) {
|
185 |
+
continue;
|
186 |
+
}
|
187 |
+
|
188 |
+
$buttons[] = array(
|
189 |
+
'type' => ( 'main' === $buttonType ) ? 'primary' : 'secondary',
|
190 |
+
'url' => $buttonInfo->url,
|
191 |
+
'text' => $buttonInfo->text,
|
192 |
+
);
|
193 |
+
}
|
194 |
+
|
195 |
+
return ! empty( $buttons ) ? $buttons : null;
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Inserts a new notification into the database.
|
200 |
+
*
|
201 |
+
* @since 2.11.4
|
202 |
+
*
|
203 |
+
* @param object $notification
|
204 |
+
* @throws \Exception
|
205 |
+
*/
|
206 |
+
protected function insertNewNotification( $notification ) {
|
207 |
+
$result = EDD()->notifications->insert( $this->getNotificationData( $notification ) );
|
208 |
+
|
209 |
+
if ( ! $result ) {
|
210 |
+
throw new \Exception( 'Failed to insert into database.' );
|
211 |
+
}
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Updates an existing notification.
|
216 |
+
*
|
217 |
+
* @since 2.11.4
|
218 |
+
*
|
219 |
+
* @param int $existingId
|
220 |
+
* @param object $notification
|
221 |
+
*/
|
222 |
+
protected function updateExistingNotification( $existingId, $notification ) {
|
223 |
+
EDD()->notifications->update( $existingId, wp_parse_args( $this->getNotificationData( $notification ), array(
|
224 |
+
'date_updated' => gmdate( 'Y-m-d H:i:s' ),
|
225 |
+
) ) );
|
226 |
+
}
|
227 |
+
|
228 |
+
}
|
languages/easy-digital-downloads.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the same license as the Easy Digital Downloads package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Easy Digital Downloads 2.11.
|
6 |
"Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
|
7 |
-
"POT-Creation-Date: 2021-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -24,7 +24,7 @@ msgstr ""
|
|
24 |
"X-Textdomain-Support: yes\n"
|
25 |
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
26 |
|
27 |
-
#: easy-digital-downloads.php:
|
28 |
msgid "Cheatin’ huh?"
|
29 |
msgstr ""
|
30 |
|
@@ -104,9 +104,9 @@ msgstr ""
|
|
104 |
#: includes/api/class-edd-api.php:1980 includes/api/class-edd-api.php:1985
|
105 |
#: includes/api/class-edd-api.php:1997 includes/api/class-edd-api.php:1999
|
106 |
#: includes/cart/class-edd-cart.php:1433 includes/cart/class-edd-cart.php:1447
|
107 |
-
#: includes/class-edd-license-handler.php:
|
108 |
#: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
|
109 |
-
#: includes/deprecated-functions.php:542 includes/download-functions.php:
|
110 |
#: includes/emails/actions.php:53 includes/emails/template.php:243
|
111 |
#: includes/error-tracking.php:60 includes/gateways/functions.php:243
|
112 |
#: includes/gateways/manual.php:33
|
@@ -114,9 +114,9 @@ msgstr ""
|
|
114 |
#: includes/gateways/paypal/admin/connect.php:459
|
115 |
#: includes/gateways/paypal/admin/connect.php:597
|
116 |
#: includes/gateways/paypal-standard.php:172
|
117 |
-
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:
|
118 |
#: includes/gateways/stripe/includes/payment-actions.php:1408
|
119 |
-
#: includes/process-download.php:303 includes/process-download.php:
|
120 |
#: includes/query-filters.php:48 includes/user-functions.php:895
|
121 |
#: includes/user-functions.php:920 includes/user-functions.php:973
|
122 |
msgid "Error"
|
@@ -213,7 +213,7 @@ msgid "Easy Digital Downloads Settings"
|
|
213 |
msgstr ""
|
214 |
|
215 |
#: includes/admin/admin-pages.php:41
|
216 |
-
#: includes/admin/settings/display-settings.php:
|
217 |
msgid "Settings"
|
218 |
msgstr ""
|
219 |
|
@@ -231,8 +231,8 @@ msgid "Easy Digital Downloads Extensions"
|
|
231 |
msgstr ""
|
232 |
|
233 |
#: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
|
234 |
-
#: includes/admin/settings/contextual-help.php:
|
235 |
-
#: includes/admin/settings/register-settings.php:
|
236 |
msgid "Extensions"
|
237 |
msgstr ""
|
238 |
|
@@ -428,35 +428,35 @@ msgid "The purchase receipt has been resent."
|
|
428 |
msgstr ""
|
429 |
|
430 |
#: includes/admin/class-edd-notices.php:225
|
431 |
-
msgid "
|
432 |
msgstr ""
|
433 |
|
434 |
#: includes/admin/class-edd-notices.php:228
|
435 |
-
msgid "The
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: includes/admin/class-edd-notices.php:
|
439 |
-
msgid "The
|
440 |
msgstr ""
|
441 |
|
442 |
#: includes/admin/class-edd-notices.php:240
|
443 |
-
msgid "
|
444 |
msgstr ""
|
445 |
|
446 |
#: includes/admin/class-edd-notices.php:243
|
447 |
-
msgid "
|
448 |
msgstr ""
|
449 |
|
450 |
#: includes/admin/class-edd-notices.php:246
|
451 |
-
msgid "API keys
|
452 |
msgstr ""
|
453 |
|
454 |
#: includes/admin/class-edd-notices.php:249
|
455 |
-
msgid "API keys successfully
|
456 |
msgstr ""
|
457 |
|
458 |
#: includes/admin/class-edd-notices.php:252
|
459 |
-
msgid "
|
460 |
msgstr ""
|
461 |
|
462 |
#: includes/admin/class-edd-notices.php:261
|
@@ -519,7 +519,7 @@ msgstr ""
|
|
519 |
#: includes/admin/discounts/class-discount-codes-table.php:267
|
520 |
#: includes/admin/payments/class-payments-table.php:367
|
521 |
#: includes/admin/payments/class-payments-table.php:435
|
522 |
-
#: includes/admin/settings/register-settings.php:
|
523 |
#: includes/gateways/stripe/includes/template-functions.php:441
|
524 |
#: includes/payments/functions.php:1600
|
525 |
msgid "Delete"
|
@@ -536,7 +536,7 @@ msgstr ""
|
|
536 |
#: includes/admin/downloads/dashboard-columns.php:31
|
537 |
#: includes/admin/payments/view-order-details.php:693
|
538 |
#: includes/admin/reporting/class-export-customers.php:74
|
539 |
-
#: includes/admin/reporting/export/class-batch-export-customers.php:
|
540 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:43
|
541 |
#: includes/privacy-functions.php:589 templates/shortcode-receipt.php:123
|
542 |
msgid "Name"
|
@@ -556,6 +556,7 @@ msgid "Total Spent"
|
|
556 |
msgstr ""
|
557 |
|
558 |
#: includes/admin/customers/class-customer-table.php:180
|
|
|
559 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:44
|
560 |
#: includes/privacy-functions.php:593
|
561 |
msgid "Date Created"
|
@@ -640,7 +641,7 @@ msgstr ""
|
|
640 |
#: includes/admin/import/import-functions.php:113
|
641 |
#: includes/admin/reporting/export/export-actions.php:23
|
642 |
#: includes/api/class-edd-api.php:1980
|
643 |
-
#: includes/class-edd-license-handler.php:
|
644 |
msgid "Nonce verification failed"
|
645 |
msgstr ""
|
646 |
|
@@ -729,7 +730,7 @@ msgid "City"
|
|
729 |
msgstr ""
|
730 |
|
731 |
#: includes/admin/customers/customers.php:269
|
732 |
-
#: includes/admin/settings/register-settings.php:
|
733 |
#: includes/admin/tools.php:695 includes/checkout/template.php:435
|
734 |
#: templates/shortcode-profile-editor.php:171
|
735 |
msgid "State / Province"
|
@@ -753,6 +754,7 @@ msgid "Customer since %s"
|
|
753 |
msgstr ""
|
754 |
|
755 |
#: includes/admin/customers/customers.php:313
|
|
|
756 |
#: includes/privacy-functions.php:867
|
757 |
msgid "User ID"
|
758 |
msgstr ""
|
@@ -776,7 +778,7 @@ msgstr ""
|
|
776 |
#: includes/admin/payments/view-order-details.php:684
|
777 |
#: includes/admin/payments/view-order-details.php:704
|
778 |
#: includes/admin/thickbox.php:136 includes/class-edd-html-elements.php:796
|
779 |
-
#: includes/gateways/stripe/includes/admin/admin-filters.php:
|
780 |
#: includes/gateways/stripe/includes/template-functions.php:597
|
781 |
#: includes/gateways/stripe/includes/template-functions.php:637
|
782 |
msgid "Cancel"
|
@@ -808,7 +810,7 @@ msgstr ""
|
|
808 |
#: includes/admin/reporting/class-export-customers.php:66
|
809 |
#: includes/admin/reporting/class-export-customers.php:77
|
810 |
#: includes/admin/reporting/class-export-payments.php:61
|
811 |
-
#: includes/admin/reporting/export/class-batch-export-customers.php:
|
812 |
#: includes/admin/reporting/export/class-batch-export-payments.php:41
|
813 |
#: includes/admin/reporting/export/class-batch-export-sales.php:42
|
814 |
#: includes/admin/tools.php:497 templates/shortcode-register.php:25
|
@@ -832,12 +834,12 @@ msgid "Make Primary"
|
|
832 |
msgstr ""
|
833 |
|
834 |
#: includes/admin/customers/customers.php:406
|
835 |
-
#: includes/admin/downloads/metabox.php:
|
836 |
-
#: includes/admin/downloads/metabox.php:
|
837 |
-
#: includes/admin/downloads/metabox.php:
|
838 |
-
#: includes/admin/downloads/metabox.php:
|
839 |
#: includes/admin/payments/view-order-details.php:523
|
840 |
-
#: includes/admin/settings/register-settings.php:
|
841 |
#: templates/checkout_cart.php:57 templates/checkout_cart.php:75
|
842 |
#: templates/shortcode-profile-editor.php:123
|
843 |
msgid "Remove"
|
@@ -927,6 +929,8 @@ msgid "Purchased %s"
|
|
927 |
msgstr ""
|
928 |
|
929 |
#: includes/admin/customers/customers.php:486
|
|
|
|
|
930 |
msgid "View %s"
|
931 |
msgstr ""
|
932 |
|
@@ -1024,13 +1028,13 @@ msgstr ""
|
|
1024 |
msgid "Easy Digital Downloads Sales Summary"
|
1025 |
msgstr ""
|
1026 |
|
1027 |
-
#: includes/admin/dashboard-widgets.php:
|
1028 |
msgid "Current Month"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
-
#: includes/admin/dashboard-widgets.php:
|
1032 |
-
#: includes/admin/dashboard-widgets.php:
|
1033 |
-
#: includes/admin/dashboard-widgets.php:
|
1034 |
#: includes/admin/downloads/dashboard-columns.php:36
|
1035 |
#: includes/admin/reporting/class-download-reports-table.php:110
|
1036 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:58
|
@@ -1040,24 +1044,24 @@ msgstr ""
|
|
1040 |
msgid "Earnings"
|
1041 |
msgstr ""
|
1042 |
|
1043 |
-
#: includes/admin/dashboard-widgets.php:
|
1044 |
-
#: includes/admin/dashboard-widgets.php:
|
1045 |
msgid "Sale"
|
1046 |
msgid_plural "Sales"
|
1047 |
msgstr[0] ""
|
1048 |
msgstr[1] ""
|
1049 |
|
1050 |
-
#: includes/admin/dashboard-widgets.php:
|
1051 |
#: includes/admin/reporting/graphing.php:676 includes/class-edd-stats.php:84
|
1052 |
msgid "Last Month"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
-
#: includes/admin/dashboard-widgets.php:
|
1056 |
#: includes/admin/reporting/graphing.php:670 includes/class-edd-stats.php:79
|
1057 |
msgid "Today"
|
1058 |
msgstr ""
|
1059 |
|
1060 |
-
#: includes/admin/dashboard-widgets.php:
|
1061 |
#: includes/admin/downloads/dashboard-columns.php:35
|
1062 |
#: includes/admin/reporting/class-download-reports-table.php:109
|
1063 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:57
|
@@ -1067,27 +1071,27 @@ msgstr ""
|
|
1067 |
msgid "Sales"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
-
#: includes/admin/dashboard-widgets.php:
|
1071 |
msgid "Totals"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
-
#: includes/admin/dashboard-widgets.php:
|
1075 |
#: includes/admin/reporting/class-categories-reports-table.php:83
|
1076 |
#: includes/admin/tools.php:914
|
1077 |
msgid "Total Earnings"
|
1078 |
msgstr ""
|
1079 |
|
1080 |
-
#: includes/admin/dashboard-widgets.php:
|
1081 |
#: includes/admin/reporting/class-categories-reports-table.php:82
|
1082 |
#: includes/admin/reporting/class-gateways-reports-table.php:91
|
1083 |
msgid "Total Sales"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#: includes/admin/dashboard-widgets.php:
|
1087 |
msgid "Recent Purchases"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
-
#: includes/admin/dashboard-widgets.php:
|
1091 |
msgid "View All"
|
1092 |
msgstr ""
|
1093 |
|
@@ -1323,7 +1327,7 @@ msgstr ""
|
|
1323 |
#: includes/admin/downloads/contextual-help.php:28
|
1324 |
#: includes/admin/payments/contextual-help.php:29
|
1325 |
#: includes/admin/reporting/contextual-help.php:29
|
1326 |
-
#: includes/admin/settings/contextual-help.php:
|
1327 |
msgid "For more information:"
|
1328 |
msgstr ""
|
1329 |
|
@@ -1331,7 +1335,7 @@ msgstr ""
|
|
1331 |
#: includes/admin/downloads/contextual-help.php:29
|
1332 |
#: includes/admin/payments/contextual-help.php:30
|
1333 |
#: includes/admin/reporting/contextual-help.php:30
|
1334 |
-
#: includes/admin/settings/contextual-help.php:
|
1335 |
msgid ""
|
1336 |
"Visit the <a href=\"%s\">documentation</a> on the Easy Digital Downloads "
|
1337 |
"website."
|
@@ -1347,12 +1351,13 @@ msgid ""
|
|
1347 |
msgstr ""
|
1348 |
|
1349 |
#: includes/admin/discounts/contextual-help.php:35
|
1350 |
-
#: includes/admin/settings/contextual-help.php:
|
1351 |
-
#: includes/admin/settings/register-settings.php:
|
1352 |
-
#: includes/admin/settings/register-settings.php:
|
1353 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
|
|
1354 |
#: includes/admin/settings/register-settings.php:1444
|
1355 |
-
#: includes/admin/settings/register-settings.php:1457
|
1356 |
#: includes/admin/tools.php:68
|
1357 |
msgid "General"
|
1358 |
msgstr ""
|
@@ -1627,7 +1632,7 @@ msgstr ""
|
|
1627 |
|
1628 |
#: includes/admin/downloads/dashboard-columns.php:34
|
1629 |
#: includes/admin/downloads/dashboard-columns.php:286
|
1630 |
-
#: includes/admin/downloads/metabox.php:
|
1631 |
#: includes/admin/payments/view-order-details.php:543
|
1632 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:51
|
1633 |
#: templates/shortcode-receipt.php:130
|
@@ -1647,255 +1652,247 @@ msgstr ""
|
|
1647 |
msgid "%s Configuration"
|
1648 |
msgstr ""
|
1649 |
|
1650 |
-
#: includes/admin/downloads/metabox.php:
|
1651 |
msgid "%1$s Prices"
|
1652 |
msgstr ""
|
1653 |
|
1654 |
-
#: includes/admin/downloads/metabox.php:
|
1655 |
msgid "%1$s Files"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
-
#: includes/admin/downloads/metabox.php:
|
1659 |
msgid "%1$s Settings"
|
1660 |
msgstr ""
|
1661 |
|
1662 |
-
#: includes/admin/downloads/metabox.php:
|
1663 |
msgid "%1$s Notes"
|
1664 |
msgstr ""
|
1665 |
|
1666 |
-
#: includes/admin/downloads/metabox.php:
|
1667 |
msgid "%1$s Stats"
|
1668 |
msgstr ""
|
1669 |
|
1670 |
-
#: includes/admin/downloads/metabox.php:
|
1671 |
-
msgid "Product Reviews"
|
1672 |
-
msgstr ""
|
1673 |
-
|
1674 |
-
#: includes/admin/downloads/metabox.php:54
|
1675 |
-
msgid "Black Friday & Cyber Monday sale!"
|
1676 |
-
msgstr ""
|
1677 |
-
|
1678 |
-
#: includes/admin/downloads/metabox.php:314
|
1679 |
msgid "Pricing Options:"
|
1680 |
msgstr ""
|
1681 |
|
1682 |
-
#: includes/admin/downloads/metabox.php:
|
1683 |
msgid "Enable variable pricing"
|
1684 |
msgstr ""
|
1685 |
|
1686 |
-
#: includes/admin/downloads/metabox.php:
|
1687 |
msgid ""
|
1688 |
"Enable multi-option purchase mode. Allows multiple price options to be "
|
1689 |
"added to your cart at once"
|
1690 |
msgstr ""
|
1691 |
|
1692 |
-
#: includes/admin/downloads/metabox.php:
|
1693 |
msgid "Add New Price"
|
1694 |
msgstr ""
|
1695 |
|
1696 |
-
#: includes/admin/downloads/metabox.php:
|
1697 |
msgid "Click and drag to re-order price options"
|
1698 |
msgstr ""
|
1699 |
|
1700 |
-
#: includes/admin/downloads/metabox.php:
|
1701 |
msgid "Price ID: %s"
|
1702 |
msgstr ""
|
1703 |
|
1704 |
-
#: includes/admin/downloads/metabox.php:
|
1705 |
msgid "Show advanced settings"
|
1706 |
msgstr ""
|
1707 |
|
1708 |
-
#: includes/admin/downloads/metabox.php:
|
1709 |
msgid "Remove price option %s"
|
1710 |
msgstr ""
|
1711 |
|
1712 |
-
#: includes/admin/downloads/metabox.php:
|
1713 |
-
#: includes/admin/downloads/metabox.php:
|
1714 |
msgid "Option Name"
|
1715 |
msgstr ""
|
1716 |
|
1717 |
-
#: includes/admin/downloads/metabox.php:
|
1718 |
#: includes/gateways/stripe/includes/template-functions.php:404
|
1719 |
msgid "Default"
|
1720 |
msgstr ""
|
1721 |
|
1722 |
-
#: includes/admin/downloads/metabox.php:
|
1723 |
msgid "Set ID %s as default price"
|
1724 |
msgstr ""
|
1725 |
|
1726 |
-
#: includes/admin/downloads/metabox.php:
|
1727 |
msgid "Product Type Options:"
|
1728 |
msgstr ""
|
1729 |
|
1730 |
-
#: includes/admin/downloads/metabox.php:
|
1731 |
msgid "Select a product type"
|
1732 |
msgstr ""
|
1733 |
|
1734 |
-
#: includes/admin/downloads/metabox.php:
|
1735 |
msgid ""
|
1736 |
"<strong>Product Type</strong>: Sell this item as a single product, or use "
|
1737 |
"the Bundle type to sell a collection of products."
|
1738 |
msgstr ""
|
1739 |
|
1740 |
-
#: includes/admin/downloads/metabox.php:
|
1741 |
msgid "Bundled %s"
|
1742 |
msgstr ""
|
1743 |
|
1744 |
-
#: includes/admin/downloads/metabox.php:
|
1745 |
-
#: includes/admin/downloads/metabox.php:
|
1746 |
msgid "Click and drag to re-order bundled %s"
|
1747 |
msgstr ""
|
1748 |
|
1749 |
-
#: includes/admin/downloads/metabox.php:
|
1750 |
-
#: includes/admin/downloads/metabox.php:
|
1751 |
msgid "Select %s:"
|
1752 |
msgstr ""
|
1753 |
|
1754 |
-
#: includes/admin/downloads/metabox.php:
|
1755 |
-
#: includes/admin/downloads/metabox.php:
|
1756 |
msgid "Price assignment:"
|
1757 |
msgstr ""
|
1758 |
|
1759 |
-
#: includes/admin/downloads/metabox.php:
|
1760 |
msgid "Remove bundle option %s"
|
1761 |
msgstr ""
|
1762 |
|
1763 |
-
#: includes/admin/downloads/metabox.php:
|
1764 |
msgid "Bundled %s:"
|
1765 |
msgstr ""
|
1766 |
|
1767 |
-
#: includes/admin/downloads/metabox.php:
|
1768 |
msgid "Remove bundle option 1"
|
1769 |
msgstr ""
|
1770 |
|
1771 |
-
#: includes/admin/downloads/metabox.php:
|
1772 |
-
#: includes/admin/downloads/metabox.php:
|
1773 |
msgid "Add New File"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
-
#: includes/admin/downloads/metabox.php:
|
1777 |
msgid "Click and drag to re-order files"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
-
#: includes/admin/downloads/metabox.php:
|
1781 |
msgid "%1$s file ID: %2$s"
|
1782 |
msgstr ""
|
1783 |
|
1784 |
-
#: includes/admin/downloads/metabox.php:
|
1785 |
msgid "Remove file %s"
|
1786 |
msgstr ""
|
1787 |
|
1788 |
-
#: includes/admin/downloads/metabox.php:
|
1789 |
-
#: includes/admin/downloads/metabox.php:
|
1790 |
msgid "File Name"
|
1791 |
msgstr ""
|
1792 |
|
1793 |
-
#: includes/admin/downloads/metabox.php:
|
1794 |
msgid "File URL"
|
1795 |
msgstr ""
|
1796 |
|
1797 |
-
#: includes/admin/downloads/metabox.php:
|
1798 |
msgid "Upload or enter the file URL"
|
1799 |
msgstr ""
|
1800 |
|
1801 |
-
#: includes/admin/downloads/metabox.php:
|
1802 |
msgid "Insert File"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
-
#: includes/admin/downloads/metabox.php:
|
1806 |
msgid "Insert"
|
1807 |
msgstr ""
|
1808 |
|
1809 |
-
#: includes/admin/downloads/metabox.php:
|
1810 |
msgid "Upload a File"
|
1811 |
msgstr ""
|
1812 |
|
1813 |
-
#: includes/admin/downloads/metabox.php:
|
1814 |
msgid "Price Assignment"
|
1815 |
msgstr ""
|
1816 |
|
1817 |
-
#: includes/admin/downloads/metabox.php:
|
1818 |
msgid ""
|
1819 |
"<strong>Price Assignment</strong>: With variable pricing enabled, you can "
|
1820 |
"choose to allow certain price variations access to specific files, or allow "
|
1821 |
"all price variations to access a file."
|
1822 |
msgstr ""
|
1823 |
|
1824 |
-
#: includes/admin/downloads/metabox.php:
|
1825 |
msgid "Insert into %s"
|
1826 |
msgstr ""
|
1827 |
|
1828 |
-
#: includes/admin/downloads/metabox.php:
|
1829 |
msgid "File Download Limit:"
|
1830 |
msgstr ""
|
1831 |
|
1832 |
-
#: includes/admin/downloads/metabox.php:
|
1833 |
msgid "Leave blank for global setting or 0 for unlimited"
|
1834 |
msgstr ""
|
1835 |
|
1836 |
-
#: includes/admin/downloads/metabox.php:
|
1837 |
msgid ""
|
1838 |
"<strong>File Download Limit</strong>: Limit the number of times a customer "
|
1839 |
"who purchased this product can access their download links."
|
1840 |
msgstr ""
|
1841 |
|
1842 |
-
#: includes/admin/downloads/metabox.php:
|
1843 |
msgid "Ignore Tax:"
|
1844 |
msgstr ""
|
1845 |
|
1846 |
-
#: includes/admin/downloads/metabox.php:
|
1847 |
msgid "Mark this product as exclusive of tax"
|
1848 |
msgstr ""
|
1849 |
|
1850 |
-
#: includes/admin/downloads/metabox.php:
|
1851 |
msgid "Item Quantities:"
|
1852 |
msgstr ""
|
1853 |
|
1854 |
-
#: includes/admin/downloads/metabox.php:
|
1855 |
msgid "Disable quantity input for this product"
|
1856 |
msgstr ""
|
1857 |
|
1858 |
-
#: includes/admin/downloads/metabox.php:
|
1859 |
msgid ""
|
1860 |
"<strong>Item Quantities</strong>: if disabled, customers will not be "
|
1861 |
"provided an option to change the number they wish to purchase."
|
1862 |
msgstr ""
|
1863 |
|
1864 |
-
#: includes/admin/downloads/metabox.php:
|
1865 |
-
#: includes/admin/settings/register-settings.php:
|
1866 |
#: includes/admin/thickbox.php:59 includes/checkout/template.php:1005
|
1867 |
#: includes/gateways/stripe/includes/payment-methods/buy-now/template.php:214
|
1868 |
#: includes/shortcodes.php:49 includes/template-functions.php:78
|
1869 |
msgid "Purchase"
|
1870 |
msgstr ""
|
1871 |
|
1872 |
-
#: includes/admin/downloads/metabox.php:
|
1873 |
msgid "Purchase Shortcode:"
|
1874 |
msgstr ""
|
1875 |
|
1876 |
-
#: includes/admin/downloads/metabox.php:
|
1877 |
msgid ""
|
1878 |
"<strong>Purchase Shortcode</strong>: Use this shortcode to output a "
|
1879 |
"purchase link for this product in the location of your choosing."
|
1880 |
msgstr ""
|
1881 |
|
1882 |
-
#: includes/admin/downloads/metabox.php:
|
1883 |
msgid "Accounting Options:"
|
1884 |
msgstr ""
|
1885 |
|
1886 |
-
#: includes/admin/downloads/metabox.php:
|
1887 |
msgid "Enter an SKU for this %s."
|
1888 |
msgstr ""
|
1889 |
|
1890 |
-
#: includes/admin/downloads/metabox.php:
|
1891 |
msgid "Button Options:"
|
1892 |
msgstr ""
|
1893 |
|
1894 |
-
#: includes/admin/downloads/metabox.php:
|
1895 |
msgid "Disable the automatic output of the purchase button"
|
1896 |
msgstr ""
|
1897 |
|
1898 |
-
#: includes/admin/downloads/metabox.php:
|
1899 |
msgid ""
|
1900 |
"<strong>Automatic Output</strong>: By default, the purchase buttons will be "
|
1901 |
"displayed at the bottom of the download, when disabled you will need to use "
|
@@ -1903,24 +1900,24 @@ msgid ""
|
|
1903 |
"where you prefer."
|
1904 |
msgstr ""
|
1905 |
|
1906 |
-
#: includes/admin/downloads/metabox.php:
|
1907 |
-
#: includes/admin/settings/register-settings.php:
|
1908 |
#: includes/admin/thickbox.php:101
|
1909 |
msgid "Add to Cart"
|
1910 |
msgstr ""
|
1911 |
|
1912 |
-
#: includes/admin/downloads/metabox.php:
|
1913 |
-
#: includes/admin/settings/register-settings.php:
|
1914 |
#: includes/gateways/stripe/includes/payment-methods/buy-now/template.php:47
|
1915 |
#: includes/shortcodes.php:47 includes/template-functions.php:78
|
1916 |
msgid "Buy Now"
|
1917 |
msgstr ""
|
1918 |
|
1919 |
-
#: includes/admin/downloads/metabox.php:
|
1920 |
msgid "Purchase button behavior"
|
1921 |
msgstr ""
|
1922 |
|
1923 |
-
#: includes/admin/downloads/metabox.php:
|
1924 |
msgid ""
|
1925 |
"<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
|
1926 |
"eCommerce flow. A Buy Now button bypasses most of the process, taking the "
|
@@ -1928,55 +1925,177 @@ msgid ""
|
|
1928 |
"process of buying the product."
|
1929 |
msgstr ""
|
1930 |
|
1931 |
-
#: includes/admin/downloads/metabox.php:
|
1932 |
msgid ""
|
1933 |
"<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
|
1934 |
"eCommerce flow. Buy Now buttons are only available for stores that have a "
|
1935 |
"single supported gateway active and that do not use taxes."
|
1936 |
msgstr ""
|
1937 |
|
1938 |
-
#: includes/admin/downloads/metabox.php:
|
1939 |
msgid ""
|
1940 |
"Special notes or instructions for this product. These notes will be added "
|
1941 |
"to the purchase receipt."
|
1942 |
msgstr ""
|
1943 |
|
1944 |
-
#: includes/admin/downloads/metabox.php:
|
1945 |
msgid "Sales:"
|
1946 |
msgstr ""
|
1947 |
|
1948 |
-
#: includes/admin/downloads/metabox.php:
|
1949 |
msgid "Earnings:"
|
1950 |
msgstr ""
|
1951 |
|
1952 |
-
#: includes/admin/downloads/metabox.php:
|
1953 |
msgid "View File Download Log"
|
1954 |
msgstr ""
|
1955 |
|
1956 |
-
#: includes/admin/downloads/metabox.php:
|
1957 |
-
|
|
|
|
|
|
|
|
|
|
|
1958 |
msgstr ""
|
1959 |
|
1960 |
-
#: includes/admin/
|
1961 |
-
#.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1962 |
msgid ""
|
1963 |
-
"
|
1964 |
-
"
|
1965 |
msgstr ""
|
1966 |
|
1967 |
-
#: includes/admin/
|
|
|
|
|
|
|
1968 |
msgid ""
|
1969 |
-
"
|
1970 |
-
"
|
1971 |
msgstr ""
|
1972 |
|
1973 |
-
#: includes/admin/
|
1974 |
-
|
1975 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1976 |
msgid ""
|
1977 |
-
"
|
1978 |
-
"
|
1979 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1980 |
msgstr ""
|
1981 |
|
1982 |
#: includes/admin/import/class-batch-import-downloads.php:65
|
@@ -2361,7 +2480,7 @@ msgstr[0] ""
|
|
2361 |
msgstr[1] ""
|
2362 |
|
2363 |
#: includes/admin/payments/view-order-details.php:152
|
2364 |
-
#: includes/admin/settings/register-settings.php:
|
2365 |
msgid "None"
|
2366 |
msgstr ""
|
2367 |
|
@@ -2565,8 +2684,13 @@ msgstr ""
|
|
2565 |
msgid "General Settings"
|
2566 |
msgstr ""
|
2567 |
|
2568 |
-
#: includes/admin/promos/class-promo-handler.php:
|
2569 |
-
|
|
|
|
|
|
|
|
|
|
|
2570 |
#: includes/gateways/paypal/admin/connect.php:106
|
2571 |
#: includes/gateways/paypal/admin/connect.php:182
|
2572 |
#: includes/gateways/paypal/admin/connect.php:292
|
@@ -2579,36 +2703,77 @@ msgstr ""
|
|
2579 |
msgid "You do not have permission to perform this action."
|
2580 |
msgstr ""
|
2581 |
|
2582 |
-
#: includes/admin/promos/
|
2583 |
-
msgid "
|
2584 |
msgstr ""
|
2585 |
|
2586 |
-
#: includes/admin/promos/notices/
|
2587 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2588 |
msgstr ""
|
2589 |
|
2590 |
-
#: includes/admin/promos/notices/class-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2591 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2592 |
msgid ""
|
2593 |
"You are using the free version of Easy Digital Downloads. %1$sPurchase a "
|
2594 |
"pass%2$s to get email marketing tools and recurring payments."
|
2595 |
msgstr ""
|
2596 |
|
2597 |
-
#: includes/admin/promos/notices/class-license-upgrade-notice.php:
|
2598 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2599 |
msgid ""
|
2600 |
"For access to additional Easy Digital Downloads extensions to grow your "
|
2601 |
"store, consider %1$spurchasing a pass%2$s."
|
2602 |
msgstr ""
|
2603 |
|
2604 |
-
#: includes/admin/promos/notices/class-license-upgrade-notice.php:
|
2605 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2606 |
msgid ""
|
2607 |
"You are using Easy Digital Downloads with a Personal Pass. Consider "
|
2608 |
"%1$supgrading%2$s to get recurring payments and more."
|
2609 |
msgstr ""
|
2610 |
|
2611 |
-
#: includes/admin/promos/notices/class-license-upgrade-notice.php:
|
2612 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2613 |
msgid ""
|
2614 |
"Grow your business and make more money with affiliate marketing. %1$sGet "
|
@@ -2782,7 +2947,7 @@ msgstr ""
|
|
2782 |
|
2783 |
#: includes/admin/reporting/class-export-payments.php:68
|
2784 |
#: includes/admin/reporting/export/class-batch-export-payments.php:49
|
2785 |
-
#: includes/admin/settings/register-settings.php:
|
2786 |
#: includes/admin/tools.php:713
|
2787 |
#: includes/gateways/stripe/includes/template-functions.php:510
|
2788 |
#: includes/gateways/stripe/includes/template-functions.php:519
|
@@ -2962,14 +3127,18 @@ msgstr ""
|
|
2962 |
msgid "API User"
|
2963 |
msgstr ""
|
2964 |
|
2965 |
-
#: includes/admin/reporting/export/class-batch-export-customers.php:
|
2966 |
msgid "Number of Purchases"
|
2967 |
msgstr ""
|
2968 |
|
2969 |
-
#: includes/admin/reporting/export/class-batch-export-customers.php:
|
2970 |
msgid "Customer Value"
|
2971 |
msgstr ""
|
2972 |
|
|
|
|
|
|
|
|
|
2973 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:42
|
2974 |
msgid "Slug"
|
2975 |
msgstr ""
|
@@ -3002,7 +3171,7 @@ msgid "Files"
|
|
3002 |
msgstr ""
|
3003 |
|
3004 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:53
|
3005 |
-
#: includes/admin/settings/register-settings.php:
|
3006 |
#: includes/admin/tools.php:896
|
3007 |
msgid "File Download Limit"
|
3008 |
msgstr ""
|
@@ -3051,7 +3220,7 @@ msgstr ""
|
|
3051 |
|
3052 |
#: includes/admin/reporting/export/class-batch-export-payments.php:62
|
3053 |
#: includes/admin/settings/register-settings.php:355
|
3054 |
-
#: includes/admin/settings/register-settings.php:
|
3055 |
msgid "Currency"
|
3056 |
msgstr ""
|
3057 |
|
@@ -3183,7 +3352,7 @@ msgid "Refresh Reports"
|
|
3183 |
msgstr ""
|
3184 |
|
3185 |
#: includes/admin/reporting/logs.php:144
|
3186 |
-
#: includes/admin/settings/register-settings.php:
|
3187 |
#: includes/privacy-functions.php:544
|
3188 |
msgid "File Downloads"
|
3189 |
msgstr ""
|
@@ -3209,8 +3378,8 @@ msgid "Payment Methods"
|
|
3209 |
msgstr ""
|
3210 |
|
3211 |
#: includes/admin/reporting/reports.php:59
|
3212 |
-
#: includes/admin/settings/contextual-help.php:
|
3213 |
-
#: includes/admin/settings/register-settings.php:
|
3214 |
msgid "Taxes"
|
3215 |
msgstr ""
|
3216 |
|
@@ -3348,61 +3517,68 @@ msgstr ""
|
|
3348 |
msgid "Download a CSV of all sales."
|
3349 |
msgstr ""
|
3350 |
|
3351 |
-
#: includes/admin/settings/contextual-help.php:
|
3352 |
msgid ""
|
3353 |
"Need more from your Easy Digital Downloads store? <a href=\"%s\">Upgrade "
|
3354 |
"Now!</a>."
|
3355 |
msgstr ""
|
3356 |
|
3357 |
-
#: includes/admin/settings/contextual-help.php:
|
3358 |
msgid ""
|
3359 |
"This screen provides the most basic settings for configuring your store. "
|
3360 |
-
"You can set the currency, page templates, and
|
3361 |
-
"and off."
|
3362 |
msgstr ""
|
3363 |
|
3364 |
-
#: includes/admin/settings/contextual-help.php:
|
3365 |
-
#: includes/admin/settings/register-settings.php:
|
3366 |
-
msgid "
|
3367 |
msgstr ""
|
3368 |
|
3369 |
-
#: includes/admin/settings/contextual-help.php:
|
3370 |
msgid ""
|
3371 |
-
"This screen provides ways to toggle payment gateways on
|
3372 |
-
"
|
3373 |
-
"
|
3374 |
-
"your needs."
|
3375 |
msgstr ""
|
3376 |
|
3377 |
-
#: includes/admin/settings/contextual-help.php:
|
3378 |
msgid ""
|
3379 |
"<strong>Test Payment</strong> - This included gateway is great for testing "
|
3380 |
"your store, as it requires no payment, and leads straight to product "
|
3381 |
"downloads. However, please remember to turn it off once your site is live!"
|
3382 |
msgstr ""
|
3383 |
|
3384 |
-
#: includes/admin/settings/contextual-help.php:
|
3385 |
msgid ""
|
3386 |
"<strong>PayPal</strong> - A PayPal payment gateway is included as standard "
|
3387 |
"with Easy Digital Downloads. To test the PayPal gateway, you need a Sandbox "
|
3388 |
"account for PayPal and the site must be placed in Test Mode from the "
|
3389 |
-
"
|
3390 |
"address in order for payments to get processed."
|
3391 |
msgstr ""
|
3392 |
|
3393 |
-
#: includes/admin/settings/contextual-help.php:
|
3394 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3395 |
msgid "Emails"
|
3396 |
msgstr ""
|
3397 |
|
3398 |
-
#: includes/admin/settings/contextual-help.php:
|
3399 |
msgid ""
|
3400 |
"This screen allows you to customize how emails act throughout your store. "
|
3401 |
"You can choose a premade template, set the sender's name, email address, "
|
3402 |
"and subject."
|
3403 |
msgstr ""
|
3404 |
|
3405 |
-
#: includes/admin/settings/contextual-help.php:
|
3406 |
msgid ""
|
3407 |
"A set of email tags has also been provided to allow the creation of "
|
3408 |
"personalized emails. A tag consists of a keyword surrounded by curly "
|
@@ -3410,48 +3586,61 @@ msgid ""
|
|
3410 |
"below the editor."
|
3411 |
msgstr ""
|
3412 |
|
3413 |
-
#: includes/admin/settings/contextual-help.php:
|
3414 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3415 |
msgid "Styles"
|
3416 |
msgstr ""
|
3417 |
|
3418 |
-
#: includes/admin/settings/contextual-help.php:
|
3419 |
msgid ""
|
3420 |
"This screen allows customization of your store's styles. For complete "
|
3421 |
"control, you can completely disable all styles generated by the plugin."
|
3422 |
msgstr ""
|
3423 |
|
3424 |
-
#: includes/admin/settings/contextual-help.php:
|
3425 |
msgid "This screen allows you to configure the tax rules for your store."
|
3426 |
msgstr ""
|
3427 |
|
3428 |
-
#: includes/admin/settings/contextual-help.php:
|
3429 |
msgid ""
|
3430 |
"If you do not wish to charge any tax on purchase, simply leave the Enable "
|
3431 |
"Taxes option unchecked."
|
3432 |
msgstr ""
|
3433 |
|
3434 |
-
#: includes/admin/settings/contextual-help.php:
|
3435 |
msgid ""
|
3436 |
"<strong>Default Tax Rate</strong>: The default tax rate is the tax rate "
|
3437 |
"charged to customers located in your base country / state or province."
|
3438 |
msgstr ""
|
3439 |
|
3440 |
-
#: includes/admin/settings/contextual-help.php:
|
3441 |
msgid ""
|
3442 |
"<strong>Base Country</strong>: This determines the country that is loaded "
|
3443 |
"by default on the checkout screen for customers that do not have an address "
|
3444 |
"stored in their account."
|
3445 |
msgstr ""
|
3446 |
|
3447 |
-
#: includes/admin/settings/contextual-help.php:
|
3448 |
msgid ""
|
3449 |
"<strong>Base State / Province</strong>: This determines the state / "
|
3450 |
"province that is loaded by default on the checkout screen for customers "
|
3451 |
"that do not have an address stored in their account."
|
3452 |
msgstr ""
|
3453 |
|
3454 |
-
#: includes/admin/settings/contextual-help.php:
|
3455 |
msgid ""
|
3456 |
"<strong>Prices Entered with Tax</strong>: if enabled, this means that the "
|
3457 |
"price entered on the product edit screens is the total amount the customer "
|
@@ -3460,20 +3649,20 @@ msgid ""
|
|
3460 |
"will be calculated automatically."
|
3461 |
msgstr ""
|
3462 |
|
3463 |
-
#: includes/admin/settings/contextual-help.php:
|
3464 |
msgid ""
|
3465 |
"<strong>Display Tax Rate on Prices</strong>: when enabled, the amount the "
|
3466 |
"customer is expected to pay in tax will be displayed below purchase buttons."
|
3467 |
msgstr ""
|
3468 |
|
3469 |
-
#: includes/admin/settings/contextual-help.php:
|
3470 |
msgid ""
|
3471 |
"<strong>Display During Checkout</strong>: This determines whether prices "
|
3472 |
"are shown with taxes or without taxes on checkout. If set to Including Tax, "
|
3473 |
"a $10 product with a 10% tax will be shown as $11."
|
3474 |
msgstr ""
|
3475 |
|
3476 |
-
#: includes/admin/settings/contextual-help.php:
|
3477 |
msgid ""
|
3478 |
"<strong>Calculate Tax After Discounts</strong>: If enabled, this option "
|
3479 |
"will make it so that tax is calculated on the after-discount amount. If a "
|
@@ -3481,51 +3670,53 @@ msgid ""
|
|
3481 |
"calculated off of $16 instead of $20."
|
3482 |
msgstr ""
|
3483 |
|
3484 |
-
#: includes/admin/settings/contextual-help.php:
|
3485 |
msgid ""
|
3486 |
"<strong>Additional Tax Rates</strong>: This section lets you add tax rates "
|
3487 |
"for specific countries and/or states/provinces in those countries."
|
3488 |
msgstr ""
|
3489 |
|
3490 |
-
#: includes/admin/settings/contextual-help.php:
|
3491 |
msgid ""
|
3492 |
"This screen provides access to settings added by most Easy Digital "
|
3493 |
"Downloads extensions."
|
3494 |
msgstr ""
|
3495 |
|
3496 |
-
#: includes/admin/settings/contextual-help.php:
|
3497 |
-
#: includes/admin/settings/register-settings.php:
|
3498 |
msgid "Miscellaneous"
|
3499 |
msgstr ""
|
3500 |
|
3501 |
-
#: includes/admin/settings/contextual-help.php:
|
3502 |
msgid ""
|
3503 |
-
"This screen provides other miscellaneous options such as
|
3504 |
-
"
|
3505 |
msgstr ""
|
3506 |
|
3507 |
-
#: includes/admin/settings/
|
3508 |
-
|
|
|
|
|
3509 |
msgstr ""
|
3510 |
|
3511 |
-
#: includes/admin/settings/display-settings.php:
|
3512 |
msgid ""
|
3513 |
"Save 25% on all Easy Digital Downloads purchases <strong>this "
|
3514 |
"week</strong>, including renewals and upgrades!"
|
3515 |
msgstr ""
|
3516 |
|
3517 |
-
#: includes/admin/settings/display-settings.php:
|
3518 |
msgid "Use code at checkout:"
|
3519 |
msgstr ""
|
3520 |
|
3521 |
-
#: includes/admin/settings/display-settings.php:
|
3522 |
msgid ""
|
3523 |
"Sale ends 23:59 PM December 6th CST. Save 25% on <a "
|
3524 |
"href=\"https://sandhillsdev.com/projects/\" target=\"_blank\">our other "
|
3525 |
"plugins</a>."
|
3526 |
msgstr ""
|
3527 |
|
3528 |
-
#: includes/admin/settings/display-settings.php:
|
3529 |
msgid "Shop Now!"
|
3530 |
msgstr ""
|
3531 |
|
@@ -3692,7 +3883,7 @@ msgid "The symbol (usually , or .) to separate decimal points."
|
|
3692 |
msgstr ""
|
3693 |
|
3694 |
#: includes/admin/settings/register-settings.php:391
|
3695 |
-
#: includes/admin/settings/register-settings.php:
|
3696 |
msgid "API"
|
3697 |
msgstr ""
|
3698 |
|
@@ -3734,6 +3925,10 @@ msgid ""
|
|
3734 |
"are testing."
|
3735 |
msgstr ""
|
3736 |
|
|
|
|
|
|
|
|
|
3737 |
#: includes/admin/settings/register-settings.php:424
|
3738 |
msgid "Choose the payment gateways you want to enable."
|
3739 |
msgstr ""
|
@@ -3814,345 +4009,349 @@ msgstr ""
|
|
3814 |
|
3815 |
#: includes/admin/settings/register-settings.php:493
|
3816 |
#: includes/admin/settings/register-settings.php:496
|
3817 |
-
msgid "
|
3818 |
msgstr ""
|
3819 |
|
3820 |
#: includes/admin/settings/register-settings.php:494
|
3821 |
-
msgid "
|
3822 |
msgstr ""
|
3823 |
|
3824 |
#: includes/admin/settings/register-settings.php:497
|
3825 |
msgid ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3826 |
"You can require that customers create and login to user accounts prior to "
|
3827 |
"purchasing from your store by enabling this option. When unchecked, users "
|
3828 |
"can purchase without being logged in by using their name and email address."
|
3829 |
msgstr ""
|
3830 |
|
3831 |
-
#: includes/admin/settings/register-settings.php:
|
3832 |
msgid "Show Register / Login Form?"
|
3833 |
msgstr ""
|
3834 |
|
3835 |
-
#: includes/admin/settings/register-settings.php:
|
3836 |
msgid ""
|
3837 |
"Display the registration and login forms on the checkout page for "
|
3838 |
"non-logged-in users."
|
3839 |
msgstr ""
|
3840 |
|
3841 |
-
#: includes/admin/settings/register-settings.php:
|
3842 |
msgid "Registration and Login Forms"
|
3843 |
msgstr ""
|
3844 |
|
3845 |
-
#: includes/admin/settings/register-settings.php:
|
3846 |
msgid "Registration Form Only"
|
3847 |
msgstr ""
|
3848 |
|
3849 |
-
#: includes/admin/settings/register-settings.php:
|
3850 |
msgid "Login Form Only"
|
3851 |
msgstr ""
|
3852 |
|
3853 |
-
#: includes/admin/settings/register-settings.php:
|
3854 |
-
msgid "Multiple Discounts"
|
3855 |
-
msgstr ""
|
3856 |
-
|
3857 |
-
#: includes/admin/settings/register-settings.php:515
|
3858 |
-
msgid "Allow customers to use multiple discounts on the same purchase?"
|
3859 |
-
msgstr ""
|
3860 |
-
|
3861 |
-
#: includes/admin/settings/register-settings.php:520
|
3862 |
msgid "Enable Cart Saving"
|
3863 |
msgstr ""
|
3864 |
|
3865 |
-
#: includes/admin/settings/register-settings.php:
|
3866 |
msgid "Check this to enable cart saving on the checkout."
|
3867 |
msgstr ""
|
3868 |
|
3869 |
-
#: includes/admin/settings/register-settings.php:
|
3870 |
msgid "Cart Saving"
|
3871 |
msgstr ""
|
3872 |
|
3873 |
-
#: includes/admin/settings/register-settings.php:
|
3874 |
msgid ""
|
3875 |
"Cart saving allows shoppers to create a temporary link to their current "
|
3876 |
"shopping cart so they can come back to it later, or share it with someone."
|
3877 |
msgstr ""
|
3878 |
|
3879 |
-
#: includes/admin/settings/register-settings.php:
|
3880 |
msgid "Email Configuration"
|
3881 |
msgstr ""
|
3882 |
|
3883 |
-
#: includes/admin/settings/register-settings.php:
|
3884 |
msgid "Template"
|
3885 |
msgstr ""
|
3886 |
|
3887 |
-
#: includes/admin/settings/register-settings.php:
|
3888 |
msgid ""
|
3889 |
"Choose a template. Click \"Save Changes\" then \"Preview Purchase Receipt\" "
|
3890 |
"to see the new template."
|
3891 |
msgstr ""
|
3892 |
|
3893 |
-
#: includes/admin/settings/register-settings.php:
|
3894 |
msgid "Logo"
|
3895 |
msgstr ""
|
3896 |
|
3897 |
-
#: includes/admin/settings/register-settings.php:
|
3898 |
msgid ""
|
3899 |
"Upload or choose a logo to be displayed at the top of the purchase receipt "
|
3900 |
"emails. Displayed on HTML emails only."
|
3901 |
msgstr ""
|
3902 |
|
3903 |
-
#: includes/admin/settings/register-settings.php:
|
3904 |
msgid "From Name"
|
3905 |
msgstr ""
|
3906 |
|
3907 |
-
#: includes/admin/settings/register-settings.php:
|
3908 |
msgid ""
|
3909 |
"The name purchase receipts are said to come from. This should probably be "
|
3910 |
"your site or shop name."
|
3911 |
msgstr ""
|
3912 |
|
3913 |
-
#: includes/admin/settings/register-settings.php:
|
3914 |
msgid "From Email"
|
3915 |
msgstr ""
|
3916 |
|
3917 |
-
#: includes/admin/settings/register-settings.php:
|
3918 |
msgid ""
|
3919 |
"Email to send purchase receipts from. This will act as the \"from\" and "
|
3920 |
"\"reply-to\" address."
|
3921 |
msgstr ""
|
3922 |
|
3923 |
-
#: includes/admin/settings/register-settings.php:
|
3924 |
-
msgid "SendWP"
|
3925 |
-
msgstr ""
|
3926 |
-
|
3927 |
-
#: includes/admin/settings/register-settings.php:578
|
3928 |
-
msgid "Deliverability settings"
|
3929 |
-
msgstr ""
|
3930 |
-
|
3931 |
-
#: includes/admin/settings/register-settings.php:584
|
3932 |
-
msgid "Recapture"
|
3933 |
-
msgstr ""
|
3934 |
-
|
3935 |
-
#: includes/admin/settings/register-settings.php:589
|
3936 |
-
msgid "Abandoned cart recovery"
|
3937 |
-
msgstr ""
|
3938 |
-
|
3939 |
-
#: includes/admin/settings/register-settings.php:603
|
3940 |
msgid "Purchase Email Subject"
|
3941 |
msgstr ""
|
3942 |
|
3943 |
-
#: includes/admin/settings/register-settings.php:
|
3944 |
msgid "Enter the subject line for the purchase receipt email."
|
3945 |
msgstr ""
|
3946 |
|
3947 |
-
#: includes/admin/settings/register-settings.php:
|
3948 |
-
#: includes/admin/settings/register-settings.php:
|
3949 |
-
#: includes/admin/settings/register-settings.php:
|
3950 |
#: includes/emails/functions.php:45 includes/emails/functions.php:49
|
3951 |
-
#: includes/emails/functions.php:
|
3952 |
#: includes/emails/template.php:141
|
3953 |
msgid "Purchase Receipt"
|
3954 |
msgstr ""
|
3955 |
|
3956 |
-
#: includes/admin/settings/register-settings.php:
|
3957 |
msgid "Purchase Email Heading"
|
3958 |
msgstr ""
|
3959 |
|
3960 |
-
#: includes/admin/settings/register-settings.php:
|
3961 |
msgid "Enter the heading for the purchase receipt email."
|
3962 |
msgstr ""
|
3963 |
|
3964 |
-
#: includes/admin/settings/register-settings.php:
|
3965 |
msgid ""
|
3966 |
"Enter the text that is sent as purchase receipt email to users after "
|
3967 |
"completion of a successful purchase. HTML is accepted. Available template "
|
3968 |
"tags:"
|
3969 |
msgstr ""
|
3970 |
|
3971 |
-
#: includes/admin/settings/register-settings.php:
|
3972 |
#: includes/emails/template.php:159
|
3973 |
msgid "Dear"
|
3974 |
msgstr ""
|
3975 |
|
3976 |
-
#: includes/admin/settings/register-settings.php:
|
3977 |
#: includes/emails/template.php:160
|
3978 |
msgid ""
|
3979 |
"Thank you for your purchase. Please click on the link(s) below to download "
|
3980 |
"your files."
|
3981 |
msgstr ""
|
3982 |
|
3983 |
-
#: includes/admin/settings/register-settings.php:
|
3984 |
msgid "Sale Notification Subject"
|
3985 |
msgstr ""
|
3986 |
|
3987 |
-
#: includes/admin/settings/register-settings.php:
|
3988 |
msgid "Enter the subject line for the sale notification email."
|
3989 |
msgstr ""
|
3990 |
|
3991 |
-
#: includes/admin/settings/register-settings.php:
|
3992 |
msgid "Sale Notification Heading"
|
3993 |
msgstr ""
|
3994 |
|
3995 |
-
#: includes/admin/settings/register-settings.php:
|
3996 |
msgid "Enter the heading for the sale notification email."
|
3997 |
msgstr ""
|
3998 |
|
3999 |
-
#: includes/admin/settings/register-settings.php:
|
4000 |
-
#: includes/emails/functions.php:
|
4001 |
msgid "New Sale!"
|
4002 |
msgstr ""
|
4003 |
|
4004 |
-
#: includes/admin/settings/register-settings.php:
|
4005 |
msgid "Sale Notification"
|
4006 |
msgstr ""
|
4007 |
|
4008 |
-
#: includes/admin/settings/register-settings.php:
|
4009 |
msgid ""
|
4010 |
"Enter the text that is sent as sale notification email after completion of "
|
4011 |
"a purchase. HTML is accepted. Available template tags:"
|
4012 |
msgstr ""
|
4013 |
|
4014 |
-
#: includes/admin/settings/register-settings.php:
|
4015 |
msgid "Sale Notification Emails"
|
4016 |
msgstr ""
|
4017 |
|
4018 |
-
#: includes/admin/settings/register-settings.php:
|
4019 |
msgid ""
|
4020 |
"Enter the email address(es) that should receive a notification anytime a "
|
4021 |
"sale is made, one per line."
|
4022 |
msgstr ""
|
4023 |
|
4024 |
-
#: includes/admin/settings/register-settings.php:
|
4025 |
msgid "Disable Admin Notifications"
|
4026 |
msgstr ""
|
4027 |
|
4028 |
-
#: includes/admin/settings/register-settings.php:
|
4029 |
msgid "Check this box if you do not want to receive sales notification emails."
|
4030 |
msgstr ""
|
4031 |
|
4032 |
-
#: includes/admin/settings/register-settings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4033 |
msgid "Disable Styles"
|
4034 |
msgstr ""
|
4035 |
|
4036 |
-
#: includes/admin/settings/register-settings.php:
|
4037 |
msgid ""
|
4038 |
"Check this to disable all included styling of buttons, checkout fields, and "
|
4039 |
"all other elements."
|
4040 |
msgstr ""
|
4041 |
|
4042 |
-
#: includes/admin/settings/register-settings.php:
|
4043 |
msgid "Disabling Styles"
|
4044 |
msgstr ""
|
4045 |
|
4046 |
-
#: includes/admin/settings/register-settings.php:
|
4047 |
msgid ""
|
4048 |
"If your theme has a complete custom CSS file for Easy Digital Downloads, "
|
4049 |
"you may wish to disable our default styles. This is not recommended unless "
|
4050 |
"you're sure your theme has a complete custom CSS."
|
4051 |
msgstr ""
|
4052 |
|
4053 |
-
#: includes/admin/settings/register-settings.php:
|
4054 |
msgid "Buttons"
|
4055 |
msgstr ""
|
4056 |
|
4057 |
-
#: includes/admin/settings/register-settings.php:
|
4058 |
msgid "Options for add to cart and purchase buttons"
|
4059 |
msgstr ""
|
4060 |
|
4061 |
-
#: includes/admin/settings/register-settings.php:
|
4062 |
msgid "Default Button Style"
|
4063 |
msgstr ""
|
4064 |
|
4065 |
-
#: includes/admin/settings/register-settings.php:
|
4066 |
msgid "Choose the style you want to use for the buttons."
|
4067 |
msgstr ""
|
4068 |
|
4069 |
-
#: includes/admin/settings/register-settings.php:
|
4070 |
msgid "Default Button Color"
|
4071 |
msgstr ""
|
4072 |
|
4073 |
-
#: includes/admin/settings/register-settings.php:
|
4074 |
msgid "Choose the color you want to use for the buttons."
|
4075 |
msgstr ""
|
4076 |
|
4077 |
-
#: includes/admin/settings/register-settings.php:
|
4078 |
msgid "Need help?"
|
4079 |
msgstr ""
|
4080 |
|
4081 |
-
#: includes/admin/settings/register-settings.php:
|
4082 |
msgid ""
|
4083 |
"Visit the <a href=\"%s\" target=\"_blank\">Tax setup documentation</a> for "
|
4084 |
"further information. If you need VAT support, there are options listed on "
|
4085 |
"the documentation page."
|
4086 |
msgstr ""
|
4087 |
|
4088 |
-
#: includes/admin/settings/register-settings.php:
|
4089 |
msgid "Enable Taxes"
|
4090 |
msgstr ""
|
4091 |
|
4092 |
-
#: includes/admin/settings/register-settings.php:
|
4093 |
msgid "Check this to enable taxes on purchases."
|
4094 |
msgstr ""
|
4095 |
|
4096 |
-
#: includes/admin/settings/register-settings.php:
|
4097 |
msgid "Enabling Taxes"
|
4098 |
msgstr ""
|
4099 |
|
4100 |
-
#: includes/admin/settings/register-settings.php:
|
4101 |
msgid ""
|
4102 |
"With taxes enabled, Easy Digital Downloads will use the rules below to "
|
4103 |
"charge tax to customers. With taxes enabled, customers are required to "
|
4104 |
"input their address on checkout so that taxes can be properly calculated."
|
4105 |
msgstr ""
|
4106 |
|
4107 |
-
#: includes/admin/settings/register-settings.php:
|
4108 |
msgid "Tax Rates"
|
4109 |
msgstr ""
|
4110 |
|
4111 |
-
#: includes/admin/settings/register-settings.php:
|
4112 |
msgid ""
|
4113 |
"Add tax rates for specific regions. Enter a percentage, such as 6.5 for "
|
4114 |
"6.5%."
|
4115 |
msgstr ""
|
4116 |
|
4117 |
-
#: includes/admin/settings/register-settings.php:
|
4118 |
-
#: includes/admin/settings/register-settings.php:
|
4119 |
msgid "Fallback Tax Rate"
|
4120 |
msgstr ""
|
4121 |
|
4122 |
-
#: includes/admin/settings/register-settings.php:
|
4123 |
msgid ""
|
4124 |
"Customers not in a specific rate will be charged this tax rate. Enter a "
|
4125 |
"percentage, such as 6.5 for 6.5%. "
|
4126 |
msgstr ""
|
4127 |
|
4128 |
-
#: includes/admin/settings/register-settings.php:
|
4129 |
msgid ""
|
4130 |
"If the customer's address fails to meet the above tax rules, you can define "
|
4131 |
"a `default` tax rate to be applied to all other customers. Enter a "
|
4132 |
"percentage, such as 6.5 for 6.5%."
|
4133 |
msgstr ""
|
4134 |
|
4135 |
-
#: includes/admin/settings/register-settings.php:
|
4136 |
msgid "Prices entered with tax"
|
4137 |
msgstr ""
|
4138 |
|
4139 |
-
#: includes/admin/settings/register-settings.php:
|
4140 |
msgid "This option affects how you enter prices."
|
4141 |
msgstr ""
|
4142 |
|
4143 |
-
#: includes/admin/settings/register-settings.php:
|
4144 |
msgid "Yes, I will enter prices inclusive of tax"
|
4145 |
msgstr ""
|
4146 |
|
4147 |
-
#: includes/admin/settings/register-settings.php:
|
4148 |
msgid "No, I will enter prices exclusive of tax"
|
4149 |
msgstr ""
|
4150 |
|
4151 |
-
#: includes/admin/settings/register-settings.php:
|
4152 |
msgid "Prices Inclusive of Tax"
|
4153 |
msgstr ""
|
4154 |
|
4155 |
-
#: includes/admin/settings/register-settings.php:
|
4156 |
msgid ""
|
4157 |
"When using prices inclusive of tax, you will be entering your prices as the "
|
4158 |
"total amount you want a customer to pay for the download, including tax. "
|
@@ -4160,143 +4359,127 @@ msgid ""
|
|
4160 |
"for the defined total price."
|
4161 |
msgstr ""
|
4162 |
|
4163 |
-
#: includes/admin/settings/register-settings.php:
|
4164 |
msgid "Display Tax Rate on Prices"
|
4165 |
msgstr ""
|
4166 |
|
4167 |
-
#: includes/admin/settings/register-settings.php:
|
4168 |
msgid "Some countries require a notice when product prices include tax."
|
4169 |
msgstr ""
|
4170 |
|
4171 |
-
#: includes/admin/settings/register-settings.php:
|
4172 |
msgid "Display during checkout"
|
4173 |
msgstr ""
|
4174 |
|
4175 |
-
#: includes/admin/settings/register-settings.php:
|
4176 |
msgid "Should prices on the checkout page be shown with or without tax?"
|
4177 |
msgstr ""
|
4178 |
|
4179 |
-
#: includes/admin/settings/register-settings.php:
|
4180 |
msgid "Including tax"
|
4181 |
msgstr ""
|
4182 |
|
4183 |
-
#: includes/admin/settings/register-settings.php:
|
4184 |
msgid "Excluding tax"
|
4185 |
msgstr ""
|
4186 |
|
4187 |
-
#: includes/admin/settings/register-settings.php:
|
4188 |
msgid "Taxes Displayed for Products on Checkout"
|
4189 |
msgstr ""
|
4190 |
|
4191 |
-
#: includes/admin/settings/register-settings.php:
|
4192 |
msgid ""
|
4193 |
"This option will determine whether the product price displays with or "
|
4194 |
"without tax on checkout."
|
4195 |
msgstr ""
|
4196 |
|
4197 |
-
#: includes/admin/settings/register-settings.php:
|
4198 |
-
#: includes/admin/settings/register-settings.php:780
|
4199 |
-
msgid "Redirect to Checkout"
|
4200 |
-
msgstr ""
|
4201 |
-
|
4202 |
-
#: includes/admin/settings/register-settings.php:778
|
4203 |
-
msgid "Immediately redirect to checkout after adding an item to the cart?"
|
4204 |
-
msgstr ""
|
4205 |
-
|
4206 |
-
#: includes/admin/settings/register-settings.php:781
|
4207 |
-
msgid ""
|
4208 |
-
"When enabled, once an item has been added to the cart, the customer will be "
|
4209 |
-
"redirected directly to your checkout page. This is useful for stores that "
|
4210 |
-
"sell single items."
|
4211 |
-
msgstr ""
|
4212 |
-
|
4213 |
-
#: includes/admin/settings/register-settings.php:785
|
4214 |
msgid "Cart Item Quantities"
|
4215 |
msgstr ""
|
4216 |
|
4217 |
-
#: includes/admin/settings/register-settings.php:
|
4218 |
msgid ""
|
4219 |
"Allow quantities to be adjusted when adding %s to the cart, and while "
|
4220 |
"viewing the checkout cart."
|
4221 |
msgstr ""
|
4222 |
|
4223 |
-
#: includes/admin/settings/register-settings.php:
|
4224 |
msgid "Debug Mode"
|
4225 |
msgstr ""
|
4226 |
|
4227 |
-
#: includes/admin/settings/register-settings.php:
|
4228 |
msgid ""
|
4229 |
"Check this box to enable debug mode. When enabled, debug messages will be "
|
4230 |
"logged and shown in Downloads → Tools → Debug Log."
|
4231 |
msgstr ""
|
4232 |
|
4233 |
-
#: includes/admin/settings/register-settings.php:
|
4234 |
msgid "Remove Data on Uninstall?"
|
4235 |
msgstr ""
|
4236 |
|
4237 |
-
#: includes/admin/settings/register-settings.php:
|
4238 |
msgid ""
|
4239 |
"Check this box if you would like EDD to completely remove all of its data "
|
4240 |
"when the plugin is deleted."
|
4241 |
msgstr ""
|
4242 |
|
4243 |
-
#: includes/admin/settings/register-settings.php:
|
4244 |
msgid "Complete Purchase Text"
|
4245 |
msgstr ""
|
4246 |
|
4247 |
-
#: includes/admin/settings/register-settings.php:
|
4248 |
msgid "The button label for completing a purchase."
|
4249 |
msgstr ""
|
4250 |
|
4251 |
-
#: includes/admin/settings/register-settings.php:
|
4252 |
msgid "Complete Free Purchase Text"
|
4253 |
msgstr ""
|
4254 |
|
4255 |
-
#: includes/admin/settings/register-settings.php:
|
4256 |
msgid "The button label for completing a free purchase."
|
4257 |
msgstr ""
|
4258 |
|
4259 |
-
#: includes/admin/settings/register-settings.php:
|
4260 |
#: includes/checkout/template.php:1008
|
4261 |
msgid "Free Download"
|
4262 |
msgstr ""
|
4263 |
|
4264 |
-
#: includes/admin/settings/register-settings.php:
|
4265 |
msgid "Add to Cart Text"
|
4266 |
msgstr ""
|
4267 |
|
4268 |
-
#: includes/admin/settings/register-settings.php:
|
4269 |
msgid "Text shown on the Add to Cart Buttons."
|
4270 |
msgstr ""
|
4271 |
|
4272 |
-
#: includes/admin/settings/register-settings.php:
|
4273 |
msgid "Checkout Button Text"
|
4274 |
msgstr ""
|
4275 |
|
4276 |
-
#: includes/admin/settings/register-settings.php:
|
4277 |
msgid ""
|
4278 |
"Text shown on the Add to Cart Button when the product is already in the "
|
4279 |
"cart."
|
4280 |
msgstr ""
|
4281 |
|
4282 |
-
#: includes/admin/settings/register-settings.php:
|
4283 |
msgid "Buy Now Text"
|
4284 |
msgstr ""
|
4285 |
|
4286 |
-
#: includes/admin/settings/register-settings.php:
|
4287 |
msgid "Text shown on the Buy Now Buttons."
|
4288 |
msgstr ""
|
4289 |
|
4290 |
-
#: includes/admin/settings/register-settings.php:
|
4291 |
-
#: includes/admin/settings/register-settings.php:
|
4292 |
msgid "Download Method"
|
4293 |
msgstr ""
|
4294 |
|
4295 |
-
#: includes/admin/settings/register-settings.php:
|
4296 |
msgid "Select the file download method. Note, not all methods work on all servers."
|
4297 |
msgstr ""
|
4298 |
|
4299 |
-
#: includes/admin/settings/register-settings.php:
|
4300 |
msgid ""
|
4301 |
"Due to its consistency in multiple platforms and better file protection, "
|
4302 |
"'forced' is the default method. Because Easy Digital Downloads uses PHP to "
|
@@ -4307,35 +4490,35 @@ msgid ""
|
|
4307 |
"method can help resolve this."
|
4308 |
msgstr ""
|
4309 |
|
4310 |
-
#: includes/admin/settings/register-settings.php:
|
4311 |
msgid "Forced"
|
4312 |
msgstr ""
|
4313 |
|
4314 |
-
#: includes/admin/settings/register-settings.php:
|
4315 |
msgid "Redirect"
|
4316 |
msgstr ""
|
4317 |
|
4318 |
-
#: includes/admin/settings/register-settings.php:
|
4319 |
msgid "Symlink File Downloads?"
|
4320 |
msgstr ""
|
4321 |
|
4322 |
-
#: includes/admin/settings/register-settings.php:
|
4323 |
msgid ""
|
4324 |
"Check this if you are delivering really large files or having problems with "
|
4325 |
"file downloads completing."
|
4326 |
msgstr ""
|
4327 |
|
4328 |
-
#: includes/admin/settings/register-settings.php:
|
4329 |
msgid ""
|
4330 |
"The maximum number of times files can be downloaded for purchases. Can be "
|
4331 |
"overwritten for each %s."
|
4332 |
msgstr ""
|
4333 |
|
4334 |
-
#: includes/admin/settings/register-settings.php:
|
4335 |
msgid "File Download Limits"
|
4336 |
msgstr ""
|
4337 |
|
4338 |
-
#: includes/admin/settings/register-settings.php:
|
4339 |
msgid ""
|
4340 |
"Set the global default for the number of times a customer can download "
|
4341 |
"items they purchase. Using a value of 0 is unlimited. This can be defined "
|
@@ -4343,18 +4526,18 @@ msgid ""
|
|
4343 |
"individual purchase."
|
4344 |
msgstr ""
|
4345 |
|
4346 |
-
#: includes/admin/settings/register-settings.php:
|
4347 |
-
#: includes/admin/settings/register-settings.php:
|
4348 |
msgid "Download Link Expiration"
|
4349 |
msgstr ""
|
4350 |
|
4351 |
-
#: includes/admin/settings/register-settings.php:
|
4352 |
msgid ""
|
4353 |
"How long should download links be valid for? Default is 24 hours from the "
|
4354 |
"time they are generated. Enter a time in hours."
|
4355 |
msgstr ""
|
4356 |
|
4357 |
-
#: includes/admin/settings/register-settings.php:
|
4358 |
msgid ""
|
4359 |
"When a customer receives a link to their downloads via email, in their "
|
4360 |
"receipt, or in their purchase history, the link will only be valid for the "
|
@@ -4363,96 +4546,96 @@ msgid ""
|
|
4363 |
"customer."
|
4364 |
msgstr ""
|
4365 |
|
4366 |
-
#: includes/admin/settings/register-settings.php:
|
4367 |
msgid "Disable Redownload?"
|
4368 |
msgstr ""
|
4369 |
|
4370 |
-
#: includes/admin/settings/register-settings.php:
|
4371 |
msgid ""
|
4372 |
"Check this if you do not want to allow users to redownload items from their "
|
4373 |
"purchase history."
|
4374 |
msgstr ""
|
4375 |
|
4376 |
-
#: includes/admin/settings/register-settings.php:
|
4377 |
msgid "Agree to Terms"
|
4378 |
msgstr ""
|
4379 |
|
4380 |
-
#: includes/admin/settings/register-settings.php:
|
4381 |
msgid ""
|
4382 |
"Check this to show an agree to terms on checkout that users must agree to "
|
4383 |
"before purchasing."
|
4384 |
msgstr ""
|
4385 |
|
4386 |
-
#: includes/admin/settings/register-settings.php:
|
4387 |
msgid "Need help creating a Terms of Agreement? We recommend using %sTermageddon%s."
|
4388 |
msgstr ""
|
4389 |
|
4390 |
-
#: includes/admin/settings/register-settings.php:
|
4391 |
msgid "Agree to Terms Label"
|
4392 |
msgstr ""
|
4393 |
|
4394 |
-
#: includes/admin/settings/register-settings.php:
|
4395 |
msgid "Label shown next to the agree to terms checkbox."
|
4396 |
msgstr ""
|
4397 |
|
4398 |
-
#: includes/admin/settings/register-settings.php:
|
4399 |
msgid "Agreement Text"
|
4400 |
msgstr ""
|
4401 |
|
4402 |
-
#: includes/admin/settings/register-settings.php:
|
4403 |
msgid "If Agree to Terms is checked, enter the agreement terms here."
|
4404 |
msgstr ""
|
4405 |
|
4406 |
-
#: includes/admin/settings/register-settings.php:
|
4407 |
msgid "Agree to Privacy Policy"
|
4408 |
msgstr ""
|
4409 |
|
4410 |
-
#: includes/admin/settings/register-settings.php:
|
4411 |
msgid ""
|
4412 |
"Check this to show an agree to Privacy Policy on checkout that users must "
|
4413 |
"agree to before purchasing."
|
4414 |
msgstr ""
|
4415 |
|
4416 |
-
#: includes/admin/settings/register-settings.php:
|
4417 |
msgid "Agree to Privacy Policy Label"
|
4418 |
msgstr ""
|
4419 |
|
4420 |
-
#: includes/admin/settings/register-settings.php:
|
4421 |
msgid "Label shown next to the agree to Privacy Policy checkbox."
|
4422 |
msgstr ""
|
4423 |
|
4424 |
-
#: includes/admin/settings/register-settings.php:
|
4425 |
msgid "Show the Privacy Policy on checkout"
|
4426 |
msgstr ""
|
4427 |
|
4428 |
-
#: includes/admin/settings/register-settings.php:
|
4429 |
msgid "Display your Privacy Policy on checkout."
|
4430 |
msgstr ""
|
4431 |
|
4432 |
-
#: includes/admin/settings/register-settings.php:
|
4433 |
msgid "Set your Privacy Policy here"
|
4434 |
msgstr ""
|
4435 |
|
4436 |
-
#: includes/admin/settings/register-settings.php:
|
4437 |
msgid "Need help creating a Privacy Policy? We recommend %sTermageddon%s."
|
4438 |
msgstr ""
|
4439 |
|
4440 |
-
#: includes/admin/settings/register-settings.php:
|
4441 |
msgid "Payment Status Actions"
|
4442 |
msgstr ""
|
4443 |
|
4444 |
-
#: includes/admin/settings/register-settings.php:
|
4445 |
msgid ""
|
4446 |
"When a user requests to be anonymized or removed from a site, these are the "
|
4447 |
"actions that will be taken on payments associated with their customer, by "
|
4448 |
"status."
|
4449 |
msgstr ""
|
4450 |
|
4451 |
-
#: includes/admin/settings/register-settings.php:
|
4452 |
msgid "What settings should I use?"
|
4453 |
msgstr ""
|
4454 |
|
4455 |
-
#: includes/admin/settings/register-settings.php:
|
4456 |
msgid ""
|
4457 |
"By default, Easy Digital Downloads sets suggested actions based on the "
|
4458 |
"Payment Status. These are purely recommendations, and you may need to "
|
@@ -4460,274 +4643,241 @@ msgid ""
|
|
4460 |
"leave these settings as is."
|
4461 |
msgstr ""
|
4462 |
|
4463 |
-
#: includes/admin/settings/register-settings.php:
|
4464 |
msgid "No Action"
|
4465 |
msgstr ""
|
4466 |
|
4467 |
-
#: includes/admin/settings/register-settings.php:
|
4468 |
msgid "Anonymize"
|
4469 |
msgstr ""
|
4470 |
|
4471 |
-
#: includes/admin/settings/register-settings.php:
|
4472 |
msgid "Buy Now Disabled"
|
4473 |
msgstr ""
|
4474 |
|
4475 |
-
#: includes/admin/settings/register-settings.php:
|
4476 |
msgid ""
|
4477 |
"Buy Now buttons are only available for stores that have a single supported "
|
4478 |
"gateway active and that do not use taxes."
|
4479 |
msgstr ""
|
4480 |
|
4481 |
-
#: includes/admin/settings/register-settings.php:
|
4482 |
msgid "Settings updated."
|
4483 |
msgstr ""
|
4484 |
|
4485 |
-
#: includes/admin/settings/register-settings.php:
|
4486 |
msgid "Error setting default gateway. No gateways are enabled."
|
4487 |
msgstr ""
|
4488 |
|
4489 |
-
#: includes/admin/settings/register-settings.php:
|
4490 |
msgid "%s could not be set as the default gateway. It must first be enabled."
|
4491 |
msgstr ""
|
4492 |
|
4493 |
-
#: includes/admin/settings/register-settings.php:
|
4494 |
-
msgid "Payments"
|
4495 |
-
msgstr ""
|
4496 |
-
|
4497 |
-
#: includes/admin/settings/register-settings.php:1375
|
4498 |
msgid "Privacy"
|
4499 |
msgstr ""
|
4500 |
|
4501 |
-
#: includes/admin/settings/register-settings.php:
|
4502 |
msgid "Licenses"
|
4503 |
msgstr ""
|
4504 |
|
4505 |
-
#: includes/admin/settings/register-settings.php:
|
4506 |
msgid "Misc"
|
4507 |
msgstr ""
|
4508 |
|
4509 |
-
#: includes/admin/settings/register-settings.php:
|
4510 |
msgid "Store"
|
4511 |
msgstr ""
|
4512 |
|
4513 |
-
#: includes/admin/settings/register-settings.php:
|
4514 |
msgid "Gateways"
|
4515 |
msgstr ""
|
4516 |
|
4517 |
-
#: includes/admin/settings/register-settings.php:
|
4518 |
#: includes/gateways/stripe/includes/payment-methods/payment-request/admin/settings.php:82
|
4519 |
#: includes/install.php:98 templates/widget-cart-checkout.php:6
|
4520 |
#: templates/widget-cart-empty.php:7
|
4521 |
msgid "Checkout"
|
4522 |
msgstr ""
|
4523 |
|
4524 |
-
#: includes/admin/settings/register-settings.php:
|
4525 |
msgid "Accounting"
|
4526 |
msgstr ""
|
4527 |
|
4528 |
-
#: includes/admin/settings/register-settings.php:
|
4529 |
msgid "Purchase Receipts"
|
4530 |
msgstr ""
|
4531 |
|
4532 |
-
#: includes/admin/settings/register-settings.php:
|
4533 |
msgid "New Sale Notifications"
|
4534 |
msgstr ""
|
4535 |
|
4536 |
-
#: includes/admin/settings/register-settings.php:
|
4537 |
msgid "Main"
|
4538 |
msgstr ""
|
4539 |
|
4540 |
-
#: includes/admin/settings/register-settings.php:
|
4541 |
msgid "Button Text"
|
4542 |
msgstr ""
|
4543 |
|
4544 |
-
#: includes/admin/settings/register-settings.php:
|
4545 |
msgid "Terms of Agreement"
|
4546 |
msgstr ""
|
4547 |
|
4548 |
-
#: includes/admin/settings/register-settings.php:
|
4549 |
msgid "Export & Erase"
|
4550 |
msgstr ""
|
4551 |
|
4552 |
-
#: includes/admin/settings/register-settings.php:
|
4553 |
msgid ""
|
4554 |
"Don't see what you need? More Payment Gateway options are available <a "
|
4555 |
"href=\"%s\">here</a>."
|
4556 |
msgstr ""
|
4557 |
|
4558 |
-
#: includes/admin/settings/register-settings.php:
|
4559 |
msgid "The callback function used for the %s setting is missing."
|
4560 |
msgstr ""
|
4561 |
|
4562 |
-
#: includes/admin/settings/register-settings.php:
|
4563 |
msgid "Upload File"
|
4564 |
msgstr ""
|
4565 |
|
4566 |
#: includes/admin/settings/register-settings.php:2176
|
4567 |
-
msgid "Access your SendWP account"
|
4568 |
-
msgstr ""
|
4569 |
-
|
4570 |
-
#: includes/admin/settings/register-settings.php:2197
|
4571 |
-
msgid "SendWP plugin activated."
|
4572 |
-
msgstr ""
|
4573 |
-
|
4574 |
-
#: includes/admin/settings/register-settings.php:2200
|
4575 |
-
msgid "Disconnect SendWP"
|
4576 |
-
msgstr ""
|
4577 |
-
|
4578 |
-
#: includes/admin/settings/register-settings.php:2207
|
4579 |
-
msgid ""
|
4580 |
-
"We recommend SendWP to ensure quick and reliable delivery of all emails "
|
4581 |
-
"sent from your store, such as purchase receipts, subscription renewal "
|
4582 |
-
"reminders, password resets, and more."
|
4583 |
-
msgstr ""
|
4584 |
-
|
4585 |
-
#: includes/admin/settings/register-settings.php:2207
|
4586 |
-
msgid "%sLearn more%s"
|
4587 |
-
msgstr ""
|
4588 |
-
|
4589 |
-
#: includes/admin/settings/register-settings.php:2210
|
4590 |
-
msgid "Connect with SendWP"
|
4591 |
-
msgstr ""
|
4592 |
-
|
4593 |
-
#: includes/admin/settings/register-settings.php:2246
|
4594 |
msgid "Recapture plugin activated."
|
4595 |
msgstr ""
|
4596 |
|
4597 |
-
#: includes/admin/settings/register-settings.php:
|
4598 |
msgid "%sAccess your Recapture account%s."
|
4599 |
msgstr ""
|
4600 |
|
4601 |
-
#: includes/admin/settings/register-settings.php:
|
4602 |
msgid "Disconnect Recapture"
|
4603 |
msgstr ""
|
4604 |
|
4605 |
-
#: includes/admin/settings/register-settings.php:
|
4606 |
msgid "%sComplete your connection to Recapture%s"
|
4607 |
msgstr ""
|
4608 |
|
4609 |
-
#: includes/admin/settings/register-settings.php:
|
4610 |
msgid ""
|
4611 |
"We recommend Recapture for recovering lost revenue by automatically sending "
|
4612 |
"effective, targeted emails to customers who abandon their shopping cart."
|
4613 |
msgstr ""
|
4614 |
|
4615 |
-
#: includes/admin/settings/register-settings.php:
|
4616 |
msgid "%sLearn more%s (Free trial available)"
|
4617 |
msgstr ""
|
4618 |
|
4619 |
-
#: includes/admin/settings/register-settings.php:
|
4620 |
msgid "Connect with Recapture"
|
4621 |
msgstr ""
|
4622 |
|
4623 |
-
#: includes/admin/settings/register-settings.php:
|
4624 |
msgid "Country Wide"
|
4625 |
msgstr ""
|
4626 |
|
4627 |
-
#: includes/admin/settings/register-settings.php:
|
4628 |
msgid "Rate"
|
4629 |
msgstr ""
|
4630 |
|
4631 |
-
#: includes/admin/settings/register-settings.php:
|
4632 |
msgid ""
|
4633 |
"<strong>Regional tax rates: </strong>When a customer enters an address on "
|
4634 |
"checkout that matches the specified region for this tax rate, the cart tax "
|
4635 |
"will adjust automatically. Enter a percentage, such as 6.5 for 6.5%."
|
4636 |
msgstr ""
|
4637 |
|
4638 |
-
#: includes/admin/settings/register-settings.php:
|
4639 |
-
#: includes/admin/settings/register-settings.php:
|
4640 |
msgid "Choose a country"
|
4641 |
msgstr ""
|
4642 |
|
4643 |
-
#: includes/admin/settings/register-settings.php:
|
4644 |
msgid "Choose a state"
|
4645 |
msgstr ""
|
4646 |
|
4647 |
-
#: includes/admin/settings/register-settings.php:
|
4648 |
-
#: includes/admin/settings/register-settings.php:
|
4649 |
msgid "Apply to whole country"
|
4650 |
msgstr ""
|
4651 |
|
4652 |
-
#: includes/admin/settings/register-settings.php:
|
4653 |
-
#: includes/admin/settings/register-settings.php:
|
4654 |
msgid "Remove Rate"
|
4655 |
msgstr ""
|
4656 |
|
4657 |
-
#: includes/admin/settings/register-settings.php:
|
4658 |
msgid "Add Tax Rate"
|
4659 |
msgstr ""
|
4660 |
|
4661 |
-
#: includes/admin/settings/register-settings.php:
|
4662 |
msgid ""
|
4663 |
"Your license key expired on %s. Please <a href=\"%s\" "
|
4664 |
"target=\"_blank\">renew your license key</a>."
|
4665 |
msgstr ""
|
4666 |
|
4667 |
-
#: includes/admin/settings/register-settings.php:
|
4668 |
msgid ""
|
4669 |
"Your license key has been disabled. Please <a href=\"%s\" "
|
4670 |
"target=\"_blank\">contact support</a> for more information."
|
4671 |
msgstr ""
|
4672 |
|
4673 |
-
#: includes/admin/settings/register-settings.php:
|
4674 |
msgid ""
|
4675 |
"Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
|
4676 |
"page</a> and verify it."
|
4677 |
msgstr ""
|
4678 |
|
4679 |
-
#: includes/admin/settings/register-settings.php:
|
4680 |
msgid ""
|
4681 |
"Your %s is not active for this URL. Please <a href=\"%s\" "
|
4682 |
"target=\"_blank\">visit your account page</a> to manage your license key "
|
4683 |
"URLs."
|
4684 |
msgstr ""
|
4685 |
|
4686 |
-
#: includes/admin/settings/register-settings.php:
|
4687 |
msgid "This appears to be an invalid license key for %s."
|
4688 |
msgstr ""
|
4689 |
|
4690 |
-
#: includes/admin/settings/register-settings.php:
|
4691 |
msgid ""
|
4692 |
"Your license key has reached its activation limit. <a href=\"%s\">View "
|
4693 |
"possible upgrades</a> now."
|
4694 |
msgstr ""
|
4695 |
|
4696 |
-
#: includes/admin/settings/register-settings.php:
|
4697 |
msgid ""
|
4698 |
"The key you entered belongs to a bundle, please use the product specific "
|
4699 |
"license key."
|
4700 |
msgstr ""
|
4701 |
|
4702 |
-
#: includes/admin/settings/register-settings.php:
|
4703 |
msgid "unknown_error"
|
4704 |
msgstr ""
|
4705 |
|
4706 |
-
#: includes/admin/settings/register-settings.php:
|
4707 |
msgid ""
|
4708 |
"There was an error with this license key: %s. Please <a href=\"%s\">contact "
|
4709 |
"our support team</a>."
|
4710 |
msgstr ""
|
4711 |
|
4712 |
-
#: includes/admin/settings/register-settings.php:
|
4713 |
msgid "License key never expires."
|
4714 |
msgstr ""
|
4715 |
|
4716 |
-
#: includes/admin/settings/register-settings.php:
|
4717 |
-
msgid ""
|
4718 |
-
"Your license key expires soon! It expires on %s. <a href=\"%s\" "
|
4719 |
-
"target=\"_blank\">Renew your license key</a>."
|
4720 |
msgstr ""
|
4721 |
|
4722 |
-
#: includes/admin/settings/register-settings.php:
|
4723 |
msgid "Your license key expires on %s."
|
4724 |
msgstr ""
|
4725 |
|
4726 |
-
#: includes/admin/settings/register-settings.php:
|
4727 |
msgid "To receive updates, please enter your valid %s license key."
|
4728 |
msgstr ""
|
4729 |
|
4730 |
-
#: includes/admin/settings/register-settings.php:
|
4731 |
msgid "Deactivate License"
|
4732 |
msgstr ""
|
4733 |
|
@@ -5285,7 +5435,7 @@ msgstr ""
|
|
5285 |
#: includes/admin/upgrades/upgrade-functions.php:899
|
5286 |
#: includes/admin/upgrades/upgrade-functions.php:1027
|
5287 |
#: includes/admin/upgrades/upgrade-functions.php:1112
|
5288 |
-
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:
|
5289 |
msgid "You do not have permission to do shop upgrades"
|
5290 |
msgstr ""
|
5291 |
|
@@ -5354,6 +5504,27 @@ msgstr ""
|
|
5354 |
msgid "Step %d of approximately %d running"
|
5355 |
msgstr ""
|
5356 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5357 |
#: includes/ajax-functions.php:143 includes/cart/actions.php:112
|
5358 |
msgid ""
|
5359 |
"Missing nonce when removing an item from the cart. Please read the "
|
@@ -5370,7 +5541,7 @@ msgid ""
|
|
5370 |
"ajax-requests-in-easy-digital-downloads-2-9-4"
|
5371 |
msgstr ""
|
5372 |
|
5373 |
-
#: includes/ajax-functions.php:
|
5374 |
msgid ""
|
5375 |
"Missing nonce when recalculating taxes. Please read the following for more "
|
5376 |
"information: "
|
@@ -5378,7 +5549,7 @@ msgid ""
|
|
5378 |
"ajax-requests-in-easy-digital-downloads-2-9-4"
|
5379 |
msgstr ""
|
5380 |
|
5381 |
-
#: includes/ajax-functions.php:
|
5382 |
msgid ""
|
5383 |
"Missing nonce when retrieving state list. Please read the following for "
|
5384 |
"more information: "
|
@@ -5386,16 +5557,16 @@ msgid ""
|
|
5386 |
"ajax-requests-in-easy-digital-downloads-2-9-4"
|
5387 |
msgstr ""
|
5388 |
|
5389 |
-
#: includes/ajax-functions.php:
|
5390 |
msgid "No results found"
|
5391 |
msgstr ""
|
5392 |
|
5393 |
-
#: includes/ajax-functions.php:
|
5394 |
#: includes/class-edd-html-elements.php:339
|
5395 |
msgid "No users found"
|
5396 |
msgstr ""
|
5397 |
|
5398 |
-
#: includes/ajax-functions.php:
|
5399 |
msgid "All Prices"
|
5400 |
msgstr ""
|
5401 |
|
@@ -5489,6 +5660,14 @@ msgstr ""
|
|
5489 |
msgid "You do not have permission to %s API keys for this user"
|
5490 |
msgstr ""
|
5491 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5492 |
#: includes/cart/class-edd-cart.php:897
|
5493 |
msgid "includes %s tax"
|
5494 |
msgstr ""
|
@@ -6110,23 +6289,23 @@ msgstr ""
|
|
6110 |
msgid "Single Use: %s"
|
6111 |
msgstr ""
|
6112 |
|
6113 |
-
#: includes/class-edd-cli.php:506 includes/class-edd-cli.php:
|
6114 |
msgid "No action specified, did you mean"
|
6115 |
msgstr ""
|
6116 |
|
6117 |
-
#: includes/class-edd-cli.php:508 includes/class-edd-cli.php:
|
6118 |
msgid "Invalid action specified, did you mean"
|
6119 |
msgstr ""
|
6120 |
|
6121 |
-
#: includes/class-edd-cli.php:
|
6122 |
msgid "Invalid status '%s', defaulting to 'complete'"
|
6123 |
msgstr ""
|
6124 |
|
6125 |
-
#: includes/class-edd-cli.php:
|
6126 |
msgid "Specified ID is not a product"
|
6127 |
msgstr ""
|
6128 |
|
6129 |
-
#: includes/class-edd-cli.php:
|
6130 |
msgid "Created %s payments"
|
6131 |
msgstr ""
|
6132 |
|
@@ -6208,24 +6387,24 @@ msgstr ""
|
|
6208 |
msgid "Enter username"
|
6209 |
msgstr ""
|
6210 |
|
6211 |
-
#: includes/class-edd-license-handler.php:
|
6212 |
msgid "%1$s"
|
6213 |
msgstr ""
|
6214 |
|
6215 |
-
#: includes/class-edd-license-handler.php:
|
6216 |
msgid ""
|
6217 |
"Enter your extension license keys here to receive updates for purchased "
|
6218 |
"extensions. If your license key has expired, please <a href=\"%s\" "
|
6219 |
"target=\"_blank\">renew your license</a>."
|
6220 |
msgstr ""
|
6221 |
|
6222 |
-
#: includes/class-edd-license-handler.php:
|
6223 |
msgid ""
|
6224 |
"You have invalid or expired license keys for Easy Digital Downloads. Please "
|
6225 |
"go to the <a href=\"%s\">Licenses page</a> to correct this issue."
|
6226 |
msgstr ""
|
6227 |
|
6228 |
-
#: includes/class-edd-license-handler.php:
|
6229 |
msgid "Enter valid license key for automatic updates."
|
6230 |
msgstr ""
|
6231 |
|
@@ -6637,11 +6816,11 @@ msgid ""
|
|
6637 |
"of a purchase. HTML is accepted. Available template tags:"
|
6638 |
msgstr ""
|
6639 |
|
6640 |
-
#: includes/deprecated-functions.php:517 includes/process-download.php:
|
6641 |
msgid "Sorry but you have hit your download limit for this file."
|
6642 |
msgstr ""
|
6643 |
|
6644 |
-
#: includes/deprecated-functions.php:532 includes/download-functions.php:
|
6645 |
msgid "Sorry but your download link has expired."
|
6646 |
msgstr ""
|
6647 |
|
@@ -6667,8 +6846,8 @@ msgid "Install Jilt"
|
|
6667 |
msgstr ""
|
6668 |
|
6669 |
#: includes/deprecated-functions.php:813 includes/deprecated-functions.php:892
|
6670 |
-
#: includes/deprecated-functions.php:921 includes/
|
6671 |
-
#: includes/
|
6672 |
msgid "You do not have permission to do this."
|
6673 |
msgstr ""
|
6674 |
|
@@ -6684,13 +6863,61 @@ msgid ""
|
|
6684 |
"free%4$s."
|
6685 |
msgstr ""
|
6686 |
|
6687 |
-
#: includes/deprecated-functions.php:975 includes/emails/functions.php:
|
6688 |
#. Translators: %1$s - Opening anchor tag, %2$s - The url to dismiss the ajax
|
6689 |
#. notice, %3$s - Complete the opening of the anchor tag, %4$s - Open span tag,
|
6690 |
#. %4$s - Close span tag
|
6691 |
msgid "%1$s %2$s %3$s %4$s Dismiss this notice. %5$s"
|
6692 |
msgstr ""
|
6693 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6694 |
#: includes/download-functions.php:524
|
6695 |
msgid "Bundle"
|
6696 |
msgstr ""
|
@@ -6730,11 +6957,11 @@ msgstr ""
|
|
6730 |
msgid "No template, plain text only"
|
6731 |
msgstr ""
|
6732 |
|
6733 |
-
#: includes/emails/class-edd-emails.php:
|
6734 |
msgid "You cannot send email with EDD_Emails until init/admin_init has been reached"
|
6735 |
msgstr ""
|
6736 |
|
6737 |
-
#: includes/emails/class-edd-emails.php:
|
6738 |
msgid ""
|
6739 |
"Email from Easy Digital Downloads failed to send.\n"
|
6740 |
"Send time: %s\n"
|
@@ -6743,47 +6970,43 @@ msgid ""
|
|
6743 |
"\n"
|
6744 |
msgstr ""
|
6745 |
|
6746 |
-
#: includes/emails/functions.php:
|
6747 |
msgid "New download purchase - Order #%1$s"
|
6748 |
msgstr ""
|
6749 |
|
6750 |
-
#: includes/emails/functions.php:
|
6751 |
msgid "Hello"
|
6752 |
msgstr ""
|
6753 |
|
6754 |
-
#: includes/emails/functions.php:
|
6755 |
msgid "A %s purchase has been made"
|
6756 |
msgstr ""
|
6757 |
|
6758 |
-
#: includes/emails/functions.php:
|
6759 |
msgid "%s sold:"
|
6760 |
msgstr ""
|
6761 |
|
6762 |
-
#: includes/emails/functions.php:
|
6763 |
msgid "Purchased by: "
|
6764 |
msgstr ""
|
6765 |
|
6766 |
-
#: includes/emails/functions.php:
|
6767 |
msgid "Amount: "
|
6768 |
msgstr ""
|
6769 |
|
6770 |
-
#: includes/emails/functions.php:
|
6771 |
msgid "Payment Method: "
|
6772 |
msgstr ""
|
6773 |
|
6774 |
-
#: includes/emails/functions.php:
|
6775 |
msgid "Thank you"
|
6776 |
msgstr ""
|
6777 |
|
6778 |
-
#: includes/emails/functions.php:
|
6779 |
-
msgid "Something went wrong. SendWP was not installed correctly."
|
6780 |
-
msgstr ""
|
6781 |
-
|
6782 |
-
#: includes/emails/functions.php:440
|
6783 |
msgid "Something went wrong. Recapture for EDD was not installed correctly."
|
6784 |
msgstr ""
|
6785 |
|
6786 |
-
#: includes/emails/functions.php:
|
6787 |
#. Translators: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s
|
6788 |
#. - </a> tag
|
6789 |
msgid ""
|
@@ -7033,7 +7256,7 @@ msgid "Sign up for PayPal"
|
|
7033 |
msgstr ""
|
7034 |
|
7035 |
#: includes/gateways/paypal/admin/connect.php:80
|
7036 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7037 |
msgid "Retrieving account information..."
|
7038 |
msgstr ""
|
7039 |
|
@@ -7688,41 +7911,41 @@ msgstr ""
|
|
7688 |
msgid "Preapproval cancelled"
|
7689 |
msgstr ""
|
7690 |
|
7691 |
-
#: includes/gateways/stripe/includes/admin/admin-actions.php:
|
|
|
|
|
|
|
|
|
7692 |
msgid "The preapproved payment was successfully charged."
|
7693 |
msgstr ""
|
7694 |
|
7695 |
-
#: includes/gateways/stripe/includes/admin/admin-actions.php:
|
7696 |
msgid ""
|
7697 |
"The preapproved payment failed to be charged. View order details for "
|
7698 |
"further details."
|
7699 |
msgstr ""
|
7700 |
|
7701 |
-
#: includes/gateways/stripe/includes/admin/admin-actions.php:
|
7702 |
msgid "The preapproved payment was successfully cancelled."
|
7703 |
msgstr ""
|
7704 |
|
7705 |
-
#: includes/gateways/stripe/includes/admin/admin-actions.php:
|
7706 |
#. translators: %1$s Stripe Connect error message. %2$s Retry URL.
|
7707 |
msgid ""
|
7708 |
"There was an error connecting your Stripe account. Message: %1$s. Please <a "
|
7709 |
"href=\"%2$s\">try again</a>."
|
7710 |
msgstr ""
|
7711 |
|
7712 |
-
#: includes/gateways/stripe/includes/admin/admin-actions.php:
|
7713 |
msgid "Used Existing Card:"
|
7714 |
msgstr ""
|
7715 |
|
7716 |
-
#: includes/gateways/stripe/includes/admin/admin-actions.php:
|
7717 |
-
msgid "Yes"
|
7718 |
-
msgstr ""
|
7719 |
-
|
7720 |
-
#: includes/gateways/stripe/includes/admin/admin-actions.php:187
|
7721 |
#: includes/gateways/stripe/includes/scripts.php:149
|
7722 |
msgid "Refund Charge in Stripe"
|
7723 |
msgstr ""
|
7724 |
|
7725 |
-
#: includes/gateways/stripe/includes/admin/admin-filters.php:
|
7726 |
msgid "Process"
|
7727 |
msgstr ""
|
7728 |
|
@@ -7818,7 +8041,7 @@ msgid ""
|
|
7818 |
msgstr ""
|
7819 |
|
7820 |
#: includes/gateways/stripe/includes/admin/notices.php:39
|
7821 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7822 |
#: includes/gateways/stripe/includes/payment-methods/payment-request/apple-pay.php:22
|
7823 |
msgid "Unable to locate registry"
|
7824 |
msgstr ""
|
@@ -7827,7 +8050,7 @@ msgstr ""
|
|
7827 |
msgid "Stripe-specific reports have been removed."
|
7828 |
msgstr ""
|
7829 |
|
7830 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7831 |
#. translators: %1$s Opening anchor tag, do not translate. %2$s Closing anchor
|
7832 |
#. tag, do not translate.
|
7833 |
msgid ""
|
@@ -7835,33 +8058,33 @@ msgid ""
|
|
7835 |
"again%2$s. If you continue to have this problem, please contact support."
|
7836 |
msgstr ""
|
7837 |
|
7838 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7839 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7840 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7841 |
msgid "Connect with Stripe"
|
7842 |
msgstr ""
|
7843 |
|
7844 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7845 |
msgid ""
|
7846 |
"Connect with Stripe for pay as you go pricing: 2% per-transaction fee + "
|
7847 |
"Stripe fees."
|
7848 |
msgstr ""
|
7849 |
|
7850 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7851 |
#. translators: %1$s Opening anchor tag, do not translate. %2$s Closing anchor
|
7852 |
#. tag, do not translate.
|
7853 |
msgid "Have questions about connecting with Stripe? See the %1$sdocumentation%2$s."
|
7854 |
msgstr ""
|
7855 |
|
7856 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7857 |
msgid "Manage API keys manually"
|
7858 |
msgstr ""
|
7859 |
|
7860 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7861 |
msgid "Hide API keys"
|
7862 |
msgstr ""
|
7863 |
|
7864 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7865 |
msgid ""
|
7866 |
"Although you can add your API keys manually, we recommend using Stripe "
|
7867 |
"Connect: an easier and more secure way of connecting your Stripe account to "
|
@@ -7871,11 +8094,11 @@ msgid ""
|
|
7871 |
"just a few clicks."
|
7872 |
msgstr ""
|
7873 |
|
7874 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7875 |
msgid "Unable to retrieve account information."
|
7876 |
msgstr ""
|
7877 |
|
7878 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7879 |
#. translators: %1$s Stripe payment mode. %2$s Opening anchor tag for
|
7880 |
#. reconnecting to Stripe, do not translate. %3$s Opening anchor tag for
|
7881 |
#. disconnecting Stripe, do not translate. %4$s Closing anchor tag, do not
|
@@ -7885,56 +8108,56 @@ msgid ""
|
|
7885 |
"mode%4$s, or %3$sdisconnect this account%4$s."
|
7886 |
msgstr ""
|
7887 |
|
7888 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7889 |
#. translators: %1$s Opening bold tag, do not translate. %2$s Closing bold tag,
|
7890 |
#. do not translate.
|
7891 |
msgid "Webhooks cannot be configured for recurring purchases with this account."
|
7892 |
msgstr ""
|
7893 |
|
7894 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7895 |
#. translators: %1$s Opening anchor tag for disconnecting Stripe, do not
|
7896 |
#. translate. %2$s Closing anchor tag, do not translate.
|
7897 |
msgid "%1$sDisconnect this account%2$s."
|
7898 |
msgstr ""
|
7899 |
|
7900 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7901 |
msgid "Pay as you go pricing: 2% per-transaction fee + Stripe fees."
|
7902 |
msgstr ""
|
7903 |
|
7904 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7905 |
msgid "Administrator (Owner)"
|
7906 |
msgstr ""
|
7907 |
|
7908 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7909 |
msgid ""
|
7910 |
"The API keys provided do not match the Stripe Connect account associated "
|
7911 |
"with this installation. If you have manually modified these values after "
|
7912 |
"connecting your account, please reconnect below or update your API keys."
|
7913 |
msgstr ""
|
7914 |
|
7915 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7916 |
msgid ""
|
7917 |
"It is highly recommended to Connect with Stripe for easier setup and "
|
7918 |
"improved security."
|
7919 |
msgstr ""
|
7920 |
|
7921 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7922 |
#. translators: %1$s Stripe payment mode.
|
7923 |
msgid "Your manually managed %1$s mode API keys are valid."
|
7924 |
msgstr ""
|
7925 |
|
7926 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7927 |
#. translators: %1$s Stripe payment mode.
|
7928 |
msgid "Your manually managed %1$s mode API keys are invalid."
|
7929 |
msgstr ""
|
7930 |
|
7931 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7932 |
msgid ""
|
7933 |
"Start accepting payments with Stripe by connecting your account. Stripe "
|
7934 |
"Connect helps ensure easier setup and improved security."
|
7935 |
msgstr ""
|
7936 |
|
7937 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
7938 |
#. translators: %s Test mode status. Enabled or disabled.
|
7939 |
msgid "\"Test Mode\" has been %s. Please verify your Stripe connection status."
|
7940 |
msgstr ""
|
@@ -8138,7 +8361,7 @@ msgid ""
|
|
8138 |
"recommendations%2$s."
|
8139 |
msgstr ""
|
8140 |
|
8141 |
-
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:
|
8142 |
#. translators: %s Upgrade link.
|
8143 |
msgid ""
|
8144 |
"Easy Digital Downloads - Stripe Gateway needs to upgrade the customers "
|
@@ -8147,7 +8370,7 @@ msgid ""
|
|
8147 |
"this upgrade</a>"
|
8148 |
msgstr ""
|
8149 |
|
8150 |
-
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:
|
8151 |
msgid ""
|
8152 |
"<strong>About this upgrade:</strong><br />This upgrade will improve the "
|
8153 |
"reliability of associating purchase records with your existing customer "
|
@@ -8155,7 +8378,7 @@ msgid ""
|
|
8155 |
"locally on their EDD customer record, instead of their user record."
|
8156 |
msgstr ""
|
8157 |
|
8158 |
-
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:
|
8159 |
msgid ""
|
8160 |
"<strong>Advanced User?</strong><br />This upgrade can also be run via WPCLI "
|
8161 |
"with the following command:<br /><code>wp edd-stripe "
|
@@ -8218,7 +8441,7 @@ msgstr ""
|
|
8218 |
msgid "Card successfully added."
|
8219 |
msgstr ""
|
8220 |
|
8221 |
-
#: includes/gateways/stripe/includes/class-edd-stripe.php:
|
8222 |
#: includes/gateways/stripe/includes/template-functions.php:125
|
8223 |
msgid "Credit Card"
|
8224 |
msgstr ""
|
@@ -8732,142 +8955,147 @@ msgstr ""
|
|
8732 |
msgid "Passwords do not match"
|
8733 |
msgstr ""
|
8734 |
|
8735 |
-
#: includes/misc-functions.php:
|
8736 |
msgid "US Dollars ($)"
|
8737 |
msgstr ""
|
8738 |
|
8739 |
-
#: includes/misc-functions.php:
|
8740 |
msgid "Euros (€)"
|
8741 |
msgstr ""
|
8742 |
|
8743 |
-
#: includes/misc-functions.php:
|
8744 |
msgid "Pound Sterling (£)"
|
8745 |
msgstr ""
|
8746 |
|
8747 |
-
#: includes/misc-functions.php:
|
8748 |
msgid "Australian Dollars ($)"
|
8749 |
msgstr ""
|
8750 |
|
8751 |
-
#: includes/misc-functions.php:
|
8752 |
msgid "Brazilian Real (R$)"
|
8753 |
msgstr ""
|
8754 |
|
8755 |
-
#: includes/misc-functions.php:
|
8756 |
msgid "Canadian Dollars ($)"
|
8757 |
msgstr ""
|
8758 |
|
8759 |
-
#: includes/misc-functions.php:
|
8760 |
msgid "Czech Koruna"
|
8761 |
msgstr ""
|
8762 |
|
8763 |
-
#: includes/misc-functions.php:
|
8764 |
msgid "Danish Krone"
|
8765 |
msgstr ""
|
8766 |
|
8767 |
-
#: includes/misc-functions.php:
|
8768 |
msgid "Hong Kong Dollar ($)"
|
8769 |
msgstr ""
|
8770 |
|
8771 |
-
#: includes/misc-functions.php:
|
8772 |
msgid "Hungarian Forint"
|
8773 |
msgstr ""
|
8774 |
|
8775 |
-
#: includes/misc-functions.php:
|
8776 |
msgid "Israeli Shekel (₪)"
|
8777 |
msgstr ""
|
8778 |
|
8779 |
-
#: includes/misc-functions.php:
|
8780 |
msgid "Japanese Yen (¥)"
|
8781 |
msgstr ""
|
8782 |
|
8783 |
-
#: includes/misc-functions.php:
|
8784 |
msgid "Malaysian Ringgits"
|
8785 |
msgstr ""
|
8786 |
|
8787 |
-
#: includes/misc-functions.php:
|
8788 |
msgid "Mexican Peso ($)"
|
8789 |
msgstr ""
|
8790 |
|
8791 |
-
#: includes/misc-functions.php:
|
8792 |
msgid "New Zealand Dollar ($)"
|
8793 |
msgstr ""
|
8794 |
|
8795 |
-
#: includes/misc-functions.php:
|
8796 |
msgid "Norwegian Krone"
|
8797 |
msgstr ""
|
8798 |
|
8799 |
-
#: includes/misc-functions.php:
|
8800 |
msgid "Philippine Pesos"
|
8801 |
msgstr ""
|
8802 |
|
8803 |
-
#: includes/misc-functions.php:
|
8804 |
msgid "Polish Zloty"
|
8805 |
msgstr ""
|
8806 |
|
8807 |
-
#: includes/misc-functions.php:
|
8808 |
msgid "Singapore Dollar ($)"
|
8809 |
msgstr ""
|
8810 |
|
8811 |
-
#: includes/misc-functions.php:
|
8812 |
msgid "Swedish Krona"
|
8813 |
msgstr ""
|
8814 |
|
8815 |
-
#: includes/misc-functions.php:
|
8816 |
msgid "Swiss Franc"
|
8817 |
msgstr ""
|
8818 |
|
8819 |
-
#: includes/misc-functions.php:
|
8820 |
msgid "Taiwan New Dollars"
|
8821 |
msgstr ""
|
8822 |
|
8823 |
-
#: includes/misc-functions.php:
|
8824 |
msgid "Thai Baht (฿)"
|
8825 |
msgstr ""
|
8826 |
|
8827 |
-
#: includes/misc-functions.php:
|
8828 |
msgid "Indian Rupee (₹)"
|
8829 |
msgstr ""
|
8830 |
|
8831 |
-
#: includes/misc-functions.php:
|
8832 |
msgid "Turkish Lira (₺)"
|
8833 |
msgstr ""
|
8834 |
|
8835 |
-
#: includes/misc-functions.php:
|
8836 |
msgid "Iranian Rial (﷼)"
|
8837 |
msgstr ""
|
8838 |
|
8839 |
-
#: includes/misc-functions.php:
|
8840 |
msgid "Russian Rubles"
|
8841 |
msgstr ""
|
8842 |
|
8843 |
-
#: includes/misc-functions.php:
|
8844 |
msgid "Angolan Kwanza"
|
8845 |
msgstr ""
|
8846 |
|
8847 |
-
#: includes/misc-functions.php:
|
8848 |
msgid ""
|
8849 |
"%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
|
8850 |
"%2$s! Use %3$s instead."
|
8851 |
msgstr ""
|
8852 |
|
8853 |
-
#: includes/misc-functions.php:
|
8854 |
msgid ""
|
8855 |
"%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
|
8856 |
"%2$s with no alternative available."
|
8857 |
msgstr ""
|
8858 |
|
8859 |
-
#: includes/misc-functions.php:
|
8860 |
msgid ""
|
8861 |
"The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
|
8862 |
"Downloads version %3$s! Please use %4$s instead."
|
8863 |
msgstr ""
|
8864 |
|
8865 |
-
#: includes/misc-functions.php:
|
8866 |
msgid ""
|
8867 |
"The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
|
8868 |
"Downloads version %3$s with no alternative available."
|
8869 |
msgstr ""
|
8870 |
|
|
|
|
|
|
|
|
|
|
|
8871 |
#: includes/payments/actions.php:187
|
8872 |
msgid "After payment actions processed."
|
8873 |
msgstr ""
|
@@ -9425,15 +9653,15 @@ msgstr ""
|
|
9425 |
msgid "Purchase Verification Failed"
|
9426 |
msgstr ""
|
9427 |
|
9428 |
-
#: includes/process-download.php:
|
9429 |
msgid "Invalid file"
|
9430 |
msgstr ""
|
9431 |
|
9432 |
-
#: includes/process-download.php:
|
9433 |
msgid "The requested file could not be found. Error 404."
|
9434 |
msgstr ""
|
9435 |
|
9436 |
-
#: includes/process-download.php:
|
9437 |
msgid "File not found"
|
9438 |
msgstr ""
|
9439 |
|
@@ -9685,19 +9913,19 @@ msgstr ""
|
|
9685 |
msgid "Please wait …"
|
9686 |
msgstr ""
|
9687 |
|
9688 |
-
#: includes/scripts.php:
|
9689 |
msgid "Purchase Limit Settings"
|
9690 |
msgstr ""
|
9691 |
|
9692 |
-
#: includes/scripts.php:
|
9693 |
msgid "Simple Shipping Settings"
|
9694 |
msgstr ""
|
9695 |
|
9696 |
-
#: includes/scripts.php:
|
9697 |
msgid "Software Licensing Settings"
|
9698 |
msgstr ""
|
9699 |
|
9700 |
-
#: includes/scripts.php:
|
9701 |
msgid "Recurring Payments Settings"
|
9702 |
msgstr ""
|
9703 |
|
@@ -10131,7 +10359,7 @@ msgstr ""
|
|
10131 |
msgid "Number of items in cart"
|
10132 |
msgstr ""
|
10133 |
|
10134 |
-
#: tests/bootstrap.php:
|
10135 |
msgid "HTTP Requests disabled for unit tests"
|
10136 |
msgstr ""
|
10137 |
|
@@ -10254,13 +10482,13 @@ msgctxt "Date one to date two"
|
|
10254 |
msgid "to"
|
10255 |
msgstr ""
|
10256 |
|
10257 |
-
#: includes/admin/settings/register-settings.php:
|
10258 |
#: includes/template-functions.php:79
|
10259 |
msgctxt "text shown on the Add to Cart Button when the product is already in the cart"
|
10260 |
msgid "Checkout"
|
10261 |
msgstr ""
|
10262 |
|
10263 |
-
#: includes/admin/settings/register-settings.php:
|
10264 |
msgctxt ""
|
10265 |
"payment status labels for the privacy export & erase settings: Pending "
|
10266 |
"Payments"
|
@@ -10302,22 +10530,22 @@ msgctxt "no dropdown items"
|
|
10302 |
msgid "None"
|
10303 |
msgstr ""
|
10304 |
|
10305 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
10306 |
msgctxt "Stripe Connect mode"
|
10307 |
msgid "test"
|
10308 |
msgstr ""
|
10309 |
|
10310 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
10311 |
msgctxt "Stripe Connect mode"
|
10312 |
msgid "live"
|
10313 |
msgstr ""
|
10314 |
|
10315 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
10316 |
msgctxt "gateway test mode status"
|
10317 |
msgid "enabled"
|
10318 |
msgstr ""
|
10319 |
|
10320 |
-
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:
|
10321 |
msgctxt "gateway test mode status"
|
10322 |
msgid "disabled"
|
10323 |
msgstr ""
|
2 |
# This file is distributed under the same license as the Easy Digital Downloads package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Easy Digital Downloads 2.11.4\n"
|
6 |
"Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
|
7 |
+
"POT-Creation-Date: 2021-12-27 18:55:49+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
24 |
"X-Textdomain-Support: yes\n"
|
25 |
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
26 |
|
27 |
+
#: easy-digital-downloads.php:208 easy-digital-downloads.php:220
|
28 |
msgid "Cheatin’ huh?"
|
29 |
msgstr ""
|
30 |
|
104 |
#: includes/api/class-edd-api.php:1980 includes/api/class-edd-api.php:1985
|
105 |
#: includes/api/class-edd-api.php:1997 includes/api/class-edd-api.php:1999
|
106 |
#: includes/cart/class-edd-cart.php:1433 includes/cart/class-edd-cart.php:1447
|
107 |
+
#: includes/class-edd-license-handler.php:398
|
108 |
#: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
|
109 |
+
#: includes/deprecated-functions.php:542 includes/download-functions.php:1275
|
110 |
#: includes/emails/actions.php:53 includes/emails/template.php:243
|
111 |
#: includes/error-tracking.php:60 includes/gateways/functions.php:243
|
112 |
#: includes/gateways/manual.php:33
|
114 |
#: includes/gateways/paypal/admin/connect.php:459
|
115 |
#: includes/gateways/paypal/admin/connect.php:597
|
116 |
#: includes/gateways/paypal-standard.php:172
|
117 |
+
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:80
|
118 |
#: includes/gateways/stripe/includes/payment-actions.php:1408
|
119 |
+
#: includes/process-download.php:303 includes/process-download.php:895
|
120 |
#: includes/query-filters.php:48 includes/user-functions.php:895
|
121 |
#: includes/user-functions.php:920 includes/user-functions.php:973
|
122 |
msgid "Error"
|
213 |
msgstr ""
|
214 |
|
215 |
#: includes/admin/admin-pages.php:41
|
216 |
+
#: includes/admin/settings/display-settings.php:133
|
217 |
msgid "Settings"
|
218 |
msgstr ""
|
219 |
|
231 |
msgstr ""
|
232 |
|
233 |
#: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
|
234 |
+
#: includes/admin/settings/contextual-help.php:96
|
235 |
+
#: includes/admin/settings/register-settings.php:1367
|
236 |
msgid "Extensions"
|
237 |
msgstr ""
|
238 |
|
428 |
msgstr ""
|
429 |
|
430 |
#: includes/admin/class-edd-notices.php:225
|
431 |
+
msgid "Failed to send purchase receipt."
|
432 |
msgstr ""
|
433 |
|
434 |
#: includes/admin/class-edd-notices.php:228
|
435 |
+
msgid "The reports have been refreshed."
|
436 |
msgstr ""
|
437 |
|
438 |
+
#: includes/admin/class-edd-notices.php:231
|
439 |
+
msgid "The payment note has been deleted."
|
440 |
msgstr ""
|
441 |
|
442 |
#: includes/admin/class-edd-notices.php:240
|
443 |
+
msgid "The settings have been imported."
|
444 |
msgstr ""
|
445 |
|
446 |
#: includes/admin/class-edd-notices.php:243
|
447 |
+
msgid "API keys successfully generated."
|
448 |
msgstr ""
|
449 |
|
450 |
#: includes/admin/class-edd-notices.php:246
|
451 |
+
msgid "The specified user already has API keys."
|
452 |
msgstr ""
|
453 |
|
454 |
#: includes/admin/class-edd-notices.php:249
|
455 |
+
msgid "API keys successfully regenerated."
|
456 |
msgstr ""
|
457 |
|
458 |
#: includes/admin/class-edd-notices.php:252
|
459 |
+
msgid "API keys successfully revoked."
|
460 |
msgstr ""
|
461 |
|
462 |
#: includes/admin/class-edd-notices.php:261
|
519 |
#: includes/admin/discounts/class-discount-codes-table.php:267
|
520 |
#: includes/admin/payments/class-payments-table.php:367
|
521 |
#: includes/admin/payments/class-payments-table.php:435
|
522 |
+
#: includes/admin/settings/register-settings.php:958
|
523 |
#: includes/gateways/stripe/includes/template-functions.php:441
|
524 |
#: includes/payments/functions.php:1600
|
525 |
msgid "Delete"
|
536 |
#: includes/admin/downloads/dashboard-columns.php:31
|
537 |
#: includes/admin/payments/view-order-details.php:693
|
538 |
#: includes/admin/reporting/class-export-customers.php:74
|
539 |
+
#: includes/admin/reporting/export/class-batch-export-customers.php:43
|
540 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:43
|
541 |
#: includes/privacy-functions.php:589 templates/shortcode-receipt.php:123
|
542 |
msgid "Name"
|
556 |
msgstr ""
|
557 |
|
558 |
#: includes/admin/customers/class-customer-table.php:180
|
559 |
+
#: includes/admin/reporting/export/class-batch-export-customers.php:48
|
560 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:44
|
561 |
#: includes/privacy-functions.php:593
|
562 |
msgid "Date Created"
|
641 |
#: includes/admin/import/import-functions.php:113
|
642 |
#: includes/admin/reporting/export/export-actions.php:23
|
643 |
#: includes/api/class-edd-api.php:1980
|
644 |
+
#: includes/class-edd-license-handler.php:398
|
645 |
msgid "Nonce verification failed"
|
646 |
msgstr ""
|
647 |
|
730 |
msgstr ""
|
731 |
|
732 |
#: includes/admin/customers/customers.php:269
|
733 |
+
#: includes/admin/settings/register-settings.php:2228
|
734 |
#: includes/admin/tools.php:695 includes/checkout/template.php:435
|
735 |
#: templates/shortcode-profile-editor.php:171
|
736 |
msgid "State / Province"
|
754 |
msgstr ""
|
755 |
|
756 |
#: includes/admin/customers/customers.php:313
|
757 |
+
#: includes/admin/reporting/export/class-batch-export-customers.php:42
|
758 |
#: includes/privacy-functions.php:867
|
759 |
msgid "User ID"
|
760 |
msgstr ""
|
778 |
#: includes/admin/payments/view-order-details.php:684
|
779 |
#: includes/admin/payments/view-order-details.php:704
|
780 |
#: includes/admin/thickbox.php:136 includes/class-edd-html-elements.php:796
|
781 |
+
#: includes/gateways/stripe/includes/admin/admin-filters.php:109
|
782 |
#: includes/gateways/stripe/includes/template-functions.php:597
|
783 |
#: includes/gateways/stripe/includes/template-functions.php:637
|
784 |
msgid "Cancel"
|
810 |
#: includes/admin/reporting/class-export-customers.php:66
|
811 |
#: includes/admin/reporting/class-export-customers.php:77
|
812 |
#: includes/admin/reporting/class-export-payments.php:61
|
813 |
+
#: includes/admin/reporting/export/class-batch-export-customers.php:44
|
814 |
#: includes/admin/reporting/export/class-batch-export-payments.php:41
|
815 |
#: includes/admin/reporting/export/class-batch-export-sales.php:42
|
816 |
#: includes/admin/tools.php:497 templates/shortcode-register.php:25
|
834 |
msgstr ""
|
835 |
|
836 |
#: includes/admin/customers/customers.php:406
|
837 |
+
#: includes/admin/downloads/metabox.php:439
|
838 |
+
#: includes/admin/downloads/metabox.php:645
|
839 |
+
#: includes/admin/downloads/metabox.php:701
|
840 |
+
#: includes/admin/downloads/metabox.php:826
|
841 |
#: includes/admin/payments/view-order-details.php:523
|
842 |
+
#: includes/admin/settings/register-settings.php:2231 includes/scripts.php:227
|
843 |
#: templates/checkout_cart.php:57 templates/checkout_cart.php:75
|
844 |
#: templates/shortcode-profile-editor.php:123
|
845 |
msgid "Remove"
|
929 |
msgstr ""
|
930 |
|
931 |
#: includes/admin/customers/customers.php:486
|
932 |
+
#: includes/admin/extensions/abstract-extension.php:308
|
933 |
+
#. translators: the plural Downloads label.
|
934 |
msgid "View %s"
|
935 |
msgstr ""
|
936 |
|
1028 |
msgid "Easy Digital Downloads Sales Summary"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
+
#: includes/admin/dashboard-widgets.php:72
|
1032 |
msgid "Current Month"
|
1033 |
msgstr ""
|
1034 |
|
1035 |
+
#: includes/admin/dashboard-widgets.php:77
|
1036 |
+
#: includes/admin/dashboard-widgets.php:95
|
1037 |
+
#: includes/admin/dashboard-widgets.php:121
|
1038 |
#: includes/admin/downloads/dashboard-columns.php:36
|
1039 |
#: includes/admin/reporting/class-download-reports-table.php:110
|
1040 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:58
|
1044 |
msgid "Earnings"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
+
#: includes/admin/dashboard-widgets.php:82
|
1048 |
+
#: includes/admin/dashboard-widgets.php:101
|
1049 |
msgid "Sale"
|
1050 |
msgid_plural "Sales"
|
1051 |
msgstr[0] ""
|
1052 |
msgstr[1] ""
|
1053 |
|
1054 |
+
#: includes/admin/dashboard-widgets.php:90
|
1055 |
#: includes/admin/reporting/graphing.php:676 includes/class-edd-stats.php:84
|
1056 |
msgid "Last Month"
|
1057 |
msgstr ""
|
1058 |
|
1059 |
+
#: includes/admin/dashboard-widgets.php:115
|
1060 |
#: includes/admin/reporting/graphing.php:670 includes/class-edd-stats.php:79
|
1061 |
msgid "Today"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
+
#: includes/admin/dashboard-widgets.php:129
|
1065 |
#: includes/admin/downloads/dashboard-columns.php:35
|
1066 |
#: includes/admin/reporting/class-download-reports-table.php:109
|
1067 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:57
|
1071 |
msgid "Sales"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
+
#: includes/admin/dashboard-widgets.php:143
|
1075 |
msgid "Totals"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
+
#: includes/admin/dashboard-widgets.php:148
|
1079 |
#: includes/admin/reporting/class-categories-reports-table.php:83
|
1080 |
#: includes/admin/tools.php:914
|
1081 |
msgid "Total Earnings"
|
1082 |
msgstr ""
|
1083 |
|
1084 |
+
#: includes/admin/dashboard-widgets.php:152
|
1085 |
#: includes/admin/reporting/class-categories-reports-table.php:82
|
1086 |
#: includes/admin/reporting/class-gateways-reports-table.php:91
|
1087 |
msgid "Total Sales"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
+
#: includes/admin/dashboard-widgets.php:174
|
1091 |
msgid "Recent Purchases"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
+
#: includes/admin/dashboard-widgets.php:175
|
1095 |
msgid "View All"
|
1096 |
msgstr ""
|
1097 |
|
1327 |
#: includes/admin/downloads/contextual-help.php:28
|
1328 |
#: includes/admin/payments/contextual-help.php:29
|
1329 |
#: includes/admin/reporting/contextual-help.php:29
|
1330 |
+
#: includes/admin/settings/contextual-help.php:32
|
1331 |
msgid "For more information:"
|
1332 |
msgstr ""
|
1333 |
|
1335 |
#: includes/admin/downloads/contextual-help.php:29
|
1336 |
#: includes/admin/payments/contextual-help.php:30
|
1337 |
#: includes/admin/reporting/contextual-help.php:30
|
1338 |
+
#: includes/admin/settings/contextual-help.php:33
|
1339 |
msgid ""
|
1340 |
"Visit the <a href=\"%s\">documentation</a> on the Easy Digital Downloads "
|
1341 |
"website."
|
1351 |
msgstr ""
|
1352 |
|
1353 |
#: includes/admin/discounts/contextual-help.php:35
|
1354 |
+
#: includes/admin/settings/contextual-help.php:42
|
1355 |
+
#: includes/admin/settings/register-settings.php:1360
|
1356 |
+
#: includes/admin/settings/register-settings.php:1420
|
1357 |
+
#: includes/admin/settings/register-settings.php:1425
|
1358 |
+
#: includes/admin/settings/register-settings.php:1428
|
1359 |
+
#: includes/admin/settings/register-settings.php:1431
|
1360 |
#: includes/admin/settings/register-settings.php:1444
|
|
|
1361 |
#: includes/admin/tools.php:68
|
1362 |
msgid "General"
|
1363 |
msgstr ""
|
1632 |
|
1633 |
#: includes/admin/downloads/dashboard-columns.php:34
|
1634 |
#: includes/admin/downloads/dashboard-columns.php:286
|
1635 |
+
#: includes/admin/downloads/metabox.php:459
|
1636 |
#: includes/admin/payments/view-order-details.php:543
|
1637 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:51
|
1638 |
#: templates/shortcode-receipt.php:130
|
1652 |
msgid "%s Configuration"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
+
#: includes/admin/downloads/metabox.php:29
|
1656 |
msgid "%1$s Prices"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
+
#: includes/admin/downloads/metabox.php:32
|
1660 |
msgid "%1$s Files"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
+
#: includes/admin/downloads/metabox.php:35
|
1664 |
msgid "%1$s Settings"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
+
#: includes/admin/downloads/metabox.php:38
|
1668 |
msgid "%1$s Notes"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
+
#: includes/admin/downloads/metabox.php:42
|
1672 |
msgid "%1$s Stats"
|
1673 |
msgstr ""
|
1674 |
|
1675 |
+
#: includes/admin/downloads/metabox.php:301
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1676 |
msgid "Pricing Options:"
|
1677 |
msgstr ""
|
1678 |
|
1679 |
+
#: includes/admin/downloads/metabox.php:307
|
1680 |
msgid "Enable variable pricing"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
+
#: includes/admin/downloads/metabox.php:337
|
1684 |
msgid ""
|
1685 |
"Enable multi-option purchase mode. Allows multiple price options to be "
|
1686 |
"added to your cart at once"
|
1687 |
msgstr ""
|
1688 |
|
1689 |
+
#: includes/admin/downloads/metabox.php:366
|
1690 |
msgid "Add New Price"
|
1691 |
msgstr ""
|
1692 |
|
1693 |
+
#: includes/admin/downloads/metabox.php:429
|
1694 |
msgid "Click and drag to re-order price options"
|
1695 |
msgstr ""
|
1696 |
|
1697 |
+
#: includes/admin/downloads/metabox.php:430
|
1698 |
msgid "Price ID: %s"
|
1699 |
msgstr ""
|
1700 |
|
1701 |
+
#: includes/admin/downloads/metabox.php:436 includes/scripts.php:234
|
1702 |
msgid "Show advanced settings"
|
1703 |
msgstr ""
|
1704 |
|
1705 |
+
#: includes/admin/downloads/metabox.php:439
|
1706 |
msgid "Remove price option %s"
|
1707 |
msgstr ""
|
1708 |
|
1709 |
+
#: includes/admin/downloads/metabox.php:449
|
1710 |
+
#: includes/admin/downloads/metabox.php:453
|
1711 |
msgid "Option Name"
|
1712 |
msgstr ""
|
1713 |
|
1714 |
+
#: includes/admin/downloads/metabox.php:481 includes/download-functions.php:523
|
1715 |
#: includes/gateways/stripe/includes/template-functions.php:404
|
1716 |
msgid "Default"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
+
#: includes/admin/downloads/metabox.php:484
|
1720 |
msgid "Set ID %s as default price"
|
1721 |
msgstr ""
|
1722 |
|
1723 |
+
#: includes/admin/downloads/metabox.php:549
|
1724 |
msgid "Product Type Options:"
|
1725 |
msgstr ""
|
1726 |
|
1727 |
+
#: includes/admin/downloads/metabox.php:560
|
1728 |
msgid "Select a product type"
|
1729 |
msgstr ""
|
1730 |
|
1731 |
+
#: includes/admin/downloads/metabox.php:561
|
1732 |
msgid ""
|
1733 |
"<strong>Product Type</strong>: Sell this item as a single product, or use "
|
1734 |
"the Bundle type to sell a collection of products."
|
1735 |
msgstr ""
|
1736 |
|
1737 |
+
#: includes/admin/downloads/metabox.php:594
|
1738 |
msgid "Bundled %s"
|
1739 |
msgstr ""
|
1740 |
|
1741 |
+
#: includes/admin/downloads/metabox.php:602
|
1742 |
+
#: includes/admin/downloads/metabox.php:662
|
1743 |
msgid "Click and drag to re-order bundled %s"
|
1744 |
msgstr ""
|
1745 |
|
1746 |
+
#: includes/admin/downloads/metabox.php:606
|
1747 |
+
#: includes/admin/downloads/metabox.php:666
|
1748 |
msgid "Select %s:"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
+
#: includes/admin/downloads/metabox.php:620
|
1752 |
+
#: includes/admin/downloads/metabox.php:679
|
1753 |
msgid "Price assignment:"
|
1754 |
msgstr ""
|
1755 |
|
1756 |
+
#: includes/admin/downloads/metabox.php:645
|
1757 |
msgid "Remove bundle option %s"
|
1758 |
msgstr ""
|
1759 |
|
1760 |
+
#: includes/admin/downloads/metabox.php:656
|
1761 |
msgid "Bundled %s:"
|
1762 |
msgstr ""
|
1763 |
|
1764 |
+
#: includes/admin/downloads/metabox.php:701
|
1765 |
msgid "Remove bundle option 1"
|
1766 |
msgstr ""
|
1767 |
|
1768 |
+
#: includes/admin/downloads/metabox.php:711
|
1769 |
+
#: includes/admin/downloads/metabox.php:779
|
1770 |
msgid "Add New File"
|
1771 |
msgstr ""
|
1772 |
|
1773 |
+
#: includes/admin/downloads/metabox.php:821
|
1774 |
msgid "Click and drag to re-order files"
|
1775 |
msgstr ""
|
1776 |
|
1777 |
+
#: includes/admin/downloads/metabox.php:822
|
1778 |
msgid "%1$s file ID: %2$s"
|
1779 |
msgstr ""
|
1780 |
|
1781 |
+
#: includes/admin/downloads/metabox.php:826
|
1782 |
msgid "Remove file %s"
|
1783 |
msgstr ""
|
1784 |
|
1785 |
+
#: includes/admin/downloads/metabox.php:834
|
1786 |
+
#: includes/admin/downloads/metabox.php:840
|
1787 |
msgid "File Name"
|
1788 |
msgstr ""
|
1789 |
|
1790 |
+
#: includes/admin/downloads/metabox.php:846
|
1791 |
msgid "File URL"
|
1792 |
msgstr ""
|
1793 |
|
1794 |
+
#: includes/admin/downloads/metabox.php:851
|
1795 |
msgid "Upload or enter the file URL"
|
1796 |
msgstr ""
|
1797 |
|
1798 |
+
#: includes/admin/downloads/metabox.php:856
|
1799 |
msgid "Insert File"
|
1800 |
msgstr ""
|
1801 |
|
1802 |
+
#: includes/admin/downloads/metabox.php:856
|
1803 |
msgid "Insert"
|
1804 |
msgstr ""
|
1805 |
|
1806 |
+
#: includes/admin/downloads/metabox.php:856
|
1807 |
msgid "Upload a File"
|
1808 |
msgstr ""
|
1809 |
|
1810 |
+
#: includes/admin/downloads/metabox.php:863
|
1811 |
msgid "Price Assignment"
|
1812 |
msgstr ""
|
1813 |
|
1814 |
+
#: includes/admin/downloads/metabox.php:863
|
1815 |
msgid ""
|
1816 |
"<strong>Price Assignment</strong>: With variable pricing enabled, you can "
|
1817 |
"choose to allow certain price variations access to specific files, or allow "
|
1818 |
"all price variations to access a file."
|
1819 |
msgstr ""
|
1820 |
|
1821 |
+
#: includes/admin/downloads/metabox.php:908
|
1822 |
msgid "Insert into %s"
|
1823 |
msgstr ""
|
1824 |
|
1825 |
+
#: includes/admin/downloads/metabox.php:934
|
1826 |
msgid "File Download Limit:"
|
1827 |
msgstr ""
|
1828 |
|
1829 |
+
#: includes/admin/downloads/metabox.php:941
|
1830 |
msgid "Leave blank for global setting or 0 for unlimited"
|
1831 |
msgstr ""
|
1832 |
|
1833 |
+
#: includes/admin/downloads/metabox.php:943
|
1834 |
msgid ""
|
1835 |
"<strong>File Download Limit</strong>: Limit the number of times a customer "
|
1836 |
"who purchased this product can access their download links."
|
1837 |
msgstr ""
|
1838 |
|
1839 |
+
#: includes/admin/downloads/metabox.php:979
|
1840 |
msgid "Ignore Tax:"
|
1841 |
msgstr ""
|
1842 |
|
1843 |
+
#: includes/admin/downloads/metabox.php:985
|
1844 |
msgid "Mark this product as exclusive of tax"
|
1845 |
msgstr ""
|
1846 |
|
1847 |
+
#: includes/admin/downloads/metabox.php:1007
|
1848 |
msgid "Item Quantities:"
|
1849 |
msgstr ""
|
1850 |
|
1851 |
+
#: includes/admin/downloads/metabox.php:1013
|
1852 |
msgid "Disable quantity input for this product"
|
1853 |
msgstr ""
|
1854 |
|
1855 |
+
#: includes/admin/downloads/metabox.php:1015
|
1856 |
msgid ""
|
1857 |
"<strong>Item Quantities</strong>: if disabled, customers will not be "
|
1858 |
"provided an option to change the number they wish to purchase."
|
1859 |
msgstr ""
|
1860 |
|
1861 |
+
#: includes/admin/downloads/metabox.php:1034
|
1862 |
+
#: includes/admin/settings/register-settings.php:799
|
1863 |
#: includes/admin/thickbox.php:59 includes/checkout/template.php:1005
|
1864 |
#: includes/gateways/stripe/includes/payment-methods/buy-now/template.php:214
|
1865 |
#: includes/shortcodes.php:49 includes/template-functions.php:78
|
1866 |
msgid "Purchase"
|
1867 |
msgstr ""
|
1868 |
|
1869 |
+
#: includes/admin/downloads/metabox.php:1041
|
1870 |
msgid "Purchase Shortcode:"
|
1871 |
msgstr ""
|
1872 |
|
1873 |
+
#: includes/admin/downloads/metabox.php:1042
|
1874 |
msgid ""
|
1875 |
"<strong>Purchase Shortcode</strong>: Use this shortcode to output a "
|
1876 |
"purchase link for this product in the location of your choosing."
|
1877 |
msgstr ""
|
1878 |
|
1879 |
+
#: includes/admin/downloads/metabox.php:1063
|
1880 |
msgid "Accounting Options:"
|
1881 |
msgstr ""
|
1882 |
|
1883 |
+
#: includes/admin/downloads/metabox.php:1071
|
1884 |
msgid "Enter an SKU for this %s."
|
1885 |
msgstr ""
|
1886 |
|
1887 |
+
#: includes/admin/downloads/metabox.php:1090
|
1888 |
msgid "Button Options:"
|
1889 |
msgstr ""
|
1890 |
|
1891 |
+
#: includes/admin/downloads/metabox.php:1097
|
1892 |
msgid "Disable the automatic output of the purchase button"
|
1893 |
msgstr ""
|
1894 |
|
1895 |
+
#: includes/admin/downloads/metabox.php:1098
|
1896 |
msgid ""
|
1897 |
"<strong>Automatic Output</strong>: By default, the purchase buttons will be "
|
1898 |
"displayed at the bottom of the download, when disabled you will need to use "
|
1900 |
"where you prefer."
|
1901 |
msgstr ""
|
1902 |
|
1903 |
+
#: includes/admin/downloads/metabox.php:1108
|
1904 |
+
#: includes/admin/settings/register-settings.php:813
|
1905 |
#: includes/admin/thickbox.php:101
|
1906 |
msgid "Add to Cart"
|
1907 |
msgstr ""
|
1908 |
|
1909 |
+
#: includes/admin/downloads/metabox.php:1109
|
1910 |
+
#: includes/admin/settings/register-settings.php:827
|
1911 |
#: includes/gateways/stripe/includes/payment-methods/buy-now/template.php:47
|
1912 |
#: includes/shortcodes.php:47 includes/template-functions.php:78
|
1913 |
msgid "Buy Now"
|
1914 |
msgstr ""
|
1915 |
|
1916 |
+
#: includes/admin/downloads/metabox.php:1122
|
1917 |
msgid "Purchase button behavior"
|
1918 |
msgstr ""
|
1919 |
|
1920 |
+
#: includes/admin/downloads/metabox.php:1124
|
1921 |
msgid ""
|
1922 |
"<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
|
1923 |
"eCommerce flow. A Buy Now button bypasses most of the process, taking the "
|
1925 |
"process of buying the product."
|
1926 |
msgstr ""
|
1927 |
|
1928 |
+
#: includes/admin/downloads/metabox.php:1126
|
1929 |
msgid ""
|
1930 |
"<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
|
1931 |
"eCommerce flow. Buy Now buttons are only available for stores that have a "
|
1932 |
"single supported gateway active and that do not use taxes."
|
1933 |
msgstr ""
|
1934 |
|
1935 |
+
#: includes/admin/downloads/metabox.php:1164
|
1936 |
msgid ""
|
1937 |
"Special notes or instructions for this product. These notes will be added "
|
1938 |
"to the purchase receipt."
|
1939 |
msgstr ""
|
1940 |
|
1941 |
+
#: includes/admin/downloads/metabox.php:1191
|
1942 |
msgid "Sales:"
|
1943 |
msgstr ""
|
1944 |
|
1945 |
+
#: includes/admin/downloads/metabox.php:1196
|
1946 |
msgid "Earnings:"
|
1947 |
msgstr ""
|
1948 |
|
1949 |
+
#: includes/admin/downloads/metabox.php:1203
|
1950 |
msgid "View File Download Log"
|
1951 |
msgstr ""
|
1952 |
|
1953 |
+
#: includes/admin/downloads/metabox.php:1230
|
1954 |
+
#. Translators: The %s represents the link to the pricing page on the Easy
|
1955 |
+
#. Digital Downloads website.
|
1956 |
+
msgid ""
|
1957 |
+
"Save 25% on all Easy Digital Downloads purchases <strong>this "
|
1958 |
+
"week</strong>, including renewals and upgrades! Sale ends 23:59 PM December "
|
1959 |
+
"6th CST. <a target=\"_blank\" href=\"%s\">Don't miss out</a>!"
|
1960 |
msgstr ""
|
1961 |
|
1962 |
+
#: includes/admin/extensions/abstract-extension.php:235
|
1963 |
+
#. translators: The extension name.
|
1964 |
+
msgid "Log In to Your Account to Download %s"
|
1965 |
+
msgstr ""
|
1966 |
+
|
1967 |
+
#: includes/admin/extensions/abstract-extension.php:243
|
1968 |
+
#. translators: The extension name.
|
1969 |
+
msgid "Upgrade Today to Access %s!"
|
1970 |
+
msgstr ""
|
1971 |
+
|
1972 |
+
#: includes/admin/extensions/abstract-extension.php:254
|
1973 |
+
#. translators: The extension name.
|
1974 |
+
msgid "Activate %s"
|
1975 |
+
msgstr ""
|
1976 |
+
|
1977 |
+
#: includes/admin/extensions/abstract-extension.php:320
|
1978 |
+
#. translators: The extension name.
|
1979 |
+
msgid "Configure %s"
|
1980 |
+
msgstr ""
|
1981 |
+
|
1982 |
+
#: includes/admin/extensions/class-extension-manager.php:60
|
1983 |
+
msgid "Activating"
|
1984 |
+
msgstr ""
|
1985 |
+
|
1986 |
+
#: includes/admin/extensions/class-extension-manager.php:61
|
1987 |
+
msgid "Installing"
|
1988 |
+
msgstr ""
|
1989 |
+
|
1990 |
+
#: includes/admin/extensions/class-extension-manager.php:62
|
1991 |
+
#: includes/admin/extensions/class-extension-manager.php:265
|
1992 |
msgid ""
|
1993 |
+
"Could not install the plugin. Please download and install it manually via "
|
1994 |
+
"Plugins > Add New."
|
1995 |
msgstr ""
|
1996 |
|
1997 |
+
#: includes/admin/extensions/class-extension-manager.php:65
|
1998 |
+
#: includes/admin/extensions/class-extension-manager.php:268
|
1999 |
+
#. translators: 1. opening anchor tag, do not translate; 2. closing anchor tag,
|
2000 |
+
#. do not translate
|
2001 |
msgid ""
|
2002 |
+
"Could not install the extension. Please %1$sdownload it from your "
|
2003 |
+
"account%2$s and install it manually."
|
2004 |
msgstr ""
|
2005 |
|
2006 |
+
#: includes/admin/extensions/class-extension-manager.php:248
|
2007 |
+
#: includes/admin/extensions/class-extension-manager.php:351
|
2008 |
+
msgid "There was an error while performing your request."
|
2009 |
+
msgstr ""
|
2010 |
+
|
2011 |
+
#: includes/admin/extensions/class-extension-manager.php:334
|
2012 |
+
msgid "Plugin installed."
|
2013 |
+
msgstr ""
|
2014 |
+
|
2015 |
+
#: includes/admin/extensions/class-extension-manager.php:334
|
2016 |
+
msgid "Extension installed."
|
2017 |
+
msgstr ""
|
2018 |
+
|
2019 |
+
#: includes/admin/extensions/class-extension-manager.php:357
|
2020 |
+
msgid "Plugin activation is not available for you on this site."
|
2021 |
+
msgstr ""
|
2022 |
+
|
2023 |
+
#: includes/admin/extensions/class-extension-manager.php:374
|
2024 |
+
#. translators: "extension" or "plugin" as defined by $type
|
2025 |
+
msgid "Could not activate the %s."
|
2026 |
+
msgstr ""
|
2027 |
+
|
2028 |
+
#: includes/admin/extensions/class-extension-manager.php:389
|
2029 |
+
msgid "Plugin activated."
|
2030 |
+
msgstr ""
|
2031 |
+
|
2032 |
+
#: includes/admin/extensions/class-extension-manager.php:389
|
2033 |
+
msgid "Extension activated."
|
2034 |
+
msgstr ""
|
2035 |
+
|
2036 |
+
#: includes/admin/extensions/class-extension-manager.php:391
|
2037 |
+
msgid "Plugin installed & activated."
|
2038 |
+
msgstr ""
|
2039 |
+
|
2040 |
+
#: includes/admin/extensions/class-extension-manager.php:391
|
2041 |
+
msgid "Extension installed & activated."
|
2042 |
+
msgstr ""
|
2043 |
+
|
2044 |
+
#: includes/admin/extensions/product-education/class-email-marketing.php:49
|
2045 |
+
msgid "Email Marketing"
|
2046 |
+
msgstr ""
|
2047 |
+
|
2048 |
+
#: includes/admin/extensions/product-education/class-email-marketing.php:65
|
2049 |
+
#. translators: the product name
|
2050 |
+
msgid "Get %s Today!"
|
2051 |
+
msgstr ""
|
2052 |
+
|
2053 |
+
#: includes/admin/extensions/product-education/class-email-marketing.php:83
|
2054 |
msgid ""
|
2055 |
+
"Looks like you have an email marketing extension installed, but we support "
|
2056 |
+
"more providers!"
|
2057 |
+
msgstr ""
|
2058 |
+
|
2059 |
+
#: includes/admin/extensions/product-education/class-invoices.php:95
|
2060 |
+
msgid "Invoices"
|
2061 |
+
msgstr ""
|
2062 |
+
|
2063 |
+
#: includes/admin/extensions/product-education/class-recurring.php:95
|
2064 |
+
msgid "Recurring Payments"
|
2065 |
+
msgstr ""
|
2066 |
+
|
2067 |
+
#: includes/admin/extensions/product-education/class-reviews.php:100
|
2068 |
+
msgid "Reviews"
|
2069 |
+
msgstr ""
|
2070 |
+
|
2071 |
+
#: includes/admin/extensions/product-education/class-reviews.php:120
|
2072 |
+
msgid "Product Reviews"
|
2073 |
+
msgstr ""
|
2074 |
+
|
2075 |
+
#: includes/admin/extensions/product-education/class-wpsmtp.php:57
|
2076 |
+
msgid "Improve Email Deliverability"
|
2077 |
+
msgstr ""
|
2078 |
+
|
2079 |
+
#: includes/admin/extensions/product-education/class-wpsmtp.php:76
|
2080 |
+
msgid ""
|
2081 |
+
"WP Mail SMTP allows you to easily set up WordPress to use a trusted "
|
2082 |
+
"provider to reliably send emails, including sales notifications."
|
2083 |
+
msgstr ""
|
2084 |
+
|
2085 |
+
#: includes/admin/extensions/product-education/class-wpsmtp.php:108
|
2086 |
+
msgid "Install & Activate WP Mail SMTP"
|
2087 |
+
msgstr ""
|
2088 |
+
|
2089 |
+
#: includes/admin/extensions/product-education/class-wpsmtp.php:113
|
2090 |
+
msgid "Activate WP Mail SMTP"
|
2091 |
+
msgstr ""
|
2092 |
+
|
2093 |
+
#: includes/admin/extensions/product-education/class-wpsmtp.php:131
|
2094 |
+
msgid "Configure WP Mail SMTP"
|
2095 |
+
msgstr ""
|
2096 |
+
|
2097 |
+
#: includes/admin/extensions/product-education/class-wpsmtp.php:135
|
2098 |
+
msgid "Run the WP Mail SMTP Setup Wizard"
|
2099 |
msgstr ""
|
2100 |
|
2101 |
#: includes/admin/import/class-batch-import-downloads.php:65
|
2480 |
msgstr[1] ""
|
2481 |
|
2482 |
#: includes/admin/payments/view-order-details.php:152
|
2483 |
+
#: includes/admin/settings/register-settings.php:517
|
2484 |
msgid "None"
|
2485 |
msgstr ""
|
2486 |
|
2684 |
msgid "General Settings"
|
2685 |
msgstr ""
|
2686 |
|
2687 |
+
#: includes/admin/promos/class-promo-handler.php:112
|
2688 |
+
msgid "Missing notice ID."
|
2689 |
+
msgstr ""
|
2690 |
+
|
2691 |
+
#: includes/admin/promos/class-promo-handler.php:116
|
2692 |
+
#: includes/admin/promos/class-promo-handler.php:123
|
2693 |
+
#: includes/admin/promos/class-promo-handler.php:128
|
2694 |
#: includes/gateways/paypal/admin/connect.php:106
|
2695 |
#: includes/gateways/paypal/admin/connect.php:182
|
2696 |
#: includes/gateways/paypal/admin/connect.php:292
|
2703 |
msgid "You do not have permission to perform this action."
|
2704 |
msgstr ""
|
2705 |
|
2706 |
+
#: includes/admin/promos/notices/abstract-notice.php:113
|
2707 |
+
msgid "Dismiss notice"
|
2708 |
msgstr ""
|
2709 |
|
2710 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:78
|
2711 |
+
msgid ""
|
2712 |
+
"Hey, I noticed you've made quite a few sales with Easy Digital Downloads! "
|
2713 |
+
"Are you enjoying Easy Digital Downloads?"
|
2714 |
+
msgstr ""
|
2715 |
+
|
2716 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:80
|
2717 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:146
|
2718 |
+
msgid "Yes"
|
2719 |
+
msgstr ""
|
2720 |
+
|
2721 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:81
|
2722 |
+
msgid "Not Really"
|
2723 |
+
msgstr ""
|
2724 |
+
|
2725 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:85
|
2726 |
+
msgid ""
|
2727 |
+
"We're sorry to hear you aren't enjoying Easy Digital Downloads. We would "
|
2728 |
+
"love a chance to improve. Could you take a minute and let us know what we "
|
2729 |
+
"can do better?"
|
2730 |
+
msgstr ""
|
2731 |
+
|
2732 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:87
|
2733 |
+
msgid "Give Feedback"
|
2734 |
+
msgstr ""
|
2735 |
+
|
2736 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:88
|
2737 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:96
|
2738 |
+
msgid "No thanks"
|
2739 |
msgstr ""
|
2740 |
|
2741 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:92
|
2742 |
+
msgid ""
|
2743 |
+
"That's awesome! Could you please do me a BIG favor and give it a 5-star "
|
2744 |
+
"rating on WordPress to help us spread the word and boost our motivation?"
|
2745 |
+
msgstr ""
|
2746 |
+
|
2747 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:93
|
2748 |
+
msgid "~ Chris Klosowski<br>President of Easy Digital Downloads"
|
2749 |
+
msgstr ""
|
2750 |
+
|
2751 |
+
#: includes/admin/promos/notices/class-five-star-review-dashboard.php:95
|
2752 |
+
msgid "Ok, you deserve it!"
|
2753 |
+
msgstr ""
|
2754 |
+
|
2755 |
+
#: includes/admin/promos/notices/class-license-upgrade-notice.php:151
|
2756 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2757 |
msgid ""
|
2758 |
"You are using the free version of Easy Digital Downloads. %1$sPurchase a "
|
2759 |
"pass%2$s to get email marketing tools and recurring payments."
|
2760 |
msgstr ""
|
2761 |
|
2762 |
+
#: includes/admin/promos/notices/class-license-upgrade-notice.php:161
|
2763 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2764 |
msgid ""
|
2765 |
"For access to additional Easy Digital Downloads extensions to grow your "
|
2766 |
"store, consider %1$spurchasing a pass%2$s."
|
2767 |
msgstr ""
|
2768 |
|
2769 |
+
#: includes/admin/promos/notices/class-license-upgrade-notice.php:171
|
2770 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2771 |
msgid ""
|
2772 |
"You are using Easy Digital Downloads with a Personal Pass. Consider "
|
2773 |
"%1$supgrading%2$s to get recurring payments and more."
|
2774 |
msgstr ""
|
2775 |
|
2776 |
+
#: includes/admin/promos/notices/class-license-upgrade-notice.php:181
|
2777 |
#. Translators: %1$s opening anchor tag; %2$s closing anchor tag
|
2778 |
msgid ""
|
2779 |
"Grow your business and make more money with affiliate marketing. %1$sGet "
|
2947 |
|
2948 |
#: includes/admin/reporting/class-export-payments.php:68
|
2949 |
#: includes/admin/reporting/export/class-batch-export-payments.php:49
|
2950 |
+
#: includes/admin/settings/register-settings.php:2227
|
2951 |
#: includes/admin/tools.php:713
|
2952 |
#: includes/gateways/stripe/includes/template-functions.php:510
|
2953 |
#: includes/gateways/stripe/includes/template-functions.php:519
|
3127 |
msgid "API User"
|
3128 |
msgstr ""
|
3129 |
|
3130 |
+
#: includes/admin/reporting/export/class-batch-export-customers.php:45
|
3131 |
msgid "Number of Purchases"
|
3132 |
msgstr ""
|
3133 |
|
3134 |
+
#: includes/admin/reporting/export/class-batch-export-customers.php:46
|
3135 |
msgid "Customer Value"
|
3136 |
msgstr ""
|
3137 |
|
3138 |
+
#: includes/admin/reporting/export/class-batch-export-customers.php:47
|
3139 |
+
msgid "Payment IDs"
|
3140 |
+
msgstr ""
|
3141 |
+
|
3142 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:42
|
3143 |
msgid "Slug"
|
3144 |
msgstr ""
|
3171 |
msgstr ""
|
3172 |
|
3173 |
#: includes/admin/reporting/export/class-batch-export-downloads.php:53
|
3174 |
+
#: includes/admin/settings/register-settings.php:851
|
3175 |
#: includes/admin/tools.php:896
|
3176 |
msgid "File Download Limit"
|
3177 |
msgstr ""
|
3220 |
|
3221 |
#: includes/admin/reporting/export/class-batch-export-payments.php:62
|
3222 |
#: includes/admin/settings/register-settings.php:355
|
3223 |
+
#: includes/admin/settings/register-settings.php:1411
|
3224 |
msgid "Currency"
|
3225 |
msgstr ""
|
3226 |
|
3352 |
msgstr ""
|
3353 |
|
3354 |
#: includes/admin/reporting/logs.php:144
|
3355 |
+
#: includes/admin/settings/register-settings.php:1440
|
3356 |
#: includes/privacy-functions.php:544
|
3357 |
msgid "File Downloads"
|
3358 |
msgstr ""
|
3378 |
msgstr ""
|
3379 |
|
3380 |
#: includes/admin/reporting/reports.php:59
|
3381 |
+
#: includes/admin/settings/contextual-help.php:80
|
3382 |
+
#: includes/admin/settings/register-settings.php:1365
|
3383 |
msgid "Taxes"
|
3384 |
msgstr ""
|
3385 |
|
3517 |
msgid "Download a CSV of all sales."
|
3518 |
msgstr ""
|
3519 |
|
3520 |
+
#: includes/admin/settings/contextual-help.php:35
|
3521 |
msgid ""
|
3522 |
"Need more from your Easy Digital Downloads store? <a href=\"%s\">Upgrade "
|
3523 |
"Now!</a>."
|
3524 |
msgstr ""
|
3525 |
|
3526 |
+
#: includes/admin/settings/contextual-help.php:43
|
3527 |
msgid ""
|
3528 |
"This screen provides the most basic settings for configuring your store. "
|
3529 |
+
"You can set the currency, page templates, and general store settings."
|
|
|
3530 |
msgstr ""
|
3531 |
|
3532 |
+
#: includes/admin/settings/contextual-help.php:48
|
3533 |
+
#: includes/admin/settings/register-settings.php:1361
|
3534 |
+
msgid "Payments"
|
3535 |
msgstr ""
|
3536 |
|
3537 |
+
#: includes/admin/settings/contextual-help.php:50
|
3538 |
msgid ""
|
3539 |
+
"This screen provides ways to enable Test Mode, toggle payment gateways on "
|
3540 |
+
"or off, manage accounting settings, and configure gateway-specific "
|
3541 |
+
"settings. Any extra payment gateway extensions you have installed will "
|
3542 |
+
"appear on this page, and can be configured to suit your needs."
|
3543 |
msgstr ""
|
3544 |
|
3545 |
+
#: includes/admin/settings/contextual-help.php:51
|
3546 |
msgid ""
|
3547 |
"<strong>Test Payment</strong> - This included gateway is great for testing "
|
3548 |
"your store, as it requires no payment, and leads straight to product "
|
3549 |
"downloads. However, please remember to turn it off once your site is live!"
|
3550 |
msgstr ""
|
3551 |
|
3552 |
+
#: includes/admin/settings/contextual-help.php:52
|
3553 |
msgid ""
|
3554 |
"<strong>PayPal</strong> - A PayPal payment gateway is included as standard "
|
3555 |
"with Easy Digital Downloads. To test the PayPal gateway, you need a Sandbox "
|
3556 |
"account for PayPal and the site must be placed in Test Mode from the "
|
3557 |
+
"Payments > Gateways tab. Please remember to enter your PayPal account email "
|
3558 |
"address in order for payments to get processed."
|
3559 |
msgstr ""
|
3560 |
|
3561 |
+
#: includes/admin/settings/contextual-help.php:53
|
3562 |
+
msgid ""
|
3563 |
+
"<strong>Stripe</strong> - The Stripe payment gateway is also included with "
|
3564 |
+
"Easy Digital Downloads. To test the Stripe gateway, you must \"Connect with "
|
3565 |
+
"Stripe\" and the site must be placed in Test Mode from the Payments > "
|
3566 |
+
"Gateways tab."
|
3567 |
+
msgstr ""
|
3568 |
+
|
3569 |
+
#: includes/admin/settings/contextual-help.php:58
|
3570 |
+
#: includes/admin/settings/register-settings.php:1362
|
3571 |
msgid "Emails"
|
3572 |
msgstr ""
|
3573 |
|
3574 |
+
#: includes/admin/settings/contextual-help.php:60
|
3575 |
msgid ""
|
3576 |
"This screen allows you to customize how emails act throughout your store. "
|
3577 |
"You can choose a premade template, set the sender's name, email address, "
|
3578 |
"and subject."
|
3579 |
msgstr ""
|
3580 |
|
3581 |
+
#: includes/admin/settings/contextual-help.php:61
|
3582 |
msgid ""
|
3583 |
"A set of email tags has also been provided to allow the creation of "
|
3584 |
"personalized emails. A tag consists of a keyword surrounded by curly "
|
3586 |
"below the editor."
|
3587 |
msgstr ""
|
3588 |
|
3589 |
+
#: includes/admin/settings/contextual-help.php:66
|
3590 |
+
#: includes/admin/settings/register-settings.php:1363
|
3591 |
+
msgid "Marketing"
|
3592 |
+
msgstr ""
|
3593 |
+
|
3594 |
+
#: includes/admin/settings/contextual-help.php:68
|
3595 |
+
msgid "Marketing settings will help you connect with your customers."
|
3596 |
+
msgstr ""
|
3597 |
+
|
3598 |
+
#: includes/admin/settings/contextual-help.php:69
|
3599 |
+
msgid "Marketing specific extensions will add their settings here as well."
|
3600 |
+
msgstr ""
|
3601 |
+
|
3602 |
+
#: includes/admin/settings/contextual-help.php:74
|
3603 |
+
#: includes/admin/settings/register-settings.php:1364
|
3604 |
msgid "Styles"
|
3605 |
msgstr ""
|
3606 |
|
3607 |
+
#: includes/admin/settings/contextual-help.php:75
|
3608 |
msgid ""
|
3609 |
"This screen allows customization of your store's styles. For complete "
|
3610 |
"control, you can completely disable all styles generated by the plugin."
|
3611 |
msgstr ""
|
3612 |
|
3613 |
+
#: includes/admin/settings/contextual-help.php:82
|
3614 |
msgid "This screen allows you to configure the tax rules for your store."
|
3615 |
msgstr ""
|
3616 |
|
3617 |
+
#: includes/admin/settings/contextual-help.php:83
|
3618 |
msgid ""
|
3619 |
"If you do not wish to charge any tax on purchase, simply leave the Enable "
|
3620 |
"Taxes option unchecked."
|
3621 |
msgstr ""
|
3622 |
|
3623 |
+
#: includes/admin/settings/contextual-help.php:84
|
3624 |
msgid ""
|
3625 |
"<strong>Default Tax Rate</strong>: The default tax rate is the tax rate "
|
3626 |
"charged to customers located in your base country / state or province."
|
3627 |
msgstr ""
|
3628 |
|
3629 |
+
#: includes/admin/settings/contextual-help.php:85
|
3630 |
msgid ""
|
3631 |
"<strong>Base Country</strong>: This determines the country that is loaded "
|
3632 |
"by default on the checkout screen for customers that do not have an address "
|
3633 |
"stored in their account."
|
3634 |
msgstr ""
|
3635 |
|
3636 |
+
#: includes/admin/settings/contextual-help.php:86
|
3637 |
msgid ""
|
3638 |
"<strong>Base State / Province</strong>: This determines the state / "
|
3639 |
"province that is loaded by default on the checkout screen for customers "
|
3640 |
"that do not have an address stored in their account."
|
3641 |
msgstr ""
|
3642 |
|
3643 |
+
#: includes/admin/settings/contextual-help.php:87
|
3644 |
msgid ""
|
3645 |
"<strong>Prices Entered with Tax</strong>: if enabled, this means that the "
|
3646 |
"price entered on the product edit screens is the total amount the customer "
|
3649 |
"will be calculated automatically."
|
3650 |
msgstr ""
|
3651 |
|
3652 |
+
#: includes/admin/settings/contextual-help.php:88
|
3653 |
msgid ""
|
3654 |
"<strong>Display Tax Rate on Prices</strong>: when enabled, the amount the "
|
3655 |
"customer is expected to pay in tax will be displayed below purchase buttons."
|
3656 |
msgstr ""
|
3657 |
|
3658 |
+
#: includes/admin/settings/contextual-help.php:89
|
3659 |
msgid ""
|
3660 |
"<strong>Display During Checkout</strong>: This determines whether prices "
|
3661 |
"are shown with taxes or without taxes on checkout. If set to Including Tax, "
|
3662 |
"a $10 product with a 10% tax will be shown as $11."
|
3663 |
msgstr ""
|
3664 |
|
3665 |
+
#: includes/admin/settings/contextual-help.php:90
|
3666 |
msgid ""
|
3667 |
"<strong>Calculate Tax After Discounts</strong>: If enabled, this option "
|
3668 |
"will make it so that tax is calculated on the after-discount amount. If a "
|
3670 |
"calculated off of $16 instead of $20."
|
3671 |
msgstr ""
|
3672 |
|
3673 |
+
#: includes/admin/settings/contextual-help.php:91
|
3674 |
msgid ""
|
3675 |
"<strong>Additional Tax Rates</strong>: This section lets you add tax rates "
|
3676 |
"for specific countries and/or states/provinces in those countries."
|
3677 |
msgstr ""
|
3678 |
|
3679 |
+
#: includes/admin/settings/contextual-help.php:97
|
3680 |
msgid ""
|
3681 |
"This screen provides access to settings added by most Easy Digital "
|
3682 |
"Downloads extensions."
|
3683 |
msgstr ""
|
3684 |
|
3685 |
+
#: includes/admin/settings/contextual-help.php:102
|
3686 |
+
#: includes/admin/settings/register-settings.php:1438
|
3687 |
msgid "Miscellaneous"
|
3688 |
msgstr ""
|
3689 |
|
3690 |
+
#: includes/admin/settings/contextual-help.php:104
|
3691 |
msgid ""
|
3692 |
+
"This screen provides other miscellaneous options such as configuring your "
|
3693 |
+
"store buttons, file download functionality, and terms of service."
|
3694 |
msgstr ""
|
3695 |
|
3696 |
+
#: includes/admin/settings/display-settings.php:45
|
3697 |
+
#. Translators: %1$s number of notifications; %2$s opening span tag; %3$s
|
3698 |
+
#. closing span tag
|
3699 |
+
msgid "%1$s %2$sunread notifications%3$s"
|
3700 |
msgstr ""
|
3701 |
|
3702 |
+
#: includes/admin/settings/display-settings.php:263
|
3703 |
msgid ""
|
3704 |
"Save 25% on all Easy Digital Downloads purchases <strong>this "
|
3705 |
"week</strong>, including renewals and upgrades!"
|
3706 |
msgstr ""
|
3707 |
|
3708 |
+
#: includes/admin/settings/display-settings.php:266
|
3709 |
msgid "Use code at checkout:"
|
3710 |
msgstr ""
|
3711 |
|
3712 |
+
#: includes/admin/settings/display-settings.php:268
|
3713 |
msgid ""
|
3714 |
"Sale ends 23:59 PM December 6th CST. Save 25% on <a "
|
3715 |
"href=\"https://sandhillsdev.com/projects/\" target=\"_blank\">our other "
|
3716 |
"plugins</a>."
|
3717 |
msgstr ""
|
3718 |
|
3719 |
+
#: includes/admin/settings/display-settings.php:271
|
3720 |
msgid "Shop Now!"
|
3721 |
msgstr ""
|
3722 |
|
3883 |
msgstr ""
|
3884 |
|
3885 |
#: includes/admin/settings/register-settings.php:391
|
3886 |
+
#: includes/admin/settings/register-settings.php:1412
|
3887 |
msgid "API"
|
3888 |
msgstr ""
|
3889 |
|
3925 |
"are testing."
|
3926 |
msgstr ""
|
3927 |
|
3928 |
+
#: includes/admin/settings/register-settings.php:423
|
3929 |
+
msgid "Payment Gateways"
|
3930 |
+
msgstr ""
|
3931 |
+
|
3932 |
#: includes/admin/settings/register-settings.php:424
|
3933 |
msgid "Choose the payment gateways you want to enable."
|
3934 |
msgstr ""
|
4009 |
|
4010 |
#: includes/admin/settings/register-settings.php:493
|
4011 |
#: includes/admin/settings/register-settings.php:496
|
4012 |
+
msgid "Redirect to Checkout"
|
4013 |
msgstr ""
|
4014 |
|
4015 |
#: includes/admin/settings/register-settings.php:494
|
4016 |
+
msgid "Immediately redirect to checkout after adding an item to the cart?"
|
4017 |
msgstr ""
|
4018 |
|
4019 |
#: includes/admin/settings/register-settings.php:497
|
4020 |
msgid ""
|
4021 |
+
"When enabled, once an item has been added to the cart, the customer will be "
|
4022 |
+
"redirected directly to your checkout page. This is useful for stores that "
|
4023 |
+
"sell single items."
|
4024 |
+
msgstr ""
|
4025 |
+
|
4026 |
+
#: includes/admin/settings/register-settings.php:501
|
4027 |
+
#: includes/admin/settings/register-settings.php:504
|
4028 |
+
msgid "Require Login"
|
4029 |
+
msgstr ""
|
4030 |
+
|
4031 |
+
#: includes/admin/settings/register-settings.php:502
|
4032 |
+
msgid "Require that users be logged-in to purchase files."
|
4033 |
+
msgstr ""
|
4034 |
+
|
4035 |
+
#: includes/admin/settings/register-settings.php:505
|
4036 |
+
msgid ""
|
4037 |
"You can require that customers create and login to user accounts prior to "
|
4038 |
"purchasing from your store by enabling this option. When unchecked, users "
|
4039 |
"can purchase without being logged in by using their name and email address."
|
4040 |
msgstr ""
|
4041 |
|
4042 |
+
#: includes/admin/settings/register-settings.php:509
|
4043 |
msgid "Show Register / Login Form?"
|
4044 |
msgstr ""
|
4045 |
|
4046 |
+
#: includes/admin/settings/register-settings.php:510
|
4047 |
msgid ""
|
4048 |
"Display the registration and login forms on the checkout page for "
|
4049 |
"non-logged-in users."
|
4050 |
msgstr ""
|
4051 |
|
4052 |
+
#: includes/admin/settings/register-settings.php:514
|
4053 |
msgid "Registration and Login Forms"
|
4054 |
msgstr ""
|
4055 |
|
4056 |
+
#: includes/admin/settings/register-settings.php:515
|
4057 |
msgid "Registration Form Only"
|
4058 |
msgstr ""
|
4059 |
|
4060 |
+
#: includes/admin/settings/register-settings.php:516
|
4061 |
msgid "Login Form Only"
|
4062 |
msgstr ""
|
4063 |
|
4064 |
+
#: includes/admin/settings/register-settings.php:522
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4065 |
msgid "Enable Cart Saving"
|
4066 |
msgstr ""
|
4067 |
|
4068 |
+
#: includes/admin/settings/register-settings.php:523
|
4069 |
msgid "Check this to enable cart saving on the checkout."
|
4070 |
msgstr ""
|
4071 |
|
4072 |
+
#: includes/admin/settings/register-settings.php:525
|
4073 |
msgid "Cart Saving"
|
4074 |
msgstr ""
|
4075 |
|
4076 |
+
#: includes/admin/settings/register-settings.php:526
|
4077 |
msgid ""
|
4078 |
"Cart saving allows shoppers to create a temporary link to their current "
|
4079 |
"shopping cart so they can come back to it later, or share it with someone."
|
4080 |
msgstr ""
|
4081 |
|
4082 |
+
#: includes/admin/settings/register-settings.php:537
|
4083 |
msgid "Email Configuration"
|
4084 |
msgstr ""
|
4085 |
|
4086 |
+
#: includes/admin/settings/register-settings.php:542
|
4087 |
msgid "Template"
|
4088 |
msgstr ""
|
4089 |
|
4090 |
+
#: includes/admin/settings/register-settings.php:543
|
4091 |
msgid ""
|
4092 |
"Choose a template. Click \"Save Changes\" then \"Preview Purchase Receipt\" "
|
4093 |
"to see the new template."
|
4094 |
msgstr ""
|
4095 |
|
4096 |
+
#: includes/admin/settings/register-settings.php:549
|
4097 |
msgid "Logo"
|
4098 |
msgstr ""
|
4099 |
|
4100 |
+
#: includes/admin/settings/register-settings.php:550
|
4101 |
msgid ""
|
4102 |
"Upload or choose a logo to be displayed at the top of the purchase receipt "
|
4103 |
"emails. Displayed on HTML emails only."
|
4104 |
msgstr ""
|
4105 |
|
4106 |
+
#: includes/admin/settings/register-settings.php:555
|
4107 |
msgid "From Name"
|
4108 |
msgstr ""
|
4109 |
|
4110 |
+
#: includes/admin/settings/register-settings.php:556
|
4111 |
msgid ""
|
4112 |
"The name purchase receipts are said to come from. This should probably be "
|
4113 |
"your site or shop name."
|
4114 |
msgstr ""
|
4115 |
|
4116 |
+
#: includes/admin/settings/register-settings.php:562
|
4117 |
msgid "From Email"
|
4118 |
msgstr ""
|
4119 |
|
4120 |
+
#: includes/admin/settings/register-settings.php:563
|
4121 |
msgid ""
|
4122 |
"Email to send purchase receipts from. This will act as the \"from\" and "
|
4123 |
"\"reply-to\" address."
|
4124 |
msgstr ""
|
4125 |
|
4126 |
+
#: includes/admin/settings/register-settings.php:583
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4127 |
msgid "Purchase Email Subject"
|
4128 |
msgstr ""
|
4129 |
|
4130 |
+
#: includes/admin/settings/register-settings.php:584
|
4131 |
msgid "Enter the subject line for the purchase receipt email."
|
4132 |
msgstr ""
|
4133 |
|
4134 |
+
#: includes/admin/settings/register-settings.php:586
|
4135 |
+
#: includes/admin/settings/register-settings.php:593
|
4136 |
+
#: includes/admin/settings/register-settings.php:597
|
4137 |
#: includes/emails/functions.php:45 includes/emails/functions.php:49
|
4138 |
+
#: includes/emails/functions.php:89 includes/emails/functions.php:93
|
4139 |
#: includes/emails/template.php:141
|
4140 |
msgid "Purchase Receipt"
|
4141 |
msgstr ""
|
4142 |
|
4143 |
+
#: includes/admin/settings/register-settings.php:590
|
4144 |
msgid "Purchase Email Heading"
|
4145 |
msgstr ""
|
4146 |
|
4147 |
+
#: includes/admin/settings/register-settings.php:591
|
4148 |
msgid "Enter the heading for the purchase receipt email."
|
4149 |
msgstr ""
|
4150 |
|
4151 |
+
#: includes/admin/settings/register-settings.php:598
|
4152 |
msgid ""
|
4153 |
"Enter the text that is sent as purchase receipt email to users after "
|
4154 |
"completion of a successful purchase. HTML is accepted. Available template "
|
4155 |
"tags:"
|
4156 |
msgstr ""
|
4157 |
|
4158 |
+
#: includes/admin/settings/register-settings.php:600
|
4159 |
#: includes/emails/template.php:159
|
4160 |
msgid "Dear"
|
4161 |
msgstr ""
|
4162 |
|
4163 |
+
#: includes/admin/settings/register-settings.php:600
|
4164 |
#: includes/emails/template.php:160
|
4165 |
msgid ""
|
4166 |
"Thank you for your purchase. Please click on the link(s) below to download "
|
4167 |
"your files."
|
4168 |
msgstr ""
|
4169 |
|
4170 |
+
#: includes/admin/settings/register-settings.php:606
|
4171 |
msgid "Sale Notification Subject"
|
4172 |
msgstr ""
|
4173 |
|
4174 |
+
#: includes/admin/settings/register-settings.php:607
|
4175 |
msgid "Enter the subject line for the sale notification email."
|
4176 |
msgstr ""
|
4177 |
|
4178 |
+
#: includes/admin/settings/register-settings.php:613
|
4179 |
msgid "Sale Notification Heading"
|
4180 |
msgstr ""
|
4181 |
|
4182 |
+
#: includes/admin/settings/register-settings.php:614
|
4183 |
msgid "Enter the heading for the sale notification email."
|
4184 |
msgstr ""
|
4185 |
|
4186 |
+
#: includes/admin/settings/register-settings.php:616
|
4187 |
+
#: includes/emails/functions.php:142
|
4188 |
msgid "New Sale!"
|
4189 |
msgstr ""
|
4190 |
|
4191 |
+
#: includes/admin/settings/register-settings.php:620
|
4192 |
msgid "Sale Notification"
|
4193 |
msgstr ""
|
4194 |
|
4195 |
+
#: includes/admin/settings/register-settings.php:621
|
4196 |
msgid ""
|
4197 |
"Enter the text that is sent as sale notification email after completion of "
|
4198 |
"a purchase. HTML is accepted. Available template tags:"
|
4199 |
msgstr ""
|
4200 |
|
4201 |
+
#: includes/admin/settings/register-settings.php:627
|
4202 |
msgid "Sale Notification Emails"
|
4203 |
msgstr ""
|
4204 |
|
4205 |
+
#: includes/admin/settings/register-settings.php:628
|
4206 |
msgid ""
|
4207 |
"Enter the email address(es) that should receive a notification anytime a "
|
4208 |
"sale is made, one per line."
|
4209 |
msgstr ""
|
4210 |
|
4211 |
+
#: includes/admin/settings/register-settings.php:634
|
4212 |
msgid "Disable Admin Notifications"
|
4213 |
msgstr ""
|
4214 |
|
4215 |
+
#: includes/admin/settings/register-settings.php:635
|
4216 |
msgid "Check this box if you do not want to receive sales notification emails."
|
4217 |
msgstr ""
|
4218 |
|
4219 |
+
#: includes/admin/settings/register-settings.php:647
|
4220 |
+
msgid "Abandoned Cart Recovery"
|
4221 |
+
msgstr ""
|
4222 |
+
|
4223 |
+
#: includes/admin/settings/register-settings.php:653
|
4224 |
+
msgid "Multiple Discounts"
|
4225 |
+
msgstr ""
|
4226 |
+
|
4227 |
+
#: includes/admin/settings/register-settings.php:654
|
4228 |
+
msgid "Allow customers to use multiple discounts on the same purchase?"
|
4229 |
+
msgstr ""
|
4230 |
+
|
4231 |
+
#: includes/admin/settings/register-settings.php:666
|
4232 |
msgid "Disable Styles"
|
4233 |
msgstr ""
|
4234 |
|
4235 |
+
#: includes/admin/settings/register-settings.php:667
|
4236 |
msgid ""
|
4237 |
"Check this to disable all included styling of buttons, checkout fields, and "
|
4238 |
"all other elements."
|
4239 |
msgstr ""
|
4240 |
|
4241 |
+
#: includes/admin/settings/register-settings.php:669
|
4242 |
msgid "Disabling Styles"
|
4243 |
msgstr ""
|
4244 |
|
4245 |
+
#: includes/admin/settings/register-settings.php:670
|
4246 |
msgid ""
|
4247 |
"If your theme has a complete custom CSS file for Easy Digital Downloads, "
|
4248 |
"you may wish to disable our default styles. This is not recommended unless "
|
4249 |
"you're sure your theme has a complete custom CSS."
|
4250 |
msgstr ""
|
4251 |
|
4252 |
+
#: includes/admin/settings/register-settings.php:674
|
4253 |
msgid "Buttons"
|
4254 |
msgstr ""
|
4255 |
|
4256 |
+
#: includes/admin/settings/register-settings.php:675
|
4257 |
msgid "Options for add to cart and purchase buttons"
|
4258 |
msgstr ""
|
4259 |
|
4260 |
+
#: includes/admin/settings/register-settings.php:680
|
4261 |
msgid "Default Button Style"
|
4262 |
msgstr ""
|
4263 |
|
4264 |
+
#: includes/admin/settings/register-settings.php:681
|
4265 |
msgid "Choose the style you want to use for the buttons."
|
4266 |
msgstr ""
|
4267 |
|
4268 |
+
#: includes/admin/settings/register-settings.php:687
|
4269 |
msgid "Default Button Color"
|
4270 |
msgstr ""
|
4271 |
|
4272 |
+
#: includes/admin/settings/register-settings.php:688
|
4273 |
msgid "Choose the color you want to use for the buttons."
|
4274 |
msgstr ""
|
4275 |
|
4276 |
+
#: includes/admin/settings/register-settings.php:701
|
4277 |
msgid "Need help?"
|
4278 |
msgstr ""
|
4279 |
|
4280 |
+
#: includes/admin/settings/register-settings.php:702
|
4281 |
msgid ""
|
4282 |
"Visit the <a href=\"%s\" target=\"_blank\">Tax setup documentation</a> for "
|
4283 |
"further information. If you need VAT support, there are options listed on "
|
4284 |
"the documentation page."
|
4285 |
msgstr ""
|
4286 |
|
4287 |
+
#: includes/admin/settings/register-settings.php:707
|
4288 |
msgid "Enable Taxes"
|
4289 |
msgstr ""
|
4290 |
|
4291 |
+
#: includes/admin/settings/register-settings.php:708
|
4292 |
msgid "Check this to enable taxes on purchases."
|
4293 |
msgstr ""
|
4294 |
|
4295 |
+
#: includes/admin/settings/register-settings.php:710
|
4296 |
msgid "Enabling Taxes"
|
4297 |
msgstr ""
|
4298 |
|
4299 |
+
#: includes/admin/settings/register-settings.php:711
|
4300 |
msgid ""
|
4301 |
"With taxes enabled, Easy Digital Downloads will use the rules below to "
|
4302 |
"charge tax to customers. With taxes enabled, customers are required to "
|
4303 |
"input their address on checkout so that taxes can be properly calculated."
|
4304 |
msgstr ""
|
4305 |
|
4306 |
+
#: includes/admin/settings/register-settings.php:715
|
4307 |
msgid "Tax Rates"
|
4308 |
msgstr ""
|
4309 |
|
4310 |
+
#: includes/admin/settings/register-settings.php:716
|
4311 |
msgid ""
|
4312 |
"Add tax rates for specific regions. Enter a percentage, such as 6.5 for "
|
4313 |
"6.5%."
|
4314 |
msgstr ""
|
4315 |
|
4316 |
+
#: includes/admin/settings/register-settings.php:721
|
4317 |
+
#: includes/admin/settings/register-settings.php:725
|
4318 |
msgid "Fallback Tax Rate"
|
4319 |
msgstr ""
|
4320 |
|
4321 |
+
#: includes/admin/settings/register-settings.php:722
|
4322 |
msgid ""
|
4323 |
"Customers not in a specific rate will be charged this tax rate. Enter a "
|
4324 |
"percentage, such as 6.5 for 6.5%. "
|
4325 |
msgstr ""
|
4326 |
|
4327 |
+
#: includes/admin/settings/register-settings.php:726
|
4328 |
msgid ""
|
4329 |
"If the customer's address fails to meet the above tax rules, you can define "
|
4330 |
"a `default` tax rate to be applied to all other customers. Enter a "
|
4331 |
"percentage, such as 6.5 for 6.5%."
|
4332 |
msgstr ""
|
4333 |
|
4334 |
+
#: includes/admin/settings/register-settings.php:730
|
4335 |
msgid "Prices entered with tax"
|
4336 |
msgstr ""
|
4337 |
|
4338 |
+
#: includes/admin/settings/register-settings.php:731
|
4339 |
msgid "This option affects how you enter prices."
|
4340 |
msgstr ""
|
4341 |
|
4342 |
+
#: includes/admin/settings/register-settings.php:735
|
4343 |
msgid "Yes, I will enter prices inclusive of tax"
|
4344 |
msgstr ""
|
4345 |
|
4346 |
+
#: includes/admin/settings/register-settings.php:736
|
4347 |
msgid "No, I will enter prices exclusive of tax"
|
4348 |
msgstr ""
|
4349 |
|
4350 |
+
#: includes/admin/settings/register-settings.php:738
|
4351 |
msgid "Prices Inclusive of Tax"
|
4352 |
msgstr ""
|
4353 |
|
4354 |
+
#: includes/admin/settings/register-settings.php:739
|
4355 |
msgid ""
|
4356 |
"When using prices inclusive of tax, you will be entering your prices as the "
|
4357 |
"total amount you want a customer to pay for the download, including tax. "
|
4359 |
"for the defined total price."
|
4360 |
msgstr ""
|
4361 |
|
4362 |
+
#: includes/admin/settings/register-settings.php:743
|
4363 |
msgid "Display Tax Rate on Prices"
|
4364 |
msgstr ""
|
4365 |
|
4366 |
+
#: includes/admin/settings/register-settings.php:744
|
4367 |
msgid "Some countries require a notice when product prices include tax."
|
4368 |
msgstr ""
|
4369 |
|
4370 |
+
#: includes/admin/settings/register-settings.php:749
|
4371 |
msgid "Display during checkout"
|
4372 |
msgstr ""
|
4373 |
|
4374 |
+
#: includes/admin/settings/register-settings.php:750
|
4375 |
msgid "Should prices on the checkout page be shown with or without tax?"
|
4376 |
msgstr ""
|
4377 |
|
4378 |
+
#: includes/admin/settings/register-settings.php:754
|
4379 |
msgid "Including tax"
|
4380 |
msgstr ""
|
4381 |
|
4382 |
+
#: includes/admin/settings/register-settings.php:755
|
4383 |
msgid "Excluding tax"
|
4384 |
msgstr ""
|
4385 |
|
4386 |
+
#: includes/admin/settings/register-settings.php:757
|
4387 |
msgid "Taxes Displayed for Products on Checkout"
|
4388 |
msgstr ""
|
4389 |
|
4390 |
+
#: includes/admin/settings/register-settings.php:758
|
4391 |
msgid ""
|
4392 |
"This option will determine whether the product price displays with or "
|
4393 |
"without tax on checkout."
|
4394 |
msgstr ""
|
4395 |
|
4396 |
+
#: includes/admin/settings/register-settings.php:776
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4397 |
msgid "Cart Item Quantities"
|
4398 |
msgstr ""
|
4399 |
|
4400 |
+
#: includes/admin/settings/register-settings.php:777
|
4401 |
msgid ""
|
4402 |
"Allow quantities to be adjusted when adding %s to the cart, and while "
|
4403 |
"viewing the checkout cart."
|
4404 |
msgstr ""
|
4405 |
|
4406 |
+
#: includes/admin/settings/register-settings.php:782
|
4407 |
msgid "Debug Mode"
|
4408 |
msgstr ""
|
4409 |
|
4410 |
+
#: includes/admin/settings/register-settings.php:783
|
4411 |
msgid ""
|
4412 |
"Check this box to enable debug mode. When enabled, debug messages will be "
|
4413 |
"logged and shown in Downloads → Tools → Debug Log."
|
4414 |
msgstr ""
|
4415 |
|
4416 |
+
#: includes/admin/settings/register-settings.php:788
|
4417 |
msgid "Remove Data on Uninstall?"
|
4418 |
msgstr ""
|
4419 |
|
4420 |
+
#: includes/admin/settings/register-settings.php:789
|
4421 |
msgid ""
|
4422 |
"Check this box if you would like EDD to completely remove all of its data "
|
4423 |
"when the plugin is deleted."
|
4424 |
msgstr ""
|
4425 |
|
4426 |
+
#: includes/admin/settings/register-settings.php:796
|
4427 |
msgid "Complete Purchase Text"
|
4428 |
msgstr ""
|
4429 |
|
4430 |
+
#: includes/admin/settings/register-settings.php:797
|
4431 |
msgid "The button label for completing a purchase."
|
4432 |
msgstr ""
|
4433 |
|
4434 |
+
#: includes/admin/settings/register-settings.php:803
|
4435 |
msgid "Complete Free Purchase Text"
|
4436 |
msgstr ""
|
4437 |
|
4438 |
+
#: includes/admin/settings/register-settings.php:804
|
4439 |
msgid "The button label for completing a free purchase."
|
4440 |
msgstr ""
|
4441 |
|
4442 |
+
#: includes/admin/settings/register-settings.php:806
|
4443 |
#: includes/checkout/template.php:1008
|
4444 |
msgid "Free Download"
|
4445 |
msgstr ""
|
4446 |
|
4447 |
+
#: includes/admin/settings/register-settings.php:810
|
4448 |
msgid "Add to Cart Text"
|
4449 |
msgstr ""
|
4450 |
|
4451 |
+
#: includes/admin/settings/register-settings.php:811
|
4452 |
msgid "Text shown on the Add to Cart Buttons."
|
4453 |
msgstr ""
|
4454 |
|
4455 |
+
#: includes/admin/settings/register-settings.php:817
|
4456 |
msgid "Checkout Button Text"
|
4457 |
msgstr ""
|
4458 |
|
4459 |
+
#: includes/admin/settings/register-settings.php:818
|
4460 |
msgid ""
|
4461 |
"Text shown on the Add to Cart Button when the product is already in the "
|
4462 |
"cart."
|
4463 |
msgstr ""
|
4464 |
|
4465 |
+
#: includes/admin/settings/register-settings.php:824
|
4466 |
msgid "Buy Now Text"
|
4467 |
msgstr ""
|
4468 |
|
4469 |
+
#: includes/admin/settings/register-settings.php:825
|
4470 |
msgid "Text shown on the Buy Now Buttons."
|
4471 |
msgstr ""
|
4472 |
|
4473 |
+
#: includes/admin/settings/register-settings.php:833
|
4474 |
+
#: includes/admin/settings/register-settings.php:836
|
4475 |
msgid "Download Method"
|
4476 |
msgstr ""
|
4477 |
|
4478 |
+
#: includes/admin/settings/register-settings.php:834
|
4479 |
msgid "Select the file download method. Note, not all methods work on all servers."
|
4480 |
msgstr ""
|
4481 |
|
4482 |
+
#: includes/admin/settings/register-settings.php:837
|
4483 |
msgid ""
|
4484 |
"Due to its consistency in multiple platforms and better file protection, "
|
4485 |
"'forced' is the default method. Because Easy Digital Downloads uses PHP to "
|
4490 |
"method can help resolve this."
|
4491 |
msgstr ""
|
4492 |
|
4493 |
+
#: includes/admin/settings/register-settings.php:839
|
4494 |
msgid "Forced"
|
4495 |
msgstr ""
|
4496 |
|
4497 |
+
#: includes/admin/settings/register-settings.php:840
|
4498 |
msgid "Redirect"
|
4499 |
msgstr ""
|
4500 |
|
4501 |
+
#: includes/admin/settings/register-settings.php:845
|
4502 |
msgid "Symlink File Downloads?"
|
4503 |
msgstr ""
|
4504 |
|
4505 |
+
#: includes/admin/settings/register-settings.php:846
|
4506 |
msgid ""
|
4507 |
"Check this if you are delivering really large files or having problems with "
|
4508 |
"file downloads completing."
|
4509 |
msgstr ""
|
4510 |
|
4511 |
+
#: includes/admin/settings/register-settings.php:852
|
4512 |
msgid ""
|
4513 |
"The maximum number of times files can be downloaded for purchases. Can be "
|
4514 |
"overwritten for each %s."
|
4515 |
msgstr ""
|
4516 |
|
4517 |
+
#: includes/admin/settings/register-settings.php:855
|
4518 |
msgid "File Download Limits"
|
4519 |
msgstr ""
|
4520 |
|
4521 |
+
#: includes/admin/settings/register-settings.php:856
|
4522 |
msgid ""
|
4523 |
"Set the global default for the number of times a customer can download "
|
4524 |
"items they purchase. Using a value of 0 is unlimited. This can be defined "
|
4526 |
"individual purchase."
|
4527 |
msgstr ""
|
4528 |
|
4529 |
+
#: includes/admin/settings/register-settings.php:860
|
4530 |
+
#: includes/admin/settings/register-settings.php:862
|
4531 |
msgid "Download Link Expiration"
|
4532 |
msgstr ""
|
4533 |
|
4534 |
+
#: includes/admin/settings/register-settings.php:861
|
4535 |
msgid ""
|
4536 |
"How long should download links be valid for? Default is 24 hours from the "
|
4537 |
"time they are generated. Enter a time in hours."
|
4538 |
msgstr ""
|
4539 |
|
4540 |
+
#: includes/admin/settings/register-settings.php:863
|
4541 |
msgid ""
|
4542 |
"When a customer receives a link to their downloads via email, in their "
|
4543 |
"receipt, or in their purchase history, the link will only be valid for the "
|
4546 |
"customer."
|
4547 |
msgstr ""
|
4548 |
|
4549 |
+
#: includes/admin/settings/register-settings.php:871
|
4550 |
msgid "Disable Redownload?"
|
4551 |
msgstr ""
|
4552 |
|
4553 |
+
#: includes/admin/settings/register-settings.php:872
|
4554 |
msgid ""
|
4555 |
"Check this if you do not want to allow users to redownload items from their "
|
4556 |
"purchase history."
|
4557 |
msgstr ""
|
4558 |
|
4559 |
+
#: includes/admin/settings/register-settings.php:879
|
4560 |
msgid "Agree to Terms"
|
4561 |
msgstr ""
|
4562 |
|
4563 |
+
#: includes/admin/settings/register-settings.php:881
|
4564 |
msgid ""
|
4565 |
"Check this to show an agree to terms on checkout that users must agree to "
|
4566 |
"before purchasing."
|
4567 |
msgstr ""
|
4568 |
|
4569 |
+
#: includes/admin/settings/register-settings.php:884
|
4570 |
msgid "Need help creating a Terms of Agreement? We recommend using %sTermageddon%s."
|
4571 |
msgstr ""
|
4572 |
|
4573 |
+
#: includes/admin/settings/register-settings.php:893
|
4574 |
msgid "Agree to Terms Label"
|
4575 |
msgstr ""
|
4576 |
|
4577 |
+
#: includes/admin/settings/register-settings.php:894
|
4578 |
msgid "Label shown next to the agree to terms checkbox."
|
4579 |
msgstr ""
|
4580 |
|
4581 |
+
#: includes/admin/settings/register-settings.php:900
|
4582 |
msgid "Agreement Text"
|
4583 |
msgstr ""
|
4584 |
|
4585 |
+
#: includes/admin/settings/register-settings.php:901
|
4586 |
msgid "If Agree to Terms is checked, enter the agreement terms here."
|
4587 |
msgstr ""
|
4588 |
|
4589 |
+
#: includes/admin/settings/register-settings.php:912
|
4590 |
msgid "Agree to Privacy Policy"
|
4591 |
msgstr ""
|
4592 |
|
4593 |
+
#: includes/admin/settings/register-settings.php:913
|
4594 |
msgid ""
|
4595 |
"Check this to show an agree to Privacy Policy on checkout that users must "
|
4596 |
"agree to before purchasing."
|
4597 |
msgstr ""
|
4598 |
|
4599 |
+
#: includes/admin/settings/register-settings.php:918
|
4600 |
msgid "Agree to Privacy Policy Label"
|
4601 |
msgstr ""
|
4602 |
|
4603 |
+
#: includes/admin/settings/register-settings.php:919
|
4604 |
msgid "Label shown next to the agree to Privacy Policy checkbox."
|
4605 |
msgstr ""
|
4606 |
|
4607 |
+
#: includes/admin/settings/register-settings.php:925
|
4608 |
msgid "Show the Privacy Policy on checkout"
|
4609 |
msgstr ""
|
4610 |
|
4611 |
+
#: includes/admin/settings/register-settings.php:927
|
4612 |
msgid "Display your Privacy Policy on checkout."
|
4613 |
msgstr ""
|
4614 |
|
4615 |
+
#: includes/admin/settings/register-settings.php:927
|
4616 |
msgid "Set your Privacy Policy here"
|
4617 |
msgstr ""
|
4618 |
|
4619 |
+
#: includes/admin/settings/register-settings.php:928
|
4620 |
msgid "Need help creating a Privacy Policy? We recommend %sTermageddon%s."
|
4621 |
msgstr ""
|
4622 |
|
4623 |
+
#: includes/admin/settings/register-settings.php:941
|
4624 |
msgid "Payment Status Actions"
|
4625 |
msgstr ""
|
4626 |
|
4627 |
+
#: includes/admin/settings/register-settings.php:943
|
4628 |
msgid ""
|
4629 |
"When a user requests to be anonymized or removed from a site, these are the "
|
4630 |
"actions that will be taken on payments associated with their customer, by "
|
4631 |
"status."
|
4632 |
msgstr ""
|
4633 |
|
4634 |
+
#: includes/admin/settings/register-settings.php:944
|
4635 |
msgid "What settings should I use?"
|
4636 |
msgstr ""
|
4637 |
|
4638 |
+
#: includes/admin/settings/register-settings.php:945
|
4639 |
msgid ""
|
4640 |
"By default, Easy Digital Downloads sets suggested actions based on the "
|
4641 |
"Payment Status. These are purely recommendations, and you may need to "
|
4643 |
"leave these settings as is."
|
4644 |
msgstr ""
|
4645 |
|
4646 |
+
#: includes/admin/settings/register-settings.php:956
|
4647 |
msgid "No Action"
|
4648 |
msgstr ""
|
4649 |
|
4650 |
+
#: includes/admin/settings/register-settings.php:957
|
4651 |
msgid "Anonymize"
|
4652 |
msgstr ""
|
4653 |
|
4654 |
+
#: includes/admin/settings/register-settings.php:997
|
4655 |
msgid "Buy Now Disabled"
|
4656 |
msgstr ""
|
4657 |
|
4658 |
+
#: includes/admin/settings/register-settings.php:998
|
4659 |
msgid ""
|
4660 |
"Buy Now buttons are only available for stores that have a single supported "
|
4661 |
"gateway active and that do not use taxes."
|
4662 |
msgstr ""
|
4663 |
|
4664 |
+
#: includes/admin/settings/register-settings.php:1101
|
4665 |
msgid "Settings updated."
|
4666 |
msgstr ""
|
4667 |
|
4668 |
+
#: includes/admin/settings/register-settings.php:1254
|
4669 |
msgid "Error setting default gateway. No gateways are enabled."
|
4670 |
msgstr ""
|
4671 |
|
4672 |
+
#: includes/admin/settings/register-settings.php:1267
|
4673 |
msgid "%s could not be set as the default gateway. It must first be enabled."
|
4674 |
msgstr ""
|
4675 |
|
4676 |
+
#: includes/admin/settings/register-settings.php:1366
|
|
|
|
|
|
|
|
|
4677 |
msgid "Privacy"
|
4678 |
msgstr ""
|
4679 |
|
4680 |
+
#: includes/admin/settings/register-settings.php:1368
|
4681 |
msgid "Licenses"
|
4682 |
msgstr ""
|
4683 |
|
4684 |
+
#: includes/admin/settings/register-settings.php:1369
|
4685 |
msgid "Misc"
|
4686 |
msgstr ""
|
4687 |
|
4688 |
+
#: includes/admin/settings/register-settings.php:1410
|
4689 |
msgid "Store"
|
4690 |
msgstr ""
|
4691 |
|
4692 |
+
#: includes/admin/settings/register-settings.php:1415
|
4693 |
msgid "Gateways"
|
4694 |
msgstr ""
|
4695 |
|
4696 |
+
#: includes/admin/settings/register-settings.php:1416
|
4697 |
#: includes/gateways/stripe/includes/payment-methods/payment-request/admin/settings.php:82
|
4698 |
#: includes/install.php:98 templates/widget-cart-checkout.php:6
|
4699 |
#: templates/widget-cart-empty.php:7
|
4700 |
msgid "Checkout"
|
4701 |
msgstr ""
|
4702 |
|
4703 |
+
#: includes/admin/settings/register-settings.php:1417
|
4704 |
msgid "Accounting"
|
4705 |
msgstr ""
|
4706 |
|
4707 |
+
#: includes/admin/settings/register-settings.php:1421
|
4708 |
msgid "Purchase Receipts"
|
4709 |
msgstr ""
|
4710 |
|
4711 |
+
#: includes/admin/settings/register-settings.php:1422
|
4712 |
msgid "New Sale Notifications"
|
4713 |
msgstr ""
|
4714 |
|
4715 |
+
#: includes/admin/settings/register-settings.php:1434
|
4716 |
msgid "Main"
|
4717 |
msgstr ""
|
4718 |
|
4719 |
+
#: includes/admin/settings/register-settings.php:1439
|
4720 |
msgid "Button Text"
|
4721 |
msgstr ""
|
4722 |
|
4723 |
+
#: includes/admin/settings/register-settings.php:1441
|
4724 |
msgid "Terms of Agreement"
|
4725 |
msgstr ""
|
4726 |
|
4727 |
+
#: includes/admin/settings/register-settings.php:1445
|
4728 |
msgid "Export & Erase"
|
4729 |
msgstr ""
|
4730 |
|
4731 |
+
#: includes/admin/settings/register-settings.php:1687
|
4732 |
msgid ""
|
4733 |
"Don't see what you need? More Payment Gateway options are available <a "
|
4734 |
"href=\"%s\">here</a>."
|
4735 |
msgstr ""
|
4736 |
|
4737 |
+
#: includes/admin/settings/register-settings.php:1908
|
4738 |
msgid "The callback function used for the %s setting is missing."
|
4739 |
msgstr ""
|
4740 |
|
4741 |
+
#: includes/admin/settings/register-settings.php:2070
|
4742 |
msgid "Upload File"
|
4743 |
msgstr ""
|
4744 |
|
4745 |
#: includes/admin/settings/register-settings.php:2176
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4746 |
msgid "Recapture plugin activated."
|
4747 |
msgstr ""
|
4748 |
|
4749 |
+
#: includes/admin/settings/register-settings.php:2177
|
4750 |
msgid "%sAccess your Recapture account%s."
|
4751 |
msgstr ""
|
4752 |
|
4753 |
+
#: includes/admin/settings/register-settings.php:2182
|
4754 |
msgid "Disconnect Recapture"
|
4755 |
msgstr ""
|
4756 |
|
4757 |
+
#: includes/admin/settings/register-settings.php:2186
|
4758 |
msgid "%sComplete your connection to Recapture%s"
|
4759 |
msgstr ""
|
4760 |
|
4761 |
+
#: includes/admin/settings/register-settings.php:2194
|
4762 |
msgid ""
|
4763 |
"We recommend Recapture for recovering lost revenue by automatically sending "
|
4764 |
"effective, targeted emails to customers who abandon their shopping cart."
|
4765 |
msgstr ""
|
4766 |
|
4767 |
+
#: includes/admin/settings/register-settings.php:2194
|
4768 |
msgid "%sLearn more%s (Free trial available)"
|
4769 |
msgstr ""
|
4770 |
|
4771 |
+
#: includes/admin/settings/register-settings.php:2198
|
4772 |
msgid "Connect with Recapture"
|
4773 |
msgstr ""
|
4774 |
|
4775 |
+
#: includes/admin/settings/register-settings.php:2229
|
4776 |
msgid "Country Wide"
|
4777 |
msgstr ""
|
4778 |
|
4779 |
+
#: includes/admin/settings/register-settings.php:2230
|
4780 |
msgid "Rate"
|
4781 |
msgstr ""
|
4782 |
|
4783 |
+
#: includes/admin/settings/register-settings.php:2230
|
4784 |
msgid ""
|
4785 |
"<strong>Regional tax rates: </strong>When a customer enters an address on "
|
4786 |
"checkout that matches the specified region for this tax rate, the cart tax "
|
4787 |
"will adjust automatically. Enter a percentage, such as 6.5 for 6.5%."
|
4788 |
msgstr ""
|
4789 |
|
4790 |
+
#: includes/admin/settings/register-settings.php:2247
|
4791 |
+
#: includes/admin/settings/register-settings.php:2295
|
4792 |
msgid "Choose a country"
|
4793 |
msgstr ""
|
4794 |
|
4795 |
+
#: includes/admin/settings/register-settings.php:2265
|
4796 |
msgid "Choose a state"
|
4797 |
msgstr ""
|
4798 |
|
4799 |
+
#: includes/admin/settings/register-settings.php:2277
|
4800 |
+
#: includes/admin/settings/register-settings.php:2308
|
4801 |
msgid "Apply to whole country"
|
4802 |
msgstr ""
|
4803 |
|
4804 |
+
#: includes/admin/settings/register-settings.php:2280
|
4805 |
+
#: includes/admin/settings/register-settings.php:2311
|
4806 |
msgid "Remove Rate"
|
4807 |
msgstr ""
|
4808 |
|
4809 |
+
#: includes/admin/settings/register-settings.php:2316
|
4810 |
msgid "Add Tax Rate"
|
4811 |
msgstr ""
|
4812 |
|
4813 |
+
#: includes/admin/settings/register-settings.php:2369
|
4814 |
msgid ""
|
4815 |
"Your license key expired on %s. Please <a href=\"%s\" "
|
4816 |
"target=\"_blank\">renew your license key</a>."
|
4817 |
msgstr ""
|
4818 |
|
4819 |
+
#: includes/admin/settings/register-settings.php:2382
|
4820 |
msgid ""
|
4821 |
"Your license key has been disabled. Please <a href=\"%s\" "
|
4822 |
"target=\"_blank\">contact support</a> for more information."
|
4823 |
msgstr ""
|
4824 |
|
4825 |
+
#: includes/admin/settings/register-settings.php:2394
|
4826 |
msgid ""
|
4827 |
"Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
|
4828 |
"page</a> and verify it."
|
4829 |
msgstr ""
|
4830 |
|
4831 |
+
#: includes/admin/settings/register-settings.php:2407
|
4832 |
msgid ""
|
4833 |
"Your %s is not active for this URL. Please <a href=\"%s\" "
|
4834 |
"target=\"_blank\">visit your account page</a> to manage your license key "
|
4835 |
"URLs."
|
4836 |
msgstr ""
|
4837 |
|
4838 |
+
#: includes/admin/settings/register-settings.php:2419
|
4839 |
msgid "This appears to be an invalid license key for %s."
|
4840 |
msgstr ""
|
4841 |
|
4842 |
+
#: includes/admin/settings/register-settings.php:2428
|
4843 |
msgid ""
|
4844 |
"Your license key has reached its activation limit. <a href=\"%s\">View "
|
4845 |
"possible upgrades</a> now."
|
4846 |
msgstr ""
|
4847 |
|
4848 |
+
#: includes/admin/settings/register-settings.php:2437
|
4849 |
msgid ""
|
4850 |
"The key you entered belongs to a bundle, please use the product specific "
|
4851 |
"license key."
|
4852 |
msgstr ""
|
4853 |
|
4854 |
+
#: includes/admin/settings/register-settings.php:2445
|
4855 |
msgid "unknown_error"
|
4856 |
msgstr ""
|
4857 |
|
4858 |
+
#: includes/admin/settings/register-settings.php:2446
|
4859 |
msgid ""
|
4860 |
"There was an error with this license key: %s. Please <a href=\"%s\">contact "
|
4861 |
"our support team</a>."
|
4862 |
msgstr ""
|
4863 |
|
4864 |
+
#: includes/admin/settings/register-settings.php:2466
|
4865 |
msgid "License key never expires."
|
4866 |
msgstr ""
|
4867 |
|
4868 |
+
#: includes/admin/settings/register-settings.php:2473
|
4869 |
+
msgid "Your license key expires soon! It expires on %s."
|
|
|
|
|
4870 |
msgstr ""
|
4871 |
|
4872 |
+
#: includes/admin/settings/register-settings.php:2482
|
4873 |
msgid "Your license key expires on %s."
|
4874 |
msgstr ""
|
4875 |
|
4876 |
+
#: includes/admin/settings/register-settings.php:2500
|
4877 |
msgid "To receive updates, please enter your valid %s license key."
|
4878 |
msgstr ""
|
4879 |
|
4880 |
+
#: includes/admin/settings/register-settings.php:2513
|
4881 |
msgid "Deactivate License"
|
4882 |
msgstr ""
|
4883 |
|
5435 |
#: includes/admin/upgrades/upgrade-functions.php:899
|
5436 |
#: includes/admin/upgrades/upgrade-functions.php:1027
|
5437 |
#: includes/admin/upgrades/upgrade-functions.php:1112
|
5438 |
+
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:80
|
5439 |
msgid "You do not have permission to do shop upgrades"
|
5440 |
msgstr ""
|
5441 |
|
5504 |
msgid "Step %d of approximately %d running"
|
5505 |
msgstr ""
|
5506 |
|
5507 |
+
#: includes/admin/views/notifications.php:35
|
5508 |
+
#. Translators: %s - number of notifications
|
5509 |
+
msgid "(%s) New Notifications"
|
5510 |
+
msgstr ""
|
5511 |
+
|
5512 |
+
#: includes/admin/views/notifications.php:49
|
5513 |
+
msgid "Close panel"
|
5514 |
+
msgstr ""
|
5515 |
+
|
5516 |
+
#: includes/admin/views/notifications.php:85
|
5517 |
+
msgid "Dismiss"
|
5518 |
+
msgstr ""
|
5519 |
+
|
5520 |
+
#: includes/admin/views/notifications.php:95
|
5521 |
+
msgid "You have no new notifications."
|
5522 |
+
msgstr ""
|
5523 |
+
|
5524 |
+
#: includes/admin/views/notifications.php:101
|
5525 |
+
msgid "Loading notifications..."
|
5526 |
+
msgstr ""
|
5527 |
+
|
5528 |
#: includes/ajax-functions.php:143 includes/cart/actions.php:112
|
5529 |
msgid ""
|
5530 |
"Missing nonce when removing an item from the cart. Please read the "
|
5541 |
"ajax-requests-in-easy-digital-downloads-2-9-4"
|
5542 |
msgstr ""
|
5543 |
|
5544 |
+
#: includes/ajax-functions.php:485
|
5545 |
msgid ""
|
5546 |
"Missing nonce when recalculating taxes. Please read the following for more "
|
5547 |
"information: "
|
5549 |
"ajax-requests-in-easy-digital-downloads-2-9-4"
|
5550 |
msgstr ""
|
5551 |
|
5552 |
+
#: includes/ajax-functions.php:535
|
5553 |
msgid ""
|
5554 |
"Missing nonce when retrieving state list. Please read the following for "
|
5555 |
"more information: "
|
5557 |
"ajax-requests-in-easy-digital-downloads-2-9-4"
|
5558 |
msgstr ""
|
5559 |
|
5560 |
+
#: includes/ajax-functions.php:665 includes/ajax-functions.php:717
|
5561 |
msgid "No results found"
|
5562 |
msgstr ""
|
5563 |
|
5564 |
+
#: includes/ajax-functions.php:766 includes/ajax-functions.php:858
|
5565 |
#: includes/class-edd-html-elements.php:339
|
5566 |
msgid "No users found"
|
5567 |
msgstr ""
|
5568 |
|
5569 |
+
#: includes/ajax-functions.php:808
|
5570 |
msgid "All Prices"
|
5571 |
msgstr ""
|
5572 |
|
5660 |
msgid "You do not have permission to %s API keys for this user"
|
5661 |
msgstr ""
|
5662 |
|
5663 |
+
#: includes/api/v3/Notifications.php:45
|
5664 |
+
msgid "ID of the notification."
|
5665 |
+
msgstr ""
|
5666 |
+
|
5667 |
+
#: includes/api/v3/Notifications.php:116
|
5668 |
+
msgid "Failed to dismiss notification."
|
5669 |
+
msgstr ""
|
5670 |
+
|
5671 |
#: includes/cart/class-edd-cart.php:897
|
5672 |
msgid "includes %s tax"
|
5673 |
msgstr ""
|
6289 |
msgid "Single Use: %s"
|
6290 |
msgstr ""
|
6291 |
|
6292 |
+
#: includes/class-edd-cli.php:506 includes/class-edd-cli.php:765
|
6293 |
msgid "No action specified, did you mean"
|
6294 |
msgstr ""
|
6295 |
|
6296 |
+
#: includes/class-edd-cli.php:508 includes/class-edd-cli.php:767
|
6297 |
msgid "Invalid action specified, did you mean"
|
6298 |
msgstr ""
|
6299 |
|
6300 |
+
#: includes/class-edd-cli.php:570
|
6301 |
msgid "Invalid status '%s', defaulting to 'complete'"
|
6302 |
msgstr ""
|
6303 |
|
6304 |
+
#: includes/class-edd-cli.php:608
|
6305 |
msgid "Specified ID is not a product"
|
6306 |
msgstr ""
|
6307 |
|
6308 |
+
#: includes/class-edd-cli.php:743
|
6309 |
msgid "Created %s payments"
|
6310 |
msgstr ""
|
6311 |
|
6387 |
msgid "Enter username"
|
6388 |
msgstr ""
|
6389 |
|
6390 |
+
#: includes/class-edd-license-handler.php:201
|
6391 |
msgid "%1$s"
|
6392 |
msgstr ""
|
6393 |
|
6394 |
+
#: includes/class-edd-license-handler.php:233
|
6395 |
msgid ""
|
6396 |
"Enter your extension license keys here to receive updates for purchased "
|
6397 |
"extensions. If your license key has expired, please <a href=\"%s\" "
|
6398 |
"target=\"_blank\">renew your license</a>."
|
6399 |
msgstr ""
|
6400 |
|
6401 |
+
#: includes/class-edd-license-handler.php:525
|
6402 |
msgid ""
|
6403 |
"You have invalid or expired license keys for Easy Digital Downloads. Please "
|
6404 |
"go to the <a href=\"%s\">Licenses page</a> to correct this issue."
|
6405 |
msgstr ""
|
6406 |
|
6407 |
+
#: includes/class-edd-license-handler.php:563
|
6408 |
msgid "Enter valid license key for automatic updates."
|
6409 |
msgstr ""
|
6410 |
|
6816 |
"of a purchase. HTML is accepted. Available template tags:"
|
6817 |
msgstr ""
|
6818 |
|
6819 |
+
#: includes/deprecated-functions.php:517 includes/process-download.php:895
|
6820 |
msgid "Sorry but you have hit your download limit for this file."
|
6821 |
msgstr ""
|
6822 |
|
6823 |
+
#: includes/deprecated-functions.php:532 includes/download-functions.php:1275
|
6824 |
msgid "Sorry but your download link has expired."
|
6825 |
msgstr ""
|
6826 |
|
6846 |
msgstr ""
|
6847 |
|
6848 |
#: includes/deprecated-functions.php:813 includes/deprecated-functions.php:892
|
6849 |
+
#: includes/deprecated-functions.php:921 includes/deprecated-functions.php:1067
|
6850 |
+
#: includes/deprecated-functions.php:1143 includes/emails/functions.php:296
|
6851 |
msgid "You do not have permission to do this."
|
6852 |
msgstr ""
|
6853 |
|
6863 |
"free%4$s."
|
6864 |
msgstr ""
|
6865 |
|
6866 |
+
#: includes/deprecated-functions.php:975 includes/emails/functions.php:388
|
6867 |
#. Translators: %1$s - Opening anchor tag, %2$s - The url to dismiss the ajax
|
6868 |
#. notice, %3$s - Complete the opening of the anchor tag, %4$s - Open span tag,
|
6869 |
#. %4$s - Close span tag
|
6870 |
msgid "%1$s %2$s %3$s %4$s Dismiss this notice. %5$s"
|
6871 |
msgstr ""
|
6872 |
|
6873 |
+
#: includes/deprecated-functions.php:1012
|
6874 |
+
msgid "Access your SendWP account"
|
6875 |
+
msgstr ""
|
6876 |
+
|
6877 |
+
#: includes/deprecated-functions.php:1033
|
6878 |
+
msgid "SendWP plugin activated."
|
6879 |
+
msgstr ""
|
6880 |
+
|
6881 |
+
#: includes/deprecated-functions.php:1036
|
6882 |
+
msgid "Disconnect SendWP"
|
6883 |
+
msgstr ""
|
6884 |
+
|
6885 |
+
#: includes/deprecated-functions.php:1043
|
6886 |
+
msgid ""
|
6887 |
+
"We recommend SendWP to ensure quick and reliable delivery of all emails "
|
6888 |
+
"sent from your store, such as purchase receipts, subscription renewal "
|
6889 |
+
"reminders, password resets, and more."
|
6890 |
+
msgstr ""
|
6891 |
+
|
6892 |
+
#: includes/deprecated-functions.php:1043
|
6893 |
+
msgid "%sLearn more%s"
|
6894 |
+
msgstr ""
|
6895 |
+
|
6896 |
+
#: includes/deprecated-functions.php:1046
|
6897 |
+
msgid "Connect with SendWP"
|
6898 |
+
msgstr ""
|
6899 |
+
|
6900 |
+
#: includes/deprecated-functions.php:1118
|
6901 |
+
msgid "Something went wrong. SendWP was not installed correctly."
|
6902 |
+
msgstr ""
|
6903 |
+
|
6904 |
+
#: includes/deprecated-functions.php:1235
|
6905 |
+
msgid "Activate Reviews"
|
6906 |
+
msgstr ""
|
6907 |
+
|
6908 |
+
#: includes/deprecated-functions.php:1261
|
6909 |
+
#. Translators: The %s represents the link to the Product Reviews extension.
|
6910 |
+
msgid ""
|
6911 |
+
"Would you like to enable reviews for this product? Check out our <a "
|
6912 |
+
"target=\"_blank\" href=\"%s\">Product Reviews</a> extension."
|
6913 |
+
msgstr ""
|
6914 |
+
|
6915 |
+
#: includes/deprecated-functions.php:1269
|
6916 |
+
msgid ""
|
6917 |
+
"Act now and <strong>SAVE 25%</strong> on your purchase. Sale ends <em>23:59 "
|
6918 |
+
"PM December 6th CST</em>. Use code <code>BFCM2019</code> at checkout."
|
6919 |
+
msgstr ""
|
6920 |
+
|
6921 |
#: includes/download-functions.php:524
|
6922 |
msgid "Bundle"
|
6923 |
msgstr ""
|
6957 |
msgid "No template, plain text only"
|
6958 |
msgstr ""
|
6959 |
|
6960 |
+
#: includes/emails/class-edd-emails.php:293
|
6961 |
msgid "You cannot send email with EDD_Emails until init/admin_init has been reached"
|
6962 |
msgstr ""
|
6963 |
|
6964 |
+
#: includes/emails/class-edd-emails.php:320
|
6965 |
msgid ""
|
6966 |
"Email from Easy Digital Downloads failed to send.\n"
|
6967 |
"Send time: %s\n"
|
6970 |
"\n"
|
6971 |
msgstr ""
|
6972 |
|
6973 |
+
#: includes/emails/functions.php:138
|
6974 |
msgid "New download purchase - Order #%1$s"
|
6975 |
msgstr ""
|
6976 |
|
6977 |
+
#: includes/emails/functions.php:202 includes/emails/template.php:212
|
6978 |
msgid "Hello"
|
6979 |
msgstr ""
|
6980 |
|
6981 |
+
#: includes/emails/functions.php:202 includes/emails/template.php:212
|
6982 |
msgid "A %s purchase has been made"
|
6983 |
msgstr ""
|
6984 |
|
6985 |
+
#: includes/emails/functions.php:203 includes/emails/template.php:213
|
6986 |
msgid "%s sold:"
|
6987 |
msgstr ""
|
6988 |
|
6989 |
+
#: includes/emails/functions.php:205 includes/emails/template.php:215
|
6990 |
msgid "Purchased by: "
|
6991 |
msgstr ""
|
6992 |
|
6993 |
+
#: includes/emails/functions.php:206 includes/emails/template.php:216
|
6994 |
msgid "Amount: "
|
6995 |
msgstr ""
|
6996 |
|
6997 |
+
#: includes/emails/functions.php:207 includes/emails/template.php:217
|
6998 |
msgid "Payment Method: "
|
6999 |
msgstr ""
|
7000 |
|
7001 |
+
#: includes/emails/functions.php:208 includes/emails/template.php:218
|
7002 |
msgid "Thank you"
|
7003 |
msgstr ""
|
7004 |
|
7005 |
+
#: includes/emails/functions.php:347
|
|
|
|
|
|
|
|
|
7006 |
msgid "Something went wrong. Recapture for EDD was not installed correctly."
|
7007 |
msgstr ""
|
7008 |
|
7009 |
+
#: includes/emails/functions.php:375
|
7010 |
#. Translators: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s
|
7011 |
#. - </a> tag
|
7012 |
msgid ""
|
7256 |
msgstr ""
|
7257 |
|
7258 |
#: includes/gateways/paypal/admin/connect.php:80
|
7259 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:342
|
7260 |
msgid "Retrieving account information..."
|
7261 |
msgstr ""
|
7262 |
|
7911 |
msgid "Preapproval cancelled"
|
7912 |
msgstr ""
|
7913 |
|
7914 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:84
|
7915 |
+
msgid "Are you sure you want to cancel this order?"
|
7916 |
+
msgstr ""
|
7917 |
+
|
7918 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:103
|
7919 |
msgid "The preapproved payment was successfully charged."
|
7920 |
msgstr ""
|
7921 |
|
7922 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:106
|
7923 |
msgid ""
|
7924 |
"The preapproved payment failed to be charged. View order details for "
|
7925 |
"further details."
|
7926 |
msgstr ""
|
7927 |
|
7928 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:109
|
7929 |
msgid "The preapproved payment was successfully cancelled."
|
7930 |
msgstr ""
|
7931 |
|
7932 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:114
|
7933 |
#. translators: %1$s Stripe Connect error message. %2$s Retry URL.
|
7934 |
msgid ""
|
7935 |
"There was an error connecting your Stripe account. Message: %1$s. Please <a "
|
7936 |
"href=\"%2$s\">try again</a>."
|
7937 |
msgstr ""
|
7938 |
|
7939 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:145
|
7940 |
msgid "Used Existing Card:"
|
7941 |
msgstr ""
|
7942 |
|
7943 |
+
#: includes/gateways/stripe/includes/admin/admin-actions.php:210
|
|
|
|
|
|
|
|
|
7944 |
#: includes/gateways/stripe/includes/scripts.php:149
|
7945 |
msgid "Refund Charge in Stripe"
|
7946 |
msgstr ""
|
7947 |
|
7948 |
+
#: includes/gateways/stripe/includes/admin/admin-filters.php:99
|
7949 |
msgid "Process"
|
7950 |
msgstr ""
|
7951 |
|
8041 |
msgstr ""
|
8042 |
|
8043 |
#: includes/gateways/stripe/includes/admin/notices.php:39
|
8044 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:632
|
8045 |
#: includes/gateways/stripe/includes/payment-methods/payment-request/apple-pay.php:22
|
8046 |
msgid "Unable to locate registry"
|
8047 |
msgstr ""
|
8050 |
msgid "Stripe-specific reports have been removed."
|
8051 |
msgstr ""
|
8052 |
|
8053 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:109
|
8054 |
#. translators: %1$s Opening anchor tag, do not translate. %2$s Closing anchor
|
8055 |
#. tag, do not translate.
|
8056 |
msgid ""
|
8058 |
"again%2$s. If you continue to have this problem, please contact support."
|
8059 |
msgstr ""
|
8060 |
|
8061 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:295
|
8062 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:576
|
8063 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:638
|
8064 |
msgid "Connect with Stripe"
|
8065 |
msgstr ""
|
8066 |
|
8067 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:305
|
8068 |
msgid ""
|
8069 |
"Connect with Stripe for pay as you go pricing: 2% per-transaction fee + "
|
8070 |
"Stripe fees."
|
8071 |
msgstr ""
|
8072 |
|
8073 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:316
|
8074 |
#. translators: %1$s Opening anchor tag, do not translate. %2$s Closing anchor
|
8075 |
#. tag, do not translate.
|
8076 |
msgid "Have questions about connecting with Stripe? See the %1$sdocumentation%2$s."
|
8077 |
msgstr ""
|
8078 |
|
8079 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:355
|
8080 |
msgid "Manage API keys manually"
|
8081 |
msgstr ""
|
8082 |
|
8083 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:365
|
8084 |
msgid "Hide API keys"
|
8085 |
msgstr ""
|
8086 |
|
8087 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:371
|
8088 |
msgid ""
|
8089 |
"Although you can add your API keys manually, we recommend using Stripe "
|
8090 |
"Connect: an easier and more secure way of connecting your Stripe account to "
|
8094 |
"just a few clicks."
|
8095 |
msgstr ""
|
8096 |
|
8097 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:389
|
8098 |
msgid "Unable to retrieve account information."
|
8099 |
msgstr ""
|
8100 |
|
8101 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:414
|
8102 |
#. translators: %1$s Stripe payment mode. %2$s Opening anchor tag for
|
8103 |
#. reconnecting to Stripe, do not translate. %3$s Opening anchor tag for
|
8104 |
#. disconnecting Stripe, do not translate. %4$s Closing anchor tag, do not
|
8108 |
"mode%4$s, or %3$sdisconnect this account%4$s."
|
8109 |
msgstr ""
|
8110 |
|
8111 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:446
|
8112 |
#. translators: %1$s Opening bold tag, do not translate. %2$s Closing bold tag,
|
8113 |
#. do not translate.
|
8114 |
msgid "Webhooks cannot be configured for recurring purchases with this account."
|
8115 |
msgstr ""
|
8116 |
|
8117 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:464
|
8118 |
#. translators: %1$s Opening anchor tag for disconnecting Stripe, do not
|
8119 |
#. translate. %2$s Closing anchor tag, do not translate.
|
8120 |
msgid "%1$sDisconnect this account%2$s."
|
8121 |
msgstr ""
|
8122 |
|
8123 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:530
|
8124 |
msgid "Pay as you go pricing: 2% per-transaction fee + Stripe fees."
|
8125 |
msgstr ""
|
8126 |
|
8127 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:542
|
8128 |
msgid "Administrator (Owner)"
|
8129 |
msgstr ""
|
8130 |
|
8131 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:553
|
8132 |
msgid ""
|
8133 |
"The API keys provided do not match the Stripe Connect account associated "
|
8134 |
"with this installation. If you have manually modified these values after "
|
8135 |
"connecting your account, please reconnect below or update your API keys."
|
8136 |
msgstr ""
|
8137 |
|
8138 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:579
|
8139 |
msgid ""
|
8140 |
"It is highly recommended to Connect with Stripe for easier setup and "
|
8141 |
"improved security."
|
8142 |
msgstr ""
|
8143 |
|
8144 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:592
|
8145 |
#. translators: %1$s Stripe payment mode.
|
8146 |
msgid "Your manually managed %1$s mode API keys are valid."
|
8147 |
msgstr ""
|
8148 |
|
8149 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:608
|
8150 |
#. translators: %1$s Stripe payment mode.
|
8151 |
msgid "Your manually managed %1$s mode API keys are invalid."
|
8152 |
msgstr ""
|
8153 |
|
8154 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:648
|
8155 |
msgid ""
|
8156 |
"Start accepting payments with Stripe by connecting your account. Stripe "
|
8157 |
"Connect helps ensure easier setup and improved security."
|
8158 |
msgstr ""
|
8159 |
|
8160 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:669
|
8161 |
#. translators: %s Test mode status. Enabled or disabled.
|
8162 |
msgid "\"Test Mode\" has been %s. Please verify your Stripe connection status."
|
8163 |
msgstr ""
|
8361 |
"recommendations%2$s."
|
8362 |
msgstr ""
|
8363 |
|
8364 |
+
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:55
|
8365 |
#. translators: %s Upgrade link.
|
8366 |
msgid ""
|
8367 |
"Easy Digital Downloads - Stripe Gateway needs to upgrade the customers "
|
8370 |
"this upgrade</a>"
|
8371 |
msgstr ""
|
8372 |
|
8373 |
+
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:58
|
8374 |
msgid ""
|
8375 |
"<strong>About this upgrade:</strong><br />This upgrade will improve the "
|
8376 |
"reliability of associating purchase records with your existing customer "
|
8378 |
"locally on their EDD customer record, instead of their user record."
|
8379 |
msgstr ""
|
8380 |
|
8381 |
+
#: includes/gateways/stripe/includes/admin/upgrade-functions.php:60
|
8382 |
msgid ""
|
8383 |
"<strong>Advanced User?</strong><br />This upgrade can also be run via WPCLI "
|
8384 |
"with the following command:<br /><code>wp edd-stripe "
|
8441 |
msgid "Card successfully added."
|
8442 |
msgstr ""
|
8443 |
|
8444 |
+
#: includes/gateways/stripe/includes/class-edd-stripe.php:252
|
8445 |
#: includes/gateways/stripe/includes/template-functions.php:125
|
8446 |
msgid "Credit Card"
|
8447 |
msgstr ""
|
8955 |
msgid "Passwords do not match"
|
8956 |
msgstr ""
|
8957 |
|
8958 |
+
#: includes/misc-functions.php:317 tests/tests-misc.php:76
|
8959 |
msgid "US Dollars ($)"
|
8960 |
msgstr ""
|
8961 |
|
8962 |
+
#: includes/misc-functions.php:318 tests/tests-misc.php:77
|
8963 |
msgid "Euros (€)"
|
8964 |
msgstr ""
|
8965 |
|
8966 |
+
#: includes/misc-functions.php:319 tests/tests-misc.php:78
|
8967 |
msgid "Pound Sterling (£)"
|
8968 |
msgstr ""
|
8969 |
|
8970 |
+
#: includes/misc-functions.php:320 tests/tests-misc.php:79
|
8971 |
msgid "Australian Dollars ($)"
|
8972 |
msgstr ""
|
8973 |
|
8974 |
+
#: includes/misc-functions.php:321 tests/tests-misc.php:80
|
8975 |
msgid "Brazilian Real (R$)"
|
8976 |
msgstr ""
|
8977 |
|
8978 |
+
#: includes/misc-functions.php:322 tests/tests-misc.php:81
|
8979 |
msgid "Canadian Dollars ($)"
|
8980 |
msgstr ""
|
8981 |
|
8982 |
+
#: includes/misc-functions.php:323 tests/tests-misc.php:82
|
8983 |
msgid "Czech Koruna"
|
8984 |
msgstr ""
|
8985 |
|
8986 |
+
#: includes/misc-functions.php:324 tests/tests-misc.php:83
|
8987 |
msgid "Danish Krone"
|
8988 |
msgstr ""
|
8989 |
|
8990 |
+
#: includes/misc-functions.php:325 tests/tests-misc.php:84
|
8991 |
msgid "Hong Kong Dollar ($)"
|
8992 |
msgstr ""
|
8993 |
|
8994 |
+
#: includes/misc-functions.php:326 tests/tests-misc.php:85
|
8995 |
msgid "Hungarian Forint"
|
8996 |
msgstr ""
|
8997 |
|
8998 |
+
#: includes/misc-functions.php:327 tests/tests-misc.php:86
|
8999 |
msgid "Israeli Shekel (₪)"
|
9000 |
msgstr ""
|
9001 |
|
9002 |
+
#: includes/misc-functions.php:328 tests/tests-misc.php:87
|
9003 |
msgid "Japanese Yen (¥)"
|
9004 |
msgstr ""
|
9005 |
|
9006 |
+
#: includes/misc-functions.php:329 tests/tests-misc.php:88
|
9007 |
msgid "Malaysian Ringgits"
|
9008 |
msgstr ""
|
9009 |
|
9010 |
+
#: includes/misc-functions.php:330 tests/tests-misc.php:89
|
9011 |
msgid "Mexican Peso ($)"
|
9012 |
msgstr ""
|
9013 |
|
9014 |
+
#: includes/misc-functions.php:331 tests/tests-misc.php:90
|
9015 |
msgid "New Zealand Dollar ($)"
|
9016 |
msgstr ""
|
9017 |
|
9018 |
+
#: includes/misc-functions.php:332 tests/tests-misc.php:91
|
9019 |
msgid "Norwegian Krone"
|
9020 |
msgstr ""
|
9021 |
|
9022 |
+
#: includes/misc-functions.php:333 tests/tests-misc.php:92
|
9023 |
msgid "Philippine Pesos"
|
9024 |
msgstr ""
|
9025 |
|
9026 |
+
#: includes/misc-functions.php:334 tests/tests-misc.php:93
|
9027 |
msgid "Polish Zloty"
|
9028 |
msgstr ""
|
9029 |
|
9030 |
+
#: includes/misc-functions.php:335 tests/tests-misc.php:94
|
9031 |
msgid "Singapore Dollar ($)"
|
9032 |
msgstr ""
|
9033 |
|
9034 |
+
#: includes/misc-functions.php:336 tests/tests-misc.php:95
|
9035 |
msgid "Swedish Krona"
|
9036 |
msgstr ""
|
9037 |
|
9038 |
+
#: includes/misc-functions.php:337 tests/tests-misc.php:96
|
9039 |
msgid "Swiss Franc"
|
9040 |
msgstr ""
|
9041 |
|
9042 |
+
#: includes/misc-functions.php:338 tests/tests-misc.php:97
|
9043 |
msgid "Taiwan New Dollars"
|
9044 |
msgstr ""
|
9045 |
|
9046 |
+
#: includes/misc-functions.php:339 tests/tests-misc.php:98
|
9047 |
msgid "Thai Baht (฿)"
|
9048 |
msgstr ""
|
9049 |
|
9050 |
+
#: includes/misc-functions.php:340 tests/tests-misc.php:99
|
9051 |
msgid "Indian Rupee (₹)"
|
9052 |
msgstr ""
|
9053 |
|
9054 |
+
#: includes/misc-functions.php:341 tests/tests-misc.php:100
|
9055 |
msgid "Turkish Lira (₺)"
|
9056 |
msgstr ""
|
9057 |
|
9058 |
+
#: includes/misc-functions.php:342 tests/tests-misc.php:101
|
9059 |
msgid "Iranian Rial (﷼)"
|
9060 |
msgstr ""
|
9061 |
|
9062 |
+
#: includes/misc-functions.php:343 tests/tests-misc.php:102
|
9063 |
msgid "Russian Rubles"
|
9064 |
msgstr ""
|
9065 |
|
9066 |
+
#: includes/misc-functions.php:344 tests/tests-misc.php:103
|
9067 |
msgid "Angolan Kwanza"
|
9068 |
msgstr ""
|
9069 |
|
9070 |
+
#: includes/misc-functions.php:533
|
9071 |
msgid ""
|
9072 |
"%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
|
9073 |
"%2$s! Use %3$s instead."
|
9074 |
msgstr ""
|
9075 |
|
9076 |
+
#: includes/misc-functions.php:541
|
9077 |
msgid ""
|
9078 |
"%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
|
9079 |
"%2$s with no alternative available."
|
9080 |
msgstr ""
|
9081 |
|
9082 |
+
#: includes/misc-functions.php:582
|
9083 |
msgid ""
|
9084 |
"The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
|
9085 |
"Downloads version %3$s! Please use %4$s instead."
|
9086 |
msgstr ""
|
9087 |
|
9088 |
+
#: includes/misc-functions.php:590
|
9089 |
msgid ""
|
9090 |
"The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
|
9091 |
"Downloads version %3$s with no alternative available."
|
9092 |
msgstr ""
|
9093 |
|
9094 |
+
#: includes/models/Notification.php:187
|
9095 |
+
#. Translators: %s - a length of time (e.g. "1 second")
|
9096 |
+
msgid "%s ago"
|
9097 |
+
msgstr ""
|
9098 |
+
|
9099 |
#: includes/payments/actions.php:187
|
9100 |
msgid "After payment actions processed."
|
9101 |
msgstr ""
|
9653 |
msgid "Purchase Verification Failed"
|
9654 |
msgstr ""
|
9655 |
|
9656 |
+
#: includes/process-download.php:971
|
9657 |
msgid "Invalid file"
|
9658 |
msgstr ""
|
9659 |
|
9660 |
+
#: includes/process-download.php:978
|
9661 |
msgid "The requested file could not be found. Error 404."
|
9662 |
msgstr ""
|
9663 |
|
9664 |
+
#: includes/process-download.php:979
|
9665 |
msgid "File not found"
|
9666 |
msgstr ""
|
9667 |
|
9913 |
msgid "Please wait …"
|
9914 |
msgstr ""
|
9915 |
|
9916 |
+
#: includes/scripts.php:256
|
9917 |
msgid "Purchase Limit Settings"
|
9918 |
msgstr ""
|
9919 |
|
9920 |
+
#: includes/scripts.php:257
|
9921 |
msgid "Simple Shipping Settings"
|
9922 |
msgstr ""
|
9923 |
|
9924 |
+
#: includes/scripts.php:258
|
9925 |
msgid "Software Licensing Settings"
|
9926 |
msgstr ""
|
9927 |
|
9928 |
+
#: includes/scripts.php:259
|
9929 |
msgid "Recurring Payments Settings"
|
9930 |
msgstr ""
|
9931 |
|
10359 |
msgid "Number of items in cart"
|
10360 |
msgstr ""
|
10361 |
|
10362 |
+
#: tests/bootstrap.php:42
|
10363 |
msgid "HTTP Requests disabled for unit tests"
|
10364 |
msgstr ""
|
10365 |
|
10482 |
msgid "to"
|
10483 |
msgstr ""
|
10484 |
|
10485 |
+
#: includes/admin/settings/register-settings.php:820
|
10486 |
#: includes/template-functions.php:79
|
10487 |
msgctxt "text shown on the Add to Cart Button when the product is already in the cart"
|
10488 |
msgid "Checkout"
|
10489 |
msgstr ""
|
10490 |
|
10491 |
+
#: includes/admin/settings/register-settings.php:986
|
10492 |
msgctxt ""
|
10493 |
"payment status labels for the privacy export & erase settings: Pending "
|
10494 |
"Payments"
|
10530 |
msgid "None"
|
10531 |
msgstr ""
|
10532 |
|
10533 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:407
|
10534 |
msgctxt "Stripe Connect mode"
|
10535 |
msgid "test"
|
10536 |
msgstr ""
|
10537 |
|
10538 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:408
|
10539 |
msgctxt "Stripe Connect mode"
|
10540 |
msgid "live"
|
10541 |
msgstr ""
|
10542 |
|
10543 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:659
|
10544 |
msgctxt "gateway test mode status"
|
10545 |
msgid "enabled"
|
10546 |
msgstr ""
|
10547 |
|
10548 |
+
#: includes/gateways/stripe/includes/admin/settings/stripe-connect.php:660
|
10549 |
msgctxt "gateway test mode status"
|
10550 |
msgid "disabled"
|
10551 |
msgstr ""
|
readme.txt
CHANGED
@@ -5,9 +5,9 @@ Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214
|
|
5 |
Donate link: https://easydigitaldownloads.com/donate/
|
6 |
Tags: ecommerce, e-commerce, sell, digital store, stripe
|
7 |
Requires at least: 4.4
|
8 |
-
Tested up to: 5.8
|
9 |
-
Requires PHP: 5.
|
10 |
-
Stable Tag: 2.11.
|
11 |
License: GNU Version 2 or Any Later Version
|
12 |
|
13 |
Sell your digital products the simple way. Easily build an online store complete with a cart system, checkout forms, reports, coupons, and more!
|
@@ -122,10 +122,6 @@ The Easy Digital Downloads API makes it possible for developers to make customiz
|
|
122 |
|
123 |
Easy Digital Downloads is backed by top-notch technical support from our globally distributed full-time support team. We also have an [extensive documentation site available](https://docs.easydigitaldownloads.com/?utm_medium=readme&utm_source=wporg&utm_campaign=lite-plugin&utm_content=docs&utm_term=description). If you’re looking for faster support via email, we encourage you to [purchase an Easy Digital Downloads pass](https://easydigitaldownloads.com/pricing/?utm_medium=readme&utm_source=wporg&utm_campaign=lite-plugin&utm_content=upgrade&utm_term=description) or premium extension.
|
124 |
|
125 |
-
= Meet the team =
|
126 |
-
|
127 |
-
Easy Digital Downloads is built by [Sandhills Development](https://sandhillsdev.com/?utm_medium=readme&utm_source=wporg&utm_campaign=edd-plugin&utm_content=sandhills&utm_term=description). We make [popular WordPress plugins](https://sandhillsdev.com/projects/?utm_medium=readme&utm_source=wporg&utm_campaign=edd-plugin&utm_content=popular&utm_term=description) used by hundreds of thousands of people just like you. [Get to know us here](https://sandhillsdev.com/about/?utm_medium=readme&utm_source=wporg&utm_campaign=edd-plugin&utm_content=about&utm_term=description)!
|
128 |
-
|
129 |
> EDD has been a long standing, rock-solid e-commerce solution for WordPress. The team lives and breathes WordPress, understands the platform, and is embedded in the community.
|
130 |
|
131 |
> Joe Casabona - Creator Courses
|
@@ -221,9 +217,9 @@ Yes! EDD integrates directly with several affiliate platforms that provide compl
|
|
221 |
[Check out AffiliateWP](https://affiliatewp.com?utm_source=edd_readme&utm_medium=faq_tab&utm_content=home&utm_campaign=readme)
|
222 |
|
223 |
= Can I give my customers downloadable PDF Invoices? =
|
224 |
-
Yes,
|
225 |
|
226 |
-
[
|
227 |
|
228 |
= Are recurring payments supported? =
|
229 |
|
@@ -246,6 +242,34 @@ Yes, through the use of our commercial addon called [Recurring Payments](https:/
|
|
246 |
13. Pay with PayPal modal
|
247 |
|
248 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
= 2.11.3.1, November 1, 2021 =
|
250 |
* Fix: Fatal error in PHP versions lower than 7.3.
|
251 |
|
5 |
Donate link: https://easydigitaldownloads.com/donate/
|
6 |
Tags: ecommerce, e-commerce, sell, digital store, stripe
|
7 |
Requires at least: 4.4
|
8 |
+
Tested up to: 5.8
|
9 |
+
Requires PHP: 5.4
|
10 |
+
Stable Tag: 2.11.4
|
11 |
License: GNU Version 2 or Any Later Version
|
12 |
|
13 |
Sell your digital products the simple way. Easily build an online store complete with a cart system, checkout forms, reports, coupons, and more!
|
122 |
|
123 |
Easy Digital Downloads is backed by top-notch technical support from our globally distributed full-time support team. We also have an [extensive documentation site available](https://docs.easydigitaldownloads.com/?utm_medium=readme&utm_source=wporg&utm_campaign=lite-plugin&utm_content=docs&utm_term=description). If you’re looking for faster support via email, we encourage you to [purchase an Easy Digital Downloads pass](https://easydigitaldownloads.com/pricing/?utm_medium=readme&utm_source=wporg&utm_campaign=lite-plugin&utm_content=upgrade&utm_term=description) or premium extension.
|
124 |
|
|
|
|
|
|
|
|
|
125 |
> EDD has been a long standing, rock-solid e-commerce solution for WordPress. The team lives and breathes WordPress, understands the platform, and is embedded in the community.
|
126 |
|
127 |
> Joe Casabona - Creator Courses
|
217 |
[Check out AffiliateWP](https://affiliatewp.com?utm_source=edd_readme&utm_medium=faq_tab&utm_content=home&utm_campaign=readme)
|
218 |
|
219 |
= Can I give my customers downloadable PDF Invoices? =
|
220 |
+
Yes, with the Invoices extension, you can provide beautiful and downloadable invoices to your customers.
|
221 |
|
222 |
+
[Invoices](https://easydigitaldownloads.com/downloads/edd-invoices/?utm_source=edd-invoices&utm_medium=faq_tab&utm_content=pdf-invoices&utm_campaign=readme)
|
223 |
|
224 |
= Are recurring payments supported? =
|
225 |
|
242 |
13. Pay with PayPal modal
|
243 |
|
244 |
== Changelog ==
|
245 |
+
|
246 |
+
= 2.11.4, December 27, 2021 =
|
247 |
+
* New: Set minimum PHP version to 5.4 in readme.txt.
|
248 |
+
* New: Add notifications to EDD screens.
|
249 |
+
* New: Reorganize some settings locations to make them more predictable for users.
|
250 |
+
* New: Improve user opportunities to give feedback to the EDD team.
|
251 |
+
* New: Add support for webp images.
|
252 |
+
* Improvement: Add the `edd_ajax_remove_discount_response` filter inside the AJAX remove discount function.
|
253 |
+
* Improvement: If a license key has not been entered for a specific product, but it's covered by an existing pass key, use the pass key for updates.
|
254 |
+
* Improvement: Remove a confusing link for licenses near expiration date.
|
255 |
+
* Fix: In some cases, download links were unexpectedly not allowing users to download files.
|
256 |
+
* Fix: EDD Pass Manager was not saving the license key to the pass data during activation.
|
257 |
+
* Fix: Purchase receipt emails were always assumed to be successfully sent, even if they weren't.
|
258 |
+
* Fix: Variable prices were missing the index when a product was first saved.
|
259 |
+
* Fix: Exporting earnings results with an incorrect date range generated invalid data.
|
260 |
+
* Fix: A PHP notice was generated when an invalid license key was entered.
|
261 |
+
* Fix: PayPal Standard - Transaction links were not directing to the transation.
|
262 |
+
* Fix: The Arabic translation file caused a fatal error; it has been removed in deference to the repository translation.
|
263 |
+
* Fix: Improve earnings export performance.
|
264 |
+
* Dev: CLI - Prevent PHP error when a malformed payments command is used.
|
265 |
+
* Dev: Add helper methods the to the Pass Manager class.
|
266 |
+
* Dev: Create an option for the store activation date.
|
267 |
+
* Dev: Introduce the EDD extension registry for managing licensed extensions.
|
268 |
+
* Dev: Save EDD licensed products to options for improved reliability.
|
269 |
+
* Dev: Explicitly declare the `payment_stats` property for `EDD_Payment_Stats`.
|
270 |
+
* Dev: Improve performance of `edd_get_settings_tabs`.
|
271 |
+
* Dev: FILTER_SANITIZE_STRING is deprecated in PHP 8.1.
|
272 |
+
|
273 |
= 2.11.3.1, November 1, 2021 =
|
274 |
* Fix: Fatal error in PHP versions lower than 7.3.
|
275 |
|