package WebGUI::Operation::User; #------------------------------------------------------------------- # WebGUI is Copyright 2001 Plain Black Software. #------------------------------------------------------------------- # Please read the legal notices (docs/legal.txt) and the license # (docs/license.txt) that came with this distribution before using # this software. #------------------------------------------------------------------- # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- use Digest::MD5 qw(md5_base64); use Exporter; use strict; use Tie::CPHash; use WebGUI::Form; use WebGUI::Operation::Help; use WebGUI::Operation::Page; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; use WebGUI::Utility; our @ISA = qw(Exporter); our @EXPORT = qw(&www_addUser &www_addUserSave &www_deleteUser &www_deleteUserConfirm &www_editUser &www_editUserSave &www_listUsers); #------------------------------------------------------------------- sub www_addUser { my ($output, %hash, @array); if (WebGUI::Privilege::isInGroup(3)) { $output .= '

Add User

'; $output .= WebGUI::Form::hidden("op","addUserSave"); $output .= ''; $output .= ''; $output .= ''; %hash = ('WebGUI'=>'WebGUI', 'LDAP'=>'LDAP'); $array[0] = $session{setting}{authMethod}; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName",$session{dbh}); $output .= ''; $output .= ''; $output .= '
Username'.WebGUI::Form::text("username",20,30).'
Password'.WebGUI::Form::password("identifier",20,30).'
Authentication Method'.WebGUI::Form::selectList("authMethod",\%hash, \@array).'
LDAP URL'.WebGUI::Form::text("ldapURL",20,2048,$session{setting}{ldapURL}).'
Connect DN'.WebGUI::Form::text("connectDN",20,255).'
Email address'.WebGUI::Form::text("email",20,255).'
ICQ UIN'.WebGUI::Form::text("icq",20,30).'
Groups'.WebGUI::Form::selectList("groups",\%hash,'',5,1).'
'.WebGUI::Form::submit("save").'
'; $output .= '
'; } else { $output = WebGUI::Privilege::adminOnly(); } return $output; } #------------------------------------------------------------------- sub www_addUserSave { my ($output, @groups, $uid, $gid, $encryptedPassword); if (WebGUI::Privilege::isInGroup(3)) { $encryptedPassword = Digest::MD5::md5_base64($session{form}{identifier}); $uid = getNextId("userId"); WebGUI::SQL->write("insert into users values ($uid, ".quote($session{form}{username}).", ".quote($encryptedPassword).", ".quote($session{form}{email}).", ".quote($session{form}{icq}).", ".quote($session{form}{authMethod}).", ".quote($session{form}{ldapURL}).", ".quote($session{form}{connectDN}).")",$session{dbh}); @groups = $session{cgi}->param('groups'); foreach $gid (@groups) { WebGUI::SQL->write("insert into groupings values ($gid, $uid)",$session{dbh}); } $output = www_listUsers(); } else { $output = WebGUI::Privilege::adminOnly(); } return $output; } #------------------------------------------------------------------- sub www_deleteUser { my ($output); if ($session{form}{uid} < 26) { return WebGUI::Privilege::vitalComponent(); } elsif (WebGUI::Privilege::isInGroup(3)) { $output .= '

Please Confirm

'; $output .= 'Are you certain you want to delete this user? Be warned that all this user\'s information will be lost permanently if you choose to proceed.

'; $output .= '

Yes, I\'m sure.'; $output .= '    No, I made a mistake.
'; return $output; } else { return WebGUI::Privilege::adminOnly(); } } #------------------------------------------------------------------- sub www_deleteUserConfirm { if ($session{form}{uid} < 26) { return WebGUI::Privilege::vitalComponent(); } elsif (WebGUI::Privilege::isInGroup(3)) { WebGUI::SQL->write("delete from users where userId=$session{form}{uid}",$session{dbh}); WebGUI::SQL->write("delete from groupings where userId=$session{form}{uid}",$session{dbh}); return www_listUsers(); } else { return WebGUI::Privilege::adminOnly(); } } #------------------------------------------------------------------- sub www_editUser { my ($output, %user, %hash, @array); tie %hash, 'Tie::CPHash'; if (WebGUI::Privilege::isInGroup(3)) { %user = WebGUI::SQL->quickHash("select * from users where userId=$session{form}{uid}",$session{dbh}); $output .= '

