hedera-web/web/html-service.php

139 lines
2.9 KiB
PHP
Raw Normal View History

2016-07-22 20:00:27 +00:00
<?php
namespace Vn\Web;
use Vn\Lib\Locale;
/**
* Base class for services that sends response as HTML format.
**/
class HtmlService extends Service
2016-07-22 20:00:27 +00:00
{
function run ()
{
2016-09-23 22:47:34 +00:00
$db = $this->db;
2016-07-22 20:00:27 +00:00
if (!$this->isHttps ()
2016-10-11 14:45:10 +00:00
&& $db->getValue ('SELECT https FROM config') && !_DEV_MODE)
2016-07-22 20:00:27 +00:00
{
2016-09-19 06:40:18 +00:00
header ("Location: https://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}");
2016-07-22 20:00:27 +00:00
exit (0);
}
$this->startSession ();
// Getting the requested page
if (!empty ($_REQUEST['method']) && isHyphen ($_REQUEST['method']))
$page = $_REQUEST['method'];
2016-07-22 20:00:27 +00:00
else
$page = 'main';
// Checking the browser version
if (!isset ($_SESSION['skipBrowser']) && $page != 'update-browser')
{
$updateBrowser = FALSE;
if (!isset ($_GET['skipBrowser'])
&& ($browser = get_browser ($_SERVER['HTTP_USER_AGENT'])))
{
2016-10-14 10:58:35 +00:00
$browserVersion = (double) $browser->version;
2016-07-22 20:00:27 +00:00
$minVersion = $db->getValue (
'SELECT version FROM browser WHERE name = #', [$browser->browser]);
$updateBrowser = $browserVersion > 0
&& isset ($minVersion) && $browserVersion < $minVersion;
}
if ($updateBrowser)
{
2016-10-16 14:16:08 +00:00
header ('Location: ?method=update-browser');
2016-07-22 20:00:27 +00:00
exit (0);
}
else
$_SESSION['skipBrowser'] = TRUE;
}
// If enabled, requests the user to choose between two web versions
if (!isset ($_SESSION['skipVersionMenu'])
&& $db->getValue ('SELECT test_domain FROM config'))
{
$_SESSION['skipVersionMenu'] = TRUE;
2016-10-16 14:16:08 +00:00
header ('Location: ?method=version-menu');
2016-07-22 20:00:27 +00:00
}
// Setting the version
2016-09-23 22:47:34 +00:00
setcookie ('vnVersion', $this->getVersion ());
2016-07-22 20:00:27 +00:00
// Loading the requested page
2016-08-30 07:43:47 +00:00
$basePath = "pages/$page";
2016-07-22 20:00:27 +00:00
if (file_exists ($basePath))
{
Locale::addPath ($basePath);
2016-10-14 10:58:35 +00:00
$phpFile = "./$basePath/$page.php";
2016-07-22 20:00:27 +00:00
if (file_exists ($phpFile))
require ($phpFile);
$this->printHeader ();
2016-09-24 14:32:31 +00:00
$dir = $basePath;
2016-10-16 14:16:08 +00:00
include ("./$basePath/ui.php");
2016-07-22 20:00:27 +00:00
}
else
header ('Location: ./');
}
function printHeader ()
{
header ('Content-Type: text/html; charset=UTF-8');
2016-09-26 09:28:47 +00:00
//header ("Content-Security-Policy: default-src 'self'; img-src *");
2016-07-22 20:00:27 +00:00
}
function globalErrorHandler ()
{
$this->printHeader ();
include (__DIR__.'/unavailable.html');
exit (0);
}
function getUrl ($fileName)
{
return $fileName .'?'. $this->getVersion ();
}
function includeJs ($fileName)
{
echo '<script type="text/javascript" src="'. $this->getUrl ($fileName) .'"></script>'."\n\t\t";
}
function includeLib ($libName)
{
$args = func_get_args ();
$localeJs = 'locale/'. Locale::get () .'/js/'. $libName .'.js';
if (file_exists ($localeJs))
$this->includeJs ($localeJs);
for ($i = 1; $i < count ($args); $i++)
2016-09-23 22:47:34 +00:00
$this->includeJs ("js/$libName/{$args[$i]}.js");
2016-07-22 20:00:27 +00:00
}
function includeCss ($fileName)
{
echo '<link rel="stylesheet" type="text/css" href="'. $this->getUrl ($fileName) .'"/>'."\n\t\t";
}
function isMobile ()
{
$re = '/(Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone)/i';
return preg_match ($re, $_SERVER['HTTP_USER_AGENT']);
}
}