You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
konova/news/models.py

58 lines
1.7 KiB
Python

from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from konova.models import BaseResource
from user.models import UserActionLogEntry
class ServerMessageImportance(models.TextChoices):
"""
Defines importance levels for server messages
"""
DEFAULT = "default", _("Default")
INFO = "info", _("Info")
WARNING = "warning", _("Warning")
class ServerMessage(BaseResource):
"""
Holds messages, which can be displayed on the user's dashboard
"""
subject = models.CharField(max_length=500, null=False, blank=False)
body = models.TextField()
is_active = models.BooleanField(default=True)
publish_on = models.DateTimeField()
unpublish_on = models.DateTimeField(null=True, blank=True)
importance = models.CharField(max_length=100, choices=ServerMessageImportance.choices)
def save(self, user=None, *args, **kwargs):
user = kwargs.pop("user", None)
if user is not None:
if self.created is None:
self.created = UserActionLogEntry.get_created_action(user)
else:
self.modified = UserActionLogEntry.get_edited_action(user)
super().save(*args, **kwargs)
@staticmethod
def get_current_news():
""" Getter for the most current news
Meaning the ones that are
* activated
* publish_on has passed
* unpublish_on (if set) has not been passed, yet
"""
now = timezone.now()
news = ServerMessage.objects.filter(
is_active=True,
publish_on__lte=now,
).exclude(
unpublish_on__lte=now,
).order_by(
"-publish_on"
)
return news