240 lines
15 KiB
PHP
240 lines
15 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/store.php';
|
|
|
|
$mode = (string)($_GET['mode'] ?? 'login');
|
|
if ($mode !== 'register') {
|
|
$mode = 'login';
|
|
}
|
|
|
|
$redirectTo = store_safe_redirect((string)($_REQUEST['redirect_to'] ?? 'auth.php'), 'auth.php');
|
|
$loginForm = ['email' => ''];
|
|
$registerForm = ['full_name' => '', 'email' => ''];
|
|
$loginErrors = [];
|
|
$registerErrors = [];
|
|
$loginMessage = '';
|
|
$registerMessage = '';
|
|
|
|
if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST') {
|
|
$action = (string)($_POST['action'] ?? '');
|
|
|
|
if ($action === 'login') {
|
|
$result = store_login_user($_POST);
|
|
if (!empty($result['success'])) {
|
|
store_flash('success', (string)($result['message'] ?? 'Login berhasil.'));
|
|
header('Location: ' . $redirectTo);
|
|
exit;
|
|
}
|
|
|
|
$mode = 'login';
|
|
$loginForm = $result['form'] ?? $loginForm;
|
|
$loginErrors = $result['errors'] ?? [];
|
|
$loginMessage = (string)($result['message'] ?? 'Login belum berhasil diproses.');
|
|
}
|
|
|
|
if ($action === 'register') {
|
|
$result = store_register_user($_POST);
|
|
if (!empty($result['success'])) {
|
|
store_flash('success', (string)($result['message'] ?? 'Akun berhasil dibuat.'));
|
|
header('Location: ' . $redirectTo);
|
|
exit;
|
|
}
|
|
|
|
$mode = 'register';
|
|
$registerForm = $result['form'] ?? $registerForm;
|
|
$registerErrors = $result['errors'] ?? [];
|
|
$registerMessage = (string)($result['message'] ?? 'Pendaftaran belum berhasil diproses.');
|
|
}
|
|
}
|
|
|
|
$currentUser = store_current_user();
|
|
$summary = store_cart_summary();
|
|
$categories = store_categories();
|
|
$accountTitle = $currentUser ? 'Akun Saya' : 'Login / Register';
|
|
$accountDescription = $currentUser
|
|
? 'Ringkasan akun user untuk melanjutkan belanja, checkout, dan melacak pesanan.'
|
|
: 'Halaman login dan registrasi user untuk masuk ke sistem menggunakan email dan password.';
|
|
|
|
store_page_start($accountTitle, $accountDescription, ['noindex' => true]);
|
|
?>
|
|
<section class="section-block pt-0">
|
|
<div class="section-heading mb-4">
|
|
<span class="eyebrow">Login User</span>
|
|
<h1 class="section-title">
|
|
<?= $currentUser ? 'Akun user aktif dan siap dipakai.' : 'Tampilan login digunakan oleh pengguna yang telah terdaftar untuk masuk ke dalam sistem.' ?>
|
|
</h1>
|
|
<p class="section-copy mb-0">
|
|
<?= $currentUser
|
|
? 'Anda sudah login. Gunakan halaman ini untuk kembali ke katalog, membuka keranjang, atau melacak status pesanan.'
|
|
: 'Masukkan email dan password pada form login, atau buat akun baru melalui form registrasi agar data pengguna tersimpan lebih rapi.' ?>
|
|
</p>
|
|
</div>
|
|
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-4">
|
|
<aside class="auth-sidebar">
|
|
<div class="auth-side-card">
|
|
<div class="card-kicker">Kategori Menu</div>
|
|
<ul class="sidebar-link-list mb-0">
|
|
<?php foreach ($categories as $key => $category): ?>
|
|
<?php if ($key === 'all') continue; ?>
|
|
<li>
|
|
<a href="index.php?category=<?= h($key) ?>#catalog">
|
|
<strong><?= h($category['label']) ?></strong>
|
|
<span><?= h($category['description']) ?></span>
|
|
</a>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="auth-side-card">
|
|
<div class="card-kicker">Keranjang Belanja</div>
|
|
<div class="sidebar-metric"><?= h((string)store_cart_count()) ?></div>
|
|
<p class="mb-3 text-muted">Item yang sudah dipilih tetap tersimpan dan bisa dilanjutkan ke checkout kapan saja.</p>
|
|
<a class="btn btn-outline-secondary w-100" href="cart.php">Buka keranjang</a>
|
|
</div>
|
|
|
|
<div class="auth-side-card">
|
|
<div class="card-kicker">Info Pembayaran</div>
|
|
<ul class="list-clean compact-list mb-0">
|
|
<li><span class="list-index">1</span><span>Pilih metode pembayaran saat checkout.</span></li>
|
|
<li><span class="list-index">2</span><span>Simpan order number untuk pelacakan status.</span></li>
|
|
<li><span class="list-index">3</span><span>Siapkan bukti pembayaran jika metode bayar memerlukannya.</span></li>
|
|
</ul>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
|
|
<div class="col-lg-8">
|
|
<?php if ($currentUser): ?>
|
|
<section class="surface-panel auth-shell">
|
|
<div class="auth-state-chip">Login aktif</div>
|
|
<h2 class="summary-title mb-2">Halo, <?= h(store_user_first_name((string)$currentUser['full_name'])) ?>.</h2>
|
|
<p class="section-copy mb-4">Akun Anda sudah tersimpan di sesi browser ini dan siap digunakan untuk melanjutkan aktivitas belanja.</p>
|
|
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-6">
|
|
<div class="account-stat">
|
|
<span class="account-stat__label">Nama pengguna</span>
|
|
<strong><?= h((string)$currentUser['full_name']) ?></strong>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="account-stat">
|
|
<span class="account-stat__label">Email login</span>
|
|
<strong><?= h((string)$currentUser['email']) ?></strong>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="account-stat">
|
|
<span class="account-stat__label">Item di keranjang</span>
|
|
<strong><?= h((string)store_cart_count()) ?> produk</strong>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="account-stat">
|
|
<span class="account-stat__label">Total sementara</span>
|
|
<strong><?= h(store_money((float)$summary['grand_total'])) ?></strong>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="d-flex flex-wrap gap-2">
|
|
<a class="btn btn-dark" href="index.php#catalog">Lanjut belanja</a>
|
|
<a class="btn btn-outline-secondary" href="cart.php">Buka keranjang</a>
|
|
<a class="btn btn-outline-secondary" href="order_status.php">Lacak pesanan</a>
|
|
<a class="btn btn-outline-secondary" href="logout.php">Logout</a>
|
|
</div>
|
|
</section>
|
|
<?php else: ?>
|
|
<section class="surface-panel auth-shell">
|
|
<div class="auth-toggle mb-4">
|
|
<a class="toggle-pill<?= $mode === 'login' ? ' is-active' : '' ?>" href="auth.php?mode=login<?= $redirectTo !== 'auth.php' ? '&redirect_to=' . urlencode($redirectTo) : '' ?>">Login</a>
|
|
<a class="toggle-pill<?= $mode === 'register' ? ' is-active' : '' ?>" href="auth.php?mode=register<?= $redirectTo !== 'auth.php' ? '&redirect_to=' . urlencode($redirectTo) : '' ?>">Register</a>
|
|
</div>
|
|
|
|
<div class="row g-4">
|
|
<div class="col-xl-6">
|
|
<article class="auth-panel<?= $mode === 'login' ? ' auth-panel--active' : '' ?>">
|
|
<div class="auth-panel__head">
|
|
<div>
|
|
<div class="card-kicker">Login User</div>
|
|
<h2 class="h4 mb-1">Masuk dengan email dan password</h2>
|
|
</div>
|
|
</div>
|
|
<p class="text-muted mb-4">Gunakan akun yang sudah terdaftar untuk mengakses alur pemesanan dengan lebih cepat.</p>
|
|
|
|
<?php if ($loginMessage !== ''): ?>
|
|
<div class="alert alert-warning border-0 shadow-sm" role="alert"><?= h($loginMessage) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<form action="auth.php?mode=login" method="post" class="d-grid gap-3" data-auto-disable>
|
|
<input type="hidden" name="action" value="login">
|
|
<input type="hidden" name="redirect_to" value="<?= h($redirectTo) ?>">
|
|
<div>
|
|
<label class="form-label" for="login_email">Email</label>
|
|
<input id="login_email" name="email" type="email" class="form-control<?= store_input_class($loginErrors, 'email') ?>" value="<?= h((string)($loginForm['email'] ?? '')) ?>" autocomplete="username" placeholder="nama@email.com" required>
|
|
<?php if (!empty($loginErrors['email'])): ?><div class="invalid-feedback"><?= h((string)$loginErrors['email']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div>
|
|
<label class="form-label" for="login_password">Password</label>
|
|
<input id="login_password" name="password" type="password" class="form-control<?= store_input_class($loginErrors, 'password') ?>" autocomplete="current-password" placeholder="Minimal 8 karakter" required>
|
|
<?php if (!empty($loginErrors['password'])): ?><div class="invalid-feedback"><?= h((string)$loginErrors['password']) ?></div><?php endif; ?>
|
|
</div>
|
|
<button class="btn btn-dark" type="submit">Login</button>
|
|
</form>
|
|
|
|
<p class="auth-note mb-0">Belum punya akun? <a href="auth.php?mode=register<?= $redirectTo !== 'auth.php' ? '&redirect_to=' . urlencode($redirectTo) : '' ?>">Buat akun sekarang</a>.</p>
|
|
</article>
|
|
</div>
|
|
<div class="col-xl-6">
|
|
<article class="auth-panel<?= $mode === 'register' ? ' auth-panel--active' : '' ?>">
|
|
<div class="auth-panel__head">
|
|
<div>
|
|
<div class="card-kicker">Register</div>
|
|
<h2 class="h4 mb-1">Daftarkan akun pengguna</h2>
|
|
</div>
|
|
</div>
|
|
<p class="text-muted mb-4">Setelah registrasi berhasil, akun akan langsung aktif pada sesi browser ini.</p>
|
|
|
|
<?php if ($registerMessage !== ''): ?>
|
|
<div class="alert alert-warning border-0 shadow-sm" role="alert"><?= h($registerMessage) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<form action="auth.php?mode=register" method="post" class="d-grid gap-3" data-auto-disable>
|
|
<input type="hidden" name="action" value="register">
|
|
<input type="hidden" name="redirect_to" value="<?= h($redirectTo) ?>">
|
|
<div>
|
|
<label class="form-label" for="register_full_name">Nama lengkap</label>
|
|
<input id="register_full_name" name="full_name" type="text" class="form-control<?= store_input_class($registerErrors, 'full_name') ?>" value="<?= h((string)($registerForm['full_name'] ?? '')) ?>" maxlength="120" autocomplete="name" placeholder="Nama lengkap pengguna" required>
|
|
<?php if (!empty($registerErrors['full_name'])): ?><div class="invalid-feedback"><?= h((string)$registerErrors['full_name']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div>
|
|
<label class="form-label" for="register_email">Email</label>
|
|
<input id="register_email" name="email" type="email" class="form-control<?= store_input_class($registerErrors, 'email') ?>" value="<?= h((string)($registerForm['email'] ?? '')) ?>" maxlength="160" autocomplete="username" placeholder="nama@email.com" required>
|
|
<?php if (!empty($registerErrors['email'])): ?><div class="invalid-feedback"><?= h((string)$registerErrors['email']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div>
|
|
<label class="form-label" for="register_password">Password</label>
|
|
<input id="register_password" name="password" type="password" class="form-control<?= store_input_class($registerErrors, 'password') ?>" minlength="8" autocomplete="new-password" placeholder="Minimal 8 karakter" required>
|
|
<?php if (!empty($registerErrors['password'])): ?><div class="invalid-feedback"><?= h((string)$registerErrors['password']) ?></div><?php endif; ?>
|
|
</div>
|
|
<div>
|
|
<label class="form-label" for="register_confirm_password">Konfirmasi password</label>
|
|
<input id="register_confirm_password" name="confirm_password" type="password" class="form-control<?= store_input_class($registerErrors, 'confirm_password') ?>" minlength="8" autocomplete="new-password" placeholder="Ulangi password" required>
|
|
<?php if (!empty($registerErrors['confirm_password'])): ?><div class="invalid-feedback"><?= h((string)$registerErrors['confirm_password']) ?></div><?php endif; ?>
|
|
</div>
|
|
<button class="btn btn-dark" type="submit">Buat akun</button>
|
|
</form>
|
|
</article>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<?php store_page_end(); ?>
|