175 lines
5.1 KiB
Python
175 lines
5.1 KiB
Python
from smtplib import SMTPException
|
|
from django.urls import reverse_lazy
|
|
from django.shortcuts import get_object_or_404
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.views.generic.base import TemplateView
|
|
from django.views.generic.edit import (
|
|
CreateView,
|
|
UpdateView,
|
|
DeleteView,
|
|
)
|
|
from django.views.generic import FormView
|
|
import logging
|
|
from dashboard.mixins import DashboardView, Http403
|
|
from user.models import User, Institution
|
|
from admin.email import NotifyActivateUserByEmail
|
|
from admin.forms import CustomStatusLabelForm, CustomStatusLabelFormSet
|
|
from evidence.models import Annotation
|
|
|
|
logger = logging.getLogger('dhub')
|
|
|
|
|
|
class AdminView(DashboardView):
|
|
def get(self, *args, **kwargs):
|
|
response = super().get(*args, **kwargs)
|
|
if not self.request.user.is_admin:
|
|
raise Http403
|
|
|
|
return response
|
|
|
|
class PanelView(AdminView, TemplateView):
|
|
template_name = "admin_panel.html"
|
|
title = _("Admin")
|
|
breadcrumb = _("admin") + " /"
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
return context
|
|
|
|
|
|
class UsersView(AdminView, TemplateView):
|
|
template_name = "admin_users.html"
|
|
title = _("Users")
|
|
breadcrumb = _("admin / Users") + " /"
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context.update({
|
|
"users": User.objects.filter()
|
|
})
|
|
return context
|
|
|
|
|
|
class CreateUserView(AdminView, NotifyActivateUserByEmail, CreateView):
|
|
template_name = "user.html"
|
|
title = _("User")
|
|
breadcrumb = _("admin / User") + " /"
|
|
success_url = reverse_lazy('admin:users')
|
|
model = User
|
|
fields = (
|
|
"email",
|
|
"password",
|
|
"is_admin",
|
|
)
|
|
|
|
def form_valid(self, form):
|
|
form.instance.institution = self.request.user.institution
|
|
form.instance.set_password(form.instance.password)
|
|
response = super().form_valid(form)
|
|
|
|
try:
|
|
self.send_email(form.instance)
|
|
except SMTPException as e:
|
|
messages.error(self.request, e)
|
|
|
|
return response
|
|
|
|
|
|
class DeleteUserView(AdminView, DeleteView):
|
|
template_name = "delete_user.html"
|
|
title = _("Delete user")
|
|
breadcrumb = "admin / Delete user"
|
|
success_url = reverse_lazy('admin:users')
|
|
model = User
|
|
fields = (
|
|
"email",
|
|
"password",
|
|
"is_admin",
|
|
)
|
|
|
|
def form_valid(self, form):
|
|
response = super().form_valid(form)
|
|
return response
|
|
|
|
|
|
class EditUserView(AdminView, UpdateView):
|
|
template_name = "user.html"
|
|
title = _("Edit user")
|
|
breadcrumb = "admin / Edit user"
|
|
success_url = reverse_lazy('admin:users')
|
|
model = User
|
|
fields = (
|
|
"email",
|
|
"is_admin",
|
|
)
|
|
|
|
def get_form_kwargs(self):
|
|
pk = self.kwargs.get('pk')
|
|
self.object = get_object_or_404(self.model, pk=pk)
|
|
#self.object.set_password(self.object.password)
|
|
kwargs = super().get_form_kwargs()
|
|
return kwargs
|
|
|
|
|
|
class InstitutionView(AdminView, UpdateView):
|
|
template_name = "institution.html"
|
|
title = _("Edit institution")
|
|
section = "admin"
|
|
subtitle = _('Edit institution')
|
|
model = Institution
|
|
success_url = reverse_lazy('admin:panel')
|
|
fields = (
|
|
"name",
|
|
"logo",
|
|
"location",
|
|
"responsable_person",
|
|
"supervisor_person"
|
|
)
|
|
|
|
def get_form_kwargs(self):
|
|
self.object = self.request.user.institution
|
|
kwargs = super().get_form_kwargs()
|
|
return kwargs
|
|
|
|
|
|
|
|
class AddReservedAnnotationView(AdminView, FormView):
|
|
template_name = "reserved.html"
|
|
title = _("New Custom State Labels")
|
|
breadcrumb = "Admin / Custom State Labels (new name?)"
|
|
success_url = reverse_lazy('admin:panel')
|
|
model = Annotation
|
|
|
|
form_class = CustomStatusLabelForm
|
|
formset_class = CustomStatusLabelFormSet
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
if self.request.POST:
|
|
context['formset'] = self.formset_class(self.request.POST)
|
|
else:
|
|
context['formset'] = self.formset_class()
|
|
context['subtitle'] = _("Add Custom Status Label")
|
|
return context
|
|
|
|
def form_valid(self, form):
|
|
context = self.get_context_data()
|
|
formset = context['formset']
|
|
if formset.is_valid():
|
|
annotation_name = form.cleaned_data['annotation_name']
|
|
|
|
logger.info("Saving to db: " + annotation_name)
|
|
annotation = Annotation.objects.create(name=annotation_name)
|
|
for form in formset:
|
|
state = form.cleaned_data.get('annotation_state')
|
|
if state:
|
|
PossibleValue.objects.create(annotation=annotation, value=state)
|
|
|
|
logger.info("Saved to db: " + annotation_name)
|
|
self.success_message = _("Custom status label has been added.")
|
|
self.success_url = reverse_lazy('admin:panel')
|
|
return super().form_valid(form)
|
|
else:
|
|
logger.error("Formset is not valid")
|
|
logger.error(formset.errors)
|
|
return self.form_invalid(form) |