layoutTempstoreRepository = $layout_tempstore_repository; $this->messenger = $messenger; } /** * {@inheritdoc} */ public static function getSubscribedEvents(): array { $events[LayoutBuilderEvents::PREPARE_LAYOUT][] = ['onPrepareLayout', 10]; return $events; } /** * Prepares a layout for use in the UI. * * @param \Drupal\layout_builder\Event\PrepareLayoutEvent $event * The prepare layout event. */ public function onPrepareLayout(PrepareLayoutEvent $event) { $section_storage = $event->getSectionStorage(); // If the layout has pending changes, add a warning. if ($this->layoutTempstoreRepository->has($section_storage)) { $this->messenger->addWarning($this->t('You have unsaved changes.')); } else { // If the layout is an override that has not yet been overridden, copy the // sections from the corresponding default. if ($section_storage instanceof OverridesSectionStorageInterface && !$section_storage->isOverridden()) { $sections = $section_storage->getDefaultSectionStorage()->getSections(); foreach ($sections as $section) { $section_storage->appendSection($section); } } // Add storage to tempstore regardless of what the storage is. $this->layoutTempstoreRepository->set($section_storage); } } }