mirror of
https://github.com/bugsink/bugsink.git
synced 2026-01-05 21:00:13 -06:00
feat: add delete functionality for users
Implement delete functionality with confirmation modals for users. Ensure proper authorization checks are in place before deletion. Add corresponding JavaScript files to handle modal interactions and form submissions. Based on #84 Signed-off-by: Animesh Agrawal <animesh@flick2know.com>
This commit is contained in:
committed by
Klaas van Schelven
parent
da77957870
commit
febcabc9f3
27
static/js/entity_edit.js
Normal file
27
static/js/entity_edit.js
Normal file
@@ -0,0 +1,27 @@
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Initializes delete functionality for entity edit pages
|
||||
*/
|
||||
function initializeDeleteModal() {
|
||||
const modal = document.getElementById('deleteModal');
|
||||
const deleteBtn = document.getElementById('deleteButton');
|
||||
const cancelBtn = document.getElementById('cancelDelete');
|
||||
|
||||
if (!modal || !deleteBtn || !cancelBtn) {
|
||||
console.error('One or more required elements not found');
|
||||
return;
|
||||
}
|
||||
|
||||
deleteBtn.addEventListener('click', () => {
|
||||
modal.classList.remove('hidden');
|
||||
});
|
||||
|
||||
cancelBtn.addEventListener('click', () => {
|
||||
modal.classList.add('hidden');
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
initializeDeleteModal();
|
||||
});
|
||||
32
static/js/user_list.js
Normal file
32
static/js/user_list.js
Normal file
@@ -0,0 +1,32 @@
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Initializes delete functionality for user list page
|
||||
*/
|
||||
function initializeDeleteModal() {
|
||||
const modal = document.getElementById('deleteModal');
|
||||
const deleteButtons = document.querySelectorAll('.delete-button');
|
||||
const cancelBtn = document.getElementById('cancelDelete');
|
||||
const deleteActionInput = document.getElementById('deleteAction');
|
||||
|
||||
if (!modal || deleteButtons.length === 0 || !cancelBtn || !deleteActionInput) {
|
||||
console.error('One or more required elements not found');
|
||||
return;
|
||||
}
|
||||
|
||||
deleteButtons.forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
const userId = button.getAttribute('data-user-id');
|
||||
deleteActionInput.value = 'delete:' + userId;
|
||||
modal.classList.remove('hidden');
|
||||
});
|
||||
});
|
||||
|
||||
cancelBtn.addEventListener('click', () => {
|
||||
modal.classList.add('hidden');
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
initializeDeleteModal();
|
||||
});
|
||||
2
theme/static/css/dist/styles.css
vendored
2
theme/static/css/dist/styles.css
vendored
File diff suppressed because one or more lines are too long
@@ -5,6 +5,28 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
<!-- Delete Confirmation Modal -->
|
||||
<div id="deleteModal" class="hidden fixed inset-0 bg-slate-600 bg-opacity-50 overflow-y-auto h-full w-full z-50 flex items-center justify-center">
|
||||
<div class="relative p-6 border border-slate-300 w-96 shadow-lg rounded-md bg-white">
|
||||
<div class="text-center m-4">
|
||||
<h3 class="text-2xl font-semibold text-slate-800 mt-3 mb-4">Delete User</h3>
|
||||
<div class="mt-4 mb-6">
|
||||
<p class="text-slate-700">
|
||||
Are you sure you want to delete this user? This action cannot be undone.
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex items-center justify-center space-x-4 mb-4">
|
||||
<button id="cancelDelete" class="text-cyan-500 font-bold">Cancel</button>
|
||||
<form method="post" action="." id="deleteForm">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="action" id="deleteAction" value="">
|
||||
<button type="submit" class="font-bold py-2 px-4 rounded bg-red-500 text-white border-2 border-red-600 hover:bg-red-600 active:ring">Confirm</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-center">
|
||||
|
||||
<div class="m-4 max-w-4xl flex-auto">
|
||||
@@ -25,7 +47,7 @@
|
||||
Our current invite-system is tied to either a team or a project; no "global" invites (yet).
|
||||
<div class="ml-auto mt-6">
|
||||
<a class="font-bold text-slate-800 border-slate-500 pl-4 pr-4 pb-2 pt-2 ml-1 border-2 bg-cyan-200 hover:bg-cyan-400 active:ring rounded-md" href="{% url "team_members_invite" team_pk=team.pk %}">Invite Member</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endcomment %}
|
||||
</div>
|
||||
|
||||
@@ -59,9 +81,10 @@
|
||||
<button name="action" value="deactivate:{{ user.id }}" class="font-bold text-slate-500 border-slate-300 pl-4 pr-4 pb-2 pt-2 ml-2 border-2 hover:bg-slate-200 active:ring rounded-md">Deactivate</button>
|
||||
{% else %}
|
||||
<button name="action" value="activate:{{ user.id }}" class="font-bold text-slate-500 border-slate-300 pl-4 pr-4 pb-2 pt-2 ml-2 border-2 hover:bg-slate-200 active:ring rounded-md">Activate</button>
|
||||
<button type="button" class="delete-button font-bold py-2 px-4 rounded bg-red-500 text-white border-2 border-red-600 hover:bg-red-600 active:ring ml-4" data-user-id="{{ user.id }}">Delete</button>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
@@ -84,3 +107,10 @@
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_js %}
|
||||
<script>
|
||||
var csrftoken = '{{ csrf_token }}';
|
||||
</script>
|
||||
<script src="{% static 'js/user_list.js' %}"></script>
|
||||
{% endblock %}
|
||||
@@ -44,6 +44,16 @@ def user_list(request):
|
||||
messages.success(request, 'User %s activated' % user.username)
|
||||
return redirect('user_list')
|
||||
|
||||
if action == "delete":
|
||||
user = User.objects.get(pk=user_pk)
|
||||
if user.is_active:
|
||||
messages.error(request, 'Cannot delete active user %s' % user.username)
|
||||
else:
|
||||
username = user.username
|
||||
user.delete()
|
||||
messages.success(request, 'User %s deleted' % username)
|
||||
return redirect('user_list')
|
||||
|
||||
return render(request, 'users/user_list.html', {
|
||||
'users': users,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user