block_generation-8.x-1.x-dev/modules/composition/block_generation_composition.module
modules/composition/block_generation_composition.module
<?php
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\block_content\Entity\BlockContent;
use Drupal\Core\Render\Element;
use Drupal\Core\Database\Query\AlterableInterface;
/**
* Tune up the form.
*
* Implements hook_form_FORM_ID_alter().
*
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function _block_generation_composition_form_alter(&$form, FormStateInterface $form_state) {
// External wrapper.
$form['wrapper_external_tag']['#states'] = ['visible' => [':input[name="wrapper_external[value]"]' => ['checked' => TRUE]]];
$form['wrapper_external_attr']['#states'] = ['visible' => [':input[name="wrapper_external[value]"]' => ['checked' => TRUE]]];
$form['wrapper_external_effects']['#states'] = ['visible' => [':input[name="wrapper_external[value]"]' => ['checked' => TRUE]]];
// Main wrapper.
$form['wrapper_main_tag']['#states'] = ['visible' => [':input[name="wrapper_main[value]"]' => ['checked' => TRUE]]];
$form['wrapper_main_attr']['#states'] = ['visible' => [':input[name="wrapper_main[value]"]' => ['checked' => TRUE]]];
$form['wrapper_main_effects']['#states'] = ['visible' => [':input[name="wrapper_main[value]"]' => ['checked' => TRUE]]];
// Internal wrapper.
$form['wrapper_internal_tag']['#states'] = ['visible' => [':input[name="wrapper_internal[value]"]' => ['checked' => TRUE]]];
$form['wrapper_internal_attr']['#states'] = ['visible' => [':input[name="wrapper_internal[value]"]' => ['checked' => TRUE]]];
$form['wrapper_internal_effects']['#states'] = ['visible' => [':input[name="wrapper_internal[value]"]' => ['checked' => TRUE]]];
// Inner wrapper.
$form['wrapper_inner_tag']['#states'] = ['visible' => [':input[name="wrapper_inner[value]"]' => ['checked' => TRUE]]];
$form['wrapper_inner_attr']['#states'] = ['visible' => [':input[name="wrapper_inner[value]"]' => ['checked' => TRUE]]];
$form['wrapper_inner_effects']['#states'] = ['visible' => [':input[name="wrapper_inner[value]"]' => ['checked' => TRUE]]];
// Title wrapper.
$form['wrapper_title_tag']['#states'] = ['visible' => [':input[name="wrapper_title[value]"]' => ['checked' => TRUE]]];
$form['wrapper_title_attr']['#states'] = ['visible' => [':input[name="wrapper_title[value]"]' => ['checked' => TRUE]]];
$form['wrapper_title_effects']['#states'] = ['visible' => [':input[name="wrapper_title[value]"]' => ['checked' => TRUE]]];
}
/**
* Implements hook_form_FORM_ID_alter().
*
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function block_generation_composition_form_block_content_block_generation_composition_edit_form_alter(&$form, FormStateInterface $form_state) {
_block_generation_composition_form_alter($form, $form_state);
}
/**
* Implements hook_form_FORM_ID_alter().
*
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function block_generation_composition_form_block_content_block_generation_composition_form_alter(&$form, FormStateInterface $form_state) {
_block_generation_composition_form_alter($form, $form_state);
}
/**
* Process block content settings.
* Implements hook_preprocess_HOOK().
*
* @param array $variables
*/
function template_preprocess_block__block_generation__block_generation_composition(array &$variables) {
if (isset($variables['elements']['#block_content']) && $variables['elements']['#block_content'] instanceof BlockContent) {
// Block content object.
/** @var \Drupal\block_content\Entity\BlockContent $block */
$block = $variables['elements']['#block_content'];
// Process possible wrappers.
$wrappers = ['wrapper_external', 'wrapper_main', 'wrapper_internal', 'wrapper_inner'];
foreach ($wrappers as $wrapper) {
_block_generation_process_wrapper($wrapper, $block, $variables);
}
// Content composition.
$content_composition = ['title', '_layout_builder'];
_block_generation_process_content($block, $variables, $content_composition);
// _block_generation_process_order($block, $variables, $content_composition);
}
}
/**
* Implements hook_ENTITY_TYPE_view_alter().
*
* @param array $build
* @param \Drupal\Core\Entity\EntityInterface $entity
* @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display
*/
function block_generation_composition_block_content_view_alter(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {
if ($entity instanceof BlockContent && $entity->bundle() == 'block_generation_composition') {
/** @var \Drupal\Core\Utility\ThemeRegistry $theme_registry */
$theme_registry = \Drupal::service('theme.registry')->getRuntime();
// Update the theme for specific fields.
foreach (Element::children($build['_layout_builder']) as $element_id) {
if (isset($build['_layout_builder'][$element_id]['content']) and is_array($build['_layout_builder'][$element_id]['content'])) {
foreach ($build['_layout_builder'][$element_id]['content'] as &$content_item) {
if ($theme_registry->has('field__block_generation__title') && isset($content_item['#plugin_id']) && $content_item['#plugin_id'] == 'field_block:block_content:block_generation_composition:title') {
if (isset($content_item['content']['#theme']) && $content_item['content']['#theme'] == 'field') {
$content_item['content']['#theme'] = 'field__block_generation__title';
}
else {
foreach (Element::children($content_item['content']) as $content_element_id) {
if (isset($content_item['content'][$content_element_id]['#theme']) && $content_item['content'][$content_element_id]['#theme'] == 'field') {
$content_item['content'][$content_element_id]['#theme'] = 'field__block_generation__title';
}
}
}
}
}
}
}
}
}
