from django.shortcuts import render, redirect from django.urls import path from .models import Parish, Submission import requests # noqa: F401 from lxml import html # noqa: F401 from django.http import HttpResponse from django.views.generic import CreateView, DeleteView, UpdateView from authtools.forms import UserCreationForm from authtools.models import User from django.contrib.auth.views import LoginView, LogoutView from django.urls import reverse_lazy from django import forms # Create your views here. def favicon(request): return HttpResponse(None) def manifest(request, slug): return render( request, "parish/manifest.json", {"parish": Parish.objects.get(slug=slug)}, content_type="application/json" ) def index(request): parishes = Parish.objects.filter(visible=True) return render(request, "index.html", {"parishes": parishes}) def announcements(request, slug): p = Parish.objects.get(slug=slug) ldict = {} exec(p.announcements, globals(), ldict) return render( request, "parish/announcements.html", {"parish": p, "announcements": "is-active", "res": ldict.get("res", "")} ) def intentions(request, slug): p = Parish.objects.get(slug=slug) ldict = {} exec(p.intentions, globals(), ldict) return render( request, "parish/intentions.html", {"parish": p, "intentions": "is-active", "res": ldict.get("res", "")} ) def live(request, slug): p = Parish.objects.get(slug=slug) if not p.channel: return redirect("announcements", slug=slug) return render(request, "parish/live.html", {"parish": p, "live": "is-active"}) def visit(request, slug): p = Parish.objects.get(slug=slug) c = {"parish": p, "visit": "is-active"} if not p.submissions: return redirect("announcements", slug=slug) if not request.user.is_authenticated: return render(request, "parish/visit/auth.html", c) if not Submission.objects.filter(user=request.user).exists(): return VisitCreateView.as_view()(request, slug=slug) c["submission"] = Submission.objects.get(user=request.user) return VisitDeleteView.as_view()(request, slug=slug) class SubmissionForm(forms.ModelForm): def __init__(self, slug, *args, **kwargs): super(SubmissionForm, self).__init__(*args, **kwargs) streets = Parish.objects.get(slug=slug).streets choices = zip(streets, streets) self.fields["street"] = forms.ChoiceField(label="Ulica", choices=choices) class Meta: model = Submission fields = [ "name", "phone", "street", "street_number", "apartement_number", ] class VisitCreateView(CreateView): form_class = SubmissionForm template_name = "parish/visit/form.html" def form_valid(self, form): form.instance.parish = Parish.objects.get(slug=self.kwargs["slug"]) form.instance.user = self.request.user return super().form_valid(form) def get_initial(self): return {"name": self.request.user.name} def get_success_url(self): p = Parish.objects.get(slug=self.kwargs["slug"]) return reverse_lazy("visit", args=[p.slug]) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) p = Parish.objects.get(slug=self.kwargs["slug"]) context["parish"] = p context["visit"] = "is-active" return context def get_form(self, form_class=None): form = super().get_form(form_class) form.fields["name"].disabled = True return form def get_form_kwargs(self): return {**super().get_form_kwargs(), **self.kwargs} class VisitDeleteView(DeleteView): model = Submission template_name = "parish/visit/submitted.html" def get_object(self): return Submission.objects.get(user=self.request.user) def get_success_url(self): p = Parish.objects.get(slug=self.kwargs["slug"]) return reverse_lazy("visit", args=[p.slug]) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) p = Parish.objects.get(slug=self.kwargs["slug"]) context["parish"] = p context["visit"] = "is-active" return context class VisitLoginView(LoginView): redirect_authenticated_user = True template_name = "parish/visit/login.html" def get_success_url(self): p = Parish.objects.get(slug=self.kwargs["slug"]) return reverse_lazy("visit", args=[p.slug]) def dispatch(self, request, *args, **kwargs): p = Parish.objects.get(slug=kwargs["slug"]) if self.request.user.is_authenticated: return redirect("visit", slug=p.slug) if not p.submissions: return redirect("announcements", slug=p.slug) return super().dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) p = Parish.objects.get(slug=self.kwargs["slug"]) context["parish"] = p context["visit"] = "is-active" return context class VisitSignUpView(CreateView): form_class = UserCreationForm template_name = "parish/visit/signup.html" def get_success_url(self): p = Parish.objects.get(slug=self.kwargs["slug"]) return reverse_lazy("visit", args=[p.slug]) def dispatch(self, request, *args, **kwargs): p = Parish.objects.get(slug=kwargs["slug"]) if self.request.user.is_authenticated: return redirect("visit", slug=p.slug) if not p.submissions: return redirect("announcements", slug=p.slug) return super().dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) p = Parish.objects.get(slug=self.kwargs["slug"]) context["parish"] = p context["visit"] = "is-active" return context class UserUpdateForm(forms.ModelForm): class Meta: model = User fields = ["email", "name"] class VisitAccountView(UpdateView): form_class = UserUpdateForm template_name = "parish/visit/update.html" def get_object(self): return User.objects.get(id=self.request.user.id) def get_success_url(self): p = Parish.objects.get(slug=self.kwargs["slug"]) return reverse_lazy("visit", args=[p.slug]) def dispatch(self, request, *args, **kwargs): p = Parish.objects.get(slug=kwargs["slug"]) # if self.request.user.is_authenticated: # return redirect("visit", slug=p.slug) if not p.submissions: return redirect("announcements", slug=p.slug) return super().dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) p = Parish.objects.get(slug=self.kwargs["slug"]) context["parish"] = p context["visit"] = "is-active" return context def get_form(self, form_class=None): form = super().get_form(form_class) form.fields["name"].label = "ImiÄ™ i nazwisko" return form class VisitLogoutView(LogoutView): template_name = "parish/visit/auth.html" def get_next_page(self): p = Parish.objects.get(slug=self.kwargs["slug"]) return reverse_lazy("visit", args=[p.slug]) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) p = Parish.objects.get(slug=self.kwargs["slug"]) context["parish"] = p context["visit"] = "is-active" return context urlpatterns = [ path("", index, name="index"), path("favicon.ico", favicon), path("/", announcements, name="parish"), path("/ogloszenia/", announcements, name="announcements"), path("/intencje/", intentions, name="intentions"), path("/transmisja/", live, name="live"), path("/wizyta/", visit, name="visit"), path("/wizyta/logowanie/", VisitLoginView.as_view(), name="visit_login"), path("/wizyta/rejestracja/", VisitSignUpView.as_view(), name="visit_signup"), path("/wizyta/konto/", VisitAccountView.as_view(), name="visit_account"), path("/wizyta/wylogowanie/", VisitLogoutView.as_view(), name="visit_logout"), path("/manifest.json", manifest, name="manifest"), ]