You are here

public function PaymentReferenceBase::pay in Payment 8.2

Implements form submit handler.

File

src/Element/PaymentReferenceBase.php, line 456

Class

PaymentReferenceBase
Provides a base for payment reference elements.

Namespace

Drupal\payment\Element

Code

public function pay(array $form, FormStateInterface $form_state) {
  $triggering_element = $form_state
    ->getTriggeringElement();
  $root_element_parents = array_slice($triggering_element['#array_parents'], 0, -3);
  $root_element = NestedArray::getValue($form, $root_element_parents);
  $plugin_selector = $this
    ->getPluginSelector($root_element, $form_state);
  $plugin_selector
    ->submitSelectorForm($root_element['container']['payment_form']['payment_method'], $form_state);
  $payment = $this
    ->getPayment($root_element, $form_state);
  $this
    ->getEntityFormDisplay($root_element, $form_state)
    ->extractFormValues($payment, $root_element['container']['payment_form'], $form_state);
  $payment_method = $plugin_selector
    ->getSelectedPlugin();
  $payment
    ->setPaymentMethod($payment_method);
  $payment
    ->save();
  $result = $payment
    ->execute();
  if (!$result
    ->isCompleted() && !$this->requestStack
    ->getCurrentRequest()
    ->isXmlHttpRequest()) {
    $url = $payment
      ->toUrl('complete');
    $url
      ->setOption('attributes', [
      'target' => '_blank',
    ]);
    $link = $this->linkGenerator
      ->generate($this
      ->t('Complete payment (opens in a new window).'), $url);
    $this
      ->messenger()
      ->addMessage($link);
  }
  $form_state
    ->setRebuild();
}