Added user view localization, fixed user delete not working

This commit is contained in:
2025-10-26 00:08:28 +02:00
parent 614abfbe90
commit a0a4999026
3 changed files with 191 additions and 63 deletions

View File

@@ -1,3 +1,4 @@
@using Microsoft.AspNetCore.Html
@using Microsoft.AspNetCore.Mvc.Localization
@using Berufsschule_HAM.Models
@using System.Buffers.Text
@@ -26,12 +27,12 @@
<thead>
<tr>
<th style="width: 2rem;"></th>
<th>User ID</th>
<th>title</th>
<th>Name</th>
<th>Surname</th>
<th>Workplace</th>
<th>Action</th>
<th>@T["Username"]</th>
<th>@T["Title"]</th>
<th>@T["Name"]</th>
<th>@T["Surname"]</th>
<th>@T["Workplace"]</th>
<th>@T["Action"]</th>
</tr>
</thead>
<tbody>
@@ -62,13 +63,13 @@
data-user-groups="@JsonSerializer.Serialize(userTableViewModel.Description.Groups)"
data-bs-toggle="modal"
data-bs-target="#updateModal">
Update
@T["Update"]
</button>
<button class="btn btn-sm btn-danger btn-delete"
data-user-id="@userTableViewModel.Uid"
data-bs-toggle="modal"
data-bs-target="#deleteModal">
Delete
@T["Delete"]
</button>
</div>
</td>
@@ -85,16 +86,18 @@
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header bg-danger text-white">
<h5 class="modal-title" id="deleteModalLabel">Confirm Delete</h5>
<h5 class="modal-title" id="deleteModalLabel">@T["Confirm Delete"]</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Are you sure you want to delete the user <strong id="userName"></strong> (ID: <span id="userId"></span>)?</p>
<p>
@T["DeleteUserConfirmation", new HtmlString("<strong id=\"userId\"></strong>")]
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<form id="deleteForm" method="post" action="">
<button type="submit" class="btn btn-danger">Yes, Delete</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">@T["Cancel"]</button>
<form id="deleteForm" method="post" asp-controller="Users" asp-action="Delete">
<button type="submit" class="btn btn-danger">@T["Yes, Delete"]</button>
</form>
</div>
</div>
@@ -143,17 +146,15 @@
deleteModal.querySelector('#userId').textContent = userId;
deleteModal.querySelector('#userName').textContent = userName;
// Store the delete URL for later use
deleteModal.querySelector('#deleteForm').dataset.url = `/Users/Delete?uid=${userId}`;
});
// Handle submit of deleteForm via fetch()
const deleteForm = document.getElementById('deleteForm');
deleteForm.addEventListener('submit', async e => {
e.preventDefault();
const url = deleteForm.dataset.url;
console.log(deleteForm);
const userId = deleteModal.querySelector('#userId').textContent;
const url = `/Users/Delete?uid=${userId}`;
try {
const response = await fetch(url, {
@@ -176,13 +177,13 @@
row.classList.add('table-danger');
setTimeout(() => row.remove(), 300);
showToast('User deleted successfully', 'success');
showToast('@T["User deleted successfully"]', 'success');
} else {
showToast(`${result.reason}: ${result.exception || 'Unknown error'}`, 'danger');
showToast(`${result.reason}: ${result.exception || '@T["Unknown error"]'}`, 'danger');
}
} catch (error) {
console.error(error);
showToast('Error contacting server', 'danger');
showToast('@T["Error contacting server"]', 'danger');
}
});
});
@@ -193,7 +194,7 @@
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header bg-warning text-dark">
<h5 class="modal-title" id="updateModalLabel">Update User</h5>
<h5 class="modal-title" id="updateModalLabel">@T["Update User"]</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
@@ -201,51 +202,51 @@
<input type="hidden" id="updateUid" name="Uid" />
<div class="row g-3">
<h6 class="fw-bold">Personal information</h6>
<h6 class="fw-bold">@T["Personal information"]</h6>
<div class="col-md-6">
<label class="form-label">Title</label>
<label class="form-label">@T["Title"]</label>
<input type="text" id="updateTitle" name="Title" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Name</label>
<label class="form-label">@T["Name"]</label>
<input type="text" id="updateName" name="Cn" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Surname</label>
<label class="form-label">@T["Surname"]</label>
<input type="text" id="updateSurname" name="Sn" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Birth date</label>
<label class="form-label">@T["Birth Date"]</label>
<input type="text" id="updateBirthdate" name="Description.BirthDate" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">City</label>
<label class="form-label">@T["City"]</label>
<input type="text" id="updateAddressCity" name="Description.Address.City" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Street</label>
<label class="form-label">@T["Street"]</label>
<input type="text" id="updateAddressStreet" name="Description.Address.Street" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Street Nr.</label>
<label class="form-label">@T["Street Nr."]</label>
<input type="text" id="updateAddressStreetNr" name="Description.Address.StreetNr" class="form-control" />
</div>
<hr class="my-3">
<h6 class="fw-bold">Workplace & account</h6>
<h6 class="fw-bold">@T["Workplace & account"]</h6>
<div class="col-md-6">
<label class="form-label">Workplace</label>
<label class="form-label">@T["Workplace"]</label>
<input type="text" id="updateWorkplace" name="Description.Workplace" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Groups</label>
<label class="form-label">@T["Groups"]</label>
<select id="updateGroups" name="Description.Groups" class="form-select" multiple></select>
</div>
<div class="col-md-6">
<label class="form-label">New Password</label>
<label class="form-label">@T["New Password"]</label>
<input type="password" id="updatePassword" name="UserPassword" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Photo</label>
<label class="form-label">@T["Photo"]</label>
<input type="file" id="updatePhotoFile" accept="image/*" class="form-control" />
<input type="hidden" id="updateJpegPhoto" name="JpegPhoto" />
<div class="mt-2 text-center">
@@ -256,8 +257,8 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" form="updateForm" class="btn btn-warning">Save changes</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">@T["Cancel"]</button>
<button type="submit" form="updateForm" class="btn btn-warning">@T["Save changes"]</button>
</div>
</div>
</div>
@@ -366,13 +367,13 @@
}
updateForm.reset();
document.getElementById('updatePhotoPreview').style.display = "none";
showToast('User updated successfully', 'success');
showToast('@T["User updated successfully"]', 'success');
} else {
showToast(`${result.Exception || 'Update failed'}`, 'danger');
showToast(`${result.Exception || '@T["Update failed"]'}`, 'danger');
}
} catch (err) {
console.error(err);
showToast('Error updating user', 'danger');
showToast('@T["Error updating user"]', 'danger');
}
});
});
@@ -470,57 +471,57 @@
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title" id="createModalLabel">Create User</h5>
<h5 class="modal-title" id="createModalLabel">@T["Create User"]</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form id="createForm">
<div class="row g-3">
<h6 class="fw-bold">Personal information</h6>
<h6 class="fw-bold">@T["Personal information"]</h6>
<div class="col-md-6">
<label class="form-label">Title</label>
<label class="form-label">@T["Title"]</label>
<input type="text" name="Title" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Name</label>
<label class="form-label">@T["Name"]</label>
<input type="text" name="Cn" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Surname</label>
<label class="form-label">@T["Surname"]</label>
<input type="text" name="Sn" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Birth date</label>
<label class="form-label">@T["Birth Date"]</label>
<input type="text" name="Description.BirthDate" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">City</label>
<label class="form-label">@T["City"]</label>
<input type="text" name="Description.Address.City" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Street</label>
<label class="form-label">@T["Street"]</label>
<input type="text" name="Description.Address.Street" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Street Nr.</label>
<label class="form-label">@T["Street Nr."]</label>
<input type="text" name="Description.Address.StreetNr" class="form-control" />
</div>
<hr class="my-3">
<h6 class="fw-bold">Workplace & account</h6>
<h6 class="fw-bold">@T["Workplace & account"]</h6>
<div class="col-md-6">
<label class="form-label">Workplace</label>
<label class="form-label">@T["Workplace"]</label>
<input type="text" name="Description.Workplace" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Groups</label>
<label class="form-label">@T["Groups"]</label>
<select id="createGroups" name="Description.Groups" class="form-select" multiple></select>
</div>
<div class="col-md-6">
<label class="form-label">Password</label>
<label class="form-label">@T["Password"]</label>
<input type="password" name="UserPassword" class="form-control" />
</div>
<div class="col-md-6">
<label class="form-label">Photo</label>
<label class="form-label">@T["Photo"]</label>
<input type="file" id="createPhotoFile" accept="image/*" class="form-control" />
<input type="hidden" id="createJpegPhoto" name="JpegPhoto" />
<div class="mt-2 text-center">
@@ -531,8 +532,8 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" form="createForm" class="btn btn-primary">Create</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">@T["Cancel"]</button>
<button type="submit" form="createForm" class="btn btn-primary">@T["Create"]</button>
</div>
</div>
</div>
@@ -585,7 +586,7 @@
const result = await response.json();
if (result.Success) {
bootstrap.Modal.getInstance(createModal).hide();
showToast('User created successfully', 'success');
showToast('@T["User created successfully"]', 'success');
// Add new row to table dynamically
const tbody = document.querySelector('table tbody');
@@ -622,11 +623,11 @@
`;
tbody.appendChild(newRow);
} else {
showToast(`${result.Exception || 'Create failed'}`, 'danger');
showToast(`${result.Exception || '@T["Create failed"]'}`, 'danger');
}
} catch (err) {
console.error(err);
showToast('Error creating user', 'danger');
showToast('@T["Error creating user"]', 'danger');
}
});
@@ -655,7 +656,7 @@
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header bg-info text-white">
<h5 class="modal-title" id="detailModalLabel">User Details</h5>
<h5 class="modal-title" id="detailModalLabel">@T["User Details"]</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
@@ -664,7 +665,7 @@
<img id="detailPhoto" class="img-thumbnail rounded-circle" style="max-height:150px;" />
</div>
<div class="col-md-6">
<label class="form-label">@T["User ID"]</label>
<label class="form-label">@T["Username"]</label>
<input type="text" class="form-control" id="detailUid" value="" disabled />
</div>
<div class="col-md-6">
@@ -684,7 +685,7 @@
<input type="text" class="form-control" id="detailBirthdate" value="" disabled />
</div>
<hr class="my-3">
<h6 class="fw-bold">Address</h6>
<h6 class="fw-bold">@T["Address"]</h6>
<div class="col-md-4">
<label class="form-label">@T["City"]</label>
<input type="text" class="form-control" id="detailCity" value="" disabled />
@@ -694,11 +695,11 @@
<input type="text" class="form-control" id="detailStreet" value="" disabled />
</div>
<div class="col-md-2">
<label class="form-label">@T["Street Nr"]</label>
<label class="form-label">@T["Street Nr."]</label>
<input type="text" class="form-control" id="detailStreetNr" value="" disabled />
</div>
<hr class="my-3">
<h6 class="fw-bold">Workplace & account</h6>
<h6 class="fw-bold">@T["Workplace & account"]</h6>
<div class="col-md-6">
<label class="form-label">@T["Workplace"]</label>
<input type="text" class="form-control" id="detailWorkplace" value="" disabled />