39491-vm/core/forms.py
Flatlogic Bot db8313c88e V2
2026-04-05 20:23:53 +00:00

102 lines
3.2 KiB
Python

from django import forms
from django.utils.text import slugify
from .models import Message, ResakaProfile
AVATAR_CHOICES = [
("#22D3EE", "Lagoon"),
("#FF7A59", "Sunset"),
("#9EF3D5", "Mint"),
("#F7C948", "Gold"),
]
REACTION_CHOICES = [
("❤️", "Love"),
("🔥", "Fire"),
("😂", "Laugh"),
("👏", "Clap"),
]
class ProfileForm(forms.ModelForm):
class Meta:
model = ResakaProfile
fields = ["display_name", "handle", "status_text", "avatar_color"]
widgets = {
"display_name": forms.TextInput(attrs={"placeholder": "Ex. Rija", "class": "form-control"}),
"handle": forms.TextInput(attrs={"placeholder": "ex. rija_resaka", "class": "form-control"}),
"status_text": forms.TextInput(attrs={"placeholder": "Disponible pour discuter ce soir", "class": "form-control"}),
"avatar_color": forms.Select(attrs={"class": "form-select"}, choices=AVATAR_CHOICES),
}
labels = {
"display_name": "Nom affiché",
"handle": "Pseudo",
"status_text": "Statut",
"avatar_color": "Couleur avatar",
}
def clean_handle(self):
handle = slugify(self.cleaned_data["handle"])
if not handle:
raise forms.ValidationError("Choisissez un pseudo valide.")
if ResakaProfile.objects.filter(handle=handle).exists():
raise forms.ValidationError("Ce pseudo existe déjà.")
return handle
class ConversationStartForm(forms.Form):
recipient = forms.ModelChoiceField(
queryset=ResakaProfile.objects.none(),
label="Destinataire",
widget=forms.Select(attrs={"class": "form-select"}),
)
body = forms.CharField(
label="Premier message",
max_length=1000,
widget=forms.Textarea(
attrs={
"rows": 3,
"placeholder": "Écris ton premier message privé…",
"class": "form-control",
}
),
)
def __init__(self, *args, active_profile=None, **kwargs):
super().__init__(*args, **kwargs)
queryset = ResakaProfile.objects.all().order_by("display_name")
if active_profile:
queryset = queryset.exclude(pk=active_profile.pk)
self.fields["recipient"].queryset = queryset
self.active_profile = active_profile
def clean_recipient(self):
recipient = self.cleaned_data["recipient"]
if self.active_profile and recipient.pk == self.active_profile.pk:
raise forms.ValidationError("Choisissez un autre profil pour démarrer une discussion.")
return recipient
class MessageForm(forms.ModelForm):
class Meta:
model = Message
fields = ["body"]
widgets = {
"body": forms.Textarea(
attrs={
"rows": 3,
"placeholder": "Tapez un message privé ou ajoutez des emojis…",
"class": "form-control js-message-body",
}
)
}
labels = {"body": "Message"}
class ReactionForm(forms.Form):
reaction = forms.ChoiceField(
choices=REACTION_CHOICES,
widget=forms.HiddenInput(),
)