diff --git a/clubhaus/homepage/admin.py b/clubhaus/homepage/admin.py index 8a1a73f..e0b01a3 100644 --- a/clubhaus/homepage/admin.py +++ b/clubhaus/homepage/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin # Register your models here. -from .models import Tobacco, TobaccoCategory, ClubhausEvent, EventDate, EventDateVotes, VotingUser +from .models import Tobacco, TobaccoCategory, ClubhausEvent, EventDate, EventDateVote, VotingUser, Setting @admin.register(Tobacco) @@ -29,7 +29,7 @@ class VotingUserAdmin(admin.ModelAdmin): ordering = ("id",) -@admin.register(EventDateVotes) +@admin.register(EventDateVote) class EventDateVotesAdmin(admin.ModelAdmin): list_display = ("id", "voter", "date", "available") list_editable = ('available',) @@ -49,3 +49,10 @@ class ClubhausEventAdmin(admin.ModelAdmin): inlines = [ EventDateInline ] + + +@admin.register(Setting) +class SettingAdmin(admin.ModelAdmin): + list_display = ("name", "active") + ordering = ("active", "id") + list_editable = ("active",) diff --git a/clubhaus/homepage/migrations/0020_rename_eventdatevotes_eventdatevote.py b/clubhaus/homepage/migrations/0020_rename_eventdatevotes_eventdatevote.py new file mode 100644 index 0000000..9b258de --- /dev/null +++ b/clubhaus/homepage/migrations/0020_rename_eventdatevotes_eventdatevote.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.5 on 2022-09-03 15:21 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('homepage', '0019_clubhausevent_voting_locked_alter_tobacco_in_stock'), + ] + + operations = [ + migrations.RenameModel( + old_name='EventDateVotes', + new_name='EventDateVote', + ), + ] diff --git a/clubhaus/homepage/migrations/0021_setting.py b/clubhaus/homepage/migrations/0021_setting.py new file mode 100644 index 0000000..8866338 --- /dev/null +++ b/clubhaus/homepage/migrations/0021_setting.py @@ -0,0 +1,22 @@ +# Generated by Django 4.0.5 on 2022-09-03 15:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('homepage', '0020_rename_eventdatevotes_eventdatevote'), + ] + + operations = [ + migrations.CreateModel( + name='Setting', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('active', models.BooleanField(default=True)), + ('intro_text', models.TextField(blank=True)), + ('intro_text_classes', models.CharField(blank=True, default='text-center fs-5', help_text='Extra CSS classes for the div for the intro text like text size', max_length=500)), + ], + ), + ] diff --git a/clubhaus/homepage/migrations/0022_setting_name.py b/clubhaus/homepage/migrations/0022_setting_name.py new file mode 100644 index 0000000..b70f450 --- /dev/null +++ b/clubhaus/homepage/migrations/0022_setting_name.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.5 on 2022-09-03 15:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('homepage', '0021_setting'), + ] + + operations = [ + migrations.AddField( + model_name='setting', + name='name', + field=models.CharField(default='Default Settings', max_length=200), + ), + ] diff --git a/clubhaus/homepage/migrations/0023_setting_unique_name.py b/clubhaus/homepage/migrations/0023_setting_unique_name.py new file mode 100644 index 0000000..22547cc --- /dev/null +++ b/clubhaus/homepage/migrations/0023_setting_unique_name.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.5 on 2022-09-03 15:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('homepage', '0022_setting_name'), + ] + + operations = [ + migrations.AddConstraint( + model_name='setting', + constraint=models.UniqueConstraint(fields=('name',), name='unique_name'), + ), + ] diff --git a/clubhaus/homepage/models.py b/clubhaus/homepage/models.py index 4d652ef..ad44196 100644 --- a/clubhaus/homepage/models.py +++ b/clubhaus/homepage/models.py @@ -43,7 +43,7 @@ class ClubhausEvent(models.Model): return f"{self.name}" -class EventDateVotes(models.Model): +class EventDateVote(models.Model): voter = models.ForeignKey(to="VotingUser", on_delete=models.CASCADE) date = models.ForeignKey(to="EventDate", to_field="date", on_delete=models.CASCADE) available = models.BooleanField() @@ -68,3 +68,19 @@ class VotingUser(models.Model): def __str__(self): return f"{self.name} ({self.id})" + + +class Setting(models.Model): + active = models.BooleanField(default=True) + name = models.CharField(max_length=200, default="Default Settings", blank=False) + intro_text = models.TextField(blank=True) + intro_text_classes = models.CharField(max_length=500, default="text-center fs-5", blank=True, + help_text="Extra CSS classes for the div for the intro text like text size") + + class Meta: + constraints = [ + models.UniqueConstraint(fields=("name",), name="unique_name") + ] + + def __str__(self): + return f"{self.id} - {self.name}" diff --git a/clubhaus/homepage/static/homepage/assets/plyr/plyr.3.7.2.svg b/clubhaus/homepage/static/homepage/assets/plyr/plyr.3.7.2.svg new file mode 100644 index 0000000..62ab257 --- /dev/null +++ b/clubhaus/homepage/static/homepage/assets/plyr/plyr.3.7.2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/clubhaus/homepage/templates/homepage/base.html b/clubhaus/homepage/templates/homepage/base.html index ede8073..10aa43f 100644 --- a/clubhaus/homepage/templates/homepage/base.html +++ b/clubhaus/homepage/templates/homepage/base.html @@ -39,8 +39,6 @@ Home - Teaser Event + +{% endblock %} + +{% block extra_scripts_block %} + + {% endblock %} {% block main %} - - - + + + + + {{ settings.intro_text | linebreaksbr }} + + + + + + + + + + {% endblock %} diff --git a/clubhaus/homepage/templates/homepage/teaser.html b/clubhaus/homepage/templates/homepage/teaser.html deleted file mode 100644 index 0c76158..0000000 --- a/clubhaus/homepage/templates/homepage/teaser.html +++ /dev/null @@ -1,49 +0,0 @@ -{% extends 'homepage/base.html' %} -{% load static %} - -{% block extra_header_block %} - - -{% endblock %} - -{% block extra_scripts_block %} - - -{% endblock %} - -{% block main %} - - Teaser 2022 - - - - - - -{% endblock %} diff --git a/clubhaus/homepage/urls.py b/clubhaus/homepage/urls.py index e39798d..996f953 100644 --- a/clubhaus/homepage/urls.py +++ b/clubhaus/homepage/urls.py @@ -7,7 +7,6 @@ urlpatterns = [ path('event', views.events, name='events'), path('tobacco', views.tobacco, name='tobacco'), path('voting', views.voting, name='voting'), - path('teaser', views.teaser, name='teaser'), path('law/impressum', views.impressum, name='impressum'), path('law/cookies-policy', views.cookies, name='cookies'), ] diff --git a/clubhaus/homepage/views.py b/clubhaus/homepage/views.py index e6a6773..32015f4 100644 --- a/clubhaus/homepage/views.py +++ b/clubhaus/homepage/views.py @@ -6,7 +6,7 @@ from django.urls import reverse import clubhaus.settings as django_settings from .exceptions import RateLimitHit, ProxyUsageDetected -from .models import Tobacco, ClubhausEvent, EventDate, EventDateVotes, VotingUser +from .models import Tobacco, ClubhausEvent, EventDate, EventDateVote, VotingUser, Setting def bad_request(request, exception, template_name="homepage/400.html"): @@ -14,7 +14,8 @@ def bad_request(request, exception, template_name="homepage/400.html"): def index(request: HttpRequest) -> django.http.HttpResponse: - return render(request, 'homepage/index.html', {}) + settings = Setting.objects.filter(active=True).first() + return render(request, 'homepage/index.html', {'settings': settings}) def impressum(request: HttpRequest) -> django.http.HttpResponse: @@ -30,16 +31,12 @@ def tobacco(request: HttpRequest) -> django.http.HttpResponse: return render(request, 'homepage/tobacco.html', context) -def teaser(request: HttpRequest) -> django.http.HttpResponse: - return render(request, 'homepage/teaser.html') - - def events(request: HttpRequest) -> django.http.HttpResponse: next_events = ClubhausEvent.objects.filter(active=True).order_by('-id') if len(next_events) == 1: next_event = next_events[0] dates = EventDate.objects.filter(event=next_event).order_by("date") - votes = EventDateVotes.objects.filter(date__event=next_event).order_by("voter_id", "date") + votes = EventDateVote.objects.filter(date__event=next_event).order_by("voter_id", "date") unique_voters = list(set(map(lambda v: v.voter, votes))) vote_map = {} @@ -99,6 +96,6 @@ def voting(request: HttpRequest) -> django.http.HttpResponse: for date in event_dates: available = date.date.isoformat() in request.POST - EventDateVotes.objects.update_or_create(voter=user, date=date, defaults={"available": available}) + EventDateVote.objects.update_or_create(voter=user, date=date, defaults={"available": available}) return HttpResponseRedirect(reverse("events"))