39401-vm/register.php
2026-03-30 17:47:50 +00:00

135 lines
6.3 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/includes/layout.php';
if (is_user_logged_in()) {
header('Location: ' . auth_redirect_target(app_url('dashboard.php')));
exit;
}
$errors = [];
$formData = [
'name' => '',
'email' => '',
];
$redirectTarget = auth_redirect_target(app_url('dashboard.php'));
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$formData['name'] = trim((string) ($_POST['name'] ?? ''));
$formData['email'] = trim((string) ($_POST['email'] ?? ''));
$password = (string) ($_POST['password'] ?? '');
$passwordConfirm = (string) ($_POST['password_confirm'] ?? '');
$redirectTarget = auth_redirect_target(app_url('dashboard.php'));
if ($formData['name'] === '' || strlen($formData['name']) < 3) {
$errors['name'] = 'Nama minimal 3 karakter.';
}
if (!filter_var($formData['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email'] = 'Masukkan email yang valid.';
} elseif (find_user_by_email($formData['email'])) {
$errors['email'] = 'Email ini sudah terdaftar. Silakan login saja.';
}
if (strlen($password) < 6) {
$errors['password'] = 'Password minimal 6 karakter.';
}
if ($passwordConfirm === '' || $password !== $passwordConfirm) {
$errors['password_confirm'] = 'Konfirmasi password harus sama.';
}
if (!$errors) {
$userId = create_user_account($formData['name'], $formData['email'], $password);
$user = find_user_by_email($formData['email']);
if ($userId > 0 && $user) {
login_user($user);
set_flash('success', 'Akun berhasil dibuat. Sekarang setiap catatan servis kamu tersimpan privat.');
header('Location: ' . $redirectTarget);
exit;
}
$errors['register'] = 'Akun belum berhasil dibuat. Coba lagi.';
}
}
render_page_start([
'title' => 'Daftar akun baru',
'description' => 'Buat akun ServisIngat agar data reminder servis tiap pengguna tersimpan terpisah.',
'page' => 'register',
'robots' => 'noindex, nofollow',
'body_class' => 'page-auth',
]);
render_flash(consume_flash());
?>
<section class="py-5 py-lg-6">
<div class="container">
<div class="auth-shell row g-4 align-items-stretch justify-content-center">
<div class="col-lg-5">
<div class="surface-card auth-side h-100">
<span class="eyebrow">Daftar</span>
<h1 class="section-title mt-2 mb-3">Buat akun ServisIngat</h1>
<p class="text-secondary mb-4">Satu akun = satu ruang dashboard sendiri. Jadi kalau user lain input data, catatan kamu tetap tidak terlihat oleh mereka.</p>
<div class="auth-feature-list d-flex flex-column gap-3">
<div class="auth-feature-item">
<strong>Langsung siap pakai</strong>
<span>Setelah daftar kamu bisa langsung masuk dan membuat reminder pertama.</span>
</div>
<div class="auth-feature-item">
<strong>Cocok untuk pemula</strong>
<span>Field yang diminta hanya yang penting: kendaraan, item servis, tanggal, dan interval.</span>
</div>
<div class="auth-feature-item">
<strong>Multi-user aman</strong>
<span>Arsitektur datanya sudah dipisah per akun supaya dashboard terasa personal.</span>
</div>
</div>
</div>
</div>
<div class="col-lg-5">
<div class="surface-card auth-card auth-form-card h-100">
<div class="d-flex justify-content-between align-items-start gap-3 mb-4">
<div>
<div class="small text-uppercase text-muted mb-1">Create account</div>
<h2 class="h4 mb-1">Daftar akun baru</h2>
<p class="small text-secondary mb-0">Bikin akun dulu supaya semua reminder tersimpan privat.</p>
</div>
<span class="badge badge-soft">Secure</span>
</div>
<?php if (isset($errors['register'])): ?>
<div class="alert alert-danger" role="alert"><?= e($errors['register']) ?></div>
<?php endif; ?>
<form method="post" class="vstack gap-3" novalidate>
<input type="hidden" name="redirect" value="<?= e($redirectTarget) ?>">
<div>
<label for="name" class="form-label">Nama</label>
<input type="text" class="form-control <?= isset($errors['name']) ? 'is-invalid' : '' ?>" id="name" name="name" value="<?= e($formData['name']) ?>" placeholder="Nama kamu">
<?php if (isset($errors['name'])): ?><div class="invalid-feedback"><?= e($errors['name']) ?></div><?php endif; ?>
</div>
<div>
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control <?= isset($errors['email']) ? 'is-invalid' : '' ?>" id="email" name="email" value="<?= e($formData['email']) ?>" placeholder="nama@email.com">
<?php if (isset($errors['email'])): ?><div class="invalid-feedback"><?= e($errors['email']) ?></div><?php endif; ?>
</div>
<div>
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control <?= isset($errors['password']) ? 'is-invalid' : '' ?>" id="password" name="password" placeholder="Minimal 6 karakter">
<?php if (isset($errors['password'])): ?><div class="invalid-feedback"><?= e($errors['password']) ?></div><?php endif; ?>
</div>
<div>
<label for="password_confirm" class="form-label">Konfirmasi password</label>
<input type="password" class="form-control <?= isset($errors['password_confirm']) ? 'is-invalid' : '' ?>" id="password_confirm" name="password_confirm" placeholder="Ulangi password">
<?php if (isset($errors['password_confirm'])): ?><div class="invalid-feedback"><?= e($errors['password_confirm']) ?></div><?php endif; ?>
</div>
<button type="submit" class="btn btn-dark w-100">Buat akun</button>
</form>
<div class="small text-muted mt-3">Sudah punya akun? <a href="<?= e(app_url('login.php')) ?><?= $redirectTarget !== app_url('dashboard.php') ? '?redirect=' . urlencode($redirectTarget) : '' ?>">Login di sini</a>.</div>
</div>
</div>
</div>
</div>
</section>
<?php render_page_end(); ?>