200 lines
10 KiB
PHP
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>
|