diff options
-rw-r--r-- | apioforum/db.py | 19 | ||||
-rw-r--r-- | apioforum/forum.py | 6 | ||||
-rw-r--r-- | apioforum/user.py | 11 |
3 files changed, 31 insertions, 5 deletions
diff --git a/apioforum/db.py b/apioforum/db.py index 269bd77..24146e2 100644 --- a/apioforum/db.py +++ b/apioforum/db.py @@ -214,6 +214,25 @@ CREATE TABLE webhooks ( url TEXT NOT NULL, forum INTEGER NOT NULL REFERENCES forums(id) );""", +""" +CREATE VIEW public_forums AS + SELECT f.id as id, + COALESCE(r.p_view_forum,1) as public + FROM forums f + LEFT JOIN role_config r ON + r.forum = f.id AND r.role='other'; +CREATE VIEW forum_thread_of_post AS + SELECT p.id as p_id, t.id as t_id, f.id as f_id + FROM posts p + JOIN threads t on p.thread = t.id + JOIN forums f on t.forum = f.id; +CREATE VIEW public_posts AS + SELECT p.id AS id, + b.public AS public + FROM posts p + JOIN forum_thread_of_post h ON p.id=h.p_id + JOIN public_forums b ON b.id=h.f_id; +""", ] diff --git a/apioforum/forum.py b/apioforum/forum.py index 3d7611b..ca656ff 100644 --- a/apioforum/forum.py +++ b/apioforum/forum.py @@ -423,11 +423,13 @@ def search(): FROM posts_fts JOIN posts ON posts_fts.rowid = posts.id JOIN threads ON threads.id = posts.thread - WHERE posts_fts MATCH ? + JOIN public_posts ON public_posts.id = posts.id + WHERE posts_fts MATCH ? AND public_posts.public ORDER BY rank LIMIT 50 """, (query,)).fetchall() - except OperationalError: + except OperationalError as e: + print(e) flash('your search query was malformed.') return redirect(url_for("forum.not_actual_index")) diff --git a/apioforum/user.py b/apioforum/user.py index 1a884aa..d6fbb60 100644 --- a/apioforum/user.py +++ b/apioforum/user.py @@ -24,10 +24,15 @@ def view_user(username, page=1): abort(404) posts = db.execute(""" SELECT * FROM posts - WHERE author = ? AND deleted = 0 + JOIN public_posts ON public_posts.id = posts.id + WHERE author = ? AND deleted = 0 AND public_posts.public ORDER BY created DESC LIMIT ? OFFSET ?;""",(username,POSTS_PER_PAGE,(page-1)*POSTS_PER_PAGE,)).fetchall() - num_posts = db.execute("SELECT count(*) as count FROM posts WHERE author = ?;",(username,)).fetchone()['count'] + num_posts = db.execute(""" + SELECT count(*) as count FROM posts + JOIN public_posts ON public_posts.id = posts.id + WHERE author = ? AND public_posts.public; + """,(username,)).fetchone()['count'] max_pageno = math.ceil(num_posts/POSTS_PER_PAGE) return render_template( "view_user.html", @@ -73,4 +78,4 @@ def edit_user(username): else: return redirect(url_for("user.view_user",username=username)) - return render_template("user_settings.html",user=user)
\ No newline at end of file + return render_template("user_settings.html",user=user) |