v1/web/themes/contrib/gin/includes/form.theme

182 lines
5.6 KiB
PHP

<?php
/**
* @file
* form.theme
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\gin\GinDescriptionToggle;
use Drupal\gin\GinPreRender;
use Drupal\gin\GinContentFormHelper;
use Drupal\gin\GinSettings;
/**
* Implements form_alter_HOOK() for some major form changes.
*/
function gin_form_alter(&$form, $form_state, $form_id) {
\Drupal::classResolver(GinContentFormHelper::class)->formAlter($form, $form_state, $form_id);
// User form (Login, Register or Forgot password).
if (strpos($form_id, 'user_login') !== FALSE || strpos($form_id, 'user_register') !== FALSE || strpos($form_id, 'user_pass') !== FALSE) {
$form['actions']['submit']['#attributes']['class'][] = 'button--primary';
}
// Bulk forms: update action & actions to small variants.
if (strpos($form_id, 'views_form') !== FALSE) {
if (isset($form['header'])) {
$bulk_form = current(preg_grep('/_bulk_form/', array_keys($form['header'])));
if (isset($form['header'][$bulk_form])) {
$form['header'][$bulk_form]['action']['#attributes']['class'][] = 'form-element--type-select--small';
$form['header'][$bulk_form]['actions']['submit']['#attributes']['class'][] = 'button--small';
// Remove double entry of submit button.
unset($form['actions']['submit']);
}
}
}
// Delete forms: alter buttons.
if (strpos($form_id, 'delete_form') !== FALSE) {
$form['actions']['submit']['#attributes']['class'][] = 'button--danger';
$form['actions']['cancel']['#attributes']['class'][] = 'button--secondary';
}
}
/**
* Implements form_user_form_alter().
*/
function gin_form_user_form_alter(&$form, FormStateInterface $form_state) {
// If new user account, don't show settings yet.
if ($form_state->getFormObject()->getEntity()->isNew()) {
return;
}
/** @var \Drupal\gin\GinSettings $settings */
$settings = \Drupal::classResolver(GinSettings::class);
if ($settings->allowUserOverrides()) {
// Inject the settings for the dark mode feature.
$form['gin_theme_settings'] = [
'#type' => 'details',
'#title' => t('Admin theme settings'),
'#open' => TRUE,
'#weight' => 90,
];
/** @var \Drupal\Core\Session\AccountInterface $account */
$account = $form_state->getBuildInfo()['callback_object']->getEntity();
$form['gin_theme_settings']['enable_user_settings'] = [
'#type' => 'checkbox',
'#title' => t('Enable overrides'),
'#description' => t("Enables default admin theme overrides."),
'#default_value' => $settings->userOverrideEnabled($account),
'#weight' => 0,
];
$form['gin_theme_settings']['user_settings'] = [
'#type' => 'container',
'#states' => [
// Show if met.
'visible' => [
':input[name="enable_user_settings"]' => ['checked' => TRUE],
],
],
] + $settings->getSettingsForm($account);
// Attach custom library.
$form['#attached']['library'][] = 'gin/settings';
array_unshift($form['actions']['submit']['#submit'], '_gin_user_form_submit');
}
}
/**
* Implements template_preprocess_HOOK() for select.
*/
function gin_preprocess_select(&$variables) {
if (in_array('block-weight', $variables['attributes']['class'], TRUE)) {
$variables['attributes']['class'][] = 'form-element--extrasmall';
}
}
/**
* Implements form_alter() for forms.
*/
function gin_theme_suggestions_form_alter(array &$suggestions, array $variables) {
$suggestions[] = 'form__' . str_replace('-', '_', $variables['element']['#id']);
}
/**
* Implements form_alter() for input.
*/
function gin_theme_suggestions_input_alter(array &$suggestions, array $variables) {
if ($variables['element']['#type'] === 'checkbox') {
// Way to identify if checkbox is in a checkboxes group
// as Drupal doesn't provide one yet (see #2643012)
if (!isset($variables['element']['#error_no_message'])) {
$suggestions[] = 'input__checkbox__toggle';
}
}
}
/**
* Implements template_preprocess_HOOK() for form_element.
*/
function gin_preprocess_form_element(&$variables) {
\Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
}
/**
* Implements template_preprocess_HOOK() for datetime_wrapper.
*/
function gin_preprocess_datetime_wrapper(&$variables) {
\Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
}
/**
* Implements template_preprocess_HOOK() for details.
*/
function gin_preprocess_details(&$variables) {
\Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
}
/**
* Implements template_preprocess_HOOK() for fieldset.
*/
function gin_preprocess_fieldset(&$variables) {
\Drupal::classResolver(GinDescriptionToggle::class)->preprocess($variables);
}
/**
* Implements hook_element_info_alter().
*/
function gin_element_info_alter(&$info) {
if (array_key_exists('text_format', $info)) {
$info['text_format']['#pre_render'][] = [
GinPreRender::class,
'textFormat',
];
}
}
/**
* Implements template_preprocess_HOOK() for text_format_wrapper.
*/
function gin_preprocess_text_format_wrapper(&$variables) {
/** @var \Drupal\gin\GinSettings $settings */
$settings = \Drupal::classResolver(GinSettings::class);
if ($settings->get('show_description_toggle') && !empty($variables['description'])) {
$variables['description_display'] = 'invisible';
$variables['description_toggle'] = TRUE;
}
}
/**
* Implements template_preprocess_inline_entity_form_entity_table() for forms.
*/
function gin_preprocess_inline_entity_form_entity_table(array &$variables) {
$variables['table']['#attached']['library'][] = 'gin/inline_entity_form';
}