Commit 92ef0569 authored by Matthieu Scarset's avatar Matthieu Scarset
Browse files

Support Inline Block references from layout builder fields #3300925

parent 18288025
Loading
Loading
Loading
Loading
+39 −7
Original line number Diff line number Diff line
@@ -155,15 +155,47 @@ class UsageController extends ControllerBase {
    }));

    // Get entities fro specific fields.
    $fields = $entity->getFieldDefinitions();
    $fields = method_exists($entity, 'getFieldDefinitions') ? $entity->getFieldDefinitions() : [];

    // Recursive call for each paragraphs.
    $paragraph_fields = array_filter($fields, function ($field_definition) {
      return $field_definition->getType() == 'entity_reference_revisions';
    // Recursive call for specific entity_reference.
    $entity_reference_fields = ['entity_reference', 'entity_reference_revisions', 'layout_section'];
    $entity_fields = array_filter($fields, function ($field_definition) use ($entity_reference_fields) {
      return in_array($field_definition->getType(), $entity_reference_fields);
    });
    foreach (array_keys($paragraph_fields) as $field_name) {
      foreach ($entity->get($field_name)->referencedEntities() as $paragraph) {
        $ids = array_merge($ids, $this->extractEntityIdsFromEntity($entity_type_id, $paragraph));
    foreach (array_keys($entity_fields) as $field_name) {
      // Skip. Field disappeared.
      if (!$entity->hasField($field_name)) {
        continue;
      }

      $items = $entity->get($field_name);
      switch ($items->getFieldDefinition()->getType()) {
        case 'layout_section':
          // Get inline block references from Layout Builder.
          $referenced_entities = [];
          foreach ($items->getSections() as $section) {
            foreach ($section->getComponents() as $component) {
              $plugin = $component->getPlugin();
              switch ($plugin->getBaseId()) {
                case 'inline_block':
                  $revision_id = $plugin->getConfiguration()['block_revision_id'];
                  $this->referencedIds['block_content'] += [$revision_id];
                  break;
                default:
                  // @todo What should we do if plugin unknown?
                  break;
              }
            }
          }
          break;
        default:
          // Safely get referenced entities.
          $referenced_entities = method_exists($items, 'referencedEntities') ? $items->referencedEntities() : [];
          break;
      }

      foreach ($referenced_entities as $referenced_entity) {
        $ids = array_merge($ids, $this->extractEntityIdsFromEntity($entity_type_id, $referenced_entity));
      }
    }