class ExtensionInstallStorage

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Config/ExtensionInstallStorage.php \Drupal\Core\Config\ExtensionInstallStorage
  2. 8.9.x core/lib/Drupal/Core/Config/ExtensionInstallStorage.php \Drupal\Core\Config\ExtensionInstallStorage
  3. 10 core/lib/Drupal/Core/Config/ExtensionInstallStorage.php \Drupal\Core\Config\ExtensionInstallStorage

Storage to access configuration and schema in enabled extensions.

Hierarchy

Expanded class hierarchy of ExtensionInstallStorage

See also

\Drupal\Core\Config\ConfigInstaller

\Drupal\Core\Config\TypedConfigManager

2 files declare their use of ExtensionInstallStorage
ExtensionInstallStorageTest.php in core/tests/Drupal/Tests/Core/Config/ExtensionInstallStorageTest.php
LocaleDefaultConfigStorage.php in core/modules/locale/src/LocaleDefaultConfigStorage.php

File

core/lib/Drupal/Core/Config/ExtensionInstallStorage.php, line 13

Namespace

Drupal\Core\Config
View source
class ExtensionInstallStorage extends InstallStorage {
    
    /**
     * The active configuration store.
     *
     * @var \Drupal\Core\Config\StorageInterface
     */
    protected $configStorage;
    
    /**
     * Flag to include the profile in the list of enabled modules.
     *
     * @var bool
     */
    protected $includeProfile = TRUE;
    
    /**
     * The name of the currently active installation profile.
     *
     * In the early installer this value can be NULL.
     *
     * @var string|false|null
     */
    protected $installProfile;
    
    /**
     * Overrides \Drupal\Core\Config\InstallStorage::__construct().
     *
     * @param \Drupal\Core\Config\StorageInterface $config_storage
     *   The active configuration store where the list of enabled modules and
     *   themes is stored.
     * @param string $directory
     *   The directory to scan in each extension to scan for files.
     * @param string $collection
     *   The collection to store configuration in.
     * @param bool $include_profile
     *   Whether to include the install profile in extensions to
     *   search and to get overrides from.
     * @param string $profile
     *   The current installation profile.
     */
    public function __construct(StorageInterface $config_storage, $directory, $collection, $include_profile, $profile) {
        parent::__construct($directory, $collection);
        $this->configStorage = $config_storage;
        $this->includeProfile = $include_profile;
        $this->installProfile = $profile;
    }
    
    /**
     * {@inheritdoc}
     */
    public function createCollection($collection) {
        return new static($this->configStorage, $this->directory, $collection, $this->includeProfile, $this->installProfile);
    }
    
