Adds admin view for individual announcement

This commit is contained in:
Mouse Reeve 2021-05-20 08:09:35 -07:00
parent c73c063949
commit d64e0c4aa8
11 changed files with 92 additions and 32 deletions

View file

@ -8,7 +8,7 @@
<option value="">{% trans "Any" %}</option>
{% for format in formats %}{% if format %}
<option value="{{ format }}" {% if request.GET.format == format %}selected{% endif %}>
{{ format|title }}
{{ format|book_title }}
</option>
{% endif %}{% endfor %}
</select>

View file

@ -1,4 +1,4 @@
{% load layout %}{% load i18n %}{% load humanize %}
{% load layout %}{% load i18n %}
<!DOCTYPE html>
<html lang="{% get_lang %}">
<head>
@ -185,25 +185,7 @@
<div class="block is-flex-grow-1">
<div class="container">
{% for announcement in active_announcements %}
<div class="notification p-3">
<div class="columns mb-0">
<div class="column">
{% if announcement.event_date %}
<strong>{{ announcement.event_date|naturalday|title }}:</strong>
{% endif %}
{{ announcement.preview }}
</div>
<div class="column is-narrow">
{% trans "Open" as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=announcement.id icon_with_text="arrow-down" %}
{% trans "Close" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=announcement.id icon_with_text="arrow-up" %}
</div>
</div>
<div class="box is-shadowless m-0 is-hidden" id="announcement-{{ announcement.id }}">
{{ announcement.content|safe }}
</div>
</div>
{% include 'snippets/announcement.html' with announcement=announcement %}
{% endfor %}
</div>
</div>

View file

@ -0,0 +1,23 @@
{% extends 'settings/admin_layout.html' %}
{% load i18n %}
{% block title %}{% trans "Announcement" %} - {{ announcement.preview }}{% endblock %}
{% block header %}{% trans "Announcement" %}{% endblock %}
{% block edit-button %}
{% trans "Edit Announcement" as button_text %}
{% include 'snippets/toggle/open_button.html' with controls_text="create-announcement" icon_with_text="plus" text=button_text focus="create-announcement-header" %}
</a>
{% endblock %}
{% block panel %}
<div class="block">
{% include 'settings/announcement_form.html' with controls_text="create-announcement" %}
</div>
<div class="block content">
{% include 'snippets/announcement.html' with announcement=announcement pressed=True %}
</div>
{% endblock %}

View file

@ -45,5 +45,5 @@
{% endfor %}
</table>
{% include 'snippets/pagination.html' with page=servers path=request.path %}
{% include 'snippets/pagination.html' with page=announcements path=request.path %}
{% endblock %}

View file

