summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2010-12-10 11:57:47 +0100
committerYorhel <git@yorhel.nl>2010-12-10 11:57:47 +0100
commit5c949ff5cb57fc56e05dde010cc852f0f1207ca0 (patch)
tree74f064e785a66b20f742896ebd7a2bc4436f2dbd
parent3362cf0391fad05a0eed1bd11a54f4c97f5260db (diff)
Added vote listings for VNs and users (/[uv]+/votes)
-rw-r--r--ChangeLog1
-rw-r--r--data/lang.txt54
-rw-r--r--data/style.css8
-rw-r--r--lib/VNDB/DB/ULists.pm15
-rw-r--r--lib/VNDB/Handler/Misc.pm6
-rw-r--r--lib/VNDB/Handler/ULists.pm60
-rw-r--r--lib/VNDB/Handler/Users.pm2
-rw-r--r--lib/VNDB/Util/CommonHTML.pm9
8 files changed, 145 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 97393312..de37331d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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') : ();