From 0ea8cd684510721b6897578307fff22cc7715768 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 27 Nov 2002 21:03:35 +0000 Subject: [PATCH] Adding user-status and two bugfixes for pluggable auth. --- lib/WebGUI/Authentication.pm | 2 -- lib/WebGUI/Operation/Account.pm | 13 +++++--- lib/WebGUI/Operation/User.pm | 56 ++++++++++++++++++++++++++++----- lib/WebGUI/User.pm | 29 +++++++++++++++-- 4 files changed, 83 insertions(+), 17 deletions(-) diff --git a/lib/WebGUI/Authentication.pm b/lib/WebGUI/Authentication.pm index ed95031e4..baca8cd14 100644 --- a/lib/WebGUI/Authentication.pm +++ b/lib/WebGUI/Authentication.pm @@ -10,8 +10,6 @@ package WebGUI::Authentication; # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- -use WebGUI::Authentication::LDAP; -use WebGUI::Authentication::WebGUI; use WebGUI::SQL; use strict; diff --git a/lib/WebGUI/Operation/Account.pm b/lib/WebGUI/Operation/Account.pm index 4052b4d59..a8c85af62 100644 --- a/lib/WebGUI/Operation/Account.pm +++ b/lib/WebGUI/Operation/Account.pm @@ -261,7 +261,7 @@ sub www_deactivateAccountConfirm { return WebGUI::Privilege::vitalComponent(); } elsif (($session{user}{userId} != 1) and $session{setting}{selfDeactivation}) { $u = WebGUI::User->new($session{user}{userId}); - $u->delete; + $u->status("Selfdestructed"); WebGUI::Session::end($session{var}{sessionId}); } return www_displayLogin(); @@ -419,10 +419,13 @@ sub www_login { if ($uid) { $u = WebGUI::User->new($uid); - - $cmd = $session{authentication}{$u->authMethod}."::validateUser"; - $success = eval{&$cmd($uid, $session{form}{identifier})}; - WebGUI::ErrorHandler::fatalError("Unable to load method validateUser on Authentication module: $_. ".$@) if($@); + if ($u->status eq 'Active') { + $cmd = $session{authentication}{$u->authMethod}."::validateUser"; + $success = eval{&$cmd($uid, $session{form}{identifier})}; + WebGUI::ErrorHandler::fatalError("Unable to load method validateUser on Authentication module: $_. ".$@) if($@); + } else { + $success = WebGUI::International::get(820); + } } else { $success = WebGUI::International::get(68); } diff --git a/lib/WebGUI/Operation/User.pm b/lib/WebGUI/Operation/User.pm index c155b5558..5c7f247ff 100644 --- a/lib/WebGUI/Operation/User.pm +++ b/lib/WebGUI/Operation/User.pm @@ -14,6 +14,7 @@ use Digest::MD5 qw(md5_base64); use Exporter; use strict qw(vars subs); use Tie::CPHash; +use Tie::IxHash; use WebGUI::DateTime; use WebGUI::HTMLForm; use WebGUI::Icon; @@ -55,7 +56,7 @@ sub _submenu { #------------------------------------------------------------------- sub www_addUser { - my (@array, $output, $groups, %hash, $f, $cmd, $html); + my (@array, $output, $groups, %hash, $f, $cmd, $html, %status); tie %hash, 'Tie::IxHash'; return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3)); $output .= helpIcon(5); @@ -66,8 +67,15 @@ sub www_addUser { } $f->hidden("op","addUserSave"); $f->text("username",WebGUI::International::get(50),$session{form}{username}); - $f->password("identifier",WebGUI::International::get(51)); $f->email("email",WebGUI::International::get(56)); + + tie %status, 'Tie::IxHash'; + %status = ( + Active =>WebGUI::International::get(817), + Deactivated =>WebGUI::International::get(818), + Selfdestructed =>WebGUI::International::get(819) + ); + $f->select("status",\%status,WebGUI::International::get(816), ['Active']); %hash = map {$_ => $_} @{$session{authentication}{available}}; $f->select("authMethod",\%hash,WebGUI::International::get(164),[$session{setting}{authMethod}]); @@ -97,6 +105,7 @@ sub www_addUserSave { unless ($uid) { $encryptedPassword = Digest::MD5::md5_base64($session{form}{identifier}); $u = WebGUI::User->new("new"); + $session{form}{uid}=$u->userId; $u->username($session{form}{username}); foreach (@{$session{authentication}{available}}) { @@ -104,12 +113,12 @@ sub www_addUserSave { eval{&$cmd}; WebGUI::ErrorHandler::fatalError("Unable to load method saveAddUser on Authentication module: $_. ".$@) if($@); } - + + $u->status($session{form}{status}); $u->authMethod($session{form}{authMethod}); @groups = $session{cgi}->param('groups'); $u->addToGroups(\@groups); $u->profileField("email",$session{form}{email}); - $session{form}{uid}=$u->userId; return www_editUser(); } else { $session{form}{op} = "addUser"; @@ -209,7 +218,7 @@ sub www_editGroupingSave { #------------------------------------------------------------------- sub www_editUser { return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3)); - my ($output, $f, $u, $cmd, $html, %hash); + my ($output, $f, $u, $cmd, $html, %hash, %status); $u = WebGUI::User->new($session{form}{uid}); $output .= helpIcon(5); $output .= '

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

