Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 57 |
ExtensionInstallStorage | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
272 | |
0.00% |
0 / 57 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
createCollection | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
getAllFolders | |
0.00% |
0 / 1 |
210 | |
0.00% |
0 / 46 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Config\ExtensionInstallStorage. | |
*/ | |
namespace Drupal\Core\Config; | |
use Drupal\Core\Site\Settings; | |
use Drupal\Core\Extension\ExtensionDiscovery; | |
/** | |
* Storage to access configuration and schema in enabled extensions. | |
* | |
* @see \Drupal\Core\Config\ConfigInstaller | |
* @see \Drupal\Core\Config\TypedConfigManager | |
*/ | |
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; | |
/** | |
* 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. Defaults to | |
* 'config/install'. | |
* @param string $collection | |
* (optional) The collection to store configuration in. Defaults to the | |
* default collection. | |
* @param bool $include_profile | |
* (optional) Whether to include the install profile in extensions to | |
* search and to get overrides from. | |
*/ | |
public function __construct(StorageInterface $config_storage, $directory = self::CONFIG_INSTALL_DIRECTORY, $collection = StorageInterface::DEFAULT_COLLECTION, $include_profile = TRUE) { | |
$this->configStorage = $config_storage; | |
$this->directory = $directory; | |
$this->collection = $collection; | |
$this->includeProfile = $include_profile; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function createCollection($collection) { | |
return new static( | |
$this->configStorage, | |
$this->directory, | |
$collection | |
); | |
} | |
/** | |
* 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 = array(); | |
$this->folders += $this->getCoreNames(); | |
$install_profile = Settings::get('install_profile'); | |
$profile = drupal_get_profile(); | |
$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[$install_profile]); | |
$profile_list = $listing->scan('profile'); | |
if ($profile && isset($profile_list[$profile])) { | |
// Prime the drupal_get_filename() static cache with the profile info | |
// file location so we can use drupal_get_path() on the active profile | |
// during the module scan. | |
// @todo Remove as part of https://www.drupal.org/node/2186491 | |
drupal_get_filename('profile', $profile, $profile_list[$profile]->getPathname()); | |
} | |
$module_list_scan = $listing->scan('module'); | |
$module_list = array(); | |
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 (isset($profile)) { | |
if (!isset($profile_list)) { | |
$profile_list = $listing->scan('profile'); | |
} | |
if (isset($profile_list[$profile])) { | |
$profile_folders = $this->getComponentNames(array($profile_list[$profile])); | |
$this->folders = $profile_folders + $this->folders; | |
} | |
} | |
} | |
} | |
return $this->folders; | |
} | |
} | |