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