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::International; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; use WebGUI::Utility; our @ISA = qw(Exporter); our @EXPORT = qw(&www_becomeUser &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 .= ''; $output .= '

'.WebGUI::International::get(163).'

'; $output .= '
'; $output .= WebGUI::Form::hidden("op","addUserSave"); $output .= ''; $output .= ''; $output .= ''; %hash = ('WebGUI'=>'WebGUI', 'LDAP'=>'LDAP'); $array[0] = $session{setting}{authMethod}; $output .= ''; $output .= ''; $output .= ''; $output .= ''; %hash = WebGUI::SQL->buildHash("select groupId,groupName from groups where groupName<>'Reserved' order by groupName",$session{dbh}); $array[0] = 2; $output .= ''; %hash = WebGUI::SQL->buildHash("select distinct(language) from international",$session{dbh}); $array[0] = "English"; $output .= ''; $output .= ''; $output .= '
'.WebGUI::International::get(50).''.WebGUI::Form::text("username",20,30).'
'.WebGUI::International::get(51).''.WebGUI::Form::password("identifier",20,30).'
'.WebGUI::International::get(164).''.WebGUI::Form::selectList("authMethod",\%hash, \@array).'
'.WebGUI::International::get(165).''.WebGUI::Form::text("ldapURL",20,2048,$session{setting}{ldapURL}).'
'.WebGUI::International::get(166).''.WebGUI::Form::text("connectDN",20,255).'
'.WebGUI::International::get(56).''.WebGUI::Form::text("email",20,255).'
'.WebGUI::International::get(89).''.WebGUI::Form::selectList("groups",\%hash,\@array,5,1).'
'.WebGUI::International::get(304).''.WebGUI::Form::selectList("language",\%hash,\@array).'
'.WebGUI::Form::submit(WebGUI::International::get(62)).'
'; $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 (userId,username,identifier,email,authMethod,ldapURL,connectDN,language) values ($uid, ".quote($session{form}{username}).", ".quote($encryptedPassword).", ".quote($session{form}{email}).", ".quote($session{form}{authMethod}).", ".quote($session{form}{ldapURL}).", ".quote($session{form}{connectDN}).", ".quote($session{form}{language}).")",$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_becomeUser { my ($cookieInfo, $output, $password); if (WebGUI::Privilege::isInGroup(3)) { ($password) = WebGUI::SQL->quickArray("select identifier from users where userId='$session{form}{uid}'",$session{dbh}); WebGUI::Session::end($session{var}{sessionId}); $cookieInfo = $session{form}{uid}."|".crypt($password,"yJ"); WebGUI::Session::start($cookieInfo); WebGUI::Session::setCookie("wgSession",$cookieInfo); $output = ""; } 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 .= ''; $output .= '

'.WebGUI::International::get(42).'

'; $output .= WebGUI::International::get(167).'

'; $output .= '

'.WebGUI::International::get(44).''; $output .= '    '.WebGUI::International::get(45).'
'; 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, %gender); tie %hash, 'Tie::CPHash'; if (WebGUI::Privilege::isInGroup(3)) { %gender = ('male'=>WebGUI::International::get(339),'female'=>WebGUI::International::get(340)); %user = WebGUI::SQL->quickHash("select * from users where userId=$session{form}{uid}",$session{dbh}); $output .= ''; $output .= '

'.WebGUI::International::get(168).'

'; $output .= '
'; $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 .= ''; %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 .= ''; %hash = WebGUI::SQL->buildHash("select distinct(language) from international",$session{dbh}); @array = []; $array[0] = $user{language}; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= ''; @array = ($user{gender}); $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '
'.WebGUI::International::get(50).''.WebGUI::Form::text("username",20,30,$user{username}).'
'.WebGUI::International::get(51).''.WebGUI::Form::password("identifier",20,30,"password").'
'.WebGUI::International::get(164).''.WebGUI::Form::selectList("authMethod",\%hash,\@array).'
'.WebGUI::International::get(165).''.WebGUI::Form::text("ldapURL",20,2048,$user{ldapURL}).'
'.WebGUI::International::get(166).''.WebGUI::Form::text("connectDN",20,255,$user{connectDN}).'
'.WebGUI::International::get(56).''.WebGUI::Form::text("email",20,255,$user{email}).'
'.WebGUI::International::get(89).''.WebGUI::Form::selectList("groups",\%hash,\@array,5,1).'
'.WebGUI::International::get(304).''.WebGUI::Form::selectList("language",\%hash,\@array).'
'.WebGUI::International::get(314).''.WebGUI::Form::text("firstName",20,50,$user{firstName}).'
'.WebGUI::International::get(315).''.WebGUI::Form::text("middleName",20,50,$user{middleName}).'
'.WebGUI::International::get(316).''.WebGUI::Form::text("lastName",20,50,$user{lastName}).'
'.WebGUI::International::get(317).''.WebGUI::Form::text("icq",20,30,$user{icq}).'
'.WebGUI::International::get(318).''.WebGUI::Form::text("aim",20,30,$user{aim}).'
'.WebGUI::International::get(319).''.WebGUI::Form::text("msnIM",20,30,$user{msnIM}).'
'.WebGUI::International::get(320).''.WebGUI::Form::text("yahooIM",20,30,$user{yahooIM}).'
'.WebGUI::International::get(321).''.WebGUI::Form::text("cellPhone",20,30,$user{cellPhone}).'
'.WebGUI::International::get(322).''.WebGUI::Form::text("pager",20,30,$user{pager}).'
'.WebGUI::International::get(323).''.WebGUI::Form::text("homeAddress",20,128,$user{homeAddress}).'
'.WebGUI::International::get(324).''.WebGUI::Form::text("homeCity",20,30,$user{homeCity}).'
'.WebGUI::International::get(325).''.WebGUI::Form::text("homeState",20,30,$user{homeState}).'
'.WebGUI::International::get(326).''.WebGUI::Form::text("homeZip",20,15,$user{homeZip}).'
'.WebGUI::International::get(327).''.WebGUI::Form::text("homeCountry",20,30,$user{homeCountry}).'
'.WebGUI::International::get(328).''.WebGUI::Form::text("homePhone",20,30,$user{homePhone}).'
'.WebGUI::International::get(329).''.WebGUI::Form::text("workAddress",20,128,$user{workAddress}).'
'.WebGUI::International::get(330).''.WebGUI::Form::text("workCity",20,30,$user{workCity}).'
'.WebGUI::International::get(331).''.WebGUI::Form::text("workState",20,30,$user{workState}).'
'.WebGUI::International::get(332).''.WebGUI::Form::text("workZip",20,15,$user{workZip}).'
'.WebGUI::International::get(333).''.WebGUI::Form::text("workCountry",20,30,$user{workCountry}).'
'.WebGUI::International::get(334).''.WebGUI::Form::text("workPhone",20,30,$user{workPhone}).'
'.WebGUI::International::get(335).''.WebGUI::Form::selectList("gender",\%gender,\@array).'
'.WebGUI::International::get(336).''.WebGUI::Form::text("birthdate",20,30,$user{birthdate}).'
'.WebGUI::International::get(337).''.WebGUI::Form::text("homepage",20,2048,$user{homepage}).'
'.WebGUI::Form::submit(WebGUI::International::get(62)).'
'; $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}).", language=".quote($session{form}{language}).", firstName=".quote($session{form}{firstName}).", middleName=".quote($session{form}{middleName}).", lastName=".quote($session{form}{lastName}).", icq=".quote($session{form}{icq}).", aim=".quote($session{form}{aim}).", msnIM=".quote($session{form}{msnIM}).", yahooIM=".quote($session{form}{yahooIM}).", homeAddress=".quote($session{form}{homeAddress}).", homeCity=".quote($session{form}{homeCity}).", homeState=".quote($session{form}{homeState}).", homeZip=".quote($session{form}{homeZip}).", homeCountry=".quote($session{form}{homeCountry}).", homePhone=".quote($session{form}{homePhone}).", workAddress=".quote($session{form}{workAddress}).", workCity=".quote($session{form}{workCity}).", workState=".quote($session{form}{workState}).", workZip=".quote($session{form}{workZip}).", workCountry=".quote($session{form}{workCountry}).", workPhone=".quote($session{form}{workPhone}).", cellPhone=".quote($session{form}{cellPhone}).", pager=".quote($session{form}{pager}).", gender=".quote($session{form}{gender}).", birthdate=".quote($session{form}{birthdate}).", homepage=".quote($session{form}{homepage})." 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, $search); if (WebGUI::Privilege::isInGroup(3)) { $itemsPerPage = 50; $output = ''; $output .= '

'.WebGUI::International::get(149).'

'; $output .= '
'; $output .= ''.WebGUI::International::get(169).''; $output .= '
'; $output .= WebGUI::Form::hidden("op","listUsers"); $output .= WebGUI::Form::text("keyword",20,50); $output .= WebGUI::Form::submit(WebGUI::International::get(170)); $output .= '

'; if ($session{form}{keyword} ne "") { $search = " and (username like '%".$session{form}{keyword}."%' or email like '%".$session{form}{keyword}."%') "; } $output .= ''; $sth = WebGUI::SQL->read("select userId,username,email from users where username<>'Reserved' $search 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 .= '
'; $row[$i] .= ''; $row[$i] .= ''; $row[$i] .= ''; $row[$i] .= ''.$data[1].''.$data[1].''.$data[2].'
'; $output .= '

'; return $output; } else { return WebGUI::Privilege::adminOnly(); } } 1;