moner.ooo/index.php
2024-09-06 19:40:39 +00:00

110 lines
3.6 KiB
PHP

<?php
date_default_timezone_set('Europe/Berlin');
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$currentUrl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$parentUrl = dirname($currentUrl);
// Get currency data from JSON
if (!file_exists('coingecko.json')) {
// Special case: First run.
exec('php coingecko.php');
sleep(1);
}
$api_cg = json_decode(file_get_contents('coingecko.json'), true);
// Configuration file
$config = [];
if (file_exists('config.php')) {
$config = require 'config.php';
}
$display_servers_guru = isset($config['servers_guru']) && $config['servers_guru'] === true;
$attribution = isset($config['attribution']) ? $config['attribution'] : '';
$preferred_currencies = isset($config['preferred_currencies']) ? $config['preferred_currencies'] : [];
$github_url = isset($config['github_url']) ? $config['github_url'] : 'https://github.com/rottenwheel/moner.ooo/';
// Extract the keys
$currencies = array_map('strtoupper', array_keys($api_cg));
// Fetch the time of the last API data update
$time_cg = date("H:i:s", $api_cg['time']);
$time = $time_cg;
unset($currencies[array_search('TIME', $currencies)]);
// Populate exchange rates
$exchangeRates = [];
foreach ($currencies as $currency) {
$exchangeRates[$currency] = $api_cg[strtolower($currency)]['lastValue'];
}
// Get the primary language from the browser
$lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : "en";
$lang = explode(",", $lang)[0];
$lang = explode(";", $lang)[0];
$lang = strtolower($lang);
// Aliases for different Chinese variants
$aliases = [
'zh' => 'zh-hans',
'zh-hk' => 'zh-hant',
'zh-tw' => 'zh-hant',
'zh-cn' => 'zh-hans',
'zh-sg' => 'zh-hans',
'zh-mo' => 'zh-hant',
];
if (isset($aliases[$lang])) {
$lang = $aliases[$lang];
}
// Load the language files
// Take English as a base, then overwrite with the browser language
// E.g.: First load en.php, then de.php, then de-at.php
$language_code = explode('-', $lang)[0];
$language_files = ["en", $language_code, $lang];
foreach ($language_files as $language_file) {
if (file_exists('lang/' . $language_file . '.php')) {
require_once 'lang/' . $language_file . '.php';
}
}
// Calculation through GET parameters
$xmr_in = isset($_GET["in"]) ? strtoupper(htmlspecialchars($_GET["in"])) : 'EUR';
$xmr_amount = isset($_GET["xmr"]) ? floatval($_GET["xmr"]) : 1;
$fiat_amount = isset($_GET["fiat"]) ? floatval($_GET["fiat"]) : '';
$conversion_direction = isset($_GET["direction"]) ? intval($_GET["direction"]) : 0;
if ($conversion_direction == 0) {
$fiat_value = $xmr_amount * $exchangeRates[$xmr_in];
$xmr_value = $xmr_amount;
} else {
$xmr_value = $fiat_amount / $exchangeRates[$xmr_in];
$fiat_value = $fiat_amount;
}
$fiat_value = number_format($fiat_value, ($xmr_in == 'BTC' || $xmr_in == 'LTC' || $xmr_in == 'ETH' || $xmr_in == 'XAG' || $xmr_in == 'XAU') ? 8 : 2);
$xmr_value = number_format($xmr_value, 12);
$fiat_value = strtr($fiat_value, ",", " ");
// Order preferred currencies to the top
foreach (array_reverse($preferred_currencies) as $currency) {
$currency = strtoupper($currency);
if (($key = array_search($currency, $currencies)) !== false) {
unset($currencies[$key]);
array_unshift($currencies, $currency);
}
}
// Output the HTML
require 'templates/index.php';
?>