from django.db import models class Resource(models.Model): CATEGORY_CHOICES = [ ('svt-seconde', 'SVT — Seconde'), ('svt-premiere', 'SVT — Spécialité Première'), ('svt-terminale', 'SVT — Spécialité Terminale'), ('bph', 'BPH — ST2S'), ('sbm', 'SBM — IFSI'), ('stl-premiere', '3 BIO — Première STL'), ('stl-terminale', '3 BIO — Terminale STL'), ] KIND_CHOICES = [('pdf', 'Document PDF'), ('video', 'Vidéo'), ('link', 'Lien externe')] title = models.CharField(max_length=220) description = models.CharField(max_length=400, blank=True) category = models.CharField(max_length=32, choices=CATEGORY_CHOICES, db_index=True) kind = models.CharField(max_length=12, choices=KIND_CHOICES, default='pdf') url = models.URLField(max_length=1000) published = models.BooleanField(default=True, db_index=True) position = models.PositiveIntegerField(default=0) created_at = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['category', 'position', 'id'] verbose_name = 'Ressource' verbose_name_plural = 'Ressources' def __str__(self): return f'{self.get_category_display()} — {self.title}' class Testimonial(models.Model): author = models.CharField(max_length=100) description = models.CharField(max_length=120, blank=True) quote = models.TextField(max_length=1500) published = models.BooleanField(default=True) position = models.PositiveIntegerField(default=0) class Meta: ordering = ['position', '-id'] verbose_name = 'Avis' verbose_name_plural = 'Avis' def __str__(self): return self.author class ContactMessage(models.Model): name = models.CharField(max_length=100) email = models.EmailField() phone = models.CharField(max_length=35, blank=True) level = models.CharField(max_length=100, blank=True) message = models.TextField(max_length=3000) accepted_privacy = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) read = models.BooleanField(default=False) class Meta: ordering = ['-created_at'] verbose_name = 'Message de contact' verbose_name_plural = 'Messages de contact' def __str__(self): return f'{self.name} — {self.created_at:%d/%m/%Y}' class Announcement(models.Model): title = models.CharField(max_length=150) body = models.TextField(max_length=1200) cta_label = models.CharField(max_length=70, default='Me contacter') active = models.BooleanField(default=True) starts_at = models.DateField(null=True, blank=True) ends_at = models.DateField(null=True, blank=True) class Meta: verbose_name = 'Annonce / offre' verbose_name_plural = 'Annonces / offres' def __str__(self): return self.title class SiteContent(models.Model): """Personnalisation des textes, liens et images du site public.""" key = models.CharField(max_length=100, primary_key=True) value = models.TextField(max_length=4000, blank=True) modified_at = models.DateTimeField(auto_now=True) class Meta: verbose_name = 'Texte / image du site' verbose_name_plural = 'Textes et images du site' def __str__(self): return self.key