Compare commits
1 Commits
master
...
kyu_change
| Author | SHA1 | Date | |
|---|---|---|---|
| 06785a3e49 |
@@ -1,42 +0,0 @@
|
|||||||
[project]
|
|
||||||
name = "kasu"
|
|
||||||
version = "4.230918"
|
|
||||||
description = "Homepage CMS for Kasu.at"
|
|
||||||
authors = [
|
|
||||||
{ name = "Christian Berg", email = "xeniac@xendynastie.at" }
|
|
||||||
]
|
|
||||||
requires-python = ">=3.8"
|
|
||||||
dependencies = ["beautifulsoup4",
|
|
||||||
"django < 5.0",
|
|
||||||
"django-appconf",
|
|
||||||
"django-ckeditor",
|
|
||||||
"django-contrib-comments",
|
|
||||||
"django-csp",
|
|
||||||
"django-compressor",
|
|
||||||
"django-extra-views",
|
|
||||||
"django-markdown",
|
|
||||||
"django-recaptcha",
|
|
||||||
"easy_thumbnails[svg]",
|
|
||||||
"icalendar",
|
|
||||||
"openpyxl",
|
|
||||||
"markdown",
|
|
||||||
"pillow",
|
|
||||||
"psycopg2-binary",
|
|
||||||
"PyJWT",
|
|
||||||
"pytz",
|
|
||||||
"requests",
|
|
||||||
"requests-oauthlib"
|
|
||||||
]
|
|
||||||
|
|
||||||
[project.optional-dependencies]
|
|
||||||
dev = [
|
|
||||||
"django-debug-toolbar",
|
|
||||||
"django-rosetta",
|
|
||||||
"sqlparse",
|
|
||||||
"pylint>=2.0",
|
|
||||||
"pylint-django"
|
|
||||||
]
|
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
|
||||||
where = ["src"]
|
|
||||||
|
|
||||||
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: kasu.content\n"
|
"Project-Id-Version: kasu.content\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-27 00:05+0200\n"
|
"POT-Creation-Date: 2023-08-07 20:38+0200\n"
|
||||||
"PO-Revision-Date: 2018-01-12 15:25+0105\n"
|
"PO-Revision-Date: 2018-01-12 15:25+0105\n"
|
||||||
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
|
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
|
||||||
"Language-Team: Deutsch <>\n"
|
"Language-Team: Deutsch <>\n"
|
||||||
@@ -20,7 +20,7 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 1.8.9\n"
|
"X-Generator: Poedit 1.8.9\n"
|
||||||
"X-Translated-Using: django-rosetta 0.7.14\n"
|
"X-Translated-Using: django-rosetta 0.7.14\n"
|
||||||
|
|
||||||
#: feeds.py:18
|
#: feeds.py:17 feeds.py:19
|
||||||
msgid "Current news from Kasu"
|
msgid "Current news from Kasu"
|
||||||
msgstr "Aktuelle Nachrichten von Kasu"
|
msgstr "Aktuelle Nachrichten von Kasu"
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ msgstr "Neueste Kommentare auf Kasu.at "
|
|||||||
msgid "Kasu - latest comments"
|
msgid "Kasu - latest comments"
|
||||||
msgstr "Kasu - neue Kommentare"
|
msgstr "Kasu - neue Kommentare"
|
||||||
|
|
||||||
#: forms.py:57 models.py:318
|
#: forms.py:57 models.py:320
|
||||||
msgid "Please upload a PDF-File to this PDF-Page."
|
msgid "Please upload a PDF-File to this PDF-Page."
|
||||||
msgstr "Bitte eine PDF Datei für diese PDF Seite hochladen."
|
msgstr "Bitte eine PDF Datei für diese PDF Seite hochladen."
|
||||||
|
|
||||||
@@ -44,15 +44,15 @@ msgstr "Schlagzeile"
|
|||||||
msgid "Content"
|
msgid "Content"
|
||||||
msgstr "Inhalt"
|
msgstr "Inhalt"
|
||||||
|
|
||||||
#: models.py:82 models.py:150 templates/content/article_detail.html:28
|
#: models.py:82 models.py:151 templates/content/article_detail.html:28
|
||||||
msgid "Category"
|
msgid "Category"
|
||||||
msgstr "Kategorie"
|
msgstr "Kategorie"
|
||||||
|
|
||||||
#: models.py:83 models.py:143
|
#: models.py:83 models.py:144
|
||||||
msgid "Image"
|
msgid "Image"
|
||||||
msgstr "Bild"
|
msgstr "Bild"
|
||||||
|
|
||||||
#: models.py:85 models.py:145
|
#: models.py:85 models.py:146
|
||||||
msgid "Slug"
|
msgid "Slug"
|
||||||
msgstr "Slug"
|
msgstr "Slug"
|
||||||
|
|
||||||
@@ -80,77 +80,77 @@ msgstr "Artikel"
|
|||||||
msgid "Articles"
|
msgid "Articles"
|
||||||
msgstr "Artikel"
|
msgstr "Artikel"
|
||||||
|
|
||||||
#: models.py:139 models.py:140
|
#: models.py:140 models.py:141
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
#: models.py:141 models.py:142
|
#: models.py:142 models.py:143
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Beschreibung"
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
#: models.py:151
|
#: models.py:152
|
||||||
msgid "Categories"
|
msgid "Categories"
|
||||||
msgstr "Kategorien"
|
msgstr "Kategorien"
|
||||||
|
|
||||||
#: models.py:182 models.py:188
|
#: models.py:184 models.py:190
|
||||||
msgid "The short name for the menu-entry of this page"
|
msgid "The short name for the menu-entry of this page"
|
||||||
msgstr "Ein kurzer Name für den Menüeintrag"
|
msgstr "Ein kurzer Name für den Menüeintrag"
|
||||||
|
|
||||||
#: models.py:193 models.py:198
|
#: models.py:195 models.py:200
|
||||||
msgid "The page title as you'd like it to be seen by the public"
|
msgid "The page title as you'd like it to be seen by the public"
|
||||||
msgstr "Der Seitentitel der öffentlich angezeigt werden soll"
|
msgstr "Der Seitentitel der öffentlich angezeigt werden soll"
|
||||||
|
|
||||||
#: models.py:200
|
#: models.py:202
|
||||||
msgid "slug"
|
msgid "slug"
|
||||||
msgstr "Slug"
|
msgstr "Slug"
|
||||||
|
|
||||||
#: models.py:203
|
#: models.py:205
|
||||||
msgid ""
|
msgid ""
|
||||||
"The name of the page as it will appear in URLs e.g http://domain.com/blog/"
|
"The name of the page as it will appear in URLs e.g http://domain.com/blog/"
|
||||||
"[my-slug]/"
|
"[my-slug]/"
|
||||||
msgstr "Wie die Seite in der URL aufscheint also http://domain.com/blog/[slug]"
|
msgstr "Wie die Seite in der URL aufscheint also http://domain.com/blog/[slug]"
|
||||||
|
|
||||||
#: models.py:212
|
#: models.py:214
|
||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr "Pfad"
|
msgstr "Pfad"
|
||||||
|
|
||||||
#: models.py:224
|
#: models.py:226
|
||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Position"
|
msgstr "Position"
|
||||||
|
|
||||||
#: models.py:229
|
#: models.py:231
|
||||||
msgid "status"
|
msgid "status"
|
||||||
msgstr "Status"
|
msgstr "Status"
|
||||||
|
|
||||||
#: models.py:232 models.py:234
|
#: models.py:234 models.py:236
|
||||||
msgid "search description"
|
msgid "search description"
|
||||||
msgstr "Beschreibung für Suchfunktion"
|
msgstr "Beschreibung für Suchfunktion"
|
||||||
|
|
||||||
#: models.py:237
|
#: models.py:239
|
||||||
msgid "content type"
|
msgid "content type"
|
||||||
msgstr "Inhaltstyp"
|
msgstr "Inhaltstyp"
|
||||||
|
|
||||||
#: models.py:242
|
#: models.py:244
|
||||||
msgid "enable comments"
|
msgid "enable comments"
|
||||||
msgstr "Kommentare möglich"
|
msgstr "Kommentare möglich"
|
||||||
|
|
||||||
#: models.py:247
|
#: models.py:249
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr "Vorlage"
|
msgstr "Vorlage"
|
||||||
|
|
||||||
#: models.py:255
|
#: models.py:257
|
||||||
msgid "first created at"
|
msgid "first created at"
|
||||||
msgstr "erstellt am"
|
msgstr "erstellt am"
|
||||||
|
|
||||||
#: models.py:260
|
#: models.py:262
|
||||||
msgid "latest updated at"
|
msgid "latest updated at"
|
||||||
msgstr "letzte Aktualisierung am"
|
msgstr "letzte Aktualisierung am"
|
||||||
|
|
||||||
#: models.py:331
|
#: models.py:333
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Seite"
|
msgstr "Seite"
|
||||||
|
|
||||||
#: models.py:332
|
#: models.py:334
|
||||||
msgid "Pages"
|
msgid "Pages"
|
||||||
msgstr "Seiten"
|
msgstr "Seiten"
|
||||||
|
|
||||||
@@ -206,7 +206,7 @@ msgstr "Erstellt am"
|
|||||||
msgid "share on"
|
msgid "share on"
|
||||||
msgstr "Teile auf"
|
msgstr "Teile auf"
|
||||||
|
|
||||||
#: templates/content/article_detail.html:48 views.py:159
|
#: templates/content/article_detail.html:48 views.py:160
|
||||||
msgid "Edit Article"
|
msgid "Edit Article"
|
||||||
msgstr "Artikel bearbeiten"
|
msgstr "Artikel bearbeiten"
|
||||||
|
|
||||||
@@ -251,16 +251,16 @@ msgstr "HTML spezifisch"
|
|||||||
msgid "This Category does not exist."
|
msgid "This Category does not exist."
|
||||||
msgstr "Diese Kategorie existiert nicht."
|
msgstr "Diese Kategorie existiert nicht."
|
||||||
|
|
||||||
#: views.py:160
|
#: views.py:161
|
||||||
msgid "Create Article"
|
msgid "Create Article"
|
||||||
msgstr "Artikel erstellen"
|
msgstr "Artikel erstellen"
|
||||||
|
|
||||||
#: views.py:240
|
#: views.py:241
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No Page found matching the Path %s"
|
msgid "No Page found matching the Path %s"
|
||||||
msgstr "Keine Seite unter dem Pfad %s gefunden"
|
msgstr "Keine Seite unter dem Pfad %s gefunden"
|
||||||
|
|
||||||
#: views.py:269
|
#: views.py:270
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No PDF Document found matching the Path %s"
|
msgid "No PDF Document found matching the Path %s"
|
||||||
msgstr "Kein PDF Dokument unter dem Pfad %s gefunden."
|
msgstr "Kein PDF Dokument unter dem Pfad %s gefunden."
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.db import models
|
|
||||||
import ckeditor.fields
|
import ckeditor.fields
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('content', '0005_auto_20161012_2236'),
|
('content', '0005_auto_20161012_2236'),
|
||||||
]
|
]
|
||||||
@@ -16,52 +15,68 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='content_de',
|
name='content_de',
|
||||||
field=ckeditor_uploader.fields.RichTextUploadingField(verbose_name='Inhalt'),
|
field=ckeditor_uploader.fields.RichTextUploadingField(
|
||||||
|
verbose_name='Inhalt'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='content_en',
|
name='content_en',
|
||||||
field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Content'),
|
field=ckeditor_uploader.fields.RichTextUploadingField(
|
||||||
|
blank=True, verbose_name='Content'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='headline_en',
|
name='headline_en',
|
||||||
field=models.CharField(blank=True, max_length=255, verbose_name='Headline'),
|
field=models.CharField(
|
||||||
|
blank=True, max_length=255, verbose_name='Headline'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='image',
|
name='image',
|
||||||
field=models.ImageField(blank=True, null=True, upload_to='news/', verbose_name='Bild'),
|
field=models.ImageField(blank=True, null=True, upload_to='news/',
|
||||||
|
verbose_name='Bild'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='slug',
|
name='slug',
|
||||||
field=models.SlugField(unique_for_month='date_created', verbose_name='Slug'),
|
field=models.SlugField(unique_for_month='date_created',
|
||||||
|
verbose_name='Slug'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='category',
|
model_name='category',
|
||||||
name='image',
|
name='image',
|
||||||
field=models.ImageField(blank=True, null=True, upload_to='news/categories/', verbose_name='Bild'),
|
field=models.ImageField(blank=True, null=True,
|
||||||
|
upload_to='news/categories/',
|
||||||
|
verbose_name='Bild'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='content_de',
|
name='content_de',
|
||||||
field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Inhalt'),
|
field=ckeditor_uploader.fields.RichTextUploadingField(
|
||||||
|
blank=True,
|
||||||
|
verbose_name='Inhalt'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='content_en',
|
name='content_en',
|
||||||
field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Content'),
|
field=ckeditor_uploader.fields.RichTextUploadingField(
|
||||||
|
blank=True,
|
||||||
|
verbose_name='Content'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='menu_name_de',
|
name='menu_name_de',
|
||||||
field=models.CharField(help_text='Ein kurzer Name für den Menüeintrag', max_length=255, verbose_name='Menü Name'),
|
field=models.CharField(
|
||||||
|
help_text='Ein kurzer Name für den Menüeintrag',
|
||||||
|
max_length=255, verbose_name='Menü Name'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='menu_name_en',
|
name='menu_name_en',
|
||||||
field=models.CharField(blank=True, help_text='Ein kurzer Name für den Menüeintrag', max_length=255, verbose_name='Menu Name'),
|
field=models.CharField(
|
||||||
|
blank=True,
|
||||||
|
help_text='Ein kurzer Name für den Menüeintrag',
|
||||||
|
max_length=255, verbose_name='Menu Name'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
@@ -76,16 +91,22 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.CharField(default='content/page.html', max_length=255, verbose_name='Vorlage'),
|
field=models.CharField(default='content/page.html', max_length=255,
|
||||||
|
verbose_name='Vorlage'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='title_de',
|
name='title_de',
|
||||||
field=models.CharField(help_text="The page title as you'd like it to be seen by the public", max_length=255, verbose_name='Titel'),
|
field=models.CharField(
|
||||||
|
help_text="The page title as you'd like it to be seen by the public",
|
||||||
|
max_length=255, verbose_name='Titel'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='title_en',
|
name='title_en',
|
||||||
field=models.CharField(blank=True, help_text="The page title as you'd like it to be seen by the public", max_length=255, verbose_name='Title'),
|
field=models.CharField(
|
||||||
|
blank=True,
|
||||||
|
help_text="The page title as you'd like it to be seen by the public",
|
||||||
|
max_length=255, verbose_name='Title'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import django.db.models.deletion
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('content', '0006_auto_20171115_0653'),
|
('content', '0006_auto_20171115_0653'),
|
||||||
]
|
]
|
||||||
@@ -17,11 +16,15 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='author',
|
name='author',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Autor'),
|
field=models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to=settings.AUTH_USER_MODEL, verbose_name='Autor'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='category',
|
name='category',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='content.Category', verbose_name='Kategorie'),
|
field=models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to='content.Category', verbose_name='Kategorie'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('content', '0007_auto_20171214_1215'),
|
('content', '0007_auto_20171214_1215'),
|
||||||
]
|
]
|
||||||
@@ -13,46 +12,63 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='article',
|
model_name='article',
|
||||||
name='status',
|
name='status',
|
||||||
field=models.SmallIntegerField(choices=[(-1, 'Rejected'), (0, 'Waiting...'), (1, 'Published')], default=1, verbose_name='Status'),
|
field=models.SmallIntegerField(
|
||||||
|
choices=[(-1, 'Rejected'), (0, 'Waiting...'), (1, 'Published')],
|
||||||
|
default=1, verbose_name='Status'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='date_created',
|
name='date_created',
|
||||||
field=models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='erstellt am'),
|
field=models.DateTimeField(
|
||||||
|
auto_now_add=True, db_index=True,
|
||||||
|
verbose_name='erstellt am'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='date_modified',
|
name='date_modified',
|
||||||
field=models.DateTimeField(auto_now=True, verbose_name='letzte Aktualisierung am'),
|
field=models.DateTimeField(auto_now=True,
|
||||||
|
verbose_name='letzte Aktualisierung am'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='description_de',
|
name='description_de',
|
||||||
field=models.TextField(blank=True, verbose_name='Beschreibung für Suchfunktion'),
|
field=models.TextField(blank=True,
|
||||||
|
verbose_name='Beschreibung für Suchfunktion'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='description_en',
|
name='description_en',
|
||||||
field=models.TextField(blank=True, verbose_name='Beschreibung für Suchfunktion'),
|
field=models.TextField(blank=True,
|
||||||
|
verbose_name='Beschreibung für Suchfunktion'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='slug',
|
name='slug',
|
||||||
field=models.SlugField(help_text='Wie die Seite in der URL aufscheint also http://domain.com/blog/[slug]', max_length=100, verbose_name='Slug'),
|
field=models.SlugField(
|
||||||
|
help_text='Wie die Seite in der URL aufscheint also ' +
|
||||||
|
'http://domain.com/blog/[slug]',
|
||||||
|
max_length=100, verbose_name='Slug'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='status',
|
name='status',
|
||||||
field=models.SmallIntegerField(choices=[(-1, 'Rejected'), (0, 'Waiting...'), (1, 'Published')], default=0, verbose_name='Status'),
|
field=models.SmallIntegerField(
|
||||||
|
choices=[(-1, 'Rejected'), (0, 'Waiting...'), (1, 'Published')],
|
||||||
|
default=0, verbose_name='Status'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='title_de',
|
name='title_de',
|
||||||
field=models.CharField(help_text='Der Seitentitel der öffentlich angezeigt werden soll', max_length=255, verbose_name='Titel'),
|
field=models.CharField(
|
||||||
|
help_text='Der Seitentitel der öffentlich angezeigt werden soll',
|
||||||
|
max_length=255, verbose_name='Titel'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='title_en',
|
name='title_en',
|
||||||
field=models.CharField(blank=True, help_text='Der Seitentitel der öffentlich angezeigt werden soll', max_length=255, verbose_name='Title'),
|
field=models.CharField(
|
||||||
|
blank=True,
|
||||||
|
help_text='Der Seitentitel der öffentlich angezeigt werden soll',
|
||||||
|
max_length=255, verbose_name='Title'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import django.db.models.deletion
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('content', '0009_alter_page_id'),
|
('content', '0009_alter_page_id'),
|
||||||
]
|
]
|
||||||
@@ -14,6 +13,8 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='parent',
|
name='parent',
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='subpages', to='content.page'),
|
field=models.ForeignKey(
|
||||||
|
blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
related_name='subpages', to='content.page'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('content', '0010_alter_page_parent'),
|
('content', '0010_alter_page_parent'),
|
||||||
]
|
]
|
||||||
@@ -13,6 +12,8 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='page',
|
model_name='page',
|
||||||
name='id',
|
name='id',
|
||||||
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
field=models.AutoField(
|
||||||
|
auto_created=True, primary_key=True, serialize=False,
|
||||||
|
verbose_name='ID'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,18 +5,21 @@ Created on 03.10.2011
|
|||||||
@author: christian
|
@author: christian
|
||||||
"""
|
"""
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
from . import views
|
||||||
from .views import ArticleArchiveIndex, ArticleForm, ArticleYearArchive, \
|
|
||||||
ArticleMonthArchive, ArticleDetail
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", ArticleArchiveIndex.as_view(), name='article-archive'),
|
path("", views.ArticleArchiveIndex.as_view(), name='article-archive'),
|
||||||
path('add/', ArticleForm.as_view(), name='add-article'),
|
path('add/', views.ArticleForm.as_view(), name='add-article'),
|
||||||
path('edit/<int:pk>/', ArticleForm.as_view(), name='edit-article'),
|
path('edit/<int:pk>/', views.ArticleForm.as_view(), name='edit-article'),
|
||||||
path('<int:year>/', ArticleYearArchive.as_view(), name='article-archive'),
|
path('<int:year>/', views.ArticleYearArchive.as_view(), name='article-archive'),
|
||||||
path('<int:year>/<int:month>/', ArticleMonthArchive.as_view(), name='article-archive'),
|
path('<int:year>/<int:month>/', views.ArticleMonthArchive.as_view(),
|
||||||
path('<int:year>/<int:month>/<slug:slug>/', ArticleDetail.as_view(), name='show-article'),
|
name='article-archive'),
|
||||||
path('<slug:category>/', ArticleArchiveIndex.as_view(), name='article-archive'),
|
path('<int:year>/<int:month>/<slug:slug>/', views.ArticleDetail.as_view(),
|
||||||
path('<slug:category>/<int:year>/', ArticleYearArchive.as_view(), name='article-archive'),
|
name='show-article'),
|
||||||
path('<slug:category>/<int:year>/<int:month>/', ArticleMonthArchive.as_view(), name='article-archive'),
|
path('<slug:category>/', views.ArticleArchiveIndex.as_view(),
|
||||||
|
name='article-archive'),
|
||||||
|
path('<slug:category>/<int:year>/', views.ArticleYearArchive.as_view(),
|
||||||
|
name='article-archive'),
|
||||||
|
path('<slug:category>/<int:year>/<int:month>/', views.ArticleMonthArchive.as_view(),
|
||||||
|
name='article-archive'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ def events_overview(request: HttpRequest) -> dict[str, Event]:
|
|||||||
|
|
||||||
For speed reasons everything will be cached for an hour. the following
|
For speed reasons everything will be cached for an hour. the following
|
||||||
variables will be added to the template context:
|
variables will be added to the template context:
|
||||||
* current_event: If an event is running at this moment, the corresponding event object.
|
* current_event: object for the currently running event.
|
||||||
* next_event: the next event that is upcoming.
|
* next_event: the next event that is upcoming.
|
||||||
* upcoming_events: the next 3 events that are upcoming.
|
* upcoming_events: the next 3 events that are upcoming.
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,14 @@ from . import views
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", views.EventGallery.as_view(), name='event-gallery'),
|
path("", views.EventGallery.as_view(), name='event-gallery'),
|
||||||
path('<int:event>/', views.EventPhotoList.as_view(), name='event-photo-list'),
|
path('<int:event>/', views.EventPhotoList.as_view(),
|
||||||
path('<int:event>/upload/', views.EventPhotoUpload.as_view(), name='event-photo-upload'),
|
name='event-photo-list'),
|
||||||
path('<int:event>/<int:pk>/', views.EventPhoto.as_view(), name='event-photo'),
|
path('<int:event>/upload/', views.EventPhotoUpload.as_view(),
|
||||||
path('delete/<int:pk>/', views.DeleteEventPhoto.as_view(), name='delete-event-photo'),
|
name='event-photo-upload'),
|
||||||
path('upload/', views.EventPhotoUpload.as_view(), name='event-photo-upload'),
|
path('<int:event>/<int:pk>/', views.EventPhoto.as_view(),
|
||||||
|
name='event-photo'),
|
||||||
|
path('delete/<int:pk>/', views.DeleteEventPhoto.as_view(),
|
||||||
|
name='delete-event-photo'),
|
||||||
|
path('upload/', views.EventPhotoUpload.as_view(),
|
||||||
|
name='event-photo-upload'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: kasu.events\n"
|
"Project-Id-Version: kasu.events\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-26 18:31+0200\n"
|
"POT-Creation-Date: 2023-08-07 20:38+0200\n"
|
||||||
"PO-Revision-Date: 2018-01-12 15:25+0105\n"
|
"PO-Revision-Date: 2018-01-12 15:25+0105\n"
|
||||||
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
|
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
|
||||||
"Language-Team: Kasu <verein@kasu.at>\n"
|
"Language-Team: Kasu <verein@kasu.at>\n"
|
||||||
@@ -19,7 +19,7 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 1.8.9\n"
|
"X-Generator: Poedit 1.8.9\n"
|
||||||
"X-Translated-Using: django-rosetta 0.7.14\n"
|
"X-Translated-Using: django-rosetta 0.7.14\n"
|
||||||
|
|
||||||
#: admin.py:14 models.py:82
|
#: admin.py:14 models.py:83
|
||||||
msgid "Event Series"
|
msgid "Event Series"
|
||||||
msgstr "Veranstaltungsreihen"
|
msgstr "Veranstaltungsreihen"
|
||||||
|
|
||||||
@@ -35,43 +35,42 @@ msgstr "Beginn"
|
|||||||
msgid "end"
|
msgid "end"
|
||||||
msgstr "Ende"
|
msgstr "Ende"
|
||||||
|
|
||||||
#: mixins.py:87
|
#: mixins.py:86
|
||||||
msgid "Event does not exist"
|
msgid "Event does not exist"
|
||||||
msgstr "Veranstaltung gibt es nicht"
|
msgstr "Veranstaltung gibt es nicht"
|
||||||
|
|
||||||
#: models.py:52 models.py:176 models.py:217
|
#: models.py:53 models.py:177 models.py:218
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
#: models.py:53 models.py:177 models.py:225
|
#: models.py:54 models.py:178 models.py:226
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Beschreibung"
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
#: models.py:55 templates/events/event_detail.html:29
|
#: models.py:56 templates/events/event_detail.html:29
|
||||||
#: templates/events/event_detail.html:87 templates/events/event_list.html:28
|
#: templates/events/event_detail.html:87 templates/events/event_list.html:28
|
||||||
#: templates/events/photo_upload.html:13
|
|
||||||
msgid "Start"
|
msgid "Start"
|
||||||
msgstr "Beginn"
|
msgstr "Beginn"
|
||||||
|
|
||||||
#: models.py:56 templates/events/event_detail.html:30
|
#: models.py:57 templates/events/event_detail.html:30
|
||||||
#: templates/events/event_detail.html:89
|
#: templates/events/event_detail.html:89
|
||||||
msgid "End"
|
msgid "End"
|
||||||
msgstr "Ende"
|
msgstr "Ende"
|
||||||
|
|
||||||
#: models.py:57 models.py:185 templates/events/event_detail.html:34
|
#: models.py:58 models.py:186 templates/events/event_detail.html:34
|
||||||
#: templates/events/event_detail.html:80 templates/events/event_detail.html:92
|
#: templates/events/event_detail.html:80 templates/events/event_detail.html:92
|
||||||
msgid "Homepage"
|
msgid "Homepage"
|
||||||
msgstr "Homepage"
|
msgstr "Homepage"
|
||||||
|
|
||||||
#: models.py:59 models.py:179 models.py:219
|
#: models.py:60 models.py:180 models.py:220
|
||||||
msgid "Image"
|
msgid "Image"
|
||||||
msgstr "Bild"
|
msgstr "Bild"
|
||||||
|
|
||||||
#: models.py:66
|
#: models.py:67
|
||||||
msgid "Mahjong Tournament"
|
msgid "Mahjong Tournament"
|
||||||
msgstr "Mahjong Turnier"
|
msgstr "Mahjong Turnier"
|
||||||
|
|
||||||
#: models.py:68
|
#: models.py:69
|
||||||
msgid ""
|
msgid ""
|
||||||
"This event is a tournament, different rules apply for the kyu "
|
"This event is a tournament, different rules apply for the kyu "
|
||||||
"ranking."
|
"ranking."
|
||||||
@@ -79,11 +78,11 @@ msgstr ""
|
|||||||
"Diese Veranstaltung ist ein Turnier, es gelten andere Regeln für das Kyu "
|
"Diese Veranstaltung ist ein Turnier, es gelten andere Regeln für das Kyu "
|
||||||
"Ranking."
|
"Ranking."
|
||||||
|
|
||||||
#: models.py:72
|
#: models.py:73
|
||||||
msgid "Mahjong Season"
|
msgid "Mahjong Season"
|
||||||
msgstr "Mahjong Saison"
|
msgstr "Mahjong Saison"
|
||||||
|
|
||||||
#: models.py:83
|
#: models.py:84
|
||||||
msgid ""
|
msgid ""
|
||||||
"Wenn dieser Event zu einer Veranstaltungsreihe gehört werden Ort, "
|
"Wenn dieser Event zu einer Veranstaltungsreihe gehört werden Ort, "
|
||||||
"Beschreibung, Bild und Homepage von dem hier angegebenen Event "
|
"Beschreibung, Bild und Homepage von dem hier angegebenen Event "
|
||||||
@@ -92,72 +91,72 @@ msgstr ""
|
|||||||
"Wenn dieser Termin zu einer Veranstaltungsreihe gehört werden Ort, "
|
"Wenn dieser Termin zu einer Veranstaltungsreihe gehört werden Ort, "
|
||||||
"Beschreibung, Bild und Homepage von dem hier angegebenen Event übernommen."
|
"Beschreibung, Bild und Homepage von dem hier angegebenen Event übernommen."
|
||||||
|
|
||||||
#: models.py:92 models.py:195 models.py:248
|
#: models.py:93 models.py:196 models.py:249
|
||||||
msgid "first created at"
|
msgid "first created at"
|
||||||
msgstr "erstellt am"
|
msgstr "erstellt am"
|
||||||
|
|
||||||
#: models.py:97 models.py:200 models.py:253
|
#: models.py:98 models.py:201 models.py:254
|
||||||
msgid "latest updated at"
|
msgid "latest updated at"
|
||||||
msgstr "letzte Aktualisierung am"
|
msgstr "letzte Aktualisierung am"
|
||||||
|
|
||||||
#: models.py:103
|
#: models.py:104
|
||||||
msgid "Event"
|
msgid "Event"
|
||||||
msgstr "Termin"
|
msgstr "Termin"
|
||||||
|
|
||||||
#: models.py:104
|
#: models.py:105
|
||||||
msgid "Events"
|
msgid "Events"
|
||||||
msgstr "Termine"
|
msgstr "Termine"
|
||||||
|
|
||||||
#: models.py:117
|
#: models.py:118
|
||||||
msgid "A event can't end before it had started"
|
msgid "A event can't end before it had started"
|
||||||
msgstr "Eine Veranstaltung kann nicht enden bevor sie begonnen hat"
|
msgstr "Eine Veranstaltung kann nicht enden bevor sie begonnen hat"
|
||||||
|
|
||||||
#: models.py:186
|
#: models.py:187
|
||||||
msgid "Postal Code"
|
msgid "Postal Code"
|
||||||
msgstr "Postleitzahl"
|
msgstr "Postleitzahl"
|
||||||
|
|
||||||
#: models.py:187
|
#: models.py:188
|
||||||
msgid "Street Address"
|
msgid "Street Address"
|
||||||
msgstr "Straße"
|
msgstr "Straße"
|
||||||
|
|
||||||
#: models.py:188
|
#: models.py:189
|
||||||
msgid "Locality"
|
msgid "Locality"
|
||||||
msgstr "Ort"
|
msgstr "Ort"
|
||||||
|
|
||||||
#: models.py:189
|
#: models.py:190
|
||||||
msgid "Country"
|
msgid "Country"
|
||||||
msgstr "Land"
|
msgstr "Land"
|
||||||
|
|
||||||
#: models.py:204
|
#: models.py:205
|
||||||
msgid "Venue"
|
msgid "Venue"
|
||||||
msgstr "Veranstaltungsort"
|
msgstr "Veranstaltungsort"
|
||||||
|
|
||||||
#: models.py:205
|
#: models.py:206
|
||||||
msgid "Venues"
|
msgid "Venues"
|
||||||
msgstr "Veranstaltungsorte"
|
msgstr "Veranstaltungsorte"
|
||||||
|
|
||||||
#: models.py:232
|
#: models.py:233
|
||||||
msgid "Startpage"
|
msgid "Startpage"
|
||||||
msgstr "Startseite"
|
msgstr "Startseite"
|
||||||
|
|
||||||
#: models.py:235
|
#: models.py:236
|
||||||
msgid "Display this Photo on the Startpage Teaser"
|
msgid "Display this Photo on the Startpage Teaser"
|
||||||
msgstr "Foto als Teaser auf der Startseite verwenden."
|
msgstr "Foto als Teaser auf der Startseite verwenden."
|
||||||
|
|
||||||
#: models.py:237
|
#: models.py:238
|
||||||
msgid "Published on"
|
msgid "Published on"
|
||||||
msgstr "Veröffentlicht am"
|
msgstr "Veröffentlicht am"
|
||||||
|
|
||||||
#: models.py:239
|
#: models.py:240
|
||||||
msgid "Number of views"
|
msgid "Number of views"
|
||||||
msgstr "Wie oft gesehen"
|
msgstr "Wie oft gesehen"
|
||||||
|
|
||||||
#: models.py:263 templates/events/event_archive.html:38
|
#: models.py:264 templates/events/event_archive.html:38
|
||||||
#: templates/events/event_list.html:18
|
#: templates/events/event_list.html:18
|
||||||
msgid "Event Image"
|
msgid "Event Image"
|
||||||
msgstr "Veranstaltungsbild"
|
msgstr "Veranstaltungsbild"
|
||||||
|
|
||||||
#: models.py:264
|
#: models.py:265
|
||||||
msgid "Event Images"
|
msgid "Event Images"
|
||||||
msgstr "Veranstaltungsbilder"
|
msgstr "Veranstaltungsbilder"
|
||||||
|
|
||||||
@@ -174,28 +173,25 @@ msgstr "Datum"
|
|||||||
msgid "Time"
|
msgid "Time"
|
||||||
msgstr "Zeit"
|
msgstr "Zeit"
|
||||||
|
|
||||||
#: templates/events/event_archive.html:49 templates/events/photo_upload.html:16
|
#: templates/events/event_archive.html:49
|
||||||
msgid "from"
|
msgid "from"
|
||||||
msgstr "von"
|
msgstr "von"
|
||||||
|
|
||||||
#: templates/events/event_archive.html:49 templates/events/photo_upload.html:16
|
#: templates/events/event_archive.html:49
|
||||||
msgid "to"
|
msgid "to"
|
||||||
msgstr "bis"
|
msgstr "bis"
|
||||||
|
|
||||||
#: templates/events/event_archive.html:57 templates/events/event_detail.html:31
|
#: templates/events/event_archive.html:57 templates/events/event_detail.html:31
|
||||||
#: templates/events/event_detail.html:72 templates/events/event_list.html:32
|
#: templates/events/event_detail.html:72 templates/events/event_list.html:32
|
||||||
#: templates/events/photo_upload.html:23
|
|
||||||
msgid "Location"
|
msgid "Location"
|
||||||
msgstr "Ort"
|
msgstr "Ort"
|
||||||
|
|
||||||
#: templates/events/event_archive.html:58 templates/events/event_list.html:35
|
#: templates/events/event_archive.html:58 templates/events/event_list.html:35
|
||||||
#: templates/events/photo_upload.html:25 templates/events/photo_upload.html:26
|
|
||||||
msgid "Comments"
|
msgid "Comments"
|
||||||
msgstr "Kommentare"
|
msgstr "Kommentare"
|
||||||
|
|
||||||
#: templates/events/event_archive.html:59 templates/events/event_detail.html:36
|
#: templates/events/event_archive.html:59 templates/events/event_detail.html:36
|
||||||
#: templates/events/event_detail.html:48 templates/events/photo_list.html:4
|
#: templates/events/event_detail.html:48 templates/events/photo_list.html:4
|
||||||
#: templates/events/photo_upload.html:28 templates/events/photo_upload.html:29
|
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Fotos"
|
msgstr "Fotos"
|
||||||
|
|
||||||
@@ -242,7 +238,7 @@ msgid "Show on Google Maps"
|
|||||||
msgstr "Auf Google Maps zeigen"
|
msgstr "Auf Google Maps zeigen"
|
||||||
|
|
||||||
#: templates/events/event_detail.html:127 templates/events/event_form.html:9
|
#: templates/events/event_detail.html:127 templates/events/event_form.html:9
|
||||||
#: views.py:63
|
#: views.py:61
|
||||||
msgid "Edit Event"
|
msgid "Edit Event"
|
||||||
msgstr "Termin bearbeiten"
|
msgstr "Termin bearbeiten"
|
||||||
|
|
||||||
@@ -250,7 +246,7 @@ msgstr "Termin bearbeiten"
|
|||||||
msgid "Add Dates"
|
msgid "Add Dates"
|
||||||
msgstr "Termine hinzufügen"
|
msgstr "Termine hinzufügen"
|
||||||
|
|
||||||
#: templates/events/event_form.html:9 templates/events/page.html:9 views.py:65
|
#: templates/events/event_form.html:9 templates/events/page.html:9 views.py:61
|
||||||
msgid "Add Event"
|
msgid "Add Event"
|
||||||
msgstr "Neuer Termin"
|
msgstr "Neuer Termin"
|
||||||
|
|
||||||
@@ -292,24 +288,23 @@ msgstr "Fotograf"
|
|||||||
msgid "share on"
|
msgid "share on"
|
||||||
msgstr "Teile auf"
|
msgstr "Teile auf"
|
||||||
|
|
||||||
#: templates/events/photo_detail.html:81
|
#: templates/events/photo_detail.html:78
|
||||||
msgid "download"
|
msgid "download"
|
||||||
msgstr "Herunterladen"
|
msgstr "Herunterladen"
|
||||||
|
|
||||||
#: templates/events/photo_detail.html:82
|
#: templates/events/photo_detail.html:79
|
||||||
msgid "Rotate counter clockwise"
|
msgid "Rotate counter clockwise"
|
||||||
msgstr "mit dem Uhrzeiger drehen"
|
msgstr "mit dem Uhrzeiger drehen"
|
||||||
|
|
||||||
#: templates/events/photo_detail.html:83
|
#: templates/events/photo_detail.html:80
|
||||||
msgid "Rotate clockwise"
|
msgid "Rotate clockwise"
|
||||||
msgstr "gegen den Uhrzeiger drehen"
|
msgstr "gegen den Uhrzeiger drehen"
|
||||||
|
|
||||||
#: templates/events/photo_detail.html:84
|
#: templates/events/photo_detail.html:81
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr "Speichern"
|
msgstr "Speichern"
|
||||||
|
|
||||||
#: templates/events/photo_list.html:36 templates/events/photo_upload.html:35
|
#: templates/events/photo_list.html:36 templates/events/photo_upload.html:13
|
||||||
#: templates/events/photo_upload.html:49
|
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Hochladen"
|
msgstr "Hochladen"
|
||||||
|
|
||||||
|
|||||||
@@ -29,18 +29,23 @@ class Migration(migrations.Migration):
|
|||||||
('image', models.ImageField(storage=utils.OverwriteStorage(
|
('image', models.ImageField(storage=utils.OverwriteStorage(
|
||||||
), upload_to=events.models.get_upload_path, null=True,
|
), upload_to=events.models.get_upload_path, null=True,
|
||||||
verbose_name='Bild', blank=True)),
|
verbose_name='Bild', blank=True)),
|
||||||
('is_tournament', models.BooleanField(default=False,
|
('is_tournament', models.BooleanField(
|
||||||
help_text='Diese Veranstaltung ist ein Turnier, es gelten andere Regeln f\xfcr das Kyu Ranking.',
|
default=False,
|
||||||
verbose_name='Turnier')),
|
help_text='Diese Veranstaltung ist ein Turnier, ' +
|
||||||
|
'es gelten andere Regeln f\xfcr das Kyu Ranking.',
|
||||||
|
verbose_name='Turnier')),
|
||||||
('photo_count', models.PositiveIntegerField(
|
('photo_count', models.PositiveIntegerField(
|
||||||
default=0, editable=False)),
|
default=0, editable=False)),
|
||||||
('event_series',
|
('event_series',
|
||||||
models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL,
|
models.ForeignKey(
|
||||||
editable=False, to='events.Event',
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
blank=True,
|
editable=False, to='events.Event',
|
||||||
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.',
|
blank=True,
|
||||||
null=True,
|
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe ' +
|
||||||
verbose_name='Veranstaltungsreihen')),
|
'geh\xf6rt werden Ort, Beschreibung, Bild und ' +
|
||||||
|
'Homepage von dem hier angegebenen Event \xfcbernommen.',
|
||||||
|
null=True,
|
||||||
|
verbose_name='Veranstaltungsreihen')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('-start', '-end'),
|
'ordering': ('-start', '-end'),
|
||||||
@@ -67,295 +72,258 @@ class Migration(migrations.Migration):
|
|||||||
max_length=127, verbose_name='Stra\xdfe')),
|
max_length=127, verbose_name='Stra\xdfe')),
|
||||||
('locality',
|
('locality',
|
||||||
models.CharField(max_length=127, verbose_name='Ort')),
|
models.CharField(max_length=127, verbose_name='Ort')),
|
||||||
('country', models.CharField(max_length=2, verbose_name='Land',
|
('country', models.CharField(
|
||||||
choices=[(b'GB',
|
max_length=2, verbose_name='Land',
|
||||||
'Vereinigtes K\xf6nigreich'),
|
choices=[(b'GB', 'Vereinigtes K\xf6nigreich'),
|
||||||
(b'AF', 'Afghanistan'),
|
(b'AF', 'Afghanistan'),
|
||||||
(b'AX', 'Aland Islands'),
|
(b'AX', 'Aland Islands'),
|
||||||
(b'AL', 'Albanien'),
|
(b'AL', 'Albanien'),
|
||||||
(b'DZ', 'Algerien'), (
|
(b'DZ', 'Algerien'),
|
||||||
b'AS',
|
(b'AS', 'Amerikanisch-Samoa'),
|
||||||
'Amerikanisch-Samoa'),
|
(b'AD', 'Andorra'),
|
||||||
(b'AD', 'Andorra'),
|
(b'AO', 'Angola'),
|
||||||
(b'AO', 'Angola'),
|
(b'AI', 'Anguilla'),
|
||||||
(b'AI', 'Anguilla'),
|
(b'AQ', 'Antarktika'),
|
||||||
(b'AQ', 'Antarktika'), (
|
(b'AG', 'Antigua und Barbuda'),
|
||||||
b'AG',
|
(b'AR', 'Argentinien'),
|
||||||
'Antigua und Barbuda'),
|
(b'AM', 'Armenien'),
|
||||||
(b'AR', 'Argentinien'),
|
(b'AW', 'Aruba'),
|
||||||
(b'AM', 'Armenien'),
|
(b'AU', 'Australien'),
|
||||||
(b'AW', 'Aruba'),
|
(b'AT', '\xd6sterreich'),
|
||||||
(b'AU', 'Australien'),
|
(b'AZ', 'Aserbaidschan'),
|
||||||
(b'AT', '\xd6sterreich'),
|
(b'BS', 'Bahamas'),
|
||||||
(b'AZ', 'Aserbaidschan'),
|
(b'BH', 'Bahrein'),
|
||||||
(b'BS', 'Bahamas'),
|
(b'BD', 'Bangladesch'),
|
||||||
(b'BH', 'Bahrein'),
|
(b'BB', 'Barbados'),
|
||||||
(b'BD', 'Bangladesch'),
|
(b'BY', 'Wei\xdfrussland'),
|
||||||
(b'BB', 'Barbados'), (
|
(b'BE', 'Belgien'),
|
||||||
b'BY',
|
(b'BZ', 'Belize'),
|
||||||
'Wei\xdfrussland'),
|
(b'BJ', 'Benin'),
|
||||||
(b'BE', 'Belgien'),
|
(b'BM', 'Bermuda'),
|
||||||
(b'BZ', 'Belize'),
|
(b'BT', 'Bhutan'),
|
||||||
(b'BJ', 'Benin'),
|
(b'BO', 'Bolivien'),
|
||||||
(b'BM', 'Bermuda'),
|
(b'BA', 'Bosnien und Herzegowina'),
|
||||||
(b'BT', 'Bhutan'),
|
(b'BW', 'Botswana'),
|
||||||
(b'BO', 'Bolivien'), (
|
(b'BV', 'Bouvet Island'),
|
||||||
b'BA',
|
(b'BR', 'Brasilien'),
|
||||||
'Bosnien und Herzegowina'),
|
(b'IO', 'British Indian Ocean Territory'),
|
||||||
(b'BW', 'Botswana'),
|
(b'BN', 'Brunei Darussalam'),
|
||||||
(b'BV', 'Bouvet Island'),
|
(b'BG', 'Bulgarien'),
|
||||||
(b'BR', 'Brasilien'), (
|
(b'BF', 'Burkina Faso'),
|
||||||
b'IO',
|
(b'BI', 'Burundi'),
|
||||||
'British Indian Ocean Territory'),
|
(b'KH', 'Kambodscha'),
|
||||||
(b'BN',
|
(b'CM', 'Kamerun'),
|
||||||
'Brunei Darussalam'),
|
(b'CA', 'Kanada'),
|
||||||
(b'BG', 'Bulgarien'),
|
(b'CV', 'Cape Verde'),
|
||||||
(b'BF', 'Burkina Faso'),
|
(b'KY', 'Cayman Islands'),
|
||||||
(b'BI', 'Burundi'),
|
(b'CF', 'Zentralafrikanische Republik'),
|
||||||
(b'KH', 'Kambodscha'),
|
(b'TD', 'Tschad'),
|
||||||
(b'CM', 'Kamerun'),
|
(b'CL', 'Chile'),
|
||||||
(b'CA', 'Kanada'),
|
(b'CN', 'China'),
|
||||||
(b'CV', 'Cape Verde'),
|
(b'CX', 'Christmas Island'),
|
||||||
(b'KY', 'Cayman Islands'),
|
(b'CC', 'Cocos (Keeling) Islands'),
|
||||||
(b'CF',
|
(b'CO', 'Kolumbien'),
|
||||||
'Zentralafrikanische Republik'),
|
(b'KM', 'Komoren'),
|
||||||
(b'TD', 'Tschad'),
|
(b'CG', 'Kongo'),
|
||||||
(b'CL', 'Chile'),
|
(b'CD', 'Kongo, Demokratische Republik'),
|
||||||
(b'CN', 'China'), (b'CX',
|
(b'CK', 'Cook-Inseln'),
|
||||||
'Christmas Island'),
|
(b'CR', 'Costa Rica'),
|
||||||
(b'CC',
|
(b'CI', "Cote d'Ivoire"),
|
||||||
'Cocos (Keeling) Islands'),
|
(b'HR', 'Kroatien'),
|
||||||
(b'CO', 'Kolumbien'),
|
(b'CU', 'Kuba'),
|
||||||
(b'KM', 'Komoren'),
|
(b'CY', 'Zypern'),
|
||||||
(b'CG', 'Kongo'), (b'CD',
|
(b'CZ', 'Tschechische Republik'),
|
||||||
'Kongo, Demokratische Republik'),
|
(b'DK', 'D\xe4nemark'),
|
||||||
(b'CK', 'Cook-Inseln'),
|
(b'DJ', 'Dschibuti'),
|
||||||
(b'CR', 'Costa Rica'),
|
(b'DM', 'Dominica'),
|
||||||
(b'CI', "Cote d'Ivoire"),
|
(b'DO', 'Dominikanische Republik'),
|
||||||
(b'HR', 'Kroatien'),
|
(b'EC', 'Ecuador'),
|
||||||
(b'CU', 'Kuba'),
|
(b'EG', '\xc4gypten'),
|
||||||
(b'CY', 'Zypern'), (b'CZ',
|
(b'SV', 'El Salvador'),
|
||||||
'Tschechische Republik'),
|
(b'GQ', '\xc4quatorial-Guinea'),
|
||||||
(b'DK', 'D\xe4nemark'),
|
(b'ER', 'Eritrea'),
|
||||||
(b'DJ', 'Dschibuti'),
|
(b'EE', 'Estland'),
|
||||||
(b'DM', 'Dominica'), (
|
(b'ET', '\xc4thiopien'),
|
||||||
b'DO',
|
(b'FK', 'Falklandinseln (Malvinas)'),
|
||||||
'Dominikanische Republik'),
|
(b'FO', 'F\xe4r\xf6er-Inseln'),
|
||||||
(b'EC', 'Ecuador'),
|
(b'FJ', 'Fidschi'),
|
||||||
(b'EG', '\xc4gypten'),
|
(b'FI', 'Finnland'),
|
||||||
(b'SV', 'El Salvador'), (
|
(b'FR', 'Frankreich'),
|
||||||
b'GQ',
|
(b'GF', 'Franz\xf6sisch-Guayana'),
|
||||||
'\xc4quatorial-Guinea'),
|
(b'PF', 'Franz\xf6sisch-Polynesien'),
|
||||||
(b'ER', 'Eritrea'),
|
(b'TF', 'Franz\xf6sisch S\xfcdliche Territorien'),
|
||||||
(b'EE', 'Estland'),
|
(b'GA', 'Gabun'),
|
||||||
(b'ET', '\xc4thiopien'), (
|
(b'GM', 'Gambia'),
|
||||||
b'FK',
|
(b'GE', 'Georgia'),
|
||||||
'Falklandinseln (Malvinas)'),
|
(b'DE', 'Deutschland'),
|
||||||
(b'FO',
|
(b'GH', 'Ghana'),
|
||||||
'F\xe4r\xf6er-Inseln'),
|
(b'GI', 'Gibraltar'),
|
||||||
(b'FJ', 'Fidschi'),
|
(b'GR', 'Griechenland'),
|
||||||
(b'FI', 'Finnland'),
|
(b'GL', 'Gr\xf6nland'),
|
||||||
(b'FR', 'Frankreich'), (
|
(b'GD', 'Grenada'),
|
||||||
b'GF',
|
(b'GP', 'Guadeloupe'),
|
||||||
'Franz\xf6sisch-Guayana'),
|
(b'GU', 'Guam'),
|
||||||
(b'PF',
|
(b'GT', 'Guatemala'),
|
||||||
'Franz\xf6sisch-Polynesien'),
|
(b'GG', 'Guernsey'),
|
||||||
(b'TF',
|
(b'GN', 'Guinea'),
|
||||||
'Franz\xf6sisch S\xfcdliche Territorien'),
|
(b'GW', 'Guinea-Bissau'),
|
||||||
(b'GA', 'Gabun'),
|
(b'GY', 'Guyana'),
|
||||||
(b'GM', 'Gambia'),
|
(b'HT', 'Haiti'),
|
||||||
(b'GE', 'Georgia'),
|
(b'HM', 'Heard und McDonald Inseln'),
|
||||||
(b'DE', 'Deutschland'),
|
(b'VA', 'Heiliger Stuhl (Vatikanstadt)'),
|
||||||
(b'GH', 'Ghana'),
|
(b'HN', 'Honduras'),
|
||||||
(b'GI', 'Gibraltar'),
|
(b'HK', 'Hongkong'),
|
||||||
(b'GR', 'Griechenland'),
|
(b'HU', 'Ungarn'),
|
||||||
(b'GL', 'Gr\xf6nland'),
|
(b'IS', 'Island'),
|
||||||
(b'GD', 'Grenada'),
|
(b'IN', 'Indien'),
|
||||||
(b'GP', 'Guadeloupe'),
|
(b'ID', 'Indonesien'),
|
||||||
(b'GU', 'Guam'),
|
(b'IR', 'Iran, Islamische Republik'),
|
||||||
(b'GT', 'Guatemala'),
|
(b'IQ', 'Irak'),
|
||||||
(b'GG', 'Guernsey'),
|
(b'IE', 'Irland'),
|
||||||
(b'GN', 'Guinea'),
|
(b'IM', 'Isle of Man'),
|
||||||
(b'GW', 'Guinea-Bissau'),
|
(b'IL', 'Israel'),
|
||||||
(b'GY', 'Guyana'),
|
(b'IT', 'Italien'),
|
||||||
(b'HT', 'Haiti'), (b'HM',
|
(b'JM', 'Jamaika'),
|
||||||
'Heard und McDonald Inseln'),
|
(b'JP', 'Japan'),
|
||||||
(b'VA',
|
(b'JE', 'Jersey'),
|
||||||
'Heiliger Stuhl (Vatikanstadt)'),
|
(b'JO', 'Jordan'),
|
||||||
(b'HN', 'Honduras'),
|
(b'KZ', 'Kasachstan'),
|
||||||
(b'HK', 'Hongkong'),
|
(b'KE', 'Kenia'),
|
||||||
(b'HU', 'Ungarn'),
|
(b'KI', 'Kiribati'),
|
||||||
(b'IS', 'Island'),
|
(b'KP', 'Korea, Demokratische Volksrepublik'),
|
||||||
(b'IN', 'Indien'),
|
(b'KR', 'Korea, Republik'),
|
||||||
(b'ID', 'Indonesien'), (
|
(b'KW', 'Kuwait'),
|
||||||
b'IR',
|
(b'KG', 'Kirgisistan'),
|
||||||
'Iran, Islamische Republik'),
|
(b'LA', 'Lao Demokratischen Volksrepublik'),
|
||||||
(b'IQ', 'Irak'),
|
(b'LV', 'Lettland'),
|
||||||
(b'IE', 'Irland'),
|
(b'LB', 'Libanon'),
|
||||||
(b'IM', 'Isle of Man'),
|
(b'LS', 'Lesotho'),
|
||||||
(b'IL', 'Israel'),
|
(b'LR', 'Liberia'),
|
||||||
(b'IT', 'Italien'),
|
(b'LY', 'Libyen'),
|
||||||
(b'JM', 'Jamaika'),
|
(b'LI', 'Liechtenstein'),
|
||||||
(b'JP', 'Japan'),
|
(b'LT', 'Litauen'),
|
||||||
(b'JE', 'Jersey'),
|
(b'LU', 'Luxemburg'),
|
||||||
(b'JO', 'Jordan'),
|
(b'MO', 'Macao'),
|
||||||
(b'KZ', 'Kasachstan'),
|
(b'MK',
|
||||||
(b'KE', 'Kenia'),
|
'Mazedonien, die ehemalige jugoslawische Republik'),
|
||||||
(b'KI', 'Kiribati'), (
|
(b'MG', 'Madagaskar'),
|
||||||
b'KP',
|
(b'MW', 'Malawi'),
|
||||||
'Korea, Demokratische Volksrepublik'),
|
(b'MY', 'Malaysia'),
|
||||||
(
|
(b'MV', 'Malediven'),
|
||||||
b'KR',
|
(b'ML', 'Mali'),
|
||||||
'Korea, Republik'),
|
(b'MT', 'Malta'),
|
||||||
(b'KW', 'Kuwait'),
|
(b'MH', 'Marshall Islands'),
|
||||||
(b'KG', 'Kirgisistan'), (
|
(b'MQ', 'Martinique'),
|
||||||
b'LA',
|
(b'MR', 'Mauretanien'),
|
||||||
'Lao Demokratischen Volksrepublik'),
|
(b'MU', 'Mauritius'),
|
||||||
(b'LV', 'Lettland'),
|
(b'YT', 'Mayotte'),
|
||||||
(b'LB', 'Libanon'), (
|
(b'MX', 'Mexiko'),
|
||||||
b'LS', 'Lesotho'),
|
(b'FM', 'Mikronesien, F\xf6derierte Staaten von'),
|
||||||
(b'LR', 'Liberia'),
|
(b'MD', 'Moldawien'),
|
||||||
(b'LY', 'Libyen'),
|
(b'MC', 'Monaco'),
|
||||||
(b'LI', 'Liechtenstein'),
|
(b'MN', 'Mongolei'),
|
||||||
(b'LT', 'Litauen'),
|
(b'ME', 'Montenegro'),
|
||||||
(b'LU', 'Luxemburg'),
|
(b'MS', 'Montserrat'),
|
||||||
(b'MO', 'Macao'), (b'MK',
|
(b'MA', 'Marokko'),
|
||||||
'Mazedonien, die ehemalige jugoslawische Republik'),
|
(b'MZ', 'Mosambik'),
|
||||||
(b'MG', 'Madagaskar'),
|
(b'MM', 'Myanmar'),
|
||||||
(b'MW', 'Malawi'),
|
(b'NA', 'Namibia'),
|
||||||
(b'MY', 'Malaysia'),
|
(b'NR', 'Nauru'),
|
||||||
(b'MV', 'Malediven'),
|
(b'NP', 'Nepal'),
|
||||||
(b'ML', 'Mali'),
|
(b'NL', 'Niederlande'),
|
||||||
(b'MT', 'Malta'), (b'MH',
|
(b'AN', 'Niederl\xe4ndische Antillen'),
|
||||||
'Marshall Islands'),
|
(b'NC', 'Neukaledonien'),
|
||||||
(b'MQ', 'Martinique'),
|
(b'NZ', 'New Zealand'),
|
||||||
(b'MR', 'Mauretanien'),
|
(b'NI', 'Nicaragua'),
|
||||||
(b'MU', 'Mauritius'),
|
(b'NE', 'Niger'),
|
||||||
(b'YT', 'Mayotte'),
|
(b'NG', 'Nigeria'),
|
||||||
(b'MX', 'Mexiko'), (b'FM',
|
(b'NU', 'Niue'),
|
||||||
'Mikronesien, F\xf6derierte Staaten von'),
|
(b'NF', 'Norfolk Island'),
|
||||||
(b'MD', 'Moldawien'),
|
(b'MP',
|
||||||
(b'MC', 'Monaco'),
|
'Northern Mariana Islands'),
|
||||||
(b'MN', 'Mongolei'),
|
(b'NO', 'Norwegen'),
|
||||||
(b'ME', 'Montenegro'),
|
(b'OM', 'Oman'),
|
||||||
(b'MS', 'Montserrat'),
|
(b'PK', 'Pakistan'),
|
||||||
(b'MA', 'Marokko'),
|
(b'PW', 'Palau'),
|
||||||
(b'MZ', 'Mosambik'),
|
(b'PS', 'Pal\xe4stinensische Autonomiegebiete'),
|
||||||
(b'MM', 'Myanmar'),
|
(b'PA', 'Panama'),
|
||||||
(b'NA', 'Namibia'),
|
(b'PG', 'Papua-Neuguinea'),
|
||||||
(b'NR', 'Nauru'),
|
(b'PY', 'Paraguay'),
|
||||||
(b'NP', 'Nepal'),
|
(b'PE', 'Peru'),
|
||||||
(b'NL', 'Niederlande'), (
|
(b'PH', 'Philippinen'),
|
||||||
b'AN',
|
(b'PN', 'Pitcairn'),
|
||||||
'Niederl\xe4ndische Antillen'),
|
(b'PL', 'Polen'),
|
||||||
(b'NC', 'Neukaledonien'),
|
(b'PT', 'Portugal'),
|
||||||
(b'NZ', 'New Zealand'),
|
(b'PR', 'Puerto Rico'),
|
||||||
(b'NI', 'Nicaragua'),
|
(b'QA', 'Katar'),
|
||||||
(b'NE', 'Niger'),
|
(b'RE', 'Wiedervereinigung'),
|
||||||
(b'NG', 'Nigeria'),
|
(b'RO', 'Rum\xe4nien'),
|
||||||
(b'NU', 'Niue'),
|
(b'RU', 'Russischen F\xf6deration'),
|
||||||
(b'NF', 'Norfolk Island'),
|
(b'RW', 'Ruanda'),
|
||||||
(b'MP',
|
(b'BL', 'Saint Barthelemy'),
|
||||||
'Northern Mariana Islands'),
|
(b'SH', 'Saint Helena'),
|
||||||
(b'NO', 'Norwegen'),
|
(b'KN', 'Saint Kitts und Nevis'),
|
||||||
(b'OM', 'Oman'),
|
(b'LC', 'Santa Lucia'),
|
||||||
(b'PK', 'Pakistan'),
|
(b'MF', 'Santa Martin'),
|
||||||
(b'PW', 'Palau'), (b'PS',
|
(b'PM', 'Saint Pierre und Miquelon'),
|
||||||
'Pal\xe4stinensische Autonomiegebiete'),
|
(b'VC', 'Saint Vincent und die Grenadinen'),
|
||||||
(b'PA', 'Panama'), (
|
(b'WS', 'Samoa'),
|
||||||
b'PG',
|
(b'SM', 'San Marino'),
|
||||||
'Papua-Neuguinea'),
|
(b'ST', 'Sao Tome und Principe'),
|
||||||
(b'PY', 'Paraguay'),
|
(b'SA', 'Saudi-Arabien'),
|
||||||
(b'PE', 'Peru'),
|
(b'SN', 'Senegal'),
|
||||||
(b'PH', 'Philippinen'),
|
(b'RS', 'Serbien'),
|
||||||
(b'PN', 'Pitcairn'),
|
(b'SC', 'Seychellen'),
|
||||||
(b'PL', 'Polen'),
|
(b'SL', 'Sierra Leone'),
|
||||||
(b'PT', 'Portugal'),
|
(b'SG', 'Singapur'),
|
||||||
(b'PR', 'Puerto Rico'),
|
(b'SK', 'Slowakei'),
|
||||||
(b'QA', 'Katar'), (b'RE',
|
(b'SI', 'Slowenien'),
|
||||||
'Wiedervereinigung'),
|
(b'SB', 'Salomon-Inseln'),
|
||||||
(b'RO', 'Rum\xe4nien'), (
|
(b'SO', 'Somalia'),
|
||||||
b'RU',
|
(b'ZA', 'S\xfcdafrika'),
|
||||||
'Russischen F\xf6deration'),
|
(b'GS',
|
||||||
(b'RW', 'Ruanda'), (b'BL',
|
'S\xfcdgeorgien und die S\xfcdlichen Sandwichinseln'),
|
||||||
'Saint Barthelemy'),
|
(b'ES', 'Spanien'),
|
||||||
(b'SH', 'Saint Helena'), (
|
(b'LK', 'Sri Lanka'),
|
||||||
b'KN',
|
(b'SD', 'Sudan'),
|
||||||
'Saint Kitts und Nevis'),
|
(b'SR', 'Suriname'),
|
||||||
(b'LC', 'Santa Lucia'),
|
(b'SJ', 'Svalbard und Jan Mayen'),
|
||||||
(b'MF', 'Santa Martin'), (
|
(b'SZ', 'Swaziland'),
|
||||||
b'PM',
|
(b'SE', 'Schweden'),
|
||||||
'Saint Pierre und Miquelon'),
|
(b'CH', 'Schweiz'),
|
||||||
(b'VC',
|
(b'SY', 'Arabische Republik Syrien'),
|
||||||
'Saint Vincent und die Grenadinen'),
|
(b'TW',
|
||||||
(b'WS', 'Samoa'),
|
'Taiwan, Province of China'),
|
||||||
(b'SM', 'San Marino'), (
|
(b'TJ', 'Tadschikistan'),
|
||||||
b'ST',
|
(b'TZ', 'Tansania, Vereinigte Republik'),
|
||||||
'Sao Tome und Principe'),
|
(b'TH', 'Thailand'),
|
||||||
(b'SA', 'Saudi-Arabien'),
|
(b'TL', 'Timor-Leste'),
|
||||||
(b'SN', 'Senegal'),
|
(b'TG', 'Togo'),
|
||||||
(b'RS', 'Serbien'),
|
(b'TK', 'Tokelau'),
|
||||||
(b'SC', 'Seychellen'),
|
(b'TO', 'Tonga'),
|
||||||
(b'SL', 'Sierra Leone'),
|
(b'TT', 'Trinidad und Tobago'),
|
||||||
(b'SG', 'Singapur'),
|
(b'TN', 'Tunesien'),
|
||||||
(b'SK', 'Slowakei'),
|
(b'TR', 'T\xfcrkei'),
|
||||||
(b'SI', 'Slowenien'),
|
(b'TM', 'Turkmenistan'),
|
||||||
(b'SB', 'Salomon-Inseln'),
|
(b'TC', 'Turks-und Caicosinseln'),
|
||||||
(b'SO', 'Somalia'),
|
(b'TV', 'Tuvalu'),
|
||||||
(b'ZA', 'S\xfcdafrika'), (
|
(b'UG', 'Uganda'),
|
||||||
b'GS',
|
(b'UA', 'Ukraine'),
|
||||||
'S\xfcdgeorgien und die S\xfcdlichen Sandwichinseln'),
|
(b'AE', 'Vereinigte Arabische Emirate'),
|
||||||
(b'ES', 'Spanien'),
|
(b'US', 'Vereinigte Staaten'),
|
||||||
(b'LK', 'Sri Lanka'),
|
(b'UM', 'United States Minor Outlying Islands'),
|
||||||
(b'SD', 'Sudan'),
|
(b'UY', 'Uruguay'),
|
||||||
(b'SR', 'Suriname'), (
|
(b'UZ', 'Usbekistan'),
|
||||||
b'SJ',
|
(b'VU', 'Vanuatu'),
|
||||||
'Svalbard und Jan Mayen'),
|
(b'VE', 'Venezuela'),
|
||||||
(b'SZ', 'Swaziland'),
|
(b'VN', 'Vietnam'),
|
||||||
(b'SE', 'Schweden'),
|
(b'VG', 'Virgin Islands, British'),
|
||||||
(b'CH', 'Schweiz'), (
|
(b'VI', 'Virgin Islands, US'),
|
||||||
b'SY',
|
(b'WF', 'Wallis und Futuna'),
|
||||||
'Arabische Republik Syrien'),
|
(b'EH', 'Westsahara'),
|
||||||
(b'TW',
|
(b'YE', 'Jemen'),
|
||||||
'Taiwan, Province of China'),
|
(b'ZM', 'Sambia'),
|
||||||
(b'TJ', 'Tadschikistan'),
|
(b'ZW', 'Zimbabwe')])),
|
||||||
(b'TZ',
|
|
||||||
'Tansania, Vereinigte Republik'),
|
|
||||||
(b'TH', 'Thailand'),
|
|
||||||
(b'TL', 'Timor-Leste'),
|
|
||||||
(b'TG', 'Togo'),
|
|
||||||
(b'TK', 'Tokelau'),
|
|
||||||
(b'TO', 'Tonga'), (b'TT',
|
|
||||||
'Trinidad und Tobago'),
|
|
||||||
(b'TN', 'Tunesien'),
|
|
||||||
(b'TR', 'T\xfcrkei'),
|
|
||||||
(b'TM', 'Turkmenistan'), (
|
|
||||||
b'TC',
|
|
||||||
'Turks-und Caicosinseln'),
|
|
||||||
(b'TV', 'Tuvalu'),
|
|
||||||
(b'UG', 'Uganda'),
|
|
||||||
(b'UA', 'Ukraine'), (
|
|
||||||
b'AE',
|
|
||||||
'Vereinigte Arabische Emirate'),
|
|
||||||
(b'US',
|
|
||||||
'Vereinigte Staaten'), (
|
|
||||||
b'UM',
|
|
||||||
'United States Minor Outlying Islands'),
|
|
||||||
(b'UY', 'Uruguay'),
|
|
||||||
(b'UZ', 'Usbekistan'),
|
|
||||||
(b'VU', 'Vanuatu'),
|
|
||||||
(b'VE', 'Venezuela'),
|
|
||||||
(b'VN', 'Vietnam'), (
|
|
||||||
b'VG',
|
|
||||||
'Virgin Islands, British'),
|
|
||||||
(b'VI',
|
|
||||||
'Virgin Islands, US'), (
|
|
||||||
b'WF',
|
|
||||||
'Wallis und Futuna'),
|
|
||||||
(b'EH', 'Westsahara'),
|
|
||||||
(b'YE', 'Jemen'),
|
|
||||||
(b'ZM', 'Sambia'),
|
|
||||||
(b'ZW', 'Zimbabwe')])),
|
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Veranstaltungsort',
|
'verbose_name': 'Veranstaltungsort',
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.db import models, migrations
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('events', '0001_initial'),
|
('events', '0001_initial'),
|
||||||
]
|
]
|
||||||
@@ -25,6 +24,9 @@ class Migration(migrations.Migration):
|
|||||||
model_name='event',
|
model_name='event',
|
||||||
name='mahjong_tournament',
|
name='mahjong_tournament',
|
||||||
field=models.BooleanField(
|
field=models.BooleanField(
|
||||||
default=False, help_text='Diese Veranstaltung ist ein Turnier, es gelten andere Regeln f\xfcr das Kyu Ranking.', verbose_name='Mahjong Tournament'),
|
default=False,
|
||||||
|
help_text='Diese Veranstaltung ist ein Turnier, ' +
|
||||||
|
'es gelten andere Regeln f\xfcr das Kyu Ranking.',
|
||||||
|
verbose_name='Mahjong Tournament'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.db import models, migrations
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('events', '0002_auto_20150818_2139'),
|
('events', '0002_auto_20150818_2139'),
|
||||||
]
|
]
|
||||||
@@ -15,6 +14,9 @@ class Migration(migrations.Migration):
|
|||||||
model_name='event',
|
model_name='event',
|
||||||
name='mahjong_tournament',
|
name='mahjong_tournament',
|
||||||
field=models.BooleanField(
|
field=models.BooleanField(
|
||||||
default=False, help_text='Diese Veranstaltung ist ein Turnier, es gelten andere Regeln f\xfcr das Kyu Ranking.', verbose_name='Mahjong Turnier'),
|
default=False,
|
||||||
|
help_text='Diese Veranstaltung ist ein Turnier, ' +
|
||||||
|
'es gelten andere Regeln f\xfcr das Kyu Ranking.',
|
||||||
|
verbose_name='Mahjong Turnier'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -32,14 +32,16 @@ class Migration(migrations.Migration):
|
|||||||
('description', models.TextField(max_length=300,
|
('description', models.TextField(max_length=300,
|
||||||
verbose_name='Beschreibung',
|
verbose_name='Beschreibung',
|
||||||
blank=True)),
|
blank=True)),
|
||||||
('on_startpage', models.BooleanField(default=False,
|
('on_startpage', models.BooleanField(
|
||||||
help_text='Display this Photo on the Startpage Teaser',
|
default=False,
|
||||||
verbose_name='Startpage')),
|
help_text='Display this Photo on the Startpage Teaser',
|
||||||
|
verbose_name='Startpage')),
|
||||||
('created_date',
|
('created_date',
|
||||||
models.DateTimeField(verbose_name='Published on')),
|
models.DateTimeField(verbose_name='Published on')),
|
||||||
('views', models.PositiveIntegerField(default=0,
|
('views', models.PositiveIntegerField(
|
||||||
verbose_name='Number of views',
|
default=0,
|
||||||
editable=False)),
|
verbose_name='Number of views',
|
||||||
|
editable=False)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['created_date'],
|
'ordering': ['created_date'],
|
||||||
@@ -67,7 +69,9 @@ class Migration(migrations.Migration):
|
|||||||
field=models.ForeignKey(
|
field=models.ForeignKey(
|
||||||
on_delete=django.db.models.deletion.SET_NULL, blank=True,
|
on_delete=django.db.models.deletion.SET_NULL, blank=True,
|
||||||
to='events.Event',
|
to='events.Event',
|
||||||
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.',
|
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt ' +
|
||||||
|
'werden Ort, Beschreibung, Bild und Homepage von dem hier ' +
|
||||||
|
'angegebenen Event \xfcbernommen.',
|
||||||
null=True, verbose_name='Veranstaltungsreihen'),
|
null=True, verbose_name='Veranstaltungsreihen'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.db import models, migrations
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('events', '0004_auto_20150901_2204'),
|
('events', '0004_auto_20150901_2204'),
|
||||||
]
|
]
|
||||||
@@ -15,6 +14,7 @@ class Migration(migrations.Migration):
|
|||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='on_startpage',
|
name='on_startpage',
|
||||||
field=models.BooleanField(
|
field=models.BooleanField(
|
||||||
default=False, help_text='Display this Photo on the Startpage Teaser', db_index=True, verbose_name='Startpage'),
|
default=False, help_text='Display this Photo on the Startpage Teaser',
|
||||||
|
db_index=True, verbose_name='Startpage'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('events', '0005_auto_20150907_2021'),
|
('events', '0005_auto_20150907_2021'),
|
||||||
]
|
]
|
||||||
@@ -14,7 +13,8 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterModelOptions(
|
migrations.AlterModelOptions(
|
||||||
name='photo',
|
name='photo',
|
||||||
options={'ordering': ['created_date'], 'get_latest_by': 'created_date',
|
options={'ordering': ['created_date'], 'get_latest_by': 'created_date',
|
||||||
'verbose_name': 'Veranstaltungsbild', 'verbose_name_plural': 'Veranstaltungsbilder'},
|
'verbose_name': 'Veranstaltungsbild',
|
||||||
|
'verbose_name_plural': 'Veranstaltungsbilder'},
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='event',
|
model_name='event',
|
||||||
@@ -31,7 +31,9 @@ class Migration(migrations.Migration):
|
|||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='on_startpage',
|
name='on_startpage',
|
||||||
field=models.BooleanField(
|
field=models.BooleanField(
|
||||||
default=False, help_text='Foto als Teaser auf der Startseite verwenden.', db_index=True, verbose_name='Startseite'),
|
default=False,
|
||||||
|
help_text='Foto als Teaser auf der Startseite verwenden.',
|
||||||
|
db_index=True, verbose_name='Startseite'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='photo',
|
model_name='photo',
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from datetime import timezone
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('events', '0006_auto_20160916_1800'),
|
('events', '0006_auto_20160916_1800'),
|
||||||
]
|
]
|
||||||
@@ -17,39 +16,45 @@ class Migration(migrations.Migration):
|
|||||||
model_name='event',
|
model_name='event',
|
||||||
name='date_created',
|
name='date_created',
|
||||||
field=models.DateTimeField(
|
field=models.DateTimeField(
|
||||||
auto_now_add=True, null=True, verbose_name='first created at', db_index=True),
|
auto_now_add=True, null=True, verbose_name='first created at',
|
||||||
|
db_index=True),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='event',
|
model_name='event',
|
||||||
name='date_modified',
|
name='date_modified',
|
||||||
field=models.DateTimeField(default=datetime.datetime(
|
field=models.DateTimeField(default=datetime.datetime(
|
||||||
2016, 10, 12, 20, 24, 39, 910492, tzinfo=timezone.utc), verbose_name='latest updated at', auto_now=True),
|
2016, 10, 12, 20, 24, 39, 910492, tzinfo=timezone.utc),
|
||||||
|
verbose_name='latest updated at', auto_now=True),
|
||||||
preserve_default=False,
|
preserve_default=False,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='location',
|
model_name='location',
|
||||||
name='date_created',
|
name='date_created',
|
||||||
field=models.DateTimeField(
|
field=models.DateTimeField(
|
||||||
auto_now_add=True, null=True, verbose_name='first created at', db_index=True),
|
auto_now_add=True, null=True, verbose_name='first created at',
|
||||||
|
db_index=True),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='location',
|
model_name='location',
|
||||||
name='date_modified',
|
name='date_modified',
|
||||||
field=models.DateTimeField(default=datetime.datetime(
|
field=models.DateTimeField(default=datetime.datetime(
|
||||||
2016, 10, 12, 20, 24, 44, 566305, tzinfo=timezone.utc), verbose_name='latest updated at', auto_now=True),
|
2016, 10, 12, 20, 24, 44, 566305, tzinfo=timezone.utc),
|
||||||
|
verbose_name='latest updated at', auto_now=True),
|
||||||
preserve_default=False,
|
preserve_default=False,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='date_created',
|
name='date_created',
|
||||||
field=models.DateTimeField(
|
field=models.DateTimeField(
|
||||||
auto_now_add=True, null=True, verbose_name='first created at', db_index=True),
|
auto_now_add=True, null=True, verbose_name='first created at',
|
||||||
|
db_index=True),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='date_modified',
|
name='date_modified',
|
||||||
field=models.DateTimeField(default=datetime.datetime(
|
field=models.DateTimeField(default=datetime.datetime(
|
||||||
2016, 10, 12, 20, 24, 50, 509970, tzinfo=timezone.utc), verbose_name='latest updated at', auto_now=True),
|
2016, 10, 12, 20, 24, 50, 509970, tzinfo=timezone.utc),
|
||||||
|
verbose_name='latest updated at', auto_now=True),
|
||||||
preserve_default=False,
|
preserve_default=False,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -8,7 +8,6 @@ import django.db.models.deletion
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('events', '0008_auto_20171115_0653'),
|
('events', '0008_auto_20171115_0653'),
|
||||||
]
|
]
|
||||||
@@ -17,16 +16,19 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='event',
|
model_name='event',
|
||||||
name='location',
|
name='location',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='events.Location'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to='events.Location'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='event',
|
name='event',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='events.Event'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to='events.Event'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='photographer',
|
name='photographer',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to=settings.AUTH_USER_MODEL),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -33,7 +33,8 @@ class EventDetailMixin(object):
|
|||||||
event = None
|
event = None
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
"""Add this event or the related event of the given object to the template context.
|
"""Adds this or the related event of the given object to the
|
||||||
|
template context.
|
||||||
|
|
||||||
:return: TemplateContext object"""
|
:return: TemplateContext object"""
|
||||||
context = super(EventDetailMixin, self).get_context_data(**kwargs)
|
context = super(EventDetailMixin, self).get_context_data(**kwargs)
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ class Event(models.Model):
|
|||||||
try:
|
try:
|
||||||
return "%(name)s (%(date)s)" % {'name': self.name,
|
return "%(name)s (%(date)s)" % {'name': self.name,
|
||||||
'date': self.start.date()}
|
'date': self.start.date()}
|
||||||
except:
|
except AttributeError:
|
||||||
return "New Event Model"
|
return "New Event Model"
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
@@ -165,7 +165,7 @@ class Event(models.Model):
|
|||||||
self.location = master_event.location
|
self.location = master_event.location
|
||||||
self.url = master_event.url
|
self.url = master_event.url
|
||||||
self.image = self.image or master_event.image
|
self.image = self.image or master_event.image
|
||||||
self.photo_count = self.photo_set.count() if self.pk else 0
|
self.photo_count = self.photo_set.count()
|
||||||
super(Event, self).save(**kwargs)
|
super(Event, self).save(**kwargs)
|
||||||
|
|
||||||
# Update the Hanchans if necessary:
|
# Update the Hanchans if necessary:
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from kasu.sitemaps import GenericSitemap
|
from kasu.sitemaps import GenericSitemap
|
||||||
from django.utils import timezone
|
|
||||||
from .models import Event
|
from .models import Event
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,15 @@ from . import views
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", RedirectView.as_view(url='/events/upcoming/', permanent=True)),
|
path("", RedirectView.as_view(url='/events/upcoming/', permanent=True)),
|
||||||
path('<int:year>/', views.EventArchiveYear.as_view(), name='event-archive'),
|
path('<int:year>/', views.EventArchiveYear.as_view(), name='event-archive'),
|
||||||
path('<int:year>/<int:month>/', views.EventArchiveMonth.as_view(), name='event-archive'),
|
path('<int:year>/<int:month>/', views.EventArchiveMonth.as_view(),
|
||||||
path('<int:year>/<int:month>/<int:pk>/', views.EventDetail.as_view(), name='event-detail'),
|
name='event-archive'),
|
||||||
path('<int:year>/<int:month>/<int:pk>/add_dates/', views.EventSeriesForm.as_view(), name='event-series-form'),
|
path('<int:year>/<int:month>/<int:pk>/', views.EventDetail.as_view(),
|
||||||
path('<int:year>/<int:month>/<int:pk>/edit/', views.EventForm.as_view(), name='event-form'),
|
name='event-detail'),
|
||||||
|
path('<int:year>/<int:month>/<int:pk>/add_dates/',
|
||||||
|
views.EventSeriesForm.as_view(),
|
||||||
|
name='event-series-form'),
|
||||||
|
path('<int:year>/<int:month>/<int:pk>/edit/', views.EventForm.as_view(),
|
||||||
|
name='event-form'),
|
||||||
path('add/', views.EventForm.as_view(), name='event-form'),
|
path('add/', views.EventForm.as_view(), name='event-form'),
|
||||||
path('archive/', views.EventArchiveIndex.as_view(), name='event-archive'),
|
path('archive/', views.EventArchiveIndex.as_view(), name='event-archive'),
|
||||||
path('upcoming/', views.UpcomingEvents.as_view(), name='upcoming-events'),
|
path('upcoming/', views.UpcomingEvents.as_view(), name='upcoming-events'),
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ from datetime import timedelta
|
|||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.db.models import Q
|
|
||||||
from django.http import Http404
|
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import redirect, get_object_or_404
|
from django.shortcuts import redirect, get_object_or_404
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@@ -56,7 +54,8 @@ class EventForm(PermissionRequiredMixin, mixins.EventDetailMixin,
|
|||||||
permission_required = 'events.add_event'
|
permission_required = 'events.add_event'
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
"""set the title to add or edit Event, depending on the fact if an event ID was given."""
|
"""sets the title to add or edit Event,
|
||||||
|
depending on the fact if an event ID was given."""
|
||||||
context = super(EventForm, self).get_context_data(**kwargs)
|
context = super(EventForm, self).get_context_data(**kwargs)
|
||||||
context['title'] = _("Edit Event") if self.kwargs.get('pk') else _("Add Event")
|
context['title'] = _("Edit Event") if self.kwargs.get('pk') else _("Add Event")
|
||||||
return context
|
return context
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: kasu.utils\n"
|
"Project-Id-Version: kasu.utils\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-26 18:31+0200\n"
|
"POT-Creation-Date: 2023-08-07 20:38+0200\n"
|
||||||
"PO-Revision-Date: 2018-12-30 11:14+0105\n"
|
"PO-Revision-Date: 2018-12-30 11:14+0105\n"
|
||||||
"Last-Translator: b' <kasu@xendynastie.at>'\n"
|
"Last-Translator: b' <kasu@xendynastie.at>'\n"
|
||||||
"Language-Team: Kasu <verein@kasu.at>\n"
|
"Language-Team: Kasu <verein@kasu.at>\n"
|
||||||
@@ -79,7 +79,7 @@ msgstr "Bevorstehende Veranstaltungen"
|
|||||||
msgid "No events found"
|
msgid "No events found"
|
||||||
msgstr "Keine Veranstaltungen gefunden"
|
msgstr "Keine Veranstaltungen gefunden"
|
||||||
|
|
||||||
#: templates/base.html:149
|
#: templates/base.html:150
|
||||||
msgid "Add Subpage"
|
msgid "Add Subpage"
|
||||||
msgstr "Unterseite Hinzufügen"
|
msgstr "Unterseite Hinzufügen"
|
||||||
|
|
||||||
@@ -87,43 +87,43 @@ msgstr "Unterseite Hinzufügen"
|
|||||||
msgid "Edit Page"
|
msgid "Edit Page"
|
||||||
msgstr "Seite bearbeiten"
|
msgstr "Seite bearbeiten"
|
||||||
|
|
||||||
#: templates/base.html:162
|
#: templates/base.html:163
|
||||||
msgid "Imprint"
|
msgid "Imprint"
|
||||||
msgstr "Impressum"
|
msgstr "Impressum"
|
||||||
|
|
||||||
#: templates/base.html:163
|
#: templates/base.html:164
|
||||||
msgid "contact"
|
msgid "contact"
|
||||||
msgstr "Kontakt"
|
msgstr "Kontakt"
|
||||||
|
|
||||||
#: templates/base.html:168
|
#: templates/base.html:169
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr "Sprache"
|
msgstr "Sprache"
|
||||||
|
|
||||||
#: templates/base.html:177
|
#: templates/base.html:178
|
||||||
msgid "Go"
|
msgid "Go"
|
||||||
msgstr "Los"
|
msgstr "Los"
|
||||||
|
|
||||||
#: templates/base.html:182
|
#: templates/base.html:183
|
||||||
msgid "Logged in as"
|
msgid "Logged in as"
|
||||||
msgstr "Angemeldet als"
|
msgstr "Angemeldet als"
|
||||||
|
|
||||||
#: templates/base.html:184
|
#: templates/base.html:185
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
msgstr "Admin"
|
msgstr "Admin"
|
||||||
|
|
||||||
#: templates/base.html:185
|
#: templates/base.html:186
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
msgstr "Abmelden"
|
msgstr "Abmelden"
|
||||||
|
|
||||||
#: templates/base.html:187
|
#: templates/base.html:188
|
||||||
msgid "no user logged in"
|
msgid "no user logged in"
|
||||||
msgstr "Niemand angemeldet"
|
msgstr "Niemand angemeldet"
|
||||||
|
|
||||||
#: templates/base.html:188 templates/comments/form.html:43
|
#: templates/base.html:189 templates/comments/form.html:43
|
||||||
msgid "register"
|
msgid "register"
|
||||||
msgstr "Registrieren"
|
msgstr "Registrieren"
|
||||||
|
|
||||||
#: templates/base.html:189 templates/comments/form.html:44
|
#: templates/base.html:190 templates/comments/form.html:44
|
||||||
msgid "login"
|
msgid "login"
|
||||||
msgstr "anmelden"
|
msgstr "anmelden"
|
||||||
|
|
||||||
@@ -215,11 +215,11 @@ msgstr "Besuche uns auf"
|
|||||||
msgid "Add Article"
|
msgid "Add Article"
|
||||||
msgstr "Artikel hinzufügen"
|
msgstr "Artikel hinzufügen"
|
||||||
|
|
||||||
#: templates/paginator.html:7
|
#: templates/paginator.html:5 templates/paginator.html:7
|
||||||
msgid "Previous"
|
msgid "Previous"
|
||||||
msgstr "Vorherige"
|
msgstr "Vorherige"
|
||||||
|
|
||||||
#: templates/paginator.html:18
|
#: templates/paginator.html:17 templates/paginator.html:20
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Nächste"
|
msgstr "Nächste"
|
||||||
|
|
||||||
|
|||||||
@@ -191,7 +191,8 @@ LOGGING = {
|
|||||||
},
|
},
|
||||||
'formatters': {
|
'formatters': {
|
||||||
'verbose': {
|
'verbose': {
|
||||||
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
|
'format': '%(levelname)s %(asctime)s %(module)s %(process)d ' +
|
||||||
|
'%(thread)d %(message)s'
|
||||||
},
|
},
|
||||||
'simple': {
|
'simple': {
|
||||||
'format': '%(levelname)s %(message)s'
|
'format': '%(levelname)s %(message)s'
|
||||||
@@ -275,7 +276,7 @@ KYU_RANKS = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .local_settings import * # Ignore PyLintBear (W0401, W0614)
|
from .local_settings import * # noqa: F403
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -10,18 +10,19 @@ from content import views, feeds
|
|||||||
from content.sitemaps import ArticleSitemap, PageSitemap
|
from content.sitemaps import ArticleSitemap, PageSitemap
|
||||||
from events.sitemaps import EventSitemap
|
from events.sitemaps import EventSitemap
|
||||||
from events.views import EventListIcal
|
from events.views import EventListIcal
|
||||||
from mahjong_ranking.sitemaps import *
|
|
||||||
from maistar_ranking.sitemaps import *
|
import mahjong_ranking.sitemaps
|
||||||
|
import maistar_ranking.sitemaps
|
||||||
from membership.views import MembershipDetail
|
from membership.views import MembershipDetail
|
||||||
|
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
# register_converter('path')
|
# register_converter('path')
|
||||||
|
|
||||||
sitemaps = {
|
sitemaps = {
|
||||||
'event_rankings': EventRankingSitemap,
|
'event_rankings': mahjong_ranking.sitemaps.EventRankingSitemap,
|
||||||
'event_hanchans': EventHanchanSitemap,
|
'event_hanchans': mahjong_ranking.sitemaps.EventHanchanSitemap,
|
||||||
'mahjong_seasons': MahjongSeasonSitemap,
|
'mahjong_seasons': mahjong_ranking.sitemaps.MahjongSeasonSitemap,
|
||||||
'maistar_games': MaistarGamesSitemap,
|
'maistar_games': maistar_ranking.sitemaps.MaistarGamesSitemap,
|
||||||
'articles': ArticleSitemap,
|
'articles': ArticleSitemap,
|
||||||
'events': EventSitemap,
|
'events': EventSitemap,
|
||||||
'pages': PageSitemap,
|
'pages': PageSitemap,
|
||||||
@@ -40,21 +41,24 @@ urlpatterns = [ # Ignore PyLintBear (C0103)
|
|||||||
path('feeds/latest/', feeds.LatestNews(), name='feed-latest-news'),
|
path('feeds/latest/', feeds.LatestNews(), name='feed-latest-news'),
|
||||||
path('feeds/comments/', feeds.LatestComments(), name='feed-latest-comments'),
|
path('feeds/comments/', feeds.LatestComments(), name='feed-latest-comments'),
|
||||||
path('gallery/', include('events.gallery_urls')),
|
path('gallery/', include('events.gallery_urls')),
|
||||||
path('google25dabc1a49a9ef03.html', TemplateView.as_view(template_name='google25dabc1a49a9ef03.html')),
|
path('google25dabc1a49a9ef03.html',
|
||||||
|
TemplateView.as_view(template_name='google25dabc1a49a9ef03.html')),
|
||||||
path('i18n/', include('django.conf.urls.i18n'), name='start-page'),
|
path('i18n/', include('django.conf.urls.i18n'), name='start-page'),
|
||||||
path('manifest.json', TemplateView.as_view(template_name='manifest.json')),
|
path('manifest.json', TemplateView.as_view(template_name='manifest.json')),
|
||||||
path('membership/', include('membership.urls')),
|
path('membership/', include('membership.urls')),
|
||||||
path('news/', include('content.news_urls')),
|
path('news/', include('content.news_urls')),
|
||||||
path('ranking/', include('mahjong_ranking.urls')),
|
path('ranking/', include('mahjong_ranking.urls')),
|
||||||
path('ranking/', include('maistar_ranking.urls')),
|
path('ranking/', include('maistar_ranking.urls')),
|
||||||
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
|
|
||||||
path('robots.txt', TemplateView.as_view(template_name='robots.txt')),
|
path('robots.txt', TemplateView.as_view(template_name='robots.txt')),
|
||||||
path('users/', MembershipDetail.as_view(), name='membership-details'),
|
path('users/', MembershipDetail.as_view(), name='membership-details'),
|
||||||
path('users/<slug:username>/', MembershipDetail.as_view(), name='membership-details'),
|
path('users/<slug:username>/',
|
||||||
|
MembershipDetail.as_view(), name='membership-details'),
|
||||||
path('add_page/<path:path>', views.PageAddForm.as_view(), name='add-page'),
|
path('add_page/<path:path>', views.PageAddForm.as_view(), name='add-page'),
|
||||||
path('edit_page/<path:path>', views.PageEditForm.as_view(), name='edit-page'),
|
path('edit_page/<path:path>', views.PageEditForm.as_view(), name='edit-page'),
|
||||||
path('<path:path>.html', views.PageHtml.as_view(), name='view-page'),
|
path('<path:path>.html', views.PageHtml.as_view(), name='view-page'),
|
||||||
path('<path:path>.pdf', views.PagePdf.as_view()),
|
path('<path:path>.pdf', views.PagePdf.as_view()),
|
||||||
|
path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
|
||||||
|
name='django.contrib.sitemaps.views.sitemap'),
|
||||||
]
|
]
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
""" Script to start Django as an WSGI Application.
|
""" Script to start Django as an WSGI Application.
|
||||||
|
|
||||||
src_path and virtpy_path are host dependet variables.
|
src_path and virtpy_path are host dependet variables.
|
||||||
TODO: Check if this file is really needet and make it host independet
|
TODO: Check if this file is really needed and make it independent from host
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@@ -14,7 +14,7 @@ if VENV_PATH not in sys.path:
|
|||||||
if SOURCE_PATH not in sys.path:
|
if SOURCE_PATH not in sys.path:
|
||||||
sys.path.append(SOURCE_PATH)
|
sys.path.append(SOURCE_PATH)
|
||||||
|
|
||||||
from django.core.wsgi import get_wsgi_application
|
from django.core.wsgi import get_wsgi_application # noqa: E402
|
||||||
|
|
||||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'kasu.settings'
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'kasu.settings'
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ def getattr_recursive(obj, attr_string):
|
|||||||
|
|
||||||
:param obj: a python object.
|
:param obj: a python object.
|
||||||
:param attr_string: the desired attribute of the object.
|
:param attr_string: the desired attribute of the object.
|
||||||
:return: a getattr_recursice(obj, 'attr1.attr2') will return the value of attr2 of attr1 from obj
|
:return: return the value from attr2 of attr1 from obj
|
||||||
"""
|
"""
|
||||||
attr_list = attr_string.split('.')
|
attr_list = attr_string.split('.')
|
||||||
return_value = None
|
return_value = None
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: kasu.mahjong_ranking\n"
|
"Project-Id-Version: kasu.mahjong_ranking\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-27 00:05+0200\n"
|
"POT-Creation-Date: 2023-08-07 20:38+0200\n"
|
||||||
"PO-Revision-Date: 2018-05-08 00:20+0105\n"
|
"PO-Revision-Date: 2018-05-08 00:20+0105\n"
|
||||||
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
|
"Last-Translator: b'Christian Berg <kasu@xendynastie.at>'\n"
|
||||||
"Language-Team: Kasu <verein@kasu.at>\n"
|
"Language-Team: Kasu <verein@kasu.at>\n"
|
||||||
@@ -28,8 +28,8 @@ msgid "Confirm"
|
|||||||
msgstr "Bestätigen"
|
msgstr "Bestätigen"
|
||||||
|
|
||||||
#: admin.py:46
|
#: admin.py:46
|
||||||
msgid "Set unconfirmed"
|
msgid "Reject"
|
||||||
msgstr "Als unbestätigt markieren"
|
msgstr ""
|
||||||
|
|
||||||
#: forms.py:22
|
#: forms.py:22
|
||||||
msgid "start"
|
msgid "start"
|
||||||
@@ -89,7 +89,7 @@ msgstr "Wurde bestätigt"
|
|||||||
msgid "Only valid and confirmed Hanchans will be counted in the rating."
|
msgid "Only valid and confirmed Hanchans will be counted in the rating."
|
||||||
msgstr "Nur gültige und bestätigte Hanchans kommen in die Wertung."
|
msgstr "Nur gültige und bestätigte Hanchans kommen in die Wertung."
|
||||||
|
|
||||||
#: models.py:181 models.py:620 templates/mahjong_ranking/ladder_redbox.html:29
|
#: models.py:181 models.py:619 templates/mahjong_ranking/ladder_redbox.html:29
|
||||||
#: templates/mahjong_ranking/player_ladder_score.html:63
|
#: templates/mahjong_ranking/player_ladder_score.html:63
|
||||||
msgid "Season"
|
msgid "Season"
|
||||||
msgstr "Saison"
|
msgstr "Saison"
|
||||||
@@ -127,11 +127,11 @@ msgstr "Spielstand ist weniger als 100.000 Punkte"
|
|||||||
msgid "Gamescore is over 100.000 Pt."
|
msgid "Gamescore is over 100.000 Pt."
|
||||||
msgstr "Spielstand ist über 100.000 Punkte."
|
msgstr "Spielstand ist über 100.000 Punkte."
|
||||||
|
|
||||||
#: models.py:368
|
#: models.py:367
|
||||||
msgid "Kyū/Dan Ranking"
|
msgid "Kyū/Dan Ranking"
|
||||||
msgstr "Kyū/Dan Wertung"
|
msgstr "Kyū/Dan Wertung"
|
||||||
|
|
||||||
#: models.py:369
|
#: models.py:368
|
||||||
msgid "Kyū/Dan Rankings"
|
msgid "Kyū/Dan Rankings"
|
||||||
msgstr "Kyū/Dan Wertungen"
|
msgstr "Kyū/Dan Wertungen"
|
||||||
|
|
||||||
@@ -386,10 +386,13 @@ msgstr "%s wurde erfolgreich aktualisiert."
|
|||||||
msgid "%s has been added successfully. You can now add a new one."
|
msgid "%s has been added successfully. You can now add a new one."
|
||||||
msgstr "%s wurde erfolgreich hinzugefügt. Du kannst eine neue eintragen."
|
msgstr "%s wurde erfolgreich hinzugefügt. Du kannst eine neue eintragen."
|
||||||
|
|
||||||
#: views.py:218
|
#: views.py:222
|
||||||
msgid "No user found matching the name {}"
|
msgid "No user found matching the name {}"
|
||||||
msgstr "Kein Benutzer mit dem Namen %s gefunden"
|
msgstr "Kein Benutzer mit dem Namen %s gefunden"
|
||||||
|
|
||||||
|
#~ msgid "Set unconfirmed"
|
||||||
|
#~ msgstr "Als unbestätigt markieren"
|
||||||
|
|
||||||
#~ msgid "Full Name"
|
#~ msgid "Full Name"
|
||||||
#~ msgstr "Voller Name"
|
#~ msgstr "Voller Name"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
"""
|
"""
|
||||||
Recalculates all Kyu/Dan Rankings until the given date a writes them to the legacy fields.
|
Recalculates all Kyu/Dan Rankings until the given date
|
||||||
|
and writes them to the legacy fields.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
@@ -21,36 +22,37 @@ LEGACY_ATTRIBUTES = (
|
|||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
""" Recalculates all Kyu/Dan Rankings until the given date a writes them to the legacy fields. """
|
help = "Recalculates all Kyu/Dan Rankings until the given date " + \
|
||||||
|
"and writes them to the legacy fields."
|
||||||
|
|
||||||
help = "Recalculates all Kyu/Dan Rankings until the given date a writes them to the legacy fields."
|
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('-s', '--since', nargs='?', type=parse_date,
|
parser.add_argument('-s', '--since', nargs='?', type=parse_date,
|
||||||
metavar='YYYY-MM-DD',
|
metavar='YYYY-MM-DD',
|
||||||
help='Use all Hanchans since the given date.')
|
help='Use all Hanchans since the given date.')
|
||||||
parser.add_argument('-u', '--until', nargs='?', type=parse_date,
|
parser.add_argument('-u', '--until', nargs='?', type=parse_date,
|
||||||
metavar='YYYY-MM-DD',
|
metavar='YYYY-MM-DD',
|
||||||
help='Only use Hanchans until the given date.')
|
help='Only use Hanchans until the given date.')
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
|
||||||
since = options.get('since', None)
|
def handle(self, *args, **options):
|
||||||
until = options.get('until', None)
|
since = options.get('since', None)
|
||||||
if isinstance(since, date):
|
until = options.get('until', None)
|
||||||
since = datetime.combine(since, time(0, 0, 0))
|
if isinstance(since, date):
|
||||||
since = timezone.make_aware(since)
|
since = datetime.combine(since, time(0, 0, 0))
|
||||||
if isinstance(until, date):
|
since = timezone.make_aware(since)
|
||||||
until = datetime.combine(until, time(23, 59, 59))
|
if isinstance(until, date):
|
||||||
until = timezone.make_aware(until)
|
until = datetime.combine(until, time(23, 59, 59))
|
||||||
models.KyuDanRanking.objects.update(since=since, until=until, force_recalc=True)
|
until = timezone.make_aware(until)
|
||||||
# write the updated values to the legacy fields
|
models.KyuDanRanking.objects.update(since=since, until=until, force_recalc=True)
|
||||||
for ranking in models.KyuDanRanking.objects.all():
|
# write the updated values to the legacy fields
|
||||||
print(ranking)
|
for ranking in models.KyuDanRanking.objects.all():
|
||||||
for attribute in LEGACY_ATTRIBUTES:
|
print(ranking)
|
||||||
setattr(ranking, f"legacy_{attribute}", getattr(ranking, attribute))
|
for attribute in LEGACY_ATTRIBUTES:
|
||||||
value = getattr(ranking, attribute)
|
setattr(ranking, f"legacy_{attribute}", getattr(ranking, attribute))
|
||||||
legacy_value = getattr(ranking, f"legacy_{attribute}")
|
value = getattr(ranking, attribute)
|
||||||
print(f"{attribute}: {value}, legacy_{attribute}: {legacy_value}")
|
legacy_value = getattr(ranking, f"legacy_{attribute}")
|
||||||
ranking.legacy_date = until.date()
|
print(f"{attribute}: {value}, legacy_{attribute}: {legacy_value}")
|
||||||
print(f"legacy_date: {ranking.legacy_date}")
|
ranking.legacy_date = until.date()
|
||||||
ranking.save()
|
print(f"legacy_date: {ranking.legacy_date}")
|
||||||
|
ranking.save()
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ class HanchanManager(models.Manager):
|
|||||||
[hanchan.get_playerdata(user) for hanchan in queryset]
|
[hanchan.get_playerdata(user) for hanchan in queryset]
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def season_hanchans(self, user: object = None, season: int = None, until: date = None):
|
def season_hanchans(self, user: object = None,
|
||||||
|
season: int = None, until: date = None):
|
||||||
"""Return all Hanchans that belong to a given or the current season.
|
"""Return all Hanchans that belong to a given or the current season.
|
||||||
|
|
||||||
:param user: Only return Hanchans where this user participated.
|
:param user: Only return Hanchans where this user participated.
|
||||||
@@ -248,7 +249,8 @@ class KyuDanRankingManager(models.Manager):
|
|||||||
for attr, old_value in old_attr.items():
|
for attr, old_value in old_attr.items():
|
||||||
if getattr(ranking, attr) != old_value:
|
if getattr(ranking, attr) != old_value:
|
||||||
LOGGER.warning(
|
LOGGER.warning(
|
||||||
"%(user)s recalc shows differences in %(attr)s! old: %(old)d, new: %(new)d",
|
"%(user)s recalc shows differences in %(attr)s! ' + "
|
||||||
|
"'old: %(old)d, new: %(new)d",
|
||||||
{'user': ranking.user, 'attr': attr,
|
{'user': ranking.user, 'attr': attr,
|
||||||
'old': old_value or 0, 'new': getattr(ranking, attr) or 0}
|
'old': old_value or 0, 'new': getattr(ranking, attr, 0)}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ from django.core.cache import cache
|
|||||||
|
|
||||||
from mahjong_ranking import models
|
from mahjong_ranking import models
|
||||||
from . import LOGGER
|
from . import LOGGER
|
||||||
from . import LOGGER
|
|
||||||
|
|
||||||
|
|
||||||
class DenormalizationUpdateMiddleware:
|
class DenormalizationUpdateMiddleware:
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ class Migration(migrations.Migration):
|
|||||||
serialize=False, auto_created=True,
|
serialize=False, auto_created=True,
|
||||||
primary_key=True)),
|
primary_key=True)),
|
||||||
('start', models.DateTimeField(
|
('start', models.DateTimeField(
|
||||||
help_text='Wichtig damit die richtigen Hanchans in die Wertung kommen.',
|
help_text="Wichtig damit die richtigen Hanchans in die " + \
|
||||||
|
"Wertung kommen.",
|
||||||
verbose_name='Beginn')),
|
verbose_name='Beginn')),
|
||||||
('player1_input_score',
|
('player1_input_score',
|
||||||
models.IntegerField(verbose_name='Punkte')),
|
models.IntegerField(verbose_name='Punkte')),
|
||||||
@@ -55,14 +56,14 @@ class Migration(migrations.Migration):
|
|||||||
null=True, editable=False, blank=True)),
|
null=True, editable=False, blank=True)),
|
||||||
('player1_bonus_points', models.SmallIntegerField(
|
('player1_bonus_points', models.SmallIntegerField(
|
||||||
null=True, editable=False, blank=True)),
|
null=True, editable=False, blank=True)),
|
||||||
('player1_comment', models.CharField(verbose_name='Anmerkung',
|
('player1_comment', models.CharField(verbose_name="Anmerkung",
|
||||||
max_length=255,
|
max_length=255,
|
||||||
editable=False,
|
editable=False,
|
||||||
blank=True)),
|
blank=True)),
|
||||||
('player2_input_score',
|
('player2_input_score',
|
||||||
models.IntegerField(verbose_name='Punkte')),
|
models.IntegerField(verbose_name="Punkte")),
|
||||||
('player2_game_score', models.PositiveIntegerField(
|
('player2_game_score', models.PositiveIntegerField(
|
||||||
default=0, verbose_name='Punkte', editable=False)),
|
default=0, verbose_name="Punkte", editable=False)),
|
||||||
('player2_placement', models.PositiveSmallIntegerField(
|
('player2_placement', models.PositiveSmallIntegerField(
|
||||||
default=0, editable=False)),
|
default=0, editable=False)),
|
||||||
('player2_kyu_points', models.SmallIntegerField(
|
('player2_kyu_points', models.SmallIntegerField(
|
||||||
@@ -111,7 +112,8 @@ class Migration(migrations.Migration):
|
|||||||
models.TextField(verbose_name='Anmerkung', blank=True)),
|
models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||||
('confirmed', models.BooleanField(
|
('confirmed', models.BooleanField(
|
||||||
default=True,
|
default=True,
|
||||||
help_text='Nur g\xfcltige und best\xe4tigte Hanchans kommen in die Wertung.',
|
help_text="Nur g\xfcltige und best\xe4tigte Hanchans kommen " + \
|
||||||
|
"in die Wertung.",
|
||||||
verbose_name='Wurde best\xe4tigt')),
|
verbose_name='Wurde best\xe4tigt')),
|
||||||
('player_names',
|
('player_names',
|
||||||
models.CharField(max_length=255, editable=False)),
|
models.CharField(max_length=255, editable=False)),
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('mahjong_ranking', '0004_auto_20170218_1947'),
|
('mahjong_ranking', '0004_auto_20170218_1947'),
|
||||||
]
|
]
|
||||||
@@ -14,7 +13,9 @@ class Migration(migrations.Migration):
|
|||||||
operations = [
|
operations = [
|
||||||
migrations.AlterModelOptions(
|
migrations.AlterModelOptions(
|
||||||
name='kyudanranking',
|
name='kyudanranking',
|
||||||
options={'ordering': ('-dan_points', 'dan', '-kyu_points'), 'verbose_name': 'Kyū/Dan Wertung', 'verbose_name_plural': 'Kyū/Dan Wertungen'},
|
options={'ordering': ('-dan_points', 'dan', '-kyu_points'),
|
||||||
|
'verbose_name': 'Kyū/Dan Wertung',
|
||||||
|
'verbose_name_plural': 'Kyū/Dan Wertungen'},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='kyudanranking',
|
model_name='kyudanranking',
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import django.db.models.deletion
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('mahjong_ranking', '0005_auto_20171115_0653'),
|
('mahjong_ranking', '0005_auto_20171115_0653'),
|
||||||
]
|
]
|
||||||
@@ -42,27 +41,40 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='eventranking',
|
model_name='eventranking',
|
||||||
name='user',
|
name='user',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to=settings.AUTH_USER_MODEL),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='hanchan',
|
model_name='hanchan',
|
||||||
name='player1',
|
name='player1',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='user_hanchan+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 1'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='user_hanchan+',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 1'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='hanchan',
|
model_name='hanchan',
|
||||||
name='player2',
|
name='player2',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='user_hanchan+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 2'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='user_hanchan+',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 2'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='hanchan',
|
model_name='hanchan',
|
||||||
name='player3',
|
name='player3',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='user_hanchan+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 3'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='user_hanchan+',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 3'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='hanchan',
|
model_name='hanchan',
|
||||||
name='player4',
|
name='player4',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='user_hanchan+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 4'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='user_hanchan+',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 4'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='kyudanranking',
|
model_name='kyudanranking',
|
||||||
@@ -82,6 +94,7 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='seasonranking',
|
model_name='seasonranking',
|
||||||
name='user',
|
name='user',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to=settings.AUTH_USER_MODEL),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('mahjong_ranking', '0006_auto_20171214_1318'),
|
('mahjong_ranking', '0006_auto_20171214_1318'),
|
||||||
]
|
]
|
||||||
@@ -12,7 +11,11 @@ class Migration(migrations.Migration):
|
|||||||
operations = [
|
operations = [
|
||||||
migrations.AlterModelOptions(
|
migrations.AlterModelOptions(
|
||||||
name='kyudanranking',
|
name='kyudanranking',
|
||||||
options={'ordering': (models.OrderBy(models.F('dan'), descending=True, nulls_last=True), '-dan_points', '-kyu_points', '-won_hanchans', '-good_hanchans', '-last_hanchan_date'), 'verbose_name': 'Kyū/Dan Wertung', 'verbose_name_plural': 'Kyū/Dan Wertungen'},
|
options={'ordering': (
|
||||||
|
models.OrderBy(models.F('dan'), descending=True, nulls_last=True),
|
||||||
|
'-dan_points', '-kyu_points', '-won_hanchans', '-good_hanchans',
|
||||||
|
'-last_hanchan_date'), 'verbose_name': 'Kyū/Dan Wertung',
|
||||||
|
'verbose_name_plural': 'Kyū/Dan Wertungen'},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='kyudanranking',
|
model_name='kyudanranking',
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from django.urls import reverse
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
|
||||||
from events.models import Event
|
from events.models import Event
|
||||||
from . import DAN_RANKS_DICT, LOGGER, set_dirty
|
from . import DAN_RANKS_DICT, LOGGER, set_dirty
|
||||||
from . import managers
|
from . import managers
|
||||||
@@ -445,8 +444,8 @@ class KyuDanRanking(models.Model):
|
|||||||
settings.TOURNAMENT_WIN_BONUSPOINTS)
|
settings.TOURNAMENT_WIN_BONUSPOINTS)
|
||||||
if event_ranking.avg_placement == 1:
|
if event_ranking.avg_placement == 1:
|
||||||
bonus_points += settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS
|
bonus_points += settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS
|
||||||
hanchan.player_comment += u'+{0:d} Pkt: alle Spiele des Turnieres gewonnen. '.format(
|
hanchan.player_comment += '+{0:d} Pkt: alle Spiele des Turnieres \
|
||||||
settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS)
|
gewonnen. '.format(settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS)
|
||||||
|
|
||||||
if bonus_points and self.dan:
|
if bonus_points and self.dan:
|
||||||
hanchan.dan_points += bonus_points
|
hanchan.dan_points += bonus_points
|
||||||
@@ -504,12 +503,15 @@ class KyuDanRanking(models.Model):
|
|||||||
else:
|
else:
|
||||||
until = valid_hanchans.aggregate(until=models.Max("start"))["until"]
|
until = valid_hanchans.aggregate(until=models.Max("start"))["until"]
|
||||||
if valid_hanchans.count() > 0:
|
if valid_hanchans.count() > 0:
|
||||||
LOGGER.info(f"recalculating Kyu/Dan points for {self.user} ({since:%Y-%m-%d} - {until:%Y-%m-%d})...")
|
LOGGER.info(f"recalculating Kyu/Dan points for {self.user} " +
|
||||||
|
f"({since:%Y-%m-%d} - {until:%Y-%m-%d})...")
|
||||||
else:
|
else:
|
||||||
LOGGER.info(f"No new valid Hanchans for {self.user}...")
|
LOGGER.info(f"No new valid Hanchans for {self.user}...")
|
||||||
for hanchan in valid_hanchans:
|
for hanchan in valid_hanchans:
|
||||||
self.hanchan_count += 1
|
self.hanchan_count += 1
|
||||||
LOGGER.info(f"{self.user} Hanchan no. {self.hanchan_count} from {hanchan.start}")
|
LOGGER.info(
|
||||||
|
f"{self.user} Hanchan no. {self.hanchan_count} " +
|
||||||
|
f"from {hanchan.start}")
|
||||||
hanchan.get_playerdata(self.user)
|
hanchan.get_playerdata(self.user)
|
||||||
if since and hanchan.start < since:
|
if since and hanchan.start < since:
|
||||||
LOGGER.info(hanchan, "<", since, "no recalc")
|
LOGGER.info(hanchan, "<", since, "no recalc")
|
||||||
@@ -578,14 +580,16 @@ class KyuDanRanking(models.Model):
|
|||||||
# Only substract so much points that player has 0 Points:
|
# Only substract so much points that player has 0 Points:
|
||||||
if self.dan_points + hanchan.dan_points < 0:
|
if self.dan_points + hanchan.dan_points < 0:
|
||||||
hanchan.player_comment = 'Spieler unterschreitet 0 Punkte.' \
|
hanchan.player_comment = 'Spieler unterschreitet 0 Punkte.' \
|
||||||
'(Original {} Punkte)'.format(hanchan.dan_points)
|
'(Original {} Punkte)'.format(
|
||||||
|
hanchan.dan_points)
|
||||||
hanchan.dan_points -= (self.dan_points + hanchan.dan_points)
|
hanchan.dan_points -= (self.dan_points + hanchan.dan_points)
|
||||||
self.dan_points += hanchan.dan_points
|
self.dan_points += hanchan.dan_points
|
||||||
else:
|
else:
|
||||||
# Only substract so much points that player has 0 Points:
|
# Only substract so much points that player has 0 Points:
|
||||||
if self.kyu_points + hanchan.kyu_points < 0:
|
if self.kyu_points + hanchan.kyu_points < 0:
|
||||||
hanchan.player_comment = 'Spieler unterschreitet 0 Punkte.' \
|
hanchan.player_comment = 'Spieler unterschreitet 0 Punkte.' \
|
||||||
'(Original {} Punkte)'.format(hanchan.kyu_points)
|
'(Original {} Punkte)'.format(
|
||||||
|
hanchan.kyu_points)
|
||||||
hanchan.kyu_points -= (self.kyu_points + hanchan.kyu_points)
|
hanchan.kyu_points -= (self.kyu_points + hanchan.kyu_points)
|
||||||
self.kyu_points += hanchan.kyu_points
|
self.kyu_points += hanchan.kyu_points
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,6 @@ class KyuDanTest(TestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
points[dan_kyu],
|
points[dan_kyu],
|
||||||
getattr(ranking, dan_kyu),
|
getattr(ranking, dan_kyu),
|
||||||
"{dan_kyu} for {player} won't compute! ranking: {ranking}, sum: {sum}".format(
|
f"{dan_kyu} for {ranking.user} won't compute! " +
|
||||||
dan_kyu=dan_kyu, player=ranking.user,
|
f"ranking: {ranking.dan_kyu}, sum: {points[dan_kyu]}"
|
||||||
ranking=getattr(ranking, dan_kyu), sum=points[dan_kyu])
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,18 +7,32 @@ from . import views
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", RedirectView.as_view(url='/ranking/mahjong-ladder/', permanent=True)),
|
path("", RedirectView.as_view(url='/ranking/mahjong-ladder/', permanent=True)),
|
||||||
path('event/<int:event>/add-hanchan/', views.HanchanForm.as_view(), name="add-hanchan-form"),
|
path('event/<int:event>/add-hanchan/', views.HanchanForm.as_view(),
|
||||||
path('event/<int:event>/edit/', views.EventHanchanForm.as_view(), name="event-hanchan-form"),
|
name="add-hanchan-form"),
|
||||||
path('event/<int:event>/mahjong/', views.EventHanchanList.as_view(), name="event-hanchan-list"),
|
path('event/<int:event>/edit/', views.EventHanchanForm.as_view(),
|
||||||
path('event/<int:event>/mahjong-ranking/', views.EventRankingList.as_view(), name="event-ranking"),
|
name="event-hanchan-form"),
|
||||||
path('hanchan/<int:hanchan>/edit/', views.HanchanForm.as_view(), name="edit-hanchan"),
|
path('event/<int:event>/mahjong/', views.EventHanchanList.as_view(),
|
||||||
path('hanchan/<int:hanchan>/delete/', views.DeleteHanchan.as_view(), name="delete-hanchan"),
|
name="event-hanchan-list"),
|
||||||
path('mahjong-ladder/', views.SeasonRankingList.as_view(), name="mahjong-ladder"),
|
path('event/<int:event>/mahjong-ranking/', views.EventRankingList.as_view(),
|
||||||
path('mahjong-ladder/<int:season>/', views.SeasonRankingList.as_view(), name="mahjong-ladder"),
|
name="event-ranking"),
|
||||||
path('player/<slug:username>/dan/', views.PlayerDanScore.as_view(), name="player-dan-score"),
|
path('hanchan/<int:hanchan>/edit/', views.HanchanForm.as_view(),
|
||||||
path('player/<slug:username>/invalid/', views.PlayerInvalidScore.as_view(), name="player-invalid-score"),
|
name="edit-hanchan"),
|
||||||
path('player/<slug:username>/kyu/', views.PlayerKyuScore.as_view(), name="player-kyu-score"),
|
path('hanchan/<int:hanchan>/delete/', views.DeleteHanchan.as_view(),
|
||||||
path('player/<slug:username>/ladder/', views.PlayerLadderScore.as_view(), name="player-ladder-score"),
|
name="delete-hanchan"),
|
||||||
path('mahjong/', views.KyuDanRankingList.as_view(), name="kyudanranking-list"),
|
path('mahjong-ladder/', views.SeasonRankingList.as_view(),
|
||||||
path('mahjong/<str:order_by>/', views.KyuDanRankingList.as_view(), name="kyudanranking-list"),
|
name="mahjong-ladder"),
|
||||||
|
path('mahjong-ladder/<int:season>/', views.SeasonRankingList.as_view(),
|
||||||
|
name="mahjong-ladder"),
|
||||||
|
path('player/<slug:username>/dan/', views.PlayerDanScore.as_view(),
|
||||||
|
name="player-dan-score"),
|
||||||
|
path('player/<slug:username>/invalid/', views.PlayerInvalidScore.as_view(),
|
||||||
|
name="player-invalid-score"),
|
||||||
|
path('player/<slug:username>/kyu/', views.PlayerKyuScore.as_view(),
|
||||||
|
name="player-kyu-score"),
|
||||||
|
path('player/<slug:username>/ladder/', views.PlayerLadderScore.as_view(),
|
||||||
|
name="player-ladder-score"),
|
||||||
|
path('mahjong/', views.KyuDanRankingList.as_view(),
|
||||||
|
name="kyudanranking-list"),
|
||||||
|
path('mahjong/<str:order_by>/', views.KyuDanRankingList.as_view(),
|
||||||
|
name="kyudanranking-list"),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ from django.conf import settings
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('events', '__first__'),
|
('events', '__first__'),
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
@@ -17,7 +16,8 @@ class Migration(migrations.Migration):
|
|||||||
name='Game',
|
name='Game',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('comment', models.TextField(verbose_name='Anmerkung', blank=True)),
|
('comment', models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||||
('player1_score', models.SmallIntegerField(verbose_name='Punkte')),
|
('player1_score', models.SmallIntegerField(verbose_name='Punkte')),
|
||||||
('player1_placement', models.PositiveSmallIntegerField(editable=False)),
|
('player1_placement', models.PositiveSmallIntegerField(editable=False)),
|
||||||
@@ -32,31 +32,47 @@ class Migration(migrations.Migration):
|
|||||||
('player6_score', models.SmallIntegerField(verbose_name='Punkte')),
|
('player6_score', models.SmallIntegerField(verbose_name='Punkte')),
|
||||||
('player6_placement', models.PositiveSmallIntegerField(editable=False)),
|
('player6_placement', models.PositiveSmallIntegerField(editable=False)),
|
||||||
('confirmed', models.BooleanField(
|
('confirmed', models.BooleanField(
|
||||||
default=True, help_text='das Spiel z\xe4hlt nur wenn es best\xe4tigt wurde', verbose_name='Wurde best\xe4tigt')),
|
default=True,
|
||||||
|
help_text='das Spiel z\xe4hlt nur wenn es best\xe4tigt wurde',
|
||||||
|
verbose_name='Wurde best\xe4tigt')),
|
||||||
('player_names', models.CharField(max_length=255, editable=False)),
|
('player_names', models.CharField(max_length=255, editable=False)),
|
||||||
('season', models.PositiveSmallIntegerField(
|
('season', models.PositiveSmallIntegerField(
|
||||||
verbose_name='Saison', editable=False, db_index=True)),
|
verbose_name='Saison', editable=False, db_index=True)),
|
||||||
('event', models.ForeignKey(
|
('event', models.ForeignKey(
|
||||||
related_name='maistargame_set', to='events.Event', on_delete=models.CASCADE)),
|
related_name='maistargame_set', to='events.Event',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player1', models.ForeignKey(related_name='+',
|
('player1', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 1', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
verbose_name='Spieler 1',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player2', models.ForeignKey(related_name='+',
|
('player2', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 2', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
verbose_name='Spieler 2',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player3', models.ForeignKey(related_name='+',
|
('player3', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 3', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
verbose_name='Spieler 3',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player4', models.ForeignKey(related_name='+',
|
('player4', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 4', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
verbose_name='Spieler 4',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player5', models.ForeignKey(related_name='+',
|
('player5', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 5', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
verbose_name='Spieler 5',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player6', models.ForeignKey(related_name='+',
|
('player6', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 6', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
verbose_name='Spieler 6',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Ranking',
|
name='Ranking',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('season', models.PositiveSmallIntegerField(verbose_name='Saison')),
|
('season', models.PositiveSmallIntegerField(verbose_name='Saison')),
|
||||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
||||||
('avg_placement', models.PositiveSmallIntegerField(
|
('avg_placement', models.PositiveSmallIntegerField(
|
||||||
@@ -65,7 +81,8 @@ class Migration(migrations.Migration):
|
|||||||
('games_count', models.PositiveSmallIntegerField(default=0)),
|
('games_count', models.PositiveSmallIntegerField(default=0)),
|
||||||
('games_good', models.PositiveSmallIntegerField(default=0)),
|
('games_good', models.PositiveSmallIntegerField(default=0)),
|
||||||
('games_won', models.PositiveSmallIntegerField(default=0)),
|
('games_won', models.PositiveSmallIntegerField(default=0)),
|
||||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('-season', 'placement', 'avg_placement', '-avg_score'),
|
'ordering': ('-season', 'placement', 'avg_placement', '-avg_score'),
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import django.db.models.deletion
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('maistar_ranking', '0006_auto_20171115_0653'),
|
('maistar_ranking', '0006_auto_20171115_0653'),
|
||||||
]
|
]
|
||||||
@@ -17,36 +16,49 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='game',
|
model_name='game',
|
||||||
name='player1',
|
name='player1',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 1'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='+', to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 1'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='game',
|
model_name='game',
|
||||||
name='player2',
|
name='player2',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 2'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='+', to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 2'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='game',
|
model_name='game',
|
||||||
name='player3',
|
name='player3',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 3'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='+', to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 3'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='game',
|
model_name='game',
|
||||||
name='player4',
|
name='player4',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 4'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='+', to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 4'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='game',
|
model_name='game',
|
||||||
name='player5',
|
name='player5',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 5'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='+', to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 5'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='game',
|
model_name='game',
|
||||||
name='player6',
|
name='player6',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Spieler 6'),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name='+', to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name='Spieler 6'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='ranking',
|
model_name='ranking',
|
||||||
name='user',
|
name='user',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to=settings.AUTH_USER_MODEL),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -211,7 +211,8 @@ def update_maistar_ranking(sender, **kwargs):
|
|||||||
"""
|
"""
|
||||||
A Django signal hook to trigger a recalculation of the rankings as soon
|
A Django signal hook to trigger a recalculation of the rankings as soon
|
||||||
as a Mai-Star game has been added, deleted, or modified.
|
as a Mai-Star game has been added, deleted, or modified.
|
||||||
:param sender: The callback function which will be connected to this signal. See Receiver functions for more information.
|
:param sender: The callback function which will be connected to this signal.
|
||||||
|
See Receiver functions for more information.
|
||||||
:param kwargs: """
|
:param kwargs: """
|
||||||
instance = kwargs['instance']
|
instance = kwargs['instance']
|
||||||
for player in instance.player_list:
|
for player in instance.player_list:
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
"""To geneate a Sitemap with all events."""
|
"""To geneate a Sitemap with all events."""
|
||||||
from kasu.sitemaps import GenericSitemap
|
from kasu.sitemaps import GenericSitemap
|
||||||
from django.utils import timezone
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from events.models import Event
|
from events.models import Event
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,21 @@ from . import views
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", views.ListRankings.as_view()),
|
path("", views.ListRankings.as_view()),
|
||||||
path('event/<int:event>/maistar/', views.ListGames.as_view(), name="maistar-game-list"),
|
path('event/<int:event>/maistar/', views.ListGames.as_view(),
|
||||||
path('event/<int:event>/maistar/add/', views.GameForm.as_view(), name="maistar-add-game"),
|
name="maistar-game-list"),
|
||||||
path('maistar/', views.ListRankings.as_view(), name="maistar-ranking"),
|
path('event/<int:event>/maistar/add/', views.GameForm.as_view(),
|
||||||
path('maistar/<int:season>/', views.ListRankings.as_view(), name="maistar-ranking"),
|
name="maistar-add-game"),
|
||||||
path('maistar/<int:game>/edit/', views.GameForm.as_view(), name="maistar-edit-game"),
|
path('maistar/', views.ListRankings.as_view(),
|
||||||
path('maistar/<int:game>/delete/', views.DeleteGame.as_view(), name="maistar-delete-game"),
|
name="maistar-ranking"),
|
||||||
path('player/<slug:username>/maistar/', views.ListPlayerGames.as_view(), name="maistar-player-games"),
|
path('maistar/<int:season>/', views.ListRankings.as_view(),
|
||||||
path('player/<slug:username>/maistar/<int:season>/', views.ListPlayerGames.as_view(), name="maistar-player-games"),
|
name="maistar-ranking"),
|
||||||
|
path('maistar/<int:game>/edit/', views.GameForm.as_view(),
|
||||||
|
name="maistar-edit-game"),
|
||||||
|
path('maistar/<int:game>/delete/', views.DeleteGame.as_view(),
|
||||||
|
name="maistar-delete-game"),
|
||||||
|
path('player/<slug:username>/maistar/', views.ListPlayerGames.as_view(),
|
||||||
|
name="maistar-player-games"),
|
||||||
|
path('player/<slug:username>/maistar/<int:season>/',
|
||||||
|
views.ListPlayerGames.as_view(),
|
||||||
|
name="maistar-player-games"),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ def clear_personal_data(modeladmin, request, queryset):
|
|||||||
if not modeladmin.has_delete_permission(request):
|
if not modeladmin.has_delete_permission(request):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
for membership in queryset:
|
for membership in queryset:
|
||||||
if membership.membership == False:
|
if membership.membership is False:
|
||||||
[setattr(membership, fieldname, None)
|
[setattr(membership, fieldname, None)
|
||||||
for fieldname in membership.nullable_personal_data]
|
for fieldname in membership.nullable_personal_data]
|
||||||
[setattr(membership, fieldname, "")
|
[setattr(membership, fieldname, "")
|
||||||
@@ -61,11 +61,15 @@ def clear_personal_data(modeladmin, request, queryset):
|
|||||||
membership.save()
|
membership.save()
|
||||||
cleared_memberships += 1
|
cleared_memberships += 1
|
||||||
else:
|
else:
|
||||||
modeladmin.message_user(request, _(
|
modeladmin.message_user(
|
||||||
"Can't remove personal data from active member %s.") % membership.username, messages.ERROR)
|
request,
|
||||||
|
_("Can't remove personal data from %s.") % membership.username,
|
||||||
|
messages.ERROR)
|
||||||
if cleared_memberships > 0:
|
if cleared_memberships > 0:
|
||||||
modeladmin.message_user(request, _(
|
modeladmin.message_user(
|
||||||
"Cleared %d personal data profiles.") % cleared_memberships, messages.INFO)
|
request,
|
||||||
|
_("Cleared %d personal data profiles.") % cleared_memberships,
|
||||||
|
messages.INFO)
|
||||||
|
|
||||||
|
|
||||||
clear_personal_data.short_description = _("Clear personal Data")
|
clear_personal_data.short_description = _("Clear personal Data")
|
||||||
@@ -99,7 +103,7 @@ class MembershipAdmin(UserAdmin):
|
|||||||
'confirmed',
|
'confirmed',
|
||||||
'last_login',
|
'last_login',
|
||||||
)
|
)
|
||||||
list_editable = ('confirmed', )
|
list_editable = ('confirmed',)
|
||||||
list_display_links = ('username',)
|
list_display_links = ('username',)
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
(None, {'fields': (('username', 'password'), 'gender', 'avatar',
|
(None, {'fields': (('username', 'password'), 'gender', 'avatar',
|
||||||
|
|||||||
@@ -27,19 +27,24 @@ class Migration(migrations.Migration):
|
|||||||
max_length=128, verbose_name='password')),
|
max_length=128, verbose_name='password')),
|
||||||
('last_login', models.DateTimeField(
|
('last_login', models.DateTimeField(
|
||||||
null=True, verbose_name='last login', blank=True)),
|
null=True, verbose_name='last login', blank=True)),
|
||||||
('is_superuser', models.BooleanField(default=False,
|
('is_superuser', models.BooleanField(
|
||||||
help_text='Designates that this user has all permissions without explicitly assigning them.',
|
default=False,
|
||||||
verbose_name='superuser status')),
|
help_text="Designates that this user has all permissions " +
|
||||||
|
"without explicitly assigning them.",
|
||||||
|
verbose_name='superuser status')),
|
||||||
('username', models.CharField(error_messages={
|
('username', models.CharField(error_messages={
|
||||||
'unique': 'A user with that username already exists.'},
|
'unique': 'A user with that username already exists.'},
|
||||||
max_length=30, validators=[
|
max_length=30, validators=[
|
||||||
django.core.validators.RegexValidator(
|
django.core.validators.RegexValidator(
|
||||||
'^[\\w.@+-]+$',
|
"^[\\w.@+-]+$",
|
||||||
'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.',
|
"Enter a valid username. " +
|
||||||
|
"This value may contain only letters, " +
|
||||||
|
"numbers and @/./+/-/_ characters.",
|
||||||
'invalid')],
|
'invalid')],
|
||||||
help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.',
|
help_text="Required. 30 characters or fewer. " +
|
||||||
unique=True,
|
"Letters, digits and @/./+/-/_ only.",
|
||||||
verbose_name='username')),
|
unique=True,
|
||||||
|
verbose_name='username')),
|
||||||
('first_name', models.CharField(max_length=30,
|
('first_name', models.CharField(max_length=30,
|
||||||
verbose_name='first name',
|
verbose_name='first name',
|
||||||
blank=True)),
|
blank=True)),
|
||||||
@@ -49,12 +54,13 @@ class Migration(migrations.Migration):
|
|||||||
('email', models.EmailField(max_length=254,
|
('email', models.EmailField(max_length=254,
|
||||||
verbose_name='email address',
|
verbose_name='email address',
|
||||||
blank=True)),
|
blank=True)),
|
||||||
('is_staff', models.BooleanField(default=False,
|
('is_staff', models.BooleanField(
|
||||||
help_text='Designates whether the user can log into this admin site.',
|
default=False,
|
||||||
verbose_name='staff status')),
|
help_text='this user can log into the admin site.',
|
||||||
|
verbose_name='staff status')),
|
||||||
('is_active', models.BooleanField(
|
('is_active', models.BooleanField(
|
||||||
default=True,
|
default=True,
|
||||||
help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.',
|
help_text='Unselect this instead of deleting accounts.',
|
||||||
verbose_name='active')),
|
verbose_name='active')),
|
||||||
('date_joined', models.DateTimeField(
|
('date_joined', models.DateTimeField(
|
||||||
default=django.utils.timezone.now,
|
default=django.utils.timezone.now,
|
||||||
@@ -68,9 +74,11 @@ class Migration(migrations.Migration):
|
|||||||
('avatar', models.ImageField(storage=utils.OverwriteStorage(
|
('avatar', models.ImageField(storage=utils.OverwriteStorage(
|
||||||
), null=True, upload_to=membership.models.get_upload_path,
|
), null=True, upload_to=membership.models.get_upload_path,
|
||||||
blank=True)),
|
blank=True)),
|
||||||
('membership', models.BooleanField(default=False,
|
('membership', models.BooleanField(
|
||||||
help_text='Ja, ich bin mit den Statuen einverstanden und m\xf6chte Mitglied werden.',
|
default=False,
|
||||||
verbose_name='Mitgliedschaft')),
|
help_text="Ja, ich bin mit den Statuen einverstanden " +
|
||||||
|
"und m\xf6chte Mitglied werden.",
|
||||||
|
verbose_name='Mitgliedschaft')),
|
||||||
('birthday', models.DateField(null=True,
|
('birthday', models.DateField(null=True,
|
||||||
verbose_name='Geburtstag',
|
verbose_name='Geburtstag',
|
||||||
blank=True)),
|
blank=True)),
|
||||||
@@ -93,22 +101,25 @@ class Migration(migrations.Migration):
|
|||||||
('paid_until', models.DateField(null=True,
|
('paid_until', models.DateField(null=True,
|
||||||
verbose_name='Bezahlt bis',
|
verbose_name='Bezahlt bis',
|
||||||
blank=True)),
|
blank=True)),
|
||||||
('confirmed', models.BooleanField(default=False,
|
('confirmed', models.BooleanField(
|
||||||
help_text='Diese Person hat ihre Mitgliedschaft bezahlt',
|
default=False,
|
||||||
verbose_name='Best\xe4tigt')),
|
help_text='Diese Person hat ihre Mitgliedschaft bezahlt',
|
||||||
|
verbose_name='Best\xe4tigt')),
|
||||||
('comment', models.TextField(blank=True)),
|
('comment', models.TextField(blank=True)),
|
||||||
('groups', models.ManyToManyField(related_query_name='user',
|
('groups', models.ManyToManyField(
|
||||||
related_name='user_set',
|
related_query_name='user',
|
||||||
to='auth.Group', blank=True,
|
related_name='user_set',
|
||||||
help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.',
|
to='auth.Group', blank=True,
|
||||||
verbose_name='groups')),
|
help_text="The groups this user belongs to. ",
|
||||||
|
verbose_name='groups')),
|
||||||
('user_permissions',
|
('user_permissions',
|
||||||
models.ManyToManyField(related_query_name='user',
|
models.ManyToManyField(
|
||||||
related_name='user_set',
|
related_query_name='user',
|
||||||
to='auth.Permission',
|
related_name='user_set',
|
||||||
blank=True,
|
to='auth.Permission',
|
||||||
help_text='Specific permissions for this user.',
|
blank=True,
|
||||||
verbose_name='user permissions')),
|
help_text='Specific permissions for this user.',
|
||||||
|
verbose_name='user permissions')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('last_name', 'first_name'),
|
'ordering': ('last_name', 'first_name'),
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.db import models
|
|
||||||
import django.contrib.auth.models
|
import django.contrib.auth.models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.db import models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.db import models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.db import models
|
|
||||||
import membership.models
|
import membership.models
|
||||||
import utils
|
import utils
|
||||||
import easy_thumbnails.fields
|
import easy_thumbnails.fields
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('membership', '0005_auto_20150901_2204'),
|
('membership', '0005_auto_20150901_2204'),
|
||||||
]
|
]
|
||||||
@@ -14,7 +13,12 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='membership',
|
model_name='membership',
|
||||||
name='gender',
|
name='gender',
|
||||||
field=models.CharField(blank=True, max_length=1, null=True, verbose_name='Geschlecht', choices=[
|
field=models.CharField(
|
||||||
(b'm', 'M\xe4nnlich'), (b'f', 'Weiblich')]),
|
blank=True,
|
||||||
|
max_length=1,
|
||||||
|
null=True,
|
||||||
|
verbose_name='Geschlecht',
|
||||||
|
choices=[
|
||||||
|
(b'm', 'M\xe4nnlich'), (b'f', 'Weiblich')]),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('membership', '0006_auto_20160916_1759'),
|
('membership', '0006_auto_20160916_1759'),
|
||||||
]
|
]
|
||||||
@@ -16,11 +15,19 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='membership',
|
model_name='membership',
|
||||||
name='gender',
|
name='gender',
|
||||||
field=models.CharField(blank=True, choices=[('m', 'Male'), ('f', 'Female')], max_length=1, null=True, verbose_name='Geschlecht'),
|
field=models.CharField(
|
||||||
|
blank=True, choices=[('m', 'Male'), ('f', 'Female')], max_length=1,
|
||||||
|
null=True, verbose_name='Geschlecht'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='membership',
|
model_name='membership',
|
||||||
name='username',
|
name='username',
|
||||||
field=models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'),
|
field=models.CharField(
|
||||||
|
error_messages={'unique': 'A user with that username already exists.'},
|
||||||
|
help_text="Required. 150 characters or fewer. " +
|
||||||
|
"Letters, digits and @/./+/-/_ only.",
|
||||||
|
max_length=150, unique=True,
|
||||||
|
validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
|
||||||
|
verbose_name='username'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('membership', '0007_auto_20171115_0653'),
|
('membership', '0007_auto_20171115_0653'),
|
||||||
]
|
]
|
||||||
@@ -13,6 +12,7 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='membership',
|
model_name='membership',
|
||||||
name='last_name',
|
name='last_name',
|
||||||
field=models.CharField(blank=True, max_length=150, verbose_name='last name'),
|
field=models.CharField(blank=True, max_length=150,
|
||||||
|
verbose_name='last name'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('membership', '0008_auto_20190106_1954'),
|
('membership', '0008_auto_20190106_1954'),
|
||||||
]
|
]
|
||||||
@@ -13,6 +12,7 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='membership',
|
model_name='membership',
|
||||||
name='first_name',
|
name='first_name',
|
||||||
field=models.CharField(blank=True, max_length=150, verbose_name='first name'),
|
field=models.CharField(blank=True, max_length=150,
|
||||||
|
verbose_name='first name'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -12,17 +12,29 @@ urlpatterns = [
|
|||||||
path("", views.MembershipDetail.as_view()),
|
path("", views.MembershipDetail.as_view()),
|
||||||
path('activate/<str:activation_key>', views.ActivateRegistration.as_view(),
|
path('activate/<str:activation_key>', views.ActivateRegistration.as_view(),
|
||||||
name='membership-activate-registration'),
|
name='membership-activate-registration'),
|
||||||
path('activation_sent/', views.ActivationSent.as_view(), name="membership-registration-complete"),
|
path('activation_sent/', views.ActivationSent.as_view(),
|
||||||
path('login/', auth_views.LoginView.as_view(), name='login'),
|
name="membership-registration-complete"),
|
||||||
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
|
path('login/', auth_views.LoginView.as_view(),
|
||||||
path('password_change/', auth_views.PasswordChangeView.as_view(), name='password_change'),
|
name='login'),
|
||||||
path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
|
path('logout/', auth_views.LogoutView.as_view(),
|
||||||
path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
|
name='logout'),
|
||||||
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
|
path('password_change/', auth_views.PasswordChangeView.as_view(),
|
||||||
path('register/', views.RegisterForm.as_view(), name="membership-register"),
|
name='password_change'),
|
||||||
path('reset/<uuid:uidb64>/<str:token>/', auth_views.PasswordResetConfirmView.as_view(),
|
path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(),
|
||||||
|
name='password_change_done'),
|
||||||
|
path('password_reset/', auth_views.PasswordResetView.as_view(),
|
||||||
|
name='password_reset'),
|
||||||
|
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(),
|
||||||
|
name='password_reset_done'),
|
||||||
|
path('register/', views.RegisterForm.as_view(),
|
||||||
|
name="membership-register"),
|
||||||
|
path('reset/<uuid:uidb64>/<str:token>/',
|
||||||
|
auth_views.PasswordResetConfirmView.as_view(),
|
||||||
name='password_reset_confirm'),
|
name='password_reset_confirm'),
|
||||||
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
|
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(),
|
||||||
path('<slug:username>/', views.MembershipDetail.as_view(), name='membership-details'),
|
name='password_reset_complete'),
|
||||||
path('<slug:username>/edit/', views.EditMembership.as_view(), name="membership-edit")
|
path('<slug:username>/', views.MembershipDetail.as_view(),
|
||||||
|
name='membership-details'),
|
||||||
|
path('<slug:username>/edit/', views.EditMembership.as_view(),
|
||||||
|
name="membership-edit")
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -6,10 +6,8 @@ Created on 28.09.2011
|
|||||||
from django.core.files.storage import FileSystemStorage
|
from django.core.files.storage import FileSystemStorage
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from .countries import COUNTRIES
|
|
||||||
from .html_cleaner import HtmlCleaner
|
from .html_cleaner import HtmlCleaner
|
||||||
from .massmailer import MassMailer
|
from .countries import COUNTRIES # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
CLEANER = HtmlCleaner()
|
CLEANER = HtmlCleaner()
|
||||||
STATUS_REJECTED, STATUS_WAITING, STATUS_PUBLISHED = -1, 0, 1
|
STATUS_REJECTED, STATUS_WAITING, STATUS_PUBLISHED = -1, 0, 1
|
||||||
|
|||||||
Reference in New Issue
Block a user