<?php declare(strict_types=1);
namespace Dvdw\PlatformChoice\Storefront\Controller;
use Dvdw\PlatformChoice\System\SalesChannel\Struct\DashboardDomainExtension;
use Shopware\Core\Checkout\Customer\SalesChannel\AbstractLogoutRoute;
use Shopware\Core\Content\ProductExport\Exception\SalesChannelDomainNotFoundException;
use Shopware\Core\Framework\Routing\Annotation\Since;
use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\AuthController;
use Shopware\Storefront\Controller\StorefrontController;
use Shopware\Storefront\Framework\Routing\Annotation\NoStore;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route(defaults={"_routeScope"={"storefront"}})
*/
class DashboardController extends StorefrontController
{
private AuthController $decorated;
private AbstractLogoutRoute $logoutRoute;
public function __construct(
AuthController $decorated,
AbstractLogoutRoute $logoutRoute
)
{
$this->decorated = $decorated;
$this->logoutRoute = $logoutRoute;
}
public function getDecorated(): AuthController
{
return $this->decorated;
}
/**
* @Since("6.0.0.0")
* @Route("/account/login", name="frontend.account.login.page", methods={"GET"})
* @NoStore
*/
public function loginPage(Request $request, RequestDataBag $data, SalesChannelContext $context): Response
{
return new RedirectResponse($this->getDashboardDomain($context));
}
/**
* @Since("6.3.4.1")
* @Route("/account/guest/login", name="frontend.account.guest.login.page", methods={"GET"})
* @NoStore
*/
public function guestLoginPage(Request $request, SalesChannelContext $context): Response
{
return new RedirectResponse($this->getDashboardDomain($context));
}
/**
* @Since("6.0.0.0")
* @Route("/account/logout", name="frontend.account.logout.page", methods={"GET"})
*/
public function logout(Request $request, SalesChannelContext $context, RequestDataBag $dataBag): Response
{
if ($context->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
$this->logoutRoute->logout($context, $dataBag);
$url = $this->getDashboardDomain($context);
return new RedirectResponse(rtrim($url, '/') . '/account/profile');
}
/**
* @Since("6.1.0.0")
* @Route("/account/recover", name="frontend.account.recover.page", methods={"GET"})
*/
public function recoverAccountForm(Request $request, SalesChannelContext $context): Response
{
$url = $this->getDashboardDomain($context);
return new RedirectResponse(rtrim($url, '/') . '/reset-password');
}
/**
* @Since("6.1.0.0")
* @Route("/account/recover/password", name="frontend.account.recover.password.page", methods={"GET"})
*/
public function resetPasswordForm(Request $request, SalesChannelContext $context): Response
{
return $this->getDecorated()->resetPasswordForm($request, $context);
}
private function getDashboardDomain(SalesChannelContext $context): string
{
/** @var DashboardDomainExtension|null $dashboardDomain */
$dashboardDomain = $context->getExtension(DashboardDomainExtension::KEY);
if ($dashboardDomain === null) {
throw new SalesChannelDomainNotFoundException('Dashboard');
}
return $dashboardDomain->getDomain();
}
}