diff --git a/home/views.py b/home/views.py index 3c96bd85353d8e0dd0512d4c12fe73c412062ea5..8f2b6466a4b88b9d63f389aa7154630fede63da7 100644 --- a/home/views.py +++ b/home/views.py @@ -1,3 +1,4 @@ +from django.conf import settings from django.contrib.sitemaps import Sitemap from django.shortcuts import redirect, render from django.urls import reverse @@ -9,19 +10,29 @@ def static_view(request, template): activities = InterludesActivity.objects.filter(display=True).order_by("title") return render(request, template, {'activities': activities}) +def sign_up(request): + """Page d'inscription""" + if not settings.REGISTRATION_EVENT_INSCRIPTIONS_OPEN: + return static_view(request, "inscription.html") + + + class StaticViewSitemap(Sitemap): """Vue générant la sitemap.xml du site""" changefreq = 'monthly' def items(self): + """list of pages to appear in sitemap""" return ["home", "inscription", "activites", "FAQ"] def location(self, item): + """real url of an item""" return reverse(item) def priority(self, obj): + """priority to appear in sitemap""" # Priorize home page over the rest in search results if obj == "home" or obj == "": return 0.8 else: - return None # defaults to 0.5 when unset \ No newline at end of file + return None # defaults to 0.5 when unset diff --git a/interludes/settings.py b/interludes/settings.py index 22c6a013ba1a37bbb8d4c275b010a93a0f5a2146..03b41d8daad925207b232fb7d6e9058dc4062427 100644 --- a/interludes/settings.py +++ b/interludes/settings.py @@ -66,6 +66,7 @@ TEMPLATES = [ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'site_settings.context_processors.settings' ], }, }, diff --git a/site_settings/admin.py b/site_settings/admin.py index 8c38f3f3dad51e4585f3984282c2a4bec5349c1e..8ec1a48a0e5fce052c8e1522f7f24ffc6f4feca3 100644 --- a/site_settings/admin.py +++ b/site_settings/admin.py @@ -1,3 +1,18 @@ from django.contrib import admin -# Register your models here. +from site_settings.models import SiteSettings + +class SingletonModelAdmin(admin.ModelAdmin): + """Prevent deletion or adding rows""" + actions = None + + def has_add_permission(self, request, obj=None): + return False + + def has_delete_permission(self, request, obj=None): + return False + +@admin.register(SiteSettings) +class SiteSettingsAdmin(SingletonModelAdmin): + list_display = ("contact_email", "date_start", "date_end", "registrations_open", "inscriptions_open",) + list_editable = ("registrations_open", "inscriptions_open",) diff --git a/site_settings/apps.py b/site_settings/apps.py index 7222c28dab6ac8e806b72913b8761db0222c5bca..49139893f113790b95bac6402223ce0148207e67 100644 --- a/site_settings/apps.py +++ b/site_settings/apps.py @@ -3,3 +3,4 @@ from django.apps import AppConfig class SiteSettingsConfig(AppConfig): name = 'site_settings' + verbose_name = "Paramètres du site" diff --git a/site_settings/context_processors.py b/site_settings/context_processors.py new file mode 100644 index 0000000000000000000000000000000000000000..eb331029a66dca861eb50a30d5eb13dc3e7b90c3 --- /dev/null +++ b/site_settings/context_processors.py @@ -0,0 +1,4 @@ +from site_settings.models import SiteSettings + +def settings(request): + return {'settings': SiteSettings.load()} diff --git a/site_settings/models.py b/site_settings/models.py index 71a836239075aa6e6e4ecb700e9c42c95c022d91..6d7dfb86fe615ba8ed56cd6cfa5ed3cd22655e45 100644 --- a/site_settings/models.py +++ b/site_settings/models.py @@ -1,3 +1,46 @@ from django.db import models +from django.core.cache import cache -# Create your models here. +class SingletonModel(models.Model): + """Table de la BDD qui ne possède qu'un seul élément""" + class Meta: + abstract = True + + def save(self, *args, **kwargs): + """save the unique element""" + self.pk = 1 # set private key to one + super(SingletonModel, self).save(*args, **kwargs) + self.set_cache() + + def delete(self, *args, **kwargs): + """can't delete the unique element""" + pass + + @classmethod + def load(cls): + """load and return the unique element""" + if cache.get(cls.__name__) is None: + obj, created = cls.objects.get_or_create(pk=1) + if not created: + obj.set_cache() + return cache.get(cls.__name__) + + def set_cache(self): + """save in cache to limit db requests""" + cache.set(self.__class__.__name__, self) + + +class SiteSettings(SingletonModel): + """Réglages globaux du site""" + contact_email = models.EmailField("Email contact") + date_start = models.DateField("Date de début", null=True) + date_end = models.DateField("Date de fin", null=True) + + registrations_open = models.BooleanField("Ouvrir la création de compte", default=False) + inscriptions_open = models.BooleanField("Ouvrir les inscriptions", default=False) + + class Meta: + verbose_name = "paramètres" + + def __str__(self) -> str: + return "Réglages"