]> ruin.nu Git - ndwebbie.git/blob - lib/NDWeb/Controller/Users.pm
Converted users to catalyst
[ndwebbie.git] / lib / NDWeb / Controller / Users.pm
1 package NDWeb::Controller::Users;
2
3 use strict;
4 use warnings;
5 use parent 'Catalyst::Controller';
6
7 use ND::Include;
8
9 =head1 NAME
10
11 NDWeb::Controller::Users - Catalyst Controller
12
13 =head1 DESCRIPTION
14
15 Catalyst Controller.
16
17 =head1 METHODS
18
19 =cut
20
21
22 =head2 index 
23
24 =cut
25
26 sub index :Path :Args(0) {
27         my ( $self, $c ) = @_;
28         my $dbh = $c->model;
29
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
32                 WHERE u.uid > 0
33                 GROUP BY u.uid,username
34                 ORDER BY lower(username)});
35         $query->execute;
36
37         my @users;
38         while (my $user = $query->fetchrow_hashref){
39                 push @users, $user;
40         }
41         $c->stash(users => \@users);
42 }
43
44 sub edit : Local {
45         my ( $self, $c, $user ) = @_;
46         my $dbh = $c->model;
47
48         $c->forward('findUser');
49         $user = $c->stash->{u};
50
51         my $groups = $dbh->prepare(q{SELECT g.gid,g.groupname,uid 
52                 FROM groups g 
53                 LEFT OUTER JOIN (SELECT gid,uid FROM groupmembers WHERE uid = ?)
54                         AS gm ON g.gid = gm.gid
55                 });
56         $groups->execute($user->{uid});
57
58
59         my @addgroups;
60         my @remgroups;
61         while (my $group = $groups->fetchrow_hashref){
62                 if ($group->{uid}){
63                         push @remgroups,$group;
64                 }else{
65                         push @addgroups,$group;
66                 }
67         }
68         $c->stash(membergroups => \@remgroups);
69         $c->stash(othergroups => \@addgroups);
70
71 }
72
73 sub updateUser : Local {
74         my ( $self, $c, $user ) = @_;
75         my $dbh = $c->model;
76
77         $c->forward('findUser');
78         $user = $c->stash->{u};
79
80         $dbh->begin_work;
81         eval{
82                 my $log = $dbh->prepare(q{INSERT INTO forum_posts (ftid,uid,message) VALUES(
83                         (SELECT ftid FROM users WHERE uid = $1),$1,$2)
84                         });
85
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)$/){
90                                 my $column = $1;
91                                 my $value = $c->req->param($column);
92                                 if ($column eq 'planet'){
93                                         if ($value eq ''){
94                                                 $value = undef;
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 =?}
98                                                         ,undef,$1,$2,$3);
99                                         }
100                                 }
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+)$/){
105                                 my $query;
106                                 if ($c->req->param($param) eq 'remove'){
107                                         $query = $delgroup;
108                                 }elsif($c->req->param($param) eq 'add'){
109                                         $query = $addgroup;
110                                 }
111                                 if ($query){
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");
116                                 }
117                         }
118                 }
119                 $dbh->commit;
120         };
121         if ($@){
122                 $dbh->rollback;
123                 die $@;
124         }
125         $c->res->redirect($c->uri_for('edit',$user->{uid}));
126 }
127
128 sub findUser : Private {
129         my ( $self, $c, $user ) = @_;
130         my $dbh = $c->model;
131
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
135                 WHERE uid = ?;
136                 });
137         $user = $dbh->selectrow_hashref($query,undef,$user);
138
139         $c->stash(u => $user);
140 }
141
142 =head1 AUTHOR
143
144 Micahel Andreen (harv@ruin.nu)
145
146 =head1 LICENSE
147
148 GPL 2.0, or later.
149
150 =cut
151
152 1;