136 lines
3.2 KiB
PHP
136 lines
3.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
$pageStyles = [];
|
|
$pageScripts = [];
|
|
|
|
require_once __DIR__ . '/db.php';
|
|
require_once __DIR__ . '/auth.php';
|
|
|
|
const THEME_STYLES = [
|
|
'white' => 'app/css/white_mode.css',
|
|
'dark' => 'app/css/dark_mode.css',
|
|
'purple' => 'app/css/purple_mode.css',
|
|
'green' => 'app/css/green_mode.css',
|
|
'beige' => 'app/css/beige_mode.css',
|
|
];
|
|
|
|
function projectKilnTableExists(string $table): bool
|
|
{
|
|
$stmt = db()->prepare(
|
|
'SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?'
|
|
);
|
|
$stmt->execute([$table]);
|
|
|
|
return (int)$stmt->fetchColumn() > 0;
|
|
}
|
|
|
|
function projectKilnIsInstalled(): bool
|
|
{
|
|
if (!projectKilnTableExists('settings')) {
|
|
return false;
|
|
}
|
|
|
|
$stmt = db()->prepare(
|
|
"SELECT COUNT(*) FROM settings WHERE setting_name = 'installed' AND LOWER(setting_value) = 'true'"
|
|
);
|
|
$stmt->execute();
|
|
|
|
return (int)$stmt->fetchColumn() > 0;
|
|
}
|
|
|
|
function currentTheme(): string
|
|
{
|
|
$theme = 'dark';
|
|
$user = currentUser();
|
|
|
|
if (!$user) {
|
|
return $theme;
|
|
}
|
|
|
|
$stmt = db()->prepare(
|
|
'SELECT setting_value
|
|
FROM user_settings
|
|
WHERE user_id = ?
|
|
AND setting_name = ?
|
|
LIMIT 1'
|
|
);
|
|
|
|
$stmt->execute([
|
|
(int)$user['id'],
|
|
'theme'
|
|
]);
|
|
|
|
$storedTheme = (string)($stmt->fetchColumn() ?: '');
|
|
|
|
return array_key_exists($storedTheme, THEME_STYLES) ? $storedTheme : $theme;
|
|
}
|
|
|
|
$isInstalled = projectKilnIsInstalled();
|
|
$theme = $isInstalled ? currentTheme() : 'dark';
|
|
|
|
if (!$isInstalled) {
|
|
define('PROJECTKILN_INSTALL_EMBEDDED', true);
|
|
|
|
ob_start();
|
|
require __DIR__ . '/install/install.php';
|
|
$pageContent = ob_get_clean();
|
|
} else {
|
|
$page = $_GET['page'] ?? 'home';
|
|
|
|
$routes = [
|
|
'home' => 'home.php',
|
|
'login' => 'login.php',
|
|
'logout' => 'logout.php',
|
|
];
|
|
|
|
if (!isset($routes[$page])) {
|
|
$pageFile = __DIR__ . '/app/404.php';
|
|
} else {
|
|
$pageFile = __DIR__ . '/app/' . $routes[$page];
|
|
}
|
|
|
|
ob_start();
|
|
require $pageFile;
|
|
$pageContent = ob_get_clean();
|
|
}
|
|
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>ProjectKiln</title>
|
|
|
|
<link rel="stylesheet" href="app/bootstrap/css/bootstrap.min.css">
|
|
<link rel="stylesheet" href="app/fontawesome/css/all.min.css">
|
|
|
|
<link rel="stylesheet" href="app/css/main.css">
|
|
<link
|
|
rel="stylesheet"
|
|
href="<?= htmlspecialchars(THEME_STYLES[$theme]) ?>"
|
|
id="themeStylesheet"
|
|
data-theme="<?= htmlspecialchars($theme) ?>"
|
|
>
|
|
|
|
<?php foreach ($pageStyles as $style): ?>
|
|
<link rel="stylesheet" href="<?= htmlspecialchars($style) ?>">
|
|
<?php endforeach; ?>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<?= $pageContent ?>
|
|
</main>
|
|
|
|
<script src="app/bootstrap/js/bootstrap.bundle.min.js"></script>
|
|
|
|
<script src="app/js/main.js"></script>
|
|
|
|
<?php foreach ($pageScripts as $script): ?>
|
|
<script src="<?= htmlspecialchars($script) ?>"></script>
|
|
<?php endforeach; ?>
|
|
</body>
|
|
</html>
|