Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ on:
branches:
- master
- main
- r-v**
pull_request:
branches:
- master
- main
- r-v**

jobs:
build_and_test:
Expand Down
40 changes: 30 additions & 10 deletions src/comms/forms.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
from django import forms
from django.utils import timezone

from comms import models
from utils.forms import HTMLDateInput
from utils.forms import HTMLDateInput, JanewayTranslationModelForm


class NewsItemForm(forms.ModelForm):
class NewsItemForm(JanewayTranslationModelForm):
image_file = forms.FileField(required=False)
tags = forms.CharField(required=False)

def save(self, commit=True):
news_item = super(NewsItemForm, self).save()
posted_tags = self.cleaned_data["tags"].split(",")
news_item.set_tags(posted_tags=posted_tags)
news_item.save()

return news_item

class Meta:
model = models.NewsItem
exclude = (
Expand All @@ -30,3 +23,30 @@ class Meta:
"start_display": HTMLDateInput,
"end_display": HTMLDateInput,
}

def __init__(self, *args, **kwargs):
self.content_type = kwargs.pop("content_type", None)
self.object_id = kwargs.pop("object_id", None)
self.posted_by = kwargs.pop("posted_by", None)
super().__init__(*args, **kwargs)

def save(self, commit=True):
news_item = super().save(commit=False)

# Set the attributes only on first save
if not news_item.pk:
news_item.content_type = self.content_type
news_item.object_id = self.object_id
news_item.posted_by = self.posted_by
news_item.posted = timezone.now()

if commit:
news_item.save()
posted_tags = (
self.cleaned_data["tags"].split(",")
if self.cleaned_data["tags"]
else []
)
news_item.set_tags(posted_tags=posted_tags)

return news_item
48 changes: 48 additions & 0 deletions src/comms/logic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from core import logic as core_logic, files


def handle_uploaded_file(request, uploaded_file):
"""
Handles file upload for news items, ensuring it's a valid image and
saving it appropriately based on content type.

:param request: HttpRequest object
:param uploaded_file: Uploaded file object
:return: File instance if valid, error string otherwise
"""
if not uploaded_file:
return None

if files.guess_mime(uploaded_file.name) not in files.IMAGE_MIMETYPES:
return "File must be an image."

if request.model_content_type.name == "journal":
new_file = files.save_file_to_journal(
request,
uploaded_file,
"News Item",
"News Item",
public=True,
)
core_logic.resize_and_crop(
new_file.journal_path(request.journal),
[750, 324],
"middle",
)
elif request.model_content_type.name == "press":
new_file = files.save_file_to_press(
request,
uploaded_file,
"News Item",
"News Item",
public=True,
)
core_logic.resize_and_crop(
new_file.press_path(),
[750, 324],
"middle",
)
else:
return "Invalid content type for file upload."

return new_file
Loading
Loading