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 %}
],