. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Utils; use Espo\Core\Utils\Theme\Direction; use Espo\Core\Utils\Theme\MetadataProvider; class ThemeManager { private string $defaultName = 'Espo'; private string $defaultLogoSrc = 'client/img/logo.svg'; public function __construct( private Config $config, private Metadata $metadata, private MetadataProvider $metadataProvider, ) {} public function getName(): string { return $this->config->get('theme') ?? $this->defaultName; } public function getStylesheet(): string { return $this->metadataProvider->getStylesheet($this->getName()); } public function getDirection(): Direction { $rawDirection = $this->config->get('themeParams.direction'); $direction = is_string($rawDirection) ? Direction::tryFrom($rawDirection) : null; if ($direction) { return $direction; } $rawDirection = $this->metadata->get( ['themes', $this->getName(), 'params', 'direction', 'default'] ); if (!is_string($rawDirection)) { return Direction::Ltr; } $direction = Direction::tryFrom($rawDirection); if (!$direction) { return Direction::Ltr; } return $direction; } public function getLogoSrc(): string { return $this->metadata->get(['themes', $this->getName(), 'logo']) ?? $this->defaultLogoSrc; } public function isDark(): bool { return $this->metadataProvider->isDark($this->getName()); } }