diff options
| -rw-r--r-- | app/admin/forms.py | 4 | ||||
| -rw-r--r-- | app/admin/routes.py | 23 | ||||
| -rw-r--r-- | app/templates/admin/manage_users.html | 40 |
3 files changed, 66 insertions, 1 deletions
diff --git a/app/admin/forms.py b/app/admin/forms.py index 3d76b5d..a5aa321 100644 --- a/app/admin/forms.py +++ b/app/admin/forms.py @@ -69,3 +69,7 @@ class AdminAddDatasetForm(FlaskForm): class AdminManageDatasetsForm(FlaskForm): dataset = SelectField("Dataset", coerce=int, validators=[InputRequired()]) delete = SubmitField("Delete") + +class AdminManageUsersForm(FlaskForm): + user = SelectField("User", coerce=int, validators=[InputRequired()]) + delete = SubmitField("Delete") diff --git a/app/admin/routes.py b/app/admin/routes.py index 859f8ac..c8a23a4 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -16,6 +16,7 @@ from app.admin.forms import ( AdminManageTaskForm, AdminAddDatasetForm, AdminManageDatasetsForm, + AdminManageUsersForm, ) from app.models import User, Dataset, Task, Annotation from app.utils.tasks import generate_auto_assign_tasks @@ -113,8 +114,28 @@ def manage_tasks(): @admin_required def manage_users(): users = User.query.all() + user_list = [(u.id, u.username) for u in users] + + form = AdminManageUsersForm() + form.user.choices = user_list + + if form.validate_on_submit(): + user = User.query.filter_by(id=form.user.data).first() + if user is None: + flash("User doesn't exist.", "error") + return redirect(url_for("admin.manage_users")) + + tasks = Task.query.filter_by(annotator_id=user.id).all() + for task in tasks: + for ann in Annotation.query.filter_by(task_id=task.id).all(): + db.session.delete(ann) + db.session.delete(task) + db.session.delete(user) + db.session.commit() + flash("User deleted successfully.", "success") + return redirect(url_for("admin.manage_users")) return render_template( - "admin/manage_users.html", title="Manage Users", users=users + "admin/manage_users.html", title="Manage Users", users=users, form=form ) diff --git a/app/templates/admin/manage_users.html b/app/templates/admin/manage_users.html index fcfc86c..1d385c1 100644 --- a/app/templates/admin/manage_users.html +++ b/app/templates/admin/manage_users.html @@ -2,6 +2,39 @@ {% block app_content %} <h1>Manage Users</h1> + +<div class="col-lg-3"> + <div class="row"> + <form class="form" action="" method="POST"> + {{ form.hidden_tag() }} + {{ form.user }} + {{ form.delete(hidden='true', id='form-submit') }} + <!-- Button trigger modal --> + <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteModal"> + Delete + </button> + </form> + </div> +</div> + +<!-- Modal --> +<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="deleteModalLabel">Delete Dataset</h5> + </div> + <div class="modal-body"> + You are about to delete the user <span id="user-name"></span> <b>and</b> all associated tasks and annotations. Are you sure? + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button> + <button type="button" class="btn btn-success success" id="modal-confirm">Confirm</button> + </div> + </div> + </div> +</div> + <br> <h1>User Overview</h1> <article class="overview"> @@ -27,4 +60,11 @@ </tr> </table> </article> + +<script> +var conf = document.getElementById("modal-confirm"); +conf.onclick = function() { + document.getElementById("form-submit").click(); +}; +</script> {% endblock %} |
