diff options
author | Yorhel <git@yorhel.nl> | 2010-12-10 11:57:47 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2010-12-10 11:57:47 +0100 |
commit | 5c949ff5cb57fc56e05dde010cc852f0f1207ca0 (patch) | |
tree | 74f064e785a66b20f742896ebd7a2bc4436f2dbd | |
parent | 3362cf0391fad05a0eed1bd11a54f4c97f5260db (diff) |
Added vote listings for VNs and users (/[uv]+/votes)
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | data/lang.txt | 54 | ||||
-rw-r--r-- | data/style.css | 8 | ||||
-rw-r--r-- | lib/VNDB/DB/ULists.pm | 15 | ||||
-rw-r--r-- | lib/VNDB/Handler/Misc.pm | 6 | ||||
-rw-r--r-- | lib/VNDB/Handler/ULists.pm | 60 | ||||
-rw-r--r-- | lib/VNDB/Handler/Users.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Util/CommonHTML.pm | 9 |
8 files changed, 145 insertions, 10 deletions
@@ -2,6 +2,7 @@ - Removed expand/collapse from history browser and /u+/posts and switched to a combined view - Added a "general discussions" board + - Added vote listings for VNs and users (/[uv]+/votes) - API: Allow extra whitespace after "get .." command - API: Allow non-numbers as "clientver" for the login command - API: Added "image_nsfw" member to "get vn" diff --git a/data/lang.txt b/data/lang.txt index fa270bba..3ebcdd57 100644 --- a/data/lang.txt +++ b/data/lang.txt @@ -4697,6 +4697,53 @@ hu : eltávolítás a kívánságlistából nl : verwijder van wensenlijst + +# Vote listings (/v+/votes and /u+/votes) + +:_votelist_title_vn +en : Votes for [_1] +ru*: +cs*: +hu*: +nl : Stemmen op [_1] + +:_votelist_title_user +en : Votes by [_1] +ru*: +cs*: +hu*: +nl : Stemmen van [_1] + +:_votelist_col_date +en : Cast +ru*: +cs*: +hu*: +nl : Gestemd + +:_votelist_col_vote +en : Vote +ru*: +cs*: +hu*: +nl : Stem + +:_votelist_col_vn +en : Visual novel +ru*: +cs*: +hu*: +nl : + +:_votelist_col_user +en : User +ru*: +cs*: +hu*: +nl : Gebruiker + + + # VN list (/u+/list) :_rlist_title_my @@ -6849,6 +6896,13 @@ cs : Poslední hlasy hu : Legútóbbi szavazatok nl : Recente stemmen +:_votestats_allvotes +en : show all +ru*: +cs*: +hu*: +nl : alle stemmen + :_votestats_rank_title en : Ranking ru : Место diff --git a/data/style.css b/data/style.css index f2230df2..3232b111 100644 --- a/data/style.css +++ b/data/style.css @@ -717,7 +717,7 @@ a.addnew { .votestats div { text-align: center; padding-top: 5px; } .recentvotes { width: 300px } - +.recentvotes thead tr td b { font-weight: normal; padding-left: 5px } @@ -889,6 +889,12 @@ div.scr_uploader { visibility: hidden; overflow: hidden; width: 1px; height: 1px +/* vote lists */ + +div.votelist td.tc1 { width: 70px } +div.votelist td.tc2 { width: 50px; text-align: right; padding-right: 10px } + + /***** Wishlist browser ******/ .wishlist .tc1 { padding-top: 0; padding-bottom: 0; } diff --git a/lib/VNDB/DB/ULists.pm b/lib/VNDB/DB/ULists.pm index e926bae4..e52cbf37 100644 --- a/lib/VNDB/DB/ULists.pm +++ b/lib/VNDB/DB/ULists.pm @@ -147,13 +147,15 @@ sub dbVNListDel { } -# %options->{ uid vid hide results page what } +# Options: uid vid hide hide_ign results page what sort reverse # what: user, vn sub dbVoteGet { my($self, %o) = @_; $o{results} ||= 50; $o{page} ||= 1; $o{what} ||= ''; + $o{sort} ||= 'date'; + $o{reverse} //= 1; my %where = ( $o{uid} ? ( 'n.uid = ?' => $o{uid} ) : (), @@ -178,13 +180,20 @@ sub dbVoteGet { ) : (), ); + my $order = sprintf { + date => 'n.date %s', + username => 'u.username %s', + title => 'vr.title %s', + vote => 'n.vote %s', + }->{$o{sort}}, $o{reverse} ? 'DESC' : 'ASC'; + my($r, $np) = $self->dbPage(\%o, q| SELECT !s FROM votes n !s !W - ORDER BY n.date DESC|, - join(',', @select), join(' ', @join), \%where + ORDER BY !s|, + join(',', @select), join(' ', @join), \%where, $order ); return wantarray ? ($r, $np) : $r; diff --git a/lib/VNDB/Handler/Misc.pm b/lib/VNDB/Handler/Misc.pm index 187bd0ab..081bbb25 100644 --- a/lib/VNDB/Handler/Misc.pm +++ b/lib/VNDB/Handler/Misc.pm @@ -24,14 +24,12 @@ YAWF::register( qr{v/search}, sub { $_[0]->resRedirect("/v/all?q=".uri_escape($_[0]->reqParam('q')), 'perm') }, qr{notes}, sub { $_[0]->resRedirect('/d8', 'perm') }, qr{faq}, sub { $_[0]->resRedirect('/d6', 'perm') }, - qr{v([1-9]\d*)/(?:stats|scr|votes)}, + qr{v([1-9]\d*)/(?:stats|scr)}, sub { $_[0]->resRedirect("/v$_[1]", 'perm') }, qr{u/list(/[a-z0]|/all)?}, sub { my $l = defined $_[1] ? $_[1] : '/all'; $_[0]->resRedirect("/u$l", 'perm') }, qr{d([1-9]\d*)\.([1-9]\d*)}, - sub { $_[0]->resRedirect("/d$_[1]#$_[2]", 'perm') }, - qr{u([1-9]\d*)/votes}, - sub { $_[0]->resRedirect("/u$_[1]/list?v=1", 'perm') }, + sub { $_[0]->resRedirect("/d$_[1]#$_[2]", 'perm') } ); diff --git a/lib/VNDB/Handler/ULists.pm b/lib/VNDB/Handler/ULists.pm index a610a14a..002f90d3 100644 --- a/lib/VNDB/Handler/ULists.pm +++ b/lib/VNDB/Handler/ULists.pm @@ -12,6 +12,7 @@ YAWF::register( qr{v([1-9]\d*)/wish}, \&vnwish, qr{r([1-9]\d*)/list}, \&rlist, qr{xml/rlist.xml}, \&rlist, + qr{([uv])([1-9]\d*)/votes}, \&votelist, qr{u([1-9]\d*)/wish}, \&wishlist, qr{u([1-9]\d*)/list}, \&vnlist, ); @@ -97,6 +98,65 @@ sub rlist { } +sub votelist { + my($self, $type, $id) = @_; + + my $obj = $type eq 'v' ? $self->dbVNGet(id => $id)->[0] : $self->dbUserGet(uid => $id)->[0]; + return 404 if !$obj->{id}; + + my $f = $self->formValidate( + { name => 'p', required => 0, default => 1, template => 'int' }, + { name => 'o', required => 0, default => 'd', enum => ['a', 'd'] }, + { name => 's', required => 0, default => 'date', enum => [qw|date title vote|] }, + ); + + my($list, $np) = $self->dbVoteGet( + $type.'id' => $id, + what => $type eq 'v' ? 'user' : 'vn', + hide => $type eq 'v', + hide_ign => $type eq 'v', + sort => $f->{s} eq 'title' && $type eq 'v' ? 'username' : $f->{s}, + reverse => $f->{o} eq 'd', + results => 50, + page => $f->{p} + ); + return 404 if !@$list; + + my $title = mt $type eq 'v' ? '_votelist_title_vn' : '_votelist_title_user', $obj->{title} || $obj->{username}; + $self->htmlHeader(title => $title); + $self->htmlMainTabs($type => $obj, 'votes'); + div class => 'mainbox'; + h1 $title; + end; + + $self->htmlBrowse( + class => 'votelist', + items => $list, + options => $f, + nextpage => $np, + pageurl => "/$type$id/votes?o=$f->{o};s=$f->{s}", + sorturl => "/$type$id/votes", + header => [ + [ mt('_votelist_col_date'), 'date' ], + [ mt('_votelist_col_vote'), 'vote' ], + [ mt('_votelist_col_'.($type eq 'v'?'user':'vn')), 'title' ], + ], + row => sub { + my($s, $n, $l) = @_; + Tr $n % 2 ? (class => 'odd') : (); + td class => 'tc1', $self->{l10n}->date($l->{date}); + td class => 'tc2', $l->{vote}; + td class => 'tc3'; + a href => $type eq 'v' ? ("/u$l->{uid}", $l->{username}) : ("/v$l->{vid}", shorten $l->{title}, 100); + end; + end; + }, + ); + + $self->htmlFooter; +} + + sub wishlist { my($self, $uid) = @_; diff --git a/lib/VNDB/Handler/Users.pm b/lib/VNDB/Handler/Users.pm index b3bc889e..a53a5193 100644 --- a/lib/VNDB/Handler/Users.pm +++ b/lib/VNDB/Handler/Users.pm @@ -521,7 +521,7 @@ sub list { td class => 'tc2', $self->{l10n}->date($l->{registered}); td class => 'tc3'.(!$l->{show_list} && $self->authCan('usermod') ? ' linethrough' : ''); lit !$l->{show_list} && !$self->authCan('usermod') ? '-' : !$l->{c_votes} ? 0 : - qq|<a href="/u$l->{id}/list">$l->{c_votes}</a>|; + qq|<a href="/u$l->{id}/votes">$l->{c_votes}</a>|; end; td class => 'tc4'; lit !$l->{c_changes} ? 0 : qq|<a href="/u$l->{id}/hist">$l->{c_changes}</a>|; diff --git a/lib/VNDB/Util/CommonHTML.pm b/lib/VNDB/Util/CommonHTML.pm index 280ceddb..941bf827 100644 --- a/lib/VNDB/Util/CommonHTML.pm +++ b/lib/VNDB/Util/CommonHTML.pm @@ -361,7 +361,14 @@ sub htmlVoteStats { if(@$recent) { table class => 'recentvotes'; thead; Tr; - td colspan => 3, mt '_votestats_recent'; + td colspan => 3; + txt mt '_votestats_recent'; + b; + txt '('; + a href => "/$type$obj->{id}/votes", mt '_votestats_allvotes'; + txt ')'; + end; + end; end; end; for (0..$#$recent) { Tr $_ % 2 == 0 ? (class => 'odd') : (); |