You are here

public function PluginHelperTrait::getValuefromSectionStorage in Layout Builder Restrictions 8.2

A helper function to return values derivable from section storage.

Parameters

array $section_storage: A section storage object nested in an array.

string $requested_value: The value to be returned.

Return value

mixed The return value depends on $requested_value parameter:

  • contexts (array)
  • entity (object)
  • view mode (string)
  • bundle (string)
  • entity_type (string)
  • storage (object)
  • view_display (object)
4 calls to PluginHelperTrait::getValuefromSectionStorage()
EntityViewModeRestriction::blockAllowedinContext in src/Plugin/LayoutBuilderRestriction/EntityViewModeRestriction.php
Determine whether the block being moved is allowed to the destination.
EntityViewModeRestriction::inlineBlocksAllowedinContext in src/Plugin/LayoutBuilderRestriction/EntityViewModeRestriction.php
Returns an array of allowed inline blocks in a given context.
EntityViewModeRestrictionByRegion::blockAllowedinContext in modules/layout_builder_restrictions_by_region/src/Plugin/LayoutBuilderRestriction/EntityViewModeRestrictionByRegion.php
Determine whether the block being moved is allowed to the destination.
EntityViewModeRestrictionByRegion::inlineBlocksAllowedinContext in modules/layout_builder_restrictions_by_region/src/Plugin/LayoutBuilderRestriction/EntityViewModeRestrictionByRegion.php
Returns an array of allowed inline blocks in a given context.

File

src/Traits/PluginHelperTrait.php, line 237

Class

PluginHelperTrait
Methods to help Layout Builder Restrictions plugins.

Namespace

Drupal\layout_builder_restrictions\Traits

Code

public function getValuefromSectionStorage(array $section_storage, $requested_value) {
  $section_storage = array_shift($section_storage);
  $contexts = $section_storage
    ->getContexts();

  // Provide a fallback view mode; this will be overridden by specific
  // contexts, below. We need a fallback since some entity types (such as
  // Layout entities) do not implement a view mode.
  $view_mode = 'default';
  if ($requested_value == 'contexts') {
    return $contexts;
  }
  if ($section_storage instanceof OverridesSectionStorageInterface) {
    $entity = $contexts['entity']
      ->getContextValue();
    $view_mode = $contexts['view_mode']
      ->getContextValue();
    $entity_type = $entity
      ->getEntityTypeId();
    $bundle = $entity
      ->bundle();
  }
  elseif (isset($contexts['entity']) && $contexts['entity']
    ->getContextValue() instanceof ConfigEntityBase) {
    $entity = $view_display = $contexts['entity']
      ->getContextValue();
    $entity_type = $entity
      ->getEntityTypeId();
    $bundle = $entity
      ->bundle();
  }
  elseif (get_class($section_storage) == 'Drupal\\mini_layouts\\Plugin\\SectionStorage\\MiniLayoutSectionStorage') {
    $view_display = $contexts['display']
      ->getContextValue();
  }
  elseif (isset($contexts['display'])) {
    $entity = $contexts['display']
      ->getContextValue();
    $view_mode = $entity
      ->getMode();
    $bundle = $entity
      ->getTargetBundle();
    $entity_type = $entity
      ->getTargetEntityTypeId();
  }
  elseif (isset($contexts['layout'])) {
    $entity = $contexts['layout']
      ->getContextValue();
    $bundle = $entity
      ->getTargetBundle();
    $entity_type = $entity
      ->getTargetEntityType();
  }
  switch ($requested_value) {
    case 'entity':
      return $entity;
    case 'view_mode':
      return $view_mode;
    case 'bundle':
      return $bundle;
    case 'entity_type':
      return $entity_type;
  }
  $context = $entity_type . "." . $bundle . "." . $view_mode;
  $storage = \Drupal::entityTypeManager()
    ->getStorage('entity_view_display');
  if ($requested_value == 'storage') {
    return $storage;
  }
  if (empty($view_display)) {
    $view_display = $storage
      ->load($context);
  }
  if ($requested_value == 'view_display') {
    return $view_display;
  }
  $third_party_settings = $view_display
    ->getThirdPartySetting('layout_builder_restrictions', 'entity_view_mode_restriction', []);
  if ($requested_value == 'third_party_settings') {
    return $third_party_settings;
  }
  return NULL;
}