1 package NDWeb::Controller::Users;
5 use parent 'Catalyst::Controller';
11 NDWeb::Controller::Users - Catalyst Controller
26 sub index :Path :Args(0) {
27 my ( $self, $c ) = @_;
30 my $query = $dbh->prepare(qq{SELECT u.uid,username,TRIM(',' FROM concat(g.groupname||',')) AS groups
31 FROM users u LEFT OUTER JOIN (groupmembers gm NATURAL JOIN groups g) ON gm.uid = u.uid
33 GROUP BY u.uid,username
34 ORDER BY lower(username)});
38 while (my $user = $query->fetchrow_hashref){
41 $c->stash(users => \@users);
45 my ( $self, $c, $user ) = @_;
48 $c->forward('findUser');
49 $user = $c->stash->{u};
51 my $groups = $dbh->prepare(q{SELECT g.gid,g.groupname,uid
53 LEFT OUTER JOIN (SELECT gid,uid FROM groupmembers WHERE uid = ?)
54 AS gm ON g.gid = gm.gid
56 $groups->execute($user->{uid});
61 while (my $group = $groups->fetchrow_hashref){
63 push @remgroups,$group;
65 push @addgroups,$group;
68 $c->stash(membergroups => \@remgroups);
69 $c->stash(othergroups => \@addgroups);
73 sub updateUser : Local {
74 my ( $self, $c, $user ) = @_;
77 $c->forward('findUser');
78 $user = $c->stash->{u};
82 my $log = $dbh->prepare(q{INSERT INTO forum_posts (ftid,uid,message) VALUES(
83 (SELECT ftid FROM users WHERE uid = $1),$1,$2)
86 my $delgroup = $dbh->prepare(q{DELETE FROM groupmembers WHERE uid = ? AND gid = ?});
87 my $addgroup = $dbh->prepare(q{INSERT INTO groupmembers (uid,gid) VALUES(?,?)});
88 for my $param ($c->req->param()){
89 if ($param =~ /^c:(planet|\w+_points|hostmask|info|username|email|sms)$/){
91 my $value = $c->req->param($column);
92 if ($column eq 'planet'){
95 }elsif($value =~ /^(\d+)\D+(\d+)\D+(\d+)$/){
96 ($value) = $dbh->selectrow_array(q{SELECT id FROM
97 current_planet_stats WHERE x = ? and y = ? and z =?}
101 $dbh->do(qq{UPDATE users SET $column = ? WHERE uid = ? }
102 ,undef,$value,$user->{uid});
103 $log->execute($c->user->id,"HC changed $column from $c->{$column} to $value for user: $user->{uid} ($user->{username})");
104 }elsif ($param =~ /^gr:(\d+)$/){
106 if ($c->req->param($param) eq 'remove'){
108 }elsif($c->req->param($param) eq 'add'){
112 $query->execute($user->{uid},$1);
113 my ($action,$a2) = ('added','to');
114 ($action,$a2) = ('removed','from') if $c->req->param($param) eq 'remove';
115 $log->execute($c->user->id,"HC $action user: $user->{uid} ($user->{username}) $a2 group: $1");
125 $c->res->redirect($c->uri_for('edit',$user->{uid}));
128 sub findUser : Private {
129 my ( $self, $c, $user ) = @_;
132 my $query = $dbh->prepare(q{
133 SELECT uid,username,hostmask,CASE WHEN u.planet IS NULL THEN '' ELSE coords(x,y,z) END AS planet,attack_points,defense_points,scan_points,humor_points,info, email, sms
134 FROM users u LEFT OUTER JOIN current_planet_stats p ON u.planet = p.id
137 $user = $dbh->selectrow_hashref($query,undef,$user);
139 $c->stash(u => $user);
144 Micahel Andreen (harv@ruin.nu)