From 5e38dff0cf8667720f7ae7f89302e0246ecf5624 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Fri, 15 Dec 2006 10:11:42 +0000 Subject: [PATCH] user management --- index.pl | 2 +- templates/users.tmpl | 72 +++++++++++++++++++++++++ users.pl | 125 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 templates/users.tmpl create mode 100644 users.pl diff --git a/index.pl b/index.pl index 58f67b4..11789fa 100755 --- a/index.pl +++ b/index.pl @@ -63,7 +63,7 @@ while (my ($name,$attack,$gid) = $query->fetchrow()){ our $LOG = $DBH->prepare('INSERT INTO log (uid,text) VALUES(?,?)'); my $page = 'main'; -if (param('page') =~ /^(main|check|motd|points|covop|top100|launchConfirmation|addintel|defrequest|raids|editRaid|calls|intel)$/){ +if (param('page') =~ /^(main|check|motd|points|covop|top100|launchConfirmation|addintel|defrequest|raids|editRaid|calls|intel|users)$/){ $page = $1; } diff --git a/templates/users.tmpl b/templates/users.tmpl new file mode 100644 index 0000000..391606d --- /dev/null +++ b/templates/users.tmpl @@ -0,0 +1,72 @@ + + +
User details + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueChange?
Username
Host
Planet
Attack points
Defense points
Scan points
Humor points
+ +

User is a member of the following groups

+ + + + + +
GroupRemove
+
+ +

These does not have access to the raid

+ + + + + +
GroupAdd
+
+

+
+
+ + + + + + + + +
User
+
diff --git a/users.pl b/users.pl new file mode 100644 index 0000000..3425c24 --- /dev/null +++ b/users.pl @@ -0,0 +1,125 @@ +#************************************************************************** +# Copyright (C) 2006 by Michael Andreen * +# * +# This program is free software; you can redistribute it and/or modify * +# it under the terms of the GNU General Public License as published by * +# the Free Software Foundation; either version 2 of the License, or * +# (at your option) any later version. * +# * +# This program is distributed in the hope that it will be useful, * +# but WITHOUT ANY WARRANTY; without even the implied warranty of * +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# GNU General Public License for more details. * +# * +# You should have received a copy of the GNU General Public License * +# along with this program; if not, write to the * +# Free Software Foundation, Inc., * +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * +#**************************************************************************/ + +use strict; +use POSIX; +our $BODY; +our $DBH; +our $LOG; + +$ND::TEMPLATE->param(TITLE => 'Users'); + +die "You don't have access" unless isHC(); + +my $error = ''; +my $user; +if (param('user') =~ /^(\d+)$/){ + my $query = $DBH->prepare(q{ +SELECT uid,username,hostmask,coords(x,y,z) AS planet,attack_points,defense_points,scan_points,humor_points + FROM users u LEFT OUTER JOIN current_planet_stats p ON u.planet = p.id +WHERE uid = ?; +}) or $error .= "

Something went wrong: ".$DBH->errstr."

"; + $user = $DBH->selectrow_hashref($query,undef,$1) or $error.= "

Something went wrong: ".$DBH->errstr."

"; +} + +if ($user && param('cmd') eq 'change'){ + $DBH->begin_work; + for my $param (param()){ + if ($param =~ /^c:(\w+)$/){ + my $column = $1; + my $value = param($column); + if ($column eq 'planet'){ + if ($value eq ''){ + $value = undef; + }elsif($value =~ /^(\d+)\D+(\d+)\D+(\d+)$/){ + ($value) = $DBH->selectrow_array(q{SELECT id FROM + current_planet_stats WHERE x = ? and y = ? and z =?} + ,undef,$1,$2,$3); + } + } + if ($DBH->do(qq{UPDATE users SET $column = ? WHERE uid = ? } + ,undef,$value,$user->{uid})){ + $user->{$column} = param($column); + $LOG->execute($ND::UID,"HC set $column to $value for user: $user->{uid}"); + }else{ + $error .= "

Something went wrong: ".$DBH->errstr."

"; + } + } + } + my $groups = $DBH->prepare('SELECT gid,groupname FROM groups'); + my $delgroup = $DBH->prepare(q{DELETE FROM groupmembers WHERE uid = ? AND gid = ?}); + my $addgroup = $DBH->prepare(q{INSERT INTO groupmembers (uid,gid) VALUES(?,?)}); + $groups->execute(); + while (my $group = $groups->fetchrow_hashref){ + my $query; + if (param($group->{gid}) eq 'remove'){ + $query = $delgroup; + }elsif(param($group->{gid}) eq 'add'){ + $query = $addgroup; + } + if ($query){ + if ($query->execute($user->{uid},$group->{gid})){ + $LOG->execute($ND::UID,"HC added user: $user->{uid} to group: $group->{gid}"); + }else{ + $error .= "

Something went wrong: ".$DBH->errstr."

"; + } + } + } + $DBH->commit or $error .= "

Something went wrong: ".$DBH->errstr."

"; +} + +if ($user){ + $BODY->param(User => $user->{uid}); + $BODY->param(Username => $user->{username}); + $BODY->param(Hostmask => $user->{hostmask}); + $BODY->param(Planet => $user->{planet}); + $BODY->param(Attack_points => $user->{attack_points}); + $BODY->param(Defense_points => $user->{defense_points}); + $BODY->param(Scan_points => $user->{scan_points}); + $BODY->param(humor_points => $user->{humor_points}); + + 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}); + $groups->execute($user->{uid}); + + my @addgroups; + my @remgroups; +while (my $group = $groups->fetchrow_hashref){ + if ($group->{uid}){ + push @remgroups,{Id => $group->{gid}, Name => $group->{groupname}}; + }else{ + push @addgroups,{Id => $group->{gid}, Name => $group->{groupname}}; + } +} +$BODY->param(RemoveGroups => \@remgroups); +$BODY->param(AddGroups => \@addgroups); + +}else{ + my $query = $DBH->prepare(qq{SELECT uid,username FROM users ORDER BY username})or $error .= $DBH->errstr; + $query->execute or $error .= $DBH->errstr; + my @users; + my $i = 0; + while (my $user = $query->fetchrow_hashref){ + $user->{ODD} = $i % 2; + push @users, $user; + $i++; + } + $BODY->param(Users => \@users); +} +$BODY->param(Error => $error); +1; -- 2.39.2