v1/web/modules/contrib/layout_builder_blocks/layout_builder_blocks.module

155 lines
5.1 KiB
PHP

<?php
/**
* @file
* Layout Builder Blocks module file.
*/
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_form_alter().
*/
function layout_builder_blocks_form_alter(&$form, FormStateInterface $form_state) {
if ($form['#form_id'] === 'layout_builder_add_block' || $form['#form_id'] === 'layout_builder_update_block') {
$allowed = FALSE;
/** @var \Drupal\layout_builder\Form\ConfigureBlockFormBase $form_object */
$form_object = $form_state->getFormObject();
$component = $form_object->getCurrentComponent();
$block_plugin_id = $component->getPluginId();
$config = \Drupal::config('layout_builder_blocks.styles');
// If this is a reusable block, retrieve the block bundle.
$bundle = FALSE;
if (strpos($block_plugin_id, "block_content:") === 0) {
$uuid = str_replace('block_content:', '', $block_plugin_id);
$bundle = \Drupal::service('entity.repository')->loadEntityByUuid('block_content', $uuid)
->bundle();
}
if (
empty($config->get('block_restrictions'))
|| in_array($block_plugin_id, $config->get('block_restrictions'))
|| $bundle && in_array('inline_block:' . $bundle, $config->get('block_restrictions'))
) {
// Return parent form.
$allowed = TRUE;
}
if ($allowed) {
// Our main set of tabs.
$form['ui'] = [
'#type' => 'container',
'#weight' => -100,
'#attributes' => [
'id' => 'bs_ui',
],
'#tree' => FALSE,
'#parents' => ['ui'],
];
$tabs = [
[
'machine_name' => 'content',
'icon' => 'content.svg',
'title' => t('Content'),
'active' => TRUE,
],
[
'machine_name' => 'appearance',
'icon' => 'appearance.svg',
'title' => t('Style'),
],
];
// Create our tabs from above.
$form['ui']['nav_tabs'] = [
'#type' => 'html_tag',
'#tag' => 'ul',
'#attributes' => [
'class' => 'bs_nav-tabs',
'id' => 'bs_nav-tabs',
'role' => 'tablist',
],
];
$form['ui']['tab_content'] = [
'#type' => 'container',
'#attributes' => [
'class' => 'blb_tab-content',
'id' => 'bs_tabContent',
],
'#tree' => FALSE,
'#parents' => ['tab_content'],
];
// Create our tab & tab panes.
foreach ($tabs as $tab) {
$form['ui']['nav_tabs'][$tab['machine_name']] = [
'#type' => 'inline_template',
'#template' => '<li><a data-target="{{ target|clean_class }}" class="{{active}}"><span role="img">{% include icon %}</span>{{ title }}</a></li>',
'#context' => [
'title' => $tab['title'],
'target' => $tab['machine_name'],
'active' => isset($tab['active']) && $tab['active'] == TRUE ? 'active' : '',
'icon' => \Drupal::service('extension.list.module')->getPath('bootstrap_styles') . '/images/ui/' . ($tab['icon'] ? $tab['icon'] : 'default.svg'),
],
];
$form['ui']['tab_content'][$tab['machine_name']] = [
'#type' => 'container',
'#attributes' => [
'class' => [
'bs_tab-pane',
'bs_tab-pane--' . $tab['machine_name'],
isset($tab['active']) && $tab['active'] == TRUE ? 'active' : '',
],
],
'#tree' => FALSE,
'#parents' => [$tab['machine_name']],
];
}
$form['ui']['tab_content']['appearance']['#tree'] = TRUE;
$configuration = [
'bootstrap_styles' => [
'block_style' => [],
],
];
if ($component->get('bootstrap_styles')) {
$bootstrap_styles = $component->get('bootstrap_styles');
if (isset($bootstrap_styles['block_style'])) {
$configuration['bootstrap_styles'] = $bootstrap_styles;
}
}
$form['ui']['tab_content']['appearance'] += \Drupal::service('plugin.manager.bootstrap_styles_group')->buildStylesFormElements($form['ui']['tab_content']['appearance'], $form_state, $configuration['bootstrap_styles']['block_style'], 'layout_builder_blocks.styles');
// Attach Bootstrap Styles base library.
$form['#attached']['library'][] = 'bootstrap_styles/layout_builder_form_style';
$form['#attached']['library'][] = 'layout_builder_blocks/content_tab';
array_unshift($form['#submit'], '_layout_builder_blocks_submit_block_form');
}
}
}
/**
* Custom submit handler for submitting LB block forms.
*/
function _layout_builder_blocks_submit_block_form(array &$form, FormStateInterface $form_state) {
$bootstrap_styles = [];
$bootstrap_styles['block_style'] = [];
$bootstrap_styles['block_style'] = \Drupal::service('plugin.manager.bootstrap_styles_group')->submitStylesFormElements($form['ui']['tab_content']['appearance'], $form_state, ['appearance'], $bootstrap_styles['block_style'], 'layout_builder_blocks.styles');
// Save styles' configurations.
$formObject = $form_state->getFormObject();
$component = $formObject->getCurrentComponent();
$component->set('bootstrap_styles', $bootstrap_styles);
}