Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • mediatek/site-interludes
  • aeltheos/site-kwei
  • mediatek/site-kwei
3 results
Show changes
# Generated by Django 3.0.8 on 2021-04-24 15:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('site_settings', '0003_auto_20210407_1420'),
]
operations = [
migrations.AddField(
model_name='sitesettings',
name='planning_caption',
field=models.TextField(blank=True, help_text='Légende du planning (au format HTML). Les couleurs sont accessibles dans le stylevia var(--color_1), var(--color_1_fg) et var(--color_1_hover)', null=True, verbose_name='Légende du planning'),
),
]
# Generated by Django 3.0.8 on 2021-04-25 15:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('site_settings', '0004_sitesettings_planning_caption'),
]
operations = [
migrations.RemoveField(
model_name='sitesettings',
name='planning_caption',
),
migrations.AddField(
model_name='sitesettings',
name='planning_file',
field=models.FileField(blank=True, null=True, upload_to='', verbose_name='Version PDF du planning'),
),
]
from datetime import timedelta
from pathlib import Path
from django.db import models
from django.core.cache import cache
from django.core.files.storage import FileSystemStorage
from django.utils.timezone import now
class Colors(models.TextChoices):
"""Couleur d'affichage dans le planning
Leur code HTML est hardcodé dans la template '_planning.html'."""
RED = "a", "Rouge"
ORANGE = "b", "Orange"
YELLOW = "c", "Jaune"
GREEN = "d", "Vert"
BLUE = "e", "Bleu"
DARK_BLUE = "f", "Bleu foncé"
BLACK = "g", "Noir"
class OverwriteStorage(FileSystemStorage):
"""used to enforcing a fixed filename to upload file
This allow for a constant link to a changeable file"""
filename = "PlanningInterludes"
def get_available_name(self, name, **kwargs):
"""
Returns a filename that's free on the target storage system, and
available for new content to be written to.
"""
# If the filename already exists, remove it as if it was a true file system
extension = Path(name).suffix
new_name = self.filename + extension
if self.exists(new_name):
self.delete(new_name)
return super(FileSystemStorage, self).get_available_name(new_name, **kwargs)
class SingletonModel(models.Model):
"""Table de la BDD qui ne possède qu'un seul élément"""
class Meta:
......@@ -35,12 +68,26 @@ class SingletonModel(models.Model):
class SiteSettings(SingletonModel):
"""Réglages globaux du site"""
contact_email = models.EmailField("Email contact", blank=True, null=True)
hosting_school = models.CharField(
"École hébergeant l'événement", max_length=50, blank=True, null=True
)
date_start = models.DateField("Date de début", blank=True, null=True)
date_end = models.DateField("Date de fin", blank=True, null=True)
registrations_open = models.BooleanField("Ouvrir la création de compte", default=False)
registrations_open = models.BooleanField("Ouvrir la création de compte", default=True)
inscriptions_open = models.BooleanField("Ouvrir les inscriptions", default=False)
activity_submission_open = models.BooleanField(
"Ouvrir l'ajout d'activité", default=False,
help_text="Permet de proposer une activité via le formulaire dédié"
)
show_host_emails = models.BooleanField(
"Afficher les mails des orgas d'activités", default=False,
help_text="Ces mail sont affichés sur la page activités pour que les gens puissent les contacter",
)
inscriptions_start = models.DateTimeField("Ouverture des inscriptions",
blank=True, null=True,
......@@ -54,6 +101,7 @@ class SiteSettings(SingletonModel):
display_planning = models.BooleanField("Afficher le planning", default=False)
planning_file = models.FileField(
verbose_name="Version PDF du planning", null=True, blank=True,
storage=OverwriteStorage(),
)
activities_allocated = models.BooleanField(
......@@ -61,10 +109,6 @@ class SiteSettings(SingletonModel):
help_text="Suppose que l'allocation des activités a été effectuée."
)
activity_submission_form = models.CharField(
"Lien pour soumettre une activité", max_length=200, default="",
blank=True, null=True
)
discord_link = models.CharField(
"Lien du serveur discord", max_length=200, blank=True, null=True
)
......@@ -91,6 +135,37 @@ class SiteSettings(SingletonModel):
help_text="Assurez vous que le message est bien formaté, cela peut casser toutes les pages du site",
)
# Légende du planning modifiable
caption_red = models.CharField(
"Légende planning (rouge)", default="Jeux de rôle grandeur nature",
blank=True, null=True, max_length=200,
)
caption_orange = models.CharField(
"Légende planning (orange)", default="Jeux de rôle sur table",
blank=True, null=True, max_length=200,
)
caption_yellow = models.CharField(
"Légende planning (jaune)", default="Activités libres",
blank=True, null=True, max_length=200,
)
caption_green = models.CharField(
"Légende planning (vert)", default="Tournois",
blank=True, null=True, max_length=200,
)
caption_blue = models.CharField(
"Légende planning (bleu)", default="Événements de début et fin",
blank=True, null=True, max_length=200,
)
caption_dark_blue = models.CharField(
"Légende planning (bleu foncé)", default="Jeux vidéos",
blank=True, null=True, max_length=200,
)
caption_black = models.CharField(
"Légende planning (noir)", default="Autre",
blank=True, null=True, max_length=200,
)
@property
def contact_email_reversed(self) -> str:
return self.contact_email[::-1]
......@@ -113,6 +188,17 @@ class SiteSettings(SingletonModel):
if self.date_start:
return self.date_start + timedelta(days=1)
@property
def has_caption(self) -> bool:
"""Vérifie si l'une des légende est non-nulle"""
return self.caption_red \
or self.caption_orange \
or self.caption_yellow \
or self.caption_green \
or self.caption_blue \
or self.caption_dark_blue \
or self.caption_black
class Meta:
verbose_name = "paramètres"
verbose_name_plural = "paramètres"
......