1 package NDWeb::Controller::Users;
5 use parent 'Catalyst::Controller';
12 NDWeb::Controller::Users - Catalyst Controller
27 sub index :Path :Args(0) {
28 my ( $self, $c ) = @_;
31 my $query = $dbh->prepare(qq{SELECT u.uid,username,TRIM(',' FROM concat(g.groupname||',')) AS groups
32 FROM users u LEFT OUTER JOIN (groupmembers gm NATURAL JOIN groups g) ON gm.uid = u.uid
34 GROUP BY u.uid,username
35 ORDER BY lower(username)});
39 while (my $user = $query->fetchrow_hashref){
42 $c->stash(users => \@users);
46 my ( $self, $c, $user ) = @_;
49 $c->forward('findUser');
50 $user = $c->stash->{u};
52 my $groups = $dbh->prepare(q{SELECT g.gid,g.groupname,uid
54 LEFT OUTER JOIN (SELECT gid,uid FROM groupmembers WHERE uid = ?)
55 AS gm ON g.gid = gm.gid
57 $groups->execute($user->{uid});
62 while (my $group = $groups->fetchrow_hashref){
64 push @remgroups,$group;
66 push @addgroups,$group;
69 $c->stash(membergroups => \@remgroups);
70 $c->stash(othergroups => \@addgroups);
74 sub updateUser : Local {
75 my ( $self, $c, $user ) = @_;
78 $c->forward('findUser');
79 $user = $c->stash->{u};
83 my $log = $dbh->prepare(q{INSERT INTO forum_posts (ftid,uid,message) VALUES(
84 (SELECT ftid FROM users WHERE uid = $1),$1,$2)
87 my $delgroup = $dbh->prepare(q{DELETE FROM groupmembers WHERE uid = ? AND gid = ?});
88 my $addgroup = $dbh->prepare(q{INSERT INTO groupmembers (uid,gid) VALUES(?,?)});
89 for my $param ($c->req->param()){
90 if ($param =~ /^c:(planet|\w+_points|hostmask|info|username|email|sms)$/){
92 my $value = $c->req->param($column);
93 if ($column eq 'planet'){
97 }elsif($value =~ /^(\d+)\D+(\d+)\D+(\d+)$/){
98 ($value) = $dbh->selectrow_array(q{SELECT pid FROM
99 current_planet_stats WHERE x = ? and y = ? and z =?}
103 $dbh->do(qq{UPDATE users SET $column = ? WHERE uid = ? }
104 ,undef,$value,$user->{uid});
105 $log->execute($c->user->id,"HC changed $column from $user->{$column} to $value for user: $user->{uid} ($user->{username})");
106 }elsif ($param =~ /^gr:(\d+)$/){
108 if ($c->req->param($param) eq 'remove'){
110 }elsif($c->req->param($param) eq 'add'){
114 $query->execute($user->{uid},$1);
115 my ($action,$a2) = ('added','to');
116 ($action,$a2) = ('removed','from') if $c->req->param($param) eq 'remove';
117 $log->execute($c->user->id,"HC $action user: $user->{uid} ($user->{username}) $a2 group: $1");
127 $c->res->redirect($c->uri_for('edit',$user->{uid}));
130 sub findUser : Private {
131 my ( $self, $c, $user ) = @_;
134 my $query = $dbh->prepare(q{
135 SELECT uid,username,hostmask,attack_points,defense_points,scan_points,humor_points,info, email, sms
136 ,COALESCE(coords(x,y,z),'') AS planet
137 FROM users u LEFT OUTER JOIN current_planet_stats p USING (pid)
140 $user = $dbh->selectrow_hashref($query,undef,$user);
142 $c->stash(u => $user);
146 my ( $self, $c ) = @_;
149 $c->stash(ok => $c->flash->{ok});
150 $c->stash(error => $c->flash->{error});
151 $c->stash(subject => $c->flash->{subject});
152 $c->stash(message => $c->flash->{message});
154 my $groups = $dbh->prepare(q{SELECT gid,groupname FROM groups WHERE gid > 0 ORDER BY gid});
157 push @groups,{gid => -1, groupname => 'Pick a group'};
158 while (my $group = $groups->fetchrow_hashref){
161 $c->stash(groups => \@groups);
164 sub postmail : Local {
165 my ( $self, $c ) = @_;
168 my $emails = $dbh->prepare(q{SELECT email FROM users
169 WHERE uid IN (SELECT uid FROM groupmembers WHERE gid = $1)
170 AND email is not null});
171 $emails->execute($c->req->param('group'));
173 while (my $email = $emails->fetchrow_hashref){
174 push @emails,$email->{email};
179 BCC => (join ',',@emails),
180 From => 'NewDawn Command <nd@ruin.nu>',
181 'Content-type' => 'text/plain; charset="UTF-8"',
182 Subject => $c->req->param('subject'),
183 Message => $c->req->param('message'),
186 if (sendmail %mail) {
187 $c->flash(ok => \@emails);
189 $c->flash(error => $Mail::Sendmail::error);
190 $c->flash(subject => $c->req->param('subject'));
191 $c->flash(message => $c->req->param('message'));
194 $c->res->redirect($c->uri_for('mail'));
199 Micahel Andreen (harv@ruin.nu)