bootstrap_italia-8.x-0.x-dev/includes/form.inc
includes/form.inc
<?php
/**
* @file
* Theme and preprocess functions for forms.
*/
use Drupal\bootstrap_italia\Helper\FormElement;
use Drupal\bootstrap_italia\Helper\FormInput;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Template\Attribute;
/**
* Implements hook_form_alter() for adding classes and placeholder text to the search forms.
*
* Ref: https://www.drupal.org/project/coding_standards/issues/3056368
*
* @phpstan-ignore missingType.iterableValue
*/
function bootstrap_italia_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void {
if (isset($form['actions']['submit']) && (count($form['actions'])) <= 2) {
$form['actions']['submit']['#attributes']['class'][] = 'btn';
$form['actions']['submit']['#attributes']['class'][] = 'btn-primary';
}
switch ($form_id) {
case 'search_block_form':
// Add placeholder text to keys input.
$form['keys']['#attributes']['placeholder'] = t('Search by keyword or phrase.');
// Add classes to the search form submit input.
$form['actions']['submit']['#attributes']['class'][] = 'btn';
$form['actions']['submit']['#attributes']['class'][] = 'btn-primary';
break;
case 'search_form':
$form['basic']['keys']['#attributes']['placeholder'] = t('Search by keyword or phrase.');
$form['basic']['submit']['#attributes']['class'][] = 'btn';
$form['basic']['submit']['#attributes']['class'][] = 'btn-primary';
$form['advanced']['submit']['#attributes']['class'][] = 'btn';
$form['advanced']['submit']['#attributes']['class'][] = 'btn-primary';
break;
}
if (isset($form['#attributes']['class'])) {
$form['#attributes']['class'][] = 'needs-validation';
}
}
/**
* Implements hook_form_FORM_ID_alter().
*
* Ref: https://www.drupal.org/project/coding_standards/issues/3056368
*
* @phpstan-ignore missingType.iterableValue
*/
function bootstrap_italia_form_search_block_form_alter(array &$form): void {
$form['keys']['#placeholder'] = t('Search by keyword or phrase.');
}
/**
* Implements hook_preprocess_form_element().
*
* Ref: https://www.drupal.org/project/coding_standards/issues/3056368
*
* @phpstan-ignore missingType.iterableValue
*/
function bootstrap_italia_preprocess_form_element(array &$variables): void {
FormElement::set($variables);
FormElement::setActiveLabel($variables);
}
/**
* Implements hook_preprocess_input().
*
* Ref: https://www.drupal.org/project/coding_standards/issues/3056368
*
* @phpstan-ignore missingType.iterableValue
*/
function bootstrap_italia_preprocess_input(array &$variables): void {
FormInput::set($variables);
if (!empty($variables['element']['#autocomplete_route_name'])) {
$variables['autocomplete_message'] = t('Loading…');
}
}
/**
* Implements hook_preprocess_select().
*
* Ref: https://www.drupal.org/project/coding_standards/issues/3056368
*
* @phpstan-ignore missingType.iterableValue
*/
function bootstrap_italia_preprocess_select(array &$variables): void {
if (isset($variables['attributes']['multiple']) &&
$variables['attributes']['multiple'] == 'multiple'
) {
$variables['attributes']['class'][] = 'border';
}
}
/**
* Implements hook_preprocess_container().
*
* Ref: https://www.drupal.org/project/coding_standards/issues/3056368
*
* @phpstan-ignore missingType.iterableValue
*/
function bootstrap_italia_preprocess_container(array &$variables): void {
if (isset($variables['element']['#attributes']) &&
$variables['element']['#attributes'] instanceof Attribute &&
$variables['element']['#attributes']->hasClass('webform-element-description')
) {
$variables['element']['#attributes']->addClass('form-text');
}
// Detects form actions.
if (
(
isset($variables['attributes']['class']) &&
isset($variables['element']['#type']) &&
$variables['element']['#type'] == 'actions'
) ||
(
isset($variables['attributes']['class']) &&
is_array($variables['attributes']['class']) &&
in_array('form-actions', $variables['attributes']['class'], TRUE)
)
) {
if (theme_get_setting('forms_action_spacing')) {
$variables['attributes']['class'][] = 'mt-5';
$variables['attributes']['class'][] = 'mb-3';
}
$variables['attributes']['class'][] = 'text-align-' . theme_get_setting('forms_action_alignment');
}
}
/**
* Implements hook_template_preprocess_form_element_label().
*
* Ref: https://www.drupal.org/project/coding_standards/issues/3056368
*
* @phpstan-ignore missingType.iterableValue
*/
function bootstrap_italia_preprocess_form_element_label(array &$variables): void {
if (isset($variables['required']) && $variables['required']) {
$variables['forms_field_label_required_mark'] = (bool) theme_get_setting('forms_field_label_required_mark');
}
}
