<?php namespace Drupal\stormtextil_config\Form; use Drupal\Core\Cache\Cache; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Link; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Class StormTextil Config Form. */ class StormTextilConfigForm extends ConfigFormBase { /** * EntityTypeManagerInterface. * * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ protected $entityTypeManager; /** * StormTextilConfigForm constructor. * * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager * The Entity Type Manager. */ public function __construct(EntityTypeManagerInterface $entityTypeManager) { $this->entityTypeManager = $entityTypeManager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity_type.manager') ); } /** * {@inheritdoc} */ public function getFormId() { return 'stormtextil_config.config_form'; } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return ['stormtextil_config.settings']; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('stormtextil_config.settings'); // Promotions e-mail. $form['promotions_email'] = [ '#type' => 'details', '#title' => $this->t('Promotions in Order e-mail'), '#description' => $this->t('Add custom promotional text into order confirmation e-mail'), '#open' => FALSE, '#tree' => TRUE, ]; $promotions_email = $config->get('promotions_email'); $form['promotions_email']['enabled'] = [ '#type' => 'checkbox', '#title' => $this->t('Enable promotions'), '#default_value' => isset($promotions_email['enabled']) ? $promotions_email['enabled'] : '', ]; $form['promotions_email']['EN'] = [ '#type' => 'text_format', '#title' => $this->t('Text - en'), '#format' => 'full_html', '#default_value' => isset($promotions_email['EN']['value']) ? $promotions_email['EN']['value'] : '', ]; $form['promotions_email']['DA'] = [ '#type' => 'text_format', '#title' => $this->t('Text - da'), '#format' => 'full_html', '#default_value' => isset($promotions_email['DA']['value']) ? $promotions_email['DA']['value'] : '', ]; $form['promotions_email']['DE'] = [ '#type' => 'text_format', '#title' => $this->t('Text - de'), '#format' => 'full_html', '#default_value' => isset($promotions_email['DE']['value']) ? $promotions_email['DE']['value'] : '', ]; // Stock notify e-mail. $form['stock_notify_email'] = [ '#type' => 'details', '#title' => $this->t('Stock notify e-mail'), '#description' => $this->t('Add custom text into stock notify e-mail'), '#open' => FALSE, '#tree' => TRUE, ]; $stock_notify_email = $config->get('stock_notify_email'); $form['stock_notify_email']['en']['subject'] = [ '#type' => 'textfield', '#title' => $this->t('Subject - en'), '#default_value' => isset($stock_notify_email['en']['subject']) ? $stock_notify_email['en']['subject'] : '', '#size' => 50, ]; $form['stock_notify_email']['en']['message'] = [ '#type' => 'text_format', '#title' => $this->t('Text - en'), '#format' => 'full_html', '#default_value' => isset($stock_notify_email['en']['message']['value']) ? $stock_notify_email['en']['message']['value'] : '', ]; $form['stock_notify_email']['da']['subject'] = [ '#type' => 'textfield', '#title' => $this->t('Subject - da'), '#default_value' => isset($stock_notify_email['da']['subject']) ? $stock_notify_email['da']['subject'] : '', '#size' => 50, ]; $form['stock_notify_email']['da']['message'] = [ '#type' => 'text_format', '#title' => $this->t('Text - da'), '#format' => 'full_html', '#default_value' => isset($stock_notify_email['da']['message']['value']) ? $stock_notify_email['da']['message']['value'] : '', ]; $form['stock_notify_email']['de']['subject'] = [ '#type' => 'textfield', '#title' => $this->t('Subject - de'), '#default_value' => isset($stock_notify_email['de']['subject']) ? $stock_notify_email['de']['subject'] : '', '#size' => 50, ]; $form['stock_notify_email']['de']['message'] = [ '#type' => 'text_format', '#title' => $this->t('Text - de'), '#format' => 'full_html', '#default_value' => isset($stock_notify_email['de']['message']['value']) ? $stock_notify_email['de']['message']['value'] : '', ]; // Exchange rates. $form['exchange_rates'] = [ '#type' => 'details', '#title' => $this->t('Exchange rates'), '#description' => $this->t('Defines the exchange rate for 1 unit of the currency in DKK.'), '#open' => FALSE, '#tree' => TRUE, ]; $exchange_rates = $config->get('exchange_rates'); $form['exchange_rates']['EUR'] = [ '#type' => 'textfield', '#title' => $this->t('EUR to DKK'), '#default_value' => isset($exchange_rates['EUR']) ? $exchange_rates['EUR'] : '', '#size' => 10, ]; $form['exchange_rates']['SEK'] = [ '#type' => 'textfield', '#title' => $this->t('SEK to DKK'), '#default_value' => isset($exchange_rates['SEK']) ? $exchange_rates['SEK'] : '', '#size' => 10, ]; // Order fees. $form['order_fees'] = [ '#type' => 'details', '#title' => $this->t('Order fees'), '#open' => FALSE, '#tree' => TRUE, ]; $form['order_fees']['administration_fee'] = [ '#type' => 'details', '#title' => $this->t('Administration fees'), '#open' => FALSE, '#tree' => TRUE, ]; $administration_fee = $config->get('administration_fee'); $form['order_fees']['administration_fee']['DKK']['range'] = [ '#type' => 'textfield', '#title' => $this->t('Invoice total (DKK)'), '#default_value' => isset($administration_fee['DKK']['range']) ? $administration_fee['DKK']['range'] : '', '#size' => 10, ]; $form['order_fees']['administration_fee']['DKK']['fee'] = [ '#type' => 'textfield', '#title' => $this->t('Fee (DKK)'), '#default_value' => isset($administration_fee['DKK']['fee']) ? $administration_fee['DKK']['fee'] : '', '#size' => 10, ]; $form['order_fees']['administration_fee']['EUR']['range'] = [ '#type' => 'textfield', '#title' => $this->t('Invoice total (EUR)'), '#default_value' => isset($administration_fee['EUR']['range']) ? $administration_fee['EUR']['range'] : '', '#size' => 10, ]; $form['order_fees']['administration_fee']['EUR']['fee'] = [ '#type' => 'textfield', '#title' => $this->t('Fee (EUR)'), '#default_value' => isset($administration_fee['EUR']['fee']) ? $administration_fee['EUR']['fee'] : '', '#size' => 10, ]; $form['order_fees']['administration_fee']['SEK']['range'] = [ '#type' => 'textfield', '#title' => $this->t('Invoice total (SEK)'), '#default_value' => isset($administration_fee['SEK']['range']) ? $administration_fee['SEK']['range'] : '', '#size' => 10, ]; $form['order_fees']['administration_fee']['SEK']['fee'] = [ '#type' => 'textfield', '#title' => $this->t('Fee (SEK)'), '#default_value' => isset($administration_fee['SEK']['fee']) ? $administration_fee['SEK']['fee'] : '', '#size' => 10, ]; // Added costs. $form['order_fees']['added_cost'] = [ '#type' => 'textfield', '#title' => $this->t('Added cost price (DKK)'), '#default_value' => $config->get('added_cost'), '#size' => 10, ]; // VAT. $form['order_fees']['vat'] = [ '#type' => 'textfield', '#title' => $this->t('VAT (%)'), '#default_value' => $config->get('vat'), '#size' => 10, ]; // Balance is overdue notice. $form['balance_is_overdue'] = [ '#type' => 'details', '#title' => $this->t('Balance is overdue notification'), '#description' => $this->t('Add custom notification text for user with overdue balance'), '#open' => FALSE, '#tree' => TRUE, ]; $balance_is_overdue = $config->get('balance_is_overdue'); $form['balance_is_overdue']['enabled'] = [ '#type' => 'checkbox', '#title' => $this->t('Enable notifications'), '#default_value' => isset($balance_is_overdue['enabled']) ? $balance_is_overdue['enabled'] : '', ]; $form['balance_is_overdue']['EN'] = [ '#type' => 'text_format', '#title' => $this->t('Text - en'), '#format' => 'full_html', '#default_value' => isset($balance_is_overdue['EN']['value']) ? $balance_is_overdue['EN']['value'] : '', ]; $form['balance_is_overdue']['DA'] = [ '#type' => 'text_format', '#title' => $this->t('Text - da'), '#format' => 'full_html', '#default_value' => isset($balance_is_overdue['DA']['value']) ? $balance_is_overdue['DA']['value'] : '', ]; $form['balance_is_overdue']['DE'] = [ '#type' => 'text_format', '#title' => $this->t('Text - de'), '#format' => 'full_html', '#default_value' => isset($balance_is_overdue['DE']['value']) ? $balance_is_overdue['DE']['value'] : '', ]; // Edifact orders ftp connection. $form['edifact'] = [ '#type' => 'details', '#title' => $this->t('Ftp connection'), '#description' => $this->t('Configure ftp connection to remote server'), '#open' => FALSE, '#tree' => TRUE, ]; $ftp_connection = $config->get('edifact'); $form['edifact']['server'] = [ '#type' => 'textfield', '#title' => $this->t('Ftp server'), '#default_value' => isset($ftp_connection['server']) ? $ftp_connection['server'] : '', '#size' => 30, ]; $form['edifact']['username'] = [ '#type' => 'textfield', '#title' => $this->t('Username'), '#default_value' => isset($ftp_connection['username']) ? $ftp_connection['username'] : '', '#size' => 30, ]; $form['edifact']['password'] = [ '#type' => 'textfield', '#title' => $this->t('Password'), '#default_value' => isset($ftp_connection['password']) ? $ftp_connection['password'] : '', '#size' => 30, ]; // Samba connection. $form['samba'] = [ '#type' => 'details', '#title' => $this->t('Samba connection'), '#description' => $this->t('Configure connection to remote computer'), '#open' => FALSE, '#tree' => TRUE, ]; $samba = $config->get('samba'); $form['samba']['username'] = [ '#type' => 'textfield', '#title' => $this->t('Username'), '#default_value' => isset($samba['username']) ? $samba['username'] : '', '#size' => 30, ]; $form['samba']['password'] = [ '#type' => 'textfield', '#title' => $this->t('Password'), '#default_value' => isset($samba['password']) ? $samba['password'] : '', '#size' => 30, ]; $form['samba']['workgroup'] = [ '#type' => 'textfield', '#title' => $this->t('Workgroup'), '#default_value' => isset($samba['workgroup']) ? $samba['workgroup'] : '', '#size' => 30, ]; $form['samba']['pdf'] = [ '#type' => 'details', '#title' => $this->t('Order PDF files'), '#description' => $this->t('Configure connection to remote computer to synchronize PDF files'), '#open' => FALSE, '#tree' => TRUE, ]; $form['samba']['pdf']['host'] = [ '#type' => 'textfield', '#title' => $this->t('Host (IP address of remote computer)'), '#default_value' => isset($samba['pdf']['host']) ? $samba['pdf']['host'] : '', '#size' => 30, ]; $form['samba']['pdf']['share'] = [ '#type' => 'textfield', '#title' => $this->t('Shared folder'), '#default_value' => isset($samba['pdf']['share']) ? $samba['pdf']['share'] : '', '#size' => 30, ]; $form['samba']['invoice'] = [ '#type' => 'details', '#title' => $this->t('Order invoices'), '#description' => $this->t('Configure connection to remote computer to synchronize invoices'), '#open' => FALSE, '#tree' => TRUE, ]; $form['samba']['invoice']['host'] = [ '#type' => 'textfield', '#title' => $this->t('Host (IP address of remote computer)'), '#default_value' => isset($samba['invoice']['host']) ? $samba['invoice']['host'] : '', '#size' => 30, ]; $form['samba']['invoice']['share'] = [ '#type' => 'textfield', '#title' => $this->t('Shared folder'), '#default_value' => isset($samba['invoice']['share']) ? $samba['invoice']['share'] : '', '#size' => 30, ]; // Samba connection. $form['theme'] = [ '#type' => 'details', '#title' => $this->t('Theme settings'), '#description' => $this->t('Configure theme specific variables'), '#open' => FALSE, '#tree' => TRUE, ]; $theme = $config->get('theme'); $form['theme']['theme_color'] = [ '#type' => 'textfield', '#title' => $this->t('Theme color'), '#default_value' => isset($theme['theme_color']) ? $theme['theme_color'] : '', '#description' => $this->t('Insert color HEX code'), '#size' => 10, ]; /** @var \Drupal\taxonomy\TermStorageInterface $termStorage */ $termStorage = $this->entityTypeManager->getStorage('taxonomy_term'); $categoriesTree = $termStorage->loadTree('categories', 0, NULL, TRUE); $options = []; foreach ($categoriesTree as $category) { $options[$category->id()] = $category->label(); } $form['designer_exclude_categories'] = [ '#type' => 'details', '#title' => $this->t('Designer Exclude Categories'), '#description' => $this->t('Designer Exclude Categories'), '#open' => FALSE, '#tree' => TRUE, ]; $form['designer_exclude_categories']['exclude'] = [ '#type' => 'select', '#title' => $this->t('Excluded'), '#default_value' => $config->get('designer_exclude_categories'), '#options' => $options, '#multiple' => TRUE, '#size' => 120, '#attributes' => [ 'style' => 'height: 240px', ], ]; $form['designer_query_maps_id'] = [ '#type' => 'details', '#title' => $this->t('Designer Query Maps'), '#description' => $this->t('Set the active query maps.'), '#open' => FALSE, '#tree' => TRUE, ]; $form['designer_query_maps_id']['id'] = [ '#type' => 'textfield', '#title' => $this->t('Designer Query Maps'), '#description' => Link::createFromRoute( $this->t('See more'), 'graphql.query_maps' ), '#default_value' => $config->get('designer_query_maps_id'), ]; // Checkout text. $form['checkout'] = [ '#type' => 'details', '#title' => $this->t('Checkout'), '#open' => FALSE, '#tree' => TRUE, ]; $checkout = $config->get('checkout'); $form['checkout']['enabled'] = [ '#type' => 'checkbox', '#title' => $this->t('Enable checkout text'), '#default_value' => isset($checkout['enabled']) ? $checkout['enabled'] : '', ]; $form['checkout']['EN'] = [ '#type' => 'text_format', '#title' => $this->t('Checkout text - en'), '#format' => 'full_html', '#default_value' => isset($checkout['EN']['value']) ? $checkout['EN']['value'] : '', ]; $form['checkout']['DA'] = [ '#type' => 'text_format', '#title' => $this->t('Checkout text - da'), '#format' => 'full_html', '#default_value' => isset($checkout['DA']['value']) ? $checkout['DA']['value'] : '', ]; $form['checkout']['DE'] = [ '#type' => 'text_format', '#title' => $this->t('Checkout text - de'), '#format' => 'full_html', '#default_value' => isset($checkout['DE']['value']) ? $checkout['DE']['value'] : '', ]; return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { $form_values = $form_state->getValues(); if (!empty($form_values['exchange_rates'])) { $error_msg = $this->t('Exchange rate values must be numeric and decimal points should be used. Commas are not allowed.'); foreach ($form_values['exchange_rates'] as $key => $value) { if (!is_numeric($value)) { $form_state->setError($form['exchange_rates'][$key], $error_msg); } } } if (!empty($form_values['order_fees']['added_cost'])) { $error_msg = $this->t('Added cost price must be numeric and decimal points should be used. Commas are not allowed.'); if (!is_numeric($form_values['order_fees']['added_cost'])) { $form_state->setError($form['order_fees']['added_cost'], $error_msg); } } if (!empty($form_values['order_fees']['administration_fee'])) { $error_msg = $this->t('Administration fee values must be numeric and decimal points should be used. Commas are not allowed.'); foreach ($form_values['order_fees']['administration_fee'] as $currency => $item) { foreach ($form_values['order_fees']['administration_fee'][$currency] as $key => $value) { if (!is_numeric($value)) { $form_state->setError($form['order_fees']['administration_fee'][$currency][$key], $error_msg); } } } } } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $config = $this->config('stormtextil_config.settings'); $form_values = $form_state->getValues(); $config->set('promotions_email', $form_values['promotions_email']) ->set('stock_notify_email', $form_values['stock_notify_email']) ->set('exchange_rates', $form_values['exchange_rates']) ->set('balance_is_overdue', $form_values['balance_is_overdue']) ->set('administration_fee', $form_values['order_fees']['administration_fee']) ->set('edifact', $form_values['edifact']) ->set('samba', $form_values['samba']) ->set('theme', $form_values['theme']) ->set('added_cost', $form_values['order_fees']['added_cost']) ->set('vat', $form_values['order_fees']['vat']) ->set('designer_exclude_categories', array_values($form_values['designer_exclude_categories']['exclude'])) ->set('designer_query_maps_id', $form_values['designer_query_maps_id']['id']) ->set('checkout', $form_values['checkout']) ->save(); Cache::invalidateTags(['designer_exclude_categories']); parent::submitForm($form, $form_state); } }