auctions-1.0.x-dev/modules/auctions_core/src/Form/AuctionItemSettingsForm.php

modules/auctions_core/src/Form/AuctionItemSettingsForm.php
<?php

namespace Drupal\auctions_core\Form;

use Drupal\auctions_core\Service\AuctionTools;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Defines a form for configuring auction item settings.
 *
 * @ingroup auctions_core
 */
class AuctionItemSettingsForm extends ConfigFormBase {

  /**
   * The AuctionTools service.
   *
   * @var \Drupal\auctions_core\Service\AuctionTools
   */
  protected $auctionTools;

  /**
   * Constructs a new AuctionItemSettingsForm object.
   *
   * @param \Drupal\auctions_core\Service\AuctionTools $auctionTools
   *   The AuctionTools service.
   */
  public function __construct(AuctionTools $auctionTools) {
    $this->auctionTools = $auctionTools;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('auctions_core.tools')
    );
  }

  /**
   * Returns a unique string identifying the form.
   *
   * @return string
   *   The unique string identifying the form.
   */
  public function getFormId() {
    return 'auction_item_entity_settings';
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'auctions.item_settings',
    ];
  }

  /**
   * Defines the settings form for Auction Items entities.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   *
   * @return array
   *   Form definition array.
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('auctions.item_settings');
    $hasCommercePrice = $this->auctionTools->hasModule('commerce_price');
    $form['#attributes']['novalidate'] = 'novalidate';

    $form['refresh'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Bid Refresh'),
      '#description' => $this->t('Reminder:  The permission to <b>Add Auction Bid(s) entities | <q>Access Bidding Form</q></b> is needed also for ROLES to access this Json Callback Route.'),
    ];

    $form['refresh']['ajax-refresh'] = [
      '#title' => $this->t('Enable Global Freature'),
      '#type' => 'checkbox',
      '#default_value' => $config->get('ajax-refresh'),
    ];
    $form['refresh']['container'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Bid Refresh Options'),
      '#states' => [
        'visible' => [
          ':input[name*="ajax-refresh"]' => ['checked' => TRUE],
        ],
      ],
    ];
    $form['refresh']['container']['ajax-preactivate'] = [
      '#title' => $this->t('Pre-active refreshing of Current Bid Price.'),
      '#description' => $this->t('Reminder:  This may increase Server Load.'),
      '#type' => 'checkbox',
      '#default_value' => $config->get('ajax-preactivate'),
    ];
    $form['refresh']['container']['ajax-rate'] = [
      '#title' => $this->t('Ajax Promise refresh rate'),
      '#type' => 'number',
      '#required' => TRUE,
      '#field_suffix' => $this->t('Seconds'),
      '#min' => .5,
      '#max' => 60,
      '#step' => 'any',
      '#default_value' => $config->get('ajax-rate'),
      '#description' =>
      '<ul>'
      .'<li>'.$this->t('Current Value for Refresh Event setTimeout:  @msms', ['@ms' => $config->get('ajax-rate')*1000])
      .'<li>'.$this->t('Min allowed:  .5 Sec').'</li>'
      .'<li>'.$this->t('Max allowed:  1 Min (60sec)').'</li>'
      .'</ul>'
      ,
    ];
 $endIncrease = $config->get('refresh-adrenaline');
 $form['refresh']['container']['refresh-adrenaline'] = [
      '#title' => $this->t('Refresh Adrenaline (Intensify rate as Countdown Runs Out)'),
      '#type' => 'number',
      '#required' => TRUE,
      '#field_suffix' => $this->t('Seconds left of Countdown'),
      '#min' => 1,
      '#max' => 3600,
      '#step' => 1,
      '#default_value' => $endIncrease ,
      '#description' => '<ul>'
      .'<li>'.$this->t('Refresh rate will drop to Every Second when @seconds from the end of the countdown.', ['@seconds'=>\Drupal::translation()->formatPlural($endIncrease, '1 second', '@count seconds') ]).'</li>'
      .'<li>'.$this->t('Min allowed:  1 Second').'</li>'
      .'<li>'.$this->t('Max allowed:   3600 Seconds (5min)').'</li>'
      .'</ul>'
    ];

    $form['common'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Currency Settings'),
    ];
    $form['common']['commerce-price-active'] = [
      '#access' => $hasCommercePrice,
      '#markup' => '<br><dl><dt>' . $this->t('Commerce Price is active.') . '</dt>' .
      '<dd>' . $this->t('Be sure to match Currencies with store settings: admin/commerce/config/currencies') . '</dd></dl>',
    ];
    // reminder:  handle language character!
    $form['common']['dollar-symbol'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Dollar Symbol'),
      '#default_value' => $config->get('dollar-symbol'),
      '#maxlength' => 1,
      '#size' => 1,
    ];
    $form['common']['thousand-separator'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Thousand separator'),
      '#default_value' => $config->get('thousand-separator'),
      '#maxlength' => 1,
      '#size' => 1,
    ];
    $form['common']['decimal-separator'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Decimal separator'),
      '#default_value' => $config->get('decimal-separator'),
      '#maxlength' => 1,
      '#size' => 1,
    ];

    $form['common']['currency'] = [
      '#type' => 'details',
      '#title' => $this->t('Auction Item Currency'),
    ];
    $form['common']['currency']['active-currency'] = [
      '#title' => $this->t('Select currencies to allow for Auction Items.'),
      '#type' => 'checkboxes',
      '#required' => TRUE,
      '#default_value' => $config->get('active-currency'),
      '#options' => $this->auctionTools->currencyOptions(),
    ];
    $form['common']['commerce-price-active'] = [
      '#access' => $hasCommercePrice,
      '#markup' => '<br><dl><dt>' . $this->t('Commerce Price is active.') . '</dt>' .
      '<dd>' . $this->t('Adjust active Store currencies as needed admin/commerce/config/currencies') . '</dd></dl>',
    ];

    $form['date'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Auctions Dates'),
    ];
    $dateFormat = \Drupal::entityTypeManager()
      ->getStorage('date_format')
      ->loadMultiple();
    $format_list = [];
    foreach($dateFormat as $id => $format){
      $format_list[$id] = '['.$id.'] '.$format->label();
    }
    $form['date']['use_format'] = [
      '#type' => 'select',
      '#options' => $format_list,
      '#title' => $this->t('Countdown Date Formatter'),
      '#default_value' => $config->get('use_format'),
     '#description' => $this->t('Current availble formats:  @link', ['@link'=>Link::createFromRoute('Date and time formats', 'entity.date_format.collection')->toString()])
    ];

    $range = \range(1, 10);
    $years = \array_combine($range, $range);
    $form['date']['daterange']['years-ahead'] = [
      '#title' => $this->t('How many years forward can a user list an auction item'),
      '#type' => 'select',
      '#required' => TRUE,
      '#default_value' => $config->get('years-ahead'),
      '#options' => $years,
    ];

    $form['autobid'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Autobidding'),
    ];
    $form['autobid']['autobid-mode'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Enable Global Feature.'),
      '#default_value' => $config->get('autobid-mode'),
    ];
    $form['autobid']['trigger'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Trigger Weight Logic'),
      '#states' => [
        'visible' => [
          ':input[name*="autobid-mode"]' => ['checked' => TRUE],
        ],
      ],
    ];

    $range = \range(1, 1056);
    $slice = ['0' => $this->t('All/Unlimited')] + \array_combine($range, $range);
    $form['autobid']['trigger']['autobid-slice'] = [
      '#type' => 'select',
      '#options' => $slice,
      '#title' => $this->t('Autobid User Limit'),
      '#description' => $this->t('Help reduce flooding.'),
      '#default_value' => $config->get('autobid-slice'),
    ];
    $form['autobid']['trigger']['autobids-ordering'] = [
      '#type' => 'radios',
      '#required' => TRUE,
      '#title' => $this->t('Trigger Autobid By'),
      '#options' => [
        'created' => $this->t('Date Created'),
        'changed' => $this->t('Date Last Updated'),
        'amount_max' => $this->t('Max Amount'),
      ],
      '#default_value' => $config->get('autobids-ordering'),
    ];
    $form['autobid']['trigger']['autobids-direction'] = [
      '#type' => 'radios',
      '#required' => TRUE,
      '#title' => $this->t('Final Sort'),
      '#options' => [
        'ASC' => $this->t('Ascending'),
        'DESC' => $this->t('Desending'),
      ],
      '#default_value' => $config->get('autobids-direction'),
    ];
    return parent::buildForm($form, $form_state);
  }

  /**
   * Form submission handler.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $config = $this->configFactory()->getEditable('auctions.item_settings');

    $config->set('ajax-refresh', $form_state->getValue(['ajax-refresh']));
    $config->set('ajax-rate', $form_state->getValue(['ajax-rate']));
    $config->set('ajax-preactivate', $form_state->getValue(['ajax-preactivate']));
    $config->set('refresh-adrenaline', $form_state->getValue(['refresh-adrenaline']));

    $config->set('active-currency', $form_state->getValue(['active-currency']));
    $config->set('decimal-separator', $form_state->getValue(['decimal-separator']));
    $config->set('dollar-symbol', $form_state->getValue(['dollar-symbol']));
    $config->set('thousand-separator', $form_state->getValue(['thousand-separator']));

    $config->set('use_format', $form_state->getValue(['use_format']));
    $config->set('years-ahead', $form_state->getValue(['years-ahead']));

    $config->set('autobid-mode', $form_state->getValue(['autobid-mode']));
    $config->set('autobids-ordering', $form_state->getValue(['autobids-ordering']));
    $config->set('autobids-direction', $form_state->getValue(['autobids-direction']));
    $config->set('autobid-slice', $form_state->getValue(['autobid-slice']));

    $config->save();
    parent::submitForm($form, $form_state);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc