diff --git a/ddcz/forms/dating.py b/ddcz/forms/dating.py new file mode 100644 index 00000000..62db5710 --- /dev/null +++ b/ddcz/forms/dating.py @@ -0,0 +1,30 @@ +from django import forms +from django.utils.html import escape +from ..models import Dating +from ..geo import CZECHOSLOVAK_REGIONS + + +class DatingForm(forms.ModelForm): + area = forms.ChoiceField( + choices=CZECHOSLOVAK_REGIONS, + label="Kraj", + required=True, + ) + + class Meta: + model = Dating + fields = [ + "name", + "email", + "group", + "phone", + "mobile", + "age", + "area", + "experience", + "text", + ] + + def clean_text(self): + text = self.cleaned_data["text"] + return escape(text) if text else "" diff --git a/ddcz/forms/market.py b/ddcz/forms/market.py index 19a02d7f..408eb6c8 100644 --- a/ddcz/forms/market.py +++ b/ddcz/forms/market.py @@ -1,37 +1,8 @@ from django import forms from django.core.validators import EmailValidator +from django.utils.html import escape from ddcz.models import Market - - -CZECH_REGIONS = [ - ("", "-- Vyberte kraj --"), - ("Celá ČR", "Celá ČR"), - ("Celá SR", "Celá SR"), - # Czech Republic - ("Praha", "Praha"), - ("Středočeský", "Středočeský"), - ("Jihočeský", "Jihočeský"), - ("Plzeňský", "Plzeňský"), - ("Karlovarský", "Karlovarský"), - ("Ústecký", "Ústecký"), - ("Liberecký", "Liberecký"), - ("Královéhradecký", "Královéhradecký"), - ("Pardubický", "Pardubický"), - ("Vysočina", "Vysočina"), - ("Jihomoravský", "Jihomoravský"), - ("Olomoucký", "Olomoucký"), - ("Zlínský", "Zlínský"), - ("Moravskoslezský", "Moravskoslezský"), - # Slovak Republic - ("Bratislavský", "Bratislavský"), - ("Trnavský", "Trnavský"), - ("Trenčianský", "Trenčianský"), - ("Nitrianský", "Nitrianský"), - ("Žilinský", "Žilinský"), - ("Banskobystrický", "Banskobystrický"), - ("Prešovský", "Prešovský"), - ("Košický", "Košický"), -] +from ddcz.geo import CZECHOSLOVAK_REGIONS class MarketForm(forms.ModelForm): @@ -42,7 +13,7 @@ class MarketForm(forms.ModelForm): ) area = forms.ChoiceField( - choices=CZECH_REGIONS, + choices=CZECHOSLOVAK_REGIONS, label="Kraj", required=True, ) @@ -59,3 +30,7 @@ class Meta: "mobile": "Mobil", "text": "Text inzerátu", } + + def clean_text(self): + text = self.cleaned_data["text"] + return escape(text) if text else "" diff --git a/ddcz/geo.py b/ddcz/geo.py new file mode 100644 index 00000000..b14ab28c --- /dev/null +++ b/ddcz/geo.py @@ -0,0 +1,29 @@ +CZECHOSLOVAK_REGIONS = [ + ("", "-- Vyberte kraj --"), + ("Celá ČR", "Celá ČR"), + ("Celá SR", "Celá SR"), + # Czech Republic + ("Praha", "Praha"), + ("Středočeský", "Středočeský"), + ("Jihočeský", "Jihočeský"), + ("Plzeňský", "Plzeňský"), + ("Karlovarský", "Karlovarský"), + ("Ústecký", "Ústecký"), + ("Liberecký", "Liberecký"), + ("Královéhradecký", "Královéhradecký"), + ("Pardubický", "Pardubický"), + ("Vysočina", "Vysočina"), + ("Jihomoravský", "Jihomoravský"), + ("Olomoucký", "Olomoucký"), + ("Zlínský", "Zlínský"), + ("Moravskoslezský", "Moravskoslezský"), + # Slovak Republic + ("Bratislavský", "Bratislavský"), + ("Trnavský", "Trnavský"), + ("Trenčianský", "Trenčianský"), + ("Nitrianský", "Nitrianský"), + ("Žilinský", "Žilinský"), + ("Banskobystrický", "Banskobystrický"), + ("Prešovský", "Prešovský"), + ("Košický", "Košický"), +] diff --git a/ddcz/models/used/social.py b/ddcz/models/used/social.py index e04cfbe0..dac0e251 100644 --- a/ddcz/models/used/social.py +++ b/ddcz/models/used/social.py @@ -10,10 +10,18 @@ ("daruji", "Daruji"), ) +DATING_SECTION_CHOICES = ( + ("hledam_hrace", "Hledám hráče"), + ("hledam_druzinu", "Hledám družinu"), + ("hledam_pj", "Hledám PJ"), + ("nabizim_druzinu", "Nabízím družinu"), + ("nabizim_pj", "Nabízím se jako PJ"), +) + class Dating(models.Model): name = MisencodedCharField( - max_length=40, blank=True, null=True, db_column="jmeno", verbose_name="Jméno" + max_length=40, db_column="jmeno", verbose_name="Jméno", default="Anonym" ) email = MisencodedCharField(max_length=40, blank=True, null=True) phone = MisencodedCharField( @@ -30,7 +38,7 @@ class Dating(models.Model): blank=True, null=True, db_column="vek", verbose_name="Věk" ) area = MisencodedCharField( - max_length=40, blank=True, null=True, db_column="okres", verbose_name="Okres" + max_length=40, blank=True, null=True, db_column="okres", verbose_name="Kraj" ) experience = MisencodedCharField( max_length=20, @@ -42,9 +50,12 @@ class Dating(models.Model): published = models.DateTimeField( blank=True, null=True, db_column="datum", verbose_name="Datum" ) - text = MisencodedTextField(blank=True, null=True, db_column="text") + text = MisencodedTextField(db_column="text", default="") group = MisencodedCharField( - max_length=20, blank=True, null=True, db_column="sekce", verbose_name="Sekce" + max_length=20, + choices=DATING_SECTION_CHOICES, + db_column="sekce", + verbose_name="Sekce", ) class Meta: diff --git a/ddcz/templates/dating/create.html b/ddcz/templates/dating/create.html new file mode 100644 index 00000000..6fd4ebeb --- /dev/null +++ b/ddcz/templates/dating/create.html @@ -0,0 +1,31 @@ +{% extends 'public.html' %} +{% load html %} + +{% block content %} +
+

Přidat inzerát do seznamky

+

Zadejte pouze údaje, které chcete zveřejnit.

+
+ {% csrf_token %} + + {% for field in form %} +
+ {{ field.label_tag }} + {{ field }} + {% if field.errors %} +
+ {{ field.errors }} +
+ {% endif %} + {% if field.help_text %} +
+ {{ field.help_text }} +
+ {% endif %} +
+ {% endfor %} + + +
+
+{% endblock %} diff --git a/ddcz/templates/dating/list.html b/ddcz/templates/dating/list.html index 6790a242..93131519 100644 --- a/ddcz/templates/dating/list.html +++ b/ddcz/templates/dating/list.html @@ -8,7 +8,7 @@

Seznamka

-

Seznamka slouží k seznamování hráčů a PJů. Pokud chcete něco prodat, nebo něco sháníte vkládejte inzeráty do inzerce.

+

Seznamka slouží k seznamování hráčů a PJů. Pokud chcete něco prodat, nebo něco sháníte vkládejte inzeráty do inzerce. Pro přidání inzerátu do seznamky použijte tento formulář.

{% pagination items %} {% for i in items %}
@@ -20,10 +20,10 @@

Seznamka

{% endif %}

- Sekce:{{ i.group | dating_group_map }} + Sekce:{{ i.get_group_display }}

- Okres:{{ i.area }} + Kraj:{{ i.area }}

{% if i.age %}

diff --git a/ddcz/templates/market/list.html b/ddcz/templates/market/list.html index 3ec036ef..7198636d 100644 --- a/ddcz/templates/market/list.html +++ b/ddcz/templates/market/list.html @@ -7,7 +7,7 @@

Inzerce

-

Zde můžete nabídnout k prodeji, nebo zde naopak můžete koupit, vyměnit či darovat vše co se týká fantasy či Dračího doupěte. Pro přidání inzerátu použijte tento formulář.

+

Zde můžete nabídnout k prodeji, nebo zde naopak můžete koupit, vyměnit či darovat vše co se týká fantasy či Dračího doupěte. Pro přidání inzerátu použijte tento formulář.

Prosíme vás, abyste inzeráty týkající se seznamování hráčů přidávali do Seznamky. Takové inzeráty budou z této rubriky mazány.

{% pagination items %}
diff --git a/ddcz/urls.py b/ddcz/urls.py index 75b4284e..874b2b07 100644 --- a/ddcz/urls.py +++ b/ddcz/urls.py @@ -147,9 +147,10 @@ path("aktuality/", news.list, name="news"), path("novinky/", news.newsfeed, name="newsfeed"), path("seznamka/", views.dating, name="dating"), + path("seznamka/pridat/", views.misc.dating_create, name="dating-create"), path("inzerce/", views.market, name="market"), - path("inzerce/pridej/", views.market_create, name="market_create"), - path("inzerce/smaz//", views.market_delete, name="market_delete"), + path("inzerce/pridej/", views.market_create, name="market-create"), + path("inzerce/smaz//", views.market_delete, name="market-delete"), path("linky/", views.links, name="links-list"), ### Discussions & Tavern path("forum/", views.phorum, name="phorum-list"), diff --git a/ddcz/views/misc.py b/ddcz/views/misc.py index 9f602d43..47b3257b 100644 --- a/ddcz/views/misc.py +++ b/ddcz/views/misc.py @@ -5,6 +5,7 @@ from django.http import Http404 from django.shortcuts import render, get_object_or_404, redirect from django.views.decorators.http import require_http_methods +from django.utils import timezone from ..models import ( Market, @@ -15,6 +16,7 @@ MARKET_SECTION_CHOICES, ) from ..forms.market import MarketForm +from ..forms.dating import DatingForm DEFAULT_LIST_SIZE = 10 @@ -148,3 +150,17 @@ def market_delete(request, id): if market_item.user_profile == request.ddcz_profile: market_item.delete() return redirect("ddcz:market") + + +def dating_create(request): + if request.method == "POST": + form = DatingForm(request.POST) + if form.is_valid(): + dating_item = form.save(commit=False) + dating_item.published = timezone.now() + form.save() + return redirect("ddcz:dating") + else: + form = DatingForm() + + return render(request, "dating/create.html", {"form": form})