    /**
     * Returns a map of all config object names and their folders.
     *
     * The list is based on enabled modules and themes. The active configuration
     * storage is used rather than \Drupal\Core\Extension\ModuleHandler and
     *  \Drupal\Core\Extension\ThemeHandler in order to resolve circular
     * dependencies between these services and \Drupal\Core\Config\ConfigInstaller
     * and \Drupal\Core\Config\TypedConfigManager.
     *
     * @return array
     *   An array mapping config object names with directories.
     */
    protected function getAllFolders() {
        if (!isset($this->folders)) {
            $this->folders = [];
            $this->folders += $this->getCoreNames();
            $extensions = $this->configStorage
                ->read('core.extension');
            // @todo Remove this scan as part of https://www.drupal.org/node/2186491
            $listing = new ExtensionDiscovery(\Drupal::root());
            if (!empty($extensions['module'])) {
                $modules = $extensions['module'];
                // Remove the install profile as this is handled later.
                unset($modules[$this->installProfile]);
                $profile_list = $listing->scan('profile');
                if ($this->installProfile && isset($profile_list[$this->installProfile])) {
                    // Prime the \Drupal\Core\Extension\ExtensionList::getPathname()
                    // static cache with the profile info file location so we can use
                    // ExtensionList::getPath() on the active profile during the module
                    // scan.
                    // @todo Remove as part of https://www.drupal.org/node/2186491
                    
                    /** @var \Drupal\Core\Extension\ProfileExtensionList $profile_extension_list */
                    $profile_extension_list = \Drupal::service('extension.list.profile');
                    $profile_extension_list->setPathname($this->installProfile, $profile_list[$this->installProfile]
                        ->getPathname());
                }
                $module_list_scan = $listing->scan('module');
                $module_list = [];
                foreach (array_keys($modules) as $module) {
                    if (isset($module_list_scan[$module])) {
                        $module_list[$module] = $module_list_scan[$module];
                    }
                }
                $this->folders += $this->getComponentNames($module_list);
            }
            if (!empty($extensions['theme'])) {
                $theme_list_scan = $listing->scan('theme');
                foreach (array_keys($extensions['theme']) as $theme) {
                    if (isset($theme_list_scan[$theme])) {
                        $theme_list[$theme] = $theme_list_scan[$theme];
                    }
                }
                $this->folders += $this->getComponentNames($theme_list);
            }
            if ($this->includeProfile) {
                // The install profile can override module default configuration. We do
                // this by replacing the config file path from the module/theme with the
                // install profile version if there are any duplicates.
                if ($this->installProfile) {
                    if (!isset($profile_list)) {
                        $profile_list = $listing->scan('profile');
                    }
                    if (isset($profile_list[$this->installProfile])) {
                        $profile_folders = $this->getComponentNames([
                            $profile_list[$this->installProfile],
                        ]);
                        $this->folders = $profile_folders + $this->folders;
                    }
                }
            }
        }
        return $this->folders;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
ExtensionInstallStorage::$configStorage protected property The active configuration store.
ExtensionInstallStorage::$includeProfile protected property Flag to include the profile in the list of enabled modules.
ExtensionInstallStorage::$installProfile protected property The name of the currently active installation profile.
ExtensionInstallStorage::createCollection public function Creates a collection on the storage. Overrides FileStorage::createCollection
ExtensionInstallStorage::getAllFolders protected function Returns a map of all config object names and their folders. Overrides InstallStorage::getAllFolders
ExtensionInstallStorage::__construct public function Overrides \Drupal\Core\Config\InstallStorage::__construct(). Overrides InstallStorage::__construct
FileStorage::$collection protected property The storage collection.
FileStorage::$fileCache protected property The file cache object.
FileStorage::decode public function Decodes configuration data from the storage-specific format. Overrides StorageInterface::decode
FileStorage::encode public function Encodes configuration data into the storage-specific format. Overrides StorageInterface::encode
FileStorage::ensureStorage protected function Check if the directory exists and create it if not.
FileStorage::getAllCollectionNames public function Gets the existing collections. Overrides StorageInterface::getAllCollectionNames
FileStorage::getAllCollectionNamesHelper protected function Helper function for getAllCollectionNames().
FileStorage::getCollectionDirectory protected function Gets the directory for the collection.
FileStorage::getCollectionName public function Gets the name of the current collection the storage is using. Overrides StorageInterface::getCollectionName
FileStorage::getFileExtension public static function Returns the file extension used by the file storage for all configuration files.
FileStorage::getFileSystem private function Returns file system service.
FileStorage::read public function Implements Drupal\Core\Config\StorageInterface::read(). Overrides StorageInterface::read
FileStorage::readMultiple public function Reads configuration data from the storage. Overrides StorageInterface::readMultiple
InstallStorage::$directory protected property The directory to scan in each extension to scan for files. Overrides FileStorage::$directory
InstallStorage::$folders protected property Folder map indexed by configuration name.
InstallStorage::CONFIG_INSTALL_DIRECTORY constant Extension sub-directory containing default configuration for installation.
InstallStorage::CONFIG_OPTIONAL_DIRECTORY constant Extension sub-directory containing optional configuration for installation.
InstallStorage::CONFIG_SCHEMA_DIRECTORY constant Extension sub-directory containing configuration schema.
InstallStorage::delete public function Overrides Drupal\Core\Config\FileStorage::delete(). Overrides FileStorage::delete
InstallStorage::deleteAll public function Overrides Drupal\Core\Config\FileStorage::deleteAll(). Overrides FileStorage::deleteAll
InstallStorage::exists public function Returns whether a configuration object exists. Overrides FileStorage::exists
InstallStorage::getComponentFolder protected function Get folder inside each component that contains the files.
InstallStorage::getComponentNames public function Get all configuration names and folders for a list of modules or themes.
InstallStorage::getCoreFolder protected function Get folder inside Drupal core that contains the files.
InstallStorage::getCoreNames public function Get all configuration names and folders for Drupal core.
InstallStorage::getFilePath public function Overrides Drupal\Core\Config\FileStorage::getFilePath(). Overrides FileStorage::getFilePath
InstallStorage::listAll public function Gets configuration object names starting with a given prefix. Overrides FileStorage::listAll
InstallStorage::rename public function Overrides Drupal\Core\Config\FileStorage::rename(). Overrides FileStorage::rename
InstallStorage::reset public function Resets the static cache.
InstallStorage::write public function Overrides Drupal\Core\Config\FileStorage::write(). Overrides FileStorage::write
StorageInterface::DEFAULT_COLLECTION constant The default collection name.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.