asd
This commit is contained in:
commit
3e4a056b14
67 files changed
+13926
No files matched your search
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
defined('SERUBI_ADMIN') || exit;
|
||||
$users = db()->query('SELECT id, username, full_name, role, is_active, otp_enabled, must_change_password, last_login_at, created_at FROM admins ORDER BY is_active DESC, username')->fetchAll();
|
||||
$openId = (int)($errors['user_id'] ?? 0);
|
||||
$super = is_super_admin($me);
|
||||
// Every action on another account asks for the acting admin's own password.
|
||||
$confirmField = function (string $id): string {
|
||||
return '<div class="form-field"><label for="' . e($id) . '">Password Anda (konfirmasi)</label>'
|
||||
. '<input id="' . e($id) . '" type="password" name="confirm_password" autocomplete="current-password" required></div>';
|
||||
};
|
||||
?>
|
||||
<section class="panel">
|
||||
<header class="panel-head">
|
||||
<h2>Daftar admin</h2>
|
||||
<p><?= $super
|
||||
? 'Sebagai super admin, Anda dapat menambah, menonaktifkan, me-reset password atau OTP, dan mengubah peran admin lain.'
|
||||
: 'Hanya super admin yang dapat mengelola akun admin lain.' ?></p>
|
||||
</header>
|
||||
<?= isset($errors['user']) && !$openId ? field_error($errors, 'user') : '' ?>
|
||||
<ul class="user-list">
|
||||
<?php foreach ($users as $u): $self = (int)$u['id'] === $me['id']; $uid = (int)$u['id']; ?>
|
||||
<li class="user<?= (int)$u['is_active'] ? '' : ' is-off' ?>">
|
||||
<div class="user-main">
|
||||
<span class="user-name"><?= e($u['full_name']) ?><?= $self ? ' <span class="badge">Anda</span>' : '' ?>
|
||||
<span class="badge"><?= $u['role'] === 'super_admin' ? 'Super admin' : 'Admin' ?></span>
|
||||
<?= (int)$u['otp_enabled'] ? '' : ' <span class="badge badge-off">OTP belum aktif</span>' ?>
|
||||
<?= (int)$u['must_change_password'] ? ' <span class="badge badge-off">Wajib ganti password</span>' : '' ?>
|
||||
<?= (int)$u['is_active'] ? '' : ' <span class="badge badge-off">Nonaktif</span>' ?></span>
|
||||
<span class="user-meta">@<?= e($u['username']) ?> · login terakhir <?= e(fmt_datetime($u['last_login_at'])) ?></span>
|
||||
<?= $openId === $uid ? field_error($errors, 'user') : '' ?>
|
||||
</div>
|
||||
<?php if ($super && !$self): ?>
|
||||
<div class="user-actions">
|
||||
<details class="inline-details"<?= $openId === $uid ? ' open' : '' ?>>
|
||||
<summary class="btn btn-ghost btn-sm"><?= icon('key') ?><span>Kelola</span></summary>
|
||||
<form method="post" class="inline-form">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="action" value="user_password">
|
||||
<input type="hidden" name="id" value="<?= $uid ?>">
|
||||
<strong>Reset password</strong>
|
||||
<div class="form-field"><label for="pw<?= $uid ?>">Password sementara</label><input id="pw<?= $uid ?>" type="password" name="password" autocomplete="new-password" required></div>
|
||||
<div class="form-field"><label for="pc<?= $uid ?>">Ulangi password</label><input id="pc<?= $uid ?>" type="password" name="password_confirm" autocomplete="new-password" required></div>
|
||||
<?= $confirmField('pa' . $uid) ?>
|
||||
<p class="hint">Pemilik akun wajib mengganti password ini saat login berikutnya.</p>
|
||||
<button class="btn btn-primary btn-sm" type="submit">Reset password</button>
|
||||
</form>
|
||||
<form method="post" class="inline-form">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="id" value="<?= $uid ?>">
|
||||
<strong>Akun</strong>
|
||||
<?= $confirmField('pb' . $uid) ?>
|
||||
<div class="inline-buttons">
|
||||
<button class="btn btn-sm <?= (int)$u['is_active'] ? 'btn-ghost' : 'btn-primary' ?>" type="submit" name="action" value="user_toggle"><?= (int)$u['is_active'] ? 'Nonaktifkan' : 'Aktifkan' ?></button>
|
||||
<button class="btn btn-ghost btn-sm" type="submit" name="action" value="user_role"><?= $u['role'] === 'super_admin' ? 'Jadikan admin' : 'Jadikan super admin' ?></button>
|
||||
<?php if ((int)$u['otp_enabled']): ?>
|
||||
<button class="btn btn-ghost btn-sm" type="submit" name="action" value="user_reset_otp">Reset OTP</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<p class="hint">Reset OTP bila ponsel hilang: authenticator baru dipasang saat login berikutnya.</p>
|
||||
</form>
|
||||
</details>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<div class="two-col">
|
||||
<?php if ($super): ?>
|
||||
<section class="panel">
|
||||
<header class="panel-head"><h2>Tambah admin</h2></header>
|
||||
<form method="post" class="stack-form" novalidate>
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="action" value="user_create">
|
||||
<?= field_error($errors, 'user_new') ?>
|
||||
<div class="form-field"><label for="nu">Username</label><input id="nu" name="username" autocapitalize="none" spellcheck="false" autocomplete="off" value="<?= e($draft['username'] ?? '') ?>" required><p class="hint">Huruf kecil, angka, titik, minus, garis bawah.</p></div>
|
||||
<div class="form-field"><label for="nn">Nama lengkap</label><input id="nn" name="full_name" autocomplete="off" value="<?= e($draft['full_name'] ?? '') ?>" required></div>
|
||||
<div class="form-field"><label for="nr">Peran</label>
|
||||
<select id="nr" name="role"><option value="admin">Admin (ubah parameter)</option><option value="super_admin">Super admin (juga kelola akun)</option></select></div>
|
||||
<div class="form-field"><label for="np">Password awal</label><input id="np" type="password" name="password" autocomplete="new-password" required><p class="hint">Minimal 10 karakter, berisi huruf, angka, dan simbol. Wajib diganti saat login pertama.</p></div>
|
||||
<div class="form-field"><label for="nc">Ulangi password</label><input id="nc" type="password" name="password_confirm" autocomplete="new-password" required></div>
|
||||
<?= $confirmField('nx') ?>
|
||||
<button class="btn btn-primary" type="submit"><?= icon('plus') ?><span>Tambah admin</span></button>
|
||||
</form>
|
||||
</section>
|
||||
<?php endif; ?>
|
||||
|
||||
<section class="panel">
|
||||
<header class="panel-head"><h2>Password Anda</h2></header>
|
||||
<form method="post" class="stack-form" novalidate>
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="action" value="own_password">
|
||||
<?= field_error($errors, 'own') ?>
|
||||
<div class="form-field"><label for="oc">Password saat ini</label><input id="oc" type="password" name="current" autocomplete="current-password" required></div>
|
||||
<div class="form-field"><label for="op">Password baru</label><input id="op" type="password" name="password" autocomplete="new-password" required></div>
|
||||
<div class="form-field"><label for="oq">Ulangi password baru</label><input id="oq" type="password" name="password_confirm" autocomplete="new-password" required></div>
|
||||
<button class="btn btn-primary" type="submit"><?= icon('key') ?><span>Ganti password</span></button>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
Reference in new issue
Block a user