summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-07-16 07:34:49 +0000
committeryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-07-16 07:34:49 +0000
commitee40f5605e50b1d421e3456f672a324360aff5a7 (patch)
tree3c0b8b491da00c20d1f4b38a634d5be12e13cee4
parent94e9da6f6c654f45bc7efb7a4e6591c64f0553c5 (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.pl34
-rw-r--r--data/tpl/hist2
-rw-r--r--data/tpl/home2
-rw-r--r--data/tpl/tindex4
-rw-r--r--data/tpl/ttag4
-rw-r--r--data/tpl/tthread2
-rw-r--r--data/tpl/vnpage_stats6
-rw-r--r--lib/ChangeLog1
-rw-r--r--lib/VNDB.pm2
-rw-r--r--lib/VNDB/Users.pm11
-rw-r--r--lib/VNDB/Util/DB.pm16
-rw-r--r--static/files/def.js3
-rw-r--r--util/dump.sql7
-rw-r--r--util/updates/update_1.20.sql4
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>&nbsp;</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">&nbsp;</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>&nbsp;</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);