assets(); if ($assets) { $assets->addStyle('/module/fx-rates/asset?file=fx-rates.css'); $assets->addScript('/module/fx-rates/asset?file=fx-rates-currencies.js', 'footer', true); } $settings = module_fn('fx-rates', 'settings'); $service = module_fn('fx-rates', 'service'); $notice = trim((string) ($_GET['notice'] ?? '')); $error = trim((string) ($_GET['error'] ?? '')); if (strtoupper((string) ($_SERVER['REQUEST_METHOD'] ?? 'GET')) === 'POST') { try { $action = trim((string) ($_POST['fx_action'] ?? '')); if ($action === 'save_selection') { $payload = [ 'display_base_currency' => (string) ($_POST['display_base_currency'] ?? ''), 'preferred_currencies' => $_POST['preferred_currencies'] ?? [], ]; $saved = module_fn('fx-rates', 'save_runtime_settings', $payload); $params = ['notice' => 'Waehrungs-Auswahl gespeichert.']; if (is_array($saved) && !empty($saved['display_base_currency'])) { $params['base'] = (string) $saved['display_base_currency']; } redirect('/module/fx-rates/currencies?' . http_build_query($params)); } if ($action === 'sync_catalog') { $result = module_fn('fx-rates', 'run_setup_action', 'sync_currency_catalog'); redirect('/module/fx-rates/currencies?' . http_build_query([ 'notice' => sprintf('Waehrungskatalog synchronisiert. %d Waehrungen verarbeitet.', (int) ($result['synced_count'] ?? 0)), ])); } if ($action === 'refresh_rates') { $result = $service->refreshLatestRates(null, (string) ($settings['default_base_currency'] ?? ''), 'manual'); redirect('/module/fx-rates/currencies?' . http_build_query([ 'notice' => sprintf('Alle Wechselkurse aktualisiert. %d Werte gespeichert.', (int) ($result['updated_count'] ?? 0)), ])); } } catch (\Throwable $exception) { redirect('/module/fx-rates/currencies?' . http_build_query([ 'error' => $exception->getMessage() !== '' ? $exception->getMessage() : 'Aktion konnte nicht ausgefuehrt werden.', ])); } } $catalog = is_array($settings['currency_catalog'] ?? null) ? $settings['currency_catalog'] : []; $preferredCurrencies = is_array($settings['preferred_currencies'] ?? null) ? $settings['preferred_currencies'] : []; $savedDisplayBaseCurrency = strtoupper(trim((string) ($settings['display_base_currency'] ?? $settings['default_base_currency'] ?? 'EUR'))); $requestedDisplayBaseCurrency = strtoupper(trim((string) ($_GET['base'] ?? ''))); $latest = $service->latestStatus(); $recentFetches = $service->recentFetches(15); $currencies = []; foreach ($catalog as $item) { if (!is_array($item)) { continue; } $code = strtoupper(trim((string) ($item['code'] ?? ''))); $name = trim((string) ($item['name'] ?? '')); if ($code === '' || $name === '') { continue; } $currencies[] = [ 'code' => $code, 'name' => $name, ]; } $cryptoCodes = array_fill_keys([ 'ADA', 'ARB', 'BNB', 'BTC', 'DAI', 'DOGE', 'DOT', 'ETH', 'LINK', 'LTC', 'SOL', 'USDC', 'USDT', 'XAG', 'XAU', 'XRP', ], true); $fiatCount = 0; $cryptoCount = 0; foreach ($currencies as $currency) { if (isset($cryptoCodes[$currency['code']])) { $cryptoCount++; } else { $fiatCount++; } } $catalogCodes = []; foreach ($currencies as $currency) { $catalogCodes[(string) $currency['code']] = true; } $displayBaseCurrency = $requestedDisplayBaseCurrency !== '' ? $requestedDisplayBaseCurrency : $savedDisplayBaseCurrency; if ($displayBaseCurrency === '' || (!isset($catalogCodes[$displayBaseCurrency]) && $preferredCurrencies !== [])) { $displayBaseCurrency = $savedDisplayBaseCurrency !== '' ? $savedDisplayBaseCurrency : (string) ($preferredCurrencies[0] ?? 'EUR'); } $tableCurrencies = []; foreach ([$displayBaseCurrency, ...$preferredCurrencies] as $currency) { $currency = strtoupper(trim((string) $currency)); if ($currency !== '' && !in_array($currency, $tableCurrencies, true)) { $tableCurrencies[] = $currency; } } $currencyPageData = json_encode([ 'currencies' => $currencies, 'preferred_currencies' => array_values(array_unique(array_map(static fn (mixed $code): string => strtoupper(trim((string) $code)), $preferredCurrencies))), 'display_base_currency' => $displayBaseCurrency, 'saved_display_base_currency' => $savedDisplayBaseCurrency, ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $tabs = [ ['label' => 'Ueberblick', 'href' => '/module/fx-rates'], ['label' => 'Waehrungen', 'href' => '/module/fx-rates/currencies', 'active' => true], ]; ?>
'>

Waehrungs-Update

Auswahl wird in den Waehrungskurs-Einstellungen gespeichert und steht damit auf Handy und Desktop gleich zur Verfuegung.

Fiat
Waehrungen
Krypto
Waehrungen
Bevorzugte Waehrungen fuer Anzeige

Letzte 15 Kurs-Uploads

Zeigt die zuletzt gespeicherten Wechselkurse aus der Datenbank.

Anzeige-Basis:
Letzter Abruf:
snapshotByFetchId((int) ($fetch['id'] ?? 0), $fetchBaseCurrency, $tableCurrencies); $originalRates = is_array($snapshot['rates'] ?? null) ? $snapshot['rates'] : []; $displayBaseRate = $displayBaseCurrency === $fetchBaseCurrency ? 1.0 : (is_numeric($originalRates[$displayBaseCurrency] ?? null) ? (float) $originalRates[$displayBaseCurrency] : null); $tableRates = []; foreach ($tableCurrencies as $currency) { $currency = strtoupper(trim((string) $currency)); if ($currency === '') { continue; } if ($currency === $displayBaseCurrency) { $tableRates[$currency] = 1.0; continue; } if ($displayBaseRate === null || $displayBaseRate <= 0) { $tableRates[$currency] = null; continue; } if ($currency === $fetchBaseCurrency) { $tableRates[$currency] = 1 / $displayBaseRate; continue; } $rawRate = $originalRates[$currency] ?? null; $tableRates[$currency] = is_numeric($rawRate) ? ((float) $rawRate / $displayBaseRate) : null; } $infoTitle = sprintf( 'Basis: %s | Provider: %s | Ausloeser: %s', (string) ($fetch['base_currency'] ?? '-'), (string) ($fetch['provider'] ?? '-'), (string) ($fetch['trigger_source_label'] ?? $fetch['trigger_source'] ?? '-') ); ?>
Zeit
Noch keine Abrufe vorhanden.