diff options
author | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-07-29 14:04:31 +0000 |
---|---|---|
committer | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-07-29 14:04:31 +0000 |
commit | c77ece04d45d0ae05a4de17bcfd94df90b64758e (patch) | |
tree | 6f76aa8a27de3aa5b141011ad021e6dc3eb830f5 | |
parent | 7aea19c2f8e71a7d630b613a57325c4dce1b1363 (diff) |
- Further polished the rlist feature
- Re-added old VN list, delete-only and with a warning
- Small code cleanup
git-svn-id: svn://vndb.org/vndb@75 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
-rw-r--r-- | data/tpl/main | 2 | ||||
-rw-r--r-- | data/tpl/userpage | 2 | ||||
-rw-r--r-- | data/tpl/vnlist | 38 | ||||
-rw-r--r-- | data/tpl/vnpage | 14 | ||||
-rw-r--r-- | data/tpl/vnpage_rel | 3 | ||||
-rw-r--r-- | data/tpl/vnpage_stats | 2 | ||||
-rw-r--r-- | lib/VNDB.pm | 5 | ||||
-rw-r--r-- | lib/VNDB/Util/Auth.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Util/DB.pm | 41 | ||||
-rw-r--r-- | lib/VNDB/VNLists.pm | 51 | ||||
-rw-r--r-- | lib/global.pl | 4 | ||||
-rw-r--r-- | static/files/def.js | 4 | ||||
-rw-r--r-- | static/files/style.css | 4 |
13 files changed, 35 insertions, 137 deletions
diff --git a/data/tpl/main b/data/tpl/main index d0739537..9dd70b24 100644 --- a/data/tpl/main +++ b/data/tpl/main @@ -109,6 +109,8 @@ <li><a href="/u[[= $p{AuthId} ]]">[[: $p{AuthUsername} ]]</a> ([[: $p{AuthRankname} ]])</li> <!--<li><a href="/u[[= $p{AuthId} ]]/edit">My profile</a></li>--> <li><a href="/u[[= $p{AuthId} ]]/list">My visual novel list</a></li> + [[ if($p{AuthOldList}) { ]]- + <li><a href="/u[[= $p{AuthId} ]]/vlist">My visual novel list (old)</a></li>[[ } ]]- <li><a href="/t/u[[= $p{AuthId} ]]">My messages</a></li> <li><a href="/u[[= $p{AuthId} ]]/hist">My recent changes</a></li> [[ if($p{Authedit}) { ]]- diff --git a/data/tpl/userpage b/data/tpl/userpage index a45fc8af..aa02062e 100644 --- a/data/tpl/userpage +++ b/data/tpl/userpage @@ -6,7 +6,7 @@ <dl> <dt>Username</dt><dd>[[: $d{user}{username} ]]- (<a href="/u[[= $d{user}{id} ]]">u[[= $d{user}{id} ]]</a>)</dd> <dt>Registered</dt><dd>[[= formatdate('%Y-%m-%d', $d{user}{registered}) ]]</dd> - <dt>Votes</dt><dd>[[= $d{pl} ? $d{user}{list}.' (<a href="/u'.$d{user}{id}.'/list">view all</a>)' : '(hidden)' ]]</dd> + <dt>Votes</dt><dd>[[= $d{pl} ? $d{user}{votes}.' (<a href="/u'.$d{user}{id}.'/list">view all</a>)' : '(hidden)' ]]</dd> <dt>Changes</dt><dd>[[= $d{user}{changes}.($d{user}{changes}>0?' (<a href="/u'.$d{user}{id}.'/hist">recent changes</a>)':'') ]]</dd> </dl> diff --git a/data/tpl/vnlist b/data/tpl/vnlist index 0fb20509..d2763b39 100644 --- a/data/tpl/vnlist +++ b/data/tpl/vnlist @@ -1,12 +1,19 @@ -[[= ttabs('u', $d{user}, 'list') ]] +[[= ttabs('u', $d{user}) ]] <h2>[[: $p{PageTitle} ]]</h2> [[ - my $url = sprintf '/u%d/list', $d{user}{id}; + my $url = sprintf '/u%d/vlist', $d{user}{id}; my $surl = sprintf '%s?s=%s;o=%s', $url, $d{order}[0], $d{order}[1]; my $purl = $surl . ';t='.$d{status}; my $sourl = $url . '?t='.$d{status}; my $furl = $purl . ';p='.$d{page}; ]] + +<span class="warning"> + This visual novel list is read-only, only visible to you, and may be + deleted in future versions of the site. You are highly encouraged to + move everything in this list to the new <a href="/u[[= $d{user}{id} ]]/list">visual novel list</a>. +</span> + <p class="chr"> status: -[[ for (-1..$#$VNDB::LSTAT) { if($_ >= 0) { ]]- | -[[ } if($d{status} == $_) { ]]<b>[[= $_ eq -1 ? 'all' : lc $VNDB::LSTAT->[$_] ]]</b>[[ } @@ -30,46 +37,27 @@ [[ } else { ]] [[= pagebut($purl) ]]- -[[ if($d{user}{username} eq $p{AuthUsername}) { ]] <form method="post" action="[[= $furl ]]" class="tblf"> -<input type="hidden" class="hidden" name="comments" id="comments" value="" />[[ } ]] <table id="tvl"> <thead><tr> <td class="tc1">Title [[= sortbut($sourl, 'title') ]]</td> <td class="tc2">Status</td> <td class="tc3">Added [[= sortbut($sourl, 'date') ]]</td> - [[ if($d{user}{username} eq $p{AuthUsername}) { ]]- <td class="tc4">Personal note</td> - <td class="tc5"> </td>[[ } ]]- + <td class="tc5"> </td> </tr></thead> [[ for (@{$d{list}}) { ]]- <tr> <td class="tc1"><a href="/v[[= $_->{vid} ]]" title="[[: $_->{title} ]]">[[: length($_->{title})>40 ? substr($_->{title},0, 37).'...' : $_->{title} ]]</a></td> <td class="tc2">[[= $VNDB::LSTAT->[$_->{status}] ]]</td> <td class="tc3">[[= formatdate('%Y-%m-%d', $_->{date}, 'dh') ]]</td> - [[ if($d{user}{username} eq $p{AuthUsername}) { ]] <td class="tc4">[[: $_->{comments}||'-' ]]</td> - <td class="tc5"><input type="checkbox" name="sel" value="[[= $_->{vid} ]]" /></td>[[ } ]] + <td class="tc5"><input type="checkbox" name="sel" value="[[= $_->{vid} ]]" /></td> </tr> [[ } ]]- </table> -[[ if($d{user}{username} eq $p{AuthUsername}) { ]] -<select id="vnlistchange" name="vnlistchange" class="right"> - <option value="-3">- with selected -</option> - <option value="-1">Delete</option> - <option value="-2">Update personal note</option> - <optgroup label="Update status:"> - [[ for (0..$#$VNDB::LSTAT) { ]]- - <option value="[[= $_ ]]">[[: $VNDB::LSTAT->[$_] ]]</option> - [[ } ]] - </optgroup> -</select> -</form>[[ } ]] +<input type="submit" value="Delete selected items" class="right" /> +</form> -[[= pagebut($purl) ]] [[ } ]]- -[[ if($d{user}{username} eq $p{AuthUsername}) { ]]- -<p> - <br /><br /> - NOTE: Your personal notes are only visible to you, other people can't see them. -</p>[[ } ]] diff --git a/data/tpl/vnpage b/data/tpl/vnpage index f59c0a1c..1077c202 100644 --- a/data/tpl/vnpage +++ b/data/tpl/vnpage @@ -167,7 +167,6 @@ if($d{vn}{length} || $d{vn}{alias} || @links || $prod) { ]] [[ if($d{page} eq 'rg') { ]][[+ vnpage_rg ]][[ } ]] [[ if($p{AuthLoggedin}) { ]]- - <div class="dropdown" id="voteDD"> <ul> [[ if($d{vote}{vid}) { ]]- @@ -177,19 +176,6 @@ if($d{vn}{length} || $d{vn}{alias} || @links || $prod) { ]] [[ } ]] </ul> </div> - -[[ if(0) { ]] -<div class="dropdown" id="listDD"> - <ul> - [[ for (0..$#$VNDB::LSTAT) { ]]- - <li><a href="/v[[= $d{vn}{id} ]]/list?s=[[= $_ ]]" [[= $_ == 6 ? ' id="askcomment"' : '' ]]>[[: $VNDB::LSTAT->[$_] ]]</a></li> - [[ } if($d{list}{vid}) { ]]- - <li><a href="/v[[= $d{vn}{id} ]]/list?s=-1">Remove</a></li> - [[ } ]]- - </ul> -</div> -[[ } ]] - [[ } ]] diff --git a/data/tpl/vnpage_rel b/data/tpl/vnpage_rel index ed39477f..ff981b0e 100644 --- a/data/tpl/vnpage_rel +++ b/data/tpl/vnpage_rel @@ -35,7 +35,8 @@ </td> <td class="tc4"><a href="/r[[= $_->{id} ]]" title="[[: $_->{original} || $_->{title} ]]">[[: shorten $_->{title},60 ]]</a></td> <td class="tc5">[[ if($p{AuthId}) { ]] - [[= sprintf '<a href="/r%d/list?s=%d" class="dropdown above" rel="rlistDD%1$d">%s</a>', $_->{id}, $_->{rlist} ? (-1, 'x') : (1, '-') ]] + [[= sprintf '<a href="/r%d" class="dropdown above" rel="rlistDD%1$d">%s</a>', $_->{id}, $_->{rlist} ? + (substr($$VNDB::RSTAT[$_->{rlist}{rstat}],0,1).'/'.substr($$VNDB::VSTAT[$_->{rlist}{vstat}],0,1)) : '---' ]] [[ } else { ]] [[ } ]]</td> <td class="tc6">[[ if($_->{website}) { ]]<a href="[[: $_->{website} ]]" class="icons ext" title="WWW"> </a>[[ } ]]</td> </tr> diff --git a/data/tpl/vnpage_stats b/data/tpl/vnpage_stats index b4a3b018..cb24bd1c 100644 --- a/data/tpl/vnpage_stats +++ b/data/tpl/vnpage_stats @@ -8,7 +8,7 @@ $sum += ($_+1) * $d{votes}{graph}[$_]; } ]] -[[ if(!$d{user} || ($d{pv} && $d{user}{votes})) { ]]- +[[ if(!$d{user} || ($d{pl} && $d{user}{votes})) { ]]- <li><h3>Vote graph <p class="actions">[[= $total ]]- vote[[= $total==1?'':'s' ]]- total [[= $total && $d{user} ? sprintf(', average: %.1f.', $sum/$total) : '' ]]</p></h3> <table id="tvg"> diff --git a/lib/VNDB.pm b/lib/VNDB.pm index be5bc542..668c29a8 100644 --- a/lib/VNDB.pm +++ b/lib/VNDB.pm @@ -45,8 +45,7 @@ my %VNDBuris = ( # wildcards: * -> (.+), + -> ([0-9]+) edit => sub { shift->UsrEdit(shift) }, del => sub { shift->UsrDel(shift) }, list => sub { shift->RList(shift) }, - #vlist => sub { shift->VNMyList(shift) }, - #votes => sub { shift->VNVotes(shift) }, + vlist => sub { shift->VNMyList(shift) }, hist => {'*'=> sub { shift->History('u', shift, $_[1]) } }, }, # visual novels @@ -61,7 +60,6 @@ my %VNDBuris = ( # wildcards: * -> (.+), + -> ([0-9]+) rg => sub { shift->VNPage(shift, shift) }, edit => sub { shift->VNEdit(shift) }, vote => sub { shift->VNVote(shift) }, - #list => sub { shift->VNListMod(shift) }, add => sub { shift->REdit('v', shift) }, lock => sub { shift->VNLock(shift) }, hide => sub { shift->VNHide(shift) }, @@ -95,7 +93,6 @@ my %VNDBuris = ( # wildcards: * -> (.+), + -> ([0-9]+) # discussions t => { '/' => sub { shift->TIndex }, - search => sub {}, # search? '*' => { '/' => sub { shift->TTag($_[1]) }, new => sub { shift->TEdit(0, 0, $_[1]) }, diff --git a/lib/VNDB/Util/Auth.pm b/lib/VNDB/Util/Auth.pm index 2f79b512..6f265253 100644 --- a/lib/VNDB/Util/Auth.pm +++ b/lib/VNDB/Util/Auth.pm @@ -89,6 +89,7 @@ sub _AuthCheck { return 4 if !defined $d->{id}; return 5 if !$d->{rank}; + $d->{oldvnlist} = $self->DBGetVNList(uid => $d->{id}, results => 1)->[0] ? 1 : 0; $info->{_auth} = $d; return 1; @@ -110,6 +111,7 @@ sub AuthAddTpl { AuthMail => $info->{_auth}{mail}, AuthId => $info->{_auth}{id}, AuthNsfw => $info->{_auth}{flags} & $VNDB::UFLAGS->{nsfw}, + AuthOldList => $info->{_auth}{oldvnlist}, ); } else { %tpl = ( diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm index fdefa6e6..76a9a790 100644 --- a/lib/VNDB/Util/DB.pm +++ b/lib/VNDB/Util/DB.pm @@ -15,7 +15,7 @@ $VERSION = $VNDB::VERSION; DBLanguageCount DBCategoryCount DBTableCount DBGetHist DBLockItem DBIncId DBGetUser DBAddUser DBUpdateUser DBDelUser DBGetVotes DBVoteStats DBAddVote DBDelVote - DBGetVNList DBVNListStats DBAddVNList DBEditVNList DBDelVNList + DBGetVNList DBDelVNList DBGetRList DBGetRLists DBEditRList DBDelRList DBGetVN DBAddVN DBEditVN DBHideVN DBUndefRG DBVNCache DBGetRelease DBAddRelease DBEditRelease DBHideRelease @@ -357,6 +357,7 @@ sub DBDelUser { # uid my($s, $id) = @_; $s->DBExec($_, $id) for ( q|DELETE FROM vnlists WHERE uid = %d|, + q|DELETE FROM rlists WHERE uid = %d|, q|DELETE FROM votes WHERE uid = %d|, q|UPDATE changes SET requester = 0 WHERE requester = %d|, q|UPDATE threads_posts SET uid = 0 WHERE uid = %d|, @@ -493,44 +494,6 @@ sub DBGetVNList { # %options->{ uid vid hide order results page status } } -sub DBVNListStats { # uid|vid => id - my($s, $col, $id) = @_; - my $r = [ map 0, 0..$#$VNDB::LSTAT ], - my $where = $col ? 'WHERE '.$col.' = '.$id : ''; - $r->[$_->{status}] = $_->{cnt} for (@{$s->DBAll(qq| - SELECT status, COUNT(uid) as cnt - FROM vnlists - $where - GROUP BY status| - )}); - return $r; -} - - -sub DBAddVNList { # uid, vid, status, [comments] - $_[0]->DBExec(q| - INSERT INTO vnlists (uid, vid, status, date, comments) - VALUES (!l, !s)|, - [ @_[1..3], time ], $_[4]||''); -} - - -sub DBEditVNList { # %options->{ uid status comments vid } - my($s, %o) = @_; - my %set; - $set{'status = %d'} = $o{status} if defined $o{status}; - $set{'comments = !s'} = $o{comments} if defined $o{comments}; - return if !keys %set; - $s->DBExec(q| - UPDATE vnlists - SET !H - WHERE uid = %d - AND vid IN(!l)|, - \%set, $o{uid}, $o{vid} - ); -} - - sub DBDelVNList { # uid, @vid # uid = 0 to delete all my($s, $uid, @vid) = @_; $uid = $uid ? 'uid = '.$uid.' AND ' : ''; diff --git a/lib/VNDB/VNLists.pm b/lib/VNDB/VNLists.pm index f2ad5d50..a50df2e4 100644 --- a/lib/VNDB/VNLists.pm +++ b/lib/VNDB/VNLists.pm @@ -7,33 +7,7 @@ use Exporter 'import'; use vars ('$VERSION', '@EXPORT'); $VERSION = $VNDB::VERSION; -@EXPORT = qw| VNListMod VNMyList VNVote RListMod RList |; - - -sub VNListMod { - my $self = shift; - my $vid = shift; - - my $uid = $self->AuthInfo()->{id}; - return $self->ResDenied() if !$uid; - - my $f = $self->FormCheck( - { name => 's', required => 1, enum => [ -1..$#$VNDB::LSTAT ] }, - { name => 'c', required => 0, default => '', maxlength => 500 }, - ); - return $self->ResNotFound if $f->{_err}; - - if($f->{s} == -1) { - $self->DBDelVNList($uid, $vid); - } elsif($self->DBGetVNList(uid => $uid, vid => $vid)->[0]{vid}) { - $self->DBEditVNList(uid => $uid, status => $f->{s}, vid => [ $vid ], - $f->{s} == 6 ? ( comments => $f->{c} ) : ()); - } else { - $self->DBAddVNList($uid, $vid, $f->{s}, $f->{c}); - } - - $self->ResRedirect('/v'.$vid, 'temp'); -} +@EXPORT = qw| VNMyList VNVote RListMod RList |; sub VNMyList { @@ -41,7 +15,7 @@ sub VNMyList { my $user = shift; my $u = $self->DBGetUser(uid => $user)->[0]; - return $self->ResNotFound if !$user || !$u || (($self->AuthInfo->{id}||0) != $user && !($u->{flags} & $VNDB::UFLAGS->{list})); + return $self->ResNotFound if !$user || !$u || !$self->AuthInfo->{id} || $self->AuthInfo->{id} != $user; my $f = $self->FormCheck( { name => 's', required => 0, default => 'title', enum => [ qw|title date| ] }, @@ -52,24 +26,8 @@ sub VNMyList { return $self->ResNotFound if $f->{_err}; if($self->ReqMethod eq 'POST') { - my $frm = $self->FormCheck( - { name => 'vnlistchange', required => 1, enum => [ -2..$#$VNDB::LSTAT ] }, - { name => 'comments', required => 0, default => '', maxlength => 500 }, - { name => 'sel', required => 1, multi => 1 }, - ); - if(!$frm->{_err}) { - my @change = map { /^[0-9]+$/ ? $_ : () } @{$frm->{sel}}; - $self->DBDelVNList($user, @change) if @change && $frm->{vnlistchange} eq '-1'; - $self->DBEditVNList( - uid => $user, - vid => \@change, - $frm->{vnlistchange} eq '-2' ? ( - comments => $frm->{comments} - ) : ( - status => $frm->{vnlistchange} - ), - ) if @change && $frm->{vnlistchange} ne '-1'; - } + my $f = $self->FormCheck({ name => 'sel', required => 1, multi => 1, template => 'int' }); + $self->DBDelVNList($user, @{$f->{sel}}) if !$f->{_err}; } my $order = $f->{s} . ($f->{o} eq 'a' ? ' ASC' : ' DESC'); @@ -159,6 +117,7 @@ sub RList { return $self->ResNotFound if $f->{_err}; if($self->ReqMethod eq 'POST') { + return $self->ResDenied if $uid != $self->AuthInfo->{id}; my $frm = $self->FormCheck( { name => 'vnlistchange', required => 1, enum => [ 'd', 'r0'..('r'.$#$VNDB::RSTAT), 'v0'..('v'.$#$VNDB::VSTAT) ] }, { name => 'rsel', required => 1, multi => 1, template => 'int' }, diff --git a/lib/global.pl b/lib/global.pl index c1ee12ab..1d18b075 100644 --- a/lib/global.pl +++ b/lib/global.pl @@ -158,14 +158,14 @@ our $CAT = { our $RSTAT = [ - '[blank]', + 'Unknown', 'Pending', 'Obtained', # hardcoded 'On loan', 'Deleted', ]; our $VSTAT = [ - '[blank]', + 'Unknown', 'Playing', 'Finished', # hardcoded 'Stalled', diff --git a/static/files/def.js b/static/files/def.js index fea41239..486c7a4a 100644 --- a/static/files/def.js +++ b/static/files/def.js @@ -97,7 +97,7 @@ function dropDown(e) { ddy += obj.offsetTop; } while(obj = obj.offsetParent); if(tg.className.indexOf('above') >= 0) { - ddx += 16; + ddx += 25; ddy -= x(tg.rel).offsetHeight - 20; } else @@ -112,7 +112,7 @@ function dropDown(e) { var mouseX = e.pageX || (e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft); var mouseY = e.pageY || (e.clientY + document.body.scrollTop + document.documentElement.scrollTop); var obj = x(dds.rel); - if((mouseX < ddx-15 || mouseX > ddx+obj.offsetWidth+5 || mouseY < ddy-20 || mouseY > ddy + obj.offsetHeight) + if((mouseX < ddx-25 || mouseX > ddx+obj.offsetWidth+5 || mouseY < ddy-20 || mouseY > ddy + obj.offsetHeight) || (tg.nodeName.toLowerCase() == 'a' && tg.className.indexOf('dropdown') >= 0 && tg != dds)) { obj.style.left = '-500px'; dds = null; diff --git a/static/files/style.css b/static/files/style.css index b383369a..bda1e368 100644 --- a/static/files/style.css +++ b/static/files/style.css @@ -784,8 +784,8 @@ b.diff_del { font-weight: normal; background-color: #fcc; } #tre .tc2 { width: 50px; text-align: center; white-space: nowrap; } #tre .tc3, #tre .tc6 { width: 16px; margin: 0; padding: 0; white-space: nowrap; text-align: right } #tre .tc3 { width: 70px; } -#tre .tc5 { width: 15px; text-align: right; padding-right: 10px; } -#tre .tc5 a { display: block; width: 15px; text-decoration: none; color: #333; } +#tre .tc5 { width: 25px; text-align: right; padding-right: 10px; } +#tre .tc5 a { display: block; width: 25px; text-align: right;text-decoration: none; } #tbv .tc2 acronym, #tbv .tc3 acronym { zoom: 1; |