diff --git a/library/Icinga/Application/Web.php b/library/Icinga/Application/Web.php index 889050784..d49a06f55 100644 --- a/library/Icinga/Application/Web.php +++ b/library/Icinga/Application/Web.php @@ -13,6 +13,7 @@ use Zend_Paginator; use Zend_View_Helper_PaginationControl; use Icinga\Authentication\Auth; use Icinga\User; +use Icinga\Util\DirectoryIterator; use Icinga\Util\TimezoneDetect; use Icinga\Util\Translator; use Icinga\Web\Controller\Dispatcher; @@ -33,6 +34,13 @@ use Icinga\Web\View; */ class Web extends EmbeddedWeb { + /** + * The name of the default theme + * + * @var string + */ + const DEFAULT_THEME = 'Icinga'; + /** * View object * @@ -98,6 +106,33 @@ class Web extends EmbeddedWeb ->setupPagination(); } + /** + * Get themes provided by Web 2 and all enabled modules + * + * @return string[] Array of theme names as keys and values + */ + public function getThemes() + { + $themes = array(static::DEFAULT_THEME); + $applicationThemePath = $this->getBaseDir('public/css/themes'); + if (DirectoryIterator::isReadable($applicationThemePath)) { + foreach (new DirectoryIterator($applicationThemePath, 'less') as $name => $theme) { + $themes[] = substr($name, 0, -5); + } + } + $mm = $this->getModuleManager(); + foreach ($mm->listEnabledModules() as $moduleName) { + $moduleThemePath = $mm->getModule($moduleName)->getCssDir() . '/themes'; + if (! DirectoryIterator::isReadable($moduleThemePath)) { + continue; + } + foreach (new DirectoryIterator($moduleThemePath, 'less') as $name => $theme) { + $themes[] = $moduleName . '/' . substr($name, 0, -5); + } + } + return array_combine($themes, $themes); + } + /** * Prepare routing *