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'; } } } } } } } } }