summaryrefslogtreecommitdiff
path: root/lib/VNDB/DB/Producers.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNDB/DB/Producers.pm')
-rw-r--r--lib/VNDB/DB/Producers.pm37
1 files changed, 31 insertions, 6 deletions
diff --git a/lib/VNDB/DB/Producers.pm b/lib/VNDB/DB/Producers.pm
index 65d1fbca..7c7da3ba 100644
--- a/lib/VNDB/DB/Producers.pm
+++ b/lib/VNDB/DB/Producers.pm
@@ -9,7 +9,7 @@ our @EXPORT = qw|dbProducerGet dbProducerEdit dbProducerAdd|;
# options: results, page, id, search, char, rev
-# what: extended, changes, vn
+# what: extended changes vn relations relgraph
sub dbProducerGet {
my $self = shift;
my %o = (
@@ -40,10 +40,12 @@ sub dbProducerGet {
push @join, $o{rev} ? 'JOIN producers p ON p.id = pr.pid' : 'JOIN producers p ON pr.id = p.latest';
push @join, 'JOIN changes c ON c.id = pr.id' if $o{what} =~ /changes/ || $o{rev};
push @join, 'JOIN users u ON u.id = c.requester' if $o{what} =~ /changes/;
+ push @join, 'JOIN relgraphs pg ON pg.id = p.rgraph' if $o{what} =~ /relgraph/;
- my $select = 'p.id, pr.type, pr.name, pr.original, pr.lang';
+ my $select = 'p.id, pr.type, pr.name, pr.original, pr.lang, pr.id AS cid, p.rgraph';
$select .= ', pr.desc, pr.alias, pr.website, p.hidden, p.locked' if $o{what} =~ /extended/;
$select .= q|, extract('epoch' from c.added) as added, c.requester, c.comments, p.latest, pr.id AS cid, u.username, c.rev| if $o{what} =~ /changes/;
+ $select .= ', pg.svg' if $o{what} =~ /relgraph/;
my($r, $np) = $self->dbPage(\%o, q|
SELECT !s
@@ -61,7 +63,8 @@ sub dbProducerGet {
} 0..$#$r;
push @{$r->[$r{$_->{pid}}]{vn}}, $_ for (@{$self->dbAll(q|
- SELECT MAX(vp.pid) AS pid, v.id, MAX(vr.title) AS title, MAX(vr.original) AS original, MIN(rr.released) AS date
+ SELECT MAX(vp.pid) AS pid, v.id, MAX(vr.title) AS title, MAX(vr.original) AS original, MIN(rr.released) AS date,
+ MAX(CASE WHEN vp.developer = true THEN 1 ELSE 0 END) AS developer, MAX(CASE WHEN vp.publisher = true THEN 1 ELSE 0 END) AS publisher
FROM releases_producers vp
JOIN releases_rev rr ON rr.id = vp.rid
JOIN releases r ON r.latest = rr.id
@@ -77,6 +80,22 @@ sub dbProducerGet {
)});
}
+ if(@$r && $o{what} =~ /relations/) {
+ my %r = map {
+ $r->[$_]{relations} = [];
+ ($r->[$_]{cid}, $_)
+ } 0..$#$r;
+
+ push @{$r->[$r{$_->{pid1}}]{relations}}, $_ for(@{$self->dbAll(q|
+ SELECT rel.pid1, rel.pid2 AS id, rel.relation, pr.name, pr.original
+ FROM producers_relations rel
+ JOIN producers p ON rel.pid2 = p.id
+ JOIN producers_rev pr ON p.latest = pr.id
+ WHERE rel.pid1 IN(!l)|,
+ [ keys %r ]
+ )});
+ }
+
return wantarray ? ($r, $np) : $r;
}
@@ -85,7 +104,7 @@ sub dbProducerGet {
# returns: ( local revision, global revision )
sub dbProducerEdit {
my($self, $pid, %o) = @_;
- my($rev, $cid) = $self->dbRevisionInsert(2, $pid, $o{editsum}, $o{uid});
+ my($rev, $cid) = $self->dbRevisionInsert('p', $pid, $o{editsum}, $o{uid});
insert_rev($self, $cid, $pid, \%o);
return ($rev, $cid);
}
@@ -95,14 +114,14 @@ sub dbProducerEdit {
# returns: ( item id, global revision )
sub dbProducerAdd {
my($self, %o) = @_;
- my($pid, $cid) = $self->dbItemInsert(2, $o{editsum}, $o{uid});
+ my($pid, $cid) = $self->dbItemInsert('p', $o{editsum}, $o{uid});
insert_rev($self, $cid, $pid, \%o);
return ($pid, $cid);
}
# helper function, inserts a producer revision
-# Arguments: global revision, item id, { columns in producers_rev }
+# Arguments: global revision, item id, { columns in producers_rev }, relations
sub insert_rev {
my($self, $cid, $pid, $o) = @_;
$self->dbExec(q|
@@ -110,6 +129,12 @@ sub insert_rev {
VALUES (!l)|,
[ $cid, $pid, @$o{qw| name original website type lang desc alias|} ]
);
+
+ $self->dbExec(q|
+ INSERT INTO producers_relations (pid1, pid2, relation)
+ VALUES (?, ?, ?)|,
+ $cid, $_->[1], $_->[0]
+ ) for (@{$o->{relations}});
}