mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 17:27:36 +00:00
288 lines
7.0 KiB
PHP
288 lines
7.0 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Theme\Model\View;
|
|
|
|
use Magento\Framework\App\Config\ScopeConfigInterface;
|
|
use Magento\Store\Model\ScopeInterface;
|
|
|
|
/**
|
|
* Keeps design settings for current request
|
|
*/
|
|
class Design implements \Magento\Framework\View\DesignInterface
|
|
{
|
|
/**
|
|
* Package area
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_area;
|
|
|
|
/**
|
|
* Package theme
|
|
*
|
|
* @var \Magento\Theme\Model\Theme
|
|
*/
|
|
protected $_theme;
|
|
|
|
/**
|
|
* Directory of the css file
|
|
* Using only to transmit additional parameter in callback functions
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_callbackFileDir;
|
|
|
|
/**
|
|
* Store list manager
|
|
*
|
|
* @var \Magento\Store\Model\StoreManagerInterface
|
|
*/
|
|
protected $_storeManager;
|
|
|
|
/**
|
|
* @var \Magento\Framework\View\Design\Theme\FlyweightFactory
|
|
*/
|
|
protected $_flyweightFactory;
|
|
|
|
/**
|
|
* @var \Magento\Theme\Model\ThemeFactory
|
|
*/
|
|
protected $_themeFactory;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\Config\ScopeConfigInterface
|
|
*/
|
|
private $_scopeConfig;
|
|
|
|
/**
|
|
* @var \Magento\Framework\Locale\ResolverInterface
|
|
*/
|
|
protected $_locale;
|
|
|
|
/**
|
|
* @var \Magento\Framework\ObjectManagerInterface
|
|
*/
|
|
protected $objectManager;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\State
|
|
*/
|
|
protected $_appState;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $_themes;
|
|
|
|
/**
|
|
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
|
|
* @param \Magento\Framework\View\Design\Theme\FlyweightFactory $flyweightFactory
|
|
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
|
|
* @param \Magento\Theme\Model\ThemeFactory $themeFactory
|
|
* @param \Magento\Framework\ObjectManagerInterface $objectManager
|
|
* @param \Magento\Framework\App\State $appState
|
|
* @param array $themes
|
|
*/
|
|
public function __construct(
|
|
\Magento\Store\Model\StoreManagerInterface $storeManager,
|
|
\Magento\Framework\View\Design\Theme\FlyweightFactory $flyweightFactory,
|
|
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
|
|
\Magento\Theme\Model\ThemeFactory $themeFactory,
|
|
\Magento\Framework\ObjectManagerInterface $objectManager,
|
|
\Magento\Framework\App\State $appState,
|
|
array $themes
|
|
) {
|
|
$this->_storeManager = $storeManager;
|
|
$this->_flyweightFactory = $flyweightFactory;
|
|
$this->_themeFactory = $themeFactory;
|
|
$this->_scopeConfig = $scopeConfig;
|
|
$this->_appState = $appState;
|
|
$this->_themes = $themes;
|
|
$this->objectManager = $objectManager;
|
|
}
|
|
|
|
/**
|
|
* Set package area
|
|
*
|
|
* @param string $area
|
|
* @return $this
|
|
*/
|
|
public function setArea($area)
|
|
{
|
|
$this->_area = $area;
|
|
$this->_theme = null;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Retrieve package area
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getArea()
|
|
{
|
|
// In order to support environment emulation of area, if area is set, return it
|
|
if ($this->_area && !$this->_appState->isAreaCodeEmulated()) {
|
|
return $this->_area;
|
|
}
|
|
return $this->_appState->getAreaCode();
|
|
}
|
|
|
|
/**
|
|
* Set theme path
|
|
*
|
|
* @param \Magento\Framework\View\Design\ThemeInterface|string $theme
|
|
* @param string $area
|
|
* @return $this
|
|
*/
|
|
public function setDesignTheme($theme, $area = null)
|
|
{
|
|
if ($area) {
|
|
$this->setArea($area);
|
|
} else {
|
|
$area = $this->getArea();
|
|
}
|
|
|
|
if ($theme instanceof \Magento\Framework\View\Design\ThemeInterface) {
|
|
$this->_theme = $theme;
|
|
} else {
|
|
$this->_theme = $this->_flyweightFactory->create($theme, $area);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get default theme which declared in configuration
|
|
*
|
|
* Write default theme to core_config_data
|
|
*
|
|
* @param string|null $area
|
|
* @param array $params
|
|
* @return string|int
|
|
*/
|
|
public function getConfigurationDesignTheme($area = null, array $params = [])
|
|
{
|
|
if (!$area) {
|
|
$area = $this->getArea();
|
|
}
|
|
|
|
$theme = null;
|
|
$store = isset($params['store']) ? $params['store'] : null;
|
|
|
|
if ($this->_isThemePerStoreView($area)) {
|
|
if ($this->_storeManager->isSingleStoreMode()) {
|
|
$theme = $this->_scopeConfig->getValue(
|
|
self::XML_PATH_THEME_ID,
|
|
ScopeInterface::SCOPE_WEBSITES
|
|
);
|
|
} else {
|
|
$theme = (string) $this->_scopeConfig->getValue(
|
|
self::XML_PATH_THEME_ID,
|
|
ScopeInterface::SCOPE_STORE,
|
|
$store
|
|
);
|
|
}
|
|
}
|
|
|
|
if (!$theme && isset($this->_themes[$area])) {
|
|
$theme = $this->_themes[$area];
|
|
}
|
|
|
|
return $theme;
|
|
}
|
|
|
|
/**
|
|
* Whether themes in specified area are supposed to be configured per store view
|
|
*
|
|
* @param string $area
|
|
* @return bool
|
|
*/
|
|
private function _isThemePerStoreView($area)
|
|
{
|
|
return $area == self::DEFAULT_AREA;
|
|
}
|
|
|
|
/**
|
|
* Set default design theme
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function setDefaultDesignTheme()
|
|
{
|
|
$this->setDesignTheme($this->getConfigurationDesignTheme());
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Design theme model getter
|
|
*
|
|
* @return \Magento\Theme\Model\Theme
|
|
*/
|
|
public function getDesignTheme()
|
|
{
|
|
if ($this->_theme === null) {
|
|
$this->_theme = $this->_themeFactory->create();
|
|
}
|
|
return $this->_theme;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getThemePath(\Magento\Framework\View\Design\ThemeInterface $theme)
|
|
{
|
|
$themePath = $theme->getThemePath();
|
|
if (!$themePath) {
|
|
$themeId = $theme->getId();
|
|
if ($themeId) {
|
|
$themePath = self::PUBLIC_THEME_DIR . $themeId;
|
|
} else {
|
|
$themePath = self::PUBLIC_VIEW_DIR;
|
|
}
|
|
}
|
|
return $themePath;
|
|
}
|
|
|
|
/**
|
|
* Get locale
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getLocale()
|
|
{
|
|
if (null === $this->_locale) {
|
|
$this->_locale = $this->objectManager->get(\Magento\Framework\Locale\ResolverInterface::class);
|
|
}
|
|
return $this->_locale->getLocale();
|
|
}
|
|
|
|
/**
|
|
* @param \Magento\Framework\Locale\ResolverInterface $locale
|
|
* @return $this
|
|
*/
|
|
public function setLocale(\Magento\Framework\Locale\ResolverInterface $locale)
|
|
{
|
|
$this->_locale = $locale;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getDesignParams()
|
|
{
|
|
$params = [
|
|
'area' => $this->getArea(),
|
|
'themeModel' => $this->getDesignTheme(),
|
|
'locale' => $this->getLocale(),
|
|
];
|
|
|
|
return $params;
|
|
}
|
|
}
|