From 579a77c0044167078b9b11a397fe7a3cb725c6b8 Mon Sep 17 00:00:00 2001 From: Dorian Lesbre <dorian.lesbre@gmail.com> Date: Thu, 4 Mar 2021 19:45:39 +0100 Subject: [PATCH] Added core site settings --- home/views.py | 13 ++++++++- interludes/settings.py | 1 + site_settings/admin.py | 17 ++++++++++- site_settings/apps.py | 1 + site_settings/context_processors.py | 4 +++ site_settings/models.py | 45 ++++++++++++++++++++++++++++- 6 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 site_settings/context_processors.py diff --git a/home/views.py b/home/views.py index 3c96bd8..8f2b646 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 22c6a01..03b41d8 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 8c38f3f..8ec1a48 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 7222c28..4913989 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 0000000..eb33102 --- /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 71a8362..6d7dfb8 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" -- GitLab