diff --git a/beesgospel/admin.py b/beesgospel/admin.py deleted file mode 100644 index 916000f..0000000 --- a/beesgospel/admin.py +++ /dev/null @@ -1,56 +0,0 @@ -from django.contrib import admin -from django.contrib.auth.admin import UserAdmin - -from beesgospel.models import Agenda, Document, Membre, User - - -@admin.register(Agenda) -class AgendaAdmin(admin.ModelAdmin): - list_display = ["titre", "lieu", "date_heure", "prive"] - ordering = ["-date_heure"] - search_fields = ["titre", "lieu"] - date_hierarchy = "date_heure" - - -@admin.register(Document) -class DocumentAdmin(admin.ModelAdmin): - list_display = ["titre", "quand", "prive"] - ordering = ["-quand"] - - -@admin.register(Membre) -class MembreAdmin(admin.ModelAdmin): - list_display = ["nom", "prenom", "localite", "user__email"] - ordering = ["nom"] - - -@admin.register(User) -class UserAdmin(UserAdmin): - list_display = ["email", "is_active", "is_staff", "last_login"] - search_fields = ["email"] - ordering = ["email"] - fieldsets = ( - (None, {"fields": ("email", "password",)}), - ( - "Permissions", - { - "fields": ( - "is_active", - "is_staff", - "is_superuser", - "groups", - "user_permissions", - ), - }, - ), - ("Important dates", {"fields": ("last_login", "date_joined")}), - ) - add_fieldsets = ( - ( - None, - { - "classes": ("wide",), - "fields": ("email", "usable_password", "password1", "password2"), - }, - ), - ) diff --git a/beesgospel/forms.py b/beesgospel/forms.py deleted file mode 100644 index 51a22e5..0000000 --- a/beesgospel/forms.py +++ /dev/null @@ -1,31 +0,0 @@ -from dajngo import forms -from django.contrib.auth import forms as auth_forms - - -class BootstrapMixin: - required_css_class = "required" - - widget_classes = { - "checkbox": "form-check-input", - "select": "form-select", - } - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - for field in self.fields.values(): - if getattr(field.widget, "_bs_enabled", False): - continue - widgets = getattr(field.widget, "widgets", [field.widget]) - for widget in widgets: - input_type = getattr(widget, "input_type", "") - class_name = self.widget_classes.get(input_type, "form-control") - if "class" in widget.attrs: - widget.attrs["class"] += " " + class_name - else: - widget.attrs.update({"class": class_name}) - - -class LoginForm(BootstrapMixin, auth_forms.AuthenticationForm): - username = forms.EmailField( - widget=forms.EmailInput(attrs={"autofocus": True}), - ) diff --git a/beesgospel/migrations/0001_initial.py b/beesgospel/migrations/0001_initial.py deleted file mode 100644 index cffd9fb..0000000 --- a/beesgospel/migrations/0001_initial.py +++ /dev/null @@ -1,166 +0,0 @@ -import beesgospel.models -import django.db.models.deletion -import django.utils.timezone -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - initial = True - - dependencies = [ - ("auth", "0012_alter_user_first_name_max_length"), - ] - - operations = [ - migrations.CreateModel( - name="User", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("password", models.CharField(max_length=128, verbose_name="password")), - ( - "last_login", - models.DateTimeField( - blank=True, null=True, verbose_name="last login" - ), - ), - ( - "is_superuser", - models.BooleanField( - default=False, - help_text="Designates that this user has all permissions without explicitly assigning them.", - verbose_name="superuser status", - ), - ), - ( - "first_name", - models.CharField( - blank=True, max_length=150, verbose_name="first name" - ), - ), - ( - "last_name", - models.CharField( - blank=True, max_length=150, verbose_name="last name" - ), - ), - ( - "email", - models.EmailField( - blank=True, max_length=254, verbose_name="email address" - ), - ), - ( - "is_staff", - models.BooleanField( - default=False, - help_text="Designates whether the user can log into this admin site.", - verbose_name="staff status", - ), - ), - ( - "is_active", - models.BooleanField( - default=True, - help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", - verbose_name="active", - ), - ), - ( - "date_joined", - models.DateTimeField( - default=django.utils.timezone.now, verbose_name="date joined" - ), - ), - ( - "groups", - models.ManyToManyField( - blank=True, - help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", - related_name="user_set", - related_query_name="user", - to="auth.group", - verbose_name="groups", - ), - ), - ( - "user_permissions", - models.ManyToManyField( - blank=True, - help_text="Specific permissions for this user.", - related_name="user_set", - related_query_name="user", - to="auth.permission", - verbose_name="user permissions", - ), - ), - ], - managers=[ - ("objects", beesgospel.models.CustomUserManager()), - ], - ), - migrations.CreateModel( - name="Membre", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("nom", models.CharField(max_length=40, verbose_name="Nom")), - ("prenom", models.CharField(max_length=40, verbose_name="Prénom")), - ( - "avatar", - models.ImageField( - blank=True, upload_to="avatars", verbose_name="Avatar" - ), - ), - ( - "rue", - models.CharField(blank=True, max_length=80, verbose_name="Rue"), - ), - ("npa", models.CharField(blank=True, max_length=5, verbose_name="NPA")), - ( - "localite", - models.CharField( - blank=True, max_length=40, verbose_name="Localité" - ), - ), - ( - "tel1", - models.CharField(blank=True, max_length=20, verbose_name="Tél. 1"), - ), - ( - "tel2", - models.CharField(blank=True, max_length=20, verbose_name="Tél. 2"), - ), - ( - "user", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - to=settings.AUTH_USER_MODEL, - ), - ), - ], - ), - migrations.AddConstraint( - model_name="user", - constraint=models.UniqueConstraint( - fields=("email",), name="unique_user_email" - ), - ), - ] diff --git a/beesgospel/migrations/0002_agenda_document.py b/beesgospel/migrations/0002_agenda_document.py deleted file mode 100644 index ba6ce1a..0000000 --- a/beesgospel/migrations/0002_agenda_document.py +++ /dev/null @@ -1,74 +0,0 @@ -# Generated by Django 5.2.5.dev20250725113223 on 2025-07-26 15:59 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("beesgospel", "0001_initial"), - ] - - operations = [ - migrations.CreateModel( - name="Agenda", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("titre", models.CharField(max_length=150, verbose_name="Titre")), - ( - "lieu", - models.CharField(blank=True, max_length=80, verbose_name="Lieu"), - ), - ("date_heure", models.DateTimeField(verbose_name="Date/heure")), - ("infos", models.TextField(verbose_name="Informations")), - ( - "prive", - models.BooleanField( - default=False, - help_text="Un évènement privé ne peut être consulté que par les membres de l'association, tandis qu'un évènement public est visible de tous.", - verbose_name="Privé", - ), - ), - ], - options={'verbose_name': 'Agenda', 'verbose_name_plural': 'Agenda'}, - ), - migrations.CreateModel( - name="Document", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "fichier", - models.FileField( - blank=True, upload_to="documents", verbose_name="Fichier" - ), - ), - ("url", models.URLField(blank=True, verbose_name="URL")), - ("quand", models.DateField(verbose_name="Date")), - ("titre", models.CharField(max_length=150, verbose_name="Titre")), - ("infos", models.TextField(blank=True, verbose_name="Infos")), - ( - "prive", - models.BooleanField( - default=False, - help_text="Un document privé ne peut être consulté que par les membres de l'association, tandis qu'un document public est visible de tous.", - verbose_name="Privé", - ), - ), - ], - ), - ] diff --git a/beesgospel/migrations/__init__.py b/beesgospel/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/beesgospel/models.py b/beesgospel/models.py deleted file mode 100644 index f9af292..0000000 --- a/beesgospel/models.py +++ /dev/null @@ -1,75 +0,0 @@ -from django.contrib.auth.models import AbstractUser, UserManager -from django.db import models - - -class CustomUserManager(UserManager): - def create_superuser(self, **kwargs): - return super().create_superuser("foo", **kwargs) - - -class User(AbstractUser): - username = None - USERNAME_FIELD = "email" - REQUIRED_FIELDS = [] - - objects = CustomUserManager() - - class Meta: - constraints = [ - models.UniqueConstraint(name="unique_user_email", fields=["email"]), - ] - - def __init__(self, *args, username=None, **kwargs): - super().__init__(*args, **kwargs) - - -class Membre(models.Model): - nom = models.CharField("Nom", max_length=40) - prenom = models.CharField("Prénom", max_length=40) - user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True) - avatar = models.ImageField("Avatar", upload_to="avatars", blank=True) - rue = models.CharField("Rue", max_length=80, blank=True) - npa = models.CharField("NPA", max_length=5, blank=True) - localite = models.CharField("Localité", max_length=40, blank=True) - tel1 = models.CharField("Tél. 1", max_length=20, blank=True) - tel2 =models.CharField("Tél. 2", max_length=20, blank=True) - - def __str__(self): - return f"{self.nom} {self.prenom}" - - -class Agenda(models.Model): - titre = models.CharField("Titre", max_length=150) - lieu = models.CharField("Lieu", max_length=80, blank=True) - date_heure = models.DateTimeField("Date/heure") - infos = models.TextField("Informations") - prive = models.BooleanField( - "Privé", default=False, help_text=( - "Un évènement privé ne peut être consulté que par les membres de " - "l'association, tandis qu'un évènement public est visible de tous." - ) - ) - - class Meta: - verbose_name = "Agenda" - verbose_name_plural = "Agenda" - - def __str__(self): - return f"{self.titre} {self.date_heure}" - - -class Document(models.Model): - fichier = models.FileField("Fichier", upload_to="documents", blank=True) - url = models.URLField("URL", blank=True) - quand = models.DateField("Date") - titre = models.CharField("Titre", max_length=150) - infos = models.TextField("Infos", blank=True) - prive = models.BooleanField( - "Privé", default=False, help_text=( - "Un document privé ne peut être consulté que par les membres de " - "l'association, tandis qu'un document public est visible de tous." - ) - ) - - def __str__(self): - return f"{self.titre} {self.date}" diff --git a/beesgospel/static/css/main.css b/beesgospel/static/css/main.css index 66307cf..cb920a3 100644 --- a/beesgospel/static/css/main.css +++ b/beesgospel/static/css/main.css @@ -73,8 +73,3 @@ nav { .left-red { border-left: 2px solid red; } - -.prive { - background-image: linear-gradient(45deg, #333333 41.67%, #6b0c0c 41.67%, #6b0c0c 50%, #333333 50%, #333333 91.67%, #6b0c0c 91.67%, #6b0c0c 100%); - background-size: 33.94px 33.94px; -} diff --git a/beesgospel/views.py b/beesgospel/views.py deleted file mode 100644 index e97bf0c..0000000 --- a/beesgospel/views.py +++ /dev/null @@ -1,27 +0,0 @@ -from datetime import date, timedelta -from django.contrib.auth.mixins import LoginRequiredMixin -from django.views.generic import ListView, TemplateView - -from .models import Agenda, Membre - - -class AgendaView(ListView): - model = Agenda - template_name = "agenda.html" - - def get_queryset(self): - qs = Agenda.objects.filter( - date_heure__gt=date.today() - timedelta(days=3), - ).order_by("date_heure") - if not self.request.user.is_authenticated: - qs = qs.filter(prive=False) - return qs - - -class EspaceMembresView(LoginRequiredMixin, TemplateView): - template_name = "membres/index.html" - - -class ListeMembresView(LoginRequiredMixin, ListView): - model = Membre - template_name = "membres/liste.html" diff --git a/common/settings.py b/common/settings.py index 3876c66..6f00a18 100644 --- a/common/settings.py +++ b/common/settings.py @@ -4,8 +4,6 @@ Django settings for beesgospel project. from pathlib import Path -from django.urls import reverse_lazy - # Build paths inside the project like this: BASE_DIR / "subdir". BASE_DIR = Path(__file__).resolve().parent.parent @@ -71,7 +69,7 @@ DATABASES = { "NAME": BASE_DIR / "db.sqlite3", } } -DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + # Password validation # https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators @@ -90,17 +88,16 @@ AUTH_PASSWORD_VALIDATORS = [ "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] -AUTH_USER_MODEL = "beesgospel.User" # Internationalization # https://docs.djangoproject.com/en/5.2/topics/i18n/ -LANGUAGE_CODE = "fr-ch" +LANGUAGE_CODE = "fr" -TIME_ZONE = "Europe/Zurich" +TIME_ZONE = "UTC" -USE_I18N = True +USE_I18N = False USE_TZ = True @@ -111,8 +108,6 @@ USE_TZ = True STATIC_URL = "static/" STATIC_ROOT = BASE_DIR / "static" -LOGOUT_REDIRECT_URL = reverse_lazy("presentation") - # Default primary key field type # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field diff --git a/common/urls.py b/common/urls.py index 6896b7e..4ec1d5f 100644 --- a/common/urls.py +++ b/common/urls.py @@ -1,17 +1,11 @@ from django.contrib import admin -from django.urls import include, path +from django.urls import path from django.views.generic import TemplateView -from beesgospel import views - urlpatterns = [ path("admin/", admin.site.urls), - path("accounts/", include("django.contrib.auth.urls")), path("", TemplateView.as_view(template_name="index.html"), name="home"), path("v2", TemplateView.as_view(template_name="index2.html"), name="home"), path("presentation/", TemplateView.as_view(template_name="presentation.html"), name="presentation"), path("contact/", TemplateView.as_view(template_name="contact.html"), name="contact"), - path("membres/", views.EspaceMembresView.as_view(), name="membres"), - path("membres/liste/", views.ListeMembresView.as_view(), name="liste-membres"), - path("agenda/", views.AgendaView.as_view(), name="agenda"), ] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 860172b..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -django==5.2.* -pillow==11.3.* diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html deleted file mode 100644 index 25f1cdb..0000000 --- a/templates/admin/base_site.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends 'admin/base.html' %} - -{% block branding %} -
Administration du site beesgospel.ch
-{% endblock %} diff --git a/templates/agenda.html b/templates/agenda.html deleted file mode 100644 index 2d4dd35..0000000 --- a/templates/agenda.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "base.html" %} - -{% block page_title %} - Agenda{% endblock %} - -{% block content %} -

