You are here

class LayoutBuilderIdsService in Layout builder ids 2.0.x

Class UWService.

UW Service that holds common functionality used by uw blocks.

@package Drupal\uw_cfg_common\Service

Hierarchy

Expanded class hierarchy of LayoutBuilderIdsService

2 files declare their use of LayoutBuilderIdsService
LayoutBuilderIdsConfigureBlock.php in src/EventSubscriber/LayoutBuilderIdsConfigureBlock.php
LayoutBuilderIdsConfigureSection.php in src/EventSubscriber/LayoutBuilderIdsConfigureSection.php
1 string reference to 'LayoutBuilderIdsService'
layout_builder_ids.services.yml in ./layout_builder_ids.services.yml
layout_builder_ids.services.yml
1 service uses LayoutBuilderIdsService
layout_builder_ids.layout_builder_ids_service in ./layout_builder_ids.services.yml
\Drupal\layout_builder_ids\Service\LayoutBuilderIdsService

File

src/Service/LayoutBuilderIdsService.php, line 14

Namespace

Drupal\layout_builder_ids\Service
View source
class LayoutBuilderIdsService implements LayoutBuilderIdsServiceInterface {

  /**
   * {@inheritDoc}
   */
  public static function layoutBuilderIdsCheckIds(string $layout_builder_id, FormStateInterface $form_state, string $type) : bool {

    // Return the found id, which will tell us if we have a
    // duplicate id.
    return LayoutBuilderIdsService::layoutBuilderIdsCheckSectionIds($layout_builder_id, $form_state, $type) || LayoutBuilderIdsService::layoutBuilderIdsCheckBlockIds($layout_builder_id, $form_state, $type);
  }

  /**
   * {@inheritDoc}
   */
  public static function layoutBuilderIdsCheckSectionIds(string $layout_builder_id, FormStateInterface $form_state, string $type) : bool {

    // Get the sections from the formObject.
    $sections = $form_state
      ->getFormObject()
      ->getSectionStorage()
      ->getSections();

    // Set the delta to null to start.
    $delta = NULL;

    // If we are on a section check, then get the delta
    // form the form state.
    if ($type == 'section') {

      // Get the delta from the form state.
      $delta = $form_state
        ->getBuildInfo()['args'][1];
    }

    // Step through each section and check for duplicate id.
    foreach ($sections as $index => $section) {

      // If we are on a section check and the delta is the same
      // as the index we are on, just skip over the check, so
      // that we are not checking the current section.
      if ($type == 'section' && $delta == $index) {
        continue;
      }

      // Get the layout settings for the section.
      $layout_settings = $section
        ->getLayoutSettings();

      // If there is a layout_builder_id setting and it is the same as the
      // specified id, then return TRUE, as we found a duplicate id.
      if (isset($layout_settings['layout_builder_id']) && $layout_settings['layout_builder_id'] == $layout_builder_id) {
        return TRUE;
      }
    }

    // Return FALSE as we will return TRUE if we find a duplicate.
    return FALSE;
  }

  /**
   * {@inheritDoc}
   */
  public static function layoutBuilderIdsCheckBlockIds(string $layout_builder_id, FormStateInterface $form_state, string $type) : bool {

    // Get the sections from the formObject.
    $sections = $form_state
      ->getFormObject()
      ->getSectionStorage()
      ->getSections();

    // If we are on a block check, get the current component uuid.
    if ($type == 'block') {

      // Get the current component uuid.
      $current_component_uuid = $form_state
        ->getFormObject()
        ->getCurrentComponent()
        ->get('uuid');
    }

    // Step through each section and get the blocks to
    // check for duplicate ids.
    foreach ($sections as $section) {

      // Get the components of the section.
      $components = $section
        ->getComponents();

      // Step through each of the components and check for duplicate ids.
      foreach ($components as $uuid => $component) {

        // If we are on a block check and we are looking at the current
        // component, skip the check for ID.
        if ($type == 'block' && $uuid == $current_component_uuid) {
          continue;
        }

        // Get the additional setting from the component.
        $additional = $component
          ->get('additional');

        // Ensure that the layout_builder_id is set in additional settings.
        if (isset($additional['layout_builder_id'])) {

          // If there is already an id with the one specified return TRUE.
          if ($additional['layout_builder_id'] == $layout_builder_id) {
            return TRUE;
          }
        }
      }
    }

    // Return FALSE as we will return TRUE if we find a duplicate.
    return FALSE;
  }

}

Members