patreon-8.x-2.x-dev/modules/patreon_user/patreon_user.module
modules/patreon_user/patreon_user.module
<?php
/**
* @file
* Contains patreon_user.module.
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\patreon_user\PatreonUserService;
/**
* Implements hook_form_FORM_ID_alter().
*/
function patreon_user_form_user_admin_settings_alter(&$form, FormStateInterface $form_state): void {
$section = &$form['registration_cancellation'];
$position = (array_search('user_register', array_keys($section))) ?: count($section) - 1;
$config = \Drupal::config('patreon_user.settings');
$register = $config->get('patreon_user_registration');
$method = $config->get('patreon_user_login_method');
$path = $config->get('patreon_user_redirect_path');
$insert = [
'patreon_user_registration' => [
'#title' => t('Which Patreon users can log in?'),
'#description' => t('Select which users you wish to be logged in via the Patreon API.'),
'#type' => 'radios',
'#default_value' => $register,
'#options' => [
PatreonUserService::PATREON_USER_NO_LOGIN => t('No login via Patreon'),
PatreonUserService::PATREON_USER_ONLY_PATRONS => t('Only my patrons'),
PatreonUserService::PATREON_USER_ALL_USERS => t('All users from Patreon'),
],
],
'patreon_user_registration_method' => [
'#type' => 'radios',
'#title' => t('Patreon user login method'),
'#options' => [
PatreonUserService::PATREON_USER_COPY_ACCOUNT => t('Users must set a Drupal password'),
PatreonUserService::PATREON_USER_SINGLE_SIGN_ON => t('Users sign in directly via Patreon'),
],
'#description' => t('Choose whether users must log in as normal via a Drupal account (automatically created via Patreon) or to have users with Patreon accounts automatically logged in without a password.'),
'#default_value' => $method,
'#states' => [
'invisible' => [
':input[name=patreon_user_registration]' => ['value' => PatreonUserService::PATREON_USER_NO_LOGIN],
],
],
],
];
if (!\Drupal::service('module_handler')->moduleExists('redirect_after_login')) {
$insert['patreon_user_redirect_path'] = [
'#type' => 'path',
'#title' => t('Redirect Path'),
'#description' => t("Enter a valid path to redirect users to after login. If not set, user's current path will be used."),
'#required' => FALSE,
'#default_value' => $path,
'#states' => [
'invisible' => [
':input[name=patreon_user_registration]' => ['value' => PatreonUserService::PATREON_USER_NO_LOGIN],
],
],
];
}
$section = array_slice($section, 0, $position, TRUE) +
$insert +
array_slice($section, $position, count($section) - $position, TRUE);
$form['#submit'][] = 'patreon_user_form_admin_settings_submit';
}
/**
* Custom submit to store settings.
*
* @param array $form
* Drupal Form array.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* Drupal Form State object.
*/
function patreon_user_form_admin_settings_submit(array &$form, FormStateInterface $form_state): void {
$config = \Drupal::service('config.factory')
->getEditable('patreon_user.settings');
$config->set('patreon_user_redirect_path', $form_state->getValue('patreon_user_redirect_path'));
$config->set('patreon_user_registration', $form_state->getValue('patreon_user_registration'));
$config->set('patreon_user_login_method', $form_state->getValue('patreon_user_registration_method'))
->save();
$service = \Drupal::service('patreon.api');
$service->createRoles();
}
