commerce-8.x-2.8/modules/price/src/Form/CurrencyForm.php
modules/price/src/Form/CurrencyForm.php
<?php namespace Drupal\commerce_price\Form; use Drupal\Core\Entity\EntityForm; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; class CurrencyForm extends EntityForm { /** * The currency storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $storage; /** * Creates a new CurrencyForm object. * * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The currency storage. */ public function __construct(EntityTypeManagerInterface $entity_type_manager) { $this->storage = $entity_type_manager->getStorage('commerce_currency'); } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */ $entity_type_manager = $container->get('entity_type.manager'); return new static($entity_type_manager); } /** * {@inheritdoc} */ public function form(array $form, FormStateInterface $form_state) { $form = parent::form($form, $form_state); /** @var \Drupal\commerce_price\Entity\CurrencyInterface $currency */ $currency = $this->entity; $form['name'] = [ '#type' => 'textfield', '#title' => $this->t('Name'), '#default_value' => $currency->getName(), '#maxlength' => 255, '#required' => TRUE, ]; $form['currencyCode'] = [ '#type' => 'textfield', '#title' => $this->t('Currency code'), '#default_value' => $currency->getCurrencyCode(), '#element_validate' => ['::validateCurrencyCode'], '#pattern' => '[A-Z]{3}', '#placeholder' => 'XXX', '#maxlength' => 3, '#size' => 4, '#disabled' => !$currency->isNew(), '#required' => TRUE, ]; $iso_4217_url = Url::fromUri('https://en.wikipedia.org/wiki/ISO_4217')->toString(); $form['numericCode'] = [ '#type' => 'textfield', '#title' => $this->t('Numeric code'), '#description' => $this->t('The three digit code, as defined by <a href=":url" target="_blank">ISO 4217</a>.', [':url' => $iso_4217_url]), '#default_value' => $currency->getNumericCode(), '#element_validate' => ['::validateNumericCode'], '#pattern' => '[\d]{3}', '#placeholder' => '999', '#maxlength' => 3, '#size' => 4, '#required' => TRUE, ]; $form['symbol'] = [ '#type' => 'textfield', '#title' => $this->t('Symbol'), '#default_value' => $currency->getSymbol(), '#maxlength' => 4, '#size' => 4, '#required' => TRUE, ]; $form['fractionDigits'] = [ '#type' => 'number', '#title' => $this->t('Fraction digits'), '#description' => $this->t('The number of digits after the decimal sign.'), '#default_value' => $currency->getFractionDigits(), '#min' => 0, '#required' => TRUE, ]; return $form; } /** * Validates the currency code. */ public function validateCurrencyCode(array $element, FormStateInterface $form_state, array $form) { $currency = $this->getEntity(); $currency_code = $element['#value']; if (!preg_match('/^[A-Z]{3}$/', $currency_code)) { $form_state->setError($element, $this->t('The currency code must consist of three uppercase letters.')); } elseif ($currency->isNew()) { $loaded_currency = $this->storage->load($currency_code); if ($loaded_currency) { $form_state->setError($element, $this->t('The currency code is already in use.')); } } } /** * Validates the numeric code. */ public function validateNumericCode(array $element, FormStateInterface $form_state, array $form) { $currency = $this->getEntity(); $numeric_code = $element['#value']; if ($numeric_code && !preg_match('/^\d{3}$/i', $numeric_code)) { $form_state->setError($element, $this->t('The numeric code must consist of three digits.')); } elseif ($currency->isNew()) { $loaded_currencies = $this->storage->loadByProperties([ 'numericCode' => $numeric_code, ]); if ($loaded_currencies) { $form_state->setError($element, $this->t('The numeric code is already in use.')); } } } /** * {@inheritdoc} */ public function save(array $form, FormStateInterface $form_state) { $currency = $this->entity; $currency->save(); $this->messenger()->addMessage($this->t('Saved the %label currency.', [ '%label' => $currency->label(), ])); $form_state->setRedirect('entity.commerce_currency.collection'); } }