ScopeFallbackResolver.php 1.9 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Store\Model;

use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\ScopeFallbackResolverInterface;

class ScopeFallbackResolver implements ScopeFallbackResolverInterface
{
    /**
     * @var StoreManagerInterface
     */
    protected $storeManager;

    /**
     * @var array
     */
    protected $fallback = [];

    /**
     * @param StoreManagerInterface $storeManager
     */
    public function __construct(
        StoreManagerInterface $storeManager
    ) {
        $this->storeManager = $storeManager;
    }

    /**
     * @inheritdoc
     */
    public function getFallbackScope($scope, $scopeId, $forConfig = true)
    {
        if (!isset($this->fallback[$scope][$scopeId][$forConfig])) {
            $fallback = [null, null];
            switch ($scope) {
                case ScopeInterface::SCOPE_WEBSITE:
                case ScopeInterface::SCOPE_WEBSITES:
                    $fallback = [ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null];
                    break;
                case ScopeInterface::SCOPE_GROUP:
                    $fallback = [
                        ScopeInterface::SCOPE_WEBSITES,
                        $this->storeManager->getGroup($scopeId)->getWebsiteId()
                    ];
                    break;
                case ScopeInterface::SCOPE_STORE:
                case ScopeInterface::SCOPE_STORES:
                    $fallback = $forConfig
                        ? [ScopeInterface::SCOPE_WEBSITES, $this->storeManager->getStore($scopeId)->getWebsiteId()]
                        : [ScopeInterface::SCOPE_GROUP, $this->storeManager->getStore($scopeId)->getStoreGroupId()];
            }
            $this->fallback[$scope][$scopeId][$forConfig] = $fallback;
        }
        return $this->fallback[$scope][$scopeId][$forConfig];
    }
}