diff options
author | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-07-16 07:34:49 +0000 |
---|---|---|
committer | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-07-16 07:34:49 +0000 |
commit | ee40f5605e50b1d421e3456f672a324360aff5a7 (patch) | |
tree | 3c0b8b491da00c20d1f4b38a634d5be12e13cee4 | |
parent | 94e9da6f6c654f45bc7efb7a4e6591c64f0553c5 (diff) |
Accounts can be deleted, home page now shows age of last post instead of user, removed the /u+/pending URL, and small bugfix in dump.sql
git-svn-id: svn://vndb.org/vndb@69 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
-rw-r--r-- | data/tpl/defs.pl | 34 | ||||
-rw-r--r-- | data/tpl/hist | 2 | ||||
-rw-r--r-- | data/tpl/home | 2 | ||||
-rw-r--r-- | data/tpl/tindex | 4 | ||||
-rw-r--r-- | data/tpl/ttag | 4 | ||||
-rw-r--r-- | data/tpl/tthread | 2 | ||||
-rw-r--r-- | data/tpl/vnpage_stats | 6 | ||||
-rw-r--r-- | lib/ChangeLog | 1 | ||||
-rw-r--r-- | lib/VNDB.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Users.pm | 11 | ||||
-rw-r--r-- | lib/VNDB/Util/DB.pm | 16 | ||||
-rw-r--r-- | static/files/def.js | 3 | ||||
-rw-r--r-- | util/dump.sql | 7 | ||||
-rw-r--r-- | util/updates/update_1.20.sql | 4 |
14 files changed, 68 insertions, 30 deletions
diff --git a/data/tpl/defs.pl b/data/tpl/defs.pl index 039c6507..ef5b3a67 100644 --- a/data/tpl/defs.pl +++ b/data/tpl/defs.pl @@ -62,14 +62,19 @@ sub wraplong { # text, margin } sub age { my $a = time-$_[0]; - return sprintf '%d %s', - $a > 60*60*24*365*2 ? ( $a/60/60/24/365, 'years ago' ) : - $a > 60*60*24*(365/12)*2 ? ( $a/60/60/24/(365/12), 'months ago' ) : - $a > 60*60*24*7*2 ? ( $a/60/60/24/7, 'weeks ago' ) : - $a > 60*60*24*2 ? ( $a/60/60/24, 'days ago' ) : - $a > 60*60*2 ? ( $a/60/60, 'hours ago' ) : - $a > 60*2 ? ( $a/60, 'min ago' ) : - ( $a, 'sec ago' ) ; + return sprintf '%d %s%s', + $a > 60*60*24*365*2 ? ( $a/60/60/24/365, 'years' ) : + $a > 60*60*24*(365/12)*2 ? ( $a/60/60/24/(365/12), 'months' ) : + $a > 60*60*24*7*2 ? ( $a/60/60/24/7, 'weeks' ) : + $a > 60*60*24*2 ? ( $a/60/60/24, 'days' ) : + $a > 60*60*2 ? ( $a/60/60, 'hours' ) : + $a > 60*2 ? ( $a/60, 'min' ) : + ( $a, 'sec' ), + $_[1]?'':' ago'; +} +sub userstr { # [ uid, username ] or a hashref containing those keys + my($id,$n) = ref($_[0])eq'HASH'?($_[0]{uid}||$_[0]{requester}, $_[0]{username}):@_; + return !$id ? '[deleted]' : '<a href="/u'.$id.'">'.$n.'</a>'; } @@ -104,7 +109,7 @@ sub cdiff { # obj1, obj2, @items->[ short, name, serialise, diff, [parsed_x, par qq|<a href="/$type$$y{id}" id="revmain">$type$$y{id}</a> </div>|; if(!$x) { # just show info about the revision if there is no previous edit - return $pre.qq|<div id="tmc"><b>Revision $$y{rev}</b> (<a href="/$type$$y{id}/edit?rev=$$y{rev}">edit</a>)<br />By <a href="/u$$y{requester}">$$y{username}</a> on |. + return $pre.qq|<div id="tmc"><b>Revision $$y{rev}</b> (<a href="/$type$$y{id}/edit?rev=$$y{rev}">edit</a>)<br />By |.userstr($y).q| on |. formatdate('%Y-%m-%d at %R', $$y{added}).'<br /><b>Edit summary:</b><br /><br />'. summary($$y{comments}, 0, '[no summary]').'</div>'; } @@ -132,8 +137,8 @@ sub cdiff { # obj1, obj2, @items->[ short, name, serialise, diff, [parsed_x, par } } return $pre.'<table id="tmc"><thead><tr><td class="tc1"> </td>'. - qq|<td class="tc2"><b>Revision $$x{rev}</b> (<a href="/$type$$y{id}/edit?rev=$$x{rev}">edit</a>)<br />By <a href="/u$$x{requester}">$$x{username}</a> on |.formatdate('%Y-%m-%d at %R', $$x{added}).'</td>'. - qq|<td class="tc3"><b>Revision $$y{rev}</b> (<a href="/$type$$y{id}/edit?rev=$$y{rev}">edit</a>)<br />By <a href="/u$$y{requester}">$$y{username}</a> on |.formatdate('%Y-%m-%d at %R', $$y{added}).'</td>'. + qq|<td class="tc2"><b>Revision $$x{rev}</b> (<a href="/$type$$y{id}/edit?rev=$$x{rev}">edit</a>)<br />By |.userstr($x).' on '.formatdate('%Y-%m-%d at %R', $$x{added}).'</td>'. + qq|<td class="tc3"><b>Revision $$y{rev}</b> (<a href="/$type$$y{id}/edit?rev=$$y{rev}">edit</a>)<br />By |.userstr($y).' on '.formatdate('%Y-%m-%d at %R', $$y{added}).'</td>'. '</tr><tr></tr><tr><td> </td><td colspan="2"><b>Edit summary of revision '.$$y{rev}.'</b><br /><br />'.summary($$y{comments}, 0, '[no summary]').'<br /><br /></td></tr></thead>'. join('',map{ '<tr><td class="tc1">'.$_->[1].'</td><td class="tc2">'.$_->[4].'</td><td class="tc3">'.$_->[5].'</td></tr>' @@ -203,9 +208,10 @@ sub ttabs { # [vrpu], obj, sel $p{Authlock} && $t ne 'u' ? sprintf('<a href="/%%s/lock">%s</a>', $$o{locked} ? 'unlock' : 'lock') : (), $p{Authdel} && $t ne 'u' ? ( - sprintf('<a href="/%%s/hide"%s>%s</a>', $t eq 'v' ? ' id="vhide"' : '', $$o{hidden} ? 'unhide' : 'hide') - ) : (), - ($t eq 'u' && $p{Authuseredit}) || ($t ne 'u' && (!$$o{locked} && !$$o{hidden}) || ($p{Authedit} && $p{Authlock})) ? + sprintf('<a href="/%%s/hide"%s>%s</a>', $t eq 'v' ? ' id="vhide"' : '', $$o{hidden} ? 'unhide' : 'hide') ) : (), + $t eq 'u' && $p{Authusermod} ? ( + '<a href="/%s/del" id="userdel">del</a>' ) : (), + ($t eq 'u' && $p{Authusermod}) || ($t ne 'u' && (!$$o{locked} && !$$o{hidden}) || ($p{Authedit} && $p{Authlock})) ? ($s eq 'edit' ? 'edit' : '<a href="'.($p{Authedit}?'/%s/edit':'/u/register?n=1').'" '.($t eq 'v' || $t eq 'r' ? 'class="dropdown" rel="nofollow editDD"':'').'>edit</a>') : (), $t eq 'u' ? ( diff --git a/data/tpl/hist b/data/tpl/hist index 77acb6c2..1b9412cd 100644 --- a/data/tpl/hist +++ b/data/tpl/hist @@ -82,7 +82,7 @@ <td class="tc1_2"><a href="/[[= $t.$_->{iid}.'.'.$_->{rev} ]]">.[[= $_->{rev} == 1 ? '<b>'.$_->{rev}.'</b>' : $_->{rev} ]]</a></td> <td class="tc2">[[= formatdate('%Y-%m-%d %R', $_->{added}, 'dh') ]]</td> [[ if($d{type} ne 'u' || $d{act}) { ]]- - <td class="tc3"><a href="/u[[= $_->{requester} ]]">[[: $_->{username} ]]</a></td>[[ } ]]- + <td class="tc3">[[= userstr $_ ]]</td>[[ } ]]- [[ if(!$d{type} || $d{type} eq 'u' || $d{act}) { ]]- <td class="tc4"><a href="/[[= $t.$_->{iid} ]].[[= $_->{rev} ]]" title="[[: $_->{ititle} ]]">[[: shorten $_->{ititle}, 30 ]]</a></td>[[ } ]]- [[ if($d{type} && !$d{act}) { ]]- diff --git a/data/tpl/home b/data/tpl/home index 1d041841..338044e1 100644 --- a/data/tpl/home +++ b/data/tpl/home @@ -33,7 +33,7 @@ <ul class="home"> <li><b>Recent posts</b></li> [[ for (@{$d{recentposts}}) { ]]- - <li><a href="/t[[= $_->{id}.'.'.$_->{count} ]]" title="[[: $_->{title} ]]">[[: shorten $_->{title}, 25 ]]</a> <i>[[: $_->{lusername} ]]</i></li> + <li><a href="/t[[= $_->{id}.'.'.$_->{count} ]]" title="[[: $_->{title} ]]">[[: shorten $_->{title}, 25 ]]</a> <i>[[= age $_->{ldate}, 1 ]]</i></li> [[ } ]]- </ul> diff --git a/data/tpl/tindex b/data/tpl/tindex index ae5625b3..89608b11 100644 --- a/data/tpl/tindex +++ b/data/tpl/tindex @@ -34,8 +34,8 @@ [[ if($_->{locked}) { ]]- <b>[locked]</b>[[ } ]] </td> <td class="tc2">[[= $_->{count}-1 ]]</td> - <td class="tc3"><a href="/u[[= $_->{uid} ]]">[[= $_->{username} ]]</a></td> - <td class="tc4"><a href="/u[[= $_->{luid} ]]">[[= $_->{lusername} ]]</a> @ + <td class="tc3">[[= userstr $_ ]]</td> + <td class="tc4">[[= userstr $_->{luid}, $_->{lusername} ]]- @ <a href="/t[[= $_->{id}.($_->{count}>$d{ppp}?'/'.ceil($_->{count}/$d{ppp}):'').'#'.$_->{count} ]]"> [[= age $_->{ldate} ]]</a></td> </tr> diff --git a/data/tpl/ttag b/data/tpl/ttag index 6ddee459..0fe641b7 100644 --- a/data/tpl/ttag +++ b/data/tpl/ttag @@ -38,8 +38,8 @@ [[ if($_->{locked}) { ]]- <b>[locked]</b>[[ } ]] </td> <td class="tc2">[[= $_->{count}-1 ]]</td> - <td class="tc3"><a href="/u[[= $_->{uid} ]]">[[= $_->{username} ]]</a></td> - <td class="tc4"><a href="/u[[= $_->{luid} ]]">[[= $_->{lusername} ]]</a> @ + <td class="tc3">[[= userstr $_ ]]</td> + <td class="tc4">[[= userstr $_->{luid}, $_->{lusername} ]]- @ <a href="/t[[= $_->{id}.($_->{count}>$d{ppp}?'/'.ceil($_->{count}/$d{ppp}):'').'#'.$_->{count} ]]"> [[= age $_->{ldate} ]]</a></td> </tr> diff --git a/data/tpl/tthread b/data/tpl/tthread index 915474f7..f3e2a9a3 100644 --- a/data/tpl/tthread +++ b/data/tpl/tthread @@ -39,7 +39,7 @@ <td class="tc1"> <a href="/t[[= $d{t}{id} ]].[[= $_->{num} ]]" name="[[= $_->{num} ]]">#[[= $_->{num} ]]</a> [[ if(!$_->{hidden}) { ]]- - by <a href="/u[[= $_->{uid} ]]">[[: $_->{username} ]]</a><br /> + by -[[= userstr $_ ]]<br /> <i>[[= formatdate('%Y-%m-%d %R', $_->{date}) ]]</i> [[ } ]] </td> diff --git a/data/tpl/vnpage_stats b/data/tpl/vnpage_stats index 841fce37..653987a1 100644 --- a/data/tpl/vnpage_stats +++ b/data/tpl/vnpage_stats @@ -10,7 +10,7 @@ ]] [[ if(!$d{user} || ($d{pv} && $d{user}{votes})) { ]]- <li><h3>Vote graph <p class="actions">[[= $total ]]- vote[[= $total==1?'':'s' ]]- total - [[= $total ? sprintf(', average: %.1f.', $sum/$total) : '' ]]</p></h3> + [[= $total && $d{user} ? sprintf(', average: %.1f.', $sum/$total) : '' ]]</p></h3> <table id="tvg"> [[ for (0..$#{$d{votes}{graph}}) { ]]- <tr> @@ -26,7 +26,7 @@ [[ for (@{$d{votes}{latest}}) { ]]- <tr> [[ if(!$d{user}) { ]]- - <td class="tc1"><a href="/u[[= $_->{uid} ]]">[[: $_->{username} ]]</a></td> + <td class="tc1">[[= userstr $_ ]]</td> [[ } else { ]]- <td class="tc1"><a href="/v[[= $_->{vid} ]]">[[: length($_->{title})>30?substr($_->{title},0,27).'...':$_->{title} ]]</a></td> [[ } ]]- @@ -56,7 +56,7 @@ [[ for (@{$d{lists}{latest}}) { ]]- <tr> [[ if(!$d{user}) { ]]- - <td class="tc1"><a href="/u[[= $_->{uid} ]]">[[: $_->{username} ]]</a></td> + <td class="tc1">[[= userstr $_ ]]</td> [[ } else { ]]- <td class="tc1"><a href="/v[[= $_->{vid} ]]">[[: length($_->{title})>25?substr($_->{title},0,23).'...':$_->{title} ]]</a></td> [[ } ]]- diff --git a/lib/ChangeLog b/lib/ChangeLog index ffc166a4..b6856535 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -13,6 +13,7 @@ TODO: - Re-added the vote stats to VN pages - Searching for 'Chinese' doesn't select 'NES' - Place/time category order on VN pages is now consistent + - Admins can delete users from the DB 1.19 - 2008-07-08 (r62) - Integrated discussion board diff --git a/lib/VNDB.pm b/lib/VNDB.pm index 91e8eb49..dff63bc7 100644 --- a/lib/VNDB.pm +++ b/lib/VNDB.pm @@ -45,7 +45,7 @@ my %VNDBuris = ( # wildcards: * -> (.+), + -> ([0-9]+) '/' => sub { shift->UsrPage(shift) }, votes => sub { shift->VNVotes(shift) }, edit => sub { shift->UsrEdit(shift) }, - pending => sub { shift->UsrPending(shift) }, + del => sub { shift->UsrDel(shift) }, list => sub { shift->VNMyList(shift) }, hist => {'*'=> sub { shift->History('u', shift, $_[1]) } }, }, diff --git a/lib/VNDB/Users.pm b/lib/VNDB/Users.pm index 318f6dbc..670086cc 100644 --- a/lib/VNDB/Users.pm +++ b/lib/VNDB/Users.pm @@ -7,7 +7,7 @@ use Exporter 'import'; use Digest::MD5 'md5_hex'; our $VERSION = $VNDB::VERSION; -our @EXPORT = qw| UsrLogin UsrLogout UsrReg UsrPass UsrEdit UsrList UsrPage |; +our @EXPORT = qw| UsrLogin UsrLogout UsrReg UsrPass UsrEdit UsrList UsrPage UsrDel |; sub UsrLogin { @@ -231,5 +231,14 @@ sub UsrPage { }); } + +sub UsrDel { + my($s, $id) = @_; + return $s->ResDenied if !$s->AuthCan('usermod'); + $s->DBDelUser($id); + $s->ResRedirect('/u/list', 'temp'); +} + + 1; diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm index e3685687..46a17fb1 100644 --- a/lib/VNDB/Util/DB.pm +++ b/lib/VNDB/Util/DB.pm @@ -13,7 +13,7 @@ $VERSION = $VNDB::VERSION; @EXPORT = qw| DBInit DBCheck DBCommit DBRollBack DBExit DBLanguageCount DBCategoryCount DBTableCount DBGetHist DBLockItem DBIncId - DBGetUser DBAddUser DBUpdateUser + DBGetUser DBAddUser DBUpdateUser DBDelUser DBGetVotes DBVoteStats DBAddVote DBDelVote DBGetVNList DBVNListStats DBAddVNList DBEditVNList DBDelVNList DBGetVN DBAddVN DBEditVN DBHideVN DBUndefRG DBVNCache @@ -272,6 +272,8 @@ sub DBGetUser { # %options->{ username mail passwd order firstchar uid results p 'ASCII(username) < 97 OR ASCII(username) > 122' => 1 ) : (), $o{uid} ? ( 'id = %d' => $o{uid} ) : (), + !$o{uid} && !$o{username} ? ( + 'id > 0' => 1 ) : (), ); my $where = keys %where ? 'AND !W' : ''; @@ -358,6 +360,18 @@ sub DBUpdateUser { # uid, %options->{ columns in users table } } +sub DBDelUser { # uid + my($s, $id) = @_; + $s->DBExec($_, $id) for ( + q|DELETE FROM vnlists 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|, + q|DELETE FROM users WHERE id = %d| + ); +} + + diff --git a/static/files/def.js b/static/files/def.js index a6f80ae4..3c13402b 100644 --- a/static/files/def.js +++ b/static/files/def.js @@ -253,6 +253,9 @@ DOMLoad(function() { } } + // userdel + cl('userdel', function() { return confirm("Completely remove this account from the site?") }); + // vote warnings cl('dovote_10', function() { return confirm( "You are about to give this visual novel a 10 out of 10. This is a rather extreme rating, " diff --git a/util/dump.sql b/util/dump.sql index 1ed22c22..ce0f8be4 100644 --- a/util/dump.sql +++ b/util/dump.sql @@ -361,7 +361,8 @@ $$ LANGUAGE plpgsql; CREATE SEQUENCE covers_seq; CREATE SEQUENCE relgraph_seq; --- We can't live without multi -INSERT INTO users (id, username, mail, rank, registered) - VALUES (1, 'multi', 'multi@vndb.org', 0, EXTRACT(EPOCH FROM NOW())); +INSERT INTO users (id, username, mail, rank) + VALUES (0, 'deleted', 'del@vndb.org', 0); +INSERT INTO users (username, mail, rank, registered) + VALUES ('multi', 'multi@vndb.org', 0, EXTRACT(EPOCH FROM NOW())); diff --git a/util/updates/update_1.20.sql b/util/updates/update_1.20.sql new file mode 100644 index 00000000..9c02e184 --- /dev/null +++ b/util/updates/update_1.20.sql @@ -0,0 +1,4 @@ + +-- deleted user +INSERT INTO users (id, username, mail, rank) + VALUES (0, 'deleted', 'del@vndb.org', 0); |