@@ -93,30 +93,53 @@ public function give_payment_gateways( $gateways ) {
9393 if ( null === $ this ->gateways ) {
9494 $ this ->gateways = array ();
9595
96- $ classes = array (
97- 'Gateway ' ,
98- 'BancontactGateway ' ,
99- 'BankTransferGateway ' ,
100- 'CreditCardGateway ' ,
101- 'DirectDebitGateway ' ,
102- 'IDealGateway ' ,
103- 'SofortGateway ' ,
96+ // Get active and remove unsupported recurring-only payment methods.
97+ $ payment_methods = array_merge ( array ( null ), PaymentMethods::get_active_payment_methods () );
98+
99+ $ payment_methods = array_diff (
100+ $ payment_methods ,
101+ \array_keys ( PaymentMethods::get_direct_debit_methods () )
104102 );
105103
106- if ( PaymentMethods::is_active ( PaymentMethods::GULDEN ) ) {
107- $ classes [] = 'GuldenGateway ' ;
108- }
104+ // Create gateways for payment methods.
105+ foreach ( $ payment_methods as $ payment_method ) {
106+ // Gateway identifier.
107+ $ id = 'pronamic_pay ' ;
108+
109+ if ( ! empty ( $ payment_method ) ) {
110+ $ id = \sprintf ( 'pronamic_pay_%s ' , $ payment_method );
111+
112+ // Use `mister_cash` instead of `bancontact` for backwards compatibility.
113+ if ( PaymentMethods::BANCONTACT === $ payment_method ) {
114+ $ id = 'pronamic_pay_mister_cash ' ;
115+ }
116+ }
109117
110- foreach ( $ classes as $ class ) {
111- $ class = __NAMESPACE__ . '\\' . $ class ;
118+ // New gateway.
119+ $ gateway = new Gateway ( $ id , $ payment_method ) ;
112120
113- $ gateway = new $ class ();
121+ $ name = PaymentMethods::get_name ( $ payment_method , __ ( 'Pronamic ' , 'pronamic_ideal ' ) );
122+
123+ // Admin label.
124+ $ admin_label = \__ ( 'Pronamic ' , 'pronamic_ideal ' );
125+
126+ if ( null !== $ payment_method ) {
127+ $ admin_label = sprintf ( '%s - %s ' , \__ ( 'Pronamic ' , 'pronamic_ideal ' ), $ name );
128+ }
114129
115130 $ this ->gateways [ $ gateway ->id ] = array (
116- 'admin_label ' => $ gateway -> name ,
117- 'checkout_label ' => $ gateway -> name ,
131+ 'admin_label ' => $ admin_label ,
132+ 'checkout_label ' => $ name ,
118133 );
119134 }
135+
136+ // Sort gateways alphabetically.
137+ uasort (
138+ $ this ->gateways ,
139+ function ( $ a , $ b ) {
140+ return strnatcasecmp ( $ a ['admin_label ' ], $ b ['admin_label ' ] );
141+ }
142+ );
120143 }
121144
122145 return array_merge ( $ gateways , $ this ->gateways );
0 commit comments