40061-vm/xampp-setup.php
Flatlogic Bot f9536ee19b 01
2026-05-24 07:14:49 +00:00

200 lines
10 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/includes/app.php';
$settings = db_settings();
$setupError = null;
$setupMessage = null;
$scriptDir = trim(str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME'] ?? '')), '/.');
$localBaseUrl = 'http://localhost' . ($scriptDir !== '' ? '/' . $scriptDir : '');
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'initialize_database') {
try {
db_initialize(__DIR__ . '/db/migrations/20260524_create_mail_accounts.sql');
flash('success', 'XAMPP baza je spremna. Sada možeš dodati POP3 račun.');
header('Location: index.php');
exit;
} catch (Throwable $exception) {
$setupError = $exception->getMessage();
}
}
app_boot();
$dbReady = db_ready();
$dbError = $setupError ?: app_db_error();
$pageTitle = project_name() . ' — XAMPP setup';
$projectBaseDescription = trim((string) ($_SERVER['PROJECT_DESCRIPTION'] ?? getenv('PROJECT_DESCRIPTION') ?: ''));
$pageDescription = $projectBaseDescription !== ''
? $projectBaseDescription . ' — Local XAMPP setup for the POP3 webmail database and first run.'
: 'Prepare the POP3 webmail app for local XAMPP by initializing the MySQL database and verifying the runtime configuration.';
$projectDescription = $projectBaseDescription !== '' ? $projectBaseDescription : $pageDescription;
$projectImageUrl = project_image_url();
?>
<!doctype html>
<html lang="hr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= h($pageTitle) ?></title>
<meta name="description" content="<?= h($pageDescription) ?>">
<meta name="robots" content="noindex, nofollow">
<?php if ($projectDescription): ?>
<meta property="og:description" content="<?= h($projectDescription) ?>">
<meta property="twitter:description" content="<?= h($projectDescription) ?>">
<?php endif; ?>
<?php if ($projectImageUrl): ?>
<meta property="og:image" content="<?= h($projectImageUrl) ?>">
<meta property="twitter:image" content="<?= h($projectImageUrl) ?>">
<?php endif; ?>
<meta property="og:title" content="<?= h($pageTitle) ?>">
<meta property="twitter:title" content="<?= h($pageTitle) ?>">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="assets/css/custom.css?v=<?= h(asset_version('assets/css/custom.css')) ?>">
</head>
<body>
<div class="container app-shell py-4 py-lg-5">
<nav class="navbar app-nav navbar-expand-lg">
<div class="container-fluid px-0">
<a class="navbar-brand d-flex align-items-center gap-3 m-0" href="index.php">
<span class="brand-mark">WM</span>
<span class="brand-copy">
<strong><?= h(project_name()) ?></strong>
<small>XAMPP setup</small>
</span>
</a>
<div class="d-flex flex-wrap align-items-center gap-2 ms-auto">
<a class="btn btn-sm btn-outline-secondary" href="index.php">Dashboard</a>
<a class="btn btn-sm btn-outline-secondary" href="healthz.php" target="_blank" rel="noopener">Healthz</a>
</div>
</div>
</nav>
<header class="hero-grid">
<section class="hero-card">
<div class="page-eyebrow mb-2">Local install</div>
<h1 class="hero-title">Priprema za XAMPP lokalni rad</h1>
<p class="section-subtitle">Otvori ovu stranicu unutar <strong>htdocs</strong>, pokreni Apache i MySQL u XAMPP-u, pa jednim klikom kreiraj bazu i mailbox tablicu. Nakon toga dashboard na <code>index.php</code> radi lokalno na <code>localhost</code>.</p>
<div class="hero-actions">
<?php if ($dbReady): ?>
<a class="btn btn-primary" href="index.php">Otvori dashboard</a>
<?php else: ?>
<form method="post" class="d-inline-flex m-0">
<input type="hidden" name="action" value="initialize_database">
<button type="submit" class="btn btn-primary">Kreiraj bazu i tablicu</button>
</form>
<?php endif; ?>
<a class="btn btn-outline-secondary" href="index.php">Natrag na aplikaciju</a>
</div>
<div class="d-flex flex-wrap gap-2 mt-3">
<span class="inline-note">Apache + MySQL</span>
<span class="inline-note">phpMyAdmin optional</span>
<span class="inline-note">Local URL ready</span>
</div>
</section>
<aside class="metrics-grid">
<div class="metric-card">
<div class="metric-label">Config profile</div>
<div class="metric-value" style="font-size:1.1rem;">PHP <?= h(PHP_VERSION) ?></div>
<div class="metric-hint">MySQL: <?= h($settings['user']) ?>@<?= h($settings['host']) ?>:<?= h((string) $settings['port']) ?></div>
</div>
<div class="metric-card">
<div class="metric-label">Database</div>
<div class="metric-value" style="font-size:1.1rem;"><?= h($settings['name']) ?></div>
<div class="metric-hint">Lozinka: <?= $settings['has_password'] ? 'postavljena' : 'prazna / XAMPP default' ?></div>
</div>
<div class="metric-card">
<div class="metric-label">Open locally</div>
<div class="metric-value" style="font-size:1rem;"><?= h($localBaseUrl !== '' ? $localBaseUrl : 'http://localhost') ?></div>
<div class="metric-hint">Zatim otvori <a class="text-decoration-underline" href="healthz.php" target="_blank" rel="noopener">/healthz</a></div>
</div>
</aside>
</header>
<?php if ($dbReady): ?>
<div class="alert alert-success border-0 mb-4" role="alert">
<strong>Baza je spremna.</strong> Možeš se vratiti na dashboard i dodati prvi POP3 račun.
</div>
<?php else: ?>
<div class="alert alert-warning border-0 mb-4" role="alert">
<strong>Baza još nije spremna.</strong> Ako koristiš tipični XAMPP, ostavi <code>root</code> korisnika i praznu lozinku ili po potrebi prvo prilagodi <code>db/config.php</code>.
<?php if ($dbError): ?>
<div class="small mt-2"><?= h($dbError) ?></div>
<?php endif; ?>
</div>
<?php endif; ?>
<main class="row g-4">
<section class="col-12 col-xl-7">
<div class="section-card stack-md h-100">
<div>
<div class="overline mb-1">3 steps</div>
<h2 class="section-title">Kako pokrenuti aplikaciju na XAMPP-u</h2>
</div>
<div class="quick-steps">
<article class="quick-step">
<h3>1. Kopiraj projekt u htdocs</h3>
<p>Primjer: <code>xampp/htdocs/pop3-webmail</code>. Lokalni URL će tada biti sličan <code><?= h($localBaseUrl) ?>/index.php</code>.</p>
</article>
<article class="quick-step">
<h3>2. Pokreni Apache i MySQL</h3>
<p>U XAMPP Control Panelu uključi oba servisa. Bez aktivnog MySQL-a spremanje mailboxa neće raditi.</p>
</article>
<article class="quick-step">
<h3>3. Inicijaliziraj bazu</h3>
<p>Klikni gumb <strong>Kreiraj bazu i tablicu</strong>. To će napraviti bazu <code><?= h($settings['name']) ?></code> i tablicu <code>mail_accounts</code>.</p>
</article>
</div>
</div>
</section>
<aside class="col-12 col-xl-5">
<div class="section-card stack-md h-100">
<div>
<div class="overline mb-1">Current config</div>
<h2 class="section-title">Vrijednosti koje aplikacija koristi</h2>
</div>
<div class="surface-muted p-3 rounded-4 border">
<div class="meta-list">
<div>
<strong>DB host</strong>
<span><?= h($settings['host']) ?></span>
</div>
<div>
<strong>DB port</strong>
<span><?= h((string) $settings['port']) ?></span>
</div>
<div>
<strong>DB name</strong>
<span><?= h($settings['name']) ?></span>
</div>
<div>
<strong>DB user</strong>
<span><?= h($settings['user']) ?></span>
</div>
<div>
<strong>DB password</strong>
<span><?= $settings['has_password'] ? 'Configured' : 'Empty (XAMPP default)' ?></span>
</div>
</div>
</div>
<div class="surface-muted p-3 rounded-4 border">
<div class="overline mb-2">Manual fallback</div>
<p class="small mb-2">Ako želiš ručno kroz phpMyAdmin, prvo kreiraj bazu:</p>
<pre class="mb-0"><code>CREATE DATABASE IF NOT EXISTS `<?= h($settings['name']) ?>`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;</code></pre>
<p class="small mt-3 mb-0">Zatim importaj SQL iz <code>db/migrations/20260524_create_mail_accounts.sql</code>.</p>
</div>
</div>
</aside>
</main>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" defer></script>
</body>
</html>