Newwebshop/public/index.php

76 lines
2.7 KiB
PHP

<?php
/**
* Copyright since 2024 Webshop System
* Webshop ist ein freies E-Commerce System
*
* NOTICE OF LICENSE
*
* This source file is subject to the GNU General Public License (GPL v3)
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://www.gnu.org/licenses/gpl-3.0.html
*
* DISCLAIMER
*
* This is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author Webshop System
* @copyright Since 2024 Webshop System
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License (GPL v3)
*/
use Webshop\Core\Util\CacheClearLocker;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\ErrorHandler\Debug;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\HttpKernelInterface;
// Set front dir constant to use after
if (!defined('_WS_FRONT_DIR_')) {
define('_WS_FRONT_DIR_', dirname(__DIR__));
}
// Include some configurations & composer autoload
require_once _WS_FRONT_DIR_ . '/config/config.inc.php';
require_once _WS_FRONT_DIR_ . '/vendor/autoload.php';
define('_WS_APP_ID_', FrontKernel::APP_ID);
// Load .env file from the root of project if present
(new Dotenv(false))->loadEnv(_WS_FRONT_DIR_ . '/.env');
// If we want to use new container access in front (Warning: Experimental feature from now!)
if (isset($_ENV['WS_FF_FRONT_CONTAINER_V2']) && filter_var($_ENV['WS_FF_FRONT_CONTAINER_V2'], \FILTER_VALIDATE_BOOL)) {
// Activate Symfony's debug if we need it
if (_WS_MODE_DEV_) {
Debug::enable();
}
// Block the process until the cache clear is in progress, this must be done before the kernel is created so it doesn't
// try to use the old container
CacheClearLocker::waitUntilUnlocked(_WS_ENV_, _WS_APP_ID_);
// Starting Kernel
$kernel = new FrontKernel(_WS_ENV_, _WS_MODE_DEV_);
$request = Request::createFromGlobals();
// Try to handle request
try {
$response = $kernel->handle($request, HttpKernelInterface::MAIN_REQUEST, false);
$response->send();
define('FRONT_LEGACY_CONTEXT', false);
$kernel->terminate($request, $response);
} catch (NotFoundHttpException|Exception $exception) {
// correct Apache charset (except if it's too late)
if (!headers_sent()) {
header('Content-Type: text/html; charset=utf-8');
}
}
}
// Prepare and trigger LEGACY front dispatcher
define('FRONT_LEGACY_CONTEXT', true);
Dispatcher::getInstance()->dispatch();