ept_core-1.4.2/src/Form/EptCoreSettingsForm.php

src/Form/EptCoreSettingsForm.php
<?php

namespace Drupal\ept_core\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\ept_core\Constants\EptConstants;

/**
 * Configure Extra Paragraph Types settings for this site.
 */
class EptCoreSettingsForm extends ConfigFormBase {

  /**
   * Config settings.
   *
   * @var string
   */
  const SETTINGS = 'ept_core.settings';

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'ept_core_admin_settings';
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      static::SETTINGS,
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config(static::SETTINGS);

    $form['ept_core_colors'] = [
      '#type' => 'details',
      '#title' => $this->t('Colors'),
      '#open' => TRUE,
    ];

    $form['ept_core_colors']['ept_core_primary_color'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Primary Color'),
      '#default_value' => $config->get('ept_core_primary_color'),
      '#description' => $this->t('HEX color, for example #ff0000.'),
      '#element_validate' => [
        [
          '\Drupal\ept_core\Plugin\Field\FieldWidget\EptSettingsDefaultWidget', 'validateColorElement',
        ],
      ],
    ];

    $form['ept_core_colors']['ept_core_primary_button_text_color'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Primary Button Text color'),
      '#default_value' => $config->get('ept_core_primary_button_text_color'),
      '#description' => $this->t('HEX color, for example #ffffff.'),
      '#element_validate' => [
        [
          '\Drupal\ept_core\Plugin\Field\FieldWidget\EptSettingsDefaultWidget', 'validateColorElement',
        ],
      ],
    ];

    $form['ept_core_colors']['ept_core_secondary_color'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Secondary Color'),
      '#default_value' => $config->get('ept_core_secondary_color'),
      '#description' => $this->t('HEX color, for example #0000ff.'),
      '#element_validate' => [
        [
          '\Drupal\ept_core\Plugin\Field\FieldWidget\EptSettingsDefaultWidget', 'validateColorElement',
        ],
      ],
    ];

    $form['ept_core_colors']['ept_core_secondary_button_text_color'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Secondary Button Text color'),
      '#default_value' => $config->get('ept_core_secondary_button_text_color'),
      '#description' => $this->t('HEX color, for example #ffffff.'),
      '#element_validate' => [
        [
          '\Drupal\ept_core\Plugin\Field\FieldWidget\EptSettingsDefaultWidget', 'validateColorElement',
        ],
      ],
    ];

    $form['ept_core_colors']['ept_core_background_color'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Background Color'),
      '#default_value' => $config->get('ept_core_background_color'),
      '#description' => $this->t('HEX color for Background color. If empty the default value will be @ept_color_blue@', [
        '@ept_color_blue@' => EptConstants::COLOR_BLUE,
      ]),
      '#element_validate' => [
        [
          '\Drupal\ept_core\Plugin\Field\FieldWidget\EptSettingsDefaultWidget',
          'validateColorElement',
        ],
      ],
    ];

    $form['ept_core_breakpoint'] = [
      '#type' => 'details',
      '#title' => $this->t('Breakpoints'),
      '#open' => TRUE,
    ];

    $form['ept_core_breakpoint']['ept_core_mobile_breakpoint'] = [
      '#type' => 'number',
      '#title' => $this->t('Mobile breakpoint'),
      '#default_value' => $config->get('ept_core_mobile_breakpoint'),
    ];

    $form['ept_core_breakpoint']['ept_core_tablet_breakpoint'] = [
      '#type' => 'number',
      '#title' => $this->t('Tablet breakpoint'),
      '#default_value' => $config->get('ept_core_tablet_breakpoint'),
    ];

    $form['ept_core_breakpoint']['ept_core_desktop_breakpoint'] = [
      '#type' => 'number',
      '#title' => $this->t('Desktop breakpoint'),
      '#default_value' => $config->get('ept_core_desktop_breakpoint'),
    ];

    $form['ept_core_width'] = [
      '#type' => 'details',
      '#title' => $this->t('Width'),
      '#open' => TRUE,
    ];

    $form['ept_core_width']['ept_core_xxsmall_width'] = [
      '#type' => 'number',
      '#title' => $this->t('xxSmall width'),
      '#default_value' => $config->get('ept_core_xxsmall_width'),
    ];

    $form['ept_core_width']['ept_core_xsmall_width'] = [
      '#type' => 'number',
      '#title' => $this->t('xSmall width'),
      '#default_value' => $config->get('ept_core_xsmall_width'),
    ];

    $form['ept_core_width']['ept_core_small_width'] = [
      '#type' => 'number',
      '#title' => $this->t('Small width'),
      '#default_value' => $config->get('ept_core_small_width'),
    ];

    $form['ept_core_width']['ept_core_default_width'] = [
      '#type' => 'number',
      '#title' => $this->t('Default width'),
      '#default_value' => $config->get('ept_core_default_width'),
    ];

    $form['ept_core_width']['ept_core_large_width'] = [
      '#type' => 'number',
      '#title' => $this->t('Large width'),
      '#default_value' => $config->get('ept_core_large_width'),
    ];

