113 lines
2.6 KiB
PHP
113 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace Vn\Web;
|
|
|
|
use Vn\Lib\Locale;
|
|
|
|
/**
|
|
* Base class for services that sends response as HTML format.
|
|
*/
|
|
class HtmlService extends Service {
|
|
function run() {
|
|
$eFlag =
|
|
E_ERROR
|
|
| E_USER_ERROR;
|
|
|
|
set_error_handler([$this, 'errorHandler'], $eFlag);
|
|
set_exception_handler([$this, 'errorHandler']);
|
|
|
|
$this->init();
|
|
$db = $this->db;
|
|
|
|
if (!$this->isHttps()
|
|
&& $db->getValue('SELECT https FROM config') && !_DEV_MODE) {
|
|
header("Location: https://{$this->getUri()}");
|
|
exit(0);
|
|
}
|
|
|
|
$this->startSession();
|
|
|
|
// Getting the requested page
|
|
|
|
if (!empty($_REQUEST['method']) && isHyphen($_REQUEST['method']))
|
|
$page = $_REQUEST['method'];
|
|
else
|
|
$page = 'main';
|
|
|
|
// Checking the browser version
|
|
|
|
if (!isset($_SESSION['skipBrowser']) && $page != 'update-browser') {
|
|
$updateBrowser = FALSE;
|
|
|
|
if (!isset($_GET['skipBrowser'])
|
|
&& isset($_SERVER['HTTP_USER_AGENT'])
|
|
&&($browser = get_browser($_SERVER['HTTP_USER_AGENT']))) {
|
|
$browserVersion =(double) $browser->version;
|
|
$minVersion = $db->getValue(
|
|
'SELECT version FROM browser WHERE name = #', [$browser->browser]);
|
|
$updateBrowser = $browserVersion > 0
|
|
&& isset($minVersion) && $browserVersion < $minVersion;
|
|
}
|
|
|
|
if ($updateBrowser) {
|
|
header('Location: ?method=update-browser');
|
|
exit(0);
|
|
} else
|
|
$_SESSION['skipBrowser'] = TRUE;
|
|
}
|
|
|
|
// If enabled, requests the user to choose between two web versions
|
|
|
|
if (!isset($_SESSION['skipVersionMenu'])
|
|
&& $db->getValue('SELECT testDomain FROM config')) {
|
|
$_SESSION['skipVersionMenu'] = TRUE;
|
|
header('Location: ?method=version-menu');
|
|
}
|
|
|
|
// Setting the version
|
|
|
|
$domain = explode(':', $_SERVER['HTTP_HOST'])[0];
|
|
setcookie('vnVersion', $this->getVersion()->toString(), [
|
|
'samesite' => 'Lax',
|
|
'domain' => $domain
|
|
]);
|
|
|
|
// Loading the requested page
|
|
|
|
$basePath = "pages/$page";
|
|
|
|
if (file_exists($basePath)) {
|
|
Locale::addPath($basePath);
|
|
|
|
$phpFile = "./$basePath/$page.php";
|
|
|
|
if (file_exists($phpFile))
|
|
require($phpFile);
|
|
|
|
$this->printHeader();
|
|
$dir = $basePath;
|
|
include_once __DIR__.'/html.php';
|
|
include("./$basePath/ui.php");
|
|
} else
|
|
header('Location: ./');
|
|
}
|
|
|
|
function printHeader() {
|
|
header('Content-Type: text/html; charset=UTF-8');
|
|
//header("Content-Security-Policy: default-src *; img-src *;");
|
|
}
|
|
|
|
function errorHandler($err) {
|
|
error_log("{$err->getMessage()} {$err->getTraceAsString()}");
|
|
$this->printHeader();
|
|
include(__DIR__.'/unavailable.html');
|
|
exit(0);
|
|
return FALSE;
|
|
}
|
|
|
|
function isMobile() {
|
|
$re = '/(Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone)/i';
|
|
return preg_match($re, $_SERVER['HTTP_USER_AGENT']);
|
|
}
|
|
}
|