From 8a8f5bbf9cef466225f3b3fb872ce1164122456b Mon Sep 17 00:00:00 2001 From: Ethan Clay <Ethan2.Clay@live.uwe.ac.uk> Date: Tue, 11 Feb 2025 10:49:33 +0000 Subject: [PATCH] Add manage user edit route and add majority of content. TO DO: Create role selector and link save changes button --- app/admin/routes.py | 9 +++ app/templates/admin/edit_user.html | 89 +++++++++++++++++++++++++++ app/templates/admin/manage_users.html | 2 +- 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 app/templates/admin/edit_user.html diff --git a/app/admin/routes.py b/app/admin/routes.py index 5ad8bf8..42e37e3 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -42,6 +42,15 @@ def edit_booking(id): destination_time_str=destination_time_str ) +@bp.route('/manage_users/edit/<int:id>') +@permission_required(super_admin_permission) +def edit_user(id): + user = User.search_user_id(id) + + return render_template( + 'admin/edit_user.html', + user=user + ) @bp.route('/manage_users') @permission_required(super_admin_permission) diff --git a/app/templates/admin/edit_user.html b/app/templates/admin/edit_user.html new file mode 100644 index 0000000..52c83b3 --- /dev/null +++ b/app/templates/admin/edit_user.html @@ -0,0 +1,89 @@ +{% extends 'base.html' %} +{% block content %} +<div class="container mt-5"> + <div class="card mb-4"> + <div class="card-body"> + <h2 class="card-title">User Information</h2> + <p><strong>User Name:</strong> + <span id="userName">{{user.username}}</span> + <button class="btn btn-primary" onclick="editField('userName', this)">Update</button> + </p> + <p><strong>Email:</strong> + <span id="userEmail">{{user.email}}</span> + <button class="btn btn-primary" onclick="editField('userEmail', this)">Update</button> + </p> + <p><strong>Role:</strong> + <span id="userRole">{{user.role.name}}</span> + <button class="btn btn-primary" onclick="editField('userRole', this)">Update</button> + </p> + </div> + </div> +</div> +<div class="text-center"> + <button class="btn btn-secondary btn-lg"> + Save Changes + </button> +</div> + +<style> + .input-container { + display: flex; + align-items: center; + } + .input-container input { + flex: 1; + max-width: 500px; + } + .input-container button { + margin-left: 10px; + } +</style> + +<script> +function editField(fieldId, button) { + const field = document.getElementById(fieldId); + const originalValue = field.textContent; + + const input = document.createElement("input"); + input.type = "text"; + input.value = originalValue; + input.classList.add("form-control"); + input.autofocus = true; + + const container = document.createElement("div"); + container.classList.add("input-container"); + container.appendChild(input); + + field.parentNode.replaceChild(container, field); + + input.onblur = function() { + if (!container.contains(input)) return; + saveField(input, fieldId, button); + }; + + button.innerText = 'Apply'; + button.onclick = function() { + saveField(input, fieldId, button); + }; + + container.appendChild(button); +} + +function saveField(input, fieldId, button) +{ + const newValue = input.value; + + const newSpan = document.createElement("span"); + newSpan.id = fieldId; + newSpan.textContent = newValue; + + const container = input.parentNode; + container.parentNode.replaceChild(newSpan, container); + + button.innerText = 'Update'; + button.onclick = editField.bind(null, fieldId, button); + + newSpan.parentNode.appendChild(button); +} +</script> +{% endblock %} diff --git a/app/templates/admin/manage_users.html b/app/templates/admin/manage_users.html index ef9b208..0b96873 100644 --- a/app/templates/admin/manage_users.html +++ b/app/templates/admin/manage_users.html @@ -107,7 +107,7 @@ $('#manage_bookings tbody').on('click', '.edit-btn', function() { const id = $(this).data('id'); - window.location.href = `manage_user/edit/${id}`; + window.location.href = `manage_users/edit/${id}`; }); let delete_user; -- GitLab