ManagePrivateContent.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Store\Model\StoreSwitcher;
  8. use Magento\Store\Model\StoreSwitcherInterface;
  9. use Magento\Store\Api\Data\StoreInterface;
  10. /**
  11. * Set private content cookie to have actual local storage data on target store after store switching.
  12. */
  13. class ManagePrivateContent implements StoreSwitcherInterface
  14. {
  15. /**
  16. * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory
  17. */
  18. private $cookieMetadataFactory;
  19. /**
  20. * @var \Magento\Framework\Stdlib\CookieManagerInterface
  21. */
  22. private $cookieManager;
  23. /**
  24. * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
  25. * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
  26. */
  27. public function __construct(
  28. \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory,
  29. \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
  30. ) {
  31. $this->cookieMetadataFactory = $cookieMetadataFactory;
  32. $this->cookieManager = $cookieManager;
  33. }
  34. /**
  35. * @param StoreInterface $fromStore store where we came from
  36. * @param StoreInterface $targetStore store where to go to
  37. * @param string $redirectUrl original url requested for redirect after switching
  38. * @return string redirect url
  39. * @throws CannotSwitchStoreException
  40. */
  41. public function switch(StoreInterface $fromStore, StoreInterface $targetStore, string $redirectUrl): string
  42. {
  43. try {
  44. $publicCookieMetadata = $this->cookieMetadataFactory->createPublicCookieMetadata()
  45. ->setDurationOneYear()
  46. ->setPath('/')
  47. ->setSecure(false)
  48. ->setHttpOnly(false);
  49. $this->cookieManager->setPublicCookie(
  50. \Magento\Framework\App\PageCache\Version::COOKIE_NAME,
  51. 'should_be_updated',
  52. $publicCookieMetadata
  53. );
  54. } catch (\Exception $e) {
  55. throw new CannotSwitchStoreException($e);
  56. }
  57. return $redirectUrl;
  58. }
  59. }