├── .wp-env.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── assets ├── slick-carousel │ ├── slick.css │ ├── slick.js │ ├── slick.min.css │ └── slick.min.js └── tippy.js │ ├── tippy.all.js │ ├── tippy.all.js.map │ └── tippy.all.min.js ├── composer.json ├── css ├── admin-about.css ├── admin-about.css.map ├── admin-about.min.css ├── admin-tour.css ├── admin-tour.css.map ├── admin-tour.min.css ├── admin.css ├── admin.css.map ├── admin.min.css ├── card-slider.css ├── card-slider.css.map ├── card-slider.min.css ├── redirect.css ├── redirect.css.map └── redirect.min.css ├── fonts └── dist │ ├── pronamic-pay-icons.css │ ├── pronamic-pay-icons.eot │ ├── pronamic-pay-icons.html │ ├── pronamic-pay-icons.svg │ ├── pronamic-pay-icons.ttf │ ├── pronamic-pay-icons.woff │ └── pronamic-pay-icons.woff2 ├── images └── dist │ ├── cards │ ├── abn-amro │ │ ├── card-abn-amro-background-480x270.svg │ │ └── card-abn-amro-logo-_x80.svg │ ├── american-express │ │ ├── card-american-express-background-480x270.svg │ │ └── card-american-express-logo-_x80.svg │ ├── asn-bank │ │ ├── card-asn-bank-background-480x270.svg │ │ └── card-asn-bank-logo-_x80.svg │ ├── bunq │ │ ├── card-bunq-background-480x270.svg │ │ └── card-bunq-logo-_x80.svg │ ├── carta-si │ │ ├── card-carta-si-background-480x270.svg │ │ └── card-carta-si-logo-_x80.svg │ ├── carte-bleue │ │ ├── card-carte-bleue-background-480x270.svg │ │ └── card-carte-bleue-logo-_x80.svg │ ├── dankort │ │ ├── card-dankort-background-480x270.svg │ │ └── card-dankort-logo-_x80.svg │ ├── diners-club │ │ ├── card-diners-club-background-480x270.svg │ │ └── card-diners-club-logo-_x80.svg │ ├── discover │ │ ├── card-discover-background-480x270.svg │ │ └── card-discover-logo-_x80.svg │ ├── handelsbanken │ │ ├── card-handelsbanken-background-480x270.svg │ │ └── card-handelsbanken-logo-_x80.svg │ ├── ing │ │ ├── card-ing-background-480x270.svg │ │ └── card-ing-logo-_x80.svg │ ├── jcb │ │ ├── card-jcb-background-480x270.svg │ │ └── card-jcb-logo-_x80.svg │ ├── knab │ │ ├── card-knab-background-480x270.svg │ │ └── card-knab-logo-_x80.svg │ ├── maestro │ │ ├── card-maestro-background-480x270.svg │ │ └── card-maestro-logo-_x80.svg │ ├── mastercard │ │ ├── card-mastercard-background-480x270.svg │ │ └── card-mastercard-logo-_x80.svg │ ├── rabobank │ │ ├── card-rabobank-background-480x270.svg │ │ └── card-rabobank-logo-_x80.svg │ ├── regiobank │ │ ├── card-regiobank-background-480x270.svg │ │ └── card-regiobank-logo-_x80.svg │ ├── sns │ │ ├── card-sns-background-480x270.svg │ │ └── card-sns-logo-_x80.svg │ ├── triodos-bank │ │ ├── card-triodos-bank-background-480x270.svg │ │ └── card-triodos-bank-logo-_x80.svg │ ├── unionpay │ │ ├── card-unionpay-background-480x270.svg │ │ └── card-unionpay-logo-_x80.svg │ ├── van-lanschot │ │ ├── card-van-lanschot-background-480x270.svg │ │ └── card-van-lanschot-logo-_x80.svg │ └── visa │ │ ├── card-visa-background-480x270.svg │ │ └── card-visa-logo-_x80.svg │ ├── wp-pay-512.pngquant-min.png │ ├── wp-pay-white-512.pngquant-min.png │ ├── wp-pay-white.svgo-min.svg │ ├── wp-pay-wp-admin-fresh-base.svgo-min.svg │ └── wp-pay.svgo-min.svg ├── includes └── functions.php ├── js └── dist │ ├── admin-cb.js │ ├── admin-cb.min.js │ ├── admin-test.js │ ├── admin-test.min.js │ ├── admin-tour.js │ ├── admin-tour.min.js │ ├── admin.js │ ├── admin.min.js │ ├── subscription-mandate.js │ └── subscription-mandate.min.js ├── json-schemas └── payment.json ├── package.json ├── pronamic-pay-core.php ├── src ├── AbstractDataStoreCPT.php ├── AbstractGatewayIntegration.php ├── AbstractIntegration.php ├── AbstractPluginIntegration.php ├── ActionSchedulerController.php ├── Address.php ├── AddressHelper.php ├── Admin │ ├── AdminAboutPage.php │ ├── AdminDashboard.php │ ├── AdminGatewayPostType.php │ ├── AdminHealth.php │ ├── AdminModule.php │ ├── AdminNotification.php │ ├── AdminPaymentBulkActions.php │ ├── AdminPaymentPostType.php │ ├── AdminSettings.php │ ├── AdminSubscriptionPostType.php │ ├── AdminTour.php │ └── Install.php ├── Banks │ ├── BankAccountDetails.php │ └── BankTransferDetails.php ├── Blocks │ └── BlocksModule.php ├── Cards.php ├── ContactName.php ├── ContactNameHelper.php ├── Core │ ├── Gateway.php │ ├── GatewayConfig.php │ ├── IdTrait.php │ ├── ModeTrait.php │ ├── PaymentMethod.php │ ├── PaymentMethods.php │ ├── PaymentMethodsCollection.php │ ├── SupportsTrait.php │ ├── TimestampsTrait.php │ ├── Util.php │ ├── VersionTrait.php │ └── XML │ │ └── Util.php ├── Country.php ├── CreditCard.php ├── Customer.php ├── CustomerHelper.php ├── Dependencies │ ├── Dependencies.php │ ├── Dependency.php │ ├── PhpDependency.php │ ├── PhpExtensionDependency.php │ └── WordPressDependency.php ├── Fields │ ├── CachedCallbackOptions.php │ ├── DateField.php │ ├── Field.php │ ├── IDealIssuerSelectField.php │ ├── SelectField.php │ ├── SelectFieldOption.php │ ├── SelectFieldOptionGroup.php │ └── TextField.php ├── GatewayIntegrations.php ├── GatewayPostType.php ├── Gateways │ └── GatewaysDataStoreCPT.php ├── Gender.php ├── HomeUrlController.php ├── HouseNumber.php ├── LicenseManager.php ├── MergeTags │ ├── MergeTag.php │ └── MergeTagsController.php ├── MoneyJsonTransformer.php ├── PagesController.php ├── Payments │ ├── FailureReason.php │ ├── LegacyPaymentsDataStoreCPT.php │ ├── Payment.php │ ├── PaymentInfo.php │ ├── PaymentInfoHelper.php │ ├── PaymentInfoTrait.php │ ├── PaymentLine.php │ ├── PaymentLineType.php │ ├── PaymentLines.php │ ├── PaymentMergeTagsController.php │ ├── PaymentPostType.php │ ├── PaymentStatus.php │ ├── PaymentsDataStoreCPT.php │ ├── PaymentsModule.php │ ├── PaymentsPrivacy.php │ ├── SourceTrait.php │ └── StatusChecker.php ├── Plugin.php ├── Privacy │ └── AnonymizedTrait.php ├── PrivacyManager.php ├── Refunds │ ├── Refund.php │ ├── RefundLine.php │ └── RefundLines.php ├── Region.php ├── Settings.php ├── Subscriptions │ ├── AlignmentRule.php │ ├── Subscription.php │ ├── SubscriptionHelper.php │ ├── SubscriptionInterval.php │ ├── SubscriptionPeriod.php │ ├── SubscriptionPhase.php │ ├── SubscriptionPostType.php │ ├── SubscriptionStatus.php │ ├── SubscriptionsCompletionController.php │ ├── SubscriptionsDataStoreCPT.php │ ├── SubscriptionsFollowUpPaymentsController.php │ ├── SubscriptionsModule.php │ ├── SubscriptionsNotificationsController.php │ └── SubscriptionsPrivacy.php ├── TrackingModule.php ├── Upgrades │ ├── Upgrade.php │ └── Upgrades.php ├── Util.php ├── VatNumbers │ ├── VatNumber.php │ ├── VatNumberValidationService.php │ └── VatNumberValidity.php ├── VatRates.php └── Webhooks │ ├── WebhookLogger.php │ └── WebhookRequestInfo.php └── views ├── exception.php ├── form.php ├── meta-box-gateway-config.php ├── meta-box-gateway-payment-methods.php ├── meta-box-gateway-settings.php ├── meta-box-gateway-test.php ├── meta-box-gateway-webhook-log.php ├── meta-box-notes.php ├── meta-box-payment-info.php ├── meta-box-payment-lines.php ├── meta-box-payment-refunds.php ├── meta-box-payment-subscription.php ├── meta-box-payment-update.php ├── meta-box-subscription-info.php ├── meta-box-subscription-payments.php ├── meta-box-subscription-phases.php ├── meta-box-subscription-update.php ├── notice-license.php ├── page-dashboard.php ├── page-settings.php ├── pointer-dashboard.php ├── pointer-forms.php ├── pointer-gateways.php ├── pointer-payments.php ├── pointer-reports.php ├── pointer-settings.php ├── pointer-start.php ├── redirect-via-html.php ├── subscription-cancel.php ├── subscription-details.php ├── subscription-mandate-failed.php ├── subscription-mandate-updated.php ├── subscription-mandate.php ├── subscription-renew-failed.php ├── subscription-renew.php └── widget-payments-status-list.php /.wp-env.json: -------------------------------------------------------------------------------- 1 | { 2 | "core": null, 3 | "plugins": [ 4 | "pronamic/wp-env-quick-login", 5 | "https://downloads.wordpress.org/plugin/pronamic-client.zip", 6 | "https://downloads.wordpress.org/plugin/query-monitor.zip", 7 | "https://downloads.wordpress.org/plugin/plugin-check.zip" 8 | ], 9 | "mappings": { 10 | "wp-content/plugins/pronamic-pay-core": "./" 11 | }, 12 | "config": { 13 | "PRONAMIC_PAY_DEBUG": true 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
10 | The WordPress payment processing library is intended to make payments and integrations with payment providers easier to set up and maintain within WordPress. It has similarities to libraries like https://github.com/Payum/Payum and https://github.com/thephpleague/omnipay, but is more focused on WordPress. The code complies with the WordPress Coding Standards and the WordPress APIs are used. 11 |
12 | 13 | ## Table of contents 14 | 15 | - [Status](#status) 16 | - [CLI](#cli) 17 | - [WordPress Filters](#wordpress-filters) 18 | 19 | ## Status 20 | 21 | [](https://packagist.org/packages/wp-pay/core) 22 | [](https://packagist.org/packages/wp-pay/core) 23 | [](https://packagist.org/packages/wp-pay/core) 24 | [](https://packagist.org/packages/wp-pay/core) 25 | [](http://gruntjs.com/) 26 | 27 | ## CLI 28 | 29 | ### Check pending payment status 30 | 31 | ``` 32 | wp pay payment status $( wp post list --field=ID --post_type=pronamic_payment --post_status=payment_pending --order=ASC --orderby=date --posts_per_page=100 --paged=1 ) 33 | ``` 34 | 35 | ## WordPress Filters 36 | 37 | ### pronamic_payment_gateway_configuration_id 38 | 39 | ```php 40 | \add_filter( 41 | 'pronamic_payment_gateway_configuration_id', 42 | /** 43 | * Filter the payment gateway configuration ID to use specific 44 | * gateways for certain WooCommerce billing countries. 45 | * 46 | * @param int $configuration_id Gateway configuration ID. 47 | * @param Payment $payment The payment resource data. 48 | * @return int Gateway configuration ID. 49 | */ 50 | function( $configuration_id, $payment ) { 51 | if ( 'woocommerce' !== $payment->get_source() ) { 52 | return $configuration_id; 53 | } 54 | 55 | $billing_address = $payment->get_billing_address(); 56 | 57 | if ( null === $billing_address ) { 58 | return $configuration_id; 59 | } 60 | 61 | $id = $configuration_id; 62 | 63 | switch ( $billing_address->get_country_code() ) { 64 | case 'US': 65 | $id = \get_option( 'custom_us_gateway_configuration_id', $id ); 66 | break; 67 | case 'AU': 68 | $id = \get_option( 'custom_au_gateway_configuration_id', $id ); 69 | break; 70 | } 71 | 72 | if ( 'pronamic_gateway' === \get_post_type( $id ) && 'publish' === \get_post_status( $id ) ) { 73 | $configuration_id = $id; 74 | } 75 | 76 | return $configuration_id; 77 | }, 78 | 10, 79 | 2 80 | ); 81 | ``` 82 | 83 | ### pronamic_gateway_configuration_display_value 84 | 85 | ```php 86 | \add_filter( 87 | 'pronamic_gateway_configuration_display_value', 88 | function( $display_value, $post_id ) { 89 | return \get_post_meta( $post_id, '_pronamic_gateway_display_value', true ); 90 | }, 91 | 10, 92 | 2 93 | ); 94 | ``` 95 | 96 | ### pronamic_gateway_configuration_display_value_$id 97 | 98 | ```php 99 | \add_filter( 100 | 'pronamic_gateway_configuration_display_value_payvision', 101 | function( $display_value, $post_id ) { 102 | return \get_post_meta( $post_id, '_pronamic_gateway_payvision_business_id', true ); 103 | }, 104 | 10, 105 | 2 106 | ); 107 | ``` 108 | 109 | [](https://www.pronamic.eu/contact/) 110 | -------------------------------------------------------------------------------- /assets/slick-carousel/slick.css: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | .slick-slider 3 | { 4 | position: relative; 5 | 6 | display: block; 7 | box-sizing: border-box; 8 | 9 | -webkit-user-select: none; 10 | -moz-user-select: none; 11 | -ms-user-select: none; 12 | user-select: none; 13 | 14 | -webkit-touch-callout: none; 15 | -khtml-user-select: none; 16 | -ms-touch-action: pan-y; 17 | touch-action: pan-y; 18 | -webkit-tap-highlight-color: transparent; 19 | } 20 | 21 | .slick-list 22 | { 23 | position: relative; 24 | 25 | display: block; 26 | overflow: hidden; 27 | 28 | margin: 0; 29 | padding: 0; 30 | } 31 | .slick-list:focus 32 | { 33 | outline: none; 34 | } 35 | .slick-list.dragging 36 | { 37 | cursor: pointer; 38 | cursor: hand; 39 | } 40 | 41 | .slick-slider .slick-track, 42 | .slick-slider .slick-list 43 | { 44 | -webkit-transform: translate3d(0, 0, 0); 45 | -moz-transform: translate3d(0, 0, 0); 46 | -ms-transform: translate3d(0, 0, 0); 47 | -o-transform: translate3d(0, 0, 0); 48 | transform: translate3d(0, 0, 0); 49 | } 50 | 51 | .slick-track 52 | { 53 | position: relative; 54 | top: 0; 55 | left: 0; 56 | 57 | display: block; 58 | margin-left: auto; 59 | margin-right: auto; 60 | } 61 | .slick-track:before, 62 | .slick-track:after 63 | { 64 | display: table; 65 | 66 | content: ''; 67 | } 68 | .slick-track:after 69 | { 70 | clear: both; 71 | } 72 | .slick-loading .slick-track 73 | { 74 | visibility: hidden; 75 | } 76 | 77 | .slick-slide 78 | { 79 | display: none; 80 | float: left; 81 | 82 | height: 100%; 83 | min-height: 1px; 84 | } 85 | [dir='rtl'] .slick-slide 86 | { 87 | float: right; 88 | } 89 | .slick-slide img 90 | { 91 | display: block; 92 | } 93 | .slick-slide.slick-loading img 94 | { 95 | display: none; 96 | } 97 | .slick-slide.dragging img 98 | { 99 | pointer-events: none; 100 | } 101 | .slick-initialized .slick-slide 102 | { 103 | display: block; 104 | } 105 | .slick-loading .slick-slide 106 | { 107 | visibility: hidden; 108 | } 109 | .slick-vertical .slick-slide 110 | { 111 | display: block; 112 | 113 | height: auto; 114 | 115 | border: 1px solid transparent; 116 | } 117 | .slick-arrow.slick-hidden { 118 | display: none; 119 | } 120 | -------------------------------------------------------------------------------- /assets/slick-carousel/slick.min.css: -------------------------------------------------------------------------------- 1 | .slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:after,.slick-track:before{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none} -------------------------------------------------------------------------------- /css/admin-about.css: -------------------------------------------------------------------------------- 1 | .pronamic-pay-badge { 2 | background-color: #ffb200; 3 | background-image: url("../images/dist/wp-pay-white-512.pngquant-min.png"); 4 | color: #fff0cc; 5 | } 6 | 7 | .svg .pronamic-pay-badge { 8 | background-image: url("../images/dist/wp-pay-white.svgo-min.svg"); 9 | } 10 | 11 | /*# sourceMappingURL=admin-about.css.map */ 12 | -------------------------------------------------------------------------------- /css/admin-about.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sourceRoot":"","sources":["../scss/admin-about.scss","../scss/admin/_variables.scss"],"names":[],"mappings":"AAGA;EACC,kBCyEe;EDxEf;EAEA;;;AAIA;EACC","file":"admin-about.css"} -------------------------------------------------------------------------------- /css/admin-about.min.css: -------------------------------------------------------------------------------- 1 | .pronamic-pay-badge{background-color:#ffb200;background-image:url(../images/dist/wp-pay-white-512.pngquant-min.png);color:#fff0cc}.svg .pronamic-pay-badge{background-image:url(../images/dist/wp-pay-white.svgo-min.svg)} 2 | -------------------------------------------------------------------------------- /css/admin-tour.css: -------------------------------------------------------------------------------- 1 | .pp-pointer-buttons .button, 2 | .pp-pointer-buttons .button-primary, 3 | .pp-pointer-buttons .button-secondary { 4 | margin-right: 10px; 5 | } 6 | .pp-pointer-buttons .button:last-child, 7 | .pp-pointer-buttons .button-primary:last-child, 8 | .pp-pointer-buttons .button-secondary:last-child { 9 | margin-right: 0; 10 | } 11 | .pp-pointer-buttons a { 12 | float: none; 13 | } 14 | 15 | .pp-pointer-buttons-right { 16 | float: right; 17 | } 18 | 19 | /*# sourceMappingURL=admin-tour.css.map */ 20 | -------------------------------------------------------------------------------- /css/admin-tour.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sourceRoot":"","sources":["../scss/admin-tour.scss"],"names":[],"mappings":"AAEC;AAAA;AAAA;EAGC;;AAEA;AAAA;AAAA;EACC;;AAIF;EACC;;;AAIF;EACC","file":"admin-tour.css"} -------------------------------------------------------------------------------- /css/admin-tour.min.css: -------------------------------------------------------------------------------- 1 | .pp-pointer-buttons .button,.pp-pointer-buttons .button-primary,.pp-pointer-buttons .button-secondary{margin-right:10px}.pp-pointer-buttons .button-primary:last-child,.pp-pointer-buttons .button-secondary:last-child,.pp-pointer-buttons .button:last-child{margin-right:0}.pp-pointer-buttons a{float:none}.pp-pointer-buttons-right{float:right} 2 | -------------------------------------------------------------------------------- /css/admin.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sourceRoot":"","sources":["../fonts/src/_variables.scss","../scss/admin/_action-links.scss","../scss/admin/_buttons.scss","../scss/admin/_chart.scss","../scss/admin/_variables.scss","../scss/admin/_dashboard-widget-payments.scss","../scss/admin/_edit-form-post.scss","../scss/admin/_forms.scss","../scss/admin/_icons.scss","../scss/admin/_lists.scss","../scss/admin/_meta-box-gateway-config.scss","../scss/admin/_meta-box-gateway-test.scss","../scss/admin/_meta-box-payment-log.scss","../scss/admin/_meta-box-subscription-info.scss","../scss/admin/_meta-box-update.scss","../scss/admin/_settings.scss","../scss/admin/_tables.scss","../scss/admin/_tabs.scss","../scss/admin/_text.scss","../scss/admin/_tip.scss","../scss/admin/_utilities.scss"],"names":[],"mappings":"AAAA;ACAA;EACC;EAEA;EAEA;EAEA;;;AAGD;EACC;EAEA;EAEA;EAEA;EAEA;;AAEA;EACC;;;ACnBF;EACC;EAEA;;;ACFA;EACC;;;AAIF;EACC;EAEA;EAEA;;;AAGD;EACC,YCfO;EDiBP;EACA;EACA;EAEA;EAEA;EACA;;AAEA;EACC;EAEA;EAEA,OCvBK;EDyBL;EAEA;EACA;EAEA;EACA;;AAEA;EACC,oBCyDkC;;ADtDnC;EACC,oBCsD8B;;ADnD/B;EACC,oBCmDgC;;ADhDjC;EACC,oBCgDgC;;AD7CjC;EACC,oBC6C8B;;AD1C/B;EACC,oBC0C6B;;ADvC9B;EACC,oBCuCwB;EDrCxB;EAEA;;AAIF;EACC,OChDc;EDkDd;EAEA;EACA;EAEA;;;AEjFA;EACC;;;AAKH;EACC;EAEA;;AAEA;EACC;EAEA;EAEA,ODTK;ECWL;EAEA;EACA;EAEA;;AAEA;EACC,ODnBI;ECqBJ;EAEA;EAEA;EAEA;EAEA;;AAEA;EACC,ODTS;ECWT;EAEA;EACA;EAEA;;AAGD;EACC,ODlBe;;ACoBf;AAAA;EAEC,ODtBc;;AC2BjB;EACC;EAEA;;AAGD;EACC;;;AClED;EACC;;;ACLH;EACC;;;AAID;EACC;;;AAMA;EACC;EAEA;EAEA;EACA;EAEA;EAEA;EAEA;EACA;;;ACzBF;EACC;EAEA;EAEA;EACA;;AAEA;EACC,SREsB;EQAtB;EAEA;EAEA;EACA;EACA;EAEA;EAEA;EAEA;EACA;;;AAKD;EACC,OJmD2B;EIlD3B,SRrBmB;;;AQ0BpB;EACC,OJXS;EIYT,SRhCqB;;;AQqCtB;EACC,OJ0C8B;EIzC9B,SRlCsB;;;AQuCvB;EACC,OJsC6B;EIrC7B,SR7CqB;;;AQkDtB;EACC,OJjBc;EIkBd,SR/CoB;;;AQoDrB;EACC,OJ6B0B;EI5B1B,SR1DkB;;;AQ+DnB;EACC,OJ/Bc;EIgCd,SRhEmB;;;AQqEpB;EACC,OJtCc;EIuCd,SR3Ec;;;AQgFf;EACC,OJG6B;EIF7B,SRlFc;;;AQuFf;EACC,OJpDc;EIqDd,SR1FkB;;;ASFlB;EACC;EACA;EACA;EACA;EACA;;AAMA;EACC;;AAKH;EACC;;AAIA;EACC,OL6D6B;;AKxD9B;EACC,OLpBI;;;AKyBP;EAGG;IACC;;EAEA;IACC;;EAIF;IACC;;;AC7CH;EACC;;AAGD;EACC;;AAEA;EACC;;;ACRD;EACC;;;ACDD;EACC;EACA;;AAIF;EACC;;;ACPA;EACC;;;ACDF;AAAA;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC,YVkD8C;EUhD9C;EAEA;;;AAGD;EACC;EAEA;;;AAGD;AAAA;EAEC;;;AAGD;AAAA;EAEC;;;AChCA;EAEC;;;ACJF;EACC;;;AAKC;EACC;;AAKD;AAAA;EAEC,OZHI;;AYQL;EACC;;AAEA;EACC;;;AAQH;EACC;;;AAQC;EACC,YZegC;;;AYPnC;EACC,YZMkC;;;AYCjC;EACC;EACA;EACA;EACA;EACA;;;AAOJ;EACC;;AAIE;EACC;;;AAOH;EACC;;;AAOD;AAAA;AAAA;EAGC;;AAGD;AAAA;EAEC;;;AAIF;EAUK;IAKC;;EAEA;IACC;;EAOD;IAKC;;;ACnIP;EACC;EAEA;EAEA;EAEA;EAEA;;AAEA;EACC,YbsCwB;EapCxB;EACA;EAEA;EAEA;EAEA;EAEA;EACA;;AAEA;EACC,YbzBK;Ea2BL;EAEA;;;AAqBC;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAgBd;EACC,kBAjBa;;;AAwBlB;EACC;EACA;EAEA;;AAGA;EAEC;;AAEA;EAEC;;;AAKH;EACC;;;AAGD;EACC;IACC;;EAGD;IACC;;EAEA;IACC;;;AAKH;EAGG;AAAA;IAEC;;;AClGJ;EACC;;;AAGD;EACC,OdFK;;;AcKN;EACC,OdJQ;;;AcOT;EACC;;;ACfC;EACC,OfkBS;EehBT;;;AAOD;EACC;;;ACXH;EACC","file":"admin.css"} -------------------------------------------------------------------------------- /css/card-slider.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sourceRoot":"","sources":["../scss/card-slider.scss"],"names":[],"mappings":";AAEC;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EAEC;;;AAIF;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKH;EACC;EACA;;AAGC;EACC;;AAKH;EACC;;AAGD;AAAA;EAEC;;AAGD;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACC;;AAKD;EACC;;AAKD;EACC;;AAKD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAKD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;EACA;;AAKD;EACC;;AAKD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;AAKD;EACC;;AAGD;EACC;;AAKD;EACC;;;AAMH;EACC;EACA;;AAGC;EACC;;;AAKH;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EAEC;;AAEA;EACC;;AAKH;EACC;EACA","file":"card-slider.css"} -------------------------------------------------------------------------------- /css/redirect.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #f6f6f6; 3 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | .pronamic-pay-redirect-page { 7 | margin: 0 auto; 8 | max-width: 750px; 9 | } 10 | 11 | .pronamic-pay-redirect-container { 12 | background: #f6f6f6; 13 | margin: 30px auto; 14 | padding: 20px; 15 | text-align: center; 16 | } 17 | .pronamic-pay-redirect-container h1 { 18 | margin: 0; 19 | } 20 | .pronamic-pay-redirect-container::after { 21 | clear: both; 22 | content: ""; 23 | display: table; 24 | } 25 | .pronamic-pay-redirect-container > p { 26 | color: #777; 27 | } 28 | .pronamic-pay-redirect-container .pp-page-section-container * { 29 | box-sizing: border-box; 30 | } 31 | .pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper { 32 | background: #fff; 33 | border-radius: 20px; 34 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); 35 | color: #333; 36 | max-width: 600px; 37 | margin: 3em auto 0 auto; 38 | padding: 40px; 39 | } 40 | .pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper h2 { 41 | margin-top: 0; 42 | } 43 | .pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl { 44 | display: flex; 45 | flex-flow: row wrap; 46 | } 47 | .pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dt, .pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dd { 48 | float: left; 49 | padding-bottom: 5px; 50 | } 51 | .pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dt { 52 | flex-basis: 30%; 53 | font-weight: bold; 54 | } 55 | .pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dd { 56 | flex-basis: 70%; 57 | margin-inline-start: 0; 58 | } 59 | .pronamic-pay-redirect-container input[type=submit], 60 | .pronamic-pay-redirect-container select { 61 | padding: 10px 20px; 62 | } 63 | .pronamic-pay-redirect-container input[type=submit] { 64 | background: #2271b1; 65 | border: none; 66 | border-radius: 3px; 67 | color: #fff; 68 | cursor: pointer; 69 | font-size: 1.25em; 70 | font-weight: 300; 71 | letter-spacing: 0.05rem; 72 | white-space: normal; 73 | } 74 | .pronamic-pay-redirect-container input[type=submit]:hover { 75 | background-color: #135e96; 76 | } 77 | @media (max-width: 600px) { 78 | .pronamic-pay-redirect-container input[type=submit] { 79 | font-size: 3.5vw; 80 | } 81 | } 82 | 83 | hr { 84 | background: #c3c3c3; 85 | border: 0; 86 | margin: 2em auto; 87 | width: 60%; 88 | height: 1px; 89 | } 90 | 91 | #pronamic_ideal_form label { 92 | display: block; 93 | font-weight: bold; 94 | margin-bottom: 0.5em; 95 | } 96 | #pronamic_ideal_form p .pronamic-pay-btn { 97 | margin-top: 0.5em; 98 | } 99 | 100 | .alignleft { 101 | text-align: left; 102 | } 103 | 104 | /*# sourceMappingURL=redirect.css.map */ 105 | -------------------------------------------------------------------------------- /css/redirect.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sourceRoot":"","sources":["../scss/redirect.scss"],"names":[],"mappings":"AAaA;EACC,YAX8B;EAa9B;;;AAGD;EACC;EAEA;;;AAGD;EACC,YAvB8B;EAyB9B;EACA;EAEA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC,OArCU;;AAyCV;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMJ;AAAA;EAEC;;AAGD;EACC,YAnFmC;EAoFnC;EACA;EACA,OA/FM;EAgGN;EACA;EACA;EACA;EACA;;AAEA;EACC,kBA7FwC;;AAiG1C;EACC;IACC;;;;AAKH;EACC,YA/GY;EAiHZ;EAEA;EAEA;EACA;;;AAIA;EACC;EAEA;EAEA;;AAIA;EACC;;;AAKH;EACC","file":"redirect.css"} -------------------------------------------------------------------------------- /css/redirect.min.css: -------------------------------------------------------------------------------- 1 | body{background:#f6f6f6;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.pronamic-pay-redirect-page{margin:0 auto;max-width:750px}.pronamic-pay-redirect-container{background:#f6f6f6;margin:30px auto;padding:20px;text-align:center}.pronamic-pay-redirect-container h1{margin:0}.pronamic-pay-redirect-container:after{clear:both;content:"";display:table}.pronamic-pay-redirect-container>p{color:#777}.pronamic-pay-redirect-container .pp-page-section-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper{background:#fff;border-radius:20px;-webkit-box-shadow:0 0 20px rgba(0,0,0,.1);box-shadow:0 0 20px rgba(0,0,0,.1);color:#333;max-width:600px;margin:3em auto 0;padding:40px}.pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper h2{margin-top:0}.pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dd,.pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dt{float:left;padding-bottom:5px}.pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dt{-ms-flex-preferred-size:30%;flex-basis:30%;font-weight:700}.pronamic-pay-redirect-container .pp-page-section-container .pp-page-section-wrapper dl dd{-ms-flex-preferred-size:70%;flex-basis:70%;-webkit-margin-start:0;margin-inline-start:0}.pronamic-pay-redirect-container input[type=submit],.pronamic-pay-redirect-container select{padding:10px 20px}.pronamic-pay-redirect-container input[type=submit]{background:#2271b1;border:none;border-radius:3px;color:#fff;cursor:pointer;font-size:1.25em;font-weight:300;letter-spacing:.05rem}.pronamic-pay-redirect-container input[type=submit]:hover{background-color:#135e96}hr{background:#c3c3c3;border:0;margin:2em auto;width:60%;height:1px}#pronamic_ideal_form label{display:block;font-weight:700;margin-bottom:.5em}#pronamic_ideal_form p .pronamic-pay-btn{margin-top:.5em}.alignleft{text-align:left} 2 | -------------------------------------------------------------------------------- /fonts/dist/pronamic-pay-icons.css: -------------------------------------------------------------------------------- 1 | /* Generated by grunt-webfont */ 2 | 3 | 4 | 5 | @font-face { 6 | font-family:"Pronamic Pay Icons"; 7 | src:url("pronamic-pay-icons.eot?90e24a9302e93ce8bcdcfcae23956ece"); 8 | src:url("pronamic-pay-icons.eot?90e24a9302e93ce8bcdcfcae23956ece#iefix") format("embedded-opentype"), 9 | url("pronamic-pay-icons.woff2?90e24a9302e93ce8bcdcfcae23956ece") format("woff2"), 10 | url("pronamic-pay-icons.woff?90e24a9302e93ce8bcdcfcae23956ece") format("woff"), 11 | url("pronamic-pay-icons.ttf?90e24a9302e93ce8bcdcfcae23956ece") format("truetype"), 12 | url("pronamic-pay-icons.svg?90e24a9302e93ce8bcdcfcae23956ece#pronamic-pay-icons") format("svg"); 13 | font-weight:normal; 14 | font-style:normal; 15 | } 16 | 17 | .pronamic-pay-icon { 18 | 19 | font-family:"Pronamic Pay Icons"; 20 | 21 | display:inline-block; 22 | line-height:1; 23 | font-weight:normal; 24 | font-style:normal; 25 | speak:none; 26 | text-decoration:inherit; 27 | text-transform:none; 28 | text-rendering:auto; 29 | -webkit-font-smoothing:antialiased; 30 | -moz-osx-font-smoothing:grayscale; 31 | } 32 | 33 | 34 | /* Icons */ 35 | 36 | 37 | .pronamic-pay-icon-ideal:before { 38 | content:"\f101"; 39 | } 40 | 41 | 42 | .pronamic-pay-icon-pay:before { 43 | content:"\f102"; 44 | } 45 | 46 | 47 | .pronamic-pay-icon-pronamic:before { 48 | content:"\f103"; 49 | } 50 | 51 | 52 | .pronamic-pay-icon-question-mark:before { 53 | content:"\f104"; 54 | } 55 | 56 | 57 | .pronamic-pay-icon-recurring:before { 58 | content:"\f105"; 59 | } 60 | 61 | 62 | .pronamic-pay-icon-status-cancelled:before { 63 | content:"\f106"; 64 | } 65 | 66 | 67 | .pronamic-pay-icon-status-completed:before { 68 | content:"\f107"; 69 | } 70 | 71 | 72 | .pronamic-pay-icon-status-failed:before { 73 | content:"\f108"; 74 | } 75 | 76 | 77 | .pronamic-pay-icon-status-on-hold:before { 78 | content:"\f109"; 79 | } 80 | 81 | 82 | .pronamic-pay-icon-status-pending:before { 83 | content:"\f10a"; 84 | } 85 | 86 | 87 | .pronamic-pay-icon-status-processing:before { 88 | content:"\f10b"; 89 | } 90 | 91 | 92 | .pronamic-pay-icon-status-refunded:before { 93 | content:"\f10c"; 94 | } 95 | -------------------------------------------------------------------------------- /fonts/dist/pronamic-pay-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pronamic/wp-pay-core/f1f6f9cb194de941c2563373207c4110cfd169d7/fonts/dist/pronamic-pay-icons.eot -------------------------------------------------------------------------------- /fonts/dist/pronamic-pay-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pronamic/wp-pay-core/f1f6f9cb194de941c2563373207c4110cfd169d7/fonts/dist/pronamic-pay-icons.ttf -------------------------------------------------------------------------------- /fonts/dist/pronamic-pay-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pronamic/wp-pay-core/f1f6f9cb194de941c2563373207c4110cfd169d7/fonts/dist/pronamic-pay-icons.woff -------------------------------------------------------------------------------- /fonts/dist/pronamic-pay-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pronamic/wp-pay-core/f1f6f9cb194de941c2563373207c4110cfd169d7/fonts/dist/pronamic-pay-icons.woff2 -------------------------------------------------------------------------------- /images/dist/cards/abn-amro/card-abn-amro-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/abn-amro/card-abn-amro-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/american-express/card-american-express-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/asn-bank/card-asn-bank-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/bunq/card-bunq-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/carta-si/card-carta-si-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/carta-si/card-carta-si-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/carte-bleue/card-carte-bleue-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/carte-bleue/card-carte-bleue-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/dankort/card-dankort-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/dankort/card-dankort-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/diners-club/card-diners-club-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/discover/card-discover-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/discover/card-discover-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/handelsbanken/card-handelsbanken-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/jcb/card-jcb-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/jcb/card-jcb-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/knab/card-knab-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/knab/card-knab-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/maestro/card-maestro-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/maestro/card-maestro-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/mastercard/card-mastercard-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/rabobank/card-rabobank-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/regiobank/card-regiobank-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/sns/card-sns-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/unionpay/card-unionpay-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/van-lanschot/card-van-lanschot-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/visa/card-visa-background-480x270.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/cards/visa/card-visa-logo-_x80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/wp-pay-512.pngquant-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pronamic/wp-pay-core/f1f6f9cb194de941c2563373207c4110cfd169d7/images/dist/wp-pay-512.pngquant-min.png -------------------------------------------------------------------------------- /images/dist/wp-pay-white-512.pngquant-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pronamic/wp-pay-core/f1f6f9cb194de941c2563373207c4110cfd169d7/images/dist/wp-pay-white-512.pngquant-min.png -------------------------------------------------------------------------------- /images/dist/wp-pay-white.svgo-min.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/wp-pay-wp-admin-fresh-base.svgo-min.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/dist/wp-pay.svgo-min.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /js/dist/admin-cb.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Clipboard feature. 3 | * 4 | * Please note: this file deliberately does not have `clipboard.js` in its name, as this would 5 | * cause the WordPress Plugin Review Team to think that https://clipboardjs.com/ is included with 6 | * the plugin. 7 | * 8 | * @link https://github.com/pronamic/wp-pay-core/issues/209 9 | * 10 | * @link https://github.com/WordPress/WordPress/blob/68e3310c024d7fceb84a5028e955ad163de6bd45/wp-includes/js/plupload/handlers.js#L364-L393 11 | * @link https://translate.wordpress.org/projects/wp/dev/nl/default/?filters%5Bstatus%5D=either&filters%5Boriginal_id%5D=10763746&filters%5Btranslation_id%5D=91929960 12 | * @link https://translate.wordpress.org/projects/wp/dev/nl/default/?filters%5Bstatus%5D=either&filters%5Boriginal_id%5D=6831324&filters%5Btranslation_id%5D=58732256 13 | */ 14 | addEventListener( 'DOMContentLoaded', function () { 15 | const elements = document.querySelectorAll( '.pronamic-pay-clipboard' ); 16 | 17 | elements.forEach( function ( element ) { 18 | var clipboard = new ClipboardJS( element ), 19 | successTimeout; 20 | 21 | clipboard.on( 'success', function( event ) { 22 | var triggerElement = jQuery( event.trigger ), 23 | successElement = jQuery( '.success', triggerElement.closest( '.pronamic-pay-action-link-clipboard' ) ); 24 | 25 | event.clearSelection(); 26 | 27 | clearTimeout( successTimeout ); 28 | 29 | successElement.removeClass( 'hidden' ); 30 | 31 | successTimeout = setTimeout( function() { 32 | successElement.addClass( 'hidden' ); 33 | }, 3000 ); 34 | } ); 35 | } ); 36 | } ); 37 | -------------------------------------------------------------------------------- /js/dist/admin-cb.min.js: -------------------------------------------------------------------------------- 1 | addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(".pronamic-pay-clipboard").forEach((function(e){var n;new ClipboardJS(e).on("success",(function(e){var o=jQuery(e.trigger),c=jQuery(".success",o.closest(".pronamic-pay-action-link-clipboard"));e.clearSelection(),clearTimeout(n),c.removeClass("hidden"),n=setTimeout((function(){c.addClass("hidden")}),3e3)}))}))})); -------------------------------------------------------------------------------- /js/dist/admin-test.js: -------------------------------------------------------------------------------- 1 | jQuery( document ).ready( function( $ ) { 2 | // Interval label. 3 | function set_interval_label() { 4 | var text = $( '#pronamic_pay_test_repeat_frequency :selected' ).data( 'interval-suffix' ); 5 | 6 | $( '#pronamic_pay_test_repeat_interval_suffix' ).text( text ); 7 | } 8 | 9 | $( '#pronamic_pay_test_repeat_frequency' ).change( function() { set_interval_label(); } ); 10 | 11 | set_interval_label(); 12 | 13 | // Ends on value. 14 | $( 'label[for^="pronamic_pay_ends_"] input' ).focus( function () { 15 | var radio_id = $( this ).parents( 'label' ).attr( 'for' ); 16 | 17 | $( '#' + radio_id ).prop( 'checked', true ); 18 | } ); 19 | } ); 20 | -------------------------------------------------------------------------------- /js/dist/admin-test.min.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready((function(e){function t(){var t=e("#pronamic_pay_test_repeat_frequency :selected").data("interval-suffix");e("#pronamic_pay_test_repeat_interval_suffix").text(t)}e("#pronamic_pay_test_repeat_frequency").change((function(){t()})),t(),e('label[for^="pronamic_pay_ends_"] input').focus((function(){var t=e(this).parents("label").attr("for");e("#"+t).prop("checked",!0)}))})); -------------------------------------------------------------------------------- /js/dist/admin-tour.js: -------------------------------------------------------------------------------- 1 | /* global pronamicPayAdminTour */ 2 | jQuery( document ).ready( function( $ ) { 3 | $.each( pronamicPayAdminTour.pointers, function() { 4 | var pointer = this; 5 | 6 | var options = $.extend( pointer.options, { 7 | buttons: function() { 8 | return false; 9 | } 10 | } ); 11 | 12 | $( pointer.selector ).first().pointer( options ).pointer( 'open' ); 13 | } ); 14 | } ); 15 | -------------------------------------------------------------------------------- /js/dist/admin-tour.min.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready((function(n){n.each(pronamicPayAdminTour.pointers,(function(){var t=n.extend(this.options,{buttons:function(){return!1}});n(this.selector).first().pointer(t).pointer("open")}))})); -------------------------------------------------------------------------------- /js/dist/subscription-mandate.js: -------------------------------------------------------------------------------- 1 | jQuery( document ).ready( function () { 2 | var $slider = jQuery( '.pp-card-slider' ).slick( { 3 | dots: true, 4 | arrows: false, 5 | infinite: false, 6 | slidesToShow: 1, 7 | centerMode: true, 8 | } ); 9 | 10 | $slider.find( '.slick-current input[type="radio"]' ).prop( 'checked', true ); 11 | 12 | $slider.find( '.slick-slide' ).on( 'click', function () { 13 | var index = jQuery( this ).data( 'slick-index' ); 14 | 15 | $slider.slick( 'slickGoTo', index ); 16 | } ); 17 | 18 | $slider.on( 'afterChange', function ( event, slick, currentSlide ) { 19 | $slider.find( 'input[type="radio"]' ).prop( 'checked', false ); 20 | 21 | $slider.find( '.slick-slide' ).eq( currentSlide ).find( 'input[type="radio"]' ).prop( 'checked', true ); 22 | } ); 23 | } ); 24 | -------------------------------------------------------------------------------- /js/dist/subscription-mandate.min.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready((function(){var i=jQuery(".pp-card-slider").slick({dots:!0,arrows:!1,infinite:!1,slidesToShow:1,centerMode:!0});i.find('.slick-current input[type="radio"]').prop("checked",!0),i.find(".slick-slide").on("click",(function(){var e=jQuery(this).data("slick-index");i.slick("slickGoTo",e)})),i.on("afterChange",(function(e,n,c){i.find('input[type="radio"]').prop("checked",!1),i.find(".slick-slide").eq(c).find('input[type="radio"]').prop("checked",!0)}))})); -------------------------------------------------------------------------------- /json-schemas/payment.json: -------------------------------------------------------------------------------- 1 | { 2 | "$id": "https://github.com/pronamic/wp-pay-core/blob/master/json-schemas/payment.json", 3 | "$schema": "http://json-schema.org/draft-07/schema#", 4 | "title": "Pronamic Pay payment.", 5 | "type": "object", 6 | "required": [] 7 | } 8 | -------------------------------------------------------------------------------- /pronamic-pay-core.php: -------------------------------------------------------------------------------- 1 | 22 | * @copyright 2005-2024 Pronamic 23 | * @license GPL-3.0-or-later 24 | * @package Pronamic\WordPress\Pay 25 | */ 26 | 27 | if ( ! defined( 'ABSPATH' ) ) { 28 | exit; 29 | } 30 | 31 | /** 32 | * Autoload. 33 | */ 34 | require_once __DIR__ . '/vendor/autoload_packages.php'; 35 | 36 | /** 37 | * Bootstrap. 38 | */ 39 | add_filter( 40 | 'pronamic_pay_modules', 41 | function ( $modules ) { 42 | $modules[] = 'forms'; 43 | $modules[] = 'subscriptions'; 44 | 45 | return $modules; 46 | } 47 | ); 48 | 49 | \Pronamic\WordPress\Pay\Plugin::instance( 50 | [ 51 | 'file' => __FILE__, 52 | 'action_scheduler' => __DIR__ . '/vendor/woocommerce/action-scheduler/action-scheduler.php', 53 | ] 54 | ); 55 | 56 | \Pronamic\WordPress\Pay\LicenseManager::instance(); 57 | -------------------------------------------------------------------------------- /src/AbstractPluginIntegration.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay\Gateways\Common 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay; 12 | 13 | use Pronamic\WordPress\Pay\Dependencies\Dependencies; 14 | use Pronamic\WordPress\Pay\Upgrades\Upgrades; 15 | 16 | /** 17 | * Title: Abstract plugin integration 18 | * Description: 19 | * Copyright: 2005-2024 Pronamic 20 | * Company: Pronamic 21 | * 22 | * @author Remco Tolsma 23 | * @version 2.2.6 24 | * @since 1.0.0 25 | * @link https://github.com/thephpleague/omnipay-common/blob/master/src/Omnipay/Common/AbstractGateway.php 26 | */ 27 | abstract class AbstractPluginIntegration extends AbstractIntegration { 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/ActionSchedulerController.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay; 12 | 13 | /** 14 | * Action Scheduler Controller class 15 | */ 16 | class ActionSchedulerController { 17 | /** 18 | * Setup. 19 | * 20 | * @return void 21 | */ 22 | public function setup() { 23 | \add_action( 'action_scheduler_begin_execute', [ $this, 'begin_execute' ], 10, 2 ); 24 | } 25 | 26 | /** 27 | * Action scheduler begin execute. 28 | * 29 | * @link https://github.com/woocommerce/action-scheduler/blob/3.7.1/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php#L84 30 | * @param int $action_id Action ID. 31 | * @param string $context Context. 32 | * @return void 33 | */ 34 | public function begin_execute( $action_id, $context ) { 35 | if ( \defined( 'PRONAMIC_ACTION_SCHEDULER_CONTEXT' ) ) { 36 | return; 37 | } 38 | 39 | \define( 'PRONAMIC_ACTION_SCHEDULER_CONTEXT', $context ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Admin/AdminDashboard.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay\Admin 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Admin; 12 | 13 | use Pronamic\WordPress\Pay\Plugin; 14 | 15 | /** 16 | * WordPress admin dashboard 17 | * 18 | * @author Remco Tolsma 19 | * @version 2.2.6 20 | * @since 3.7.0 21 | */ 22 | class AdminDashboard { 23 | /** 24 | * Construct admin dashboard. 25 | * 26 | * @link https://github.com/WordImpress/Give/blob/1.1/includes/admin/dashboard-widgets.php 27 | * @link https://github.com/woothemes/woocommerce/blob/2.3.13/includes/admin/class-wc-admin.php 28 | * @link https://github.com/woothemes/woocommerce/blob/2.3.13/includes/admin/class-wc-admin-dashboard.php 29 | */ 30 | public function __construct() { 31 | // Actions. 32 | add_action( 'wp_dashboard_setup', [ $this, 'setup' ] ); 33 | } 34 | 35 | /** 36 | * Setup. 37 | * 38 | * @link https://developer.wordpress.org/reference/functions/wp_add_dashboard_widget/ 39 | * @return void 40 | */ 41 | public function setup() { 42 | /** 43 | * Currently we only add dashboard widgets if the 44 | * current user can manage options. 45 | */ 46 | if ( ! current_user_can( 'manage_options' ) ) { 47 | return; 48 | } 49 | 50 | /** 51 | * The `wp_add_dashboard_widget` function should exist at 52 | * this point. To make tools like Psalm happy we do check 53 | * if the function exists. 54 | */ 55 | if ( ! function_exists( 'wp_add_dashboard_widget' ) ) { 56 | return; 57 | } 58 | 59 | /** 60 | * Ok, add the dashboard widget. 61 | */ 62 | wp_add_dashboard_widget( 63 | 'pronamic_pay_dashboard_status', 64 | __( 'Pronamic Pay Status', 'pronamic_ideal' ), 65 | [ $this, 'status_widget' ] 66 | ); 67 | } 68 | 69 | /** 70 | * Status widget. 71 | * 72 | * @return void 73 | */ 74 | public function status_widget() { 75 | include __DIR__ . '/../../views/widget-payments-status-list.php'; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/Admin/AdminNotification.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay\Admin 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Admin; 12 | 13 | use Pronamic\WordPress\Pay\Plugin; 14 | 15 | /** 16 | * WordPress admin notification. 17 | * 18 | * @author Remco Tolsma 19 | * @version 2.2.6 20 | * @since 3.7.0 21 | */ 22 | class AdminNotification { 23 | /** 24 | * ID. 25 | * 26 | * @var string 27 | */ 28 | private $id; 29 | 30 | /** 31 | * Name. 32 | * 33 | * @var string 34 | */ 35 | private $name; 36 | 37 | /** 38 | * Condition. 39 | * 40 | * @var bool 41 | */ 42 | private $condition; 43 | 44 | /** 45 | * Version. 46 | * 47 | * @var string 48 | */ 49 | private $version; 50 | 51 | /** 52 | * Constructs and initializes an notices object. 53 | * 54 | * @link https://github.com/woothemes/woocommerce/blob/2.4.3/includes/admin/class-wc-admin-notices.php 55 | * @param string $id ID. 56 | * @param string $name Name. 57 | * @param bool $condition Condition. 58 | * @param string $version Version. 59 | */ 60 | public function __construct( $id, $name, $condition, $version ) { 61 | $this->id = $id; 62 | $this->name = $name; 63 | $this->condition = $condition; 64 | $this->version = $version; 65 | } 66 | 67 | /** 68 | * Get ID. 69 | * 70 | * @return string 71 | */ 72 | public function get_id() { 73 | return $this->id; 74 | } 75 | 76 | /** 77 | * Get name. 78 | * 79 | * @return string 80 | */ 81 | public function get_name() { 82 | return $this->name; 83 | } 84 | 85 | /** 86 | * Is met. 87 | * 88 | * @return bool 89 | */ 90 | public function is_met() { 91 | return $this->condition; 92 | } 93 | 94 | /** 95 | * Get version. 96 | * 97 | * @return string 98 | */ 99 | public function get_version() { 100 | return $this->version; 101 | } 102 | 103 | /** 104 | * Get message. 105 | * 106 | * @return string 107 | */ 108 | public function get_message() { 109 | $message = \sprintf( 110 | 'We notice that the "%1$s" plugin is active, support for the "%1$s" plugin has been removed from the Pronamic Pay plugin since version %2$s.', 111 | $this->get_name(), 112 | $this->get_version() 113 | ); 114 | 115 | return $message; 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /src/Banks/BankTransferDetails.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Banks; 12 | 13 | /** 14 | * Bank transfer details 15 | * 16 | * @author Reüel van der Steege 17 | * @since 2.2.6 18 | * @version 2.2.6 19 | */ 20 | class BankTransferDetails { 21 | /** 22 | * Bank account details. 23 | * 24 | * @var BankAccountDetails|null 25 | */ 26 | private $bank_account; 27 | 28 | /** 29 | * Reference. 30 | * 31 | * @var string|null 32 | */ 33 | private $reference; 34 | 35 | /** 36 | * Get bank account. 37 | * 38 | * @return BankAccountDetails|null 39 | */ 40 | public function get_bank_account() { 41 | return $this->bank_account; 42 | } 43 | 44 | /** 45 | * Set bank account. 46 | * 47 | * @param BankAccountDetails|null $bank_account Bank account. 48 | * @return void 49 | */ 50 | public function set_bank_account( $bank_account ) { 51 | $this->bank_account = $bank_account; 52 | } 53 | 54 | /** 55 | * Get reference. 56 | * 57 | * @return string|null 58 | */ 59 | public function get_reference() { 60 | return $this->reference; 61 | } 62 | 63 | /** 64 | * Set reference. 65 | * 66 | * @param string|null $reference Reference. 67 | * @return void 68 | */ 69 | public function set_reference( $reference ) { 70 | $this->reference = $reference; 71 | } 72 | 73 | /** 74 | * Get JSON. 75 | * 76 | * @return object|null 77 | */ 78 | public function get_json() { 79 | $data = []; 80 | 81 | // Bank account. 82 | $bank_account = $this->get_bank_account(); 83 | 84 | if ( null !== $bank_account ) { 85 | $data['bank_account'] = $bank_account->get_json(); 86 | } 87 | 88 | // Reference. 89 | $data['reference'] = $this->get_reference(); 90 | 91 | $data = array_filter( $data ); 92 | 93 | if ( empty( $data ) ) { 94 | return null; 95 | } 96 | 97 | return (object) $data; 98 | } 99 | 100 | /** 101 | * Create bank account details from object. 102 | * 103 | * @param mixed $json JSON. 104 | * @param BankTransferDetails|null $bank_transfer_details Bank account details. 105 | * 106 | * @return BankTransferDetails 107 | * 108 | * @throws \InvalidArgumentException Throws invalid argument exception when JSON is not an object. 109 | */ 110 | public static function from_json( $json, $bank_transfer_details = null ) { 111 | if ( ! is_object( $json ) ) { 112 | throw new \InvalidArgumentException( 'JSON value must be an object.' ); 113 | } 114 | 115 | if ( null === $bank_transfer_details ) { 116 | $bank_transfer_details = new self(); 117 | } 118 | 119 | if ( isset( $json->bank_account ) ) { 120 | $bank_transfer_details->set_bank_account( BankAccountDetails::from_json( $json->bank_account ) ); 121 | } 122 | 123 | if ( isset( $json->reference ) ) { 124 | $bank_transfer_details->set_reference( $json->reference ); 125 | } 126 | 127 | return $bank_transfer_details; 128 | } 129 | 130 | /** 131 | * Create an string representation of this object 132 | * 133 | * @return string 134 | */ 135 | public function __toString() { 136 | $pieces = [ 137 | $this->get_bank_account(), 138 | $this->get_reference(), 139 | ]; 140 | 141 | $pieces = array_map( 'strval', $pieces ); 142 | 143 | $pieces = array_map( 'trim', $pieces ); 144 | 145 | $pieces = array_filter( $pieces ); 146 | 147 | $string = implode( PHP_EOL, $pieces ); 148 | 149 | return $string; 150 | } 151 | } 152 | -------------------------------------------------------------------------------- /src/Blocks/BlocksModule.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Blocks; 12 | 13 | use Pronamic\WordPress\Number\Number; 14 | use Pronamic\WordPress\Number\Parser as NumberParser; 15 | use Pronamic\WordPress\Money\Money; 16 | use Pronamic\WordPress\Pay\Forms\FormsSource; 17 | use Pronamic\WordPress\Pay\Payments\Payment; 18 | use Pronamic\WordPress\Pay\Plugin; 19 | use WP_Error; 20 | 21 | /** 22 | * Blocks 23 | * 24 | * @author Reüel van der Steege 25 | * @since 2.5.0 26 | * @version 2.1.7 27 | */ 28 | class BlocksModule { 29 | /** 30 | * Setup. 31 | * 32 | * @return void 33 | */ 34 | public function setup() { 35 | global $wp_version; 36 | 37 | add_filter( 'block_categories_all', [ $this, 'block_categories' ], 10 ); 38 | 39 | if ( \version_compare( $wp_version, '5.8', '<' ) ) { 40 | add_filter( 'block_categories', [ $this, 'block_categories' ], 10 ); 41 | } 42 | } 43 | 44 | /** 45 | * Block categories. 46 | * 47 | * @param array $categories Block categories. 48 | * @return array 49 | */ 50 | public function block_categories( $categories ) { 51 | $categories[] = [ 52 | 'slug' => 'pronamic-pay', 53 | 'title' => \__( 'Pronamic Pay', 'pronamic_ideal' ), 54 | 'icon' => null, 55 | ]; 56 | 57 | return $categories; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/Core/GatewayConfig.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay\Core 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Core; 12 | 13 | /** 14 | * Title: Gateway config 15 | * Description: 16 | * Copyright: 2005-2024 Pronamic 17 | * Company: Pronamic 18 | * 19 | * @author Remco Tolsma 20 | * @version 2.0.8 21 | * @since 1.0.0 22 | */ 23 | abstract class GatewayConfig { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/Core/IdTrait.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay\Privacy 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Core; 12 | 13 | /** 14 | * Id Trait 15 | * 16 | * @author Remco Tolsma 17 | * @version 2.5.0 18 | * @since 2.5.0 19 | * @link https://github.com/search?q=%22trait+IdTrait%22+language%3APHP&type=Code 20 | */ 21 | trait IdTrait { 22 | /** 23 | * ID. 24 | * 25 | * @var string|null 26 | */ 27 | private $id; 28 | 29 | /** 30 | * Get the ID. 31 | * 32 | * @return int|null 33 | */ 34 | public function get_id() { 35 | return $this->id; 36 | } 37 | 38 | /** 39 | * Set the ID. 40 | * 41 | * @param int $id Unique ID. 42 | * @return void 43 | */ 44 | public function set_id( $id ) { 45 | $this->id = $id; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Core/ModeTrait.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay\Privacy 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Core; 12 | 13 | /** 14 | * Mode Trait 15 | * 16 | * @author Remco Tolsma 17 | * @version 2.5.0 18 | * @since 2.5.0 19 | * @link https://github.com/search?q=%22trait+VersionTrait%22+language%3APHP&type=Code 20 | */ 21 | trait ModeTrait { 22 | /** 23 | * Mode. 24 | * 25 | * @var string 26 | */ 27 | protected $mode = 'live'; 28 | 29 | /** 30 | * Set mode. 31 | * 32 | * @param string $mode Mode. 33 | * @return void 34 | * @throws \InvalidArgumentException Throws invalid argument exception when mode is not a string or not one of the mode constants. 35 | */ 36 | public function set_mode( $mode ) { 37 | if ( ! is_string( $mode ) ) { 38 | throw new \InvalidArgumentException( 'Mode must be a string.' ); 39 | } 40 | 41 | if ( ! in_array( $mode, [ Gateway::MODE_TEST, Gateway::MODE_LIVE ], true ) ) { 42 | throw new \InvalidArgumentException( 'Invalid mode.' ); 43 | } 44 | 45 | $this->mode = $mode; 46 | } 47 | 48 | /** 49 | * Get mode. 50 | * 51 | * @return string 52 | */ 53 | public function get_mode() { 54 | return $this->mode; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/Core/PaymentMethod.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2005-2024 Pronamic 7 | * @license GPL-3.0-or-later 8 | * @package Pronamic\WordPress\Pay\Core 9 | */ 10 | 11 | namespace Pronamic\WordPress\Pay\Core; 12 | 13 | use Pronamic\WordPress\Pay\Fields\Field; 14 | 15 | /** 16 | * Payment method class 17 | */ 18 | class PaymentMethod { 19 | /** 20 | * ID. 21 | * 22 | * @var string 23 | */ 24 | private $id; 25 | 26 | /** 27 | * Name. 28 | * 29 | * @var string 30 | */ 31 | public $name; 32 | 33 | /** 34 | * Descriptions. 35 | * 36 | * @var array