aboutsummaryrefslogtreecommitdiffstats
path: root/pyblackbird_cc/resources/forms.py
diff options
context:
space:
mode:
authorMatthew Lemon <y@yulqen.org>2024-10-15 21:01:31 +0100
committerMatthew Lemon <y@yulqen.org>2024-10-15 21:01:31 +0100
commiteeaddb27560d723ca7d61359744ceb2709fccd2d (patch)
tree04ddbc49ae7b73d5f5a9e1716d7227aecd3b9f85 /pyblackbird_cc/resources/forms.py
parent7a3044c859043837e6c7c95bb4894d04e9b2cbc2 (diff)
Renamed from pyblackbird_cc to alphabetlearning - everywhere
Diffstat (limited to 'pyblackbird_cc/resources/forms.py')
-rw-r--r--pyblackbird_cc/resources/forms.py274
1 files changed, 0 insertions, 274 deletions
diff --git a/pyblackbird_cc/resources/forms.py b/pyblackbird_cc/resources/forms.py
deleted file mode 100644
index 2774da5..0000000
--- a/pyblackbird_cc/resources/forms.py
+++ /dev/null
@@ -1,274 +0,0 @@
-import logging
-
-import magic
-from crispy_forms.bootstrap import FormActions
-from crispy_forms.helper import FormHelper
-from crispy_forms.layout import Button
-from crispy_forms.layout import Field
-from crispy_forms.layout import Layout
-from crispy_forms.layout import Submit
-from django import forms
-
-from pyblackbird_cc.resources.models import Resource
-from pyblackbird_cc.resources.models import ResourceCategory
-from pyblackbird_cc.resources.models import ResourceSubcategory
-from pyblackbird_cc.resources.models import ResourceType
-
-from .models import AGE_RANGE_CHOICES
-from .models import CURRICULUM_CHOICES
-
-logger = logging.getLogger(__name__)
-
-ALLOWED_THUMBNAILS = 5
-ALLOWED_PDFS = 20
-
-
-def _create_choices_tuple() -> list[tuple[str, str]]:
- """Returns a list of tuples containing resource subcategory names."""
- vals = sorted(ResourceSubcategory.objects.values_list("name", flat=True), key=str)
- out = tuple((x, x) for x in vals)
- return out
-
-
-class ResourceCreateForm(forms.Form):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.helper = FormHelper(self)
- self.helper.add_input(Submit("submit", "Submit"))
- self.fields["subcategories"].choices = _create_choices_tuple()
- pass
-
- error_css_class = "error"
- required_css_class = "required"
-
- name = forms.CharField(
- max_length=255,
- help_text="Concisely describe what the resource is, aiming for"
- " in 35-45 characters. "
- "eg: 'Fractions KS2 Worksheet and Answers.'",
- )
- description = forms.CharField(
- max_length=5000,
- widget=forms.Textarea,
- help_text=" You can (and should) use <strong>Markdown</strong> here. "
- "This is your opportunity to clearly explain what your resource "
- "is all "
- "about! It’s worth remembering that you are using the space to "
- "communicate to two "
- "different audiences. Firstly, think about what fellow teachers "
- "would like "
- "to know, such as exactly what the resource contains and how it "
- "could be used in the classroom. Secondly, the words you include "
- "on this page are also talking to internal and external search "
- "engines."
- " External search engines, like Google, show the first 155 characters "
- "of the resource description, so make sure you take advantage "
- "of these "
- "characters by using lots of relevant keywords as part of an "
- "enticing pitch.",
- )
- card_description = forms.CharField(
- max_length=1000,
- widget=forms.Textarea,
- help_text=(
- "If you enter text here, it will be used in the 'card' description "
- "box on the home page. Max 1000 characters."
- ),
- )
- resource_type = forms.ModelChoiceField(queryset=ResourceType.objects.all())
- age_range = forms.ChoiceField(
- choices=AGE_RANGE_CHOICES,
- help_text="Try to be accurate in your choice of age range so that your resource "
- "shows up in the correct searches. (Although we don't have searches yet!)",
- )
- curriculum = forms.ChoiceField(
- choices=CURRICULUM_CHOICES,
- required=False,
- )
- main_resource_category = forms.ModelChoiceField(
- queryset=ResourceCategory.objects.all(),
- help_text="Categorise your resource by subject so it shows up in the correct "
- "searches. It's a good idea to limit the number of subjects you select "
- "to one or two to make your resource easier to find.",
- )
- subcategories = forms.MultipleChoiceField(
- required=False,
- )
-
- pdf_files = forms.FileField(
- widget=forms.TextInput(
- attrs={
- "multiple": True,
- "type": "File",
- "required": True,
- },
- ),
- required=False,
- help_text="You can multi-select up to 20 .pdf files here.",
- label="PDF files",
- )
- thumbnail_files = forms.FileField(
- widget=forms.TextInput(
- attrs={
- "multiple": True,
- "type": "File",
- "required": True,
- },
- ),
- required=False,
- label="Cover images",
- help_text="Your cover image will be displayed in the search results and as "
- "the first image on your resource page in the preview function. "
- "It is important to add an eye catching cover image that gives "
- "other teachers an idea about what your resource contains. "
- "You can multi-select up to 5 .png or .jpg files here.",
- )
- pdf_files.widget.attrs.update({"class": "file_upload", "accept": ".pdf"})
- thumbnail_files.widget.attrs.update({"class": "file_upload", "accept": ".png,.jpg"})
- feature_slot = forms.IntegerField(
- min_value=1,
- max_value=3,
- required=False,
- help_text=(
- "Please enter either 1, 2 or 3 here. This will dictate where on the page "
- "this resource will feature on the main list page."
- ),
- )
-
- def clean_thumbnail_files(self):
- thumbnail_files = self.files.getlist("thumbnail_files")
- if not thumbnail_files:
- raise forms.ValidationError("Please select at least one thumbnail file.")
- acceptable = ["image/png", "image/jpeg"]
- for f in thumbnail_files:
- content_type = magic.from_buffer(f.file.read(), mime=True)
- f.file.seek(0)
- if content_type not in acceptable:
- raise forms.ValidationError("Please select only PNG or JPG files.")
- if len(thumbnail_files) > ALLOWED_THUMBNAILS:
- raise forms.ValidationError("Please select up to 5 files.")
- return thumbnail_files
-
- def clean_pdf_files(self):
- pdf_files = self.files.getlist("pdf_files")
- if not pdf_files:
- raise forms.ValidationError("Please select at least one PDF file.")
- acceptable = ["application/pdf"]
- for f in pdf_files:
- content_type = magic.from_buffer(f.file.read(), mime=True)
- f.file.seek(0)
- if content_type not in acceptable:
- raise forms.ValidationError("Please select only PDF files.")
- if len(pdf_files) > ALLOWED_PDFS:
- raise forms.ValidationError("Please select up to 20 PDF files.")
- return pdf_files
-
-
-class ResourceUpdateMetadataForm(forms.ModelForm):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.helper = FormHelper(self)
- self.helper.add_input(Submit("submit", "Submit"))
- self.fields["subcategories"].queryset = ResourceSubcategory.objects.all().order_by("name")
-
- error_css_class = "error"
- required_css_class = "required"
-
- class Meta:
- model = Resource
- fields = [
- "name",
- "description",
- "card_description",
- "resource_type",
- "age_range",
- "curriculum",
- "main_resource_category",
- "subcategories",
- "feature_slot",
- ]
-
-
-class ResourceUpdatePDFsForm(forms.Form):
- def __init__(self, cancel_url: str, *args, **kwargs):
- try:
- self.resource = kwargs.pop("resource")
- except KeyError:
- pass
- super().__init__(*args, **kwargs)
- self.helper = FormHelper(self)
- self.helper.layout = Layout(
- Field("pdf_files"),
- FormActions(
- Submit("submit", "Submit", css_class="btn btn-primary"),
- Button("cancel", "Cancel", css_class="btn btn-danger", onclick="location.href=''"),
- ),
- )
-
- pdf_files = forms.FileField(
- widget=forms.TextInput(
- attrs={
- "multiple": True,
- "type": "File",
- "required": True,
- },
- ),
- required=False,
- help_text="You can multi-select up to 20 .pdf files here.",
- label="PDF files",
- )
-
- pdf_files.widget.attrs.update({"class": "file_upload", "accept": ".pdf"})
-
- def clean_pdf_files(self):
- pdf_files = self.files.getlist("pdf_files")
- if not pdf_files:
- raise forms.ValidationError("Please select at least one PDF file.")
- acceptable = ["application/pdf"]
- for f in pdf_files:
- content_type = magic.from_buffer(f.file.read(), mime=True)
- f.file.seek(0)
- if content_type not in acceptable:
- raise forms.ValidationError("Please select only PDF files.")
- if len(pdf_files) > ALLOWED_PDFS:
- raise forms.ValidationError("Please select up to 20 PDF files.")
- return pdf_files
-
-
-class ResourceUpdateThumbnailsForm(forms.Form):
- def __init__(self, *args, **kwargs):
- try:
- self.resource = kwargs.pop("resource")
- except KeyError:
- pass
- super().__init__(*args, **kwargs)
- self.helper = FormHelper(self)
- self.helper.add_input(Submit("submit", "Submit"))
-
- thumbnail_files = forms.FileField(
- widget=forms.TextInput(
- attrs={
- "multiple": True,
- "type": "File",
- "required": True,
- },
- ),
- required=False,
- label="Thumbnail files",
- help_text="You can upload 5 files.",
- )
- thumbnail_files.widget.attrs.update({"class": "file_upload", "accept": ".png,.jpg"})
-
- def clean_thumbnail_files(self):
- thumbnail_files = self.files.getlist("thumbnail_files")
- if not thumbnail_files:
- raise forms.ValidationError("Please select at least one thumbnail file.")
- acceptable = ["image/png", "image/jpeg"]
- for f in thumbnail_files:
- content_type = magic.from_buffer(f.file.read(), mime=True)
- f.file.seek(0)
- if content_type not in acceptable:
- raise forms.ValidationError("Please select only PNG or JPG files.")
- if len(thumbnail_files) > ALLOWED_THUMBNAILS:
- raise forms.ValidationError("Please select up to 5 files.")
- return thumbnail_files