page_manager-8.x-4.0-beta6/page_manager.post_update.php

page_manager.post_update.php
<?php

/**
 * @file
 * Post update functions for page_manager module.
 */

use Drupal\Core\Config\Entity\ConfigEntityUpdater;
use Drupal\page_manager\PageInterface;
use Drupal\page_manager\PageVariantInterface;

/**
 * Updating page variants with new current_user context name.
 */
function page_manager_post_update_replace_current_user_context(&$sandbox = NULL) {
  \Drupal::classResolver(ConfigEntityUpdater::class)
    ->update($sandbox, 'page_variant', function (PageVariantInterface $pageVariant) {
      $process_contexts = function (&$context_mapping) {
        foreach ($context_mapping as $type => $name) {
          if ($name == 'current_user') {
            $context_mapping[$type] = '@user.current_user_context:current_user';
          }
        }
      };

      $conditions = $pageVariant->get('selection_criteria');
    if (isset($conditions)) {
      foreach ($conditions as &$condition) {
        $process_contexts($condition['context_mapping']);
      }
      $pageVariant->set('selection_criteria', $conditions);
    }

      $variant_settings = $pageVariant->get('variant_settings');
    if (isset($variant_settings['blocks'])) {
      foreach ($variant_settings['blocks'] as &$block) {
        $process_contexts($block['context_mapping']);
      }
      $pageVariant->set('variant_settings', $variant_settings);
    }

      $pageVariant->save();
    });
}

/**
 * Update node type selection criteria from node_type to entity_bundle:node.
 */
function page_manager_post_update_selection_criteria_node_type(&$sandbox = NULL) {
  \Drupal::classResolver(ConfigEntityUpdater::class)
    ->update($sandbox, 'page_variant', function (PageVariantInterface $pageVariant) {
      $conditions = $pageVariant->get('selection_criteria');
      if (isset($conditions)) {
        $changed = FALSE;
        foreach ($conditions as &$condition) {
          if ($condition['id'] === 'node_type') {
            $condition['id'] = 'entity_bundle:node';
            $changed = TRUE;
          }
        }
        if ($changed) {
          $pageVariant
            ->set('selection_criteria', $conditions)
            ->save();
        }
      }
    });
}

/**
 * Update node type access conditions from node_type to entity_bundle:node.
 */
function page_manager_post_update_access_conditions_node_type(&$sandbox = NULL) {
  \Drupal::classResolver(ConfigEntityUpdater::class)
    ->update($sandbox, 'page', function (PageInterface $page) {
      $conditions = $page->get('access_conditions');
      if (isset($conditions)) {
        $changed = FALSE;
        foreach ($conditions as &$condition) {
          if ($condition['id'] === 'node_type') {
            $condition['id'] = 'entity_bundle:node';
            $changed = TRUE;
          }
        }
        if ($changed) {
          $page
            ->set('access_conditions', $conditions)
            ->save();
        }
      }
    });
}

/**
 * Update container for page_manager.page_access_check arguments.
 */
function page_manager_post_update_page_access_check_service_refactor() {
  // Intentionally empty to trigger a service container rebuild.
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc