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

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