diff --git a/docs/migration.txt b/docs/migration.txt
index 8f33a2cef..99f82c2ef 100644
--- a/docs/migration.txt
+++ b/docs/migration.txt
@@ -39,7 +39,17 @@ There have currently been no changes to the macro API.
There have currently been no changes to the authentication API.
In 6.0 all Authentication modules will need to be rewritten as Auth modules according to the new
-Auth API in WebGUI::Auth. Details to follow.
+Auth API in WebGUI::Auth.
+
+The following modules will no longer be needed:
+WebGUI::Authentication::WebGUI
+WebGUI::Authentication::LDAP
+WebGUI::Authentication::SMB
+
+WebGUI::Authentication
+WebGUI::Operation::Account
+
+Details to follow.
diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm
new file mode 100644
index 000000000..b64689809
--- /dev/null
+++ b/lib/WebGUI/Auth.pm
@@ -0,0 +1,651 @@
+package WebGUI::Auth;
+
+=head1 LEGAL
+
+ -------------------------------------------------------------------
+ WebGUI is Copyright 2001-2003 Plain Black LLC.
+ -------------------------------------------------------------------
+ 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
+ -------------------------------------------------------------------
+
+=cut
+
+use CGI::Util qw(rearrange);
+use DBI;
+use strict qw(subs vars);
+use Tie::IxHash;
+use WebGUI::DateTime;
+use WebGUI::FormProcessor;
+use WebGUI::HTML;
+use WebGUI::HTMLForm;
+use WebGUI::Icon;
+use WebGUI::International;
+use WebGUI::Macro;
+use WebGUI::Node;
+use WebGUI::Page;
+use WebGUI::Session;
+use WebGUI::SQL;
+use WebGUI::TabForm;
+use WebGUI::Template;
+use WebGUI::URL;
+use WebGUI::Utility;
+use WebGUI::Operation::Profile;
+use WebGUI::Operation::Auth;
+
+=head1 NAME
+
+Package WebGUI::Auth
+
+=head1 DESCRIPTION
+
+An abstract class for all authentication modules to extend.
+
+=head1 SYNOPSIS
+
+ use WebGUI::Auth;
+ our @ISA = qw(WebGUI::Auth);
+
+=head1 METHODS
+
+These methods are available from this class:
+
+=cut
+
+#-------------------------------------------------------------------
+sub _isDuplicateUsername {
+ my $self = shift;
+ my $username = shift;
+ #Return false if the user is already logged in, but not changing their username.
+ return 0 if($self->userId != 1 && $session{user}{username} eq $username);
+ my ($otherUser) = WebGUI::SQL->quickArray("select count(*) from users where username=".quote($username));
+ return 0 if !$otherUser;
+ $self->error('
'.WebGUI::International::get(81).'';
+
+ if($self->userId == 1){
+ return $self->displayLogin;
+ }
+
+ if(!$self->validUsernameAndPassword($username,$password,$passConfirm)){
+ $display = $self->error; #overwrite display
+ }
+
+ my $properties;
+ my $u = $self->user;
+ $u->username($username);
+ my $userData = $self->getParams;
+
+ unless ($password eq "password") {
+ $properties->{identifier} = Digest::MD5::md5_base64($password);
+ if($userData->{identifier} ne $properties->{identifier}){
+ $properties->{passwordLastUpdated} = time();
+ }
+ }
+
+ $session{form}{uid} = $u->userId;
+ $self->saveParams($u->userId,$self->authMethod,$properties);
+ WebGUI::Session::refreshUserInfo($u->userId);
+
+ return $self->displayAccount($display);
+}
+
+1;
+
diff --git a/lib/WebGUI/Operation.pm b/lib/WebGUI/Operation.pm
index 17591d32f..373695281 100644
--- a/lib/WebGUI/Operation.pm
+++ b/lib/WebGUI/Operation.pm
@@ -11,7 +11,8 @@ package WebGUI::Operation;
#-------------------------------------------------------------------
use strict;
-use WebGUI::Operation::Account;
+#use WebGUI::Operation::Account;
+use WebGUI::Operation::Auth;
use WebGUI::Operation::Admin;
use WebGUI::Operation::Clipboard;
use WebGUI::Operation::Collateral;
@@ -19,8 +20,10 @@ use WebGUI::Operation::DatabaseLink;
use WebGUI::Operation::Group;
use WebGUI::Operation::Help;
use WebGUI::Operation::International;
+use WebGUI::Operation::MessageLog;
use WebGUI::Operation::Package;
use WebGUI::Operation::Page;
+use WebGUI::Operation::Profile;
use WebGUI::Operation::ProfileSettings;
use WebGUI::Operation::Replacements;
use WebGUI::Operation::Root;
@@ -28,6 +31,7 @@ use WebGUI::Operation::Scratch;
use WebGUI::Operation::Search;
use WebGUI::Operation::Settings;
use WebGUI::Operation::Statistics;
+use WebGUI::Operation::Style;
use WebGUI::Operation::Template;
use WebGUI::Operation::Theme;
use WebGUI::Operation::Trash;
diff --git a/lib/WebGUI/Operation/Auth.pm b/lib/WebGUI/Operation/Auth.pm
new file mode 100644
index 000000000..4b138d19f
--- /dev/null
+++ b/lib/WebGUI/Operation/Auth.pm
@@ -0,0 +1,103 @@
+package WebGUI::Operation::Auth;
+
+#-------------------------------------------------------------------
+# WebGUI is Copyright 2001-2003 Plain Black LLC.
+#-------------------------------------------------------------------
+# 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
+#-------------------------------------------------------------------
+# The Operation WebGUI::Operation::Auth is responsible for instansiating
+# and calling methods in the Auth Module. This method also has some core
+# logic that defines how Authentication should happen
+
+use Exporter;
+use strict qw(vars subs);
+use URI;
+use WebGUI::ErrorHandler;
+use WebGUI::Session;
+use WebGUI::SQL;
+use WebGUI::URL;
+use WebGUI::User;
+use WebGUI::Utility;
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(&www_auth &www_displayLogin &www_login &www_displayAccount &www_createAccount &www_deactivateAccount &www_logout &www_recoverPassword &www_init);
+#-------------------------------------------------------------------
+
+=head2 getInstance ( )
+
+Get the instance of this object or create a new instance if none exists
+
+=cut
+
+sub getInstance {
+ #Get Auth Settings
+ my $authMethod = $session{user}{authMethod} || $session{setting}{authMethod};
+ $authMethod = $session{setting}{authMethod} if($session{user}{userId} == 1);
+ $authMethod = $_[0] if($_[0] && isIn($_[0], @{$session{config}{authMethods}}));
+ my $userId = $_[1];
+ #Create Auth Object
+ my $cmd = "WebGUI::Auth::".$authMethod;
+ my $auth = eval{$cmd->new($authMethod,$userId)};
+ WebGUI::ErrorHandler::fatalError("Couldn't instanciate authentication module: $authMethod. Root cause: ".$@) if($@);
+ return $auth;
+}
+
+#-------------------------------------------------------------------
+sub www_auth {
+ my $auth;
+ ($auth) = WebGUI::SQL->quickArray("select authMethod from users where username=".quote($session{form}{username})) if($session{form}{username});
+ my $authMethod = getInstance($auth);
+ my $methodCall = $session{form}{method} || $_[0];
+ if(!$authMethod->isCallable($methodCall)){
+ WebGUI::ErrorHandler::security("access uncallable auth method on page '".$session{page}{title}."' [".$session{page}{pageId}."].");
+ return WebGUI::International::get(1077);
+ }
+ return $authMethod->$methodCall;
+}
+
+#-------------------------------------------------------------------
+sub www_createAccount {
+ return www_auth("createAccount");
+}
+
+#-------------------------------------------------------------------
+sub www_deactivateAccount {
+ return www_auth("deactivateAccount");
+}
+
+#-------------------------------------------------------------------
+sub www_displayAccount {
+ return www_auth("displayAccount");
+}
+
+#-------------------------------------------------------------------
+sub www_displayLogin {
+ return www_auth("displayLogin");
+}
+
+#-------------------------------------------------------------------
+sub www_init {
+ return www_auth("init");
+}
+
+#Deprecated. Kept for backwards compatibility. Use op=auth&method=login
+#-------------------------------------------------------------------
+sub www_login {
+ return www_auth("login");
+}
+
+#-------------------------------------------------------------------
+sub www_logout {
+ return www_auth("logout");
+}
+
+#-------------------------------------------------------------------
+sub www_recoverPassword {
+ return www_auth("recoverPassword");
+}
+
+1;
\ No newline at end of file
diff --git a/lib/WebGUI/Operation/MessageLog.pm b/lib/WebGUI/Operation/MessageLog.pm
new file mode 100644
index 000000000..5579b3e6c
--- /dev/null
+++ b/lib/WebGUI/Operation/MessageLog.pm
@@ -0,0 +1,109 @@
+package WebGUI::Operation::MessageLog;
+
+#-------------------------------------------------------------------
+# WebGUI is Copyright 2001-2003 Plain Black LLC.
+#-------------------------------------------------------------------
+# 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 Exporter;
+use strict qw(vars subs);
+use URI;
+use WebGUI::DateTime;
+use WebGUI::ErrorHandler;
+use WebGUI::FormProcessor;
+use WebGUI::HTMLForm;
+use WebGUI::International;
+use WebGUI::Macro;
+use WebGUI::Mail;
+use WebGUI::MessageLog;
+use WebGUI::Paginator;
+use WebGUI::Privilege;
+use WebGUI::Session;
+use WebGUI::SQL;
+use WebGUI::URL;
+use WebGUI::User;
+use WebGUI::Utility;
+use WebGUI::Operation::Profile;
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(&www_viewMessageLog &www_viewMessageLogMessage);
+
+#-------------------------------------------------------------------
+sub www_viewMessageLog {
+ my (%status, @data, $output, $sth, @row, $i, $p);
+ if (WebGUI::Privilege::isInGroup(2,$session{user}{userId})) {
+ %status = (notice=>WebGUI::International::get(551),pending=>WebGUI::International::get(552),completed=>WebGUI::International::get(350));
+ $output = '
'.WebGUI::International::get(159).'
';
+ $sth = WebGUI::SQL->read("select messageLogId,subject,url,dateOfEntry,status from messageLog where userId=$session{user}{userId} order by dateOfEntry desc");
+ while (@data = $sth->array) {
+ $row[$i] = '| ';
+ $row[$i] .= ''.$data[1].'';
+ $row[$i] .= ' | ';
+ if ($data[2] ne "") {
+ $data[2] = WebGUI::URL::append($data[2],'mlog='.$data[0]);
+ $row[$i] .= '';
+ }
+ $row[$i] .= $status{$data[4]};
+ if ($data[2] ne "") {
+ $row[$i] .= '';
+ }
+ $row[$i] .= ' | '.epochToHuman($data[3]).' |
';
+ $i++;
+ }
+ $sth->finish;
+ $p = WebGUI::Paginator->new(WebGUI::URL::page('op=viewMessageLog'),\@row);
+ $output .= '';
+ $output .= '
+
+
';
+ if ($p->getPage($session{form}{pn}) eq "") {
+ $output .= '| '.WebGUI::International::get(353).' |
';
+ } else {
+ $output .= $p->getPage($session{form}{pn});
+ }
+ $output .= '
';
+ $output .= $p->getBarSimple($session{form}{pn});
+ $output .= WebGUI::Operation::Profile::accountOptions();
+ } else {
+ $output = WebGUI::Privilege::insufficient();
+ }
+ return $output;
+}
+
+#-------------------------------------------------------------------
+sub www_viewMessageLogMessage {
+ my (%status, %data, $output, $sth, @row, $i, $p);
+ tie %data, 'Tie::CPHash';
+ if (WebGUI::Privilege::isInGroup(2,$session{user}{userId})) {
+ %status = (notice=>WebGUI::International::get(551),pending=>WebGUI::International::get(552),completed=>WebGUI::International::get(350));
+ $output = ''.WebGUI::International::get(159).'
';
+ %data = WebGUI::SQL->quickHash("select * from messageLog where messageLogId=$session{form}{mlog} and userId=$session{user}{userId}");
+ $output .= ''.$data{subject}.'
';
+ $output .= epochToHuman($data{dateOfEntry}).'
';
+ if ($data{url} ne "" && $data{status} eq 'pending') {
+ $data{url} = WebGUI::URL::append($data{url},'mlog='.$data{messageLogId});
+ $output .= '';
+ }
+ $output .= $status{$data{status}}.'
';
+ if ($data{url} ne "") {
+ $output .= '';
+ }
+ unless ($data{message} =~ /\/ig || $data{message} =~ /\
/ig || $data{message} =~ /\
/ig) {
+ $data{message} =~ s/\n/\
/g;
+ }
+ $output .= '
'.$data{message}.'
';
+ if ($data{url} ne "" && $data{status} eq 'pending') {
+ $output .= ''.WebGUI::International::get(554).' · ';
+ }
+ $output .= ''.WebGUI::International::get(354).'
';
+ $output .= WebGUI::Operation::Profile::_accountOptions();
+ } else {
+ $output = WebGUI::Privilege::insufficient();
+ }
+ return $output;
+}
\ No newline at end of file
diff --git a/lib/WebGUI/Operation/Profile.pm b/lib/WebGUI/Operation/Profile.pm
new file mode 100644
index 000000000..613dcffae
--- /dev/null
+++ b/lib/WebGUI/Operation/Profile.pm
@@ -0,0 +1,281 @@
+package WebGUI::Operation::Profile;
+
+#-------------------------------------------------------------------
+# WebGUI is Copyright 2001-2003 Plain Black LLC.
+#-------------------------------------------------------------------
+# 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 Exporter;
+use strict qw(vars subs);
+use URI;
+use WebGUI::Operation::Auth;
+use WebGUI::DateTime;
+use WebGUI::ErrorHandler;
+use WebGUI::FormProcessor;
+use WebGUI::HTMLForm;
+use WebGUI::International;
+use WebGUI::Macro;
+use WebGUI::Mail;
+use WebGUI::MessageLog;
+use WebGUI::Paginator;
+use WebGUI::Privilege;
+use WebGUI::Session;
+use WebGUI::SQL;
+use WebGUI::URL;
+use WebGUI::User;
+use WebGUI::Utility;
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(&www_editProfile &www_editProfileSave &www_viewProfile);
+
+#-------------------------------------------------------------------
+ sub accountOptions {
+ my ($output);
+ $output = '
';
+ return $output;
+}
+
+#-------------------------------------------------------------------
+# Builds Extra form requirements for anonymous registration.
+sub getRequiredProfileFields {
+ my ($f,$a,$method,$label,$default,$values,$data,@array);
+
+ #$f = WebGUI::HTMLForm->new();
+
+ $a = WebGUI::SQL->read("select * from userProfileField, userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId and
+ userProfileField.required=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber");
+ while($data = $a->hashRef) {
+ my %hash = ();
+ $method = $data->{dataType};
+ $label = eval $data->{fieldLabel};
+ $default = eval $data->{dataDefault};
+ if ($method eq "selectList") {
+ $values = eval $data->{dataValues};
+ # note: this big if statement doesn't look elegant, but doing regular ORs caused problems with the array reference.
+ if ($session{form}{$data->{fieldName}}) {
+ $default = [$session{form}{$data->{fieldName}}];
+ } elsif ($session{user}{$data->{fieldName}}) {
+ $default = [$session{user}{$data->{fieldName}}];
+ }
+ $hash{'profile.formElement'} = WebGUI::Form::selectList({
+ "name"=>$data->{fieldName},
+ "options"=>$values,
+ "value"=>$default
+ });
+ } else {
+ if ($session{form}{$data->{fieldName}}) {
+ $default = $session{form}{$data->{fieldName}};
+ } elsif (exists $session{user}{$data->{fieldName}}) {
+ $default = $session{user}{$data->{fieldName}};
+ }
+ my $cmd = 'WebGUI::Form::'.$method.'({"name"=>$data->{fieldName},"value"=>$default})';
+ $hash{'profile.formElement'} = eval($cmd);
+
+ }
+ $hash{'profile.formElement.label'} = $label;
+ push(@array,\%hash)
+ }
+ $a->finish;
+ return \@array;
+}
+
+#-------------------------------------------------------------------
+=head2 isDuplicateEmail ( )
+
+ Checks the value of the email address passed in to see if it is duplicated in the system. Returns true of false. Will return false if the email address passed in is
+ same as the email address of the current user.
+
+=over
+
+=item email
+
+ email address to check for duplication
+
+=back
+
+=cut
+
+sub isDuplicateEmail {
+ my $email = shift;
+ my ($otherEmail) = WebGUI::SQL->quickArray("select count(*) from userProfileData where fieldName='email' and fieldData = ".quote($email)." and userId <> ".$session{user}{userId});
+ return ($otherEmail > 0);
+}
+
+#-------------------------------------------------------------------
+sub saveProfileFields {
+ my $u = shift;
+ my $profile = shift;
+
+ foreach my $fieldName (keys %{$profile}) {
+ $u->profileField($fieldName,${$profile}{$fieldName});
+ }
+}
+
+#-------------------------------------------------------------------
+sub validateProfileData {
+ my (%data, $error, $a, %field, $warning);
+ tie %field, 'Tie::CPHash';
+ $a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId
+ and userProfileCategory.editable=1 and userProfileField.editable=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber");
+ while (%field = $a->hash) {
+ $data{$field{fieldName}} = WebGUI::FormProcessor::process($field{fieldName},$field{dataType});
+ if ($field{required} && $data{$field{fieldName}} eq "") {
+ $error .= '
'.(eval $field{fieldLabel}).' '.WebGUI::International::get(451);
+ }elsif($field{fieldName} eq "email" && isDuplicateEmail($data{$field{fieldName}})){
+ $warning .= ''.WebGUI::International::get(1072);
+ }
+ }
+ $a->finish;
+ return (\%data, $error, $warning);
+}
+
+
+#-------------------------------------------------------------------
+sub www_editProfile {
+ my ($output, $f, $a, %data, $method, $values, $category, $label, $default, $previousCategory, $subtext);
+ return WebGUI::Operation::Auth::www_displayLogin() if($session{user}{userId} == 1);
+
+ tie %data, 'Tie::CPHash';
+ $output .= ''.WebGUI::International::get(338).'
';
+ $f = WebGUI::HTMLForm->new;
+ $f->hidden("op","editProfileSave");
+ $f->hidden("uid",$session{user}{userId});
+ $a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId
+ and userProfileCategory.editable=1 and userProfileField.editable=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber");
+
+ while(%data = $a->hash) {
+ $category = eval $data{categoryName};
+ if ($category ne $previousCategory) {
+ $f->raw('
');
+ }
+ $values = eval $data{dataValues};
+ $method = $data{dataType};
+ $label = eval $data{fieldLabel};
+ $subtext = "";
+ if ($data{required}) {
+ $subtext = "*";
+ }
+
+ $default = eval $data{dataDefault};
+
+ if ($method eq "selectList") {
+ # note: this big if statement doesn't look elegant, but doing regular ORs caused problems with the array reference.
+ if ($session{form}{$data{fieldName}}) {
+ $default = [$session{form}{$data{fieldName}}];
+ } elsif ($session{user}{$data{fieldName}}) {
+ $default = [$session{user}{$data{fieldName}}];
+ }
+
+ $f->select(
+ -name=>$data{fieldName},
+ -options=>$values,
+ -label=>$label,
+ -value=>$default,
+ -subtext=>$subtext
+ );
+ } else {
+ if ($session{form}{$data{fieldName}}) {
+ $default = $session{form}{$data{fieldName}};
+ } elsif (exists $session{user}{$data{fieldName}}) {
+ $default = $session{user}{$data{fieldName}};
+ }
+
+ $f->$method(
+ -name=>$data{fieldName},
+ -label=>$label,
+ -value=>$default,
+ -subtext=>$subtext
+ );
+ }
+ $previousCategory = $category;
+ }
+ $a->finish;
+ $f->submit;
+ $output .= $f->print;
+ $output .= accountOptions();
+ return $output;
+}
+
+#-------------------------------------------------------------------
+sub www_editProfileSave {
+ my ($profile, $fieldName, $error, $u, $warning);
+ return WebGUI::Operation::Auth::www_displayLogin() if ($session{user}{userId} == 1);
+
+ ($profile, $error, $warning) = validateProfileData();
+ $error .= $warning;
+
+ return ''.www_editProfile() if($error ne "");
+
+ $u = WebGUI::User->new($session{user}{userId});
+ foreach $fieldName (keys %{$profile}) {
+ $u->profileField($fieldName,${$profile}{$fieldName});
+ }
+ return WebGUI::Operation::Auth::www_displayAccount();
+}
+
+#-------------------------------------------------------------------
+sub www_viewProfile {
+ my ($a, %data, $category, $label, $value, $previousCategory, $output, $u, %gender);
+ %gender = ('neuter'=>WebGUI::International::get(403),'male'=>WebGUI::International::get(339),'female'=>WebGUI::International::get(340));
+ $u = WebGUI::User->new($session{form}{uid});
+ my $header = ''.WebGUI::International::get(347).' '.$u->username.'
';
+ return WebGUI::Privilege::notMember() if($u->username eq "");
+ return $header.WebGUI::International::get(862) if($u->profileField("publicProfile") < 1);
+ return WebGUI::Privilege::insufficient() if(!WebGUI::Privilege::isInGroup(2));
+ $output = $header;
+ $output .= '';
+ $a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId
+ and userProfileCategory.visible=1 and userProfileField.visible=1 order by userProfileCategory.sequenceNumber,userProfileField.sequenceNumber");
+ while (%data = $a->hash) {
+ $category = eval $data{categoryName};
+ if ($category ne $previousCategory) {
+ $output .= '
';
+ }
+ $label = eval $data{fieldLabel};
+ if ($data{dataValues}) {
+ $value = eval $data{dataValues};
+ $value = ${$value}{$u->profileField($data{fieldName})};
+ } else {
+ $value = $u->profileField($data{fieldName});
+ }
+ if ($data{dataType} eq "date") {
+ $value = WebGUI::DateTime::epochToHuman($value,"%z");
+ }
+ unless ($data{fieldName} eq "email" and $u->profileField("publicEmail") < 1) {
+ $output .= '| '.$value.' |
';
+ }
+ $previousCategory = $category;
+ }
+ $a->finish;
+ $output .= '
';
+ if ($session{user}{userId} == $session{form}{uid}) {
+ $output .= accountOptions();
+ }
+ return $output;
+
+}
\ No newline at end of file
diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm
index 5c9a8142e..5e4e2875f 100644
--- a/lib/WebGUI/Operation/Settings.pm
+++ b/lib/WebGUI/Operation/Settings.pm
@@ -12,7 +12,6 @@ package WebGUI::Operation::Settings;
use Exporter;
use strict qw(vars subs);
-use WebGUI::Authentication;
use WebGUI::DateTime;
use WebGUI::HTMLForm;
use WebGUI::Icon;
@@ -65,6 +64,7 @@ sub www_editContentSettings {
$f->hidden("op","saveSettings");
$f->select("defaultPage",$pages,WebGUI::International::get(527),[$session{setting}{defaultPage}]);
$f->select("notFoundPage",$pages,WebGUI::International::get(141),[$session{setting}{notFoundPage}]);
+ $f->text("docTypeDec",WebGUI::International::get(398),$session{setting}{docTypeDec});
$f->text(
-name=>"favicon",
-label=>WebGUI::International::get(897),
@@ -135,29 +135,46 @@ sub www_editMiscSettings {
#-------------------------------------------------------------------
sub www_editUserSettings {
- return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
- my ($output, $f, $cmd, $html, $options);
- $output .= helpIcon(2);
- $output .= ''.WebGUI::International::get(117).'
';
- $f = WebGUI::HTMLForm->new;
- $f->hidden("op","saveSettings");
- $f->yesNo("anonymousRegistration",WebGUI::International::get(118),$session{setting}{anonymousRegistration});
- $f->text("runOnRegistration",WebGUI::International::get(559),$session{setting}{runOnRegistration});
- $f->yesNo("useKarma",WebGUI::International::get(539),$session{setting}{useKarma});
- $f->integer("karmaPerLogin",WebGUI::International::get(540),$session{setting}{karmaPerLogin});
- $f->interval("sessionTimeout",WebGUI::International::get(142),WebGUI::DateTime::secondsToInterval($session{setting}{sessionTimeout}));
- $f->yesNo("selfDeactivation",WebGUI::International::get(885),$session{setting}{selfDeactivation});
- $f->yesNo("encryptLogin",WebGUI::International::get(1006),$session{setting}{encryptLogin});
+ return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
+ my ($output, $f, $cmd, $html, $options);
+ $output .= helpIcon(2);
+ $output .= ''.WebGUI::International::get(117).'
';
+ $output .= WebGUI::Form::_javascriptFile("swapLayers.js");
+ $output .= '';
+ $f = WebGUI::HTMLForm->new("","","","","","border='0' cellpadding='0' cellspacing='0' width='800'");
+ $f->hidden("op","saveSettings");
+ $f->raw('| | |
');
+ $f->yesNo("anonymousRegistration",WebGUI::International::get(118),$session{setting}{anonymousRegistration});
+ $f->text("runOnRegistration",WebGUI::International::get(559),$session{setting}{runOnRegistration});
+ $f->yesNo("useKarma",WebGUI::International::get(539),$session{setting}{useKarma});
+ $f->integer("karmaPerLogin",WebGUI::International::get(540),$session{setting}{karmaPerLogin});
+ $f->interval("sessionTimeout",WebGUI::International::get(142),WebGUI::DateTime::secondsToInterval($session{setting}{sessionTimeout}));
+ $f->yesNo("selfDeactivation",WebGUI::International::get(885),$session{setting}{selfDeactivation});
+ $f->yesNo("encryptLogin",WebGUI::International::get(1006),$session{setting}{encryptLogin});
+
+ my $options;
+ foreach (@{$session{config}{authMethods}}) {
+ $options->{$_} = $_;
+ }
+ $f->select(
+ -name=>"authMethod",
+ -options=>$options,
+ -label=>WebGUI::International::get(164),
+ -value=>[$session{setting}{authMethod}],
+ -extras=>"onChange=\"active=operateHidden(this.options[this.selectedIndex].value,active)\""
+ );
+ my $jscript = '";
+
+ $f->submit( -label=>" ");
$output .= $f->print;
- return _submenu($output);
+ $output .= $jscript;
+ return _submenu($output);
}
#-------------------------------------------------------------------
diff --git a/lib/WebGUI/Operation/User.pm b/lib/WebGUI/Operation/User.pm
index da181c696..d954833de 100644
--- a/lib/WebGUI/Operation/User.pm
+++ b/lib/WebGUI/Operation/User.pm
@@ -21,6 +21,7 @@ use WebGUI::HTMLForm;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Operation::Shared;
+use WebGUI::Operation::Auth;
use WebGUI::Paginator;
use WebGUI::Privilege;
use WebGUI::Session;
@@ -30,7 +31,8 @@ use WebGUI::User;
use WebGUI::Utility;
our @ISA = qw(Exporter);
-our @EXPORT = qw(&www_editUserKarma &www_editUserKarmaSave &www_editUserGroup &www_editUserProfile &www_editUserProfileSave &www_addUserToGroupSave &www_deleteGrouping &www_editGrouping &www_editGroupingSave &www_becomeUser &www_addUser &www_addUserSave &www_deleteUser &www_deleteUserConfirm &www_editUser &www_editUserSave &www_listUsers &www_addUserSecondary &www_addUserSecondarySave);
+#&www_addUserSecondary &www_addUserSecondarySave
+our @EXPORT = qw(&www_editUserKarma &www_editUserKarmaSave &www_editUserGroup &www_editUserProfile &www_editUserProfileSave &www_addUserToGroupSave &www_deleteGrouping &www_editGrouping &www_editGroupingSave &www_becomeUser &www_addUser &www_addUserSave &www_deleteUser &www_deleteUserConfirm &www_editUser &www_editUserSave &www_listUsers);
#-------------------------------------------------------------------
@@ -54,119 +56,92 @@ sub _submenu {
}
$menu{WebGUI::URL::page("op=listUsers")} = WebGUI::International::get(456);
} else {
- $menu{WebGUI::URL::page("op=addUserSecondary")} = WebGUI::International::get(169);
+ $menu{WebGUI::URL::page("op=addUser")} = WebGUI::International::get(169);
}
return menuWrapper($_[0],\%menu);
}
#-------------------------------------------------------------------
sub www_addUser {
- my ($output, $f, $cmd, $html, %status);
- return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
- $output .= helpIcon(5);
+ my ($output, $f, $cmd, $html, %status);
+ return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3) || WebGUI::Privilege::isInGroup(11));
+ $output .= helpIcon(5);
$output .= ''.WebGUI::International::get(163).'
';
- $f = WebGUI::HTMLForm->new;
+ $output .= WebGUI::Form::_javascriptFile("swapLayers.js");
+ $output .= '';
+
if ($session{form}{op} eq "addUserSave") {
$output .= '- '.WebGUI::International::get(77).' '.$session{form}{username}.'Too or '.$session{form}{username}.'02
';
}
- $f->hidden("op","addUserSave");
- $f->text("username",WebGUI::International::get(50),$session{form}{username});
- $f->email("email",WebGUI::International::get(56));
-
- tie %status, 'Tie::IxHash';
- %status = (
- Active =>WebGUI::International::get(817),
- Deactivated =>WebGUI::International::get(818)
- );
- $f->select("status",\%status,WebGUI::International::get(816), ['Active']);
- $f->group(
- -name=>"groups",
- -excludeGroups=>[1,2,7],
- -label=>WebGUI::International::get(605),
- -size=>5,
- -multiple=>1
- );
+
+ $f = WebGUI::HTMLForm->new(-tableOptions=>"border=0 cellspacing=0 cellpadding=0");
+ $f->hidden("op","addUserSave");
+ $f->raw('| | |
');
+ $f->text("username",WebGUI::International::get(50),$session{form}{username});
+ $f->email("email",WebGUI::International::get(56));
+
+ if(WebGUI::Privilege::isInGroup(3)){
+ tie %status, 'Tie::IxHash';
+ %status = (
+ Active =>WebGUI::International::get(817),
+ Deactivated =>WebGUI::International::get(818)
+ );
+ $f->select("status",\%status,WebGUI::International::get(816), ['Active']);
+ $f->group(
+ -name=>"groups",
+ -excludeGroups=>[1,2,7],
+ -label=>WebGUI::International::get(605),
+ -size=>5,
+ -multiple=>1
+ );
+ }else{
+ $f->hidden("status","Active");
+ }
my $options;
foreach (@{$session{config}{authMethods}}) {
$options->{$_} = $_;
}
- $f->select("authMethod",$options,WebGUI::International::get(164),[$session{setting}{authMethod}]);
+ $f->select(
+ -name=>"authMethod",
+ -options=>$options,
+ -label=>WebGUI::International::get(164),
+ -value=>[$session{setting}{authMethod}],
+ -extras=>"onChange=\"active=operateHidden(this.options[this.selectedIndex].value,active)\""
+ );
+ my $jscript = '";
$f->submit;
$output .= $f->print;
- return _submenu($output);
+ $output .= $jscript;
+ return _submenu($output);
}
#-------------------------------------------------------------------
sub www_addUserSave {
- my (@groups, $uid, $u);
- return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
+ my (@groups, $uid, $u);
+ return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3) || WebGUI::Privilege::isInGroup(11));
($uid) = WebGUI::SQL->quickArray("select userId from users where username=".quote($session{form}{username}));
- unless ($uid) {
- $u = WebGUI::User->new("new");
- $session{form}{uid}=$u->userId;
- $u->username($session{form}{username});
- foreach (@{$session{config}{authMethods}}) {
- WebGUI::Authentication::adminFormSave($u->userId,$_);
- }
- $u->status($session{form}{status});
- $u->authMethod($session{form}{authMethod});
- @groups = $session{cgi}->param('groups');
- $u->addToGroups(\@groups);
- $u->profileField("email",$session{form}{email});
- return www_editUser();
- } else {
- $session{form}{op} = "addUser";
- return www_addUser();
+ return www_addUser if ($uid);
+
+ $u = WebGUI::User->new("new");
+ $u->username($session{form}{username});
+ foreach (@{$session{config}{authMethods}}) {
+ my $authInstance = WebGUI::Operation::Auth::getInstance($_,$u->userId);
+ $authInstance->addUserFormSave;
}
-}
-
-#-------------------------------------------------------------------
-sub www_addUserSecondary {
- return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(11));
- my $output .= ''.WebGUI::International::get(163).'
';
- my $f = WebGUI::HTMLForm->new;
- if ($session{form}{op} eq "addUserSecondarySave") {
- $output .= '- '.WebGUI::International::get(77).' '.$session{form}{username}.'Too or '.$session{form}{username}.'02
';
- }
- $f->hidden("op","addUserSecondarySave");
- $f->text("username",WebGUI::International::get(50),$session{form}{username});
- $f->email("email",WebGUI::International::get(56));
- my $options;
- foreach (@{$session{config}{authMethods}}) {
- $options->{$_} = $_;
- }
- $f->select("authMethod",$options,WebGUI::International::get(164),[$session{setting}{authMethod}]);
- foreach (@{$session{config}{authMethods}}) {
- $f->raw(WebGUI::Authentication::adminForm(0,$_));
- }
- $f->submit;
- $output .= $f->print;
- return _submenu($output);
-}
-
-#-------------------------------------------------------------------
-sub www_addUserSecondarySave {
- my (@groups, $uid, $u);
- return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(11));
- ($uid) = WebGUI::SQL->quickArray("select userId from users where username=".quote($session{form}{username}));
- unless ($uid) {
- $u = WebGUI::User->new("new");
- $session{form}{uid}=$u->userId;
- $u->username($session{form}{username});
- foreach (@{$session{config}{authMethods}}) {
- WebGUI::Authentication::adminFormSave($u->userId,$_);
- }
- $u->status('Active');
- $u->authMethod($session{form}{authMethod});
- $u->profileField("email",$session{form}{email});
- return _submenu(WebGUI::International::get(978));
- } else {
- $session{form}{op} = "addUserSecondary";
- return www_addUserSecondary();
- }
+ $session{form}{uid}=$u->userId;
+ $u->status($session{form}{status});
+ $u->authMethod($session{form}{authMethod});
+ @groups = $session{cgi}->param('groups');
+ $u->addToGroups(\@groups);
+ $u->profileField("email",$session{form}{email});
+ return _submenu(WebGUI::International::get(978)) if(!WebGUI::Privilege::isInGroup(3));
+ return www_editUser();
}
#-------------------------------------------------------------------
@@ -223,14 +198,13 @@ sub www_deleteUser {
sub www_deleteUserConfirm {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
my ($u);
- if ($session{form}{uid} < 26) {
- return WebGUI::Privilege::vitalComponent();
- } else {
- $u = WebGUI::User->new($session{form}{uid});
- WebGUI::Authentication::deleteParams($u->userId);
- $u->delete;
- return www_listUsers();
- }
+ if ($session{form}{uid} < 26) {
+ return WebGUI::Privilege::vitalComponent();
+ } else {
+ $u = WebGUI::User->new($session{form}{uid});
+ $u->delete;
+ return www_listUsers();
+ }
}
#-------------------------------------------------------------------
@@ -267,18 +241,21 @@ sub www_editGroupingSave {
#-------------------------------------------------------------------
sub www_editUser {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
- my ($output, $f, $u, $cmd, $html, %status);
+ my ($output, $f, $u, $cmd, $html, %status);
$u = WebGUI::User->new($session{form}{uid});
- $output .= helpIcon(5);
+ $output .= WebGUI::Form::_javascriptFile("swapLayers.js");
+ $output .= '';
+ $output .= helpIcon(5);
$output .= ''.WebGUI::International::get(168).'
';
$f = WebGUI::HTMLForm->new;
- $f->hidden("op","editUserSave");
- $f->hidden("uid",$session{form}{uid});
- $f->readOnly($session{form}{uid},WebGUI::International::get(378));
- $f->readOnly($u->karma,WebGUI::International::get(537)) if ($session{setting}{useKarma});
- $f->readOnly(epochToHuman($u->dateCreated,"%z"),WebGUI::International::get(453));
- $f->readOnly(epochToHuman($u->lastUpdated,"%z"),WebGUI::International::get(454));
- $f->text("username",WebGUI::International::get(50),$u->username);
+ $f->hidden("op","editUserSave");
+ $f->hidden("uid",$session{form}{uid});
+ $f->raw('| | |
');
+ $f->readOnly($session{form}{uid},WebGUI::International::get(378));
+ $f->readOnly($u->karma,WebGUI::International::get(537)) if ($session{setting}{useKarma});
+ $f->readOnly(epochToHuman($u->dateCreated,"%z"),WebGUI::International::get(453));
+ $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),
@@ -290,34 +267,48 @@ sub www_editUser {
} else {
$f->select("status",\%status,WebGUI::International::get(816),[$u->status]);
}
+
my $options;
- foreach (@{$session{config}{authMethods}}) {
- $options->{$_} = $_;
- }
- $f->select("authMethod",$options,WebGUI::International::get(164),[$u->authMethod]);
foreach (@{$session{config}{authMethods}}) {
- $f->raw(WebGUI::Authentication::adminForm($u->userId,$_));
- }
- $f->submit;
+ $options->{$_} = $_;
+ }
+ $f->select(
+ -name=>"authMethod",
+ -options=>$options,
+ -label=>WebGUI::International::get(164),
+ -value=>[$u->authMethod],
+ -extras=>"onChange=\"active=operateHidden(this.options[this.selectedIndex].value,active)\""
+ );
+ my $jscript = '";
+ $f->submit;
$output .= $f->print;
+ $output .= $jscript;
return _submenu($output);
}
#-------------------------------------------------------------------
sub www_editUserSave {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
- my ($error, $uid, $u);
- ($uid) = WebGUI::SQL->quickArray("select userId from users where username=".quote($session{form}{username}));
- if ($uid == $session{form}{uid} || $uid < 1) {
- $u = WebGUI::User->new($session{form}{uid});
- $u->username($session{form}{username});
- $u->authMethod($session{form}{authMethod});
- $u->status($session{form}{status});
- foreach (@{$session{config}{authMethods}}) {
- WebGUI::Authentication::adminFormSave($u->userId,$_);
- }
+ my ($error, $uid, $u);
+ ($uid) = WebGUI::SQL->quickArray("select userId from users where username=".quote($session{form}{username}));
+
+ if ($uid == $session{form}{uid} || $uid < 1) {
+ $u = WebGUI::User->new($session{form}{uid});
+ $u->username($session{form}{username});
+ $u->authMethod($session{form}{authMethod});
+ $u->status($session{form}{status});
+ foreach (@{$session{config}{authMethods}}) {
+ my $authInstance = WebGUI::Operation::Auth::getInstance($_,$u->userId);
+ $authInstance->editUserFormSave;
+ }
} else {
- $error = '- '.WebGUI::International::get(77).' '.$session{form}{username}.'Too or '.$session{form}{username}.'02
';
+ $error = '- '.WebGUI::International::get(77).' '.$session{form}{username}.'Too or '.$session{form}{username}.'02
';
}
return $error.www_editUser();
}
diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm
index 82c3fe1cd..db0674257 100644
--- a/lib/WebGUI/User.pm
+++ b/lib/WebGUI/User.pm
@@ -22,7 +22,7 @@ use WebGUI::International;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::URL;
-use WebGUI::Authentication;
+use WebGUI::Operation::Auth;
=head1 NAME
@@ -39,7 +39,7 @@ This package provides an object-oriented way of managing WebGUI users as well as
$authMethod = $u->authMethod("WebGUI");
$dateCreated = $u->dateCreated;
- $karma = $u->karma;
+ $karma = $u->karma;
$lastUpdated = $u->lastUpdated;
$languagePreference = $u->profileField("language",1);
$referringAffiliate = $u->referringAffiliate;
@@ -137,18 +137,20 @@ Deletes this user.
=cut
sub delete {
- my ($class);
+ my ($class,$authMethod);
$class = shift;
WebGUI::SQL->write("delete from users where userId=".$class->{_userId});
WebGUI::SQL->write("delete from userProfileData where userId=".$class->{_userId});
WebGUI::Grouping::deleteUsersFromGroups([$class->{_userId}],WebGUI::Grouping::getGroupsForUser($class->{_userId}));
WebGUI::SQL->write("delete from messageLog where userId=".$class->{_userId});
- WebGUI::Authentication::deleteParams($class->{_userId});
- my $sth = WebGUI::SQL->read("select sessionId from userSession where userId=$class->{_userId}");
- while (my ($sid) = $sth->array) {
- WebGUI::Sesssion::end($sid);
- }
- $sth->finish;
+
+ my $authMethod = WebGUI::Operation::Auth::getInstance($class->authMethod,$class->{_userId});
+ $authMethod->deleteParams($class->{_userId});
+ my $sth = WebGUI::SQL->read("select sessionId from userSession where userId=$class->{_userId}");
+ while (my ($sid) = $sth->array) {
+ WebGUI::Sesssion::end($sid);
+ }
+ $sth->finish;
}
#-------------------------------------------------------------------
@@ -172,7 +174,7 @@ sub deleteFromGroups {
}
#-------------------------------------------------------------------
-# This method is depricated and is provided only for reverse compatibility. See WebGUI::Authentication instead.
+# This method is depricated and is provided only for reverse compatibility. See WebGUI::Auth instead.
sub identifier {
my ($class, $value);
$class = shift;
diff --git a/www/extras/swapLayers.js b/www/extras/swapLayers.js
new file mode 100644
index 000000000..b9c717a2c
--- /dev/null
+++ b/www/extras/swapLayers.js
@@ -0,0 +1,5 @@
+function operateHidden(newId,oldId){
+ document.getElementById(oldId).style.display='none';
+ document.getElementById(newId).style.display='';
+ return newId;
+}
\ No newline at end of file