diff --git a/admin.py b/admin.py index a8a3c694..2d464fbb 100644 --- a/admin.py +++ b/admin.py @@ -2,7 +2,7 @@ import os from datetime import datetime from functools import wraps -from flask import abort, Blueprint, flash, render_template +from flask import abort, Blueprint, flash, render_template, url_for from flask_login import current_user, fresh_login_required from mud_secret import PODIR, IMM_LEVELS from database import db_session @@ -32,6 +32,7 @@ def index(): return render_template('admin/portal.html.j2') +@admin.route('/news/', methods=['GET', 'POST']) @admin.route('/news', methods=['GET', 'POST']) @fresh_login_required @god_required @@ -53,7 +54,8 @@ def news(): db_session.add(new_news) db_session.commit() if new_news.news_id: - flash('Your message has been posted!', 'success') + edit_url = 'edit it here' + flash(f'Your message has been posted! You can {edit_url}.', 'success') else: flash('Sorry, but please try again!', 'error') @@ -92,6 +94,31 @@ def edit_news(edit_news_id=None): ) +@admin.route('/news/delete//', methods=['GET']) +@admin.route('/news/delete/', methods=['GET']) +@fresh_login_required +@god_required +def delete_news(delete_news_id=None): + """Administration portal to allow Gods to edit news posts + /admin/news/edit""" + news_post = News.query.filter_by(news_id=delete_news_id).first() + + if not news_post: + flash('Invalid news post.', 'error') + abort(400) + + News.query.filter_by(news_id=news_post.news_id).delete() + db_session.commit() + flash('The news post was deleted successfully.', 'success') + sentry_sdk.capture_message(f'Admin Delete News: {current_user} deleted {news_post}') + + # Show the form to add news in the administration portal + return render_template('admin/news.html.j2', + all_news=News.query.order_by(-News.created_at).all(), + news_add_form=NewsAddForm() + ) + + @admin.route('/account/', methods=['GET']) @fresh_login_required @god_required diff --git a/models.py b/models.py index 41b6f8fb..f0ccc58d 100644 --- a/models.py +++ b/models.py @@ -174,8 +174,7 @@ class News(Base): account = relationship('Account') def __repr__(self): - return f' "{self.subject}" ({self.news_id}) / ' \ - f'by "{self.account.account_name}" / at "{self.created_at}"' + return f' "{self.subject}" ({self.news_id}) at "{self.created_at}"' class PlayerClass(Base): diff --git a/templates/admin/edit_news.html.j2 b/templates/admin/edit_news.html.j2 index e4ee5a74..1d6b9fef 100644 --- a/templates/admin/edit_news.html.j2 +++ b/templates/admin/edit_news.html.j2 @@ -49,7 +49,7 @@ {{ edit_news_form.csrf_token }} {{ render_field(edit_news_form.submit) }} - + {%- endif %} {%- endblock content %} diff --git a/templates/admin/news.html.j2 b/templates/admin/news.html.j2 index c3390e84..126d3032 100644 --- a/templates/admin/news.html.j2 +++ b/templates/admin/news.html.j2 @@ -50,6 +50,10 @@ { id: 'created', name: 'Created', + }, + { + id: 'delete', + name: 'Delete', } ], data: [ @@ -59,7 +63,8 @@ subject: "{{ news.subject | truncate(50) | safe }}", body: "{{ news.body | truncate(50) | safe }}", author: "{{ news.account.account_name | title | safe }}", - created: "{{ news.created_at }} ({{ news.created_at.strftime('%A, %B %d, %Y') }})" + created: "{{ news.created_at }} ({{ news.created_at.strftime('%A, %B %d, %Y') }})", + delete: gridjs.html(``) }{% if not loop.last %},{% endif %} {%- endfor %} ],