    $form['ept_core_width']['ept_core_xlarge_width'] = [
      '#type' => 'number',
      '#title' => $this->t('xLarge width'),
      '#default_value' => $config->get('ept_core_xlarge_width'),
    ];

    $form['ept_core_width']['ept_core_xxlarge_width'] = [
      '#type' => 'number',
      '#title' => $this->t('xxLarge width'),
      '#default_value' => $config->get('ept_core_xxlarge_width'),
    ];

    // Include the library to load the colorpicker pop-up in the fields.
    $form['#attached']['library'][] = 'ept_core/colorpicker';

    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {

    // Get the breakpoint values for mobile, tablet and desktop.
    $ept_core_mobile_breakpoint = $form_state->getValue('ept_core_mobile_breakpoint');
    $ept_core_tablet_breakpoint = $form_state->getValue('ept_core_tablet_breakpoint');
    $ept_core_desktop_breakpoint = $form_state->getValue('ept_core_desktop_breakpoint');

    // Validate if breakpoints for mobile, tablet and desktop are different.
    if ($ept_core_mobile_breakpoint == $ept_core_tablet_breakpoint || $ept_core_mobile_breakpoint == $ept_core_desktop_breakpoint || $ept_core_tablet_breakpoint == $ept_core_desktop_breakpoint) {

      // Set the validation message.
      $error_message = $this->t('The mobile, tablet and desktop breakpoints must be different');

      // Set the form error.
      $form_state->setErrorByName('ept_core_mobile_breakpoint', $error_message);
      $form_state->setErrorByName('ept_core_tablet_breakpoint', $error_message);
      $form_state->setErrorByName('ept_core_desktop_breakpoint', $error_message);
    }

    // Get all variables of breakpoints.
    $ept_core_mobile_breakpoint = $form_state->getValue('ept_core_mobile_breakpoint');
    $ept_core_tablet_breakpoint = $form_state->getValue('ept_core_tablet_breakpoint');
    $ept_core_xxsmall_width = $form_state->getValue('ept_core_xxsmall_width');
    $ept_core_xsmall_width = $form_state->getValue('ept_core_xsmall_width');
    $ept_core_small_width = $form_state->getValue('ept_core_small_width');
    $ept_core_default_width = $form_state->getValue('ept_core_default_width');
    $ept_core_large_width = $form_state->getValue('ept_core_large_width');
    $ept_core_xlarge_width = $form_state->getValue('ept_core_xlarge_width');
    $ept_core_xxlarge_width = $form_state->getValue('ept_core_xxlarge_width');

    // Define the array with breakpoints values.
    $breakpoint_values = [
      $ept_core_mobile_breakpoint,
      $ept_core_tablet_breakpoint,
      $ept_core_xxsmall_width,
      $ept_core_xsmall_width,
      $ept_core_small_width,
      $ept_core_default_width,
      $ept_core_large_width,
      $ept_core_xlarge_width,
      $ept_core_xxlarge_width,
    ];

    // Get the unique breakpoints removing the repeated values.
    $unique_breakpoints = array_unique($breakpoint_values);

    // If there is repeated breakpoints, set a validation in the form error.
    if (count($breakpoint_values) !== count($unique_breakpoints)) {
      $form_state->setError($form, $this->t('All the breakpoints must be different'));
    }

  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {

    // If the "ept_core_background_color" is empty, let's use the default value.
    $ept_core_background_color = !empty($form_state->getValue('ept_core_background_color')) ? $form_state->getValue('ept_core_background_color') : EptConstants::COLOR_BLUE;

    $this->config(static::SETTINGS)
      ->set('ept_core_primary_color', $form_state->getValue('ept_core_primary_color'))
      ->set('ept_core_primary_button_text_color', $form_state->getValue('ept_core_primary_button_text_color'))
      ->set('ept_core_secondary_color', $form_state->getValue('ept_core_secondary_color'))
      ->set('ept_core_secondary_button_text_color', $form_state->getValue('ept_core_secondary_button_text_color'))
      ->set('ept_core_background_color', $ept_core_background_color)
      ->set('ept_core_mobile_breakpoint', $form_state->getValue('ept_core_mobile_breakpoint'))
      ->set('ept_core_tablet_breakpoint', $form_state->getValue('ept_core_tablet_breakpoint'))
      ->set('ept_core_desktop_breakpoint', $form_state->getValue('ept_core_desktop_breakpoint'))
      ->set('ept_core_xxsmall_width', $form_state->getValue('ept_core_xxsmall_width'))
      ->set('ept_core_xsmall_width', $form_state->getValue('ept_core_xsmall_width'))
      ->set('ept_core_small_width', $form_state->getValue('ept_core_small_width'))
      ->set('ept_core_default_width', $form_state->getValue('ept_core_default_width'))
      ->set('ept_core_large_width', $form_state->getValue('ept_core_large_width'))
      ->set('ept_core_xlarge_width', $form_state->getValue('ept_core_xlarge_width'))
      ->set('ept_core_xxlarge_width', $form_state->getValue('ept_core_xxlarge_width'))
      ->save();

    parent::submitForm($form, $form_state);
  }

}

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

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