From 0c6faa8bb63cfbe3b82484d9ba485210d94b4fac Mon Sep 17 00:00:00 2001
From: yaemiku eParafia Dziękujemy za korzystanie z naszej aplikacji! Poniżej znajduje się lista odnośników do wszystkich zarejestrowanych z nami parafii. Klikając w przycisk zostaniecie państwo bezpośrednio przekierowani do aplikacji danej parafii Zapraszamy!
+ Zaloguj się
+ Zarejestruj się
+ Zapisz się na wizytę duszpasterską Zaloguj się Zarejestruj się Twoje zgłoszenie
+ Imię i nazwisko: {{ submission.name }}, Telefon: {{ submission.phone }}
+
+ Adres: {{ submission.street }} {{ submission.street_number }}{% if submission.apartement_number %}/{% endif %}{{ submission.apartement_number|default_if_none:'' }}
+
+
Zmień dane konta
+ + {% comment %} {% endcomment %} +{% endblock %} diff --git a/backend/tests.py b/backend/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/backend/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/views.py b/backend/views.py new file mode 100644 index 0000000..a488fd5 --- /dev/null +++ b/backend/views.py @@ -0,0 +1,266 @@ +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("KJ702)g{4FNR1;j+m=-N2yx&yUICA3y%XNB>YecYS4ip8?L7
zz#A-wUp(Qh$@Y;0W_;<5;LKOfA3mEEcX#VV?=cDr3M5L;yT-
zWt!4~du!xL(I6-C`)cHM;oREkJ
ztc078P&A?mUpg^G7*^#x7@oWQMqr^ivI6`gsW6-|;P1<;i&TBf9!=wAcez@;8e3S1
zB+X{$NRuATekL$WSrlLf4!AM!RLsmT5(c_gR^U=o^}yiKs#~+QwP60uOCY1OcWHRu
z?4mwT&*l?xWLKe8!eBaZ6>!k>^1l-kzoPgJVrKR?FNNEXyTf%xgpUoLFJV=VqIcCX
zHa)%XGxCf6fq_+^P{8!f+3kLXhOVwWFv4YJ4O&ib=SBreKp7CcB1%Y1d~0rwOqY;a
zSSZWZxS=kYLv?Y11>zL-*Vwmr9~l3do11HDkC==eEh0(10R>fUF}zkc|LB&xgw`Cm
zPYb<0|8c!q%+#YbXlcS(%BcGyBmuRdcE+NfGOTH@x%
z+a7%C*!#uRI!7(>*_4T)VF!bD?r8T;#8U^$+2+?Cj{yYkv^p}*)MC!BAXkcO|4VkP
zQ`(XtBHZIOC=Unb8(9mw+vtk*Ho&py*jV@J_SS{o2S|Y4ak#YNf1vp8{JO}$-PXb+
zn$kHIyt>NQKutUzWqOv5sbP#^u6aa#O2LYc$$$lYeij>V^4|M>z03it-C*IjK$B{Z
zcMPXD?>LNFU<@BU`c+hM`YY{AiBn^|6nb6A{nlkDi`W+ME>h+sJU8uBHLFEE$q$c%
zjPb3_A6>*Jy|aj1pMXI7UNCys@j)pP^gpq4XRNRr;zKXFuMG}WVX7VLzX!hW;0wRw
zxGD8gM2LVT_9EFiHI`zEbV+VWIn?{xX0?Fd4Fpg?y-WjH%quN@bJ3aXOR+WMS>
Q5Vq(Vpe7{3~AVD-&^oR}toba@>*oSTy*TYnn^89q)
z>iX$e_Zs~ZB=G&MsrpG2buF`&e?Gsq*lH1_SgM9Y-LVxk6>CQkdwtrm3df~M-vFC>
z3TQ=Pk+!xhodP(pXAEV{aBtpERT%Sl0cuzCf(tlh7haL;Ab1LVoJ=
pNavQ2R))33GyzSpNJ{sM)kj6`i;(4M@l*)Bn^!pz9RUrvkFI`_Yxx51YYcHxJnQ
zo2ig$4ztV2!&6R;3