123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Store\Model\StoreSwitcher;
- use Magento\Store\Model\StoreSwitcherInterface;
- use Magento\Store\Api\Data\StoreInterface;
- /**
- * Set private content cookie to have actual local storage data on target store after store switching.
- */
- class ManagePrivateContent implements StoreSwitcherInterface
- {
- /**
- * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory
- */
- private $cookieMetadataFactory;
- /**
- * @var \Magento\Framework\Stdlib\CookieManagerInterface
- */
- private $cookieManager;
- /**
- * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
- * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
- */
- public function __construct(
- \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory,
- \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
- ) {
- $this->cookieMetadataFactory = $cookieMetadataFactory;
- $this->cookieManager = $cookieManager;
- }
- /**
- * @param StoreInterface $fromStore store where we came from
- * @param StoreInterface $targetStore store where to go to
- * @param string $redirectUrl original url requested for redirect after switching
- * @return string redirect url
- * @throws CannotSwitchStoreException
- */
- public function switch(StoreInterface $fromStore, StoreInterface $targetStore, string $redirectUrl): string
- {
- try {
- $publicCookieMetadata = $this->cookieMetadataFactory->createPublicCookieMetadata()
- ->setDurationOneYear()
- ->setPath('/')
- ->setSecure(false)
- ->setHttpOnly(false);
- $this->cookieManager->setPublicCookie(
- \Magento\Framework\App\PageCache\Version::COOKIE_NAME,
- 'should_be_updated',
- $publicCookieMetadata
- );
- } catch (\Exception $e) {
- throw new CannotSwitchStoreException($e);
- }
- return $redirectUrl;
- }
- }
|