├── assets ├── js │ ├── admin │ │ ├── upgrades │ │ │ └── index.js │ │ ├── orders │ │ │ ├── order-details │ │ │ │ ├── index.js │ │ │ │ └── receipt.js │ │ │ └── order-overview │ │ │ │ ├── collections │ │ │ │ └── order-refunds.js │ │ │ │ ├── models │ │ │ │ └── order-refund.js │ │ │ │ └── views │ │ │ │ ├── order-credits.js │ │ │ │ ├── order-discounts-fees.js │ │ │ │ ├── order-refunds.js │ │ │ │ ├── no-order-items.js │ │ │ │ ├── summary.js │ │ │ │ ├── order-refund.js │ │ │ │ ├── overview.js │ │ │ │ ├── order-subtotal.js │ │ │ │ └── dialog.js │ │ ├── payments │ │ │ └── index.js │ │ ├── components │ │ │ ├── taxonomies │ │ │ │ └── index.js │ │ │ ├── dialog │ │ │ │ └── index.js │ │ │ ├── tooltips │ │ │ │ └── index.js │ │ │ ├── location │ │ │ │ └── index.js │ │ │ ├── date-picker │ │ │ │ └── index.js │ │ │ └── sortable-list │ │ │ │ └── index.js │ │ ├── dashboard │ │ │ └── index.js │ │ ├── settings │ │ │ ├── recapture │ │ │ │ └── index.js │ │ │ ├── tax-rates │ │ │ │ ├── views │ │ │ │ │ ├── table-row-empty.js │ │ │ │ │ ├── table-meta.js │ │ │ │ │ ├── region-field.js │ │ │ │ │ ├── table.js │ │ │ │ │ ├── manager.js │ │ │ │ │ └── bulk-actions.js │ │ │ │ ├── collections │ │ │ │ │ └── tax-rates.js │ │ │ │ ├── models │ │ │ │ │ └── tax-rate.js │ │ │ │ └── index.js │ │ │ └── email-tags │ │ │ │ └── utils.js │ │ ├── discounts │ │ │ └── index.js │ │ ├── index.js │ │ ├── notices │ │ │ └── index.js │ │ ├── downloads │ │ │ └── bulk-edit.js │ │ └── reports │ │ │ ├── charts │ │ │ ├── index.js │ │ │ └── pie.js │ │ │ └── formatting.js │ ├── utils │ │ ├── jquery.js │ │ └── chosen.js │ ├── frontend │ │ └── checkout │ │ │ └── components │ │ │ └── agree-to-terms │ │ │ └── index.js │ ├── edd-admin-payments.js │ ├── edd-admin-dashboard.js │ ├── edd-admin-discounts.js │ └── edd-admin-notices.js ├── css │ ├── admin │ │ ├── orders │ │ │ └── style.scss │ │ ├── forms │ │ │ ├── style.scss │ │ │ └── _form-row.scss │ │ ├── general │ │ │ ├── _dialog.scss │ │ │ ├── style.scss │ │ │ ├── _upgrade.scss │ │ │ ├── _item-header.scss │ │ │ └── _status-badge.scss │ │ ├── downloads │ │ │ ├── _duplicate.scss │ │ │ ├── style.scss │ │ │ ├── _upload.scss │ │ │ ├── _product_settings.scss │ │ │ └── _prices.scss │ │ ├── extension-manager.scss │ │ ├── extensions │ │ │ ├── _key.scss │ │ │ ├── _features.scss │ │ │ ├── _card.scss │ │ │ ├── style.scss │ │ │ ├── _steps.scss │ │ │ ├── _body.scss │ │ │ ├── _images.scss │ │ │ ├── _group.scss │ │ │ ├── _bar.scss │ │ │ ├── _installer.scss │ │ │ └── _variations.scss │ │ ├── tax-rates │ │ │ ├── style.scss │ │ │ └── _add.scss │ │ ├── chosen │ │ │ ├── _results.scss │ │ │ ├── _edd.scss │ │ │ ├── style.scss │ │ │ ├── _colors.scss │ │ │ ├── _single.scss │ │ │ ├── _multi.scss │ │ │ └── _base.scss │ │ ├── reports │ │ │ ├── style.scss │ │ │ ├── _mobile-link.scss │ │ │ └── _layout.scss │ │ ├── upgrades │ │ │ └── _v3.scss │ │ ├── gateways │ │ │ └── style.scss │ │ ├── settings │ │ │ └── style.scss │ │ ├── email-tags.scss │ │ └── pass-handler.scss │ ├── variables │ │ ├── _variables.scss │ │ ├── _mixins.scss │ │ └── _colors.scss │ ├── edd-admin-email-tags.min.css │ ├── edd-admin-email-tags-rtl.min.css │ ├── edd-admin-pass-handler.min.css │ └── edd-admin-pass-handler-rtl.min.css └── images │ ├── xit.gif │ ├── edd-cpt.png │ ├── edd-icon.png │ ├── edd-logo.png │ ├── loading.gif │ ├── edd-cpt-2x.png │ ├── edd-media.png │ ├── edd-icon-2x.png │ ├── edd-logo-pdf.png │ ├── edd-peeking.png │ ├── icons │ ├── iphone.png │ ├── icon-net.png │ ├── icon-average.png │ ├── icon-gross.png │ ├── icon-arrow-up.png │ ├── icon-megaphone.png │ ├── icon-arrow-down.png │ ├── icon-chevron-down.svg │ ├── icon-top-products.png │ ├── icon-new-customers.png │ ├── icon-install.svg │ ├── icon-smiley.svg │ ├── icon-edd-heart.svg │ ├── icon-subscriptions.svg │ ├── icon-gateways.svg │ ├── icon-email-marketing.svg │ └── icon-lead-magnets.svg │ ├── media-button.png │ ├── edd-cross-hair.png │ ├── onboarding │ ├── bob.jpg │ ├── joe.jpg │ └── nicolas.jpg │ ├── edd-logo-white-2x.png │ ├── screenshots │ ├── grid.png │ ├── 17direct.png │ ├── 22-logs.png │ ├── bundles.png │ ├── 17checkout.png │ ├── 20-discount.png │ ├── 22-quantity.png │ ├── 24-checkout.png │ ├── 24-export.png │ ├── 26-customer.png │ ├── 26-import.png │ ├── 26-refund.png │ ├── customer-ui.png │ ├── product-tax.png │ ├── tax-rates.png │ ├── 17quantities.png │ ├── 18cart-saving.png │ ├── 20-sequential.png │ ├── edit-download.png │ ├── order-details.png │ ├── purchase-link.png │ ├── 18-button-colors.png │ ├── product-earnings.png │ ├── 20-register-login.png │ ├── email-template-21.png │ ├── 24-category-earnings.png │ ├── 20-unlimited-downloads.png │ ├── 22-purchased-downloads.png │ └── 22-purchased-downloads2.png │ ├── ui-icons_21759b_256x240.png │ ├── ui-icons_333333_256x240.png │ ├── ui-icons_999999_256x240.png │ ├── ui-icons_cc0000_256x240.png │ └── promo │ └── edd-25-percent-off.png ├── .browserslistrc ├── includes ├── .blocks-hash ├── gateways │ ├── .stripe-hash │ └── paypal │ │ ├── exceptions │ │ ├── class-api-exception.php │ │ ├── class-invalid-merchant-details.php │ │ ├── class-authentication-exception.php │ │ └── class-missing-merchant-details.php │ │ ├── integrations.php │ │ └── webhooks │ │ └── events │ │ └── class-payment-capture-denied.php ├── admin │ ├── views │ │ ├── tmpl-tax-rates-table-row-empty.php │ │ ├── tmpl-order-no-items.php │ │ ├── tmpl-order-subtotal.php │ │ ├── tmpl-tax-rates-table-meta.php │ │ ├── tmpl-order-refund.php │ │ ├── tmpl-order-total.php │ │ ├── tmpl-tax-rates-table-bulk-actions.php │ │ ├── tmpl-order-copy-download-link.php │ │ └── tmpl-tax-rates-table-add.php │ ├── reporting │ │ ├── logs.php │ │ ├── class-reports-sections.php │ │ └── views │ │ │ └── export-downloads.php │ ├── payments │ │ └── class-order-sections.php │ └── admin-footer.php ├── api │ ├── v3 │ │ └── Endpoint.php │ └── class-edd-api-v1.php ├── interface-edd-exception.php ├── class-edd-db-customers.php ├── class-edd-db-customer-meta.php ├── utils │ ├── interface-static-registry.php │ ├── class-edd-exception.php │ ├── interface-error-logger.php │ └── exceptions │ │ ├── class-invalid-parameter.php │ │ └── class-attribute-not-found.php ├── database │ ├── engine │ │ └── class-meta.php │ ├── rows │ │ ├── class-log.php │ │ ├── class-note.php │ │ ├── class-order.php │ │ ├── class-customer.php │ │ ├── class-adjustment.php │ │ ├── class-order-item.php │ │ ├── class-order-address.php │ │ ├── class-customer-address.php │ │ ├── class-log-api-request.php │ │ ├── class-order-adjustment.php │ │ ├── class-log-file-download.php │ │ ├── class-order-transaction.php │ │ └── class-customer-email-address.php │ └── tables │ │ ├── class-log-meta.php │ │ ├── class-note-meta.php │ │ ├── class-order-meta.php │ │ ├── class-order-item-meta.php │ │ ├── class-logs-api-request-meta.php │ │ ├── class-order-adjustment-meta.php │ │ └── class-logs-file-download-meta.php ├── reports │ ├── exceptions │ │ ├── class-invalid-view.php │ │ ├── class-invalid-parameter.php │ │ └── class-invalid-view-parameter.php │ └── data │ │ ├── charts │ │ └── v2 │ │ │ ├── class-pie-dataset.php │ │ │ ├── class-bar-dataset.php │ │ │ └── class-line-dataset.php │ │ └── class-tile-endpoint.php ├── template-actions.php ├── orders │ └── functions │ │ └── ui.php ├── theme-compatibility.php ├── mime-types.php └── adjustments │ └── class-tax-rate.php ├── .eslintignore ├── vendor ├── composer │ ├── installed.json │ ├── autoload_namespaces.php │ ├── autoload_psr4.php │ ├── autoload_classmap.php │ ├── installed.php │ ├── LICENSE │ ├── autoload_static.php │ └── autoload_real.php └── autoload.php ├── templates ├── images │ ├── tick.png │ ├── xit.gif │ ├── loading.gif │ └── icons │ │ └── iphone.png ├── shortcode-content-title.php ├── shortcode-content-cart-button.php ├── shortcode-content-price.php ├── fonts │ ├── lock.svg │ └── check.svg ├── shortcode-content-image.php ├── emails │ ├── footer.php │ ├── body.php │ ├── body-default.php │ └── header.php ├── shortcode-content-excerpt.php ├── shortcode-content-full.php ├── account-pending.php ├── payment-processing.php ├── widget-cart-item.php ├── widget-cart-checkout.php ├── widget-cart.php └── widget-cart-empty.php ├── languages ├── index.php └── README.md ├── src ├── Admin │ ├── SiteHealth │ │ ├── Test.php │ │ ├── Tests.php │ │ ├── Gateways.php │ │ └── Templates.php │ ├── Settings │ │ └── Tabs │ │ │ ├── Licenses.php │ │ │ ├── Extensions.php │ │ │ └── Marketing.php │ ├── Onboarding │ │ ├── Steps │ │ │ ├── Step.php │ │ │ └── BusinessInfo.php │ │ └── Tools.php │ ├── Installers │ │ ├── Install_Skin.php │ │ └── PluginSilentUpgraderSkin.php │ └── Extensions │ │ ├── Menu.php │ │ └── DownloadURL.php ├── EventManagement │ └── SubscriberInterface.php ├── Database │ └── Rows │ │ └── Notification.php ├── Lite │ └── Core.php └── Utils │ └── Countries.php ├── readme.md └── SUPPORT.md /assets/js/admin/upgrades/index.js: -------------------------------------------------------------------------------- 1 | import './v3'; 2 | -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | extends @wordpress/browserslist-config 2 | -------------------------------------------------------------------------------- /assets/css/admin/orders/style.scss: -------------------------------------------------------------------------------- 1 | 2 | @import "refunds-modal"; 3 | -------------------------------------------------------------------------------- /includes/.blocks-hash: -------------------------------------------------------------------------------- 1 | 5ba79119a1a5c9084fe96932630f13eacbfe2589 2 | -------------------------------------------------------------------------------- /includes/gateways/.stripe-hash: -------------------------------------------------------------------------------- 1 | feb67d63562231e67ed6184c353b2be4dbf3bc1d 2 | -------------------------------------------------------------------------------- /assets/css/admin/forms/style.scss: -------------------------------------------------------------------------------- 1 | @import "form-group"; 2 | @import "form-row"; 3 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | vendor 3 | public 4 | assets/js/*.js 5 | assets/js/*.js.map 6 | -------------------------------------------------------------------------------- /assets/images/xit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/xit.gif -------------------------------------------------------------------------------- /vendor/composer/installed.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [], 3 | "dev": false, 4 | "dev-package-names": [] 5 | } 6 | -------------------------------------------------------------------------------- /assets/css/admin/general/_dialog.scss: -------------------------------------------------------------------------------- 1 | // Styles for our use of jQuery.dialog 2 | .edd-dialog { 3 | display: none; 4 | } 5 | -------------------------------------------------------------------------------- /assets/js/admin/orders/order-details/index.js: -------------------------------------------------------------------------------- 1 | import './address.js'; 2 | import './customer.js'; 3 | import './receipt.js'; 4 | -------------------------------------------------------------------------------- /assets/js/admin/payments/index.js: -------------------------------------------------------------------------------- 1 | // Empty file for backwards compatibility. 2 | // @see assets/js/admin/orders/index.js 3 | -------------------------------------------------------------------------------- /assets/images/edd-cpt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-cpt.png -------------------------------------------------------------------------------- /assets/images/edd-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-icon.png -------------------------------------------------------------------------------- /assets/images/edd-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-logo.png -------------------------------------------------------------------------------- /assets/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/loading.gif -------------------------------------------------------------------------------- /templates/images/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/templates/images/tick.png -------------------------------------------------------------------------------- /templates/images/xit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/templates/images/xit.gif -------------------------------------------------------------------------------- /assets/css/admin/general/style.scss: -------------------------------------------------------------------------------- 1 | @import "dialog"; 2 | @import "item-header"; 3 | @import "status-badge"; 4 | @import "upgrade"; 5 | -------------------------------------------------------------------------------- /assets/images/edd-cpt-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-cpt-2x.png -------------------------------------------------------------------------------- /assets/images/edd-media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-media.png -------------------------------------------------------------------------------- /templates/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/templates/images/loading.gif -------------------------------------------------------------------------------- /assets/images/edd-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-icon-2x.png -------------------------------------------------------------------------------- /assets/images/edd-logo-pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-logo-pdf.png -------------------------------------------------------------------------------- /assets/images/edd-peeking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-peeking.png -------------------------------------------------------------------------------- /assets/images/icons/iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/iphone.png -------------------------------------------------------------------------------- /assets/images/media-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/media-button.png -------------------------------------------------------------------------------- /templates/shortcode-content-title.php: -------------------------------------------------------------------------------- 1 |

2 | -------------------------------------------------------------------------------- /assets/images/edd-cross-hair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-cross-hair.png -------------------------------------------------------------------------------- /assets/images/icons/icon-net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-net.png -------------------------------------------------------------------------------- /assets/images/onboarding/bob.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/onboarding/bob.jpg -------------------------------------------------------------------------------- /assets/images/onboarding/joe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/onboarding/joe.jpg -------------------------------------------------------------------------------- /templates/images/icons/iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/templates/images/icons/iphone.png -------------------------------------------------------------------------------- /assets/images/edd-logo-white-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/edd-logo-white-2x.png -------------------------------------------------------------------------------- /assets/images/icons/icon-average.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-average.png -------------------------------------------------------------------------------- /assets/images/icons/icon-gross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-gross.png -------------------------------------------------------------------------------- /assets/images/onboarding/nicolas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/onboarding/nicolas.jpg -------------------------------------------------------------------------------- /assets/images/screenshots/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/grid.png -------------------------------------------------------------------------------- /assets/css/admin/downloads/_duplicate.scss: -------------------------------------------------------------------------------- 1 | #edd-duplicate-action { 2 | & ~ #publishing-action { 3 | position: relative; 4 | top: -10px; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /assets/images/icons/icon-arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-arrow-up.png -------------------------------------------------------------------------------- /assets/images/icons/icon-megaphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-megaphone.png -------------------------------------------------------------------------------- /assets/images/screenshots/17direct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/17direct.png -------------------------------------------------------------------------------- /assets/images/screenshots/22-logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/22-logs.png -------------------------------------------------------------------------------- /assets/images/screenshots/bundles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/bundles.png -------------------------------------------------------------------------------- /assets/images/icons/icon-arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-arrow-down.png -------------------------------------------------------------------------------- /assets/images/icons/icon-chevron-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/icon-top-products.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-top-products.png -------------------------------------------------------------------------------- /assets/images/screenshots/17checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/17checkout.png -------------------------------------------------------------------------------- /assets/images/screenshots/20-discount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/20-discount.png -------------------------------------------------------------------------------- /assets/images/screenshots/22-quantity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/22-quantity.png -------------------------------------------------------------------------------- /assets/images/screenshots/24-checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/24-checkout.png -------------------------------------------------------------------------------- /assets/images/screenshots/24-export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/24-export.png -------------------------------------------------------------------------------- /assets/images/screenshots/26-customer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/26-customer.png -------------------------------------------------------------------------------- /assets/images/screenshots/26-import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/26-import.png -------------------------------------------------------------------------------- /assets/images/screenshots/26-refund.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/26-refund.png -------------------------------------------------------------------------------- /assets/images/screenshots/customer-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/customer-ui.png -------------------------------------------------------------------------------- /assets/images/screenshots/product-tax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/product-tax.png -------------------------------------------------------------------------------- /assets/images/screenshots/tax-rates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/tax-rates.png -------------------------------------------------------------------------------- /assets/images/ui-icons_21759b_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/ui-icons_21759b_256x240.png -------------------------------------------------------------------------------- /assets/images/ui-icons_333333_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/ui-icons_333333_256x240.png -------------------------------------------------------------------------------- /assets/images/ui-icons_999999_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/ui-icons_999999_256x240.png -------------------------------------------------------------------------------- /assets/images/ui-icons_cc0000_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/ui-icons_cc0000_256x240.png -------------------------------------------------------------------------------- /assets/css/admin/downloads/style.scss: -------------------------------------------------------------------------------- 1 | @import "prices"; 2 | @import "product_settings"; 3 | @import "repeatable_row"; 4 | @import "upload"; 5 | @import "duplicate"; 6 | -------------------------------------------------------------------------------- /assets/css/admin/general/_upgrade.scss: -------------------------------------------------------------------------------- 1 | .edd-pro-upgrade, 2 | .edd-pro-upgrade:hover{ 3 | color: #1da867; 4 | font-weight: 600; 5 | text-decoration: none; 6 | } 7 | -------------------------------------------------------------------------------- /assets/images/icons/icon-new-customers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/icons/icon-new-customers.png -------------------------------------------------------------------------------- /assets/images/promo/edd-25-percent-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/promo/edd-25-percent-off.png -------------------------------------------------------------------------------- /assets/images/screenshots/17quantities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/17quantities.png -------------------------------------------------------------------------------- /assets/images/screenshots/18cart-saving.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/18cart-saving.png -------------------------------------------------------------------------------- /assets/images/screenshots/20-sequential.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/20-sequential.png -------------------------------------------------------------------------------- /assets/images/screenshots/edit-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/edit-download.png -------------------------------------------------------------------------------- /assets/images/screenshots/order-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/order-details.png -------------------------------------------------------------------------------- /assets/images/screenshots/purchase-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/purchase-link.png -------------------------------------------------------------------------------- /assets/images/screenshots/18-button-colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/18-button-colors.png -------------------------------------------------------------------------------- /assets/images/screenshots/product-earnings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/product-earnings.png -------------------------------------------------------------------------------- /assets/images/screenshots/20-register-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/20-register-login.png -------------------------------------------------------------------------------- /assets/images/screenshots/email-template-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/email-template-21.png -------------------------------------------------------------------------------- /assets/images/screenshots/24-category-earnings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/24-category-earnings.png -------------------------------------------------------------------------------- /templates/shortcode-content-cart-button.php: -------------------------------------------------------------------------------- 1 |
2 | get_the_ID() ) ); ?> 3 |
4 | -------------------------------------------------------------------------------- /assets/images/screenshots/20-unlimited-downloads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/20-unlimited-downloads.png -------------------------------------------------------------------------------- /assets/images/screenshots/22-purchased-downloads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/22-purchased-downloads.png -------------------------------------------------------------------------------- /assets/images/screenshots/22-purchased-downloads2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdullahthewebbee/easy-digital-downloads-main/HEAD/assets/images/screenshots/22-purchased-downloads2.png -------------------------------------------------------------------------------- /assets/css/admin/extension-manager.scss: -------------------------------------------------------------------------------- 1 | /* Extension Manager 2 | ------------------------------------------------------------- */ 3 | 4 | @import "../variables/variables"; 5 | @import "extensions/style"; 6 | -------------------------------------------------------------------------------- /languages/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 |
6 |
7 | 8 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/_key.scss: -------------------------------------------------------------------------------- 1 | .edd-extension-manager__key-notice { 2 | background: white; 3 | border: 1px solid $wp-red-50; 4 | border-radius: 4px; 5 | padding: 1em; 6 | 7 | p:first-child { 8 | margin-top: 0; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /vendor/composer/autoload_psr4.php: -------------------------------------------------------------------------------- 1 | array($baseDir . '/src'), 10 | ); 11 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/_features.scss: -------------------------------------------------------------------------------- 1 | .edd-extension-manager__features { 2 | ul { 3 | display: grid; 4 | grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); 5 | } 6 | 7 | .dashicons-yes { 8 | color: #008a20; 9 | margin-right: .25em; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /templates/fonts/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /templates/shortcode-content-image.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 |
7 | 8 | -------------------------------------------------------------------------------- /languages/README.md: -------------------------------------------------------------------------------- 1 | # Easy Digital Downloads i18n # 2 | 3 | To help translate, review, or improve a translation, join our Translations Community at 4 | https://translate.wordpress.org/projects/wp-plugins/easy-digital-downloads 5 | 6 | More info at https://make.wordpress.org/polyglots/ 7 | 8 | -------------------------------------------------------------------------------- /vendor/composer/autoload_classmap.php: -------------------------------------------------------------------------------- 1 | $vendorDir . '/composer/InstalledVersions.php', 10 | ); 11 | -------------------------------------------------------------------------------- /assets/css/admin/general/_item-header.scss: -------------------------------------------------------------------------------- 1 | .edd-item-header-small { 2 | padding-bottom: 20px; 3 | border-bottom: 1px solid #e5e5e5; 4 | display: flex; 5 | justify-content: flex-start; 6 | align-items: center; 7 | gap: 6px; 8 | 9 | span { 10 | font-weight: 600; 11 | font-size: 15px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/_card.scss: -------------------------------------------------------------------------------- 1 | .edd-extension-manager__card { 2 | background-color: $white; 3 | padding: 2em; 4 | margin: 0; 5 | display: flex; 6 | flex-direction: column; 7 | justify-content: space-between; 8 | 9 | &.edd-hidden { 10 | display: none; 11 | } 12 | 13 | .inside & { 14 | padding: 0; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /assets/js/admin/components/taxonomies/index.js: -------------------------------------------------------------------------------- 1 | /* global jQuery */ 2 | 3 | jQuery( document ).ready( function ( $ ) { 4 | if ( $( 'body' ).hasClass( 'taxonomy-download_category' ) || $( 'body' ).hasClass( 'taxonomy-download_tag' ) ) { 5 | $( '.nav-tab-wrapper, .nav-tab-wrapper + br' ).detach().insertAfter( '.wp-header-end' ); 6 | } 7 | } ); 8 | -------------------------------------------------------------------------------- /assets/css/variables/_variables.scss: -------------------------------------------------------------------------------- 1 | @import "~@wordpress/base-styles/colors"; 2 | @import "~@wordpress/base-styles/variables"; 3 | @import "~@wordpress/base-styles/mixins"; 4 | @import "~@wordpress/base-styles/breakpoints"; 5 | @import "~@wordpress/base-styles/animations"; 6 | 7 | @import "colors"; 8 | @import "icons"; 9 | @import "mixins"; 10 | -------------------------------------------------------------------------------- /templates/fonts/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/css/admin/tax-rates/style.scss: -------------------------------------------------------------------------------- 1 | @import "~@wordpress/base-styles/colors"; 2 | @import "~@wordpress/base-styles/variables"; 3 | @import "~@wordpress/base-styles/mixins"; 4 | @import "~@wordpress/base-styles/breakpoints"; 5 | @import "~@wordpress/base-styles/animations"; 6 | @import "../../variables/colors"; 7 | 8 | @import "base"; 9 | @import "add"; 10 | -------------------------------------------------------------------------------- /templates/emails/footer.php: -------------------------------------------------------------------------------- 1 | 14 | 15 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/style.scss: -------------------------------------------------------------------------------- 1 | /* Extension Manager 2 | ------------------------------------------------------------- */ 3 | 4 | @import "bar"; 5 | @import "body"; 6 | @import "buttons"; 7 | @import "card"; 8 | @import "features"; 9 | @import "group"; 10 | @import "images"; 11 | @import "installer"; 12 | @import "key"; 13 | @import "steps"; 14 | @import "variations"; 15 | -------------------------------------------------------------------------------- /templates/emails/body.php: -------------------------------------------------------------------------------- 1 | Settings > Emails 14 | 15 | ?> 16 | {email} 17 | -------------------------------------------------------------------------------- /assets/js/utils/jquery.js: -------------------------------------------------------------------------------- 1 | /* global jQuery */ 2 | 3 | /** 4 | * Safe wrapper for jQuery DOM ready. 5 | * 6 | * This should be used only when a script requires the use of jQuery. 7 | * 8 | * @param {Function} callback Function to call when ready. 9 | */ 10 | export const jQueryReady = function( callback ) { 11 | ( function( $ ) { 12 | $( callback ); 13 | }( jQuery ) ); 14 | }; 15 | -------------------------------------------------------------------------------- /templates/emails/body-default.php: -------------------------------------------------------------------------------- 1 | Settings > Emails 14 | 15 | ?> 16 | {email} 17 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/_steps.scss: -------------------------------------------------------------------------------- 1 | .edd-extension-manager__step { 2 | grid-area: 1/-1; 3 | margin: 0; 4 | 5 | &:not(:first-of-type) { 6 | display: none; 7 | } 8 | 9 | .button { 10 | display: table; 11 | margin: 0 auto; 12 | text-align: center; 13 | white-space: normal; 14 | } 15 | } 16 | 17 | td .edd-extension-manager__step .button { 18 | display: inline-block; 19 | } 20 | -------------------------------------------------------------------------------- /assets/css/admin/forms/_form-row.scss: -------------------------------------------------------------------------------- 1 | .edd-form-row { 2 | display: flex; 3 | flex-wrap: wrap; 4 | gap: 12px; 5 | 6 | &__column { 7 | display: inline-flex; 8 | flex-direction: column; 9 | justify-content: flex-end; 10 | 11 | &.edd-form-group { 12 | margin-bottom: 0; 13 | } 14 | } 15 | 16 | label, 17 | label.edd-form-group__label { 18 | margin-bottom: 8px; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /assets/js/admin/components/dialog/index.js: -------------------------------------------------------------------------------- 1 | jQuery( document ).ready( function ( $ ) { 2 | /** 3 | * If any jQueryUI Dialog instances exist with edd-dialog, 4 | * instantiate them. Each instance will add their own buttons and handlers later. 5 | */ 6 | $('.edd-dialog').dialog({ 7 | autoOpen: false, 8 | modal: true, 9 | draggable: false, 10 | closeOnEscape: true, 11 | }); 12 | } ); 13 | -------------------------------------------------------------------------------- /assets/css/admin/chosen/_results.scss: -------------------------------------------------------------------------------- 1 | 2 | .chosen-container .chosen-results { 3 | color: $wp-text; 4 | position: relative; 5 | overflow-x: hidden; 6 | overflow-y: auto; 7 | margin: 0 4px 4px 0; 8 | padding: 0 0 0 4px; 9 | max-height: 240px; 10 | } 11 | 12 | .chosen-container .chosen-results li.highlighted { 13 | background-image: none; 14 | border-radius: 4px; 15 | color: $white; 16 | } 17 | -------------------------------------------------------------------------------- /assets/js/admin/dashboard/index.js: -------------------------------------------------------------------------------- 1 | jQuery( document ).ready( function( $ ) { 2 | if ( $( '#edd_dashboard_sales' ).length ) { 3 | $.ajax( { 4 | type: 'GET', 5 | data: { 6 | action: 'edd_load_dashboard_widget', 7 | }, 8 | url: ajaxurl, 9 | success: function( response ) { 10 | $( '#edd_dashboard_sales .edd-loading' ).html( response ); 11 | }, 12 | } ); 13 | } 14 | } ); 15 | -------------------------------------------------------------------------------- /includes/admin/views/tmpl-tax-rates-table-row-empty.php: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/images/icons/icon-install.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/css/admin/reports/style.scss: -------------------------------------------------------------------------------- 1 | @import "~@wordpress/base-styles/colors"; 2 | @import "~@wordpress/base-styles/variables"; 3 | @import "~@wordpress/base-styles/mixins"; 4 | @import "~@wordpress/base-styles/breakpoints"; 5 | @import "~@wordpress/base-styles/animations"; 6 | @import "../../variables/colors"; 7 | 8 | @import "filter"; 9 | @import "layout"; 10 | @import "mobile-link"; 11 | @import "tiles"; 12 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/_body.scss: -------------------------------------------------------------------------------- 1 | .edd-extension-manager__body { 2 | display: grid; 3 | gap: 1.5em; 4 | grid-template-rows: auto 1fr; 5 | flex-grow: 1; 6 | 7 | img { 8 | max-width: 100%; 9 | } 10 | 11 | .notice { 12 | max-width: 320px; 13 | } 14 | } 15 | 16 | .edd-extension-manager__title { 17 | line-height: 1.4; 18 | margin: 0 1em 1em 0; 19 | 20 | a { 21 | color: $wp-input-text; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /assets/css/admin/chosen/_edd.scss: -------------------------------------------------------------------------------- 1 | .edd-select-chosen { 2 | width: 100%; 3 | max-width: 300px; 4 | } 5 | 6 | .edd-select-chosen.edd-customer-select { 7 | width: 100% !important; 8 | } 9 | 10 | .edd-select-chosen.edd-time { 11 | width: 55px; 12 | max-width: 55px; 13 | } 14 | 15 | @media screen and (max-width: $break-medium) { 16 | .edd-select-chosen.edd-time { 17 | width: 70px; 18 | max-width: 70px; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /templates/shortcode-content-excerpt.php: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 | 17 |
18 | -------------------------------------------------------------------------------- /includes/gateways/paypal/exceptions/class-api-exception.php: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 | 17 |
18 | -------------------------------------------------------------------------------- /includes/gateways/paypal/exceptions/class-invalid-merchant-details.php: -------------------------------------------------------------------------------- 1 | { 2 | var data = { 3 | 'action': 'edd_recapture_remote_install', 4 | }; 5 | 6 | jQuery.post( ajaxurl, data, function( response ) { 7 | if ( !response.success ) { 8 | 9 | if ( response.data && confirm( response.data.error ) ) { 10 | location.reload(); 11 | return; 12 | } 13 | } 14 | 15 | window.location.href = 'https://recapture.io/register'; 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /includes/admin/views/tmpl-order-no-items.php: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /includes/gateways/paypal/exceptions/class-authentication-exception.php: -------------------------------------------------------------------------------- 1 | { 10 | const products = $( '#edd_products' ); 11 | if ( ! products ) { 12 | return; 13 | } 14 | 15 | /** 16 | * Show/hide conditions based on input value. 17 | */ 18 | products.on( 'change', function () { 19 | $( '#edd-discount-product-conditions' ).toggle( null !== products.val() ); 20 | } ); 21 | } ); 22 | -------------------------------------------------------------------------------- /assets/js/admin/settings/tax-rates/views/table-row-empty.js: -------------------------------------------------------------------------------- 1 | /* global wp */ 2 | 3 | /** 4 | * Empty tax rates table. 5 | */ 6 | const TableRowEmpty = wp.Backbone.View.extend( { 7 | // Insert as a 8 | tagName: 'tr', 9 | 10 | // Set class. 11 | className: 'edd-tax-rate-row edd-tax-rate-row--is-empty', 12 | 13 | // See https://codex.wordpress.org/Javascript_Reference/wp.template 14 | template: wp.template( 'edd-admin-tax-rates-table-row-empty' ), 15 | } ); 16 | 17 | export default TableRowEmpty; 18 | -------------------------------------------------------------------------------- /assets/css/admin/gateways/style.scss: -------------------------------------------------------------------------------- 1 | /* PayPal Connect 2 | -------------------------------------------------------------- */ 3 | .edd-paypal-account-status ul { 4 | margin-left: 25px; 5 | } 6 | .edd-paypal-account-status > li { 7 | margin-bottom: 1em; 8 | } 9 | .edd-paypal-account-status ul:not(.edd-paypal-webhook-events) li { 10 | margin: .25em 0; 11 | } 12 | .edd-paypal-account-status .dashicons-yes { 13 | color: #008a20; 14 | } 15 | .edd-paypal-account-status .dashicons-no { 16 | color: #d63638; 17 | } 18 | -------------------------------------------------------------------------------- /includes/api/v3/Endpoint.php: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | <?php echo get_bloginfo( 'name' ); ?> 19 | 20 | -------------------------------------------------------------------------------- /assets/images/icons/icon-smiley.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/css/admin/reports/_mobile-link.scss: -------------------------------------------------------------------------------- 1 | .edd-mobile-link { 2 | line-height: 32px; 3 | 4 | a { 5 | text-decoration: none; 6 | 7 | &:before, 8 | &:after { 9 | display: inline-block; 10 | -webkit-font-smoothing: antialiased; 11 | font: normal 20px/30px "dashicons"; 12 | vertical-align: top; 13 | margin: 1px 0 0 0; 14 | padding: 0; 15 | } 16 | 17 | &:before { 18 | content: "\f470"; 19 | color: $gray-700; 20 | margin-right: -3px; 21 | } 22 | 23 | &:after { 24 | content: "\f504"; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Admin/SiteHealth/Test.php: -------------------------------------------------------------------------------- 1 | __( 'Easy Digital Downloads', 'easy-digital-downloads' ), 22 | 'color' => 'blue', 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /includes/api/class-edd-api-v1.php: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 |

5 | 6 |

7 | 8 | Click here to send a new activation code.', 'easy-digital-downloads' ), esc_url( $url ) ); ?> 9 |

10 | -------------------------------------------------------------------------------- /assets/js/admin/orders/order-overview/views/order-credits.js: -------------------------------------------------------------------------------- 1 | /* global _ */ 2 | 3 | /** 4 | * Internal dependencies 5 | */ 6 | import { OrderAdjustments } from './order-adjustments.js'; 7 | 8 | /** 9 | * OrderCredits 10 | * 11 | * @since 3.0 12 | * 13 | * @class OrderCredits 14 | * @augments wp.Backbone.View 15 | */ 16 | export const OrderCredits = OrderAdjustments.extend( { 17 | /** 18 | * Returns Credit adjustments. 19 | * 20 | * @since 3.0.0 21 | */ 22 | getAdjustments() { 23 | const { state } = this.options; 24 | 25 | return state.get( 'adjustments' ).getByType( 'credit' ); 26 | }, 27 | } ); 28 | -------------------------------------------------------------------------------- /templates/payment-processing.php: -------------------------------------------------------------------------------- 1 |
2 |

3 | here.', 'easy-digital-downloads' ) ), esc_url( edd_get_success_page_uri() ) ); 6 | ?> 7 |

8 | 9 | 10 |
11 | -------------------------------------------------------------------------------- /assets/css/admin/downloads/_upload.scss: -------------------------------------------------------------------------------- 1 | .edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container { 2 | position: relative; 3 | width: 100%; 4 | 5 | +span:first-child { 6 | width: 100%; 7 | } 8 | } 9 | 10 | .edd_repeatable_upload_field { 11 | padding-right: 32px; 12 | } 13 | 14 | .edd_upload_file button { 15 | background: $wp-gray-0; 16 | border: none; 17 | border-left: 1px solid $wp-border; 18 | padding: 0 4px; 19 | position: absolute; 20 | height: calc(100% - 4px); 21 | overflow: hidden; 22 | top: 2px; 23 | right: 2px; 24 | display: inline-flex; 25 | justify-content: center; 26 | align-items: center; 27 | } 28 | -------------------------------------------------------------------------------- /assets/js/admin/components/tooltips/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Attach tooltips 3 | * 4 | * @param {string} selector 5 | */ 6 | export const edd_attach_tooltips = function( selector ) { 7 | selector.tooltip( { 8 | content: function() { 9 | return $( this ).prop( 'title' ); 10 | }, 11 | tooltipClass: 'edd-ui-tooltip', 12 | position: { 13 | my: 'center top', 14 | at: 'center bottom+10', 15 | collision: 'flipfit', 16 | }, 17 | hide: { 18 | duration: 200, 19 | }, 20 | show: { 21 | duration: 200, 22 | }, 23 | } ); 24 | }; 25 | 26 | jQuery( document ).ready( function( $ ) { 27 | edd_attach_tooltips( $( '.edd-help-tip' ) ); 28 | } ); 29 | -------------------------------------------------------------------------------- /assets/css/admin/tax-rates/_add.scss: -------------------------------------------------------------------------------- 1 | 2 | .edd-tax-rate-table-add { 3 | th select, 4 | th input[type="text"], 5 | th input[type="number"] { 6 | width: 100%; 7 | margin: 0; 8 | padding: 4px; 9 | } 10 | 11 | #tax_rate_region_global { 12 | margin-right: 4px; 13 | margin-bottom: 8px; 14 | } 15 | 16 | 17 | @media screen and (max-width: $break-medium) { 18 | display: block; 19 | 20 | th { 21 | display: block; 22 | } 23 | 24 | .screen-reader-text { 25 | display: block; 26 | width: unset; 27 | clip: unset; 28 | height: unset; 29 | clip-path: unset; 30 | margin: 0 0 12px; 31 | position: relative; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/Admin/Onboarding/Steps/Step.php: -------------------------------------------------------------------------------- 1 | { 14 | /** 15 | * Toggles term content when clicked. 16 | * 17 | * @since unknown 18 | * 19 | * @param {Object} e Click event. 20 | */ 21 | $( document.body ).on( 'click', '.edd_terms_links', function( e ) { 22 | e.preventDefault(); 23 | 24 | const terms = $( this ).parent(); 25 | 26 | terms.prev( '.edd-terms' ).slideToggle(); 27 | terms.find( '.edd_terms_links' ).toggle(); 28 | } ); 29 | } ); 30 | -------------------------------------------------------------------------------- /templates/widget-cart-item.php: -------------------------------------------------------------------------------- 1 |
  • 2 | {item_title} 3 | - {item_quantity} @ ' : ''; ?>{item_amount} - 4 | 5 |
  • 6 | -------------------------------------------------------------------------------- /assets/js/admin/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Internal dependencies. 3 | */ 4 | import './components/date-picker'; 5 | import './components/dialog'; 6 | import './components/chosen'; 7 | import './components/tooltips'; 8 | import './components/vertical-sections'; 9 | import './components/sortable-list'; 10 | import './components/user-search'; 11 | import './components/advanced-filters'; 12 | import './components/taxonomies'; 13 | import './components/location'; 14 | import './components/promos'; 15 | import './components/notifications'; 16 | // Note: This is not common across all admin pages and at some point this code will be moved to a new file that only loads on the orders table page. 17 | import './orders/list-table'; 18 | -------------------------------------------------------------------------------- /assets/css/edd-admin-email-tags.min.css: -------------------------------------------------------------------------------- 1 | .edd-email-tags-filter{margin:-15px -15px 15px;padding:15px;border-bottom:1px solid #ddd;background:#f3f3f3}.edd-email-tags-filter-search{padding:10px;width:100%;font-size:20px}.edd-email-tags-list{margin:0}.edd-email-tags-list-item{margin-bottom:15px}.edd-email-tags-list-item::last-child{margin-bottom:0}.edd-email-tags-list-button{cursor:pointer;color:#666;text-align:left;padding:.8rem;width:100%;background:none;border:1px solid #ddd;border-radius:3px}.edd-email-tags-list-button:hover{background:#fafafa}.edd-email-tags-list-button strong{color:#444;font-size:14px;margin-bottom:8px}.edd-email-tags-list-button code{margin-left:10px}.edd-email-tags-list-button span{display:block;margin-top:10px} -------------------------------------------------------------------------------- /assets/css/edd-admin-email-tags-rtl.min.css: -------------------------------------------------------------------------------- 1 | .edd-email-tags-filter{margin:-15px -15px 15px;padding:15px;border-bottom:1px solid #ddd;background:#f3f3f3}.edd-email-tags-filter-search{padding:10px;width:100%;font-size:20px}.edd-email-tags-list{margin:0}.edd-email-tags-list-item{margin-bottom:15px}.edd-email-tags-list-item::last-child{margin-bottom:0}.edd-email-tags-list-button{cursor:pointer;color:#666;text-align:right;padding:.8rem;width:100%;background:none;border:1px solid #ddd;border-radius:3px}.edd-email-tags-list-button:hover{background:#fafafa}.edd-email-tags-list-button strong{color:#444;font-size:14px;margin-bottom:8px}.edd-email-tags-list-button code{margin-right:10px}.edd-email-tags-list-button span{display:block;margin-top:10px} -------------------------------------------------------------------------------- /src/Admin/Installers/Install_Skin.php: -------------------------------------------------------------------------------- 1 | { 27 | return [ 'discount', 'fee' ].includes( adjustment.get( 'type' ) ); 28 | } 29 | ); 30 | }, 31 | } ); 32 | -------------------------------------------------------------------------------- /assets/css/variables/_colors.scss: -------------------------------------------------------------------------------- 1 | @import "~@wordpress/base-styles/colors"; 2 | @import "~@wordpress/base-styles/colors.native"; 3 | /** 4 | * WordPress Core colors current as of 5.5.1. 5 | */ 6 | $wp-text: $gray-text-min; 7 | $wp-border: #c3c4c7; 8 | 9 | $wp-input-text: #32373c; 10 | $wp-input-border: #7e8993; 11 | 12 | $wp-alternate: #f9f9f9; 13 | $wp-inactive: #999; 14 | 15 | $wp-red-50: #d63638; 16 | $wp-green-30: #00ba37; 17 | $wp-green-50: #008a20; 18 | $wp-yellow-50: #996800; 19 | 20 | $wp-gray-0: $gray-0; 21 | $wp-gray-2: $gray-100; 22 | $wp-gray-5: #dcdcde; 23 | $wp-gray-10: #c3c4c7; 24 | $wp-gray-20: $gray-20; 25 | $wp-gray-40: $gray-40; 26 | $wp-gray-50: $gray-50; 27 | 28 | $buddypress-colors: ( 29 | 'evergreen': #36533f, 30 | 'mint': #4f6d59, 31 | ); 32 | -------------------------------------------------------------------------------- /assets/js/admin/components/date-picker/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Date picker 3 | * 4 | * This juggles a few CSS classes to avoid styling collisions with other 5 | * third-party plugins. 6 | */ 7 | jQuery( document ).ready( function( $ ) { 8 | const edd_datepicker = $( 'input.edd_datepicker' ); 9 | 10 | if ( edd_datepicker.length > 0 ) { 11 | edd_datepicker 12 | 13 | // Disable autocomplete to avoid it covering the calendar 14 | .attr( 'autocomplete', 'off' ) 15 | 16 | // Invoke the datepickers 17 | .datepicker( { 18 | dateFormat: edd_vars.date_picker_format, 19 | beforeShow: function() { 20 | $( '#ui-datepicker-div' ) 21 | .removeClass( 'ui-datepicker' ) 22 | .addClass( 'edd-datepicker' ); 23 | }, 24 | } ); 25 | } 26 | } ); 27 | -------------------------------------------------------------------------------- /includes/admin/views/tmpl-order-subtotal.php: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | {{ data.subtotalCurrency }} 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /includes/admin/views/tmpl-tax-rates-table-meta.php: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /assets/css/admin/downloads/_product_settings.scss: -------------------------------------------------------------------------------- 1 | #edd_product_settings { 2 | 3 | .edd-product-options__title, 4 | .inside strong { 5 | border-top: 1px solid $wp-border; 6 | border-bottom: 1px solid $wp-border; 7 | background-color: $wp-alternate; 8 | display: flex; 9 | font-weight: 600; 10 | margin: 0 -12px 16px; 11 | padding: 8px 12px; 12 | justify-content: space-between; 13 | align-items: center; 14 | } 15 | 16 | .edd-product-options-wrapper:first-of-type .edd-product-options__title, 17 | .inside div:first-child strong { 18 | margin-top: -8px; 19 | } 20 | 21 | .edd-product-options__title .edd-help-tip, 22 | .inside strong .edd-help-tip { 23 | font-size: 20px; 24 | } 25 | 26 | .label--block { 27 | display: block; 28 | margin: 0 0 4px; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /assets/css/admin/chosen/_colors.scss: -------------------------------------------------------------------------------- 1 | 2 | /* WordPress Color Schemes */ 3 | 4 | :root { 5 | @include edd-admin-colors(); 6 | } 7 | 8 | .chosen-container.chosen-container-active .chosen-single, 9 | .chosen-container.chosen-container-active .chosen-choices, 10 | .chosen-with-drop.chosen-dropup .chosen-drop { 11 | border-color: var(--wp-admin-theme-color); 12 | box-shadow: 0 0 0 1px var(--wp-admin-theme-color); 13 | } 14 | 15 | .chosen-with-drop.chosen-dropup .chosen-single, 16 | .chosen-container-active.chosen-dropup .chosen-choices, 17 | .chosen-container .chosen-drop { 18 | border-color: var(--wp-admin-theme-color); 19 | box-shadow: 0 1px 0 1px var(--wp-admin-theme-color); 20 | } 21 | 22 | .chosen-container .chosen-results li.highlighted { 23 | background-color: var(--wp-admin-theme-color); 24 | } 25 | -------------------------------------------------------------------------------- /assets/css/admin/downloads/_prices.scss: -------------------------------------------------------------------------------- 1 | 2 | .edd-custom-price-option { 3 | &-sections-wrap { 4 | display: none; 5 | border-width: 0 1px 1px; 6 | border-style: solid; 7 | border-color: $wp-border; 8 | box-sizing: border-box; 9 | width: 100%; 10 | } 11 | 12 | &-section { 13 | display: block; 14 | padding: 10px 8px; 15 | border-bottom: 1px solid rgba( 222, 222, 222, 0.3 ); 16 | 17 | &-title { 18 | display: block; 19 | font-weight: 600; 20 | padding: 0 0 10px; 21 | } 22 | 23 | &-content { 24 | display: flex; 25 | gap: 12px; 26 | margin-bottom: 6px; 27 | } 28 | 29 | &:last-child { 30 | border-bottom: none; 31 | } 32 | } 33 | } 34 | 35 | .toggle-custom-price-option-section { 36 | color: $wp-gray-40; 37 | 38 | &:hover { 39 | color: $wp-text; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /assets/images/icons/icon-edd-heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /includes/utils/interface-error-logger.php: -------------------------------------------------------------------------------- 1 | { 9 | 10 | const emailSelectSelector = '.edd-order-resend-receipt-email'; 11 | const sendEmailButton = $( '#edd-resend-receipt' ); 12 | const url = new URLSearchParams( sendEmailButton.attr( 'href' ) ); 13 | 14 | $( document.body ).on( 'change', emailSelectSelector, function() { 15 | url.set( 'email', $( this ).val() ); 16 | sendEmailButton.attr( 'href', decodeURIComponent( url.toString() ) ); 17 | } ); 18 | 19 | // trigger initial value to be set on change 20 | $( emailSelectSelector ).trigger( 'change' ); 21 | 22 | // confirm before sending 23 | sendEmailButton.on( 'click', function() { 24 | return confirm( edd_vars.resend_receipt ); 25 | }); 26 | } ); 27 | -------------------------------------------------------------------------------- /includes/reports/data/charts/v2/class-pie-dataset.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /vendor/autoload.php: -------------------------------------------------------------------------------- 1 | 2 |
  • " . edd_currency_filter( edd_format_amount( edd_get_cart_subtotal() ) ); ?>
  • 3 |
  • 4 | 5 |
  • 6 |
  • 7 | -------------------------------------------------------------------------------- /assets/js/admin/settings/tax-rates/views/table-meta.js: -------------------------------------------------------------------------------- 1 | /* global wp, _ */ 2 | 3 | /** 4 | * Output a table header and footer. 5 | */ 6 | const TableMeta = wp.Backbone.View.extend( { 7 | // See https://codex.wordpress.org/Javascript_Reference/wp.template 8 | template: wp.template( 'edd-admin-tax-rates-table-meta' ), 9 | 10 | // Watch events. 11 | events: { 12 | 'change [type="checkbox"]': 'selectAll', 13 | }, 14 | 15 | /** 16 | * Select all items in the collection. 17 | * 18 | * @param {Object} event Event. 19 | */ 20 | selectAll: function( event ) { 21 | const checked = event.target.checked; 22 | 23 | _.each( this.collection.models, ( model ) => { 24 | // Check individual models. 25 | model.set( 'selected', checked ); 26 | 27 | // Add to global selection. 28 | this.collection.selected.push( model.cid ); 29 | } ); 30 | }, 31 | } ); 32 | 33 | export default TableMeta; 34 | -------------------------------------------------------------------------------- /assets/js/admin/reports/charts/index.js: -------------------------------------------------------------------------------- 1 | /* global eddAdminReportsCharts */ 2 | 3 | /** 4 | * Internal dependencies. 5 | */ 6 | import moment from 'moment'; 7 | import { render as lineChartRender } from './line.js'; 8 | import { render as pieChartRender } from './pie.js'; 9 | import { isPieChart } from './utils.js'; 10 | 11 | // Access existing global `edd` variable, or create a new object. 12 | window.edd = window.edd || {}; 13 | 14 | /** 15 | * Render a chart based on config. 16 | * 17 | * This function is attached to the `edd` property attached to the `window`. 18 | * 19 | * @param {Object} config Chart config. 20 | */ 21 | window.edd.renderChart = ( config ) => { 22 | const isPie = isPieChart( config ); 23 | 24 | Chart.defaults.global.pointHitDetectionRadius = 5; 25 | 26 | if ( isPieChart( config ) ) { 27 | pieChartRender( config ); 28 | } else { 29 | lineChartRender( config ); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /src/EventManagement/SubscriberInterface.php: -------------------------------------------------------------------------------- 1 | 'method_name') 24 | * * array('event_name' => array('method_name', $priority)) 25 | * * array('event_name' => array('method_name', $priority, $accepted_args)) 26 | * 27 | * @return array 28 | */ 29 | public static function get_subscribed_events(); 30 | } 31 | -------------------------------------------------------------------------------- /templates/widget-cart.php: -------------------------------------------------------------------------------- 1 | 0 ? '' : ' style="display:none;"'; 8 | ?> 9 |

    >:

    10 | 27 | -------------------------------------------------------------------------------- /assets/js/edd-admin-payments.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=207)}({207:function(e,t){}}); -------------------------------------------------------------------------------- /vendor/composer/installed.php: -------------------------------------------------------------------------------- 1 | array( 3 | 'name' => 'easydigitaldownloads/easy-digital-downloads', 4 | 'pretty_version' => 'dev-main', 5 | 'version' => 'dev-main', 6 | 'reference' => '9e92d10e7a2fcb95ed40fdf3adeeab3884fabf61', 7 | 'type' => 'wordpress-plugin', 8 | 'install_path' => __DIR__ . '/../../', 9 | 'aliases' => array(), 10 | 'dev' => false, 11 | ), 12 | 'versions' => array( 13 | 'easydigitaldownloads/easy-digital-downloads' => array( 14 | 'pretty_version' => 'dev-main', 15 | 'version' => 'dev-main', 16 | 'reference' => '9e92d10e7a2fcb95ed40fdf3adeeab3884fabf61', 17 | 'type' => 'wordpress-plugin', 18 | 'install_path' => __DIR__ . '/../../', 19 | 'aliases' => array(), 20 | 'dev_requirement' => false, 21 | ), 22 | ), 23 | ); 24 | -------------------------------------------------------------------------------- /assets/js/admin/settings/tax-rates/views/region-field.js: -------------------------------------------------------------------------------- 1 | /* global wp, _ */ 2 | 3 | /** 4 | * Internal dependencies. 5 | */ 6 | import { getChosenVars } from 'utils/chosen.js'; 7 | 8 | const RegionField = wp.Backbone.View.extend( { 9 | /** 10 | * Bind passed arguments. 11 | * 12 | * @param {Object} options Extra options passed. 13 | */ 14 | initialize: function( options ) { 15 | _.extend( this, options ); 16 | }, 17 | 18 | /** 19 | * Create a list of options. 20 | */ 21 | render: function() { 22 | if ( this.global ) { 23 | return; 24 | } 25 | 26 | if ( 'nostates' === this.states ) { 27 | this.setElement( '' ); 28 | } else { 29 | this.$el.html( this.states ); 30 | this.$el.find( 'select' ).each( function() { 31 | const el = $( this ); 32 | el.chosen( getChosenVars( el ) ); 33 | } ); 34 | } 35 | }, 36 | } ); 37 | 38 | export default RegionField; 39 | -------------------------------------------------------------------------------- /assets/images/icons/icon-gateways.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /includes/gateways/paypal/webhooks/events/class-payment-capture-denied.php: -------------------------------------------------------------------------------- 1 | get_order_from_capture(); 25 | 26 | edd_update_order_status( $order->id, 'failed' ); 27 | 28 | edd_add_note( array( 29 | 'object_type' => 'order', 30 | 'object_id' => $order->id, 31 | 'content' => __( 'PayPal transaction denied.', 'easy-digital-downloads' ), 32 | ) ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /assets/js/admin/components/sortable-list/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sortables 3 | * 4 | * This makes certain settings sortable, and attempts to stash the results 5 | * in the nearest .edd-order input value. 6 | */ 7 | jQuery( document ).ready( function( $ ) { 8 | const edd_sortables = $( 'ul.edd-sortable-list' ); 9 | 10 | if ( edd_sortables.length > 0 ) { 11 | edd_sortables.sortable( { 12 | axis: 'y', 13 | items: 'li', 14 | cursor: 'move', 15 | tolerance: 'pointer', 16 | containment: 'parent', 17 | distance: 2, 18 | opacity: 0.7, 19 | scroll: true, 20 | 21 | /** 22 | * When sorting stops, assign the value to the previous input. 23 | * This input should be a hidden text field 24 | */ 25 | stop: function() { 26 | const keys = $.map( $( this ).children( 'li' ), function( el ) { 27 | return $( el ).data( 'key' ); 28 | } ); 29 | 30 | $( this ).prev( 'input.edd-order' ).val( keys ); 31 | }, 32 | } ); 33 | } 34 | } ); 35 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/_installer.scss: -------------------------------------------------------------------------------- 1 | .edd-extension-manager__card--installer { 2 | border: 1px solid $wp-gray-5; 3 | border-radius: 3px; 4 | padding: 0; 5 | 6 | > div { 7 | padding: 2em; 8 | 9 | &:not(:last-child) { 10 | border-bottom: 1px solid $gray-200; 11 | } 12 | } 13 | 14 | .notice { 15 | margin: 0 -1em !important; 16 | 17 | &:not(:last-child) { 18 | margin-bottom: 1em; 19 | } 20 | } 21 | 22 | .edd-extension-manager__body { 23 | grid-template-columns: 80px 1fr; 24 | grid-template-rows: unset; 25 | position: relative; 26 | 27 | p:last-child { 28 | margin-bottom: 0; 29 | } 30 | } 31 | 32 | .edd-extension-manager__actions { 33 | background: $wp-alternate; 34 | display: flex; 35 | justify-content: space-between; 36 | align-items: center; 37 | padding: 1em 2em; 38 | 39 | > *:only-child { 40 | margin-left: auto; 41 | } 42 | } 43 | 44 | .edd-extension-manager__status { 45 | font-weight: 600; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Admin/SiteHealth/Tests.php: -------------------------------------------------------------------------------- 1 | 'add_tests', 22 | ); 23 | } 24 | 25 | /** 26 | * Register custom tests for EDD. 27 | * 28 | * @since 3.1.2 29 | * @param array $tests 30 | * @return array 31 | */ 32 | public function add_tests( $tests ) { 33 | $direct = new Direct(); 34 | $direct_tests = $direct->get(); 35 | if ( ! empty( $direct_tests ) ) { 36 | $tests['direct'] = array_merge( $tests['direct'], $direct_tests ); 37 | } 38 | 39 | return $tests; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /includes/database/rows/class-log.php: -------------------------------------------------------------------------------- 1 | ( 40 | this.views.add( 41 | new OrderRefund( { 42 | ...this.options, 43 | model, 44 | } ) 45 | ) 46 | ) ); 47 | }, 48 | } ); 49 | -------------------------------------------------------------------------------- /includes/database/rows/class-note.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /includes/database/rows/class-customer-email-address.php: -------------------------------------------------------------------------------- 1 | { 20 | if ( ! el instanceof jQuery ) { 21 | el = jQuery( el ); 22 | } 23 | 24 | let inputVars = chosenVars; 25 | 26 | // Ensure 29 | 30 | -------------------------------------------------------------------------------- /includes/reports/data/class-tile-endpoint.php: -------------------------------------------------------------------------------- 1 | get_id() ) . '" class="' . esc_attr( implode( ' ', $classnames ) ) . '">'; 41 | parent::display(); 42 | echo ''; 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /vendor/composer/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) Nils Adermann, Jordi Boggiano 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is furnished 9 | to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | 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 | 22 | -------------------------------------------------------------------------------- /assets/images/icons/icon-email-marketing.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/js/admin/settings/email-tags/utils.js: -------------------------------------------------------------------------------- 1 | /* global _ */ 2 | 3 | /** 4 | * Filters an item list given a search term. 5 | * 6 | * @param {Array} items Item list 7 | * @param {string} searchTerm Search term. 8 | * 9 | * @return {Array} Filtered item list. 10 | */ 11 | export const searchItems = function( items, searchTerm ) { 12 | const normalizedSearchTerm = normalizeTerm( searchTerm ); 13 | 14 | const matchSearch = function( string ) { 15 | return normalizeTerm( string ).indexOf( normalizedSearchTerm ) !== -1; 16 | }; 17 | 18 | return _.filter( items, function( item ) { 19 | return matchSearch( item.title ) || _.some( item.keywords, matchSearch ); 20 | } ); 21 | }; 22 | 23 | /** 24 | * Converts the search term into a normalized term. 25 | * 26 | * @param {string} term The search term to normalize. 27 | * 28 | * @return {string} The normalized search term. 29 | */ 30 | export const normalizeTerm = function( term ) { 31 | // Lowercase. 32 | // Input: "MEDIA" 33 | term = term.toLowerCase(); 34 | 35 | // Strip leading and trailing whitespace. 36 | // Input: " media " 37 | term = term.trim(); 38 | 39 | return term; 40 | }; 41 | -------------------------------------------------------------------------------- /assets/js/admin/orders/order-overview/views/no-order-items.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Internal dependencies 3 | */ 4 | import { Base } from './base.js'; 5 | 6 | /** 7 | * NoOrderItems 8 | * 9 | * @since 3.0 10 | * 11 | * @class NoOrderItems 12 | * @augments wp.Backbone.View 13 | */ 14 | export const NoOrderItems = wp.Backbone.View.extend( { 15 | /** 16 | * @since 3.0 17 | */ 18 | tagName: 'tr', 19 | 20 | /** 21 | * @since 3.0 22 | */ 23 | template: wp.template( 'edd-admin-order-no-items' ), 24 | 25 | /** 26 | * Prepares data to be used in `render` method. 27 | * 28 | * @since 3.0 29 | * 30 | * @see wp.Backbone.View 31 | * @see https://github.com/WordPress/WordPress/blob/master/wp-includes/js/wp-backbone.js 32 | * 33 | * @return {Object} The data for this view. 34 | */ 35 | prepare() { 36 | const { model, options } = this; 37 | const { state } = this.options; 38 | 39 | // Determine column offset -- using cart quantities requires an extra column. 40 | const colspan = true === state.get( 'hasQuantity' ) ? 4 : 3; 41 | 42 | return { 43 | ...Base.prototype.prepare.apply( this, arguments ), 44 | 45 | config: { 46 | colspan, 47 | }, 48 | }; 49 | }, 50 | } ); 51 | -------------------------------------------------------------------------------- /includes/admin/views/tmpl-tax-rates-table-bulk-actions.php: -------------------------------------------------------------------------------- 1 | 13 | 14 |
    15 | 16 |
    17 | 22 | 23 | 24 |
    25 | 26 |
    27 | 31 |
    32 | 33 |
    34 | -------------------------------------------------------------------------------- /assets/js/edd-admin-dashboard.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=184)}({1:function(e,t){e.exports=jQuery},184:function(e,t,n){(function(e){e(document).ready((function(e){e("#edd_dashboard_sales").length&&e.ajax({type:"GET",data:{action:"edd_load_dashboard_widget"},url:ajaxurl,success:function(t){e("#edd_dashboard_sales .edd-loading").html(t)}})}))}).call(this,n(1))}}); -------------------------------------------------------------------------------- /src/Admin/Extensions/Menu.php: -------------------------------------------------------------------------------- 1 | 11 | array ( 12 | 'EDD\\' => 4, 13 | ), 14 | ); 15 | 16 | public static $prefixDirsPsr4 = array ( 17 | 'EDD\\' => 18 | array ( 19 | 0 => __DIR__ . '/../..' . '/src', 20 | ), 21 | ); 22 | 23 | public static $classMap = array ( 24 | 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 25 | ); 26 | 27 | public static function getInitializer(ClassLoader $loader) 28 | { 29 | return \Closure::bind(function () use ($loader) { 30 | $loader->prefixLengthsPsr4 = ComposerStaticInita20eaf829aab141060a311bcab1d59b6::$prefixLengthsPsr4; 31 | $loader->prefixDirsPsr4 = ComposerStaticInita20eaf829aab141060a311bcab1d59b6::$prefixDirsPsr4; 32 | $loader->classMap = ComposerStaticInita20eaf829aab141060a311bcab1d59b6::$classMap; 33 | 34 | }, null, ClassLoader::class); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /includes/template-actions.php: -------------------------------------------------------------------------------- 1 | ' . esc_html__( 'You need to log in to edit your profile.', 'easy-digital-downloads' ) . '

    '; 20 | echo edd_login_form(); // WPCS: XSS ok. 21 | } 22 | add_action( 'edd_profile_editor_logged_out', 'edd_profile_editor_logged_out' ); 23 | 24 | /** 25 | * Output a message on the login form when a user is already logged in. 26 | * 27 | * This remains mainly for backwards compatibility. 28 | * 29 | * @since 2.8 30 | */ 31 | function edd_login_form_logged_in() { 32 | echo '

    ' . esc_html__( 'You are already logged in', 'easy-digital-downloads' ) . '

    '; 33 | } 34 | add_action( 'edd_login_form_logged_in', 'edd_login_form_logged_in' ); -------------------------------------------------------------------------------- /assets/js/admin/settings/tax-rates/index.js: -------------------------------------------------------------------------------- 1 | /* global _, eddTaxRates */ 2 | 3 | /** 4 | * Internal dependencies. 5 | */ 6 | import TaxRate from './models/tax-rate.js'; 7 | import TaxRates from './collections/tax-rates.js'; 8 | import Manager from './views/manager.js'; 9 | import { jQueryReady } from 'utils/jquery.js'; 10 | 11 | /** 12 | * DOM ready. 13 | */ 14 | jQueryReady( () => { 15 | // Show notice if taxes are not enabled. 16 | const noticeEl = document.getElementById( 'edd-tax-disabled-notice' ); 17 | 18 | if ( noticeEl ) { 19 | noticeEl.classList.add( 'notice' ); 20 | noticeEl.classList.add( 'notice-warning' ); 21 | } 22 | 23 | // Start manager with a blank collection. 24 | const manager = new Manager( { 25 | collection: new TaxRates(), 26 | } ); 27 | 28 | const rates = []; 29 | 30 | // Normalize rate data. 31 | _.each( eddTaxRates.rates, ( rate ) => rates.push( { 32 | id: rate.id, 33 | country: rate.name, 34 | region: rate.description, 35 | global: 'country' === rate.scope, 36 | amount: rate.amount, 37 | status: rate.status, 38 | } ) ); 39 | 40 | // Add initial rates. 41 | manager.collection.set( rates, { 42 | silent: true, 43 | } ); 44 | 45 | // Render manager. 46 | manager.render(); 47 | } ); 48 | -------------------------------------------------------------------------------- /assets/js/admin/settings/tax-rates/views/table.js: -------------------------------------------------------------------------------- 1 | /* global wp */ 2 | 3 | /** 4 | * Internal dependencies. 5 | */ 6 | import TableMeta from './table-meta.js'; 7 | import TableRows from './table-rows.js'; 8 | import TableAdd from './table-add.js'; 9 | 10 | /** 11 | * Manage the tax rate rows in a table. 12 | */ 13 | const Table = wp.Backbone.View.extend( { 14 | // Render as a tag. 15 | tagName: 'table', 16 | 17 | // Set class. 18 | className: 'wp-list-table widefat fixed tax-rates', 19 | 20 | // Set ID. 21 | id: 'edd_tax_rates', 22 | 23 | /** 24 | * Output a table with a header, body, and footer. 25 | */ 26 | render: function() { 27 | this.views.add( new TableMeta( { 28 | tagName: 'thead', 29 | collection: this.collection, 30 | } ) ); 31 | 32 | this.views.add( new TableRows( { 33 | collection: this.collection, 34 | } ) ); 35 | 36 | this.views.add( new TableAdd( { 37 | collection: this.collection, 38 | } ) ); 39 | 40 | this.views.add( new TableMeta( { 41 | tagName: 'tfoot', 42 | collection: this.collection, 43 | } ) ); 44 | 45 | // Trigger the `filtered` action to show/hide rows accordingly 46 | this.collection.trigger( 'filtered' ); 47 | }, 48 | } ); 49 | 50 | export default Table; 51 | -------------------------------------------------------------------------------- /includes/orders/functions/ui.php: -------------------------------------------------------------------------------- 1 | add_menu( array( 35 | 'id' => 'new-order', 36 | 'title' => __( 'Order', 'easy-digital-downloads' ), 37 | 'parent' => 'new-content', 38 | 'href' => edd_get_admin_url( array( 39 | 'page' => 'edd-payment-history', 40 | 'view' => 'add-order', 41 | ) ), 42 | ) ); 43 | } 44 | add_action( 'admin_bar_menu', 'edd_add_new_order_to_wp_admin_bar', 99 ); 45 | -------------------------------------------------------------------------------- /includes/admin/views/tmpl-order-copy-download-link.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
    14 | 15 | 16 |

    17 | 20 | 21 | <# if ( false === data.link ) { #> 22 | 23 | <# } else if ( '' === data.link ) { #> 24 | 25 | <# } else { #> 26 | 27 | <# } #> 28 |

    29 | 30 |

    31 | 37 |

    38 | 39 |
    40 | -------------------------------------------------------------------------------- /vendor/composer/autoload_real.php: -------------------------------------------------------------------------------- 1 | register(true); 33 | 34 | return $loader; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /assets/js/edd-admin-discounts.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=185)}({1:function(t,e){t.exports=jQuery},185:function(t,e,n){"use strict";n.r(e),function(t){var e=n(4);Object(e.a)((function(){var e=t("#edd_products");e&&e.on("change",(function(){t("#edd-discount-product-conditions").toggle(null!==e.val())}))}))}.call(this,n(1))},4:function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return r}));var r=function(e){t(e)}}).call(this,n(1))}}); -------------------------------------------------------------------------------- /assets/css/admin/settings/style.scss: -------------------------------------------------------------------------------- 1 | @import "../../variables/variables"; 2 | @import 'licenses'; 3 | 4 | .edd-settings-content { 5 | max-width: $break-huge; 6 | } 7 | 8 | .edd-settings-colors, 9 | .edd-settings-color { 10 | display: flex; 11 | flex-wrap: wrap; 12 | gap: 1em; 13 | } 14 | 15 | .edd-settings-color { 16 | flex-direction: column; 17 | } 18 | 19 | .edd-upload-button-wrapper { 20 | width: 100%; 21 | display: flex; 22 | gap: 5px; 23 | } 24 | 25 | .edd-upload-button-wrapper button.edd_settings_upload_button { 26 | margin-bottom: 0; 27 | } 28 | 29 | #edd-payment-gateways a.button.edd-settings__button-settings { 30 | position: absolute; 31 | right: 2em; 32 | background-image: $icon-settings; 33 | background-size: 1em; 34 | background-repeat: no-repeat; 35 | background-position: center; 36 | min-height: unset; 37 | height: 1.5em; 38 | width: 1.5em; 39 | border: none; 40 | background-color: $wp-alternate; 41 | 42 | &:hover, 43 | &:active { 44 | background-image: $icon-settings; 45 | background-size: 1em; 46 | background-repeat: no-repeat; 47 | background-position: center; 48 | } 49 | 50 | .edd-plugin__active & { 51 | display: block; 52 | } 53 | } 54 | 55 | .edd-settings__list--disc { 56 | list-style: disc; 57 | list-style-position: inside; 58 | } 59 | -------------------------------------------------------------------------------- /includes/admin/reporting/class-reports-sections.php: -------------------------------------------------------------------------------- 1 | use_js ) 31 | ? ' use-js' 32 | : ''; 33 | 34 | $role = $this->use_js ? 'tablist' : 'menu'; 35 | ?> 36 |
    37 | 38 |
    39 | 42 | 43 |
    44 | get_all_section_contents(); ?> 45 |
    46 |
    47 |
    48 |
    49 | use_js ) 30 | ? ' use-js' 31 | : ''; 32 | $role = $this->use_js ? 'tablist' : 'menu'; 33 | ?> 34 | 35 |
    36 |
    37 | 40 | 41 |
    42 | get_all_section_contents(); ?> 43 |
    44 |
    45 |
    46 |
    47 | 48 | input{max-width:250px!important}.edd-pass-handler__control+.notice{max-width:400px;margin-top:1em}.edd-pass-handler__control .button{margin:0}.edd-pass-handler__loading{display:flex;align-items:center;gap:.5em}.edd-pass-handler__loading:before{background:none;display:block;animation:edd-spinning 1.5s linear infinite;animation-play-state:inherit;border:2px solid #7e8993;border-bottom-color:#f9f9f9;border-radius:100%;content:"";width:12px;height:12px;transform:translate3d(-50%,-50%,0);will-change:transform}.edd-pass-handler__verifying-wrap{display:flex;position:fixed;left:36px;right:0;top:0;bottom:0;background:rgba(0,0,0,.5);justify-content:center;align-items:center;z-index:1}.edd-pass-handler__verifying-wrap p{background:#fff;border:1px solid #7e8993;border-radius:4px;padding:2em}@media only screen and (min-width:960px){.wp-admin:not(.folded) .edd-pass-handler__verifying-wrap{left:160px}}@media only screen and (max-width:782px){.edd-pass-handler__verifying-wrap{left:0}}.edd-pass-handler__verifying ul#adminmenu #menu-posts-download ul.wp-submenu li.current a:before{border-right-color:#787878}.edd-pass-handler__actions{display:flex;gap:4px} -------------------------------------------------------------------------------- /includes/theme-compatibility.php: -------------------------------------------------------------------------------- 1 | get_lite_providers() ); 20 | } 21 | 22 | /** 23 | * Gets the admin service providers. 24 | * 25 | * @since 3.1.1 26 | * @return array 27 | */ 28 | protected function get_admin_providers() { 29 | return array_merge( parent::get_admin_providers(), $this->get_lite_admin_providers() ); 30 | } 31 | 32 | /** 33 | * Gets the lite service providers. 34 | * 35 | * @since 3.1.1 36 | * @return array 37 | */ 38 | private function get_lite_providers() { 39 | return array( 40 | new Admin\PassHandler\Connect( $this->pass_handler ), 41 | ); 42 | } 43 | 44 | /** 45 | * Gets the lite admin providers. 46 | * 47 | * @since 3.1.1 48 | * @return array 49 | */ 50 | private function get_lite_admin_providers() { 51 | if ( ! is_admin() ) { 52 | return array(); 53 | } 54 | 55 | return array( 56 | new Admin\Menu(), 57 | new Admin\PassHandler\Pointer(), 58 | ); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /assets/css/edd-admin-pass-handler-rtl.min.css: -------------------------------------------------------------------------------- 1 | .edd-pass-handler__description{display:-ms-grid;display:grid;gap:1em;margin-bottom:1em}.edd-pass-handler__control{display:flex;gap:4px;flex-wrap:wrap}.edd-pass-handler__control>input{max-width:250px!important}.edd-pass-handler__control+.notice{max-width:400px;margin-top:1em}.edd-pass-handler__control .button{margin:0}.edd-pass-handler__loading{display:flex;align-items:center;gap:.5em}.edd-pass-handler__loading:before{background:none;display:block;animation:edd-spinning 1.5s linear infinite;animation-play-state:inherit;border:2px solid #7e8993;border-bottom-color:#f9f9f9;border-radius:100%;content:"";width:12px;height:12px;transform:translate3d(50%,-50%,0);will-change:transform}.edd-pass-handler__verifying-wrap{display:flex;position:fixed;right:36px;left:0;top:0;bottom:0;background:rgba(0,0,0,.5);justify-content:center;align-items:center;z-index:1}.edd-pass-handler__verifying-wrap p{background:#fff;border:1px solid #7e8993;border-radius:4px;padding:2em}@media only screen and (min-width:960px){.wp-admin:not(.folded) .edd-pass-handler__verifying-wrap{right:160px}}@media only screen and (max-width:782px){.edd-pass-handler__verifying-wrap{right:0}}.edd-pass-handler__verifying ul#adminmenu #menu-posts-download ul.wp-submenu li.current a:before{border-left-color:#787878}.edd-pass-handler__actions{display:flex;gap:4px} -------------------------------------------------------------------------------- /assets/css/admin/email-tags.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * EDD Admin CSS 3 | * 4 | * @package EDD 5 | * @subpackage Admin Email Tags CSS 6 | * @copyright Copyright (c) 2015, Pippin Williamson 7 | * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License 8 | */ 9 | 10 | .edd-email-tags-filter { 11 | margin: -15px -15px 15px; 12 | padding: 15px; 13 | border-bottom: 1px solid #ddd; 14 | background: #f3f3f3; 15 | } 16 | 17 | .edd-email-tags-filter-search { 18 | padding: 10px; 19 | width: 100%; 20 | font-size: 20px; 21 | } 22 | 23 | .edd-email-tags-list { 24 | margin: 0; 25 | } 26 | 27 | .edd-email-tags-list-item { 28 | margin-bottom: 15px; 29 | } 30 | 31 | .edd-email-tags-list-item::last-child { 32 | margin-bottom: 0; 33 | } 34 | 35 | .edd-email-tags-list-button { 36 | cursor: pointer; 37 | color: #666; 38 | text-align: left; 39 | padding: 0.8rem; 40 | width: 100%; 41 | background: none; 42 | border: 1px solid #ddd; 43 | border-radius: 3px; 44 | } 45 | 46 | .edd-email-tags-list-button:hover { 47 | background: #fafafa; 48 | } 49 | 50 | .edd-email-tags-list-button strong { 51 | color: #444; 52 | font-size: 14px; 53 | margin-bottom: 8px; 54 | } 55 | 56 | .edd-email-tags-list-button code { 57 | margin-left: 10px; 58 | } 59 | 60 | .edd-email-tags-list-button span { 61 | display: block; 62 | margin-top: 10px; 63 | } -------------------------------------------------------------------------------- /src/Admin/SiteHealth/Gateways.php: -------------------------------------------------------------------------------- 1 | __( 'Easy Digital Downloads — Gateways', 'easy-digital-downloads' ), 26 | 'fields' => $this->get_gateways(), 27 | ); 28 | } 29 | 30 | /** 31 | * Gets the gateways data. 32 | * 33 | * @since 3.1.2 34 | */ 35 | private function get_gateways() { 36 | $all_gateways = edd_get_payment_gateways(); 37 | $gateways = array(); 38 | 39 | if ( ! empty( $all_gateways ) ) { 40 | 41 | $default_gateway = edd_get_default_gateway(); 42 | 43 | foreach ( $all_gateways as $key => $gateway ) { 44 | $gateways[ $key ] = array( 45 | 'label' => $gateway['admin_label'], 46 | 'value' => edd_is_gateway_active( $key ) ? 'Active' : 'Inactive', 47 | ); 48 | 49 | if ( $default_gateway === $key ) { 50 | $gateways[ $key ]['value'] .= ' (Default)'; 51 | } 52 | } 53 | } 54 | 55 | return $gateways; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /includes/mime-types.php: -------------------------------------------------------------------------------- 1 | __( 'Easy Digital Downloads — Customized Templates', 'easy-digital-downloads' ), 27 | 'fields' => $this->get_templates(), 28 | ); 29 | } 30 | 31 | /** 32 | * Gets the customized templates. 33 | * 34 | * @since 3.1.2 35 | * @return array 36 | */ 37 | private function get_templates() { 38 | $customized_template_files = edd_get_theme_edd_templates(); 39 | $templates = array(); 40 | if ( empty( $customized_template_files ) ) { 41 | $templates['empty'] = array( 42 | 'label' => '', 43 | 'value' => 'No custom templates found.', 44 | ); 45 | } else { 46 | foreach ( $customized_template_files as $customized_template_file ) { 47 | $templates[] = array( 48 | 'label' => '', 49 | 'value' => $customized_template_file, 50 | ); 51 | } 52 | } 53 | 54 | return $templates; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /includes/admin/admin-footer.php: -------------------------------------------------------------------------------- 1 | Easy Digital Downloads! Please rate us on WordPress.org', 'easy-digital-downloads' ), 30 | 'https://easydigitaldownloads.com', 31 | 'https://wordpress.org/support/plugin/easy-digital-downloads/reviews/?rate=5#new-post' 32 | ); 33 | 34 | return str_replace( '', '', $footer_text ) . ' | ' . $rate_text . ''; 35 | } else { 36 | return $footer_text; 37 | } 38 | } 39 | add_filter( 'admin_footer_text', 'edd_admin_rate_us' ); 40 | -------------------------------------------------------------------------------- /src/Admin/Settings/Tabs/Marketing.php: -------------------------------------------------------------------------------- 1 | array( 34 | 'recapture' => array( 35 | 'id' => 'recapture', 36 | 'name' => __( 'Abandoned Cart Recovery', 'easy-digital-downloads' ), 37 | 'desc' => '', 38 | 'type' => 'recapture', 39 | ), 40 | 'allow_multiple_discounts' => array( 41 | 'id' => 'allow_multiple_discounts', 42 | 'name' => __( 'Multiple Discounts', 'easy-digital-downloads' ), 43 | 'desc' => __( 'Allow customers to use multiple discounts on the same purchase?', 'easy-digital-downloads' ), 44 | 'type' => 'checkbox', 45 | ), 46 | ), 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /assets/js/admin/orders/order-overview/views/order-refund.js: -------------------------------------------------------------------------------- 1 | /* global wp */ 2 | 3 | /** 4 | * OrderRefund 5 | * 6 | * @since 3.0 7 | * 8 | * @class OrderRefund 9 | * @augments wp.Backbone.View 10 | */ 11 | export const OrderRefund = wp.Backbone.View.extend( { 12 | /** 13 | * @since 3.0 14 | */ 15 | template: wp.template( 'edd-admin-order-refund' ), 16 | 17 | /** 18 | * @since 3.0 19 | */ 20 | tagName: 'tr', 21 | 22 | /** 23 | * @since 3.0 24 | */ 25 | className: 'is-expanded', 26 | 27 | /** 28 | * Prepares data to be used in `render` method. 29 | * 30 | * @since 3.0 31 | * 32 | * @see wp.Backbone.View 33 | * @see https://github.com/WordPress/WordPress/blob/master/wp-includes/js/wp-backbone.js 34 | * 35 | * @return {Object} The data for this view. 36 | */ 37 | prepare() { 38 | const { model, options } = this; 39 | const { state } = options; 40 | 41 | const { currency } = state.get( 'formatters' ); 42 | 43 | // Determine column offset -- using cart quantities requires an extra column. 44 | const colspan = true === state.get( 'hasQuantity' ) ? 2 : 1; 45 | 46 | return { 47 | config: { 48 | colspan, 49 | }, 50 | 51 | id: model.get( 'id' ), 52 | number: model.get( 'number' ), 53 | dateCreated: model.get( 'dateCreatedi18n' ), 54 | totalCurrency: currency.format( model.get( 'total' ) ), 55 | }; 56 | }, 57 | } ); 58 | -------------------------------------------------------------------------------- /includes/adjustments/class-tax-rate.php: -------------------------------------------------------------------------------- 1 | country = $this->name; 65 | $this->region = $this->description; 66 | } 67 | } -------------------------------------------------------------------------------- /assets/js/edd-admin-notices.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=227)}({1:function(e,t){e.exports=jQuery},227:function(e,t,n){(function(e){!function(e,t){"use strict";t("#edd-disable-debug-log").on("click",(function(e){e.preventDefault(),t(this).attr("disabled",!0);var n=t("#edd-debug-log-notice");t.ajax({type:"GET",data:{action:"edd_disable_debugging",nonce:t("#edd_debug_log_delete").val()},url:ajaxurl,success:function(e){n.empty().append(e.data),setTimeout((function(){n.slideUp()}),3e3)}}).fail((function(e){n.empty().append(e.responseJSON.data)}))}))}(document,e)}).call(this,n(1))}}); -------------------------------------------------------------------------------- /includes/admin/views/tmpl-tax-rates-table-add.php: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 16 | 24 | 25 | 34 | 35 | 39 | 40 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /includes/reports/exceptions/class-invalid-parameter.php: -------------------------------------------------------------------------------- 1 | ' + label + ''; 4 | }; 5 | 6 | export var eddLegendFormatterSales = function( label, series ) { 7 | const slug = label.toLowerCase().replace( /\s/g, '-' ), 8 | color = '
    ', 9 | value = '
    ' + label + ': ' + Math.round( series.percent ) + '% (' + eddFormatNumber( series.data[ 0 ][ 1 ] ) + ')
    ', 10 | item = '
    ' + color + value + '
    '; 11 | 12 | jQuery( '#edd-pie-legend-' + series.edd_vars.id ).append( item ); 13 | 14 | return item; 15 | }; 16 | 17 | export var eddLegendFormatterEarnings = function( label, series ) { 18 | const slug = label.toLowerCase().replace( /\s/g, '-' ), 19 | color = '
    ', 20 | value = '
    ' + label + ': ' + Math.round( series.percent ) + '% (' + eddFormatCurrency( series.data[ 0 ][ 1 ] ) + ')
    ', 21 | item = '
    ' + color + value + '
    '; 22 | 23 | jQuery( '#edd-pie-legend-' + series.edd_vars.id ).append( item ); 24 | 25 | return item; 26 | }; 27 | -------------------------------------------------------------------------------- /src/Admin/Onboarding/Tools.php: -------------------------------------------------------------------------------- 1 | 'restart_onboarding', 22 | ); 23 | } 24 | 25 | /** 26 | * Adds a "tool" to allow users to restart the onboarding wizard. 27 | * 28 | * @since 3.1.1 29 | * @return void 30 | */ 31 | public function restart_onboarding() { 32 | ?> 33 |
    34 |

    35 |
    36 |

    37 | 38 |
    39 |
    40 | states ) { 27 | $this->states = include EDD_PLUGIN_DIR . 'i18n/states.php'; 28 | } 29 | 30 | if ( $country_code ) { 31 | return array_key_exists( $country_code, $this->states ) ? $this->states[ $country_code ] : array(); 32 | } 33 | 34 | return $this->states; 35 | } 36 | 37 | /** 38 | * Given a country and state code, return the state name. 39 | * 40 | * @since 3.1.4 41 | * @param string $country_code The ISO Code for the country 42 | * @param string $state_code The ISO Code for the state 43 | * 44 | * @return string 45 | */ 46 | public function get_state_name( $country_code = '', $state_code = '' ) { 47 | if ( empty( $state_code ) ) { 48 | return $state_code; 49 | } 50 | $states = $this->get_states( $country_code ); 51 | 52 | return array_key_exists( $state_code, $states ) ? $states[ $state_code ] : $state_code; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /includes/admin/reporting/views/export-downloads.php: -------------------------------------------------------------------------------- 1 |
    2 |

    5 |
    6 |

    9 |
    10 | 11 | html->product_dropdown( 12 | array( 13 | 'name' => 'download_id', 14 | 'id' => 'edd_download_export_download', 15 | 'chosen' => true, 16 | /* translators: the plural post type label */ 17 | 'placeholder' => sprintf( __( 'All %s', 'easy-digital-downloads' ), edd_get_label_plural() ), 18 | ) 19 | ); 20 | ?> 21 | 22 | 23 | 24 | 25 |
    26 |
    27 | -------------------------------------------------------------------------------- /includes/database/tables/class-log-meta.php: -------------------------------------------------------------------------------- 1 | schema = "meta_id bigint(20) unsigned NOT NULL auto_increment, 53 | edd_log_id bigint(20) unsigned NOT NULL default '0', 54 | meta_key varchar(255) DEFAULT NULL, 55 | meta_value longtext DEFAULT NULL, 56 | PRIMARY KEY (meta_id), 57 | KEY edd_log_id (edd_log_id), 58 | KEY meta_key (meta_key({$max_index_length}))"; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /includes/database/tables/class-note-meta.php: -------------------------------------------------------------------------------- 1 | schema = "meta_id bigint(20) unsigned NOT NULL auto_increment, 53 | edd_note_id bigint(20) unsigned NOT NULL default '0', 54 | meta_key varchar(255) DEFAULT NULL, 55 | meta_value longtext DEFAULT NULL, 56 | PRIMARY KEY (meta_id), 57 | KEY edd_note_id (edd_note_id), 58 | KEY meta_key (meta_key({$max_index_length}))"; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /includes/database/tables/class-order-meta.php: -------------------------------------------------------------------------------- 1 | schema = "meta_id bigint(20) unsigned NOT NULL auto_increment, 53 | edd_order_id bigint(20) unsigned NOT NULL default '0', 54 | meta_key varchar(255) DEFAULT NULL, 55 | meta_value longtext DEFAULT NULL, 56 | PRIMARY KEY (meta_id), 57 | KEY edd_order_id (edd_order_id), 58 | KEY meta_key (meta_key({$max_index_length}))"; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /includes/database/tables/class-order-item-meta.php: -------------------------------------------------------------------------------- 1 | schema = "meta_id bigint(20) unsigned NOT NULL auto_increment, 53 | edd_order_item_id bigint(20) unsigned NOT NULL default '0', 54 | meta_key varchar(255) DEFAULT NULL, 55 | meta_value longtext DEFAULT NULL, 56 | PRIMARY KEY (meta_id), 57 | KEY edd_order_item_id (edd_order_item_id), 58 | KEY meta_key (meta_key({$max_index_length}))"; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /assets/js/admin/orders/order-overview/views/overview.js: -------------------------------------------------------------------------------- 1 | /** global wp */ 2 | 3 | /** 4 | * Internal dependencies 5 | */ 6 | import { Summary } from './summary.js'; 7 | import { Actions } from './actions.js'; 8 | 9 | /** 10 | * Overview 11 | * 12 | * @since 3.0 13 | * 14 | * @class Overview 15 | * @augments wp.Backbone.View 16 | */ 17 | export const Overview = wp.Backbone.View.extend( { 18 | /** 19 | * @since 3.0 20 | */ 21 | el: '#edd-order-overview', 22 | 23 | /** 24 | * @since 3.0 25 | */ 26 | events: { 27 | 'click .toggle-row': 'onToggleRow', 28 | }, 29 | 30 | /** 31 | * Renders the view. 32 | * 33 | * @since 3.0 34 | * 35 | * @return {Overview} Current view. 36 | */ 37 | render() { 38 | // Add "Summary". 39 | // 40 | // Contains `OrderItems`, `OrderAdjustments`, and `Totals` subviews. 41 | this.views.add( new Summary( this.options ) ); 42 | 43 | // "Actions". 44 | if ( document.getElementById( 'edd-order-overview-actions' ) ) { 45 | this.views.add( new Actions( this.options ) ); 46 | } 47 | 48 | return this; 49 | }, 50 | 51 | /** 52 | * Toggles a row's other columns. 53 | * 54 | * Core does not support the dynamically added items. 55 | * 56 | * @since 3.0 57 | * 58 | * @see https://github.com/WordPress/WordPress/blob/001ffe81fbec4438a9f594f330e18103d21fbcd7/wp-admin/js/common.js#L908 59 | * 60 | * @param {Object} e Click event. 61 | */ 62 | onToggleRow( e ) { 63 | e.preventDefault(); 64 | $( e.target ).closest( 'tr' ).toggleClass( 'is-expanded' ); 65 | }, 66 | } ); 67 | -------------------------------------------------------------------------------- /assets/css/admin/chosen/_multi.scss: -------------------------------------------------------------------------------- 1 | .chosen-container-multi { 2 | .search-field { 3 | border: none; 4 | } 5 | 6 | &.chosen-with-drop .chosen-choices { 7 | border-bottom-color: transparent; 8 | } 9 | 10 | .chosen-choices li.search-field { 11 | min-width: 100px !important; 12 | width: 100%; 13 | } 14 | 15 | .chosen-choices li.search-field input[type=text] { 16 | color: $wp-input-text; 17 | font-family: unset; 18 | height: unset; 19 | margin: 0; 20 | padding: 3px 10px; 21 | width: 100% !important; 22 | } 23 | 24 | .spinner { 25 | position: absolute; 26 | top: 4px; 27 | right: -4px; 28 | } 29 | 30 | .chosen-choices li.search-choice { 31 | margin: 3px 5px 3px 0; 32 | padding: 5px 22px 5px 5px; 33 | border: 1px solid $wp-input-border; 34 | max-width: 100%; 35 | border-radius: 4px; 36 | background: #f4f4f4; 37 | box-shadow: none; 38 | color: $wp-input-text; 39 | cursor: default; 40 | } 41 | 42 | .chosen-choices li.search-choice .search-choice-close { 43 | position: absolute; 44 | top: 4px; 45 | right: 3px; 46 | display: block; 47 | width: 15px; 48 | height: 15px; 49 | } 50 | 51 | .chosen-choices li.search-choice .search-choice-close:before { 52 | height: 15px; 53 | width: 15px; 54 | position: absolute; 55 | top: 0; 56 | right: 0; 57 | color: $wp-input-text; 58 | font-family: 'dashicons'; 59 | content: '\f158'; 60 | font-size: 15px; 61 | line-height: 1; 62 | } 63 | 64 | .chosen-choices li.search-choice .search-choice-close:hover:before { 65 | color: $wp-text; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /assets/js/admin/settings/tax-rates/views/manager.js: -------------------------------------------------------------------------------- 1 | /* global wp */ 2 | 3 | /** 4 | * Internal dependencies. 5 | */ 6 | import Table from './table.js'; 7 | import BulkActions from './bulk-actions.js'; 8 | 9 | /** 10 | * Manage tax rates. 11 | */ 12 | const Manager = wp.Backbone.View.extend( { 13 | // Append to this element. 14 | el: '#edd-admin-tax-rates', 15 | 16 | /** 17 | * Set bind changes to collection. 18 | */ 19 | initialize: function() { 20 | this.listenTo( this.collection, 'add change', this.makeDirty ); 21 | 22 | // Clear unload confirmation when submitting parent form. 23 | document.querySelector( '.edd-settings-form #submit' ).addEventListener( 'click', this.makeClean ); 24 | }, 25 | 26 | /** 27 | * Output the manager. 28 | */ 29 | render: function() { 30 | this.views.add( new BulkActions( { 31 | collection: this.collection, 32 | } ) ); 33 | 34 | this.views.add( new Table( { 35 | collection: this.collection, 36 | } ) ); 37 | }, 38 | 39 | /** 40 | * Collection has changed so warn the user before exiting. 41 | */ 42 | makeDirty: function() { 43 | window.onbeforeunload = this.confirmUnload; 44 | }, 45 | 46 | /** 47 | * When submitting the main form remove the dirty check. 48 | */ 49 | makeClean: function() { 50 | window.onbeforeunload = null; 51 | }, 52 | 53 | /** 54 | * Confirm page unload. 55 | * 56 | * @param {Object} event Close event. 57 | */ 58 | confirmUnload: function( event ) { 59 | event.preventDefault(); 60 | 61 | return ''; 62 | }, 63 | } ); 64 | 65 | export default Manager; 66 | -------------------------------------------------------------------------------- /assets/css/admin/extensions/_variations.scss: -------------------------------------------------------------------------------- 1 | /* Extension Manager Style Variations 2 | --------------------------------------- */ 3 | .edd-extension-manager__card--horizontal { 4 | margin: 24px 0; 5 | max-width: 700px; 6 | } 7 | 8 | .edd-extension-manager__card--detailed { 9 | background-color: transparent; 10 | max-width: 700px; 11 | } 12 | 13 | .edd-extension-manager__card--detailed-2col { 14 | background-color: transparent; 15 | max-width: 900px; 16 | } 17 | 18 | .edd-extension-manager__card--detailed .edd-extension-manager__title, 19 | .edd-extension-manager__card--detailed-2col .edd-extension-manager__title { 20 | border-bottom: 1px solid #ccc; 21 | padding-bottom: 1em; 22 | } 23 | 24 | @media screen and (min-width: $break-small) { 25 | .edd-extension-manager__card-group { 26 | grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); 27 | } 28 | 29 | .edd-extension-manager__card--horizontal .edd-extension-manager__body { 30 | grid-template-columns: minmax(0, 300px) 1fr; 31 | grid-template-rows: 1fr auto; 32 | grid-auto-flow: column; 33 | } 34 | 35 | .edd-extension-manager__card--horizontal .edd-extension-manager__image { 36 | grid-row: 1 / 4; 37 | } 38 | 39 | .edd-extension-manager__features, 40 | .edd-extension-manager__card--horizontal .edd-extension-manager__description { 41 | align-self: center; 42 | } 43 | } 44 | 45 | @media screen and (min-width: 783px) { 46 | .edd-extension-manager__card--detailed-2col .edd-extension-manager__body { 47 | grid-template-columns: minmax(0, 375px) 1fr; 48 | grid-auto-flow: column; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /includes/database/tables/class-logs-api-request-meta.php: -------------------------------------------------------------------------------- 1 | schema = "meta_id bigint(20) unsigned NOT NULL auto_increment, 53 | edd_logs_api_request_id bigint(20) unsigned NOT NULL default '0', 54 | meta_key varchar(255) DEFAULT NULL, 55 | meta_value longtext DEFAULT NULL, 56 | PRIMARY KEY (meta_id), 57 | KEY edd_logs_api_request_id (edd_logs_api_request_id), 58 | KEY meta_key (meta_key({$max_index_length}))"; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /includes/database/tables/class-order-adjustment-meta.php: -------------------------------------------------------------------------------- 1 | schema = "meta_id bigint(20) unsigned NOT NULL auto_increment, 53 | edd_order_adjustment_id bigint(20) unsigned NOT NULL default '0', 54 | meta_key varchar(255) DEFAULT NULL, 55 | meta_value longtext DEFAULT NULL, 56 | PRIMARY KEY (meta_id), 57 | KEY edd_order_adjustment_id (edd_order_adjustment_id), 58 | KEY meta_key (meta_key({$max_index_length}))"; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /assets/css/admin/chosen/_base.scss: -------------------------------------------------------------------------------- 1 | .chosen-container { 2 | font-size: 14px; 3 | } 4 | 5 | .chosen-container-multi .search-field, 6 | .chosen-container-single .chosen-single, 7 | .chosen-container-active.chosen-with-drop .chosen-single { 8 | background: $white url(data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat right 5px top 55%; 9 | background-size: 16px 16px; 10 | border: 1px solid $wp-input-border; 11 | box-shadow: 0 0 0 transparent; 12 | color: $wp-input-text; 13 | } 14 | 15 | .chosen-container-multi .chosen-choices, 16 | .chosen-container-single .chosen-single { 17 | border-radius: 4px; 18 | border-color: $wp-input-border; 19 | } 20 | 21 | .chosen-container-multi.chosen-with-drop .chosen-choices, 22 | .chosen-container-active.chosen-with-drop .chosen-single { 23 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); 24 | } 25 | 26 | .chosen-container-single.chosen-container-active.chosen-with-drop.chosen-dropup .chosen-single, 27 | .chosen-container-multi.chosen-container-active.chosen-dropup .chosen-choices { 28 | border-radius: 0 0 4px 4px; 29 | border-width: 0 1px 0 1px; 30 | z-index: 1011; 31 | } 32 | 33 | .chosen-container .chosen-drop { 34 | position: absolute; 35 | top: 100%; 36 | z-index: 1010; 37 | width: 100%; 38 | border-radius: 0 0 4px 4px; 39 | border-width: 0 1px 0 1px; 40 | border-color: transparent; 41 | background: $white; 42 | outline: 2px solid transparent; 43 | } 44 | -------------------------------------------------------------------------------- /includes/database/tables/class-logs-file-download-meta.php: -------------------------------------------------------------------------------- 1 | schema = "meta_id bigint(20) unsigned NOT NULL auto_increment, 53 | edd_logs_file_download_id bigint(20) unsigned NOT NULL default '0', 54 | meta_key varchar(255) DEFAULT NULL, 55 | meta_value longtext DEFAULT NULL, 56 | PRIMARY KEY (meta_id), 57 | KEY edd_logs_file_download_id (edd_logs_file_download_id), 58 | KEY meta_key (meta_key({$max_index_length}))"; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /assets/css/admin/pass-handler.scss: -------------------------------------------------------------------------------- 1 | @import "../variables/variables"; 2 | 3 | .edd-pass-handler { 4 | &__description { 5 | display: grid; 6 | gap: 1em; 7 | margin-bottom: 1em; 8 | } 9 | 10 | &__control { 11 | display: flex; 12 | gap: 4px; 13 | flex-wrap: wrap; 14 | 15 | > input { 16 | max-width: 250px !important; 17 | } 18 | 19 | + .notice { 20 | max-width: 400px; 21 | margin-top: 1em; 22 | } 23 | 24 | .button { 25 | margin: 0; 26 | } 27 | } 28 | 29 | &__loading { 30 | display: flex; 31 | align-items: center; 32 | gap: .5em; 33 | 34 | &:before { 35 | background: none; 36 | display: block; 37 | @include edd-spinner( 38 | 12px, 39 | $wp-input-border, 40 | $wp-alternate 41 | ); 42 | } 43 | } 44 | 45 | &__verifying-wrap { 46 | display: flex; 47 | position: fixed; 48 | left: 36px; 49 | right: 0; 50 | top: 0; 51 | bottom: 0; 52 | background: rgba(0,0,0,.5); 53 | justify-content: center; 54 | align-items: center; 55 | z-index: 1; 56 | 57 | p { 58 | background: $white; 59 | border: 1px solid $wp-input-border; 60 | border-radius: 4px; 61 | padding: 2em; 62 | } 63 | 64 | @media only screen and (min-width: $break-large) { 65 | .wp-admin:not(.folded) & { 66 | left: 160px; 67 | } 68 | } 69 | 70 | @media only screen and (max-width: $break-medium) { 71 | left: 0; 72 | } 73 | } 74 | 75 | &__verifying ul#adminmenu #menu-posts-download ul.wp-submenu li.current a:before { 76 | border-right-color: #787878; 77 | } 78 | 79 | &__actions { 80 | display: flex; 81 | gap: 4px; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/Admin/Extensions/DownloadURL.php: -------------------------------------------------------------------------------- 1 | plugin = sanitize_text_field( $_POST['plugin'] ); 26 | } 27 | $this->license_key = $license_key; 28 | } 29 | 30 | /** 31 | * Gets the download URL. 32 | * 33 | * @since 3.1.1 34 | * @return bool|string 35 | */ 36 | public function get_url() { 37 | if ( ! $this->plugin ) { 38 | return false; 39 | } 40 | if ( false === strpos( $this->plugin, 'https://downloads.wordpress.org/plugin' ) ) { 41 | return false; 42 | } 43 | if ( ! in_array( $this->plugin, $this->get_allowed_urls(), true ) ) { 44 | return false; 45 | } 46 | 47 | return $this->plugin; 48 | } 49 | 50 | /** 51 | * Gets an array of allowed download URLs. 52 | * 53 | * @since 3.1.2 54 | * @return array 55 | */ 56 | private function get_allowed_urls() { 57 | return array( 58 | 'https://downloads.wordpress.org/plugin/edd-auto-register.zip', 59 | 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip', 60 | 'https://downloads.wordpress.org/plugin/google-analytics-for-wordpress.zip', 61 | 'https://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip', 62 | ); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /includes/utils/exceptions/class-attribute-not-found.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /assets/js/admin/reports/charts/pie.js: -------------------------------------------------------------------------------- 1 | /* global Chart */ 2 | 3 | /** 4 | * Internal dependencies. 5 | */ 6 | import { toolTipBaseConfig, getLabelWithTypeCondition } from './utils'; 7 | 8 | /** 9 | * Render a line chart. 10 | * 11 | * @param {Object} config Global chart config. 12 | * @return {Chart} 13 | */ 14 | export const render = ( config ) => { 15 | const { target } = config; 16 | 17 | // Config tooltips. 18 | config.options.tooltips = tooltipConfig( config ); 19 | 20 | // Render 21 | return new Chart( document.getElementById( target ), config ); 22 | }; 23 | 24 | /** 25 | * Get custom tooltip config for pie charts. 26 | * 27 | * @param {Object} config Global chart config. 28 | * @return {Object} 29 | */ 30 | export const tooltipConfig = ( config ) => ( { 31 | ...toolTipBaseConfig, 32 | 33 | callbacks: { 34 | /** 35 | * Generate a label. 36 | * 37 | * @param {Object} t 38 | * @param {Object} d 39 | */ 40 | label: function( t, d ) { 41 | const { options: { datasets } } = config; 42 | const datasetConfig = datasets[ Object.keys( datasets )[ t.datasetIndex ] ]; 43 | const dataset = d.datasets[ t.datasetIndex ]; 44 | 45 | const total = dataset.data.reduce( function( previousValue, currentValue, currentIndex, array ) { 46 | return previousValue + currentValue; 47 | } ); 48 | 49 | const currentValue = dataset.data[ t.index ]; 50 | const label = getLabelWithTypeCondition( currentValue, datasetConfig ); 51 | const precentage = Math.floor( ( ( currentValue / total ) * 100 ) + 0.5 ); 52 | 53 | return `${ d.labels[ t.index ] }: ${ label } (${ precentage }%)`; 54 | }, 55 | }, 56 | } ); 57 | -------------------------------------------------------------------------------- /assets/js/admin/orders/order-overview/views/order-subtotal.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Order subtotal 3 | * 4 | * @since 3.0 5 | * 6 | * @class Subtotal 7 | * @augments wp.Backbone.View 8 | */ 9 | export const OrderSubtotal = wp.Backbone.View.extend( { 10 | /** 11 | * @since 3.0 12 | */ 13 | tagName: 'tbody', 14 | 15 | /** 16 | * @since 3.0 17 | */ 18 | className: 'edd-order-overview-summary__subtotal', 19 | 20 | /** 21 | * @since 3.0 22 | */ 23 | template: wp.template( 'edd-admin-order-subtotal' ), 24 | 25 | /** 26 | * Order subtotal view. 27 | * 28 | * @since 3.0 29 | * 30 | * @constructs OrderSubtotal 31 | * @augments wp.Backbone.View 32 | */ 33 | initialize() { 34 | const { state } = this.options; 35 | 36 | // Listen for events. 37 | this.listenTo( state.get( 'items' ), 'add remove change', this.render ); 38 | this.listenTo( state.get( 'adjustments' ), 'add remove', this.render ); 39 | }, 40 | 41 | /** 42 | * Prepares data to be used in `render` method. 43 | * 44 | * @since 3.0 45 | * 46 | * @see wp.Backbone.View 47 | * @see https://github.com/WordPress/WordPress/blob/master/wp-includes/js/wp-backbone.js 48 | * 49 | * @return {Object} The data for this view. 50 | */ 51 | prepare() { 52 | const { state } = this.options; 53 | const { currency, number } = state.get( 'formatters' ); 54 | const colspan = true === state.get( 'hasQuantity' ) ? 2 : 1; 55 | 56 | const subtotal = state.getSubtotal(); 57 | 58 | return { 59 | state: state.toJSON(), 60 | config: { 61 | colspan, 62 | }, 63 | 64 | subtotal, 65 | subtotalCurrency: currency.format( subtotal ), 66 | }; 67 | }, 68 | } ); 69 | -------------------------------------------------------------------------------- /assets/js/admin/settings/tax-rates/views/bulk-actions.js: -------------------------------------------------------------------------------- 1 | /* global wp, _ */ 2 | 3 | /** 4 | * Apply bulk actions. 5 | */ 6 | const BulkActions = wp.Backbone.View.extend( { 7 | // See https://codex.wordpress.org/Javascript_Reference/wp.template 8 | template: wp.template( 'edd-admin-tax-rates-table-bulk-actions' ), 9 | 10 | // Watch events. 11 | events: { 12 | 'click .edd-admin-tax-rates-table-filter': 'filter', 13 | 'change .edd-admin-tax-rates-table-hide input': 'showHide', 14 | }, 15 | 16 | /** 17 | * Bulk actions for selected items. 18 | * 19 | * Currently only supports changing the status. 20 | * 21 | * @param {Object} event Event. 22 | */ 23 | filter: function( event ) { 24 | event.preventDefault(); 25 | 26 | // @hack - need to access the DOM directly here because the dropdown is not tied to the button event. 27 | const status = document.getElementById( 'edd-admin-tax-rates-table-bulk-actions' ); 28 | 29 | _.each( this.collection.selected, ( cid ) => { 30 | const model = this.collection.get( { 31 | cid: cid, 32 | } ); 33 | 34 | model.set( 'status', status.value ); 35 | } ); 36 | 37 | this.collection.trigger( 'filtered' ); 38 | }, 39 | 40 | /** 41 | * Toggle show active/inactive rates. 42 | * 43 | * @param {Object} event Event. 44 | */ 45 | showHide: function( event ) { 46 | this.collection.showAll = event.target.checked; 47 | 48 | // @hack -- shouldn't access this table directly. 49 | document.getElementById( 'edd_tax_rates' ).classList.toggle( 'has-inactive', this.collection.showAll ); 50 | 51 | this.collection.trigger( 'filtered' ); 52 | }, 53 | } ); 54 | 55 | export default BulkActions; 56 | -------------------------------------------------------------------------------- /src/Admin/Onboarding/Steps/BusinessInfo.php: -------------------------------------------------------------------------------- 1 | array( 27 | 'business_settings', 28 | 'entity_name', 29 | 'entity_type', 30 | 'business_address', 31 | 'business_address_2', 32 | 'business_city', 33 | 'business_postal_code', 34 | 'base_country', 35 | 'base_state', 36 | ), 37 | 'edd_settings_general_currency' => array( 38 | 'currency_settings', 39 | 'currency', 40 | 'currency_position', 41 | 'thousands_separator', 42 | 'decimal_separator', 43 | ), 44 | ); 45 | ?> 46 | 47 | 48 |
    17 | 18 | html->country_select( array( 20 | 'id' => 'tax_rate_country', 21 | ) ); 22 | ?> 23 | 26 | 27 | 28 | 31 | 32 |
    33 |
    36 | 37 | 38 | 41 | 42 |
    49 | 50 | settings_html( $this->extract_settings_fields( $sections ) ); ?> 51 | 52 | 53 | 54 | 55 | 56 |