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