diff --git a/fet2020/fet2020/views.py b/fet2020/fet2020/views.py index 6f8ff96b..7e1b65a5 100644 --- a/fet2020/fet2020/views.py +++ b/fet2020/fet2020/views.py @@ -6,17 +6,18 @@ from posts.models import Event, FetMeeting, Post def index(request): - posts = deque(Post.articles.date_sorted_list()) + posts = Post.articles.date_sorted_list() + # A maximum of 5 posts should be displayed on the startpage. + post_count = 5 - # set the pinned post - pinned_post = Post.articles.pinned() - if pinned_post: - # remove the pinned post - posts.remove(pinned_post) + # Set the pinned post. + if pinned_post := Post.articles.pinned(): + posts = posts.exclude(id=pinned_post.id) + post_count -= 1 featured_event = Event.only_events.future_events().first() - # if there is no futurity event - if not featured_event: + # If there is no futurity event, get the last event. + if featured_event is None: featured_event = Event.only_events.past_events().first() featured_meeting = deque([]) @@ -24,7 +25,7 @@ def index(request): featured_meeting.append(FetMeeting.objects.past_events().first()) context = { - "posts": deque(list(posts)[:5]), + "posts": posts[:post_count], "events": Event.all_events.future_events()[:5], "featured_post": pinned_post, "featured_event": featured_event, diff --git a/fet2020/posts/forms.py b/fet2020/posts/forms.py index 55f759d6..0e87b5ea 100644 --- a/fet2020/posts/forms.py +++ b/fet2020/posts/forms.py @@ -40,7 +40,10 @@ class NewsForm(PostForm): "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." ), "image": "Verwendbare Formate: ...", - "is_pinned": ("Dieser Post soll an die Startseite als erster Post angeheftet werden."), + "is_pinned": ( + "Der Post soll als erster auf der Startseite angeheftet werden und sich " + "automatisch einen Monat nach der Veröffentlichung wieder lösen." + ), } labels = { @@ -72,7 +75,10 @@ class EventForm(PostForm): "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." ), "image": "Verwendbare Formate: Bildformate", - "is_pinned": ("Dieses Event soll an die Startseite als erster Post angeheftet werden."), + "is_pinned": ( + "Dieses Event soll als erstes auf der Startseite angeheftet werden und sich " + "automatisch einen Monat nach der Veröffentlichung wieder lösen." + ), } labels = { @@ -115,7 +121,7 @@ class FetMeetingForm(PostForm): } help_texts = { - "event_end": "Bei leerer Eingabe werden 2h zur Startzeit dazugezählt.", + "event_end": "Bei einer leeren Eingabe werden 2 Stunden zur Startzeit dazugezählt.", "tags": ( "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." ), @@ -223,7 +229,7 @@ class FetMeetingCreateForm(forms.ModelForm): fields = ["event_start", "event_end", "event_place"] help_texts = { - "event_end": "Bei leerer Eingabe werden 2h zur Startzeit dazugezählt.", + "event_end": "Bei einer leeren Eingabe werden 2 Stunden zur Startzeit dazugezählt.", } labels = { diff --git a/fet2020/posts/managers.py b/fet2020/posts/managers.py index f12bca8b..e697fa4c 100644 --- a/fet2020/posts/managers.py +++ b/fet2020/posts/managers.py @@ -1,3 +1,5 @@ +import datetime + from django.db import models from django.db.models import Case, Q, When from django.utils import timezone @@ -80,7 +82,32 @@ class ArticleManager(PublishedManager, models.Manager): return self.published(public) def pinned(self, public=True): - return self.published(public).filter(is_pinned=True).first() + # Get date for pinned news that is max 1 month old. + post_date = datetime.date.today() + __month = post_date.month + __year = post_date.year + + if __month != 0: + __month -= 1 + else: + # If the current month is January, you get the date from December of previous year. + __month = 12 + __year -= 1 + + post_date = post_date.replace(year=__year, month=__month) + + # Get date for event posts that is max 7 days old. + event_date = datetime.date.today() - datetime.timedelta(7) + + return ( + self.published(public) + .filter(is_pinned=True) + .filter( + (Q(post_type="N") & Q(public_date__gt=post_date)) + | (Q(post_type="E") & Q(event_end__date__gt=event_date)) + ) + .first() + ) class NewsManager(PublishedManager, models.Manager):