ausglamr/blogs/forms.py
2024-03-23 16:23:41 +11:00

168 lines
4.1 KiB
Python

"""forms for use in views"""
from django import forms
from django.core.exceptions import ValidationError
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from .models import Blog, CallForPapers, Event, Group, Newsletter, Subscriber
class DateInput(forms.DateInput):
"""make date input a date picker"""
input_type = "date"
class RegisterBlogForm(forms.ModelForm):
"""form for registering a blog"""
class Meta:
"""set fields and model"""
model = Blog
fields = ["url", "category", "activitypub_account_name", "contact_email"]
class ConfirmBlogForm(forms.ModelForm):
"""confirm all details are correct before final blog submission"""
class Meta:
"""set fields and model"""
model = Blog
fields = [
"url",
"feed",
"title",
"author_name",
"description",
"category",
"activitypub_account_name",
"contact_email",
]
class RegisterConferenceForm(forms.ModelForm):
"""form for registering a event"""
class Meta:
"""set fields and model"""
model = Event
fields = [
"name",
"url",
"category",
"description",
"start_date",
"activitypub_account_name",
"contact_email",
]
widgets = {
"start_date": DateInput(),
}
class RegisterCallForPapersForm(forms.ModelForm):
"""form for registering a CallForPapers"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# we don't want every event ever created to be listed
self.fields["event"].queryset = Event.objects.filter(
approved=True, start_date__gte=timezone.now()
).order_by("start_date")
class Meta:
"""set fields and model"""
model = CallForPapers
fields = ["event", "name", "details", "opening_date", "closing_date"]
widgets = {
"opening_date": DateInput(),
"closing_date": DateInput(),
}
help_texts = {
"name": _("'Call for papers', 'Call for participation' etc"),
}
class RegisterGroupForm(forms.ModelForm):
"""form for registering a group"""
class Meta:
"""set fields and model"""
model = Group
fields = [
"name",
"category",
"type",
"url",
"registration_url",
"description",
"contact_email",
]
class RegisterNewsletterForm(forms.ModelForm):
"""form for registering a newsletter"""
class Meta:
"""set fields and model"""
model = Newsletter
fields = [
"name",
"author_name",
"category",
"url",
"feed",
"description",
"activitypub_account_name",
"contact_email",
]
help_texts = {
"feed": _(
"The Atom/RSS feed of your newsletter. If you include this, issues will be shown in AusGLAMR"
),
}
class ContactForm(forms.Form):
"""form for contacting site admin"""
from_email = forms.EmailField(label="Email", max_length=200)
subject = forms.CharField(label="Subject", max_length=200)
message = forms.CharField(widget=forms.Textarea)
bot_check = forms.CharField(
label="What is usually stored in a library?",
max_length=10,
help_text="Checking that you are human"
)
def clean_bot_check(self):
"""validate the bot check"""
data = self.cleaned_data["bot_check"]
if data != "books":
raise ValidationError("Try again. Think of something with pages.")
class SubscribeViaMastodon(forms.Form):
"""form for subscribing to Mastodon bot"""
username = forms.CharField(label="Username", max_length=200)
class SubscribeEmailForm(forms.ModelForm):
"""subscribe via email form"""
class Meta:
"""set fields and model"""
model = Subscriber
fields = ["email"]