Pull merge.
[yaffs-website] / web / core / modules / layout_builder / layout_builder.module
index 5d7c60615cf0f4924e0ce30dbcc1be7e13a218c9..373f7d8a0f1e3bfa4cc59ee0589503fb257626c4 100644 (file)
@@ -19,6 +19,7 @@ use Drupal\layout_builder\Plugin\Block\ExtraFieldBlock;
 use Drupal\layout_builder\InlineBlockEntityOperations;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Access\AccessResult;
+use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage;
 
 /**
  * Implements hook_help().
@@ -62,8 +63,8 @@ function layout_builder_entity_type_alter(array &$entity_types) {
 function layout_builder_form_entity_form_display_edit_form_alter(&$form, FormStateInterface $form_state) {
   // Hides the Layout Builder field. It is rendered directly in
   // \Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay::buildMultiple().
-  unset($form['fields']['layout_builder__layout']);
-  $key = array_search('layout_builder__layout', $form['#fields']);
+  unset($form['fields'][OverridesSectionStorage::FIELD_NAME]);
+  $key = array_search(OverridesSectionStorage::FIELD_NAME, $form['#fields']);
   if ($key !== FALSE) {
     unset($form['#fields'][$key]);
   }
@@ -177,7 +178,7 @@ function layout_builder_cron() {
 function layout_builder_plugin_filter_block_alter(array &$definitions, array $extra, $consumer) {
   // @todo Determine the 'inline_block' blocks should be allowed outside
   //   of layout_builder https://www.drupal.org/node/2979142.
-  if ($consumer !== 'layout_builder') {
+  if ($consumer !== 'layout_builder' || !isset($extra['list']) || $extra['list'] !== 'inline_blocks') {
     foreach ($definitions as $id => $definition) {
       if ($definition['id'] === 'inline_block') {
         unset($definitions[$id]);
@@ -202,3 +203,21 @@ function layout_builder_block_content_access(EntityInterface $entity, $operation
   }
   return AccessResult::forbidden();
 }
+
+/**
+ * Implements hook_plugin_filter_TYPE__CONSUMER_alter().
+ */
+function layout_builder_plugin_filter_block__block_ui_alter(array &$definitions, array $extra) {
+  foreach ($definitions as $id => $definition) {
+    // Filter out any layout_builder definition with required contexts.
+    if ($definition['provider'] === 'layout_builder' && !empty($definition['context'])) {
+      /** @var \Drupal\Core\Plugin\Context\ContextDefinitionInterface $context */
+      foreach ($definition['context'] as $context) {
+        if ($context->isRequired()) {
+          unset($definitions[$id]);
+          break;
+        }
+      }
+    }
+  }
+}