diff options
Diffstat (limited to 'lib/VNDB/DB/Users.pm')
-rw-r--r-- | lib/VNDB/DB/Users.pm | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/lib/VNDB/DB/Users.pm b/lib/VNDB/DB/Users.pm index 140b8861..4910b564 100644 --- a/lib/VNDB/DB/Users.pm +++ b/lib/VNDB/DB/Users.pm @@ -8,7 +8,7 @@ use Exporter 'import'; our @EXPORT = qw|dbUserGet dbUserEdit dbUserAdd dbUserDel|; -# %options->{ username passwd mail order uid results page } +# %options->{ username passwd mail order uid what results page } sub dbUserGet { my $s = shift; my %o = ( @@ -24,6 +24,10 @@ sub dbUserGet { 'username = ?' => $o{username} ) : (), $o{passwd} ? ( 'passwd = decode(?, \'hex\')' => $o{passwd} ) : (), + $o{firstchar} ? ( + 'SUBSTRING(username from 1 for 1) = ?' => $o{firstchar} ) : (), + !$o{firstchar} && defined $o{firstchar} ? ( + 'ASCII(username) < 97 OR ASCII(username) > 122' => 1 ) : (), $o{mail} ? ( 'mail = ?' => $o{mail} ) : (), $o{uid} ? ( @@ -41,6 +45,31 @@ sub dbUserGet { $o{order} ); + # XXX: cache please... + if($o{what} =~ /list/ && $#$r >= 0) { + my %r = map { + $r->[$_]{votes} = 0; + $r->[$_]{changes} = 0; + ($r->[$_]{id}, $_) + } 0..$#$r; + + $r->[$r{$_->{uid}}]{votes} = $_->{cnt} for (@{$s->dbAll(q| + SELECT uid, COUNT(vid) AS cnt + FROM votes + WHERE uid IN(!l) + GROUP BY uid|, + [ keys %r ] + )}); + + $r->[$r{$_->{requester}}]{changes} = $_->{cnt} for (@{$s->dbAll(q| + SELECT requester, COUNT(id) AS cnt + FROM changes + WHERE requester IN(!l) + GROUP BY requester|, + [ keys %r ] + )}); + } + return wantarray ? ($r, $np) : $r; } |