test_support-1.0.x-dev/tests/src/Traits/Installs/Configuration/InstallConfiguration.php

tests/src/Traits/Installs/Configuration/InstallConfiguration.php
<?php

namespace Drupal\Tests\test_support\Traits\Installs\Configuration;

use Drupal\Core\Config\FileStorage;
use Drupal\Core\Site\Settings;
use Drupal\Tests\test_support\Traits\Installs\InstallsTheme;
use Drupal\Tests\test_support\Traits\Support\Exceptions\ConfigInstallFailed;
use Drupal\Tests\test_support\Traits\Support\InteractsWithSettings;
use PHPUnit\Framework\Assert;

trait InstallConfiguration
{
    use InstallsTheme;
    use InteractsWithSettings;

    /** @var bool */
    private $useVfsConfigDirectory = false;

    /** @var string */
    private $customConfigDirectory;

    /** @var string[] */
    private $installedConfig = [];

    /** @param string|string[] $config */
    public function installExportedConfig($config): self
    {
        $configStorage = new FileStorage($this->configDirectory());

        foreach ((array) $config as $configName) {
            if (in_array($configName, $this->installedConfig)) {
                continue;
            }

            $this->installedConfig[] = $configName;

            $configRecord = $configStorage->read($configName);

            if (is_array($configRecord) === false) {
                throw ConfigInstallFailed::doesNotExist($configName);
            }

            if ($this->strictConfigSchema) {
                if (isset($configRecord['dependencies']['module'])) {
                    $this->enableModules($configRecord['dependencies']['module']);
                }

                if (isset($configRecord['dependencies']['config'])) {
                    $this->installExportedConfig($configRecord['dependencies']['config']);
                }

                if (isset($configRecord['dependencies']['theme'])) {
                    $this->installThemes($configRecord['dependencies']['theme']);
                }
            }

            $entityType = $this->container->get('config.manager')->getEntityTypeIdByName($configName);

            if ($entityType) {
                $storage = $this->container->get('entity_type.manager')->getStorage($entityType);

                /** @phpstan-ignore-next-line */
                $storage->createFromStorageRecord($configRecord)->save();

                continue;
            }

            $this->container->get('config.factory')->getEditable($configName)->setData($configRecord)->save();
        }

        return $this;
    }

    protected function configDirectory(): string
    {
        if ($this->useVfsConfigDirectory) {
            $configDirectory = Settings::get('config_sync_directory');

            if (is_string($configDirectory) === false) {
                Assert::fail('Could not resolve configuration directory. Found: ' . $configDirectory);
            }

            return $configDirectory;
        }

        if ($this->customConfigDirectory) {
            return '/' . ltrim($this->customConfigDirectory, '/');
        }

        return $this->getConfigurationDirectory();
    }

    /** sets the config directory relative to the __fixtures__ directory */
    protected function setConfigDirectory(string $directory): self
    {
        $this->customConfigDirectory = $directory;

        return $this;
    }

    protected function useVfsConfigDirectory(): self
    {
        $this->useVfsConfigDirectory = true;

        return $this;
    }
}

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

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