Agenda des prochaines prestations de la chorale

- -{% for item in object_list %} -
-
-
- {{ item.date_heure|date:'D d F à H:i' }} -
-
{{ item.titre }}
-
-
{{ item.lieu }}
-
{{ item.infos }}
-
-{% endfor %} -{% endblock %} diff --git a/templates/base.html b/templates/base.html index 8d423cc..3692f54 100644 --- a/templates/base.html +++ b/templates/base.html @@ -3,7 +3,7 @@ - Le Gospel de l’Abeille - Bee's Gospel{% block page_title %}{% endblock %} + Le Gospel de l’Abeille - Bee's Gospel @@ -26,11 +26,11 @@ - + - + diff --git a/templates/membres/index.html b/templates/membres/index.html deleted file mode 100644 index 65e3c25..0000000 --- a/templates/membres/index.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -
-
{% csrf_token %}
-
-

Espace membres

-
-
Liste des membres
- {% if perms.beesgospel.change_agenda %} -
Gestion de l’agenda
- {% endif %} - {% if perms.beesgospel.change_document %} -
Gestion des documents
- {% endif %} -
-{% endblock %} diff --git a/templates/membres/liste.html b/templates/membres/liste.html deleted file mode 100644 index 2e33609..0000000 --- a/templates/membres/liste.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -

Liste des membres

- - {% for membre in object_list %} - - - - - - {% endfor %} -
{{ membre.nom }} {{ membre.prenom }}{{ membre.rue }}
{{ membre.npa }} {{ membre.localite }}
{{ membre.tel1 }}
{{ membre.tel2 }}
{{ membre.email }}
-{% endblock %} diff --git a/templates/registration/login.html b/templates/registration/login.html deleted file mode 100644 index f77368a..0000000 --- a/templates/registration/login.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -
-
-
- {% csrf_token %} -

Connexion

- - {{ form.non_field_errors }} -
- - {{ form.username.errors }} {{ form.username }} -
-
- - {{ form.password.errors }} {{ form.password }} -
- - -
-
-
-{% endblock content %}