diff --git a/modules/edit_plus_sweet/css/edit-plus-sweet.css b/modules/edit_plus_sweet/css/edit-plus-sweet.css new file mode 100644 index 0000000000000000000000000000000000000000..43ad3ad6cae66bb7fbc11d9afc861709d3c16e8b --- /dev/null +++ b/modules/edit_plus_sweet/css/edit-plus-sweet.css @@ -0,0 +1,59 @@ +.block__title { + + &.text-jumbo1 { + font-size: 4.063rem; + line-height: 1.125; + letter-spacing: 0.003em; + } + &.text-jumbo2 { + font-size: 3.375rem; + line-height: 1.125; + letter-spacing: 0.006em; + } + &.text-jumbo3 { + font-size: 2.813rem; + line-height: 1.125; + letter-spacing: 0.009em; + } + &.text-jumbo4 { + font-size: 2.375rem; + line-height: 1.125; + letter-spacing: 0.011em; + } + + &.text-large1 { + font-size: 2rem; + line-height: 1.200; + letter-spacing: 0.012em; + } + + &.text-large2 { + font-size: 1.75rem; + line-height: 1.200; + letter-spacing: 0.013em; + } + + &.text-large3 { + font-size: 1.5rem; + line-height: 1.200; + letter-spacing: 0.015em; + } + + &.text-large4 { + font-size: 1.313rem; + line-height: 1.200; + letter-spacing: 0.017em; + } + + &.text-large5 { + font-size: 1.125rem; + line-height: 1.200; + letter-spacing: -0.025em; + } + + &.text-large6 { + font-size: 1rem; + line-height: 1.200; + letter-spacing: -0.020em; + } +} diff --git a/modules/edit_plus_sweet/edit_plus_sweet.info.yml b/modules/edit_plus_sweet/edit_plus_sweet.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..743cf74083c03d08ab7a3070f79250847a9a4741 --- /dev/null +++ b/modules/edit_plus_sweet/edit_plus_sweet.info.yml @@ -0,0 +1,14 @@ +name: 'Layout Builder + and + Suite' +type: module +description: 'Some example things for the + Suite recipe' +core_version_requirement: ^10 || ^11 +package: 'Page Building' +dependencies: + - lb_plus:lb_plus + - lb_plus_edit_plus:lb_plus_edit_plus + - edit_plus_lb:edit_plus_lb + - field_sample_value:field_sample_value + - navigation_plus:navigation_plus + - edit_plus_lb:edit_plus_lb + - drupal:navigation + - drupal:navigation_top_bar diff --git a/modules/edit_plus_sweet/edit_plus_sweet.libraries.yml b/modules/edit_plus_sweet/edit_plus_sweet.libraries.yml new file mode 100644 index 0000000000000000000000000000000000000000..55fa021300d8634e3be6461a8886ea5d529ab618 --- /dev/null +++ b/modules/edit_plus_sweet/edit_plus_sweet.libraries.yml @@ -0,0 +1,4 @@ +styles: + css: + theme: + css/edit-plus-sweet.css: {} diff --git a/modules/edit_plus_sweet/edit_plus_sweet.module b/modules/edit_plus_sweet/edit_plus_sweet.module new file mode 100644 index 0000000000000000000000000000000000000000..92b71fe596ecae60ec49fc0a351e4836926de5c6 --- /dev/null +++ b/modules/edit_plus_sweet/edit_plus_sweet.module @@ -0,0 +1,50 @@ +<?php + +use Drupal\Component\Uuid\Uuid; +use Drupal\Core\Form\FormStateInterface; +use Drupal\edit_plus_sweet\Events\LayoutBuilderBlockFormAlterEvent; + +/** + * Implements hook_form_alter(). + */ +function edit_plus_sweet_form_alter(&$form, FormStateInterface $form_state, $form_id) { + if (!in_array($form_id, [ + 'layout_builder_update_block', + 'layout_builder_add_block', + ])) { + return; + } + /** @var \Drupal\layout_builder\SectionStorageInterface $storage */ + [$storage, $delta, $region, $uuid, $nested_storage_path] = $form_state->getBuildInfo()['args']; + $configuration = []; + $current_section_storage = Drupal::service('lb_plus.section_storage_handler')->getCurrentSectionStorage($storage, $nested_storage_path); + if ($uuid && Uuid::isValid($uuid)) { + $component = $current_section_storage->getSection($delta)->getComponent($uuid); + $configuration = $component->getPlugin()->getConfiguration(); + } + $blockEvent = new LayoutBuilderBlockFormAlterEvent($form, $form_state, $storage, $region, $configuration, $component ?? NULL); + Drupal::service('event_dispatcher')->dispatch($blockEvent); + $form = $blockEvent->getForm(); +} + +/** + * Implements hook_preprocess_HOOK(). + */ +function edit_plus_sweet_preprocess_block__inline_block__heading(&$variables) { + $config = $variables['elements']['#configuration']; + $title_size = $config['title_size'] ?? ''; + if ($title_size) { + $variables['title_attributes']['class'][] = $title_size; + } + $alignment = $config['alignment'] ?? ''; + if ($alignment) { + $variables['title_attributes']['class'][] = $alignment; + } + $first_color = $config['first_color'] ?? ''; + $second_color = $config['second_color'] ?? ''; + $rotation = ($config['gradient_rotation'] ?? '90') . 'deg'; + if ($first_color && $second_color) { + $variables['title_attributes']['style'] = "background:linear-gradient($rotation, $first_color, $second_color); -webkit-background-clip:text; color:transparent;"; + } + $variables['#attached']['library'][] = 'edit_plus_sweet/styles'; +} diff --git a/modules/edit_plus_sweet/edit_plus_sweet.services.yml b/modules/edit_plus_sweet/edit_plus_sweet.services.yml new file mode 100644 index 0000000000000000000000000000000000000000..0c3f003a9d39f5210467dd8589bff72d8b1c81a2 --- /dev/null +++ b/modules/edit_plus_sweet/edit_plus_sweet.services.yml @@ -0,0 +1,11 @@ +services: + _defaults: + autoconfigure: true + autowire: true + + edit_plus_sweet.heading: + class: Drupal\edit_plus_sweet\EventSubscriber\Heading + edit_plus_sweet.layout_builder_block_title: + class: Drupal\edit_plus_sweet\EventSubscriber\LayoutBuilderBlockForm\TitleCustomizations + edit_plus_sweet.heading_customizations: + class: Drupal\edit_plus_sweet\EventSubscriber\LayoutBuilderBlockForm\HeadingCustomizations diff --git a/modules/edit_plus_sweet/src/EventSubscriber/Heading.php b/modules/edit_plus_sweet/src/EventSubscriber/Heading.php new file mode 100644 index 0000000000000000000000000000000000000000..a73ed445e3d8adcc5c25ea0c65b572747e936a34 --- /dev/null +++ b/modules/edit_plus_sweet/src/EventSubscriber/Heading.php @@ -0,0 +1,30 @@ +<?php + +namespace Drupal\edit_plus_sweet\EventSubscriber; + +use Drupal\lb_plus\Event\PlaceBlockEvent; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +class Heading implements EventSubscriberInterface { + + public function onPostPlaceBlockFormBuild(PlaceBlockEvent $event) { + if ($event->getBlockPluginId() === 'inline_block' && $event->getBundle() === 'heading') { + $block_plugin = $event->getBlockPlugin(); + $configuration = $block_plugin->getConfiguration(); + $configuration['label_display'] = 'visible'; + $configuration['label'] = $block_plugin->label(); + $configuration['label_tag'] = 'h2'; + $block_plugin->setConfiguration($configuration); + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + return [ + PlaceBlockEvent::class => ['onPostPlaceBlockFormBuild'], + ]; + } + +} diff --git a/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/EnhancedTitleBase.php b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/EnhancedTitleBase.php new file mode 100644 index 0000000000000000000000000000000000000000..77383a5547a0d8a5a144beee5f065ba81b4f110d --- /dev/null +++ b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/EnhancedTitleBase.php @@ -0,0 +1,234 @@ +<?php + +namespace Drupal\edit_plus_sweet\EventSubscriber\LayoutBuilderBlockForm; + +use Drupal\Core\Block\BlockPluginInterface; +use Drupal\Core\Template\Attribute; +use Drupal\Core\Form\FormStateInterface; +use Drupal\layout_builder\LayoutBuilderEvents; +use Drupal\edit_plus_sweet\Events\LayoutBuilderBlockFormAlterEvent; +use Drupal\layout_builder\Event\SectionComponentBuildRenderArrayEvent; + +/** + * Alters the block form to add some elements for styling of a heading/title. + */ +abstract class EnhancedTitleBase extends LayoutBuilderBlockFormBase { + + /** + * List of title attributes that will be set in config on block form submit. + * + * @var array|string[] + */ + protected static array $configurableProperties = [ + 'first_color', + 'second_color', + 'gradient_rotation', + ]; + + public static function getSubscribedEvents() { + $events = parent::getSubscribedEvents(); + $events[LayoutBuilderEvents::SECTION_COMPONENT_BUILD_RENDER_ARRAY] = [ + 'onBuildRender', + 90, + ]; + return $events; + } + + /** + * {@inheritdoc} + */ + public function formAlter(LayoutBuilderBlockFormAlterEvent $event) { + $form = $event->getForm(); + $config = $event->getConfiguration(); + + $actions = $form['actions']; + unset($form['actions']); + static::addTitleOptions($form['settings'], $config); + $form['actions'] = $actions; + + $form['#submit'] = array_merge([[$this, 'formSubmit']], $form['#submit']); + $event->setForm($form); + } + + /** + * Submit handler that saves title options like size and color into block. + */ + public function formSubmit(array &$form, FormStateInterface $form_state) { + static::setTitleOptions($form_state, 'block', $form_state->getValues()['settings']); + } + + public function onBuildRender(SectionComponentBuildRenderArrayEvent $event) { + $block = $event->getPlugin(); + if (!$block instanceof BlockPluginInterface) { + return; + } + + $valid_block_ids = [$this->blockId, "inline_block:{$this->blockId}"]; + if (!in_array($block->getPluginId(), $valid_block_ids)) { + return; + } + if (empty($block->getConfiguration()['title_size'])) { + return; + } + + $config = $block->getConfiguration(); + if (!empty($config['formatter']['type']) && $config['formatter']['type'] !== 'heading') { + return; + } + + $build = $event->getBuild(); + $title_attributes = NULL; + // Field blocks. + $content = !empty($build['content'][0]) ? $build['content'][0] : NULL; + if ($build['#base_plugin_id'] == 'field_block' && $content) { + /** @var \Drupal\Core\Template\Attribute $title_attributes */ + if ($content[0]['#type'] === 'inline_template') { + $title_attributes = $content[0]['#context']['attributes']; + } + elseif (!empty($content[0]['#title']['#context']['attributes'])) { + $title_attributes = $content[0]['#title']['#context']['attributes']; + } + if ($content[0]['#type'] === 'link') { + $build['content'][0][0]['#attributes']['class'][] = 'no-underline'; + } + } + elseif (!empty($build['content']['#block_content'])) { + $build['content']['#title_attributes'] = new Attribute(); + $title_attributes = $build['content']['#title_attributes']; + } + + if (!$title_attributes) { + $title_attributes = new Attribute(); + } + if ($title_attributes) { + static::setTitleAttributes($title_attributes, $config); + } + $event->setBuild($build); + } + + /** + * Adds fields for enhancement of a heading/title to a given form. + * + * @param array $form + * @param array $config + * + * @return void + */ + public static function addTitleOptions(array &$form, array $config) { + $form['title_size'] = [ + '#type' => 'select', + '#title' => t('Select title size'), + '#options' => [ + 'text-jumbo1' => t('Jumbo 65px'), + 'text-jumbo2' => t('Jumbo 54px'), + 'text-jumbo3' => t('Jumbo 45px'), + 'text-jumbo4' => t('Jumbo 38px'), + 'text-large1' => t('Large 32px'), + 'text-large2' => t('Large 28px'), + 'text-large3' => t('Large 24px'), + 'text-large4' => t('Large 21px'), + 'text-large5' => t('Large 18px'), + 'text-large6' => t('Large 16px'), + ], + '#default_value' => $config['title_size'] ?? 'text-jumbo4', + ]; + + $has_color_adjustment = (!empty($config['formatter']['type']) && $config['formatter']['type'] == 'heading' && !empty($config['first_color'])) + || empty($config['formatter']) && !empty($config['first_color']); + $form['title_color'] = [ + '#type' => 'checkbox', + '#title' => t('Set custom title gradient'), + '#default_value' => $has_color_adjustment, + ]; + $form['first_color'] = [ + '#type' => 'color', + '#title' => t('First color'), + '#default_value' => $config['first_color'] ?? '#000000', + '#states' => [ + 'visible' => [ + '[name="settings[title_color]"]' => ['checked' => TRUE], + ], + ], + ]; + $form['second_color'] = [ + '#type' => 'color', + '#title' => t('Second color'), + '#default_value' => $config['second_color'] ?? '#000000', + '#states' => [ + 'visible' => [ + '[name="settings[title_color]"]' => ['checked' => TRUE], + ], + ], + ]; + $form['gradient_rotation'] = [ + '#type' => 'number', + '#title' => t('Rotation'), + '#description' => t('Enter the rotation of the gradient in degrees between 0 and 360.'), + '#min' => 0, + '#max' => 360, + '#default_value' => $config['gradient_rotation'] ?? '90', + '#states' => [ + 'visible' => [ + '[name="settings[title_color]"]' => ['checked' => TRUE], + ], + ], + ]; + } + + /** + * Saves provided values into instance of configurable plugin. + * + * @param \Drupal\Core\Form\FormStateInterface $form_state + * @param string $property + * @param array $values + * + * @return void + * @throws \ReflectionException + */ + public static function setTitleOptions(FormStateInterface $form_state, string $property, array $values) { + $form_object = $form_state->getFormObject(); + $p = new \ReflectionProperty($form_object, $property); + $p->setAccessible(TRUE); + /** @var \Drupal\Component\Plugin\ConfigurableInterface $component */ + $component = $p->getValue($form_object); + $config = $component->getConfiguration(); + $config['title_size'] = $values['title_size']; + foreach (static::$configurableProperties as $property) { + if (in_array($property, self::$configurableProperties)) { + if (!empty($values['title_color'])) { + $config[$property] = $values[$property]; + } + else { + unset($config[$property]); + } + } + else { + $config[$property] = $values[$property]; + } + } + + $component->setConfiguration($config); + } + + /** + * Sets attributes based on given config. + * + * @param \Drupal\Core\Template\Attribute $title_attributes + * @param array $config + * + * @return void + */ + public static function setTitleAttributes(Attribute $title_attributes, array $config) { + $title_size = $config['title_size'] ?? ''; + if ($title_size) { + $title_attributes->addClass($title_size); + } + $first_color = $config['first_color'] ?? ''; + $second_color = $config['second_color'] ?? ''; + $rotation = ($config['gradient_rotation'] ?? '90') . 'deg'; + if ($first_color && $second_color) { + $title_attributes->setAttribute('style', "background:linear-gradient($rotation, $first_color, $second_color); -webkit-background-clip:text; color:transparent;"); + } + } + +} diff --git a/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/HeadingCustomizations.php b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/HeadingCustomizations.php new file mode 100644 index 0000000000000000000000000000000000000000..9795bd844c588b6d0e408aaeb94bd350710a7aaf --- /dev/null +++ b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/HeadingCustomizations.php @@ -0,0 +1,72 @@ +<?php + +namespace Drupal\edit_plus_sweet\EventSubscriber\LayoutBuilderBlockForm; + +use Drupal\edit_plus_sweet\Events\LayoutBuilderBlockFormAlterEvent; +use Drupal\Core\Template\Attribute; + +/** + * Alters the block form of the 'heading' custom block bundle. + */ +class HeadingCustomizations extends EnhancedTitleBase { + + /** + * {@inheritdoc} + */ + protected static array $configurableProperties = [ + 'first_color', + 'second_color', + 'gradient_rotation', + 'alignment', + ]; + + /** + * {@inheritdoc} + */ + public $blockId = 'heading'; + + /** + * {@inheritdoc} + */ + public function formAlter(LayoutBuilderBlockFormAlterEvent $event) { + parent::formAlter($event); + $form = $event->getForm(); + // Callouts need the block's label, so we're going to remove the ability to + // disable it from the form. + $form['settings']['label']['#access'] = TRUE; + $form['settings']['label_display']['#value'] = TRUE; + $form['settings']['label_display']['#access'] = FALSE; + $form['settings']['label_display']['#default_value'] = TRUE; + $event->setForm($form); + } + + /** + * {@inheritdoc} + */ + public static function addTitleOptions(array &$form, array $config) { + $form['alignment'] = [ + '#title' => t('Heading Alignment'), + '#type' => 'select', + '#options' => [ + 'text-align-left' => t('Left'), + 'text-align-center' => t('Center'), + 'text-align-right' => t('Right'), + ], + '#required' => TRUE, + '#default_value' => $config['alignment'] ?? 'text-align-left', + ]; + parent::addTitleOptions($form, $config); + } + + /** + * {@inheritdoc} + */ + public static function setTitleAttributes(Attribute $title_attributes, array $config) { + parent::setTitleAttributes($title_attributes, $config); + $title_attributes->addClass('heading-formatter'); + if (!empty($config['alignment'])) { + $title_attributes->addClass($config['alignment']); + } + } + +} diff --git a/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/LayoutBuilderBlockFormBase.php b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/LayoutBuilderBlockFormBase.php new file mode 100644 index 0000000000000000000000000000000000000000..f55da6a20277de7fbb42fd357da88217d65c290a --- /dev/null +++ b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/LayoutBuilderBlockFormBase.php @@ -0,0 +1,59 @@ +<?php + +namespace Drupal\edit_plus_sweet\EventSubscriber\LayoutBuilderBlockForm; + +use Drupal\layout_builder\Form\AddBlockForm; +use Drupal\layout_builder\Form\UpdateBlockForm; +use Drupal\layout_builder\Plugin\Block\InlineBlock; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Drupal\edit_plus_sweet\Events\LayoutBuilderBlockFormAlterEvent; + +abstract class LayoutBuilderBlockFormBase implements LayoutBuilderBlockFormInterface, EventSubscriberInterface { + + /** + * Required Block ID to act on. + * + * @var string + */ + public $blockId; + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events = []; + $events[LayoutBuilderBlockFormAlterEvent::class][] = ['onBlockFormAlter', 10]; + return $events; + } + + /** + * Checks the Block ID and calls formAlter(). + * + * @param \Drupal\edit_plus_sweet\Events\LayoutBuilderBlockFormAlterEvent $event + * The form alteration event. + * + * @throws \ReflectionException + */ + public function onBlockFormAlter(LayoutBuilderBlockFormAlterEvent $event) { + if (!$this->blockId) { + return; + } + $formObject = $event->getFormState()->getFormObject(); + $block = FALSE; + if ($formObject instanceof AddBlockForm || $formObject instanceof UpdateBlockForm) { + $p = new \ReflectionProperty($formObject, 'block'); + $p->setAccessible(TRUE); + /** @var $block InlineBlock **/ + // This isn't actually an inline block all the time, but the interface is + // standard, and we only operate on inline call to action blocks. + $block = $p->getValue($formObject); + } + if (!$block || ($block->getPluginId() !== "inline_block:{$this->blockId}" && $block->getPluginId() !== $this->blockId)) { + return; + } + + $event->setBlock($block); + $this->formAlter($event); + } + +} diff --git a/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/LayoutBuilderBlockFormInterface.php b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/LayoutBuilderBlockFormInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..7d7c203cd648fb3589b9884e3a798b5a0a3df22b --- /dev/null +++ b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/LayoutBuilderBlockFormInterface.php @@ -0,0 +1,20 @@ +<?php + +namespace Drupal\edit_plus_sweet\EventSubscriber\LayoutBuilderBlockForm; + +use Drupal\edit_plus_sweet\Events\LayoutBuilderBlockFormAlterEvent; + +/** + * Layout builder block form interface. + */ +interface LayoutBuilderBlockFormInterface { + + /** + * Block form alter. + * + * @param \Drupal\edit_plus_sweet\Events\ $event + * The block form alter event. + */ + public function formAlter(LayoutBuilderBlockFormAlterEvent $event); + +} diff --git a/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/TitleCustomizations.php b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/TitleCustomizations.php new file mode 100644 index 0000000000000000000000000000000000000000..058a228c7f5871345f2a1717598c948a3e1fb623 --- /dev/null +++ b/modules/edit_plus_sweet/src/EventSubscriber/LayoutBuilderBlockForm/TitleCustomizations.php @@ -0,0 +1,54 @@ +<?php + +namespace Drupal\edit_plus_sweet\EventSubscriber\LayoutBuilderBlockForm; + +use Drupal\edit_plus_sweet\Events\LayoutBuilderBlockFormAlterEvent; +use Drupal\layout_builder\LayoutBuilderEvents; + +class TitleCustomizations extends EnhancedTitleBase { + + public $blockId = 'field_block:node:landing_page:title'; + + public static function getSubscribedEvents() { + $events = parent::getSubscribedEvents(); + $events[LayoutBuilderEvents::SECTION_COMPONENT_BUILD_RENDER_ARRAY] = ['onBuildRender', 90]; + return $events; + } + + + public function formAlter(LayoutBuilderBlockFormAlterEvent $event) { + parent::formAlter($event); + $form = $event->getForm(); + if ($form['settings']['label']['#default_value'] === "Title") { + $form['settings']['label']['#value'] = "Page Title"; + } + $form['settings']['label']['#access'] = FALSE; + $form['settings']['label_display']['#value'] = FALSE; + $form['settings']['label_display']['#access'] = FALSE; + $form['settings']['formatter']['label']['#value'] = 'hidden'; + $form['settings']['formatter']['label']['#access'] = FALSE; + + $form['title_size']['#states'] = [ + 'visible' => [ + ':input[name="settings[formatter][type]"]' => ['value' => 'heading'], + ], + ]; + $form['title_color']['#states'] = [ + 'visible' => [ + ':input[name="settings[formatter][type]"]' => ['value' => 'heading'], + ], + ]; + $form['first_color']['#states']['visible'][] = [ + ':input[name="settings[formatter][type]"]' => ['value' => 'heading'], + ]; + $form['second_color']['#states']['visible'][] = [ + ':input[name="settings[formatter][type]"]' => ['value' => 'heading'], + ]; + $form['gradient_rotation']['#states']['visible'][] = [ + ':input[name="settings[formatter][type]"]' => ['value' => 'heading'], + ]; + + $event->setForm($form); + } + +} diff --git a/modules/edit_plus_sweet/src/Events/LayoutBuilderBlockFormAlterEvent.php b/modules/edit_plus_sweet/src/Events/LayoutBuilderBlockFormAlterEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..d1622c2204d47c6c94f4086f30b0623f5d9844db --- /dev/null +++ b/modules/edit_plus_sweet/src/Events/LayoutBuilderBlockFormAlterEvent.php @@ -0,0 +1,147 @@ +<?php + +namespace Drupal\edit_plus_sweet\Events; + +use Drupal\Core\Block\BlockPluginInterface; +use Drupal\Core\Form\FormStateInterface; +use Drupal\layout_builder\Plugin\Block\InlineBlock; +use Drupal\layout_builder\SectionComponent; +use Drupal\layout_builder\SectionStorageInterface; +use Symfony\Contracts\EventDispatcher\Event; + +class LayoutBuilderBlockFormAlterEvent extends Event { + + /** + * The form array being altered. + * + * @var array + */ + protected $form; + + /** + * The formState object for the form being altered. + * + * @var FormStateInterface + */ + protected $formState; + + /** + * The layout_builder instance storage the form appears within. + * + * @var SectionStorageInterface + */ + protected $storage; + + /** + * The region in which the block does or will appear. + * + * @var string + */ + protected $region; + + /** + * The block's configuration. + * + * This may be empty in the case that the block is being configured for the + * first time. + * + * @var array + */ + protected $configuration; + + /** + * The section component if available. + * + * @var SectionComponent|null + */ + protected $component; + + /** + * The inline block. + * + * @var + */ + protected $block; + + /** + * LayoutBuilderBlockFormAlterEvent constructor. + * @param array $form + * @param FormStateInterface $formState + * @param SectionStorageInterface $storage + * @param string $region + * @param array $configuration + * @param SectionComponent|null $param + */ + public function __construct(array $form, FormStateInterface $formState, SectionStorageInterface $storage, string $region, array $configuration, SectionComponent $component = NULL) { + $this->form = $form; + $this->formState = $formState; + $this->storage = $storage; + $this->region = $region; + $this->configuration = $configuration; + $this->component = $component; + } + + /** + * @return array + */ + public function getForm(): array { + return $this->form; + } + + /** + * @param array $form + */ + public function setForm(array $form): void { + $this->form = $form; + } + + /** + * @return FormStateInterface + */ + public function getFormState(): FormStateInterface { + return $this->formState; + } + + /** + * @return SectionStorageInterface + */ + public function getStorage(): SectionStorageInterface { + return $this->storage; + } + + /** + * @return string + */ + public function getRegion(): string { + return $this->region; + } + + /** + * @return array + */ + public function getConfiguration(): array { + return $this->configuration; + } + + /** + * @return SectionComponent|null + */ + public function getComponent() { + return $this->component; + } + + /** + * @return \Drupal\Core\Block\BlockPluginInterface + */ + public function getBlock(): BlockPluginInterface { + return $this->block; + } + + /** + * @param \Drupal\Core\Block\BlockPluginInterface $block + */ + public function setBlock(BlockPluginInterface $block): void { + $this->block = $block; + } + +}