125 lines
5.0 KiB
Python
125 lines
5.0 KiB
Python
"""
|
||
Forms for reports app.
|
||
"""
|
||
from django import forms
|
||
from accounts.form_mixins import BotProtectionMixin, BrowserFingerprintMixin, RateLimitMixin
|
||
from .models import ScamReport, TakedownRequest
|
||
|
||
|
||
class ScamReportForm(RateLimitMixin, forms.ModelForm):
|
||
"""Form for creating/editing scam reports."""
|
||
class Meta:
|
||
model = ScamReport
|
||
fields = [
|
||
'title', 'description', 'scam_type',
|
||
'reported_url', 'reported_email', 'reported_phone', 'reported_company',
|
||
'tags', 'is_anonymous'
|
||
]
|
||
widgets = {
|
||
'title': forms.TextInput(attrs={'class': 'form-control'}),
|
||
'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 8}),
|
||
'scam_type': forms.Select(attrs={'class': 'form-control'}),
|
||
'reported_url': forms.URLInput(attrs={'class': 'form-control'}),
|
||
'reported_email': forms.EmailInput(attrs={'class': 'form-control'}),
|
||
'reported_phone': forms.TextInput(attrs={'class': 'form-control'}),
|
||
'reported_company': forms.TextInput(attrs={'class': 'form-control'}),
|
||
'tags': forms.SelectMultiple(attrs={'class': 'form-control'}),
|
||
'is_anonymous': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
|
||
}
|
||
|
||
|
||
class ContactForm(BotProtectionMixin, BrowserFingerprintMixin, forms.Form):
|
||
"""Contact form for users to reach out."""
|
||
name = forms.CharField(
|
||
max_length=200,
|
||
required=True,
|
||
widget=forms.TextInput(attrs={
|
||
'class': 'form-control',
|
||
'placeholder': 'Вашето име'
|
||
}),
|
||
label='Име *'
|
||
)
|
||
email = forms.EmailField(
|
||
required=True,
|
||
widget=forms.EmailInput(attrs={
|
||
'class': 'form-control',
|
||
'placeholder': 'your.email@example.com'
|
||
}),
|
||
label='Имейл *'
|
||
)
|
||
subject = forms.CharField(
|
||
max_length=200,
|
||
required=True,
|
||
widget=forms.TextInput(attrs={
|
||
'class': 'form-control',
|
||
'placeholder': 'Тема на съобщението'
|
||
}),
|
||
label='Тема *'
|
||
)
|
||
message = forms.CharField(
|
||
required=True,
|
||
widget=forms.Textarea(attrs={
|
||
'class': 'form-control',
|
||
'rows': 8,
|
||
'placeholder': 'Вашето съобщение...'
|
||
}),
|
||
label='Съобщение *'
|
||
)
|
||
inquiry_type = forms.ChoiceField(
|
||
choices=[
|
||
('general', 'Общ въпрос'),
|
||
('report_issue', 'Проблем с доклад'),
|
||
('technical', 'Техническа поддръжка'),
|
||
('feedback', 'Обратна връзка'),
|
||
('other', 'Друго'),
|
||
],
|
||
required=True,
|
||
widget=forms.Select(attrs={
|
||
'class': 'form-control'
|
||
}),
|
||
label='Тип заявка *'
|
||
)
|
||
|
||
|
||
class TakedownRequestForm(BotProtectionMixin, BrowserFingerprintMixin, forms.ModelForm):
|
||
"""Form for requesting takedown of a scam report."""
|
||
|
||
class Meta:
|
||
model = TakedownRequest
|
||
fields = ['requester_name', 'requester_email', 'requester_phone', 'reason', 'evidence']
|
||
widgets = {
|
||
'requester_name': forms.TextInput(attrs={
|
||
'class': 'form-control',
|
||
'placeholder': 'Вашето име'
|
||
}),
|
||
'requester_email': forms.EmailInput(attrs={
|
||
'class': 'form-control',
|
||
'placeholder': 'your.email@example.com'
|
||
}),
|
||
'requester_phone': forms.TextInput(attrs={
|
||
'class': 'form-control',
|
||
'placeholder': '+359 XXX XXX XXX (незадължително)'
|
||
}),
|
||
'reason': forms.Textarea(attrs={
|
||
'class': 'form-control',
|
||
'rows': 6,
|
||
'placeholder': 'Обяснете защо смятате, че докладът трябва да бъде премахнат...'
|
||
}),
|
||
'evidence': forms.Textarea(attrs={
|
||
'class': 'form-control',
|
||
'rows': 6,
|
||
'placeholder': 'Предоставете доказателства или допълнителна информация (незадължително)...'
|
||
}),
|
||
}
|
||
labels = {
|
||
'requester_name': 'Име *',
|
||
'requester_email': 'Имейл *',
|
||
'requester_phone': 'Телефон',
|
||
'reason': 'Причина за заявката *',
|
||
'evidence': 'Доказателства / Допълнителна информация',
|
||
}
|
||
help_texts = {
|
||
'reason': 'Моля, обяснете подробно защо смятате, че информацията в доклада е невярна или несправедлива.',
|
||
'evidence': 'Ако имате документи, снимки или друга информация, която подкрепя вашата заявка, моля опишете я тук.',
|
||
}
|