Edit User

'; $output .= WebGUI::Form::hidden("op","editUserSave"); $output .= WebGUI::Form::hidden("uid",$session{form}{uid}); $output .= ''; $output .= ''; $output .= ''; %hash = ('WebGUI'=>'WebGUI', 'LDAP'=>'LDAP'); $array[0] = $user{authMethod}; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName",$session{dbh}); @array = WebGUI::SQL->buildArray("select groupId from groupings where userId=$session{form}{uid}",$session{dbh}); $output .= ''; $output .= ''; $output .= '
Username'.WebGUI::Form::text("username",20,30,$user{username}).'
Password'.WebGUI::Form::password("identifier",20,30,"password").'
Authentication Method'.WebGUI::Form::selectList("authMethod",\%hash,\@array).'
LDAP URL'.WebGUI::Form::text("ldapURL",20,2048,$user{ldapURL}).'
Connect DN'.WebGUI::Form::text("connectDN",20,255,$user{connectDN}).'
Email Address'.WebGUI::Form::text("email",20,255,$user{email}).'
ICQ UIN'.WebGUI::Form::text("icq",20,30,$user{icq}).'
Groups'.WebGUI::Form::selectList("groups",\%hash,\@array,5,1).'
'.WebGUI::Form::submit("save").'
'; $output .= '
'; } else { $output = WebGUI::Privilege::adminOnly(); } return $output; } #------------------------------------------------------------------- sub www_editUserSave { my (@groups, $error, $gid, $encryptedPassword, $passwordStatement); if (WebGUI::Privilege::isInGroup(3)) { if ($session{form}{identifier} ne "password") { $encryptedPassword = Digest::MD5::md5_base64($session{form}{identifier}); $passwordStatement = ', identifier='.quote($encryptedPassword); } $encryptedPassword = Digest::MD5::md5_base64($session{form}{identifier1}); WebGUI::SQL->write("update users set username=".quote($session{form}{username}).$passwordStatement.", authMethod=".quote($session{form}{authMethod}).", ldapURL=".quote($session{form}{ldapURL}).", connectDN=".quote($session{form}{connectDN}).", email=".quote($session{form}{email}).", icq=".quote($session{form}{icq})." where userId=".$session{form}{uid},$session{dbh}); WebGUI::SQL->write("delete from groupings where userId=$session{form}{uid}",$session{dbh}); @groups = $session{cgi}->param('groups'); foreach $gid (@groups) { WebGUI::SQL->write("insert into groupings values ($gid, $session{form}{uid})",$session{dbh}); } return www_listUsers(); } else { return WebGUI::Privilege::adminOnly(); } } #------------------------------------------------------------------- sub www_listUsers { my ($output, $sth, @data, @row, $pn, $i, $itemsPerPage); if (WebGUI::Privilege::isInGroup(3)) { $itemsPerPage = 50; $output = '

Users

'; $output .= '
Add a new user.
'; $output .= ''; $sth = WebGUI::SQL->read("select userId,username,email from users where username<>'Reserved' order by username",$session{dbh}); while (@data = $sth->array) { $row[$i] = ''; #$row[$i] .= ''; $row[$i] .= ''; $row[$i] .= ''; $i++; } if ($session{form}{pn} < 1) { $pn = 0; } else { $pn = $session{form}{pn}; } for ($i=($itemsPerPage*$pn); $i<($itemsPerPage*($pn+1));$i++) { $output .= $row[$i]; } $output .= '
'.$data[1].''.$data[1].''.$data[2].'
'; $output .= ''; return $output; } else { return WebGUI::Privilege::adminOnly(); } } 1;