From d1f2d9812f766a79f874fa3fbf5c6d71d481dda8 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 19 May 2021 13:56:00 -0700 Subject: [PATCH] Adds model for instance admin announcements --- bookwyrm/admin.py | 1 - bookwyrm/context_processors.py | 5 ++- bookwyrm/migrations/0075_announcement.py | 57 ++++++++++++++++++++++++ bookwyrm/models/__init__.py | 1 + bookwyrm/models/announcement.py | 24 ++++++++++ 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 bookwyrm/migrations/0075_announcement.py create mode 100644 bookwyrm/models/announcement.py diff --git a/bookwyrm/admin.py b/bookwyrm/admin.py index efe5e9d72..f028dea08 100644 --- a/bookwyrm/admin.py +++ b/bookwyrm/admin.py @@ -2,7 +2,6 @@ from django.contrib import admin from bookwyrm import models -admin.site.register(models.SiteSettings) admin.site.register(models.User) admin.site.register(models.FederatedServer) admin.site.register(models.Connector) diff --git a/bookwyrm/context_processors.py b/bookwyrm/context_processors.py index f5f251866..0dd32c7f4 100644 --- a/bookwyrm/context_processors.py +++ b/bookwyrm/context_processors.py @@ -4,4 +4,7 @@ from bookwyrm import models def site_settings(request): # pylint: disable=unused-argument """include the custom info about the site""" - return {"site": models.SiteSettings.objects.get()} + return { + "site": models.SiteSettings.objects.get(), + "announcements": models.Announcement.active_announcements(), + } diff --git a/bookwyrm/migrations/0075_announcement.py b/bookwyrm/migrations/0075_announcement.py new file mode 100644 index 000000000..ec51b6caa --- /dev/null +++ b/bookwyrm/migrations/0075_announcement.py @@ -0,0 +1,57 @@ +# Generated by Django 3.2 on 2021-05-19 20:58 + +import bookwyrm.models.fields +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0074_auto_20210511_1829"), + ] + + operations = [ + migrations.CreateModel( + name="Announcement", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created_date", models.DateTimeField(auto_now_add=True)), + ("updated_date", models.DateTimeField(auto_now=True)), + ( + "remote_id", + bookwyrm.models.fields.RemoteIdField( + max_length=255, + null=True, + validators=[bookwyrm.models.fields.validate_remote_id], + ), + ), + ("name", models.CharField(max_length=255)), + ("preview", models.CharField(max_length=255)), + ("content", models.TextField()), + ("event_date", models.DateTimeField(blank=True, null=True)), + ("start_date", models.DateTimeField(blank=True, null=True)), + ("end_date", models.DateTimeField(blank=True, null=True)), + ("active", models.BooleanField(default=True)), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "abstract": False, + }, + ), + ] diff --git a/bookwyrm/models/__init__.py b/bookwyrm/models/__init__.py index 2a25a5251..6f378e83c 100644 --- a/bookwyrm/models/__init__.py +++ b/bookwyrm/models/__init__.py @@ -25,6 +25,7 @@ from .federated_server import FederatedServer from .import_job import ImportJob, ImportItem from .site import SiteSettings, SiteInvite, PasswordReset, InviteRequest +from .announcement import Announcement cls_members = inspect.getmembers(sys.modules[__name__], inspect.isclass) activity_models = { diff --git a/bookwyrm/models/announcement.py b/bookwyrm/models/announcement.py new file mode 100644 index 000000000..63f104c30 --- /dev/null +++ b/bookwyrm/models/announcement.py @@ -0,0 +1,24 @@ +""" admin announcements """ +from django.db import models +from django.utils import timezone + +from .base_model import BookWyrmModel + + +class Announcement(BookWyrmModel): + """The admin has something to say""" + + user = models.ForeignKey("User", on_delete=models.PROTECT) + name = models.CharField(max_length=255) + preview = models.CharField(max_length=255) + content = models.TextField() + event_date = models.DateTimeField(blank=True, null=True) + start_date = models.DateTimeField(blank=True, null=True) + end_date = models.DateTimeField(blank=True, null=True) + active = models.BooleanField(default=True) + + @classmethod + def active_announcements(cls): + """announcements that should be displayed""" + now = timezone.now() + return cls.objects.filter(active=True, start_date__lte=now, end_date__gte=now)