]> ruin.nu Git - ndwebbie.git/blobdiff - lib/NDWeb/Controller/Forum.pm
Only list threads with posts in the last 50 days as new and unread
[ndwebbie.git] / lib / NDWeb / Controller / Forum.pm
index caeeb1cf99ca03e6f24a51ebac2d5fe26e5c82dc..f06848de982c5e8da0391b5c27ec3bf5ae9733ab 100644 (file)
@@ -73,7 +73,8 @@ FROM forum_categories fc
        JOIN users u ON u.uid = ft.uid
        LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $1)
                ftv ON ftv.ftid = ft.ftid
-WHERE COALESCE(ft.mtime > ftv.time,TRUE)
+WHERE ft.mtime > NOW() - '50 days'::interval
+       AND COALESCE(ft.mtime > ftv.time,TRUE)
        AND ft.ftid IN (SELECT ftid FROM forum_posts WHERE ftid = ft.ftid)
        AND ((fbid > 0 AND
                        fb.fbid IN (SELECT fbid FROM forum_access WHERE gid IN (SELECT groups($1))))
@@ -232,7 +233,7 @@ sub findPosts :Private {
        my $dbh = $c->model;
 
        my $posts = $dbh->prepare(q{
-               SELECT u.uid,u.username,date_trunc('seconds',fp.time::timestamp) AS time
+               SELECT fpid,u.uid,u.username,date_trunc('seconds',fp.time::timestamp) AS time
                        ,fp.message,COALESCE(fp.time > ftv.time,TRUE) AS unread
                FROM forum_threads ft
                        JOIN forum_posts fp USING (ftid)
@@ -294,6 +295,36 @@ sub markThreadAsRead : Private {
        }
 }
 
+sub markThreadAsUnread : Local {
+       my ( $self, $c, $thread ) = @_;
+       my $dbh = $c->model;
+
+       my ($fbid) = $dbh->selectrow_array(q{
+SELECT fbid FROM forum_threads WHERE ftid = $1
+               },undef, $thread);
+
+       $dbh->do(q{
+DELETE FROM forum_thread_visits WHERE uid = $1 AND ftid = $2
+               }, undef, $c->user->id, $thread);
+       $c->res->redirect($c->uri_for('board',$fbid));
+}
+
+sub markPostAsUnread : Local {
+       my ( $self, $c, $post ) = @_;
+       my $dbh = $c->model;
+
+       my ($fbid) = $dbh->selectrow_array(q{
+SELECT fbid FROM forum_threads JOIN forum_posts USING (ftid) WHERE fpid = $1
+               },undef, $post);
+
+       $dbh->do(q{
+UPDATE forum_thread_visits ftv SET time = (fp.time - interval '1 second')
+FROM forum_posts fp
+WHERE ftv.uid = $1 AND fp.fpid = $2 AND fp.ftid = ftv.ftid
+               }, undef, $c->user->id, $post);
+       $c->res->redirect($c->uri_for('board',$fbid));
+}
+
 sub moveThreads : Local {
        my ( $self, $c, $board ) = @_;
        my $dbh = $c->model;
@@ -487,8 +518,8 @@ sub findThread : Private {
                FROM forum_boards fb
                        NATURAL JOIN forum_threads ft
                        NATURAL JOIN forum_categories fc
-                       LEFT OUTER JOIN (SELECT * FROM forum_access
-                               WHERE gid IN (SELECT groups($2))
+                       LEFT OUTER JOIN (SELECT fa.* FROM forum_access fa
+                               JOIN (SELECT groups($2) AS gid) g USING (gid)
                        ) fa USING (fbid)
                WHERE ft.ftid = $1 AND (fa.post IS NOT NULL
                        OR ft.ftid IN (SELECT ftid FROM forum_priv_access WHERE uid = $2))