acquia_commercemanager-8.x-1.122/modules/acm/src/Form/CommerceUserSettingsForm.php
modules/acm/src/Form/CommerceUserSettingsForm.php
<?php
namespace Drupal\acm\Form;
use Drupal\Component\Plugin\PluginManagerInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteBuilderInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Class CommerceUserSettingsForm.
*
* @package Drupal\acm\Form
* @ingroup acm_customer
*/
class CommerceUserSettingsForm extends ConfigFormBase {
/**
* The router builder.
*
* @var \Drupal\Core\Routing\RouteBuilderInterface
*/
protected $routerBuilder;
/**
* The customer pages plugin manager.
*
* @var \Drupal\Component\Plugin\PluginManagerInterface
*/
protected $customerPagesManager;
/**
* Constructor.
*
* @param \Drupal\Core\Routing\RouteBuilderInterface $router_builder
* The router builder service.
* @param \Drupal\Component\Plugin\PluginManagerInterface $acm_customer_pages_manager
* The customer pages plugin manager.
*/
public function __construct(RouteBuilderInterface $router_builder, PluginManagerInterface $acm_customer_pages_manager) {
$this->routerBuilder = $router_builder;
$this->customerPagesManager = $acm_customer_pages_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('router.builder'),
$container->get('plugin.manager.acm_customer_pages')
);
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'acm_commerce_users_settings';
}
/**
* {@inheritdoc}
*/
public function getEditableConfigNames() {
return ['acm.commerce_users'];
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->config('acm.commerce_users')
->set('use_ecomm_sessions', (int) $form_state->getValue('use_ecomm_sessions'))
->set('use_ecomm_pass_reset', (int) $form_state->getValue('use_ecomm_pass_reset'))
->set('ecomm_forgot_password_path', $form_state->getValue('ecomm_forgot_password_path'))
->set('storage_type', $form_state->getValue('storage_type'))
->set('external_registration_path', $form_state->getValue('external_registration_path'))
->set('external_login_path', $form_state->getValue('external_login_path'))
->set('external_logout_path', $form_state->getValue('external_logout_path'))
->set('customer_pages_plugin', $form_state->getValue('customer_pages_plugin'))
->save();
$this->routerBuilder->rebuild();
return parent::submitForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('acm.commerce_users');
$options = [
'session' => $this->t('Session Storage'),
'database_store' => $this->t('Database Storage'),
];
$form['storage_type'] = [
'#type' => 'radios',
'#title' => t('Storage Type'),
'#default_value' => $config->get('storage_type') ?: 'session',
'#options' => $options,
'#description' => $this->t('The type of user session storage to use.'),
'#required' => TRUE,
];
$form['use_ecomm_sessions'] = [
'#type' => 'checkbox',
'#description' => $this->t('Enable to keep customers anonymous and instead use the e-comm backend for user sessions.'),
'#title' => $this->t('Use E-Comm Sessions'),
'#default_value' => $config->get('use_ecomm_sessions'),
];
$form['use_ecomm_pass_reset'] = [
'#type' => 'checkbox',
'#description' => $this->t('Enable to let the ecommerce backend generate and send the password reset tokens and links.'),
'#title' => $this->t('Use E-Comm Password Reset'),
'#default_value' => $config->get('use_ecomm_pass_reset'),
'#states' => [
'visible' => [
':input[name="use_ecomm_sessions"]' => ['checked' => TRUE],
],
],
];
$form['ecomm_forgot_password_path'] = [
'#type' => 'textfield',
'#description' => $this->t('The path to use for the password reset form.'),
'#title' => $this->t('Password Reset Page'),
'#default_value' => $config->get('ecomm_forgot_password_path') ?: '/forgottenpassword',
'#states' => [
'visible' => [
':input[name="use_ecomm_pass_reset"]' => ['checked' => TRUE],
],
],
];
$form['external_registration_path'] = [
'#type' => 'textfield',
'#description' => $this->t('The path to use for commerce account registration.'),
'#title' => $this->t('Commerce registration path'),
'#default_value' => $config->get('external_registration_path') ?: '/register',
'#states' => [
'visible' => [
':input[name="use_ecomm_sessions"]' => ['checked' => TRUE],
],
],
];
$form['external_login_path'] = [
'#type' => 'textfield',
'#description' => $this->t('The path to use for commerce accounts to login.'),
'#title' => $this->t('Commerce login path'),
'#default_value' => $config->get('external_login_path') ?: '/login',
'#states' => [
'visible' => [
':input[name="use_ecomm_sessions"]' => ['checked' => TRUE],
],
],
];
$form['external_logout_path'] = [
'#type' => 'textfield',
'#description' => $this->t('The path to use for commerce accounts to logout.'),
'#title' => $this->t('Commerce logout path'),
'#default_value' => $config->get('external_logout_path') ?: '/logout',
'#states' => [
'visible' => [
':input[name="use_ecomm_sessions"]' => ['checked' => TRUE],
],
],
];
$options = [];
foreach ($this->customerPagesManager->getDefinitions() as $plugin_id => $plugin_definition) {
$options[$plugin_id] = $plugin_definition['label'];
}
$form['customer_pages_plugin'] = [
'#type' => 'select',
'#title' => t('Customer Pages Plugin'),
'#options' => $options,
'#default_value' => $config->get('customer_pages_plugin'),
'#empty_option' => $this->t('- None -'),
'#description' => $this->t('The plugin to use for customer/account management pages.'),
];
return parent::buildForm($form, $form_state);
}
}
