ARC_Starter/frontend/edit_user.php

184 lines
7.0 KiB
PHP

<?php
require 'auth.php';
requireAdmin();
require 'db.php';
$message = '';
$selectedUser = null;
// Fetch all users with full info for the list and modal
$users = $pdo->query("SELECT id, username, full_name, email, user_role, phone, access_group FROM users ORDER BY username")->fetchAll(PDO::FETCH_ASSOC);
// When a user is selected
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['select_user'])) {
$userId = $_POST['user_id'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$selectedUser = $stmt->fetch(PDO::FETCH_ASSOC);
}
// When user info is updated
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_user'])) {
$userId = $_POST['user_id'];
$full_name = $_POST['full_name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$user_role = $_POST['user_role'];
$access_group = $_POST['access_group'];
$stmt = $pdo->prepare("UPDATE users SET full_name = ?, email = ?, phone = ?, user_role = ?, access_group = ? WHERE id = ?");
$stmt->execute([$full_name, $email, $phone, $user_role, $access_group, $userId]);
$message = "User updated successfully.";
// Reload updated user
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$selectedUser = $stmt->fetch(PDO::FETCH_ASSOC);
}
?>
<?php include 'header.php'; ?>
<div class="container mt-4">
<h2><?= t('Users') ?>
<a href="add_user.php">
<button name="add_user" class="btn btn-success"><?= t('Add user') ?></button>
</a>
</h2>
<?php if ($message): ?>
<div class="alert alert-success"><?= htmlspecialchars(t($message)) ?></div>
<?php endif; ?>
<div class="mb-3">
<label for="filterRole" class="form-label"><?= t('Filter by Role') ?></label>
<select id="filterRole" class="form-select">
<option value=""><?= t('All Roles') ?></option>
<option value="Admin"><?= t('Admin') ?></option>
<option value="Operator"><?= t('Operator') ?></option>
<option value="Installer"><?= t('Installer') ?></option>
<option value="Client"><?= t('Client') ?></option>
</select>
</div>
<div class="mb-3">
<label for="searchUser" class="form-label"><?= t('Search User') ?></label>
<input type="text" id="searchUser" class="form-control" placeholder="<?= t('Search by name, username, or email...') ?>">
</div>
<table class="table table-hover" id="userTable" style="cursor: pointer;">
<thead>
<tr>
<th><?= t('Full Name') ?></th>
<th><?= t('Username') ?></th>
<th><?= t('Email') ?></th>
<th><?= t('Role') ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr
data-user='<?= json_encode($user, JSON_HEX_APOS | JSON_HEX_QUOT) ?>'
data-role="<?= htmlspecialchars($user['user_role']) ?>"
>
<td><?= htmlspecialchars($user['full_name']) ?></td>
<td><?= htmlspecialchars($user['username']) ?></td>
<td><?= htmlspecialchars($user['email']) ?></td>
<td><?= htmlspecialchars($user['user_role']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<!-- Modal -->
<div class="modal fade" id="editUserModal" tabindex="-1" aria-labelledby="editUserModalLabel" aria-hidden="true">
<div class="modal-dialog">
<form id="editUserForm" method="POST" class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="editUserModalLabel"><?= t('Edit User') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<input type="hidden" name="user_id" id="modal_user_id">
<div class="mb-3">
<label class="form-label"><?= t('Full Name') ?></label>
<input type="text" name="full_name" id="modal_full_name" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label"><?= t('Email') ?></label>
<input type="email" name="email" id="modal_email" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label"><?= t('Phone') ?></label>
<input type="text" name="phone" id="modal_phone" class="form-control">
</div>
<div class="mb-3">
<label class="form-label"><?= t('Role') ?></label>
<select name="user_role" id="modal_user_role" class="form-select" required>
<?php foreach (['Admin', 'Operator', 'Installer', 'Client'] as $role): ?>
<option value="<?= $role ?>"><?= $role ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label class="form-label"><?= t('Access Group') ?></label>
<input type="text" name="access_group" id="modal_access_group" class="form-control">
</div>
</div>
<div class="modal-footer">
<button type="submit" name="update_user" class="btn btn-success"><?= t('Update User') ?></button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= t('Cancel') ?></button>
</div>
</form>
</div>
</div>
<script>
const searchInput = document.getElementById('searchUser');
const roleFilter = document.getElementById('filterRole');
const userTable = document.getElementById('userTable');
const rows = userTable.querySelectorAll('tbody tr');
function filterTable() {
const searchTerm = searchInput.value.toLowerCase();
const selectedRole = roleFilter.value;
rows.forEach(row => {
const user = JSON.parse(row.getAttribute('data-user'));
const matchesSearch =
user.full_name.toLowerCase().includes(searchTerm) ||
user.username.toLowerCase().includes(searchTerm) ||
user.email.toLowerCase().includes(searchTerm);
const matchesRole = selectedRole === '' || user.user_role === selectedRole;
row.style.display = (matchesSearch && matchesRole) ? '' : 'none';
});
}
searchInput.addEventListener('input', filterTable);
roleFilter.addEventListener('change', filterTable);
// Show modal on row click with user data
rows.forEach(row => {
row.addEventListener('click', () => {
const user = JSON.parse(row.getAttribute('data-user'));
document.getElementById('modal_user_id').value = user.id;
document.getElementById('modal_full_name').value = user.full_name;
document.getElementById('modal_email').value = user.email;
document.getElementById('modal_phone').value = user.phone || '';
document.getElementById('modal_user_role').value = user.user_role;
document.getElementById('modal_access_group').value = user.access_group || '';
new bootstrap.Modal(document.getElementById('editUserModal')).show();
});
});
</script>
<?php include 'footer.php'; ?>