summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2015-04-27 09:35:38 +0200
committerYorhel <git@yorhel.nl>2015-04-27 09:35:38 +0200
commit141fbfdb168168b478fc0f5265cc9ee572519434 (patch)
tree8d2a1b7b92cb40facf6b1f7bcf4ad71501095bd5
parent0a53c963193744f2961d1f54ace9a444b265e4d4 (diff)
Multi: Backport staff database changes from master branch
Includes changes from 5926ce95395976456c0e15895d13491a81819087 and e20b19ce400ccf382a969a51777e0678ff8d44db
-rw-r--r--lib/Multi/Feed.pm6
-rw-r--r--lib/Multi/IRC.pm15
2 files changed, 14 insertions, 7 deletions
diff --git a/lib/Multi/Feed.pm b/lib/Multi/Feed.pm
index d2e97034..d2161aec 100644
--- a/lib/Multi/Feed.pm
+++ b/lib/Multi/Feed.pm
@@ -44,14 +44,16 @@ sub generate {
# changes
pg_cmd q{
- SELECT '/'||c.type||COALESCE(vr.vid, rr.rid, pr.pid, cr.cid)||'.'||c.rev AS id,
- COALESCE(vr.title, rr.title, pr.name, cr.name) AS title, extract('epoch' from c.added) AS updated,
+ SELECT '/'||c.type||COALESCE(vr.vid, rr.rid, pr.pid, cr.cid, sr.sid)||'.'||c.rev AS id,
+ COALESCE(vr.title, rr.title, pr.name, cr.name, sa.name) AS title, extract('epoch' from c.added) AS updated,
u.username, u.id AS uid, c.comments AS summary
FROM changes c
LEFT JOIN vn_rev vr ON c.type = 'v' AND c.id = vr.id
LEFT JOIN releases_rev rr ON c.type = 'r' AND c.id = rr.id
LEFT JOIN producers_rev pr ON c.type = 'p' AND c.id = pr.id
LEFT JOIN chars_rev cr ON c.type = 'c' AND c.id = cr.id
+ LEFT JOIN staff_rev sr ON c.type = 's' AND c.id = sr.id
+ LEFT JOIN staff_alias sa ON sa.rid = sr.id AND sa.id = sr.aid
JOIN users u ON u.id = c.requester
WHERE c.requester <> 1
ORDER BY c.id DESC
diff --git a/lib/Multi/IRC.pm b/lib/Multi/IRC.pm
index 93691660..5718f7fc 100644
--- a/lib/Multi/IRC.pm
+++ b/lib/Multi/IRC.pm
@@ -196,6 +196,7 @@ sub formatid {
p => 'producer',
r => 'release',
c => 'character',
+ s => 'staff',
g => 'tag',
i => 'trait',
t => 'thread',
@@ -260,11 +261,12 @@ sub handleid {
$t eq 'u' ? 'u.username AS title FROM users u WHERE u.id = $2' :
$t eq 'p' ? 'pr.name AS title FROM producers_rev pr JOIN producers p ON p.latest = pr.id WHERE p.id = $2' :
$t eq 'c' ? 'cr.name AS title FROM chars_rev cr JOIN chars c ON c.latest = cr.id WHERE c.id = $2' :
+ $t eq 's' ? 'sa.name AS title FROM staff_rev sr JOIN staff s ON s.latest = sr.id JOIN staff_alias sa ON sa.id = sr.aid AND sa.rid = s.latest WHERE s.id = $2' :
$t eq 't' ? 'title, '.$GETBOARDS.' FROM threads t WHERE id = $2' :
$t eq 'g' ? 'name AS title FROM tags WHERE id = $2' :
$t eq 'i' ? 'name AS title FROM traits WHERE id = $2' :
'rr.title FROM releases_rev rr JOIN releases r ON r.latest = rr.id WHERE r.id = $2'),
- [ $t, $id ], $c if !$rev && $t =~ /[vprtugic]/;
+ [ $t, $id ], $c if !$rev && $t =~ /[vprtugics]/;
# edit/insert of vn/release/producer or discussion board post
pg_cmd 'SELECT $1::text AS type, $2::integer AS id, $3::integer AS rev, '.(
@@ -272,8 +274,9 @@ sub handleid {
$t eq 'r' ? 'rr.title, u.username, c.comments FROM changes c JOIN releases_rev rr ON c.id = rr.id JOIN users u ON u.id = c.requester WHERE rr.rid = $2 AND c.rev = $3' :
$t eq 'p' ? 'pr.name AS title, u.username, c.comments FROM changes c JOIN producers_rev pr ON c.id = pr.id JOIN users u ON u.id = c.requester WHERE pr.pid = $2 AND c.rev = $3' :
$t eq 'c' ? 'cr.name AS title, u.username, h.comments FROM changes h JOIN chars_rev cr ON h.id = cr.id JOIN users u ON u.id = h.requester WHERE cr.cid = $2 AND h.rev = $3' :
+ $t eq 's' ? 'sa.name AS title, u.username, c.comments FROM changes c JOIN staff_rev sr ON c.id = sr.id JOIN users u ON u.id = c.requester JOIN staff_alias sa ON sa.id = sr.aid AND sa.rid = sr.id WHERE sr.sid = $2 AND c.rev = $3' :
't.title, u.username, '.$GETBOARDS.' FROM threads t JOIN threads_posts tp ON tp.tid = t.id JOIN users u ON u.id = tp.uid WHERE t.id = $2 AND tp.num = $3'),
- [ $t, $id, $rev], $c if $rev && $t =~ /[vprtc]/;
+ [ $t, $id, $rev], $c if $rev && $t =~ /[vprtcs]/;
# documentation page (need to parse the doc pages manually here)
if($t eq 'd') {
@@ -300,8 +303,8 @@ sub vndbid {
my @id; # [ type, id, ref ]
for (split /[, ]/, $msg) {
next if length > 15 or m{[a-z]{3,6}://}i; # weed out URLs and too long things
- push @id, /^(?:.*[^\w]|)([dvprtc])([1-9][0-9]*)\.([1-9][0-9]*)(?:[^\w].*|)$/ ? [ $1, $2, $3 ] # x+.+
- : /^(?:.*[^\w]|)([dvprtugic])([1-9][0-9]*)(?:[^\w].*|)$/ ? [ $1, $2, '' ] : (); # x+
+ push @id, /^(?:.*[^\w]|)([dvprtcs])([1-9][0-9]*)\.([1-9][0-9]*)(?:[^\w].*|)$/ ? [ $1, $2, $3 ] # x+.+
+ : /^(?:.*[^\w]|)([dvprtugics])([1-9][0-9]*)(?:[^\w].*|)$/ ? [ $1, $2, '' ] : (); # x+
}
handleid($chan, @$_) for @id;
}
@@ -317,12 +320,14 @@ sub notify {
my $q = {
rev => q{
SELECT c.type, c.rev, c.comments, c.id AS lastid,
- COALESCE(vr.vid, rr.rid, pr.pid, cr.cid) AS id, COALESCE(vr.title, rr.title, pr.name, cr.name) AS title, u.username
+ COALESCE(vr.vid, rr.rid, pr.pid, cr.cid, sr.sid) AS id, COALESCE(vr.title, rr.title, pr.name, cr.name, sa.name) AS title, u.username
FROM changes c
LEFT JOIN vn_rev vr ON c.type = 'v' AND c.id = vr.id
LEFT JOIN releases_rev rr ON c.type = 'r' AND c.id = rr.id
LEFT JOIN producers_rev pr ON c.type = 'p' AND c.id = pr.id
LEFT JOIN chars_rev cr ON c.type = 'c' AND c.id = cr.id
+ LEFT JOIN staff_rev sr ON c.type = 's' AND c.id = sr.id
+ LEFT JOIN staff_alias sa ON c.type = 's' AND sa.id = sr.aid AND sa.rid = c.id
JOIN users u ON u.id = c.requester
WHERE c.id > $1 AND c.requester <> 1
ORDER BY c.id},