abstract class PaymentReferenceBase in Payment 8.2
Provides a base for payment reference elements.
Modules that provide form elements that extend this class must also implement hook_entity_extra_field_info() to expose the line_items, payment_method, pay_button, and pay_link elements for the payment bundle the element plugin represents.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait- class \Drupal\Core\Render\Element\RenderElement implements ElementInterface- class \Drupal\Core\Render\Element\FormElement implements FormElementInterface- class \Drupal\payment\Element\PaymentReferenceBase implements ContainerFactoryPluginInterface, FormElementInterface uses FormElementCallbackTrait
 
 
- class \Drupal\Core\Render\Element\FormElement implements FormElementInterface
 
- class \Drupal\Core\Render\Element\RenderElement implements ElementInterface
 
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of PaymentReferenceBase
2 files declare their use of PaymentReferenceBase
- PaymentReference.php in modules/payment_reference/ src/ Element/ PaymentReference.php 
- PaymentReferenceBaseTest.php in tests/src/ Unit/ Element/ PaymentReferenceBaseTest.php 
File
- src/Element/ PaymentReferenceBase.php, line 40 
Namespace
Drupal\payment\ElementView source
abstract class PaymentReferenceBase extends FormElement implements FormElementInterface, ContainerFactoryPluginInterface {
  use FormElementCallbackTrait;
  /**
   * The number of seconds a payment should remain stored.
   */
  const KEY_VALUE_TTL = 3600;
  /**
   * The current user.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $currentUser;
  /**
   * The date formatter.
   *
   * @var \Drupal\Core\Datetime\DateFormatter
   */
  protected $dateFormatter;
  /**
   * The link generator.
   *
   * @var \Drupal\Core\Utility\LinkGeneratorInterface
   */
  protected $linkGenerator;
  /**
   * The payment method type.
   *
   * @var \Drupal\plugin\PluginType\PluginTypeInterface
   */
  protected $paymentMethodType;
  /**
   * The payment storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $paymentStorage;
  /**
   * The plugin selector manager.
   *
   * @var \Drupal\plugin\Plugin\Plugin\PluginSelector\PluginSelectorManagerInterface
   */
  protected $pluginSelectorManager;
  /**
   * The random generator.
   *
   * @var \Drupal\Component\Utility\Random
   */
  protected $random;
  /**
   * The renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;
  /**
   * The request stack.
   *
   * @var \Symfony\Component\HttpFoundation\RequestStack
   */
  protected $requestStack;
  /**
   * Creates a new instance.
   *
   * @param mixed[] $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
   * @param \Drupal\Core\Entity\EntityStorageInterface $payment_storage
   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
   * @param \Drupal\Core\Datetime\DateFormatter $date_formatter
   * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator
   * @param \Drupal\Core\Render\RendererInterface $renderer
   * @param \Drupal\Core\Session\AccountInterface $current_user
   * @param \Drupal\plugin\Plugin\Plugin\PluginSelector\PluginSelectorManagerInterface $plugin_selector_manager
   * @param \Drupal\plugin\PluginType\PluginTypeInterface $payment_method_type
   * @param \Drupal\Component\Utility\Random $random
   */
  public function __construct(array $configuration, $plugin_id, array $plugin_definition, RequestStack $request_stack, EntityStorageInterface $payment_storage, TranslationInterface $string_translation, DateFormatter $date_formatter, LinkGeneratorInterface $link_generator, RendererInterface $renderer, AccountInterface $current_user, PluginSelectorManagerInterface $plugin_selector_manager, PluginTypeInterface $payment_method_type, Random $random) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->currentUser = $current_user;
    $this->dateFormatter = $date_formatter;
    $this->linkGenerator = $link_generator;
    $this->paymentMethodType = $payment_method_type;
    $this->paymentStorage = $payment_storage;
    $this->pluginSelectorManager = $plugin_selector_manager;
    $this->random = $random;
    $this->renderer = $renderer;
    $this->requestStack = $request_stack;
    $this->stringTranslation = $string_translation;
  }
  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    $plugin_id = $this
      ->getPluginId();
    return array(
      // The ID of a payment as the (default) value. Changing the value is not
      // supported, so #default_value must be NULL if the user should be allowed
      // to select/add a payment.
      '#default_value' => NULL,
      // An array with IDs of the payment methods the payer is allowed to pay the
      // payment with, or NULL to allow all.
      '#limit_allowed_plugin_ids' => NULL,
      // The ID of the plugin selector plugin to use.
      '#plugin_selector_id' => NULL,
      '#process' => [
        [
          get_class($this),
          'instantiate#process#' . $plugin_id,
        ],
      ],
      // The payment that must be made if none are available in the queue yet. It
      // must be an instance of \Drupal\payment\Entity\PaymentInterface.
      '#prototype_payment' => NULL,
      // The ID of the queue category the element is used for. See
      // \Drupal\payment\QueueInterface::loadPaymentIds().
      '#queue_category_id' => NULL,
      // The ID of the account that must own the payment. See
      // \Drupal\payment\QueueInterface::loadPaymentIds().
      '#queue_owner_id' => NULL,
    );
  }
  /**
   * Implements form API's element_validate callback.
   */
  public function elementValidate(array &$element, FormStateInterface $form_state, array &$form) {
    $plugin_selector = $this
      ->getPluginSelector($element, $form_state);
    $plugin_selector
      ->validateSelectorForm($element['container']['payment_form']['payment_method'], $form_state);
    $entity_form_display = $this
      ->getEntityFormDisplay($element, $form_state);
    $payment = $this
      ->getPayment($element, $form_state);
    $entity_form_display
      ->extractFormValues($payment, $element['container']['payment_form'], $form_state);
    $entity_form_display
      ->validateFormValues($payment, $element['container']['payment_form'], $form_state);
  }
  /**
   * Implements form #process callback.
   */
  public function process(array &$element, FormStateInterface $form_state, array $form) {
    // Set internal configuration.
    $element['#available_payment_id'] = NULL;
    $element['#element_validate'] = [
      [
        $this,
        'elementValidate',
      ],
    ];
    $element['#theme_wrappers'] = array(
      'form_element',
    );
    $element['#tree'] = TRUE;
    // Validate the element's configuration.
    if (!is_int($element['#default_value']) && !is_null($element['#default_value'])) {
      throw new \InvalidArgumentException('#default_value must be an integer or NULL, but ' . gettype($element['#default_value']) . ' was given.');
    }
    if (!is_null($element['#limit_allowed_plugin_ids']) && !is_array($element['#limit_allowed_plugin_ids'])) {
      throw new \InvalidArgumentException('#limit_allowed_plugin_ids must be an array or NULL, but ' . gettype($element['#limit_allowed_plugin_ids']) . ' was given.');
    }
    if (!is_string($element['#queue_category_id'])) {
      throw new \InvalidArgumentException('#queue_category_id must be a string, but ' . gettype($element['#queue_category_id']) . ' was given.');
    }
    if (!is_int($element['#queue_owner_id'])) {
      throw new \InvalidArgumentException('#queue_owner_id must be an integer, but ' . gettype($element['#queue_owner_id']) . ' was given.');
    }
    if (!is_string($element['#plugin_selector_id'])) {
      throw new \InvalidArgumentException('#plugin_selector_id must be a string, but ' . gettype($element['#plugin_selector_id']) . ' was given.');
    }
    if (!$element['#prototype_payment'] instanceof PaymentInterface) {
      throw new \InvalidArgumentException('#prototype_payment must implement \\Drupal\\payment\\Entity\\PaymentInterface.');
    }
    // Find the default payment to use.
    if (!$element['#default_value']) {
      $payment_ids = $this
        ->getPaymentQueue()
        ->loadPaymentIds($element['#queue_category_id'], $element['#queue_owner_id']);
      $element['#available_payment_id'] = $payment_ids ? reset($payment_ids) : NULL;
    }
    // AJAX.
    $ajax_wrapper_id = Html::getClass('payment_reference-' . $element['#name']);
    $element['container'] = array(
      '#attached' => [
        'drupalSettings' => [
          'PaymentReferencePaymentAvailable' => [
            $ajax_wrapper_id => $element['#default_value'] || $element['#available_payment_id'],
          ],
        ],
        'library' => [
          'payment/payment_reference',
        ],
      ],
      '#id' => $ajax_wrapper_id,
      '#type' => 'container',
    );
    $element['container']['payment_form'] = $this
      ->buildPaymentForm($element, $form_state);
    $element['container']['payment_form']['#access'] = !$element['#default_value'] && !$element['#available_payment_id'];
    $element['container']['payment_view'] = $this
      ->buildPaymentView($element, $form_state);
    $element['container']['payment_view']['#access'] = $element['#default_value'] || $element['#available_payment_id'];
    $element['container']['refresh'] = $this
      ->buildRefreshButton($element, $form_state);
    return $element;
  }
  /**
   * Builds the payment form.
   *
   * @param mixed[] $element
   *   The root element.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return array
   *   A render array.
   */
  protected function buildPaymentForm(array $element, FormStateInterface $form_state) {
    $build = array(
      // Set #parents, so the entity form display does not override it.
      '#parents' => array_merge($element['#parents'], array(
        'container',
        'payment_form',
      )),
      '#type' => 'container',
    );
    $plugin_selector = $this
      ->getPluginSelector($element, $form_state);
    /** @var \Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface|null $selected_payment_method */
    $selected_payment_method = $plugin_selector
      ->getSelectedPlugin();
    $build['line_items'] = array(
      '#payment_line_items' => $this
        ->getPayment($element, $form_state),
      '#type' => 'payment_line_items_display',
    );
    $build['payment_method'] = $plugin_selector
      ->buildSelectorForm([], $form_state);
    if ($selected_payment_method && !$selected_payment_method
      ->getPaymentExecutionResult()
      ->isCompleted()) {
      $this
        ->disableChildren($build['payment_method']);
    }
    $this
      ->getEntityFormDisplay($element, $form_state)
      ->buildForm($this
      ->getPayment($element, $form_state), $build, $form_state);
    $build['pay_link'] = $this
      ->buildCompletePaymentLink($element, $form_state);
    $build['pay_link']['#access'] = !$selected_payment_method || !$selected_payment_method
      ->getPaymentExecutionResult()
      ->isCompleted();
    $build['pay_link']['#process'] = array(
      array(
        get_class($this),
        'processMaxWeight',
      ),
    );
    $plugin_id = $this
      ->getPluginId();
    $build['pay_button'] = array(
      '#ajax' => array(
        'callback' => [
          get_class(),
          'instantiate#ajaxPay#' . $plugin_id,
        ],
      ),
      '#limit_validation_errors' => array(
        array_merge($element['#parents'], array(
          'container',
          'payment_form',
        )),
      ),
      '#submit' => [
        [
          get_class(),
          'instantiate#pay#' . $plugin_id,
        ],
      ],
      '#type' => 'submit',
      '#value' => $this
        ->t('Pay'),
      '#process' => array(
        array(
          get_class($this),
          'processMaxWeight',
        ),
      ),
    );
    return $build;
  }
  /**
   * Implements form #process callback.
   */
  public static function processMaxWeight(array &$element, FormStateInterface $form_state, array $form) {
    $parent_element = NestedArray::getValue($form, array_slice($element['#array_parents'], 0, -1));
    $weights = [];
    foreach (Element::children($parent_element) as $sibling_key) {
      $weights[] = isset($parent_element[$sibling_key]['#weight']) ? $parent_element[$sibling_key]['#weight'] : 0;
    }
    $element['#weight'] = max($weights) + 1;
    return $element;
  }
  /**
   * Builds the refresh button.
   *
   * @param mixed[] $element
   *   The root element.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return array
   *   A render array.
   */
  protected function buildRefreshButton(array $element, FormStateInterface $form_state) {
    $plugin_selector = $this
      ->getPluginSelector($element, $form_state);
    $class = array(
      'payment_reference-refresh-button',
    );
    /** @var \Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface|null $selected_payment_method */
    $selected_payment_method = $plugin_selector
      ->getSelectedPlugin();
    if (!$element['#default_value'] && $element['#available_payment_id'] && (!$selected_payment_method || !$selected_payment_method
      ->getPaymentExecutionResult()
      ->isCompleted())) {
      $class[] = 'payment-reference-hidden';
    }
    $plugin_id = $this
      ->getPluginId();
    $build = array(
      '#ajax' => array(
        'callback' => [
          get_class(),
          'instantiate#ajaxRefresh#' . $plugin_id,
        ],
        'event' => 'mousedown',
        // The AJAX behavior itself does not need a wrapper, but
        // payment_reference.js does.
        'wrapper' => $element['container']['#id'],
      ),
      '#attached' => [
        'library' => [
          'payment/payment_reference',
        ],
      ],
      '#attributes' => array(
        // system.module.css's .hidden class's is overridden by button styling,
        // so this needs a custom class.
        'class' => $class,
      ),
      '#limit_validation_errors' => [],
      '#submit' => array(
        array(
          $this->pluginDefinition['class'],
          'refresh',
        ),
      ),
      '#type' => 'submit',
      '#value' => $this
        ->t('Re-check available payments'),
    );
    return $build;
  }
  /**
   * Builds the payment view.
   *
   * @param mixed[] $element
   *   The root element.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return array
   *   A render array.
   */
  protected function buildPaymentView(array $element, FormStateInterface $form_state) {
    $payment_id = $element['#default_value'] ?: $element['#available_payment_id'];
    /** @var \Drupal\payment\Entity\PaymentInterface|null $payment */
    $payment = $payment_id ? $this->paymentStorage
      ->load($payment_id) : NULL;
    $build = [];
    if ($payment) {
      $currency = $payment
        ->getCurrency();
      $status = $payment
        ->getPaymentStatus();
      $status_definition = $status
        ->getPluginDefinition();
      $build = array(
        '#empty' => $this
          ->t('There are no line items.'),
        '#header' => array(
          $this
            ->t('Amount'),
          $this
            ->t('Status'),
          $this
            ->t('Last updated'),
        ),
        '#type' => 'table',
      );
      $build[0]['amount'] = array(
        '#markup' => $currency
          ->formatAmount($payment
          ->getAmount()),
      );
      $build[0]['status'] = array(
        '#markup' => $status_definition['label'],
      );
      $build[0]['updated'] = array(
        '#markup' => $this->dateFormatter
          ->format($status
          ->getCreated()),
      );
      if ($payment
        ->access('view')) {
        $build['#header'][] = $this
          ->t('Operations');
        $build[0]['view'] = array(
          '#markup' => $this
            ->t('<a href="@url" target="_blank">View payment details</a> (opens in a new window)', array(
            '@url' => $payment
              ->toUrl()
              ->toString(),
          )),
        );
      }
    }
    return $build;
  }
  /**
   * Builds the "Complete payment" link.
   *
   * @param mixed[] $element
   *   The root element.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return array
   *   A render array.
   */
  protected function buildCompletePaymentLink(array $element, FormStateInterface $form_state) {
    $plugin_selector = $this
      ->getPluginSelector($element, $form_state);
    /** @var \Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface $payment_method */
    $payment_method = $plugin_selector
      ->getSelectedPlugin();
    $build = [];
    if ($payment_method && !$payment_method
      ->getPayment()
      ->isNew()) {
      $build['message'] = array(
        '#markup' => $this
          ->t('@payment_method_label requires the payment to be completed in a new window.', array(
          '@payment_method_label' => $payment_method
            ->getPluginDefinition()['label'],
        )),
      );
      $build['link'] = array(
        '#attributes' => array(
          'class' => array(
            'button',
            'payment-reference-complete-payment-link',
          ),
          'target' => '_blank',
        ),
        '#url' => $payment_method
          ->getPayment()
          ->toUrl('complete'),
        '#title' => $this
          ->t('Complete payment'),
        '#type' => 'link',
      );
    }
    return $build;
  }
  /**
   * Disables all child elements.
   *
   * @param mixed[] $elements
   */
  protected function disableChildren(array &$elements) {
    foreach (Element::children($elements) as $child_key) {
      $elements[$child_key]['#disabled'] = TRUE;
      $this
        ->disableChildren($elements[$child_key]);
    }
  }
  /**
   * Implements form submit handler.
   */
  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();
  }
  /**
   * Implements form AJAX callback.
   */
  public function ajaxPay(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);
    $response = new AjaxResponse();
    $response
      ->addCommand(new ReplaceCommand('#' . $root_element['container']['#id'], $this->renderer
      ->render($root_element['container'])));
    /** @var \Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface $selected_payment_method */
    $selected_payment_method = $this
      ->getPluginSelector($root_element, $form_state)
      ->getSelectedPlugin();
    if (!$selected_payment_method
      ->getPaymentExecutionResult()
      ->isCompleted()) {
      $link = $this
        ->buildCompletePaymentLink($root_element, $form_state);
      $response
        ->addCommand(new OpenModalDialogCommand($this
        ->t('Complete payment'), $this->renderer
        ->render($link)));
    }
    return $response;
  }
  /**
   * Implements form submit handler.
   */
  public static function refresh(array $form, FormStateInterface $form_state) {
    $form_state
      ->setRebuild();
  }
  /**
   * Implements form AJAX callback.
   */
  public function ajaxRefresh(array &$form, FormStateInterface $form_state) {
    $triggering_element = $form_state
      ->getTriggeringElement();
    $root_element_parents = array_slice($triggering_element['#array_parents'], 0, -2);
    $root_element = NestedArray::getValue($form, $root_element_parents);
    $response = new AjaxResponse();
    $response
      ->addCommand(new ReplaceCommand('#' . $root_element['container']['#id'], $this->renderer
      ->render($root_element['container'])));
    return $response;
  }
  /**
   * Gets the plugin selector.
   *
   * @param mixed[] $element
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return \Drupal\plugin\Plugin\Plugin\PluginSelector\PluginSelectorInterface
   */
  protected function getPluginSelector(array $element, FormStateInterface $form_state) {
    $key = 'payment_reference.element.payment_reference.plugin_selector.' . $element['#name'];
    if (!$form_state
      ->has($key)) {
      $plugin_selector = $this->pluginSelectorManager
        ->createInstance($element['#plugin_selector_id']);
      $payment_method_discovery = $this->paymentMethodType
        ->getPluginManager();
      if (!is_null($element['#limit_allowed_plugin_ids'])) {
        $payment_method_discovery = (new LimitedPluginDiscoveryDecorator($payment_method_discovery))
          ->setDiscoveryLimit($element['#limit_allowed_plugin_ids']);
      }
      $payment_method_manager = new PaymentExecutionPaymentMethodManager($this
        ->getPayment($element, $form_state), $this->currentUser, $this->paymentMethodType
        ->getPluginManager(), $payment_method_discovery);
      $plugin_selector
        ->setSelectablePluginType($this->paymentMethodType);
      $plugin_selector
        ->setSelectablePluginDiscovery($payment_method_manager);
      $plugin_selector
        ->setSelectablePluginFactory($payment_method_manager);
      $plugin_selector
        ->setRequired($element['#required']);
      $form_state
        ->set($key, $plugin_selector);
    }
    return $form_state
      ->get($key);
  }
  /**
   * Gets the payment.
   *
   * @param mixed[] $element
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return \Drupal\payment\Entity\PaymentInterface
   */
  protected function getPayment(array $element, FormStateInterface $form_state) {
    $key = 'payment_reference.element.payment_reference.payment';
    if (!$form_state
      ->has($key)) {
      /** @var \Drupal\payment\Entity\PaymentInterface $prototype_payment */
      $prototype_payment = $element['#prototype_payment'];
      $payment = $prototype_payment
        ->createDuplicate();
      $form_state
        ->set($key, $payment);
    }
    return $form_state
      ->get($key);
  }
  /**
   * Gets the entity form display.
   *
   * @param mixed[] $element
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *
   * @return \Drupal\Core\Entity\Display\EntityFormDisplayInterface
   */
  protected function getEntityFormDisplay(array $element, FormStateInterface $form_state) {
    $key = 'payment_reference.element.payment_reference.entity_form_display.' . $element['#name'];
    if (!$form_state
      ->has($key)) {
      $entity_form_display = EntityFormDisplay::collectRenderDisplay($this
        ->getPayment($element, $form_state), 'payment_reference');
      $form_state
        ->set($key, $entity_form_display);
    }
    return $form_state
      ->get($key);
  }
  /**
   * Gets the payment queue.
   *
   * @return \Drupal\payment\QueueInterface
   */
  protected abstract function getPaymentQueue();
  /**
   * {@inheritdoc}
   */
  public static function valueCallback(&$element, $input, FormStateInterface $form_state) {
    // Ignore $input, because the element's value does not come from submitted
    // form values, but from the payment queue.
    if ($element['#default_value']) {
      return $element['#default_value'];
    }
    else {
      /** @var \Drupal\Component\Plugin\PluginManagerInterface $element_info_manager */
      $element_info_manager = \Drupal::service('plugin.manager.element_info');
      /** @var \Drupal\payment\Element\PaymentReferenceBase $element_plugin */
      $element_plugin = $element_info_manager
        ->createInstance($element['#type']);
      $payment_ids = $element_plugin
        ->getPaymentQueue()
        ->loadPaymentIds($element['#queue_category_id'], $element['#queue_owner_id']);
      return $payment_ids ? (int) reset($payment_ids) : NULL;
    }
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| ContainerFactoryPluginInterface:: | public static | function | Creates an instance of the plugin. | 112 | 
| DependencySerializationTrait:: | protected | property | An array of entity type IDs keyed by the property name of their storages. | |
| DependencySerializationTrait:: | protected | property | An array of service IDs keyed by property name used for serialization. | |
| DependencySerializationTrait:: | public | function | 1 | |
| DependencySerializationTrait:: | public | function | 2 | |
| FormElement:: | public static | function | Adds autocomplete functionality to elements. | |
| FormElement:: | public static | function | #process callback for #pattern form element property. | |
| FormElement:: | public static | function | #element_validate callback for #pattern form element property. | |
| FormElementCallbackTrait:: | public static | function | Instantiates this class as a plugin and calls a method on it. | |
| MessengerTrait:: | protected | property | The messenger. | 29 | 
| MessengerTrait:: | public | function | Gets the messenger. | 29 | 
| MessengerTrait:: | public | function | Sets the messenger. | |
| PaymentReferenceBase:: | protected | property | The current user. | |
| PaymentReferenceBase:: | protected | property | The date formatter. | |
| PaymentReferenceBase:: | protected | property | The link generator. | |
| PaymentReferenceBase:: | protected | property | The payment method type. | |
| PaymentReferenceBase:: | protected | property | The payment storage. | |
| PaymentReferenceBase:: | protected | property | The plugin selector manager. | |
| PaymentReferenceBase:: | protected | property | The random generator. | |
| PaymentReferenceBase:: | protected | property | The renderer. | |
| PaymentReferenceBase:: | protected | property | The request stack. | |
| PaymentReferenceBase:: | public | function | Implements form AJAX callback. | |
| PaymentReferenceBase:: | public | function | Implements form AJAX callback. | |
| PaymentReferenceBase:: | protected | function | Builds the "Complete payment" link. | |
| PaymentReferenceBase:: | protected | function | Builds the payment form. | |
| PaymentReferenceBase:: | protected | function | Builds the payment view. | |
| PaymentReferenceBase:: | protected | function | Builds the refresh button. | |
| PaymentReferenceBase:: | protected | function | Disables all child elements. | |
| PaymentReferenceBase:: | public | function | Implements form API's element_validate callback. | |
| PaymentReferenceBase:: | protected | function | Gets the entity form display. | |
| PaymentReferenceBase:: | public | function | Returns the element properties for this element. Overrides ElementInterface:: | |
| PaymentReferenceBase:: | protected | function | Gets the payment. | |
| PaymentReferenceBase:: | abstract protected | function | Gets the payment queue. | 1 | 
| PaymentReferenceBase:: | protected | function | Gets the plugin selector. | |
| PaymentReferenceBase:: | constant | The number of seconds a payment should remain stored. | ||
| PaymentReferenceBase:: | public | function | Implements form submit handler. | |
| PaymentReferenceBase:: | public | function | Implements form #process callback. | |
| PaymentReferenceBase:: | public static | function | Implements form #process callback. | |
| PaymentReferenceBase:: | public static | function | Implements form submit handler. | |
| PaymentReferenceBase:: | public static | function | Determines how user input is mapped to an element's #value property. Overrides FormElement:: | |
| PaymentReferenceBase:: | public | function | Creates a new instance. Overrides PluginBase:: | 1 | 
| PluginBase:: | protected | property | Configuration information passed into the plugin. | 1 | 
| PluginBase:: | protected | property | The plugin implementation definition. | 1 | 
| PluginBase:: | protected | property | The plugin_id. | |
| PluginBase:: | constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
| PluginBase:: | public | function | Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: | |
| PluginBase:: | public | function | Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: | |
| PluginBase:: | public | function | Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: | 3 | 
| PluginBase:: | public | function | Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: | |
| PluginBase:: | public | function | Determines if the plugin is configurable. | |
| RenderElement:: | public static | function | Adds Ajax information about an element to communicate with JavaScript. | |
| RenderElement:: | public static | function | Adds members of this group as actual elements for rendering. | |
| RenderElement:: | public static | function | Form element processing handler for the #ajax form property. | 1 | 
| RenderElement:: | public static | function | Arranges elements into groups. | |
| RenderElement:: | public static | function | Sets a form element's class attribute. Overrides ElementInterface:: | |
| StringTranslationTrait:: | protected | property | The string translation service. | 1 | 
| StringTranslationTrait:: | protected | function | Formats a string containing a count of items. | |
| StringTranslationTrait:: | protected | function | Returns the number of plurals supported by a given language. | |
| StringTranslationTrait:: | protected | function | Gets the string translation service. | |
| StringTranslationTrait:: | public | function | Sets the string translation service to use. | 2 | 
| StringTranslationTrait:: | protected | function | Translates a string to the current language or to a given language. | 
