From de3880e8801e2be9dcf7a382f2b8efc4e712b620 Mon Sep 17 00:00:00 2001 From: Kobe Date: Wed, 25 Jun 2025 13:34:43 +0200 Subject: [PATCH] fixed help articles --- routes/__pycache__/admin.cpython-313.pyc | Bin 34619 -> 34924 bytes routes/__pycache__/main.cpython-313.pyc | Bin 119304 -> 119304 bytes routes/admin.py | 7 +++ routes/public.py | 5 ++ templates/admin/support_articles.html | 57 +++++++++++++++++++++-- templates/public/help.html | 18 ------- 6 files changed, 64 insertions(+), 23 deletions(-) diff --git a/routes/__pycache__/admin.cpython-313.pyc b/routes/__pycache__/admin.cpython-313.pyc index 8a2bdfa5a3c6ea2216f825cd3340534e11e4424d..d7c90a3c9595b58f33c2fc89ff5c1f3447dd9225 100644 GIT binary patch delta 5293 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 delta 5175 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 N=fyoITV)sG{V(F5Oc?+G diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index 4a9675d7c66ada3b394001be6731f879ef84c1ed..23b05ba86fda0a55b77813d0ebd6e9fa0e0ffb83 100644 GIT binary patch delta 24 ecmeBJ!rrljo$E6%FBbz4)ShVM+RDZF?;-$PiU;Qa delta 24 ecmeBJ!rrljo$E6%FBbz4@E&XA+RDZF?;-$LiU)N7 diff --git a/routes/admin.py b/routes/admin.py index 7f55005..b780b03 100644 --- a/routes/admin.py +++ b/routes/admin.py @@ -1,6 +1,8 @@ from flask import Blueprint, jsonify, request from flask_login import login_required, current_user from models import db, Room, RoomFile, User, DocuPulseSettings, HelpArticle +from extensions import csrf +from utils.event_logger import log_event import os from datetime import datetime import json @@ -258,6 +260,7 @@ def get_usage_stats(): @admin.route('/api/admin/help-articles/', methods=['PUT']) @login_required +@csrf.exempt def update_help_article(article_id): """Update a help article""" if not current_user.is_admin: @@ -310,6 +313,7 @@ def update_help_article(article_id): @admin.route('/api/admin/help-articles/', methods=['DELETE']) @login_required +@csrf.exempt def delete_help_article(article_id): """Delete a help article""" if not current_user.is_admin: @@ -342,6 +346,7 @@ def delete_help_article(article_id): # Help Articles API endpoints @admin.route('/api/admin/help-articles', methods=['GET']) @login_required +@csrf.exempt def get_help_articles(): """Get all help articles""" if not current_user.is_admin: @@ -367,6 +372,7 @@ def get_help_articles(): @admin.route('/api/admin/help-articles', methods=['POST']) @login_required +@csrf.exempt def create_help_article(): """Create a new help article""" if not current_user.is_admin: @@ -420,6 +426,7 @@ def create_help_article(): @admin.route('/api/admin/help-articles/', methods=['GET']) @login_required +@csrf.exempt def get_help_article(article_id): """Get a specific help article""" if not current_user.is_admin: diff --git a/routes/public.py b/routes/public.py index bc1a276..2d56fff 100644 --- a/routes/public.py +++ b/routes/public.py @@ -57,7 +57,12 @@ def init_public_routes(public_bp): articles = HelpArticle.get_articles_by_category(category) category_name = categories[category] else: + # Show all articles when no specific category is requested articles = [] + for category_articles in all_articles.values(): + articles.extend(category_articles) + # Sort by order_index and then by created_at + articles.sort(key=lambda x: (x.order_index, x.created_at)) category_name = None return render_template('public/help_articles.html', diff --git a/templates/admin/support_articles.html b/templates/admin/support_articles.html index fb0e7fb..e5ba066 100644 --- a/templates/admin/support_articles.html +++ b/templates/admin/support_articles.html @@ -2,6 +2,10 @@ {% block title %}Support Articles - DocuPulse{% endblock %} +{% block head %} + +{% endblock %} + {% block extra_css %}