- fix: Recover Password by Profile Field can now work with subclasses of
WebGUI::Auth::WebGUI and with custom WebGUI::Form::Controls as profile fields.
This commit is contained in:
parent
1e9e4d810f
commit
705631f860
3 changed files with 50 additions and 18 deletions
|
|
@ -6,6 +6,9 @@
|
||||||
- fix: purge old asset revisions could purge the most recent revision if the
|
- fix: purge old asset revisions could purge the most recent revision if the
|
||||||
database had some referential integrity probems
|
database had some referential integrity probems
|
||||||
- Wiki autolinks prefer longest title match
|
- Wiki autolinks prefer longest title match
|
||||||
|
- fix: Recover Password by Profile Field can now work with subclasses of
|
||||||
|
WebGUI::Auth::WebGUI and with custom WebGUI::Form::Controls as profile
|
||||||
|
fields.
|
||||||
|
|
||||||
7.4.0
|
7.4.0
|
||||||
- api: Form Controls and Workflow Activities may now include web based helper
|
- api: Form Controls and Workflow Activities may now include web based helper
|
||||||
|
|
|
||||||
|
|
@ -816,6 +816,7 @@ sub recoverPasswordFinish {
|
||||||
|
|
||||||
sub profileRecoverPasswordFinish {
|
sub profileRecoverPasswordFinish {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
my $session = $self->session;
|
||||||
my $i18n = WebGUI::International->new($self->session);
|
my $i18n = WebGUI::International->new($self->session);
|
||||||
my $i18n2 = WebGUI::International->new($self->session, 'AuthWebGUI');
|
my $i18n2 = WebGUI::International->new($self->session, 'AuthWebGUI');
|
||||||
return $self->displayLogin unless ($self->session->setting->get('webguiPasswordRecovery') ne '') and $self->userId eq '1';
|
return $self->displayLogin unless ($self->session->setting->get('webguiPasswordRecovery') ne '') and $self->userId eq '1';
|
||||||
|
|
@ -848,12 +849,13 @@ sub profileRecoverPasswordFinish {
|
||||||
my @fieldValues = values %fieldValues;
|
my @fieldValues = values %fieldValues;
|
||||||
my $wheres = join(' ', map{"AND upd.$fieldNames[$_] = ?"} (0..$#fieldNames));
|
my $wheres = join(' ', map{"AND upd.$fieldNames[$_] = ?"} (0..$#fieldNames));
|
||||||
$wheres .= ' AND u.username = ?' if defined $username;
|
$wheres .= ' AND u.username = ?' if defined $username;
|
||||||
my $sql = "SELECT u.userId FROM users AS u JOIN userProfileData AS upd ON u.userId=upd.userId WHERE u.authMethod = 'WebGUI' $wheres";
|
my $sql = "SELECT u.userId FROM users AS u JOIN userProfileData AS upd ON u.userId=upd.userId WHERE u.authMethod = ? $wheres";
|
||||||
my @userIds = $self->session->db->buildArray($sql, [@fieldValues, (defined($username)? ($username) : ())]);
|
my @userIds = $self->session->db->buildArray($sql, [$self->authMethod, @fieldValues, (defined($username)? ($username) : ())]);
|
||||||
|
|
||||||
if (@userIds == 0) {
|
if (@userIds == 0) {
|
||||||
return $self->recoverPassword($i18n2->get('password recovery no results'));
|
return $self->recoverPassword($i18n2->get('password recovery no results'));
|
||||||
} elsif (@userIds > 1) {
|
}
|
||||||
|
elsif (@userIds > 1) {
|
||||||
return $self->recoverPassword($i18n2->get('password recovery multiple results'));
|
return $self->recoverPassword($i18n2->get('password recovery multiple results'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -865,14 +867,27 @@ sub profileRecoverPasswordFinish {
|
||||||
my $vars = {};
|
my $vars = {};
|
||||||
$vars->{title} = $i18n->get(71);
|
$vars->{title} = $i18n->get(71);
|
||||||
$vars->{'recoverFormHeader'} = "\n\n" . WebGUI::Form::formHeader($self->session, {});
|
$vars->{'recoverFormHeader'} = "\n\n" . WebGUI::Form::formHeader($self->session, {});
|
||||||
$vars->{'recoverFormHidden'} =
|
$vars->{'recoverFormHidden'}
|
||||||
(WebGUI::Form::hidden($self->session, {name => 'op', value => 'auth'})
|
= WebGUI::Form::hidden($session, {name => 'op', value => 'auth'})
|
||||||
. WebGUI::Form::hidden($self->session, {name => 'method', value => 'recoverPasswordFinish'})
|
. WebGUI::Form::hidden($session, {name => 'method', value => 'recoverPasswordFinish'})
|
||||||
. (defined($username)?
|
. ( defined($username)
|
||||||
WebGUI::Form::hidden($self->session, {name => 'authWebGUI.username',
|
? WebGUI::Form::hidden($session, {name => 'authWebGUI.username', value => $username})
|
||||||
value => $username}) : '')
|
: '')
|
||||||
. join('', map{WebGUI::Form::hidden($self->session, {name => $_, value => $fieldValues{$_}})}
|
;
|
||||||
keys %fieldValues));
|
|
||||||
|
# Add hidden fields for each required profile field
|
||||||
|
for my $profileField (@fields) {
|
||||||
|
my $formField
|
||||||
|
= $profileField->getFormControlClass->new($session,
|
||||||
|
$profileField->formProperties({
|
||||||
|
name => $profileField->getId,
|
||||||
|
value => $fieldValues{ $profileField->getId },
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
$vars->{'recoverFormHidden'} .= $formField->toHtmlAsHidden;
|
||||||
|
}
|
||||||
|
|
||||||
$vars->{'recoverFormSubmit'} = WebGUI::Form::submit($self->session, {});
|
$vars->{'recoverFormSubmit'} = WebGUI::Form::submit($self->session, {});
|
||||||
$vars->{'recoverFormFooter'} = WebGUI::Form::formFooter($self->session);
|
$vars->{'recoverFormFooter'} = WebGUI::Form::formFooter($self->session);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ sub create {
|
||||||
$properties->{fieldType} ||= "ReadOnly";
|
$properties->{fieldType} ||= "ReadOnly";
|
||||||
my $formClass = 'WebGUI::Form::' . ucfirst $properties->{fieldType};
|
my $formClass = 'WebGUI::Form::' . ucfirst $properties->{fieldType};
|
||||||
eval "use $formClass;";
|
eval "use $formClass;";
|
||||||
my $dbDataType = $formClass->new($session, $self->_formProperties($properties))->get("dbDataType");
|
my $dbDataType = $formClass->new($session, $self->formProperties($properties))->get("dbDataType");
|
||||||
|
|
||||||
# Add the column to the userProfileData table
|
# Add the column to the userProfileData table
|
||||||
$db->write(
|
$db->write(
|
||||||
|
|
@ -157,8 +157,16 @@ sub delete {
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
# Get a hashref of properties to give to a WebGUI::Form::Control
|
|
||||||
sub _formProperties {
|
=head2 formProperties ( hashRef )
|
||||||
|
|
||||||
|
Get a hashref of properties to give to a WebGUI::Form::Control. The
|
||||||
|
hashRef argument allows you to specify some additional items (such as
|
||||||
|
a value) that are not known by the ProfileField.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub formProperties {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $properties = shift || {};
|
my $properties = shift || {};
|
||||||
|
|
||||||
|
|
@ -187,6 +195,12 @@ sub _formProperties {
|
||||||
return \%properties;
|
return \%properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#-- This is here in case people did not understand that _ means private
|
||||||
|
#-- this can be removed when the API is unlocked.
|
||||||
|
sub _formProperties { my $self = shift; return $self->formProperties(@_); }
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
=head2 formField ( [ formProperties, withWrapper, userObject ] )
|
=head2 formField ( [ formProperties, withWrapper, userObject ] )
|
||||||
|
|
||||||
Returns an HTMLified form field element.
|
Returns an HTMLified form field element.
|
||||||
|
|
@ -207,7 +221,7 @@ A WebGUI::User object reference to use instead of the currently logged in user.
|
||||||
|
|
||||||
sub formField {
|
sub formField {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $properties = $self->_formProperties(shift);
|
my $properties = $self->formProperties(shift);
|
||||||
my $withWrapper = shift;
|
my $withWrapper = shift;
|
||||||
my $u = shift || $self->session->user;
|
my $u = shift || $self->session->user;
|
||||||
my $skipDefault = shift;
|
my $skipDefault = shift;
|
||||||
|
|
@ -251,7 +265,7 @@ Returns the value retrieved from a form post.
|
||||||
sub formProcess {
|
sub formProcess {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $u = shift || $self->session->user;
|
my $u = shift || $self->session->user;
|
||||||
my $properties = $self->_formProperties({value => $u->profileField($self->getId)});
|
my $properties = $self->formProperties({value => $u->profileField($self->getId)});
|
||||||
my $result = $self->session->form->process($self->getId,$self->get("fieldType"),WebGUI::Operation::Shared::secureEval($self->session,$self->get("dataDefault")), $properties);
|
my $result = $self->session->form->process($self->getId,$self->get("fieldType"),WebGUI::Operation::Shared::secureEval($self->session,$self->get("dataDefault")), $properties);
|
||||||
if (ref $result eq "ARRAY") {
|
if (ref $result eq "ARRAY") {
|
||||||
my @results = @$result;
|
my @results = @$result;
|
||||||
|
|
@ -578,7 +592,7 @@ sub rename {
|
||||||
# Rename the userProfileData column
|
# Rename the userProfileData column
|
||||||
my $fieldClass = $self->getFormControlClass;
|
my $fieldClass = $self->getFormControlClass;
|
||||||
eval "use $fieldClass;";
|
eval "use $fieldClass;";
|
||||||
my $dbDataType = $fieldClass->new($session, $self->_formProperties)->get("dbDataType");
|
my $dbDataType = $fieldClass->new($session, $self->formProperties)->get("dbDataType");
|
||||||
|
|
||||||
$self->session->db->write(
|
$self->session->db->write(
|
||||||
"ALTER TABLE userProfileData "
|
"ALTER TABLE userProfileData "
|
||||||
|
|
@ -684,7 +698,7 @@ sub set {
|
||||||
my $fieldClass = "WebGUI::Form::".ucfirst($properties->{fieldType});
|
my $fieldClass = "WebGUI::Form::".ucfirst($properties->{fieldType});
|
||||||
eval "use $fieldClass;";
|
eval "use $fieldClass;";
|
||||||
my $dbDataType
|
my $dbDataType
|
||||||
= $fieldClass->new($session, $self->_formProperties($properties))->get("dbDataType");
|
= $fieldClass->new($session, $self->formProperties($properties))->get("dbDataType");
|
||||||
|
|
||||||
my $sql
|
my $sql
|
||||||
= "ALTER TABLE userProfileData MODIFY COLUMN "
|
= "ALTER TABLE userProfileData MODIFY COLUMN "
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue