kpsul/bds/views.py
2020-06-08 18:30:40 +02:00

73 lines
2.3 KiB
Python

from django.contrib import messages
from django.contrib.auth import get_user_model
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.utils.translation import gettext_lazy as _
from django.views.generic import TemplateView
from bds.autocomplete import bds_search
from bds.forms import BDSProfileForm, BDSUserForm
from bds.mixins import StaffRequiredMixin
User = get_user_model()
class AutocompleteView(StaffRequiredMixin, TemplateView):
template_name = "bds/search_results.html"
def get_context_data(self, *args, **kwargs):
ctx = super().get_context_data(*args, **kwargs)
if "q" not in self.request.GET:
raise Http404
q = self.request.GET["q"]
ctx["q"] = q
results = bds_search.search(q.split())
ctx.update(results)
ctx["total"] = sum((len(r) for r in results.values()))
return ctx
class Home(StaffRequiredMixin, TemplateView):
template_name = "bds/home.html"
class UserUpdateView(StaffRequiredMixin, TemplateView):
template_name = "bds/user_update.html"
def setup(self, *args, **kwargs):
super().setup(*args, **kwargs)
self.user = get_object_or_404(User, pk=self.kwargs["pk"])
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
form_data = self.request.POST if self.request.method == "POST" else None
profile = getattr(self.user, "bds", None)
ctx["user_form"] = BDSUserForm(prefix="user", intance=self.user, data=form_data)
ctx["profile_form"] = BDSProfileForm(
prefix="profile", instance=profile, data=form_data
)
return ctx
def post(self, *args, **kwargs):
ctx = self.get_context_data()
user_form = ctx["user_form"]
profile_form = ctx["profile_form"]
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.add_message(
self.request, messages.SUCCESS, _("Compte mis à jour avec succès !")
)
else:
messages.add_message(
self.request,
messages.ERROR,
_("Le formulaire de mise à jour du compte contient des erreurs."),
)
# Redirect here.
return HttpResponseRedirect("")