Commit 69e57371 authored by Daniel Storgårds's avatar Daniel Storgårds Committed by Sascha Eggenberger
Browse files

Resolve #3147708 "D9 compatibility"

parent a52e1e60
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -24,5 +24,8 @@ services:
      - '%twig.config%'
      - '@cache.graphql_twig.components'
      - '@app.root'
      - '@file_system'
      - '@extension.list.theme'
      - '@logger.factory'
    tags:
    - { name: twig.loader, priority: 1000 }
+46 −4
Original line number Diff line number Diff line
@@ -3,6 +3,10 @@
namespace Drupal\graphql_twig\Template\Loader;

use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ThemeExtensionList;
use Drupal\Core\File\Exception\FileException;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Theme\ThemeManagerInterface;

/**
@@ -11,6 +15,8 @@ use Drupal\Core\Theme\ThemeManagerInterface;
class Loader extends \Twig_Loader_Filesystem {

  /**
   * Provides a high level access to the active theme and methods to use it.
   *
   * @var \Drupal\Core\Theme\ThemeManagerInterface
   */
  protected $themeManager;
@@ -23,6 +29,8 @@ class Loader extends \Twig_Loader_Filesystem {
  protected $components = NULL;

  /**
   * Defines an interface for cache implementations.
   *
   * @var \Drupal\Core\Cache\CacheBackendInterface
   */
  protected $cacheBackend;
@@ -32,6 +40,27 @@ class Loader extends \Twig_Loader_Filesystem {
   */
  protected $twigConfig;

  /**
   * Provides an interface for helpers that operate on files and stream wrappers.
   *
   * @var \Drupal\Core\File\FileSystemInterface
   */
  protected $fileSystem;

  /**
   * Provides a list of available themes.
   *
   * @var \Drupal\Core\Extension\ThemeExtensionList
   */
  protected $themeExtensionList;

  /**
   * The logger.
   *
   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
   */
  protected $logger;

  /**
   * Constructor.
   */
@@ -40,12 +69,18 @@ class Loader extends \Twig_Loader_Filesystem {
    array $twigConfig,
    CacheBackendInterface $cacheBackend,
    $paths = [],
    FileSystemInterface $fileSystem,
    ThemeExtensionList $themeExtensionList,
    LoggerChannelFactoryInterface $logger,
    $rootPath = NULL
  ) {
    parent::__construct($paths, $rootPath);
    $this->cacheBackend = $cacheBackend;
    $this->twigConfig = $twigConfig;
    $this->themeManager = $themeManager;
    $this->fileSystem = $fileSystem;
    $this->themeExtensionList = $themeExtensionList;
    $this->logger = $logger->get('graphql_twig');
  }

  /**
@@ -62,9 +97,14 @@ class Loader extends \Twig_Loader_Filesystem {
      return $cache->data;
    }

    foreach (file_scan_directory($path, '/.*\.twig$/') as $file) {
    try {
      foreach ($this->fileSystem->scanDirectory($path, '/.*\.twig$/') as $file) {
        $this->components[$file->name] = $file->uri;
      }
    }
    catch (FileException $exception) {
      $this->logger->error($exception->getMessage());
    }

    if ($this->twigConfig['cache']) {
      $this->cacheBackend->set($path, $this->components);
@@ -82,12 +122,14 @@ class Loader extends \Twig_Loader_Filesystem {
      // Scan the directory for any twig files and register them.
      // TODO: inherit components from base theme.
      $activeTheme = $this->themeManager->getActiveTheme();
      $info = \Drupal::service('extension.list.theme')->getExtensionInfo($activeTheme->getName());
      $info = $this->themeExtensionList->getExtensionInfo($activeTheme->getName());
      $componentsDirectory = array_key_exists('components', $info)
        ? $info['components']
        : $activeTheme->getPath() . '/components';
      if (is_dir($componentsDirectory)) {
        $this->components = $this->listComponents($componentsDirectory);
      }
    }

    if ($name[0] === '#') {
      $component = substr($name, 1);
+3 −1
Original line number Diff line number Diff line
@@ -30,13 +30,15 @@ class BlockTest extends GraphQLTestBase {
    $this->installConfig(['graphql_twig']);

    $themeName = 'graphql_twig_test_theme';
    \Drupal::service('theme_installer')->install([$themeName]);

    /** @var \Drupal\Core\Extension\ThemeInstaller $themeInstaller */
    $themeInstaller = $this->container->get('theme_installer');
    /** @var \Drupal\Core\Theme\ThemeInitialization $themeInitialization */
    $themeInitialization = $this->container->get('theme.initialization');
    /** @var \Drupal\Core\Theme\ThemeManager $themeManager */
    $themeManager = $this->container->get('theme.manager');

    $themeInstaller->install([$themeName]);
    $theme = $themeInitialization->initTheme($themeName);
    $themeManager->setActiveTheme($theme);

+3 −1
Original line number Diff line number Diff line
@@ -26,13 +26,15 @@ class RouteTest extends GraphQLTestBase {
    parent::setUp();

    $themeName = 'graphql_twig_test_theme';
    \Drupal::service('theme_installer')->install([$themeName]);

    /** @var \Drupal\Core\Extension\ThemeInstaller $themeInstaller */
    $themeInstaller = $this->container->get('theme_installer');
    /** @var \Drupal\Core\Theme\ThemeInitialization $themeInitialization */
    $themeInitialization = $this->container->get('theme.initialization');
    /** @var \Drupal\Core\Theme\ThemeManager $themeManager */
    $themeManager = $this->container->get('theme.manager');

    $themeInstaller->install([$themeName]);
    $theme = $themeInitialization->initTheme($themeName);
    $themeManager->setActiveTheme($theme);

+3 −3
Original line number Diff line number Diff line
@@ -37,15 +37,15 @@ trait ThemeTestTrait {
      $this->container->set('graphql.query_processor', $this->processor->reveal());

      $themeName = 'graphql_twig_test_theme';
      \Drupal::service('theme_installer')->install([$themeName]);

      /** @var \Drupal\Core\Extension\ThemeHandler $themeHandler */
      $themeHandler = $this->container->get('theme_handler');
      /** @var \Drupal\Core\Extension\ThemeInstaller $themeInstaller */
      $themeInstaller = $this->container->get('theme_installer');
      /** @var \Drupal\Core\Theme\ThemeInitialization $themeInitialization */
      $themeInitialization = $this->container->get('theme.initialization');
      /** @var \Drupal\Core\Theme\ThemeManager $themeManager */
      $themeManager = $this->container->get('theme.manager');

      $themeInstaller->install([$themeName]);
      $theme = $themeInitialization->initTheme($themeName);
      $themeManager->setActiveTheme($theme);
    }