@ -0,0 +1,22 @@
{% load humanize %}{% load i18n %}{% load utilities %}
{% with announcement.id|uuid as uuid %}
<aside class="notification p-3">
<div class="columns mb-0">
<div class="column">
{% if announcement.event_date %}
<strong>{{ announcement.event_date|naturalday|title }}:</strong>
{% endif %}
{{ announcement.preview }}
</div>
<div class="column is-narrow">
{% trans "Open" as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-down" %}
{% trans "Close" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-up" %}
</div>
</div>
<div class="box is-shadowless m-0{% if not pressed %} is-hidden{% endif %}" id="announcement-{{ uuid }}">
{{ announcement.content|safe }}
</div>
</aside>
{% endwith %}

View file

@ -1,8 +1,8 @@
{% load i18n %}
{% load utilities %}
{% if book.authors %}
{% blocktrans with path=book.local_path title=book|title %}<a href="{{ path }}">{{ title }}</a> by {% endblocktrans %}{% include 'snippets/authors.html' with book=book %}
{% blocktrans with path=book.local_path title=book|book_title %}<a href="{{ path }}">{{ title }}</a> by {% endblocktrans %}{% include 'snippets/authors.html' with book=book %}
{% else %}
<a href="{{ book.local_path }}">{{ book|title }}</a>
<a href="{{ book.local_path }}">{{ book|book_title }}</a>
{% endif %}

View file

@ -48,7 +48,7 @@
{% if status.book %}
{% if status.status_type == 'GeneratedNote' or status.status_type == 'Rating' %}
<a href="{{ status.book.local_path }}">{{ status.book|title }}</a>{% if status.status_type == 'Rating' %}: {% include 'snippets/stars.html' with rating=status.rating %}
<a href="{{ status.book.local_path }}">{{ status.book|book_title }}</a>{% if status.status_type == 'Rating' %}: {% include 'snippets/stars.html' with rating=status.rating %}
<span
itemprop="reviewRating"
itemscope
@ -59,7 +59,7 @@
{% if status.book %}
{% if status.status_type == 'GeneratedNote' or status.status_type == 'Rating' %}
<a href="{{ status.book.local_path }}">{{ status.book|title }}</a>{% if status.status_type == 'Rating' %}:
<a href="{{ status.book.local_path }}">{{ status.book|book_title }}</a>{% if status.status_type == 'Rating' %}:
<span
itemprop="reviewRating"
itemscope
@ -78,7 +78,7 @@
{% endif %}
{% elif status.mention_books %}
<a href="{{ status.mention_books.first.local_path }}">
{{ status.mention_books.first.title }}
{{ status.mention_books.first|book_title }}
</a>
{% endif %}
{% include 'snippets/stars.html' with rating=status.rating %}
@ -87,7 +87,7 @@
{% include 'snippets/book_titleby.html' with book=status.book %}
{% endif %}
{% elif status.mention_books %}
<a href="{{ status.mention_books.first.local_path }}">{{ status.mention_books.first|title }}</a>
<a href="{{ status.mention_books.first.local_path }}">{{ status.mention_books.first|book_title }}</a>
{% endif %}
</h3>

View file

@ -18,7 +18,7 @@ def get_user_identifier(user):
return user.localname if user.localname else user.username
@register.filter(name="title")
@register.filter(name="book_title")
def get_title(book):
"""display the subtitle if the title is short"""
if not book:

View file

@ -63,7 +63,7 @@ urlpatterns = [
),
re_path(
r"^settings/announcements/(?P<announcement_id>\d+)/??$",
views.Announcements.as_view(),
views.Announcement.as_view(),
name="settings-announcements",
),
re_path(

View file

@ -1,5 +1,5 @@
""" make sure all our nice views are available """
from .announcements import Announcements
from .announcements import Announcements, Announcement
from .authentication import Login, Register, Logout
from .author import Author, EditAuthor
from .block import Block, unblock

View file

@ -1,5 +1,6 @@
""" make announcements """
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import get_object_or_404
from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
from django.views import View
@ -29,8 +30,40 @@ class Announcements(View):
form = forms.AnnouncementForm(request.POST)
if form.is_valid():
form.save()
# reset the create form
form = forms.AnnouncementForm()
data = {
"announcements": models.Announcement.objects.all(),
"form": forms.AnnouncementForm(),
"form": form,
}
return TemplateResponse(request, "settings/announcements.html", data)
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
name="dispatch",
)
class Announcement(View):
"""delete or edit an announcement"""
def get(self, request, announcement_id):
"""view announcement"""
announcement = get_object_or_404(models.Announcement, id=announcement_id)
data = {
"announcement": announcement,
"form": forms.AnnouncementForm(instance=announcement),
}
return TemplateResponse(request, "settings/announcement.html", data)
def post(self, request, announcement_id):
"""edit the site settings"""
announcement = get_object_or_404(models.Announcement, id=announcement_id)
form = forms.AnnouncementForm(request.POST, instance=announcement)
if form.is_valid():
form.save()
data = {
"announcements": models.Announcement.objects.all(),
"form": form,
}
return TemplateResponse(request, "settings/announcement.html", data)