]> ruin.nu Git - ndwebbie.git/blob - users.pl
6ed91d80bb3a32fdc5d1756bb749c3eeaa0fe892
[ndwebbie.git] / users.pl
1 #**************************************************************************
2 #   Copyright (C) 2006 by Michael Andreen <harvATruinDOTnu>               *
3 #                                                                         *
4 #   This program is free software; you can redistribute it and/or modify  *
5 #   it under the terms of the GNU General Public License as published by  *
6 #   the Free Software Foundation; either version 2 of the License, or     *
7 #   (at your option) any later version.                                   *
8 #                                                                         *
9 #   This program is distributed in the hope that it will be useful,       *
10 #   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12 #   GNU General Public License for more details.                          *
13 #                                                                         *
14 #   You should have received a copy of the GNU General Public License     *
15 #   along with this program; if not, write to the                         *
16 #   Free Software Foundation, Inc.,                                       *
17 #   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
18 #**************************************************************************/
19
20 use strict;
21 use POSIX;
22 our $BODY;
23 our $DBH;
24 our $LOG;
25
26 $ND::TEMPLATE->param(TITLE => 'Users');
27
28 die "You don't have access" unless isHC();
29
30 my $error = '';
31 my $user;
32 if (param('user') =~ /^(\d+)$/){
33         my $query = $DBH->prepare(q{
34 SELECT uid,username,hostmask,coords(x,y,z) AS planet,attack_points,defense_points,scan_points,humor_points  
35         FROM users u LEFT OUTER JOIN current_planet_stats p ON u.planet = p.id
36 WHERE uid = ?;
37 }) or $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
38         $user = $DBH->selectrow_hashref($query,undef,$1) or $error.= "<p> Something went wrong: ".$DBH->errstr."</p>";
39 }
40
41 if ($user && param('cmd') eq 'change'){
42         $DBH->begin_work;
43         for my $param (param()){
44                 if ($param =~ /^c:(\w+)$/){
45                         my $column = $1;
46                         my $value = param($column);
47                         if ($column eq 'planet'){
48                                 if ($value eq ''){
49                                         $value = undef;
50                                 }elsif($value =~ /^(\d+)\D+(\d+)\D+(\d+)$/){
51                                         ($value) = $DBH->selectrow_array(q{SELECT id FROM
52                                                 current_planet_stats WHERE x = ? and y = ? and z =?}
53                                                 ,undef,$1,$2,$3);
54                                 }
55                         }
56                         if ($DBH->do(qq{UPDATE users SET $column = ? WHERE uid = ? }
57                                         ,undef,$value,$user->{uid})){
58                                 $user->{$column} = param($column);
59                                 $LOG->execute($ND::UID,"HC set $column to $value for user: $user->{uid}");
60                         }else{
61                                 $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
62                         }
63                 }
64         }
65         my $groups = $DBH->prepare('SELECT gid,groupname FROM groups');
66         my $delgroup = $DBH->prepare(q{DELETE FROM groupmembers WHERE uid = ? AND gid = ?});
67         my $addgroup = $DBH->prepare(q{INSERT INTO groupmembers (uid,gid) VALUES(?,?)});
68         $groups->execute();
69         while (my $group = $groups->fetchrow_hashref){
70                 my $query;
71                 if (param($group->{gid}) eq 'remove'){
72                         $query = $delgroup;
73                 }elsif(param($group->{gid}) eq 'add'){
74                         $query = $addgroup;
75                 }
76                 if ($query){
77                         if ($query->execute($user->{uid},$group->{gid})){
78                                 $LOG->execute($ND::UID,"HC added user: $user->{uid} to group: $group->{gid}");
79                         }else{
80                                 $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
81                         }
82                 }
83         }
84         $DBH->commit or $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
85 }
86
87 if ($user){
88         $BODY->param(User => $user->{uid});
89         $BODY->param(Username => $user->{username});
90         $BODY->param(Hostmask => $user->{hostmask});
91         $BODY->param(Planet => $user->{planet});
92         $BODY->param(Attack_points => $user->{attack_points});
93         $BODY->param(Defense_points => $user->{defense_points});
94         $BODY->param(Scan_points => $user->{scan_points});
95         $BODY->param(humor_points => $user->{humor_points});
96
97         my $groups = $DBH->prepare(q{SELECT g.gid,g.groupname,uid FROM groups g LEFT OUTER JOIN (SELECT gid,uid FROM groupmembers WHERE uid = ?) AS gm ON g.gid = gm.gid});
98         $groups->execute($user->{uid});
99
100         my @addgroups;
101         my @remgroups;
102 while (my $group = $groups->fetchrow_hashref){
103         if ($group->{uid}){
104                 push @remgroups,{Id => $group->{gid}, Name => $group->{groupname}};
105         }else{
106                 push @addgroups,{Id => $group->{gid}, Name => $group->{groupname}};
107         }
108 }
109 $BODY->param(RemoveGroups => \@remgroups);
110 $BODY->param(AddGroups => \@addgroups);
111
112 }else{
113         my $query = $DBH->prepare(qq{SELECT uid,username FROM users ORDER BY username})or $error .= $DBH->errstr;
114         $query->execute or $error .= $DBH->errstr;
115         my @users;
116         my $i = 0;
117         while (my $user = $query->fetchrow_hashref){
118                 $i++;
119                 $user->{ODD} = $i % 2;
120                 push @users, $user;
121         }
122         $BODY->param(Users => \@users);
123 }
124 $BODY->param(Error => $error);
125 1;