123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Virtual theme domain model
- */
- namespace Magento\Theme\Model\Theme\Domain;
- class Virtual implements \Magento\Framework\View\Design\Theme\Domain\VirtualInterface
- {
- /**
- * Virtual theme model instance
- *
- * @var \Magento\Framework\View\Design\ThemeInterface
- */
- protected $_theme;
- /**
- * @var \Magento\Theme\Model\ThemeFactory $themeFactory
- */
- protected $_themeFactory;
- /**
- * Staging theme model instance
- *
- * @var \Magento\Framework\View\Design\ThemeInterface
- */
- protected $_stagingTheme;
- /**
- * @var \Magento\Theme\Model\CopyService
- */
- protected $_themeCopyService;
- /**
- * Theme customization config
- *
- * @var \Magento\Theme\Model\Config\Customization
- */
- protected $_customizationConfig;
- /**
- * @param \Magento\Framework\View\Design\ThemeInterface $theme
- * @param \Magento\Theme\Model\ThemeFactory $themeFactory
- * @param \Magento\Theme\Model\CopyService $themeCopyService
- * @param \Magento\Theme\Model\Config\Customization $customizationConfig
- */
- public function __construct(
- \Magento\Framework\View\Design\ThemeInterface $theme,
- \Magento\Theme\Model\ThemeFactory $themeFactory,
- \Magento\Theme\Model\CopyService $themeCopyService,
- \Magento\Theme\Model\Config\Customization $customizationConfig
- ) {
- $this->_theme = $theme;
- $this->_themeFactory = $themeFactory;
- $this->_themeCopyService = $themeCopyService;
- $this->_customizationConfig = $customizationConfig;
- }
- /**
- * Get 'staging' theme
- *
- * @return \Magento\Framework\View\Design\ThemeInterface
- */
- public function getStagingTheme()
- {
- if (!$this->_stagingTheme) {
- $this->_stagingTheme = $this->_theme->getStagingVersion();
- if (!$this->_stagingTheme) {
- $this->_stagingTheme = $this->_createStagingTheme();
- $this->_themeCopyService->copy($this->_theme, $this->_stagingTheme);
- }
- }
- return $this->_stagingTheme;
- }
- /**
- * Get 'physical' theme
- *
- * @return \Magento\Framework\View\Design\ThemeInterface
- */
- public function getPhysicalTheme()
- {
- /** @var $parentTheme \Magento\Framework\View\Design\ThemeInterface */
- $parentTheme = $this->_theme->getParentTheme();
- while ($parentTheme && !$parentTheme->isPhysical()) {
- $parentTheme = $parentTheme->getParentTheme();
- }
- if (!$parentTheme || !$parentTheme->getId()) {
- return null;
- }
- return $parentTheme;
- }
- /**
- * Check if theme is assigned to ANY store
- *
- * @return bool
- */
- public function isAssigned()
- {
- return $this->_customizationConfig->isThemeAssignedToStore($this->_theme);
- }
- /**
- * Create 'staging' theme associated with current 'virtual' theme
- *
- * @return \Magento\Framework\View\Design\ThemeInterface
- */
- protected function _createStagingTheme()
- {
- $stagingTheme = $this->_themeFactory->create();
- $stagingTheme->setData(
- [
- 'parent_id' => $this->_theme->getId(),
- 'theme_path' => null,
- 'theme_title' => sprintf('%s - Staging', $this->_theme->getThemeTitle()),
- 'preview_image' => $this->_theme->getPreviewImage(),
- 'is_featured' => $this->_theme->getIsFeatured(),
- 'type' => \Magento\Framework\View\Design\ThemeInterface::TYPE_STAGING,
- ]
- );
- $stagingTheme->save();
- return $stagingTheme;
- }
- }
|