2017-11-08 17:39:50 +01:00
|
|
|
<?php if(count(get_included_files()) ==1) exit("Direct access not permitted.");
|
|
|
|
|
2017-11-09 17:43:34 +01:00
|
|
|
global $CONFIG;
|
2017-11-08 17:39:50 +01:00
|
|
|
$CONFIG = require 'config.php';
|
|
|
|
|
2018-01-03 17:28:08 +01:00
|
|
|
global $CSS_BASE;
|
|
|
|
$CSS_BASE = ($CONFIG['prod']) ? ('/data/css/styles.min.css') : ('/data/css/styles.css');
|
2018-01-01 21:07:48 +01:00
|
|
|
|
2018-01-01 23:03:05 +01:00
|
|
|
global $REGISTERED_SCRIPTS;
|
|
|
|
$REGISTERED_SCRIPTS = [];
|
|
|
|
|
2018-01-03 17:28:08 +01:00
|
|
|
function InitPHP() {
|
|
|
|
|
|
|
|
set_error_handler("exception_error_handler"); // errors as exceptions for global catch
|
|
|
|
|
|
|
|
ob_start(); // buffer outpt so it can be discarded in httpError
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function exception_error_handler($severity, $message, $file, $line) {
|
|
|
|
if (!(error_reporting() & $severity)) {
|
|
|
|
// This error code is not included in error_reporting
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
throw new ErrorException($message, 0, $severity, $file, $line);
|
|
|
|
}
|
|
|
|
|
2017-11-09 17:43:34 +01:00
|
|
|
function startsWith($haystack, $needle)
|
2017-11-08 17:39:50 +01:00
|
|
|
{
|
2017-11-09 17:43:34 +01:00
|
|
|
$length = strlen($needle);
|
|
|
|
return (substr($haystack, 0, $length) === $needle);
|
|
|
|
}
|
2017-11-08 17:39:50 +01:00
|
|
|
|
2017-11-09 17:43:34 +01:00
|
|
|
function endsWith($haystack, $needle)
|
|
|
|
{
|
|
|
|
$length = strlen($needle);
|
|
|
|
return $length === 0 || (substr($haystack, -$length) === $needle);
|
|
|
|
}
|
2017-11-08 17:39:50 +01:00
|
|
|
|
2017-11-09 17:43:34 +01:00
|
|
|
function httpError($errorcode, $message)
|
|
|
|
{
|
2018-01-03 17:28:08 +01:00
|
|
|
ob_clean();
|
|
|
|
|
|
|
|
global $OPTIONS;
|
|
|
|
$OPTIONS = [ 'code' => $errorcode, 'message' => $message ];
|
|
|
|
require (__DIR__ . '/../pages/errorview.php');
|
|
|
|
die();
|
2017-12-30 23:46:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function destructiveUrlEncode($str) {
|
|
|
|
$str = str_replace(' ', '_', $str);
|
|
|
|
$str = str_replace('+', '_', $str);
|
|
|
|
$str = str_replace('.', '', $str);
|
|
|
|
return urlencode($str);
|
2017-12-31 17:53:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function formatMilliseconds($millis)
|
|
|
|
{
|
|
|
|
if ($millis < 1000)
|
|
|
|
{
|
|
|
|
return $millis . 'ms';
|
|
|
|
}
|
|
|
|
else if ($millis < 10 * 1000)
|
|
|
|
{
|
|
|
|
return number_format($millis / (1000), 2) . 's';
|
|
|
|
}
|
|
|
|
else if ($millis < 60 * 1000)
|
|
|
|
{
|
|
|
|
return floor($millis / (1000)) . 's';
|
|
|
|
}
|
|
|
|
else if ($millis < 10 * 60 * 1000)
|
|
|
|
{
|
|
|
|
return floor($millis / (60 * 1000)) . 'min ' . floor(($millis % (60 * 1000)) / 1000) . 's';
|
|
|
|
}
|
|
|
|
else if ($millis < 60 * 60 * 1000)
|
|
|
|
{
|
|
|
|
return floor($millis / (60 * 1000)) . 'min';
|
|
|
|
}
|
|
|
|
else if ($millis < 10 * 60 * 60 * 1000)
|
|
|
|
{
|
|
|
|
return number_format($millis / (60 * 60 * 1000), 2) . ' hours';
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return floor($millis / (60 * 60 * 1000)) . ' hours';
|
|
|
|
}
|
2018-01-01 23:03:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function includeScriptOnce($script, $echo = true)
|
|
|
|
{
|
|
|
|
global $REGISTERED_SCRIPTS;
|
|
|
|
|
|
|
|
if ($echo)
|
|
|
|
{
|
|
|
|
if (in_array($script, $REGISTERED_SCRIPTS)) return false;
|
|
|
|
$REGISTERED_SCRIPTS []= $script;
|
|
|
|
echo "<script src=\"$script\" type=\"text/javascript\"></script>";
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (in_array($script, $REGISTERED_SCRIPTS)) return '';
|
|
|
|
$REGISTERED_SCRIPTS []= $script;
|
|
|
|
return "<script src=\"$script\" type=\"text/javascript\"></script>";
|
|
|
|
}
|
2018-01-03 17:28:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function printCSS() {
|
|
|
|
global $CSS_BASE;
|
|
|
|
echo '<link rel="stylesheet" href="' . $CSS_BASE . '"/>';
|
|
|
|
}
|
|
|
|
|
|
|
|
function isProd() {
|
|
|
|
global $CONFIG;
|
|
|
|
return $CONFIG['prod'];
|
2017-11-08 17:39:50 +01:00
|
|
|
}
|