mpeltriaux
7fdc93fefd
* changes unpublish_on to optional value * simplifies fetching of server message news
58 lines
1.7 KiB
Python
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 |