2026-02-04 23:31:53 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use MintyPHP\Buffer;
|
2026-03-06 00:44:52 +01:00
|
|
|
use MintyPHP\Http\RequestContext;
|
|
|
|
|
use MintyPHP\Session;
|
2026-02-04 23:31:53 +01:00
|
|
|
|
|
|
|
|
$defaultTitle = appTitle();
|
|
|
|
|
$user = $_SESSION['user'] ?? [];
|
2026-02-11 19:28:12 +01:00
|
|
|
$theme = currentTheme();
|
2026-02-04 23:31:53 +01:00
|
|
|
$primaryVars = appPrimaryCssVars();
|
2026-03-06 00:44:52 +01:00
|
|
|
$csrfKey = Session::$csrfSessionKey;
|
|
|
|
|
$csrfToken = (string) ($_SESSION[$csrfKey] ?? '');
|
2026-03-13 14:28:49 +01:00
|
|
|
$isLoggedIn = !empty($user['id']);
|
2026-03-13 14:38:58 +01:00
|
|
|
$sessionIdleMinutes = (int) (appSetting('session_idle_timeout_minutes') ?? 30);
|
|
|
|
|
$sessionIdleSeconds = max($sessionIdleMinutes, 5) * 60;
|
2026-03-06 00:44:52 +01:00
|
|
|
$telemetryEnabled = frontendTelemetryEnabled();
|
|
|
|
|
$telemetrySampleRate = frontendTelemetrySampleRate();
|
|
|
|
|
$telemetryAllowedEvents = implode(',', frontendTelemetryAllowedEvents());
|
|
|
|
|
$telemetryUrl = lurl('admin/frontend-telemetry/ingest');
|
|
|
|
|
$pageRequestId = RequestContext::id();
|
2026-03-04 15:56:58 +01:00
|
|
|
$viewAuth = is_array($viewAuth ?? null) ? $viewAuth : [];
|
|
|
|
|
$viewAuth['layout'] = is_array($viewAuth['layout'] ?? null) ? $viewAuth['layout'] : [];
|
2026-02-11 19:28:12 +01:00
|
|
|
$pageTitle = $defaultTitle;
|
|
|
|
|
ob_start();
|
|
|
|
|
Buffer::get('title');
|
|
|
|
|
$bufferTitle = trim((string) ob_get_clean());
|
|
|
|
|
if ($bufferTitle !== '') {
|
|
|
|
|
$pageTitle = $bufferTitle . ' - ' . $defaultTitle;
|
2026-02-04 23:31:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
?>
|
|
|
|
|
<!DOCTYPE html>
|
2026-03-06 00:44:52 +01:00
|
|
|
<html
|
|
|
|
|
data-theme="<?php e($theme); ?>"
|
|
|
|
|
data-contrast="normal"
|
|
|
|
|
data-asset-base="<?php e(asset('')); ?>"
|
|
|
|
|
data-request-id="<?php e($pageRequestId); ?>"
|
|
|
|
|
data-telemetry-url="<?php e($telemetryUrl); ?>"
|
|
|
|
|
data-telemetry-enabled="<?php e($telemetryEnabled ? '1' : '0'); ?>"
|
|
|
|
|
data-telemetry-sample-rate="<?php e((string) $telemetrySampleRate); ?>"
|
|
|
|
|
data-telemetry-allowed-events="<?php e($telemetryAllowedEvents); ?>"
|
2026-03-13 18:28:13 +01:00
|
|
|
data-csrf-key="<?php e($csrfKey); ?>"
|
|
|
|
|
data-csrf-token="<?php e($csrfToken); ?>"
|
2026-03-13 14:38:58 +01:00
|
|
|
<?php if ($isLoggedIn): ?>
|
2026-03-13 14:28:49 +01:00
|
|
|
data-session-idle-seconds="<?php e((string) $sessionIdleSeconds); ?>"
|
|
|
|
|
data-session-ping-url="<?php e(lurl('admin/session-ping/data')); ?>"
|
|
|
|
|
data-session-logout-url="<?php e(lurl('logout')); ?>"
|
|
|
|
|
<?php endif; ?>
|
2026-03-06 00:44:52 +01:00
|
|
|
class="no-js"
|
|
|
|
|
<?php if ($primaryVars !== ''): ?>style="<?php e($primaryVars); ?>" <?php endif; ?>
|
|
|
|
|
>
|
2026-02-04 23:31:53 +01:00
|
|
|
|
|
|
|
|
<head>
|
2026-03-05 08:26:51 +01:00
|
|
|
<script src="<?php e(assetVersion('js/app-boot.js')); ?>"></script>
|
2026-02-04 23:31:53 +01:00
|
|
|
<base href="<?php e(localeBase()); ?>">
|
2026-02-11 19:28:12 +01:00
|
|
|
<title><?php e($pageTitle); ?></title>
|
2026-02-04 23:31:53 +01:00
|
|
|
<meta property="og:site_name" content="<?php e($defaultTitle); ?>">
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
|
<link rel="icon" type="image/png" sizes="32x32" href="<?php e(appFaviconUrl('favicon-32x32.png')); ?>">
|
|
|
|
|
<link rel="icon" type="image/png" sizes="16x16" href="<?php e(appFaviconUrl('favicon-16x16.png')); ?>">
|
|
|
|
|
<link rel="apple-touch-icon" href="<?php e(appFaviconUrl('apple-touch-icon.png')); ?>">
|
|
|
|
|
<link rel="manifest" href="<?php e(asset('favicon/site.webmanifest')); ?>">
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
<?php renderTemplateStyles('default'); ?>
|
|
|
|
|
<?php renderPageStyles(); ?>
|
2026-02-04 23:31:53 +01:00
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body>
|
2026-03-05 12:51:53 +01:00
|
|
|
<a class="app-skip-link" href="#app-main-content"><?php e(t('Skip to main content')); ?></a>
|
2026-02-04 23:31:53 +01:00
|
|
|
<div class="app-container">
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
<?php require __DIR__ . '/partials/app-main-aside-icon-bar.phtml'; ?>
|
|
|
|
|
<?php require __DIR__ . '/partials/app-main-aside.phtml'; ?>
|
2026-02-04 23:31:53 +01:00
|
|
|
<div class="app-main">
|
|
|
|
|
<main>
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
<?php require __DIR__ . '/partials/app-topbar.phtml'; ?>
|
2026-03-05 12:51:53 +01:00
|
|
|
<div id="app-main-content" class="app-main-content" tabindex="-1">
|
2026-02-04 23:31:53 +01:00
|
|
|
<?php require __DIR__ . '/partials/app-flash.phtml'; ?>
|
|
|
|
|
<?php Buffer::get('html'); ?>
|
|
|
|
|
</div>
|
|
|
|
|
</main>
|
|
|
|
|
<?php require __DIR__ . '/partials/app-footer.phtml'; ?>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-03-05 08:26:51 +01:00
|
|
|
<script src="<?php e(assetVersion('vendor/fslightbox/fslightbox.js')); ?>"></script>
|
2026-03-06 00:44:52 +01:00
|
|
|
<?php require __DIR__ . '/partials/app-confirm-dialog.phtml'; ?>
|
2026-03-13 14:38:58 +01:00
|
|
|
<?php if ($isLoggedIn): ?>
|
2026-03-13 14:28:49 +01:00
|
|
|
<?php require __DIR__ . '/partials/app-session-warning-dialog.phtml'; ?>
|
2026-03-14 21:45:58 +01:00
|
|
|
<?php require __DIR__ . '/partials/app-bookmark-dialog.phtml'; ?>
|
2026-03-13 14:28:49 +01:00
|
|
|
<script type="module" src="<?php e(assetVersion('js/components/app-session-warning.js')); ?>"></script>
|
2026-03-14 21:45:58 +01:00
|
|
|
<script type="module" src="<?php e(assetVersion('js/components/app-bookmark-init.js')); ?>"></script>
|
2026-03-13 14:28:49 +01:00
|
|
|
<?php endif; ?>
|
2026-02-11 19:28:12 +01:00
|
|
|
<script type="module" src="<?php e(assetVersion('js/app-init.js')); ?>"></script>
|
2026-02-04 23:31:53 +01:00
|
|
|
</body>
|
|
|
|
|
|
2026-03-04 15:56:58 +01:00
|
|
|
</html>
|