'; @@ -222,6 +231,14 @@ sub www_editUser { $f->readOnly(epochToHuman($u->lastUpdated,"%z"),WebGUI::International::get(454)); $f->text("username",WebGUI::International::get(50),$u->username); + tie %status, 'Tie::IxHash'; + %status = ( + Active =>WebGUI::International::get(817), + Deactivated =>WebGUI::International::get(818), + Selfdestructed =>WebGUI::International::get(819) + ); + $f->select("status",\%status,WebGUI::International::get(816),[$u->status]); + %hash = map {$_ => $_} @{$session{authentication}{available}}; $f->select("authMethod",\%hash,WebGUI::International::get(164),[$session{setting}{authMethod}]); @@ -246,6 +263,7 @@ sub www_editUserSave { $u = WebGUI::User->new($session{form}{uid}); $u->username($session{form}{username}); $u->authMethod($session{form}{authMethod}); + $u->status($session{form}{status}); foreach (@{$session{authentication}{available}}) { $cmd = "WebGUI::Authentication::".$_."::saveEditUser"; eval{&$cmd}; @@ -382,23 +400,46 @@ sub www_editUserProfileSave { #------------------------------------------------------------------- sub www_listUsers { return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3)); - my ($output, $sth, %data, $f, @row, $p, $i, $search); + my ($output, $sth, %data, $f, @row, $p, $i, $search, %status, $selectedStatus); tie %data, 'Tie::CPHash'; $output = helpIcon(8); $output .= '

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

'; $output .= '
'; + tie %status, 'Tie::IxHash'; + %status = ( + "status like '%'" => WebGUI::International::get(821), + "status='Active'" => WebGUI::International::get(817), + "status='Deactivated'" => WebGUI::International::get(818), + "status='Selfdestructed'" => WebGUI::International::get(819) + ); $f = WebGUI::HTMLForm->new(1); $f->hidden("op","listUsers"); $f->text("keyword",'',$session{form}{keyword}); + $f->select( + -name => "status", + -value => [$session{form}{status} || "status like '%'"], + -options=> \%status + ); $f->submit(WebGUI::International::get(170)); + $f->readOnly(WebGUI::International::get(822)); + $f->checkbox ( + -name => "searchWithinStatus", + -label => "searchWithinStatus", + -checked=> $session{form}{searchWithinStatus}, + ); $output .= $f->print; $output .= '
'; + $selectedStatus = $session{form}{status} || "status like '%'"; if ($session{form}{keyword} ne "") { - $search = " where (users.username like '%".$session{form}{keyword}."%') "; + $selectedStatus = "status like '%'" unless ($session{form}{searchWithinStatus}); + $search = " where (users.username like '%".$session{form}{keyword}."%' and ".$selectedStatus.") "; + } else { + $search = " where (".$selectedStatus.") "; } $sth = WebGUI::SQL->read("select * from users $search order by users.username"); while (%data = $sth->hash) { $row[$i] = ''; + $row[$i] .= ($data{status} eq 'Active') ? ' ' : ''.$data{status}.''; $row[$i] .= ''.$data{username}.''; #$row[$i] .= ''.epochToHuman($data{dateCreated},"%z").''; @@ -410,6 +451,7 @@ sub www_listUsers { $p = WebGUI::Paginator->new(WebGUI::URL::page('op=listUsers&keyword='.$session{form}{keyword}),\@row); $output .= ''; $output .= ' + '; # # '; diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm index 9dc44d463..db18f1692 100644 --- a/lib/WebGUI/User.pm +++ b/lib/WebGUI/User.pm @@ -37,6 +37,7 @@ use WebGUI::Authentication; $karma = $u->karma; $lastUpdated = $u->lastUpdated; $languagePreference = $u->profileField("language",1); + $status = $u->status("somestatus"); $username = $u->username("jonboy"); $u->addToGroups(\@arr); @@ -305,6 +306,31 @@ sub profileField { #------------------------------------------------------------------- +=head2 status ( [ value ] ) + + Returns the status of the user. + +=item value + + If specified, the status is set to this value. + Possible values are 'Active', 'Selfdestructed' and 'Deactivated'. + +=cut + +sub status { + my ($class, $value); + $class = shift; + $value = shift; + if (defined $value) { + $class->{_user}{"status"} = $value; + WebGUI::SQL->write("update users set status=".quote($value).", + lastUpdated=".time()." where userId=$class->{_userId}"); + } + return $class->{_user}{"status"}; +} + +#------------------------------------------------------------------- + =head2 username ( [ value ] ) Returns the username. @@ -339,7 +365,4 @@ sub userId { return $_[0]->{_userId}; } - - - 1;
'.WebGUI::International::get(816).' '.WebGUI::International::get(50).'
'.WebGUI::International::get(453).''.WebGUI::International::get(454).'