135 lines
6.3 KiB
PHP
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(); ?>
|