vendor/shopware/storefront/Controller/MaintenanceController.php line 102

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Storefront\Controller;
  3. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  4. use Shopware\Core\Framework\Routing\Annotation\Since;
  5. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  6. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  7. use Shopware\Core\System\SystemConfig\SystemConfigService;
  8. use Shopware\Storefront\Framework\Cache\Annotation\HttpCache;
  9. use Shopware\Storefront\Framework\Routing\MaintenanceModeResolver;
  10. use Shopware\Storefront\Page\Maintenance\MaintenancePageLoadedHook;
  11. use Shopware\Storefront\Page\Maintenance\MaintenancePageLoader;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16.  * @Route(defaults={"_routeScope"={"storefront"}})
  17.  *
  18.  * @deprecated tag:v6.5.0 - reason:becomes-internal - Will be internal
  19.  */
  20. class MaintenanceController extends StorefrontController
  21. {
  22.     /**
  23.      * @var SystemConfigService
  24.      */
  25.     private $systemConfigService;
  26.     /**
  27.      * @var MaintenancePageLoader
  28.      */
  29.     private $maintenancePageLoader;
  30.     /**
  31.      * @var MaintenanceModeResolver
  32.      */
  33.     private $maintenanceModeResolver;
  34.     /**
  35.      * @internal
  36.      */
  37.     public function __construct(
  38.         SystemConfigService $systemConfigService,
  39.         MaintenancePageLoader $maintenancePageLoader,
  40.         MaintenanceModeResolver $maintenanceModeResolver
  41.     ) {
  42.         $this->systemConfigService $systemConfigService;
  43.         $this->maintenancePageLoader $maintenancePageLoader;
  44.         $this->maintenanceModeResolver $maintenanceModeResolver;
  45.     }
  46.     /**
  47.      * @Since("6.1.0.0")
  48.      * @HttpCache()
  49.      * @Route("/maintenance", name="frontend.maintenance.page", methods={"GET"}, defaults={"allow_maintenance"=true})
  50.      */
  51.     public function renderMaintenancePage(Request $requestSalesChannelContext $context): ?Response
  52.     {
  53.         $salesChannel $context->getSalesChannel();
  54.         if ($this->maintenanceModeResolver->shouldRedirectToShop($request)) {
  55.             return $this->redirectToRoute('frontend.home.page');
  56.         }
  57.         $salesChannelId $salesChannel->getId();
  58.         $maintenanceLayoutId $this->systemConfigService->getString('core.basicInformation.maintenancePage'$salesChannelId);
  59.         if ($maintenanceLayoutId === '') {
  60.             $response $this->renderStorefront(
  61.                 '@Storefront/storefront/page/error/error-maintenance.html.twig'
  62.             );
  63.             $response->setStatusCode(Response::HTTP_SERVICE_UNAVAILABLE'Service Temporarily Unavailable');
  64.             $response->headers->set('Retry-After''3600');
  65.             return $response;
  66.         }
  67.         $maintenancePage $this->maintenancePageLoader->load($maintenanceLayoutId$request$context);
  68.         $this->hook(new MaintenancePageLoadedHook($maintenancePage$context));
  69.         $response $this->renderStorefront(
  70.             '@Storefront/storefront/page/error/error-maintenance.html.twig',
  71.             ['page' => $maintenancePage]
  72.         );
  73.         $response->setStatusCode(Response::HTTP_SERVICE_UNAVAILABLE'Service Temporarily Unavailable');
  74.         $response->headers->set('Retry-After''3600');
  75.         return $response;
  76.     }
  77.     /**
  78.      * @Since("6.1.0.0")
  79.      * Route for stand alone cms pages during maintenance
  80.      *
  81.      * @HttpCache()
  82.      * @Route("/maintenance/singlepage/{id}", name="frontend.maintenance.singlepage", methods={"GET"}, defaults={"allow_maintenance"=true})
  83.      */
  84.     public function renderSinglePage(string $idRequest $requestSalesChannelContext $salesChannelContext): Response
  85.     {
  86.         if (!$id) {
  87.             throw new MissingRequestParameterException('Parameter id missing');
  88.         }
  89.         $cmsPage $this->maintenancePageLoader->load($id$request$salesChannelContext);
  90.         $this->hook(new MaintenancePageLoadedHook($cmsPage$salesChannelContext));
  91.         return $this->renderStorefront(
  92.             '@Storefront/storefront/page/content/single-cms-page.html.twig',
  93.             ['page' => $cmsPage]
  94.         );
  95.     }
  96. }