public function ThemeInitialization::getActiveTheme in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/lib/Drupal/Core/Theme/ThemeInitialization.php \Drupal\Core\Theme\ThemeInitialization::getActiveTheme()
Builds up the active theme object from extensions.
Parameters
\Drupal\Core\Extension\Extension $theme: The theme extension object.
\Drupal\Core\Extension\Extension[] $base_themes: An array of extension objects of base theme and its bases. It is ordered by 'next parent first', meaning the top level of the chain will be first.
Return value
\Drupal\Core\Theme\ActiveTheme The active theme instance for the passed in $theme.
Overrides ThemeInitializationInterface::getActiveTheme
1 call to ThemeInitialization::getActiveTheme()
- ThemeInitialization::getActiveThemeByName in core/
lib/ Drupal/ Core/ Theme/ ThemeInitialization.php - Builds an active theme object.
File
- core/
lib/ Drupal/ Core/ Theme/ ThemeInitialization.php, line 168 - Contains \Drupal\Core\Theme\ThemeInitialization.
Class
- ThemeInitialization
- Provides the theme initialization logic.
Namespace
Drupal\Core\ThemeCode
public function getActiveTheme(Extension $theme, array $base_themes = []) {
$theme_path = $theme
->getPath();
$values['path'] = $theme_path;
$values['name'] = $theme
->getName();
// @todo Remove in Drupal 9.0.x.
$values['stylesheets_remove'] = $this
->prepareStylesheetsRemove($theme, $base_themes);
// Prepare libraries overrides from this theme and ancestor themes. This
// allows child themes to easily remove CSS files from base themes and
// modules.
$values['libraries_override'] = [];
// Get libraries overrides declared by base themes.
foreach ($base_themes as $base) {
if (!empty($base->info['libraries-override'])) {
foreach ($base->info['libraries-override'] as $library => $override) {
$values['libraries_override'][$base
->getPath()][$library] = $override;
}
}
}
// Add libraries overrides declared by this theme.
if (!empty($theme->info['libraries-override'])) {
foreach ($theme->info['libraries-override'] as $library => $override) {
$values['libraries_override'][$theme
->getPath()][$library] = $override;
}
}
// Get libraries extensions declared by base themes.
foreach ($base_themes as $base) {
if (!empty($base->info['libraries-extend'])) {
foreach ($base->info['libraries-extend'] as $library => $extend) {
if (isset($values['libraries_extend'][$library])) {
// Merge if libraries-extend has already been defined for this
// library.
$values['libraries_extend'][$library] = array_merge($values['libraries_extend'][$library], $extend);
}
else {
$values['libraries_extend'][$library] = $extend;
}
}
}
}
// Add libraries extensions declared by this theme.
if (!empty($theme->info['libraries-extend'])) {
foreach ($theme->info['libraries-extend'] as $library => $extend) {
if (isset($values['libraries_extend'][$library])) {
// Merge if libraries-extend has already been defined for this
// library.
$values['libraries_extend'][$library] = array_merge($values['libraries_extend'][$library], $extend);
}
else {
$values['libraries_extend'][$library] = $extend;
}
}
}
// Do basically the same as the above for libraries
$values['libraries'] = array();
// Grab libraries from base theme
foreach ($base_themes as $base) {
if (!empty($base->libraries)) {
foreach ($base->libraries as $library) {
$values['libraries'][] = $library;
}
}
}
// Add libraries used by this theme.
if (!empty($theme->libraries)) {
foreach ($theme->libraries as $library) {
$values['libraries'][] = $library;
}
}
$values['engine'] = isset($theme->engine) ? $theme->engine : NULL;
$values['owner'] = isset($theme->owner) ? $theme->owner : NULL;
$values['extension'] = $theme;
$base_active_themes = array();
foreach ($base_themes as $base_theme) {
$base_active_themes[$base_theme
->getName()] = $this
->getActiveTheme($base_theme, array_slice($base_themes, 1));
}
$values['base_themes'] = $base_active_themes;
if (!empty($theme->info['regions'])) {
$values['regions'] = $theme->info['regions'];
}
return new ActiveTheme($values);
}