diff --git a/modules/payment/src/Form/PaymentAddForm.php b/modules/payment/src/Form/PaymentAddForm.php index 1e896522..db318885 100644 --- a/modules/payment/src/Form/PaymentAddForm.php +++ b/modules/payment/src/Form/PaymentAddForm.php @@ -138,53 +138,24 @@ class PaymentAddForm extends FormBase implements ContainerInjectionInterface { ], ]; - if ($this->order->getCustomerId() && $selected_payment_gateway->getPlugin() instanceof SupportsStoredPaymentMethodsInterface) { - /** @var \Drupal\commerce_payment\PaymentMethodStorageInterface $payment_method_storage */ - $payment_method_storage = $this->entityTypeManager->getStorage('commerce_payment_method'); - $billing_countries = $this->order->getStore()->getBillingCountries(); - $payment_methods = $payment_method_storage->loadReusable($this->order->getCustomer(), $selected_payment_gateway, $billing_countries); - if (!empty($payment_methods)) { - $selected_payment_method = reset($payment_methods); - $payment_method_options = []; - foreach ($payment_methods as $id => $payment_method) { - $payment_method_options[$id] = $payment_method->label(); - if ($payment_method->isDefault()) { - $selected_payment_method = $payment_method; - } + /** @var \Drupal\commerce_payment\PaymentMethodStorageInterface $payment_method_storage */ + $payment_method_storage = $this->entityTypeManager->getStorage('commerce_payment_method'); + $billing_countries = $this->order->getStore()->getBillingCountries(); + $payment_methods = $payment_method_storage->loadReusable($this->order->getCustomer(), $selected_payment_gateway, $billing_countries); + if (!empty($payment_methods)) { + $selected_payment_method = reset($payment_methods); + $payment_method_options = []; + foreach ($payment_methods as $id => $payment_method) { + $payment_method_options[$id] = $payment_method->label(); + if ($payment_method->isDefault()) { + $selected_payment_method = $payment_method; } - - $form['payment_method'] = [ - '#type' => 'radios', - '#title' => $this->t('Payment method'), - '#options' => $payment_method_options, - '#default_value' => $selected_payment_method->id(), - '#required' => TRUE, - '#after_build' => [ - [get_class($this), 'clearValue'], - ], - ]; - } - else { - $form['payment_method'] = [ - '#type' => 'markup', - '#markup' => $this->t('There are no reusable payment methods available for the selected gateway.'), - ]; - // Don't allow the form to be submitted. - return $form; - } - } - else { - /** @var \Drupal\commerce_payment\Plugin\Commerce\PaymentMethodType\PaymentMethodTypeInterface[] $methodTypes */ - $methodTypes = $selected_payment_gateway->getPlugin()->getPaymentMethodTypes(); - $method_type_options = []; - foreach ($methodTypes as $methodType) { - $method_type_options[$methodType->getPluginId()] = $methodType->getLabel(); } - $form['payment_method_type'] = [ + $form['payment_method'] = [ '#type' => 'radios', - '#title' => $this->t('Payment type'), - '#options' => $method_type_options, - '#default_value' => reset($methodTypes)->getPluginId(), + '#title' => $this->t('Payment method'), + '#options' => $payment_method_options, + '#default_value' => $selected_payment_method->id(), '#required' => TRUE, '#after_build' => [ [get_class($this), 'clearValue'], @@ -198,6 +169,13 @@ class PaymentAddForm extends FormBase implements ContainerInjectionInterface { '#button_type' => 'primary', ]; + if ($selected_payment_gateway->getPlugin() instanceof SupportsStoredPaymentMethodsInterface) { + $form['actions']['new_payment_method'] = [ + '#type' => 'submit', + '#value' => $this->t('New Payment Method'), + ]; + } + return $form; } @@ -295,8 +273,9 @@ class PaymentAddForm extends FormBase implements ContainerInjectionInterface { */ public function submitForm(array &$form, FormStateInterface $form_state) { $step = $form_state->get('step'); + $triggering_element = $form_state->getTriggeringElement(); if ($step == 'payment_gateway') { - $nextStep = $this->order->getCustomerId() ? 'payment' : 'payment_method'; + $nextStep = $triggering_element['#id'] == 'edit-actions-submit' ? 'payment' : 'payment_method'; $form_state->set('step', $nextStep); $form_state->setRebuild(TRUE); }