_formKeyValidator = $formKeyValidator; $this->_scopeConfig = $scopeConfig; $this->_checkoutSession = $checkoutSession; $this->_storeManager = $storeManager; $this->cart = $cart; parent::__construct($context); } /** * Set back redirect url to response * * @param null|string $backUrl * * @return \Magento\Framework\Controller\Result\Redirect */ protected function _goBack($backUrl = null) { $resultRedirect = $this->resultRedirectFactory->create(); if ($backUrl || $backUrl = $this->getBackUrl($this->_redirect->getRefererUrl())) { $resultRedirect->setUrl($backUrl); } return $resultRedirect; } /** * Check if URL corresponds store * * @param string $url * @return bool */ protected function _isInternalUrl($url) { if (strpos($url, 'http') === false) { return false; } /** * Url must start from base secure or base unsecure url */ /** @var $store \Magento\Store\Model\Store */ $store = $this->_storeManager->getStore(); $unsecure = strpos($url, $store->getBaseUrl()) === 0; $secure = strpos($url, $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK, true)) === 0; return $unsecure || $secure; } /** * Get resolved back url * * @param string|null $defaultUrl * @return mixed|null|string */ protected function getBackUrl($defaultUrl = null) { $returnUrl = $this->getRequest()->getParam('return_url'); if ($returnUrl && $this->_isInternalUrl($returnUrl)) { $this->messageManager->getMessages()->clear(); return $returnUrl; } if ($this->shouldRedirectToCart() || $this->getRequest()->getParam('in_cart')) { if ($this->getRequest()->getActionName() == 'add' && !$this->getRequest()->getParam('in_cart')) { $this->_checkoutSession->setContinueShoppingUrl($this->_redirect->getRefererUrl()); } return $this->_url->getUrl('checkout/cart'); } return $defaultUrl; } /** * Is redirect should be performed after the product was added to cart. * * @return bool */ private function shouldRedirectToCart() { return $this->_scopeConfig->isSetFlag( 'checkout/cart/redirect_to_cart', \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); } }