diff options
author | Yorhel <git@yorhel.nl> | 2010-12-13 10:00:28 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2010-12-13 10:00:28 +0100 |
commit | 9000f60e314c9d19dd1be5e8028cfe26b236f31d (patch) | |
tree | 14d8abfcdd5aa2bedbd21bb1d016747b91d76822 /lib/VNDB/DB/Tags.pm | |
parent | a8c9a132748c77263f7f552b2c6838e5f086307a (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.pm | 38 |
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; } |