ui_patterns_settings.module in UI Patterns Settings 8.2
Same filename and directory in other branches
Contains ui_patterns_settings.module.
File
ui_patterns_settings.moduleView source
<?php
/**
* @file
* Contains ui_patterns_settings.module.
*/
use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
use Drupal\ui_patterns_settings\Plugin\Layout\PatternSettingsLayout;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\ui_patterns_settings\UiPatternsSettings;
use Drupal\ui_patterns\UiPatterns;
use Drupal\ui_patterns\Definition\PatternDefinition;
use Drupal\ui_patterns_settings\Form\SettingsFormBuilder;
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_ui_patterns_layouts_display_settings_form_alter().
*/
function ui_patterns_settings_ui_patterns_layouts_display_settings_form_alter(&$form, PatternDefinition $definition, $configuration) {
SettingsFormBuilder::layoutForm($form, $definition, $configuration);
}
/**
* Implements hook_form_field_storage_config_edit_form_alter().
*/
function ui_patterns_settings_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state) {
/** @var \Drupal\field\Entity\FieldStorageConfig $entity */
$entity = $form_state
->getFormObject()
->getEntity();
array_unshift($form['actions']['submit']['#submit'], 'ui_patterns_settings_form_field_storage_config_edit_form_submit');
$definitions = UiPatterns::getPatternDefinitions();
$settings_options = [];
foreach ($definitions as $definition) {
$infos = UiPatternsSettings::getExposedPatternDefinition($definition, $entity
->getType());
foreach ($infos as $key => $info) {
$settings_options[$key] = $info['label'];
}
}
if (count($settings_options) > 0) {
$mapping = UiPatternsSettings::getConfigManager()
->getMapping($entity
->id());
$form['settings']['use_pattern'] = [
'#type' => 'checkbox',
'#title' => t('Expose pattern setting'),
'#default_value' => $mapping !== NULL,
'#description' => '',
];
$form['settings']['pattern_setting'] = [
'#type' => 'select',
'#options' => $settings_options,
'#title' => 'Pattern Setting',
'#states' => [
'invisible' => [
':input[name="settings[use_pattern]"]' => [
'checked' => FALSE,
],
],
],
'#default_value' => $mapping,
];
}
}
/**
* Implements hook_form_field_storage_config_edit_form_submit().
*/
function ui_patterns_settings_form_field_storage_config_edit_form_submit(array $form, FormStateInterface $form_state) {
$settings = $form_state
->getValue('settings');
/** @var \Drupal\field\Entity\FieldStorageConfig $entity */
$entity = $form_state
->getFormObject()
->getEntity();
if (isset($settings['use_pattern']) && $settings['use_pattern'] === 1) {
UiPatternsSettings::getConfigManager()
->addMapping($entity
->id(), $settings['pattern_setting']);
}
else {
UiPatternsSettings::getConfigManager()
->addMapping($entity
->id(), NULL);
}
}
/**
* Implements hook_entity_field_storage_info_alter().
*/
function ui_patterns_settings_entity_field_storage_info_alter(&$fields, EntityTypeInterface $entity_type) {
/** @var \Drupal\field\Entity\FieldStorageConfig $field */
foreach ($fields as $field) {
if ($field instanceof FieldStorageConfig) {
if (($mapping = UiPatternsSettings::getConfigManager()
->getMapping($field
->id())) !== NULL) {
[
$pattern_id,
$setting_id,
] = explode('::', $mapping);
try {
$pattern_definition = UiPatterns::getPatternDefinition($pattern_id);
$settings_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_id);
if ($pattern_definition !== NULL && $settings_definition !== NULL) {
$type = UiPatternsSettings::createSettingType($pattern_definition, $settings_definition);
$type
->alterFieldStorage($field);
}
elseif ($pattern_definition !== NULL && $setting_id === 'variant') {
$field
->setSetting('allowed_values_function', 'ui_patterns_settings_allowed_values_function');
}
else {
\Drupal::messenger()
->addError('No pattern setting %setting found');
}
} catch (\Exception $e) {
\Drupal::messenger()
->addError($e
->getMessage());
}
}
else {
$field
->setSetting('allowed_values_function', NULL);
}
}
}
}
/**
* The storage config.
*
* @param \Drupal\field\Entity\FieldStorageConfig $storage_config
* The field storage config.
*
* @return string[]
* The allowed list of the enumeration.
*/
function ui_patterns_settings_allowed_values_function(FieldStorageConfig $storage_config) {
[
$pattern,
$setting_key,
] = explode('::', UiPatternsSettings::getConfigManager()
->getMapping($storage_config
->id()));
$pattern_definition = UiPatterns::getPatternDefinition($pattern);
$settings_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_key);
if ($pattern_definition !== NULL && $settings_definition !== NULL) {
return $settings_definition
->getOptions();
}
elseif ($pattern_definition !== NULL && $setting_key === 'variant') {
return $pattern_definition
->getVariantsAsOptions();
}
return [];
}
/**
* Implements hook_ui_patterns_display_form_alter().
*/
function ui_patterns_settings_ui_patterns_display_settings_form_alter(array &$form, $configuration) {
SettingsFormBuilder::displayForm($form, $configuration);
}
/**
* Preprocess hook.
*
* @param array $variables
* Theme variables.
*/
function ui_patterns_settings_preprocess_field__pattern_ds_field_template(array &$variables) {
$pattern_id = $variables['ds-config']['settings']['pattern'];
$settings = isset($variables['ds-config']['settings']['pattern_settings'][$pattern_id]) ? $variables['ds-config']['settings']['pattern_settings'][$pattern_id] : NULL;
foreach ($variables['items'] as $delta => $item) {
$variables['pattern']['pattern_' . $delta]['#settings'] = $settings;
}
}
/**
* Preprocess variables for the pattern_views_row theme hook.
*
* @param array $variables
* Theme variables.
*/
function ui_patterns_settings_preprocess_pattern_views_row(array &$variables) {
$pattern_id = $variables['options']['pattern'];
$settings = isset($variables['options']['pattern_settings'][$pattern_id]) ? $variables['options']['pattern_settings'][$pattern_id] : NULL;
$variables['pattern']['#settings'] = $settings;
}
/**
* Implements hook_element_info_alter().
*/
function ui_patterns_settings_element_info_alter(array &$info) {
foreach ($info as &$elm) {
if (isset($elm['#process'])) {
array_unshift($elm['#process'], [
PatternSettingTypeBase::class,
"formGroupProcess",
]);
}
}
if (isset($info['pattern'])) {
$info['pattern']['#pre_render'][] = [
"Drupal\\ui_patterns_settings\\Element\\PatternSettings",
"processSettings",
];
}
if (isset($info['pattern_preview'])) {
$info['pattern_preview']['#pre_render'][] = [
"Drupal\\ui_patterns_settings\\Element\\PatternSettings",
"processPreviewSettings",
];
}
}
/**
* Implements hook_theme_registry_alter().
*
* Add settings variables to the pattern theme.
*/
function ui_patterns_settings_theme_registry_alter(&$theme_registry) {
foreach (UiPatterns::getManager()
->getPatterns() as $pattern) {
$definition = $pattern
->getPluginDefinition();
if (isset($theme_registry['pattern_' . $definition
->id()])) {
$settings = UiPatternsSettings::getPatternDefinitionSettings($definition);
foreach ($settings as $key => $setting) {
$theme_registry['pattern_' . $definition
->id()]['variables'][$key] = NULL;
}
}
}
}
/**
* Implements hook_field_group_build_pre_render_alter().
*/
function ui_patterns_settings_field_group_pre_render_alter(&$element, $group, $rendering_object) {
$pattern_id = isset($group->format_settings['pattern']) ? $group->format_settings['pattern'] : NULL;
$element['#settings'] = isset($group->format_settings['pattern_settings'][$pattern_id]) ? $group->format_settings['pattern_settings'][$pattern_id] : NULL;
}
/**
* Returns true if current route is a layout builder route.
*
* @return bool
* True if is layout builder route
*/
function ui_patterns_settings_is_layout_builder_route() {
$route_name = \Drupal::routeMatch()
->getRouteName();
if (preg_match('/^(layout_builder\\.([^.]+\\.)?)/', $route_name)) {
return TRUE;
}
else {
return FALSE;
}
}
/**
* Implements hook_layout_alter().
*/
function ui_patterns_settings_layout_alter(&$definitions) {
/** @var \Drupal\Core\Layout\LayoutDefinition $definition */
foreach ($definitions as $definition) {
if ($definition
->getClass() == '\\Drupal\\ui_patterns_layouts\\Plugin\\Layout\\PatternLayout') {
$definition
->setClass(PatternSettingsLayout::class);
}
}
}