<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Customer\Model;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Url\EncoderInterface;
use Magento\Framework\UrlInterface;
use Magento\Store\Model\ScopeInterface;
/**
* Class Customer url model
*
* @api
*/
class Url
{
/**
* Route for customer account login page
*/
const ROUTE_ACCOUNT_LOGIN = 'customer/account/login';
/**
* Config name for Redirect Customer to Account Dashboard after Logging in setting
*/
const XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD = 'customer/startup/redirect_dashboard';
/**
* Query param name for last url visited
*/
const REFERER_QUERY_PARAM_NAME = 'referer';
/**
* @var UrlInterface
*/
protected $urlBuilder;
/**
* @var RequestInterface
*/
protected $request;
/**
* @var ScopeConfigInterface
*/
protected $scopeConfig;
/**
* @var Session
*/
protected $customerSession;
/**
* @var EncoderInterface
*/
protected $urlEncoder;
/**
* @var \Magento\Framework\Url\DecoderInterface
*/
private $urlDecoder;
/**
* @var \Magento\Framework\Url\HostChecker
*/
private $hostChecker;
/**
* @param Session $customerSession
* @param ScopeConfigInterface $scopeConfig
* @param RequestInterface $request
* @param UrlInterface $urlBuilder
* @param EncoderInterface $urlEncoder
* @param \Magento\Framework\Url\DecoderInterface|null $urlDecoder
* @param \Magento\Framework\Url\HostChecker|null $hostChecker
*/
public function __construct(
Session $customerSession,
ScopeConfigInterface $scopeConfig,
RequestInterface $request,
UrlInterface $urlBuilder,
EncoderInterface $urlEncoder,
\Magento\Framework\Url\DecoderInterface $urlDecoder = null,
\Magento\Framework\Url\HostChecker $hostChecker = null
) {
$this->request = $request;
$this->urlBuilder = $urlBuilder;
$this->scopeConfig = $scopeConfig;
$this->customerSession = $customerSession;
$this->urlEncoder = $urlEncoder;
$this->urlDecoder = $urlDecoder ?: \Magento\Framework\App\ObjectManager::getInstance()
->get(\Magento\Framework\Url\DecoderInterface::class);
$this->hostChecker = $hostChecker ?: \Magento\Framework\App\ObjectManager::getInstance()
->get(\Magento\Framework\Url\HostChecker::class);
}
/**
* Retrieve customer login url
*
* @return string
*/
public function getLoginUrl()
{
return $this->urlBuilder->getUrl(self::ROUTE_ACCOUNT_LOGIN, $this->getLoginUrlParams());
}
/**
* Retrieve parameters of customer login url
*
* @return array
*/
public function getLoginUrlParams()
{
$params = [];
$referer = $this->getRequestReferrer();
if (!$referer
&& !$this->scopeConfig->isSetFlag(
self::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD,
ScopeInterface::SCOPE_STORE
)
&& !$this->customerSession->getNoReferer()
&& $this->request->isGet()
) {
$referer = $this->urlBuilder->getUrl('*/*/*', ['_current' => true, '_use_rewrite' => true]);
$referer = $this->urlEncoder->encode($referer);
}
if ($referer) {
$params = [self::REFERER_QUERY_PARAM_NAME => $referer];
}
return $params;
}
/**
* Retrieve customer login POST URL
*
* @return string
*/
public function getLoginPostUrl()
{
$params = [];
$referer = $this->getRequestReferrer();
if ($referer) {
$params = [
self::REFERER_QUERY_PARAM_NAME => $referer,
];
}
return $this->urlBuilder->getUrl('customer/account/loginPost', $params);
}
/**
* Retrieve customer logout url
*
* @return string
*/
public function getLogoutUrl()
{
return $this->urlBuilder->getUrl('customer/account/logout');
}
/**
* Retrieve customer dashboard url
*
* @return string
*/
public function getDashboardUrl()
{
return $this->urlBuilder->getUrl('customer/account');
}
/**
* Retrieve customer account page url
*
* @return string
*/
public function getAccountUrl()
{
return $this->urlBuilder->getUrl('customer/account');
}
/**
* Retrieve customer register form url
*
* @return string
*/
public function getRegisterUrl()
{
return $this->urlBuilder->getUrl('customer/account/create');
}
/**
* Retrieve customer register form post url
*
* @return string
*/
public function getRegisterPostUrl()
{
return $this->urlBuilder->getUrl('customer/account/createpost');
}
/**
* Retrieve customer account edit form url
*
* @return string
*/
public function getEditUrl()
{
return $this->urlBuilder->getUrl('customer/account/edit');
}
/**
* Retrieve customer edit POST URL
*
* @return string
*/
public function getEditPostUrl()
{
return $this->urlBuilder->getUrl('customer/account/editpost');
}
/**
* Retrieve url of forgot password page
*
* @return string
*/
public function getForgotPasswordUrl()
{
return $this->urlBuilder->getUrl('customer/account/forgotpassword');
}
/**
* Retrieve confirmation URL for Email
*
* @param string $email
* @return string
*/
public function getEmailConfirmationUrl($email = null)
{
return $this->urlBuilder->getUrl('customer/account/confirmation', ['_query' => ['email' => $email]]);
}
/**
* @return mixed|null
*/
private function getRequestReferrer()
{
$referer = $this->request->getParam(self::REFERER_QUERY_PARAM_NAME);
if ($referer && $this->hostChecker->isOwnOrigin($this->urlDecoder->decode($referer))) {
return $referer;
}
return null;
}
}
|