summaryrefslogtreecommitdiff
path: root/lib/VNDB/DB/Tags.pm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2010-12-13 10:00:28 +0100
committerYorhel <git@yorhel.nl>2010-12-13 10:00:28 +0100
commit9000f60e314c9d19dd1be5e8028cfe26b236f31d (patch)
tree14d8abfcdd5aa2bedbd21bb1d016747b91d76822 /lib/VNDB/DB/Tags.pm
parenta8c9a132748c77263f7f552b2c6838e5f086307a (diff)
Added advanced tag link browser
Still need to add some links to the browser to parts of the site.
Diffstat (limited to 'lib/VNDB/DB/Tags.pm')
-rw-r--r--lib/VNDB/DB/Tags.pm38
1 files changed, 34 insertions, 4 deletions
diff --git a/lib/VNDB/DB/Tags.pm b/lib/VNDB/DB/Tags.pm
index 93023bc1..4a87713b 100644
--- a/lib/VNDB/DB/Tags.pm
+++ b/lib/VNDB/DB/Tags.pm
@@ -161,13 +161,43 @@ sub dbTagMerge {
# Directly fetch rows from tags_vn
-# Arguments: %options->{ vid uid tag }
+# Options: vid uid tag page results what sort reverse
+# What: details
sub dbTagLinks {
my($self, %o) = @_;
- return $self->dbAll(
- 'SELECT tag, vid, uid, vote, spoiler FROM tags_vn !W',
- { map { +"$_ = ?" => $o{$_} } keys %o }
+ $o{results} ||= 999;
+ $o{page} ||= 1;
+ $o{what} ||= '';
+
+ my %where = (
+ $o{vid} ? ('tv.vid = ?' => $o{vid}) : (),
+ $o{uid} ? ('tv.uid = ?' => $o{uid}) : (),
+ $o{tag} ? ('tv.tag = ?' => $o{tag}) : (),
+ );
+
+ my @select = (
+ qw|tv.tag tv.vid tv.uid tv.vote tv.spoiler|, "EXTRACT('epoch' from tv.date) AS date",
+ $o{what} =~ /details/ ? (qw|vr.title u.username t.name|) : (),
);
+
+ my @join = $o{what} =~ /details/ ? (
+ 'JOIN vn v ON v.id = tv.vid JOIN vn_rev vr ON vr.id = v.latest',
+ 'JOIN users u ON u.id = tv.uid',
+ 'JOIN tags t ON t.id = tv.tag'
+ ) : ();
+
+ my $order = !$o{sort} ? '' : 'ORDER BY '.{
+ username => 'u.username',
+ date => 'tv.date',
+ title => 'vr.title',
+ tag => 't.name',
+ }->{$o{sort}}.($o{reverse} ? ' DESC' : ' ASC');
+
+ my($r, $np) = $self->dbPage(\%o,
+ 'SELECT !s FROM tags_vn tv !s !W !s',
+ join(', ', @select), join(' ', @join), \%where, $order
+ );
+ return wantarray ? ($r, $np) : $r;
}