mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-02-06 20:13:01 +00:00
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.core.exceptions import PermissionDenied
|
|
from django.db.models import Q
|
|
from django.http import FileResponse
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.views import View
|
|
from django.views.generic import CreateView, UpdateView, DetailView
|
|
from django_tables2 import SingleTableView
|
|
|
|
from tournament.views import AdminMixin
|
|
from .forms import SignUpForm, TFJMUserForm
|
|
from .models import TFJMUser, Document
|
|
from .tables import UserTable
|
|
|
|
|
|
class CreateUserView(CreateView):
|
|
model = TFJMUser
|
|
form_class = SignUpForm
|
|
template_name = "registration/signup.html"
|
|
|
|
|
|
class MyAccountView(LoginRequiredMixin, UpdateView):
|
|
model = TFJMUser
|
|
form_class = TFJMUserForm
|
|
template_name = "member/my_account.html"
|
|
|
|
def get_object(self, queryset=None):
|
|
return self.request.user
|
|
|
|
|
|
class UserDetailView(LoginRequiredMixin, DetailView):
|
|
model = TFJMUser
|
|
form_class = TFJMUserForm
|
|
context_object_name = "user"
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
if not request.user.admin \
|
|
and (self.object.team is not None and request.user not in self.object.team.tournament.organizers)\
|
|
and self.request.user != self.object:
|
|
raise PermissionDenied
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
|
|
context["title"] = str(self.object)
|
|
|
|
return context
|
|
|
|
|
|
class DocumentView(LoginRequiredMixin, View):
|
|
def get(self, request, *args, **kwargs):
|
|
doc = Document.objects.get(file=self.kwargs["file"])
|
|
|
|
if not request.user.admin:
|
|
raise PermissionDenied
|
|
|
|
return FileResponse(doc.file, content_type="application/pdf")
|
|
|
|
|
|
class ProfileListView(AdminMixin, SingleTableView):
|
|
model = TFJMUser
|
|
queryset = TFJMUser.objects.order_by("role", "last_name", "first_name")
|
|
table_class = UserTable
|
|
template_name = "member/profile_list.html"
|
|
extra_context = dict(title=_("All profiles"))
|
|
|
|
|
|
class OrphanedProfileListView(AdminMixin, SingleTableView):
|
|
model = TFJMUser
|
|
queryset = TFJMUser.objects.filter((Q(role="2coach") | Q(role="3participant")) & Q(team__isnull=True))\
|
|
.order_by("role", "last_name", "first_name")
|
|
table_class = UserTable
|
|
template_name = "member/profile_list.html"
|
|
extra_context = dict(title=_("Orphaned profiles"))
|
|
|
|
|
|
class OrganizersListView(AdminMixin, SingleTableView):
|
|
model = TFJMUser
|
|
queryset = TFJMUser.objects.filter(Q(role="0admin") | Q(role="1volunteer"))\
|
|
.order_by("role", "last_name", "first_name")
|
|
table_class = UserTable
|
|
template_name = "member/profile_list.html"
|
|
extra_context = dict(title=_("Organizers"))
|