You are here

class PageManager in Bootstrap Layouts 8.4

Same name and namespace in other branches
  1. 8.5 src/Plugin/BootstrapLayouts/PageManager.php \Drupal\bootstrap_layouts\Plugin\BootstrapLayouts\PageManager

Handles Display Suite specific layout implementations.

Plugin annotation

@BootstrapLayoutsHandler("page_manager");

Hierarchy

Expanded class hierarchy of PageManager

File

src/Plugin/BootstrapLayouts/PageManager.php, line 12

Namespace

Drupal\bootstrap_layouts\Plugin\BootstrapLayouts
View source
class PageManager extends BootstrapLayoutsHandlerBase {

  /**
   * {@inheritdoc}
   */
  public function loadInstances(array $entity_ids = NULL) {
    $layouts = [];
    $properties = [
      'variant' => 'panels_variant',
    ];
    if ($entity_ids) {
      $properties['id'] = $entity_ids;
    }

    /** @var \Drupal\Core\Entity\EntityTypeManager $entity_type_manager */
    $entity_type_manager = $this->container
      ->get('entity_type.manager');

    /** @var \Drupal\Core\Config\Entity\ConfigEntityInterface[] $config_entities */
    $config_entities = $entity_type_manager
      ->getStorage('page_variant')
      ->loadByProperties($properties);
    foreach ($config_entities as $entity_id => $config_entity) {
      if (($info = $config_entity
        ->get('variant_settings')) && isset($info['layout']) && isset($info['blocks'])) {
        $id = $info['layout'];

        // BootstrapLayout requires an associative array of "items" assigned to
        // a particular region, keyed by that region. Unfortunately, Page
        // Manager stores this value inside each block array; extract it.
        $regions = [];
        foreach ($info['blocks'] as $uuid => $block) {
          $regions[$block['region']][$uuid] = $block;
        }

        // Retrieve any layout settings.
        $settings = isset($info['layout_settings']) ? $info['layout_settings'] : [];

        // Create a new BootstrapLayout instance.
        $layouts[$entity_id] = new BootstrapLayout($id, $regions, $settings);
      }
    }
    return $layouts;
  }

  /**
   * {@inheritdoc}
   */
  public function saveInstances(array $layouts = []) {

    /** @var \Drupal\Core\Entity\EntityTypeManager $entity_type_manager */
    $entity_type_manager = $this->container
      ->get('entity_type.manager');

    /** @var \Drupal\Core\Config\Entity\ConfigEntityInterface[] $config_entities */
    $config_entities = $entity_type_manager
      ->getStorage('page_variant')
      ->loadByProperties([
      'variant' => 'panels_variant',
      'id' => array_keys($layouts),
    ]);

    /** @var \Drupal\bootstrap_layouts\BootstrapLayout[] $layouts */
    foreach ($layouts as $entity_id => $layout) {
      $config_entity = $config_entities[$entity_id];
      $info = $config_entity
        ->get('variant_settings');
      $info['layout'] = $layout
        ->getId();

      // The region is stored inside the block array. To effectively change
      // a region for a block, the variant's blocks must be iterated over and
      // changed manually based on the associative region key provided by the
      // BootstrapLayout instance.
      $info['blocks'] = [];
      foreach ($layout
        ->getRegions() as $region => $blocks) {
        foreach ($blocks as $uuid => $block) {
          $block['region'] = $region;
          $info['blocks'][$uuid] = $block;
        }
      }
      $info['layout_settings'] = $layout
        ->getSettings();
      $config_entity
        ->set('variant_settings', $info)
        ->save();
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BootstrapLayoutsHandlerBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
BootstrapLayoutsHandlerBase::getLabel public function Retrieves the human readable label for the plugin. Overrides BootstrapLayoutsHandlerInterface::getLabel
BootstrapLayoutsHandlerBase::loadInstance public function Loads a specific layout instance. Overrides BootstrapLayoutsHandlerInterface::loadInstance
BootstrapLayoutsHandlerBase::saveInstance public function Saves a specific layout instance. Overrides BootstrapLayoutsHandlerInterface::saveInstance
BootstrapLayoutsHandlerBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PageManager::loadInstances public function Loads layout instances. Overrides BootstrapLayoutsHandlerInterface::loadInstances
PageManager::saveInstances public function Saves layout instances. Overrides BootstrapLayoutsHandlerInterface::saveInstances
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.