237 lines
7.7 KiB
Python
237 lines
7.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from colorful.fields import RGBColorField
|
|
from django.contrib.auth.models import User
|
|
from django.core.exceptions import ValidationError
|
|
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
import os
|
|
from django.conf import settings
|
|
|
|
# Variable globale représentant les pupitres de la fanf
|
|
INSTRU_CHOICES = [
|
|
("Clarinette", _("Clarinette")),
|
|
("Euphonium", _("Euphonium")),
|
|
("Percussion", _("Percussion")),
|
|
("Piccolo", _("Piccolo")),
|
|
("Saxophone Alto", _("Saxophone Alto")),
|
|
("Saxophone Ténor", _("Saxophone Ténor")),
|
|
("Saxophone Baryton", _("Saxophone Baryton")),
|
|
("Souba", _("Souba")),
|
|
("Trombone", _("Trombone")),
|
|
("Trompette", _("Trompette")),
|
|
("Autre", _("Autre")),
|
|
("ne sais pas", _("Je ne sais pas encore")),
|
|
]
|
|
|
|
|
|
class Photo(models.Model):
|
|
"""
|
|
Modèle qui représente les photos du site
|
|
"""
|
|
|
|
|
|
PHOTO_PLACEMENT = (
|
|
("home_join", _("Rejoignez nous")),
|
|
("home_contact", _("Nous Contacter")),
|
|
("home_rep", _("Répertoire de l'acceuil")),
|
|
("login", _("Connexion")),
|
|
("change_membre", _("Modification du profil")),
|
|
("inscription_membre", _("Inscription")),
|
|
("home", _("Calendrier connecté")),
|
|
("liste", _("Agenda public")),
|
|
("part", _("Répertoire")),
|
|
("instru", _("Instruments")),
|
|
("n", _("N'apparait pas")),
|
|
)
|
|
"""Endroits du site où l'on peut mettre des photos"""
|
|
|
|
def validate_image(fieldfile_obj):
|
|
"""
|
|
Fonction qui vérifie si l'image est suffisament petite (probablement pour ne pas surcharger le serveur)
|
|
"""
|
|
filesize = fieldfile_obj.file.size
|
|
mb_limit = 1.0
|
|
if filesize > mb_limit * 1024 * 1024:
|
|
raise ValidationError("La taille max est %sMB" % str(mb_limit))
|
|
|
|
name = models.CharField(max_length=127)
|
|
"""Nom de la photo"""
|
|
|
|
cat = models.CharField(max_length=127, choices=PHOTO_PLACEMENT, default="n")
|
|
"""Memorise l'emplacement de la photo"""
|
|
|
|
auteur = models.CharField( max_length=127, verbose_name=_("Auteur de l'image"), null=True, blank=True)
|
|
"""Nom de l'auteur"""
|
|
|
|
url = models.URLField(verbose_name=_("Lien vers le site de l'auteur"), null=True, blank=True)
|
|
|
|
color = RGBColorField(_("Couleur du nom de l'auteur"), default="#ffffff")
|
|
"""Couleur pour que le copyright ressorte bien"""
|
|
|
|
image = models.ImageField(upload_to="trombonoscope/deco", default=None, validators=[validate_image])
|
|
"""L'image en elle-même"""
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def delete(self):
|
|
os.remove(self.image.path)
|
|
# Pour supprimer une instance du modèle, il faut appeler la méthode delete du parent. Il me semble que les arguments de super ne servent pas et compliquent un éventuel rennomage de classe
|
|
return super(Photo, self).delete()
|
|
|
|
def save(self, *args, **kwargs):
|
|
"""
|
|
Permet d'enregistrer une photo. Si il s'agit d'un update, on remet à jour le chemin de la dossier MEDIA/trombonoscope/doc. Si ce n'est pas un update, il suffit d'enregistrer
|
|
Pour comprendre bien le processus d'update, regarder la vue associée.
|
|
"""
|
|
try:
|
|
this = Photo.objects.get(id=self.id)
|
|
if this.image.path != self.image.path:
|
|
os.remove(this.image.path)
|
|
except Photo.DoesNotExist:
|
|
pass
|
|
super(Photo, self).save(*args, **kwargs)
|
|
|
|
class Meta:
|
|
"""
|
|
Classe de Metadonnées (cf la doc)
|
|
"""
|
|
verbose_name = _("Photo")
|
|
verbose_name_plural = _("Photos")
|
|
|
|
|
|
class ErnestoUser(models.Model):
|
|
"""
|
|
Modèle représentant un fanfaron, il est lié par un `OneToOneField` au modèle d'utilisateur de `django.contrib.auth`
|
|
"""
|
|
|
|
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
|
|
"""Lien avec les utilisateurs de `django.contrib.auth`"""
|
|
|
|
is_ernesto = models.BooleanField(_("Membre de l'Ernestophone"), default=True)
|
|
|
|
is_chef = models.BooleanField(_("Chef Fanfare"), default=False)
|
|
|
|
is_chef_event = models.BooleanField(_("Respo événements"), default=False)
|
|
|
|
is_chef_com = models.BooleanField(_("Respo com"), default=False)
|
|
|
|
is_chef_instru = models.BooleanField(_("Respo instruments"), default=False)
|
|
|
|
phone = models.CharField(
|
|
_("Téléphone"),
|
|
max_length=20,
|
|
blank=True,
|
|
help_text=_("seulement visible par les chef·fe·s"),
|
|
)
|
|
|
|
|
|
#Instruments du fanfaron
|
|
|
|
instru = models.CharField(
|
|
_("Instrument joué"),
|
|
max_length=40,
|
|
blank=False,
|
|
choices=INSTRU_CHOICES,
|
|
default="ne sais pas",
|
|
)
|
|
|
|
instru_autre = models.CharField(
|
|
_("Lequel ?"), null=True, max_length=100, blank=True
|
|
)
|
|
|
|
multi_instrumentiste = models.CharField(
|
|
_("Je suis capable de jouer d'un autre instrument en manche :"),
|
|
default="Non",
|
|
null=False,
|
|
max_length=3,
|
|
choices=[("Non", _("Non")), ("Oui", _("Oui"))],
|
|
help_text=_("Seulement si tu connais les partitions par coeur"),
|
|
)
|
|
instru_bonus = models.CharField(
|
|
_("Le·s·quel·s ?"), null=True, max_length=100, blank=True
|
|
)
|
|
|
|
|
|
slug = models.CharField(max_length=7, editable=False, unique=True)
|
|
|
|
doodlename = models.CharField(_("Nom pour le doodle"), max_length=30, blank=True)
|
|
|
|
#Paramètres pour le trombonoscope
|
|
|
|
COLORS_CHOICES = [
|
|
("#e4522f#ffffff", _("Orange et Blanc")),
|
|
("#ffffff#000000", _("Blanc et Noir")),
|
|
("#A8107C#000000", _("Rose et Noir")),
|
|
("#10A4A8#ffffff", _("Bleu et Blanc")),
|
|
("#26A810#000000", _("Vert et Noir")),
|
|
("#A81026#ffffff", _("Rouge et Blanc")),
|
|
("#E3E54C#000000", _("Jaune et Noir")),
|
|
("autre", _("Autre")),
|
|
]
|
|
|
|
trombonoscope = models.CharField(
|
|
_("Je souhaite apparaitre dans le trombonoscope:"),
|
|
max_length=3,
|
|
blank=False,
|
|
null=True,
|
|
choices=[
|
|
("non", _("Non")),
|
|
("o_a", _("Oui en tant que fanfaron actuel")),
|
|
("o_v", _("Oui en tant que vie·ille·ux")),
|
|
],
|
|
default="non",
|
|
)
|
|
|
|
instru_trombonoscope = models.CharField(
|
|
_("Instrument affiché sur le trombonoscope"), max_length=30, blank=True
|
|
)
|
|
|
|
nom_trombonoscope = models.CharField(
|
|
_("Nom affiché sur le trombonoscope"), max_length=30, blank=True
|
|
)
|
|
trombonoscope_colors = models.CharField(
|
|
_("Couleur du profil"),
|
|
max_length=40,
|
|
blank=False,
|
|
choices=COLORS_CHOICES,
|
|
default="OrangeBlanc",
|
|
)
|
|
|
|
trombonoscope_fond = RGBColorField(
|
|
_("Couleur de fond du profil"), default="#e4522f"
|
|
)
|
|
"""Prend la valeur associée au champs `trombonoscope_colors`"""
|
|
|
|
trombonoscope_texte = RGBColorField(
|
|
_("Couleur du texte du profil"), default="#ffffff"
|
|
)
|
|
"""Prend la valeur associée au champs `trombonoscope_colors`"""
|
|
|
|
class Meta:
|
|
"""Matadonnées"""
|
|
verbose_name = _("Profil Ernestophoniste")
|
|
verbose_name_plural = _("Profil Ernestophoniste")
|
|
|
|
def __str__(self):
|
|
return self.user.username
|
|
|
|
def get_doodlename(self):
|
|
if self.doodlename:
|
|
return self.doodlename
|
|
return self.user.username
|
|
|
|
|
|
class VideoGallery(models.Model):
|
|
"""Objet représentant une vidéo pour le caroussel de la page publique. Le site n'héberge pas de vidéos. On ne stocke que des urls d'iframe."""
|
|
name = models.CharField(max_length=127)
|
|
order = models.IntegerField(verbose_name=_("ordre"))
|
|
url = models.URLField()
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
verbose_name = _("Video")
|
|
verbose_name_plural = _("Videos")
|