diff --git a/app/models.py b/app/models.py index 666e687..41f98e5 100644 --- a/app/models.py +++ b/app/models.py @@ -164,6 +164,7 @@ class Topics(Model): GROUP BY thread_id ) SELECT + threads.id, threads.title, threads.slug, threads.created_at, diff --git a/app/routes/mod.py b/app/routes/mod.py index e032cd2..d164c32 100644 --- a/app/routes/mod.py +++ b/app/routes/mod.py @@ -62,7 +62,7 @@ def move_thread(thread_id): if not target_topic: abort(404) thread.update({'topic_id': target_topic.id}) - return redirect(url_for('threads.thread', slug=thread.slug)) + return redirect(url_for('threads.thread_by_id', thread_id=thread.id)) @bp.post('/threads//lock/') def lock_thread(thread_id): @@ -70,7 +70,7 @@ def lock_thread(thread_id): if not thread: abort(404) thread.update({'is_locked': request.form.get('lock')}) - return redirect(url_for('threads.thread', slug=thread.slug)) + return redirect(url_for('threads.thread_by_id', thread_id=thread.id)) @bp.post('/threads//sticky/') def sticky_thread(thread_id): @@ -78,7 +78,7 @@ def sticky_thread(thread_id): if not thread: abort(404) thread.update({'is_stickied': request.form.get('sticky')}) - return redirect(url_for('threads.thread', slug=thread.slug)) + return redirect(url_for('threads.thread_by_id', thread_id=thread.id)) @bp.post('/users//make-guest/') @csrf_verified diff --git a/app/routes/threads.py b/app/routes/threads.py index 7db0c3d..994c970 100644 --- a/app/routes/threads.py +++ b/app/routes/threads.py @@ -5,11 +5,21 @@ import math bp = Blueprint('threads', __name__, url_prefix='/threads/') -@bp.get('//') -def thread(slug): - thread = Threads.find({'slug': slug}) +@bp.get('//') +def thread_by_id(thread_id): + thread = Threads.find({'id': thread_id}) if not thread: abort(404) + return redirect(url_for('.thread', thread_id=thread_id, slug=thread.slug, **request.args)) + +@bp.get('///') +def thread(thread_id, slug): + thread = Threads.find({'id': thread_id}) + if not thread: + abort(404) + if thread.slug != slug: + return redirect(url_for('.thread', thread_id=thread_id, slug=thread.slug, **request.kwargs)) + topic = Topics.find({'id': thread.topic_id}) started_by = Users.find({'id': thread.user_id}) PER_PAGE = 10 @@ -34,21 +44,21 @@ def thread(slug): abort(404) return render_template('threads/thread.html', thread=thread, posts=thread.get_posts(PER_PAGE, page), page=page, page_count=page_count, topic=topic, started_by=started_by, topics=Topics.get_list(), Reactions=Reactions) -@bp.post('//reply/') +@bp.post('//reply/') @login_required -def reply(slug): +def reply(thread_id): user = get_active_user() - thread = Threads.find({'slug': slug}) + thread = Threads.find({'id': thread_id}) if not thread: abort(404) if thread.locked() and not user.is_mod(): # TODO: flash - return redirect(url_for('.thread', slug=slug)) + return redirect(url_for('.thread_by_id', thread_id=thread_id)) post = Posts.new(user.id, thread.id, request.form.get('babycode_content')) - return redirect(url_for('.thread', slug=slug, after=post.id, _anchor=f'post-{post.id}')) + return redirect(url_for('.thread_by_id', thread_id=thread_id, after=post.id, _anchor=f'post-{post.id}')) -@bp.get('//feed.atom/') -def feed(slug): +@bp.get('//feed.atom/') +def feed(thread_id): return 'stub' @bp.get('/new/') diff --git a/app/templates/threads/thread.html b/app/templates/threads/thread.html index 92ae275..cf5b434 100644 --- a/app/templates/threads/thread.html +++ b/app/templates/threads/thread.html @@ -23,7 +23,7 @@ {%- endif -%} - Subscribe via RSS + Subscribe via RSS {%- if is_mod() -%}
@@ -64,7 +64,7 @@
{%- if is_logged_in() -%} -
+

Reply to "{{thread.title}}"

{{- babycode_editor_component() -}} diff --git a/app/templates/topics/topic.html b/app/templates/topics/topic.html index 973471d..0a31159 100644 --- a/app/templates/topics/topic.html +++ b/app/templates/topics/topic.html @@ -48,10 +48,10 @@ {%- for thread in threads -%}
- {{thread.title}} + {{thread.title}}
    {%- if thread.posts_count / 10 > 1 -%} - {{pager(0, (((thread.posts_count / 10) | round(0, 'ceil') )| int), 'flex-last', url=url_for('threads.thread', slug=thread.slug))}} + {{pager(0, (((thread.posts_count / 10) | round(0, 'ceil') )| int), 'flex-last', url=url_for('threads.thread_by_id', thread_id=thread.id))}} {%- endif -%}
    Started by {{thread.started_by_display_name if thread.started_by_display_name else thread.started_by}} on {{timestamp(thread.created_at)}} diff --git a/app/util.py b/app/util.py index 6239dc0..a9fbf2d 100644 --- a/app/util.py +++ b/app/util.py @@ -11,7 +11,7 @@ def get_post_url(post_id, _anchor=False, external=False): anchor = None if not _anchor else f'post-{post_id}' - return url_for('threads.thread', slug=thread.slug, after=post_id, _external=external, _anchor=anchor) + return url_for('threads.thread_by_id', thread_id=thread.id, after=post_id, _external=external, _anchor=anchor) def dict_to_query_string(d) -> str: return '?' + '&'.join([f'{key}={str(value)}' for key, value in d.items()])