mostly implement topics app

This commit is contained in:
2025-06-30 19:50:57 +03:00
parent 19bf98f5b5
commit 453aeff95a
5 changed files with 81 additions and 4 deletions

View File

@ -69,3 +69,44 @@ def topic(slug):
current_page = page,
page_count = page_count
)
@bp.get("/<slug>/edit")
@login_required
@mod_only(".topic", slug = lambda slug: slug)
def edit(slug):
topic = Topics.find({"slug": slug})
if not topic:
return "no"
return render_template("topics/edit.html", topic=topic)
@bp.post("/<slug>/edit")
@login_required
@mod_only(".topic", slug = lambda slug: slug)
def edit_post(slug):
topic = Topics.find({"slug": slug})
if not topic:
return "no"
topic.update({
"name": request.form.get('name', default = topic.name).strip(),
"description": request.form.get('description', default = topic.description),
"is_locked": int(request.form.get("is_locked", default = topic.is_locked)),
})
return redirect(url_for("topics.topic", slug=slug))
@bp.post("/<slug>/delete")
@login_required
@mod_only(".topic", slug = lambda slug: slug)
def delete(slug):
topic = Topics.find({"slug": slug})
if not topic:
return "no"
topic.delete()
flash("Topic deleted.", InfoboxKind.INFO)
return redirect(url_for("topics.all_topics"))

View File

@ -50,7 +50,7 @@ def redirect_if_logged_in(*args, **kwargs):
if is_logged_in():
# resolve callables
processed_kwargs = {
k: v() if callable(v) else v
k: v(**view_kwargs) if callable(v) else v
for k, v in kwargs.items()
}
endpoint = args[0] if args else processed_kwargs.get("endpoint")
@ -81,7 +81,7 @@ def mod_only(*args, **kwargs):
if not get_active_user().is_mod():
# resolve callables
processed_kwargs = {
k: v() if callable(v) else v
k: v(**view_kwargs) if callable(v) else v
for k, v in kwargs.items()
}
endpoint = args[0] if args else processed_kwargs.get("endpoint")