]> ruin.nu Git - ndwebbie.git/blob - database/priv_threads.sql
Basic infrastructure for private messages/threads
[ndwebbie.git] / database / priv_threads.sql
1 INSERT INTO forum_categories (fcid,category) VALUES(-1000, 'Private');
2 INSERT INTO forum_boards (fcid,fbid,board) VALUES(-1000, -1999, 'Private');
3
4 CREATE TABLE forum_priv_access (
5         uid INTEGER REFERENCES users(uid),
6         ftid INTEGER REFERENCES forum_threads(ftid),
7         PRIMARY KEY(uid,ftid)
8 );
9
10 CREATE OR REPLACE FUNCTION unread_posts(IN uid int, OUT unread int, OUT "new" int) AS
11 $SQL$
12         SELECT count(*)::int AS unread, count(NULLIF(fp.time > (SELECT max(time)
13                         FROM forum_thread_visits WHERE uid = $1),FALSE))::int AS new
14                 FROM forum_threads ft
15                         JOIN forum_posts fp USING (ftid)
16                         LEFT OUTER JOIN (SELECT * FROM forum_thread_visits
17                                 WHERE uid = $1) ftv ON ftv.ftid = ft.ftid
18                 WHERE (ftv.time IS NULL OR fp.time > ftv.time) AND (
19                         (fbid > 0 AND fbid IN (SELECT fbid FROM forum_access
20                                 WHERE gid IN (SELECT groups($1)))
21                         ) OR ft.ftid IN (SELECT ftid FROM forum_priv_access WHERE uid = $1))
22 $SQL$ LANGUAGE sql STABLE;