From 4932c31c812e9d08a0f009cbc26edd205db9a00f Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Thu, 7 Sep 2023 23:01:56 +0200 Subject: [PATCH] Add announcement #544 --- messages.pot | 60 ++++++++++-------- migrations/versions/d2c04be821a7_.py | 28 ++++++++ project/forms/admin.py | 1 + project/jinja_filters.py | 11 ++++ project/models/settings.py | 12 ++-- project/services/admin.py | 10 ++- project/templates/_messages.html | 5 ++ project/templates/admin/settings.html | 1 + project/templates/home.html | 1 + project/templates/layout.html | 4 +- .../translations/de/LC_MESSAGES/messages.mo | Bin 46528 -> 46570 bytes .../translations/de/LC_MESSAGES/messages.po | 60 ++++++++++-------- .../translations/en/LC_MESSAGES/messages.mo | Bin 4214 -> 4214 bytes .../translations/en/LC_MESSAGES/messages.po | 60 ++++++++++-------- tests/views/test_root.py | 13 ++++ 15 files changed, 174 insertions(+), 92 deletions(-) create mode 100644 migrations/versions/d2c04be821a7_.py diff --git a/messages.pot b/messages.pot index 8e2f664..213d042 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-09-06 17:11+0200\n" +"POT-Creation-Date: 2023-09-07 22:40+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -232,34 +232,38 @@ msgstr "" msgid "Start page" msgstr "" -#: project/forms/admin.py:17 project/forms/oauth2_client.py:24 +#: project/forms/admin.py:16 +msgid "Announcement" +msgstr "" + +#: project/forms/admin.py:18 project/forms/oauth2_client.py:24 #: project/forms/user.py:13 msgid "Save" msgstr "" -#: project/forms/admin.py:22 +#: project/forms/admin.py:23 msgid "Reset for all users" msgstr "" -#: project/forms/admin.py:24 +#: project/forms/admin.py:25 msgid "Reset" msgstr "" -#: project/forms/admin.py:28 project/forms/admin_unit_member.py:14 +#: project/forms/admin.py:29 project/forms/admin_unit_member.py:14 #: project/forms/admin_unit_member.py:34 msgid "Roles" msgstr "" -#: project/forms/admin.py:29 project/templates/admin/update_user.html:4 +#: project/forms/admin.py:30 project/templates/admin/update_user.html:4 #: project/templates/admin/update_user.html:8 msgid "Update user" msgstr "" -#: project/forms/admin.py:33 project/templates/admin/delete_user.html:6 +#: project/forms/admin.py:34 project/templates/admin/delete_user.html:6 msgid "Delete user" msgstr "" -#: project/forms/admin.py:34 project/forms/admin_unit.py:58 +#: project/forms/admin.py:35 project/forms/admin_unit.py:58 #: project/forms/admin_unit_member.py:12 project/forms/admin_unit_member.py:25 #: project/forms/admin_unit_member.py:30 project/forms/event.py:112 #: project/forms/event_suggestion.py:38 project/forms/organizer.py:33 @@ -271,60 +275,60 @@ msgstr "" msgid "Email" msgstr "" -#: project/forms/admin.py:39 +#: project/forms/admin.py:40 msgid "Incoming reference requests allowed" msgstr "" -#: project/forms/admin.py:40 +#: project/forms/admin.py:41 msgid "" "If set, other organizations can ask this organization to reference their " "event." msgstr "" -#: project/forms/admin.py:46 +#: project/forms/admin.py:47 msgid "Suggestions enabled" msgstr "" -#: project/forms/admin.py:47 +#: project/forms/admin.py:48 msgid "If set, the organization can work with suggestions." msgstr "" -#: project/forms/admin.py:51 +#: project/forms/admin.py:52 msgid "Create other organizations" msgstr "" -#: project/forms/admin.py:52 +#: project/forms/admin.py:53 msgid "If set, members of the organization can create other organizations." msgstr "" -#: project/forms/admin.py:58 +#: project/forms/admin.py:59 msgid "Invite other organizations" msgstr "" -#: project/forms/admin.py:59 +#: project/forms/admin.py:60 msgid "If set, members of the organization can invite other organizations." msgstr "" -#: project/forms/admin.py:65 +#: project/forms/admin.py:66 msgid "Verify other organizations" msgstr "" -#: project/forms/admin.py:66 +#: project/forms/admin.py:67 msgid "If set, members of the organization can verify other organizations." msgstr "" -#: project/forms/admin.py:71 project/templates/admin/update_admin_unit.html:4 +#: project/forms/admin.py:72 project/templates/admin/update_admin_unit.html:4 #: project/templates/admin/update_admin_unit.html:8 msgid "Update organization" msgstr "" -#: project/forms/admin.py:75 project/templates/admin/delete_admin_unit.html:6 +#: project/forms/admin.py:76 project/templates/admin/delete_admin_unit.html:6 #: project/templates/admin_unit/request_deletion.html:6 #: project/templates/admin_unit/update.html:94 msgid "Delete organization" msgstr "" -#: project/forms/admin.py:76 project/forms/admin_unit.py:147 +#: project/forms/admin.py:77 project/forms/admin_unit.py:147 #: project/forms/admin_unit.py:152 project/forms/admin_unit.py:157 #: project/forms/event.py:90 project/forms/event.py:119 #: project/forms/event_place.py:30 project/forms/event_place.py:56 @@ -340,27 +344,27 @@ msgstr "" msgid "Name" msgstr "" -#: project/forms/admin.py:80 project/forms/admin.py:87 +#: project/forms/admin.py:81 project/forms/admin.py:88 msgid "Recipient" msgstr "" -#: project/forms/admin.py:82 +#: project/forms/admin.py:83 msgid "Send test mail synchronously" msgstr "" -#: project/forms/admin.py:89 project/forms/admin.py:95 +#: project/forms/admin.py:90 project/forms/admin.py:96 msgid "Test recipient" msgstr "" -#: project/forms/admin.py:90 +#: project/forms/admin.py:91 msgid "All users with enabled newsletter setting" msgstr "" -#: project/forms/admin.py:96 +#: project/forms/admin.py:97 msgid "Message" msgstr "" -#: project/forms/admin.py:97 +#: project/forms/admin.py:98 msgid "Send newsletter" msgstr "" @@ -1918,7 +1922,7 @@ msgstr "" #: project/templates/admin/reset_tos_accepted.html:4 #: project/templates/admin/reset_tos_accepted.html:8 -#: project/templates/admin/settings.html:28 +#: project/templates/admin/settings.html:29 #: project/templates/admin/users.html:48 msgid "Reset acceptance of terms of service and privacy" msgstr "" diff --git a/migrations/versions/d2c04be821a7_.py b/migrations/versions/d2c04be821a7_.py new file mode 100644 index 0000000..2ec358b --- /dev/null +++ b/migrations/versions/d2c04be821a7_.py @@ -0,0 +1,28 @@ +"""empty message + +Revision ID: d2c04be821a7 +Revises: 6634c8f0b7fc +Create Date: 2023-09-07 22:20:57.918736 + +""" +import sqlalchemy as sa +import sqlalchemy_utils +from alembic import op + +from project import dbtypes + +# revision identifiers, used by Alembic. +revision = "d2c04be821a7" +down_revision = "6634c8f0b7fc" +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column( + "settings", sa.Column("announcement", sa.UnicodeText(), nullable=True) + ) + + +def downgrade(): + op.drop_column("settings", "announcement") diff --git a/project/forms/admin.py b/project/forms/admin.py index 93b7cb1..60504c8 100644 --- a/project/forms/admin.py +++ b/project/forms/admin.py @@ -13,6 +13,7 @@ class AdminSettingsForm(FlaskForm): contact = TextAreaField(lazy_gettext("Contact"), validators=[Optional()]) privacy = TextAreaField(lazy_gettext("Privacy"), validators=[Optional()]) start_page = TextAreaField(lazy_gettext("Start page"), validators=[Optional()]) + announcement = TextAreaField(lazy_gettext("Announcement"), validators=[Optional()]) submit = SubmitField(lazy_gettext("Save")) diff --git a/project/jinja_filters.py b/project/jinja_filters.py index e069846..7fcf71d 100644 --- a/project/jinja_filters.py +++ b/project/jinja_filters.py @@ -2,6 +2,7 @@ import os from urllib.parse import quote_plus from flask import url_for +from markupsafe import Markup from project import app from project.utils import ( @@ -114,6 +115,15 @@ def get_context_processors(): return has_tos() + def get_announcement(): + from project.services.admin import has_announcement, upsert_settings + + if not has_announcement(): + return None + + settings = upsert_settings() + return Markup(settings.announcement) if settings.announcement else None + def get_current_user_roles(): from flask_security import current_user @@ -167,6 +177,7 @@ def get_context_processors(): get_manage_menu_options=get_manage_menu_options, has_access=has_access, has_tos=has_tos, + get_announcement=get_announcement, get_current_user_roles=get_current_user_roles, get_current_user_permissions=get_current_user_permissions, ) diff --git a/project/models/settings.py b/project/models/settings.py index 8a28ce1..e2f7c43 100644 --- a/project/models/settings.py +++ b/project/models/settings.py @@ -1,4 +1,5 @@ from sqlalchemy import Column, Integer, UnicodeText +from sqlalchemy.orm import deferred from project import db from project.models.trackable_mixin import TrackableMixin @@ -7,8 +8,9 @@ from project.models.trackable_mixin import TrackableMixin class Settings(db.Model, TrackableMixin): __tablename__ = "settings" id = Column(Integer(), primary_key=True) - tos = Column(UnicodeText()) - legal_notice = Column(UnicodeText()) - contact = Column(UnicodeText()) - privacy = Column(UnicodeText()) - start_page = Column(UnicodeText()) + tos = deferred(Column(UnicodeText())) + legal_notice = deferred(Column(UnicodeText())) + contact = deferred(Column(UnicodeText())) + privacy = deferred(Column(UnicodeText())) + start_page = deferred(Column(UnicodeText())) + announcement = deferred(Column(UnicodeText())) diff --git a/project/services/admin.py b/project/services/admin.py index 37eb4c5..dc2ad77 100644 --- a/project/services/admin.py +++ b/project/services/admin.py @@ -4,7 +4,7 @@ from project import db from project.models import Settings, User -def upsert_settings(): +def upsert_settings() -> Settings: result = Settings.query.first() if result is None: result = Settings() @@ -13,12 +13,18 @@ def upsert_settings(): return result -def has_tos(): +def has_tos() -> bool: return db.session.scalar( exists().where(func.coalesce(Settings.tos, "") != "").select() ) +def has_announcement() -> bool: + return db.session.scalar( + exists().where(func.coalesce(Settings.announcement, "") != "").select() + ) + + def reset_tos_accepted_for_users(): db.session.execute(update(User).values(tos_accepted_at=None)) db.session.commit() diff --git a/project/templates/_messages.html b/project/templates/_messages.html index 6238aea..fae6738 100644 --- a/project/templates/_messages.html +++ b/project/templates/_messages.html @@ -1,3 +1,8 @@ +{% set announcement = get_announcement() %} +{% if announcement %} + +{% endif %} + {%- with messages = get_flashed_messages(with_categories=true) -%} {% if messages %} {% for category, message in messages %} diff --git a/project/templates/admin/settings.html b/project/templates/admin/settings.html index 286681c..fe154b4 100644 --- a/project/templates/admin/settings.html +++ b/project/templates/admin/settings.html @@ -20,6 +20,7 @@ {{ render_field_with_errors(form.legal_notice) }} {{ render_field_with_errors(form.contact) }} {{ render_field_with_errors(form.privacy) }} + {{ render_field_with_errors(form.announcement) }} {{ render_field(form.submit) }} diff --git a/project/templates/home.html b/project/templates/home.html index d8559b1..6e7aed8 100644 --- a/project/templates/home.html +++ b/project/templates/home.html @@ -7,6 +7,7 @@ {% endblock %} {% block body_content__attribs %} style="padding:0;"{% endblock %} {% block content_container_attribs %}{% endblock %} +{% block messages_container_attribs %}class="pt-3 px-3"{% endblock messages_container_attribs %} {% block content %} {% if content %} {{ content }} diff --git a/project/templates/layout.html b/project/templates/layout.html index 5709cc5..019e994 100644 --- a/project/templates/layout.html +++ b/project/templates/layout.html @@ -323,7 +323,9 @@ {% block content_container -%}
- {% include "_messages.html" %} +
+ {% include "_messages.html" %} +
{% block content -%} {%- endblock content %} diff --git a/project/translations/de/LC_MESSAGES/messages.mo b/project/translations/de/LC_MESSAGES/messages.mo index ccc953e53196dc06a5bf6a24056e3381c02744d8..eae1d079734b2bb3089b8eba0d513425df3dca72 100644 GIT binary patch delta 9930 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 Gdj22j0Uvh& delta 9897 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 V+O9)t>i%aZJo4H\n" "Language: de\n" @@ -233,34 +233,38 @@ msgstr "Datenschutz" msgid "Start page" msgstr "Startseite" -#: project/forms/admin.py:17 project/forms/oauth2_client.py:24 +#: project/forms/admin.py:16 +msgid "Announcement" +msgstr "Ankündigung" + +#: project/forms/admin.py:18 project/forms/oauth2_client.py:24 #: project/forms/user.py:13 msgid "Save" msgstr "Speichern" -#: project/forms/admin.py:22 +#: project/forms/admin.py:23 msgid "Reset for all users" msgstr "Für alle Nutzer zurücksetzen" -#: project/forms/admin.py:24 +#: project/forms/admin.py:25 msgid "Reset" msgstr "Zurücksetzen" -#: project/forms/admin.py:28 project/forms/admin_unit_member.py:14 +#: project/forms/admin.py:29 project/forms/admin_unit_member.py:14 #: project/forms/admin_unit_member.py:34 msgid "Roles" msgstr "Rollen" -#: project/forms/admin.py:29 project/templates/admin/update_user.html:4 +#: project/forms/admin.py:30 project/templates/admin/update_user.html:4 #: project/templates/admin/update_user.html:8 msgid "Update user" msgstr "Nutzer aktualisieren" -#: project/forms/admin.py:33 project/templates/admin/delete_user.html:6 +#: project/forms/admin.py:34 project/templates/admin/delete_user.html:6 msgid "Delete user" msgstr "Nutzer löschen" -#: project/forms/admin.py:34 project/forms/admin_unit.py:58 +#: project/forms/admin.py:35 project/forms/admin_unit.py:58 #: project/forms/admin_unit_member.py:12 project/forms/admin_unit_member.py:25 #: project/forms/admin_unit_member.py:30 project/forms/event.py:112 #: project/forms/event_suggestion.py:38 project/forms/organizer.py:33 @@ -272,11 +276,11 @@ msgstr "Nutzer löschen" msgid "Email" msgstr "Email" -#: project/forms/admin.py:39 +#: project/forms/admin.py:40 msgid "Incoming reference requests allowed" msgstr "Eingehende Empfehlungsanfragen erlauben" -#: project/forms/admin.py:40 +#: project/forms/admin.py:41 msgid "" "If set, other organizations can ask this organization to reference their " "event." @@ -284,56 +288,56 @@ msgstr "" "Wenn gesetzt, können andere Organisationen diese Organisation bitten, " "deren Veranstaltungen zu empfehlen." -#: project/forms/admin.py:46 +#: project/forms/admin.py:47 msgid "Suggestions enabled" msgstr "Vorschläge aktiv" -#: project/forms/admin.py:47 +#: project/forms/admin.py:48 msgid "If set, the organization can work with suggestions." msgstr "Wenn gesetzt, kann die Organisation mit Vorschlägen arbeiten." -#: project/forms/admin.py:51 +#: project/forms/admin.py:52 msgid "Create other organizations" msgstr "Andere Organisationen erstellen" -#: project/forms/admin.py:52 +#: project/forms/admin.py:53 msgid "If set, members of the organization can create other organizations." msgstr "" "Wenn gesetzt, können Mitglieder der Organisation andere Organisationen " "erstellen." -#: project/forms/admin.py:58 +#: project/forms/admin.py:59 msgid "Invite other organizations" msgstr "Andere Organisationen einladen" -#: project/forms/admin.py:59 +#: project/forms/admin.py:60 msgid "If set, members of the organization can invite other organizations." msgstr "" "Wenn gesetzt, können Mitglieder der Organisation andere Organisationen " "einladen." -#: project/forms/admin.py:65 +#: project/forms/admin.py:66 msgid "Verify other organizations" msgstr "Andere Organisationen verifizieren" -#: project/forms/admin.py:66 +#: project/forms/admin.py:67 msgid "If set, members of the organization can verify other organizations." msgstr "" "Wenn gesetzt, können Mitglieder der Organisation andere Organisationen " "verifizieren." -#: project/forms/admin.py:71 project/templates/admin/update_admin_unit.html:4 +#: project/forms/admin.py:72 project/templates/admin/update_admin_unit.html:4 #: project/templates/admin/update_admin_unit.html:8 msgid "Update organization" msgstr "Organisation aktualisieren" -#: project/forms/admin.py:75 project/templates/admin/delete_admin_unit.html:6 +#: project/forms/admin.py:76 project/templates/admin/delete_admin_unit.html:6 #: project/templates/admin_unit/request_deletion.html:6 #: project/templates/admin_unit/update.html:94 msgid "Delete organization" msgstr "Organisation löschen" -#: project/forms/admin.py:76 project/forms/admin_unit.py:147 +#: project/forms/admin.py:77 project/forms/admin_unit.py:147 #: project/forms/admin_unit.py:152 project/forms/admin_unit.py:157 #: project/forms/event.py:90 project/forms/event.py:119 #: project/forms/event_place.py:30 project/forms/event_place.py:56 @@ -349,27 +353,27 @@ msgstr "Organisation löschen" msgid "Name" msgstr "Name" -#: project/forms/admin.py:80 project/forms/admin.py:87 +#: project/forms/admin.py:81 project/forms/admin.py:88 msgid "Recipient" msgstr "Empfänger" -#: project/forms/admin.py:82 +#: project/forms/admin.py:83 msgid "Send test mail synchronously" msgstr "Test-Mail synchron senden" -#: project/forms/admin.py:89 project/forms/admin.py:95 +#: project/forms/admin.py:90 project/forms/admin.py:96 msgid "Test recipient" msgstr "Test-Empfänger" -#: project/forms/admin.py:90 +#: project/forms/admin.py:91 msgid "All users with enabled newsletter setting" msgstr "Alle Nutzer mit aktiviertem Newsletter" -#: project/forms/admin.py:96 +#: project/forms/admin.py:97 msgid "Message" msgstr "Nachricht" -#: project/forms/admin.py:97 +#: project/forms/admin.py:98 msgid "Send newsletter" msgstr "Newsletter senden" @@ -1979,7 +1983,7 @@ msgstr "Mails erfolgreich gesendet" #: project/templates/admin/reset_tos_accepted.html:4 #: project/templates/admin/reset_tos_accepted.html:8 -#: project/templates/admin/settings.html:28 +#: project/templates/admin/settings.html:29 #: project/templates/admin/users.html:48 msgid "Reset acceptance of terms of service and privacy" msgstr "Akzeptanz der Nutzungsbedingungen und des Datenschutzes zurücksetzen" diff --git a/project/translations/en/LC_MESSAGES/messages.mo b/project/translations/en/LC_MESSAGES/messages.mo index 7aa95cdfa3634f82ccf89a8bc50f1707c92ddc2a..bf579620b0423fd5a230de34544fe9698a96a3c3 100644 GIT binary patch delta 20 bcmeyS@J(Su6c@X>f{~GxiNWSXE>SiBOPmGT delta 20 bcmeyS@J(Su6c@Xhf}y#Uq2cC4E>SiBOQZ$c diff --git a/project/translations/en/LC_MESSAGES/messages.po b/project/translations/en/LC_MESSAGES/messages.po index be898ea..c93f4be 100644 --- a/project/translations/en/LC_MESSAGES/messages.po +++ b/project/translations/en/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-09-06 17:11+0200\n" +"POT-Creation-Date: 2023-09-07 22:40+0200\n" "PO-Revision-Date: 2021-04-30 15:04+0200\n" "Last-Translator: FULL NAME \n" "Language: en\n" @@ -233,34 +233,38 @@ msgstr "" msgid "Start page" msgstr "" -#: project/forms/admin.py:17 project/forms/oauth2_client.py:24 +#: project/forms/admin.py:16 +msgid "Announcement" +msgstr "" + +#: project/forms/admin.py:18 project/forms/oauth2_client.py:24 #: project/forms/user.py:13 msgid "Save" msgstr "" -#: project/forms/admin.py:22 +#: project/forms/admin.py:23 msgid "Reset for all users" msgstr "" -#: project/forms/admin.py:24 +#: project/forms/admin.py:25 msgid "Reset" msgstr "" -#: project/forms/admin.py:28 project/forms/admin_unit_member.py:14 +#: project/forms/admin.py:29 project/forms/admin_unit_member.py:14 #: project/forms/admin_unit_member.py:34 msgid "Roles" msgstr "" -#: project/forms/admin.py:29 project/templates/admin/update_user.html:4 +#: project/forms/admin.py:30 project/templates/admin/update_user.html:4 #: project/templates/admin/update_user.html:8 msgid "Update user" msgstr "" -#: project/forms/admin.py:33 project/templates/admin/delete_user.html:6 +#: project/forms/admin.py:34 project/templates/admin/delete_user.html:6 msgid "Delete user" msgstr "" -#: project/forms/admin.py:34 project/forms/admin_unit.py:58 +#: project/forms/admin.py:35 project/forms/admin_unit.py:58 #: project/forms/admin_unit_member.py:12 project/forms/admin_unit_member.py:25 #: project/forms/admin_unit_member.py:30 project/forms/event.py:112 #: project/forms/event_suggestion.py:38 project/forms/organizer.py:33 @@ -272,60 +276,60 @@ msgstr "" msgid "Email" msgstr "" -#: project/forms/admin.py:39 +#: project/forms/admin.py:40 msgid "Incoming reference requests allowed" msgstr "" -#: project/forms/admin.py:40 +#: project/forms/admin.py:41 msgid "" "If set, other organizations can ask this organization to reference their " "event." msgstr "" -#: project/forms/admin.py:46 +#: project/forms/admin.py:47 msgid "Suggestions enabled" msgstr "" -#: project/forms/admin.py:47 +#: project/forms/admin.py:48 msgid "If set, the organization can work with suggestions." msgstr "" -#: project/forms/admin.py:51 +#: project/forms/admin.py:52 msgid "Create other organizations" msgstr "" -#: project/forms/admin.py:52 +#: project/forms/admin.py:53 msgid "If set, members of the organization can create other organizations." msgstr "" -#: project/forms/admin.py:58 +#: project/forms/admin.py:59 msgid "Invite other organizations" msgstr "" -#: project/forms/admin.py:59 +#: project/forms/admin.py:60 msgid "If set, members of the organization can invite other organizations." msgstr "" -#: project/forms/admin.py:65 +#: project/forms/admin.py:66 msgid "Verify other organizations" msgstr "" -#: project/forms/admin.py:66 +#: project/forms/admin.py:67 msgid "If set, members of the organization can verify other organizations." msgstr "" -#: project/forms/admin.py:71 project/templates/admin/update_admin_unit.html:4 +#: project/forms/admin.py:72 project/templates/admin/update_admin_unit.html:4 #: project/templates/admin/update_admin_unit.html:8 msgid "Update organization" msgstr "" -#: project/forms/admin.py:75 project/templates/admin/delete_admin_unit.html:6 +#: project/forms/admin.py:76 project/templates/admin/delete_admin_unit.html:6 #: project/templates/admin_unit/request_deletion.html:6 #: project/templates/admin_unit/update.html:94 msgid "Delete organization" msgstr "" -#: project/forms/admin.py:76 project/forms/admin_unit.py:147 +#: project/forms/admin.py:77 project/forms/admin_unit.py:147 #: project/forms/admin_unit.py:152 project/forms/admin_unit.py:157 #: project/forms/event.py:90 project/forms/event.py:119 #: project/forms/event_place.py:30 project/forms/event_place.py:56 @@ -341,27 +345,27 @@ msgstr "" msgid "Name" msgstr "" -#: project/forms/admin.py:80 project/forms/admin.py:87 +#: project/forms/admin.py:81 project/forms/admin.py:88 msgid "Recipient" msgstr "" -#: project/forms/admin.py:82 +#: project/forms/admin.py:83 msgid "Send test mail synchronously" msgstr "" -#: project/forms/admin.py:89 project/forms/admin.py:95 +#: project/forms/admin.py:90 project/forms/admin.py:96 msgid "Test recipient" msgstr "" -#: project/forms/admin.py:90 +#: project/forms/admin.py:91 msgid "All users with enabled newsletter setting" msgstr "" -#: project/forms/admin.py:96 +#: project/forms/admin.py:97 msgid "Message" msgstr "" -#: project/forms/admin.py:97 +#: project/forms/admin.py:98 msgid "Send newsletter" msgstr "" @@ -1926,7 +1930,7 @@ msgstr "" #: project/templates/admin/reset_tos_accepted.html:4 #: project/templates/admin/reset_tos_accepted.html:8 -#: project/templates/admin/settings.html:28 +#: project/templates/admin/settings.html:29 #: project/templates/admin/users.html:48 msgid "Reset acceptance of terms of service and privacy" msgstr "" diff --git a/tests/views/test_root.py b/tests/views/test_root.py index 51e3de0..431184c 100644 --- a/tests/views/test_root.py +++ b/tests/views/test_root.py @@ -107,3 +107,16 @@ def test_sitemap_xml(seeder, app, utils): result = runner.invoke(args=["seo", "generate-sitemap"]) assert result.exit_code == 0 utils.get_endpoint_ok("sitemap_xml") + + +def test_announcement(app, db, utils: UtilActions): + with app.app_context(): + from project.services.admin import upsert_settings + + settings = upsert_settings() + settings.announcement = "Wartungsarbeiten" + db.session.commit() + + url = utils.get_url("home") + response = utils.get_ok(url) + assert b"Wartungsarbeiten" in response.data