aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/admin/forms.py4
-rw-r--r--app/admin/routes.py23
-rw-r--r--app/templates/admin/manage_users.html40
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 %}