migrate Auth editUserForm and Operation User editUser to FormBuilder
This commit is contained in:
parent
b2c11102d8
commit
88c865c902
4 changed files with 203 additions and 94 deletions
|
|
@ -260,7 +260,7 @@ sub editUserForm {
|
|||
my $connectDN = $self->session->form->process('authLDAP_connectDN') || $userData->{connectDN};
|
||||
my $ldapConnection = $self->session->form->process('authLDAP_ldapConnection') || $userData->{ldapConnection};
|
||||
my $ldapLinks = $self->session->db->buildHashRef("select ldapLinkId,ldapUrl from ldapLink");
|
||||
my $f = WebGUI::HTMLForm->new($self->session);
|
||||
my $f = WebGUI::FormBuilder->new($self->session);
|
||||
my $jscript = "";
|
||||
my $i18n = WebGUI::International->new($self->session,'AuthLDAP');
|
||||
if(scalar(keys %{$ldapLinks}) > 0) {
|
||||
|
|
@ -277,27 +277,27 @@ sub editUserForm {
|
|||
$jsArray
|
||||
//-->
|
||||
</script>|;
|
||||
$f->selectBox(
|
||||
-name=>"authLDAP_ldapConnection",
|
||||
-label=>$i18n->get("ldapConnection"),
|
||||
-hoverHelp=>$i18n->get("ldapConnection description"),
|
||||
-options=>WebGUI::LDAPLink->getList($self->session,),
|
||||
-value=>[$ldapConnection],
|
||||
-extras=>q|onchange="this.form.authLDAP_ldapUrl.value=ldapValue[this.options[this.selectedIndex].value];"|
|
||||
$f->addField( "selectBox",
|
||||
name=>"authLDAP_ldapConnection",
|
||||
label=>$i18n->get("ldapConnection"),
|
||||
hoverHelp=>$i18n->get("ldapConnection description"),
|
||||
options=>WebGUI::LDAPLink->getList($self->session,),
|
||||
value=>[$ldapConnection],
|
||||
extras=>q|onchange="this.form.authLDAP_ldapUrl.value=ldapValue[this.options[this.selectedIndex].value];"|
|
||||
);
|
||||
}
|
||||
$f->url(
|
||||
-name => "authLDAP_ldapUrl",
|
||||
-label => $i18n->get(3),
|
||||
-value => $ldapUrl,
|
||||
$f->addField( "url",
|
||||
name => "authLDAP_ldapUrl",
|
||||
label => $i18n->get(3),
|
||||
value => $ldapUrl,
|
||||
);
|
||||
$f->text(
|
||||
-name => "authLDAP_connectDN",
|
||||
-label => $i18n->get('LDAP User DN'),
|
||||
-value => $connectDN,
|
||||
$f->addField( "text",
|
||||
name => "authLDAP_connectDN",
|
||||
label => $i18n->get('LDAP User DN'),
|
||||
value => $connectDN,
|
||||
);
|
||||
$self->session->style->setRawHeadTags($jscript);
|
||||
return $f->printRowsOnly;
|
||||
return $f;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ sub editUserFormSave {
|
|||
}
|
||||
}
|
||||
|
||||
$self->SUPER::editUserFormSave($properties);
|
||||
$self->update( $properties );
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -621,100 +621,122 @@ sub www_editUser {
|
|||
return $session->privilege->adminOnly() unless canAdd($session);
|
||||
my $error = shift;
|
||||
my $uid = shift || $session->form->process("uid");
|
||||
my $i18n = WebGUI::International->new($session, "WebGUI");
|
||||
my %tabs;
|
||||
tie %tabs, 'Tie::IxHash';
|
||||
%tabs = (
|
||||
"account"=> { label=>$i18n->get("account")},
|
||||
"profile"=> { label=>$i18n->get("profile")},
|
||||
"groups"=> { label=>$i18n->get('89')},
|
||||
);
|
||||
my $tabform = WebGUI::TabForm->new($session,\%tabs);
|
||||
$tabform->formHeader({extras=>'autocomplete="off"'});
|
||||
my $u = WebGUI::User->new($session,($uid eq 'new') ? '' : $uid); #Setting uid to '' when uid is 'new' so visitor defaults prefill field for new user
|
||||
my $username = ($u->isVisitor && $uid ne "1") ? '' : $u->username;
|
||||
$tabform->hidden({name=>"op",value=>"editUserSave"});
|
||||
$tabform->hidden({name=>"uid",value=>$uid});
|
||||
$tabform->getTab("account")->raw('<tr><td width="170"> </td><td> </td></tr>');
|
||||
$tabform->getTab("account")->readOnly(value=>$uid,label=>$i18n->get(378));
|
||||
$tabform->getTab("account")->readOnly(value=>$u->karma,label=>$i18n->get(537)) if ($session->setting->get("useKarma"));
|
||||
$tabform->getTab("account")->readOnly(value=>$session->datetime->epochToHuman($u->dateCreated,"%z"),label=>$i18n->get(453));
|
||||
$tabform->getTab("account")->readOnly(value=>$session->datetime->epochToHuman($u->lastUpdated,"%z"),label=>$i18n->get(454));
|
||||
$tabform->getTab("account")->text(
|
||||
-name=>"username",
|
||||
-label=>$i18n->get(50),
|
||||
-value=>$username
|
||||
-extras=>'autocomplete="off"',
|
||||
my $i18n = WebGUI::International->new($session, "WebGUI");
|
||||
my $f = WebGUI::FormBuilder->new( $session,
|
||||
action => $session->url->page,
|
||||
extras => 'autocomplete="off"',
|
||||
);
|
||||
my %status;
|
||||
tie %status, 'Tie::IxHash';
|
||||
%status = (
|
||||
Active =>$i18n->get(817),
|
||||
Deactivated =>$i18n->get(818),
|
||||
Selfdestructed =>$i18n->get(819)
|
||||
);
|
||||
$f->addField( 'csrfToken', name => 'csrfToken' );
|
||||
$f->addField( "hidden",
|
||||
name => 'op',
|
||||
value => 'editUserSave',
|
||||
);
|
||||
$f->addField( "hidden",
|
||||
name => "uid",
|
||||
value => $uid,
|
||||
);
|
||||
my $account = $f->addTab( name => "account", label => $i18n->get('account') );
|
||||
my $profile = $f->addTab( name => "profile", label => $i18n->get('profile') );
|
||||
my $groups = $f->addTab( name => "groups", label => $i18n->get('89') );
|
||||
|
||||
# Normal user fields
|
||||
$account->addField( "readOnly",
|
||||
name => "uid",
|
||||
value => $uid,
|
||||
label => $i18n->get(378),
|
||||
);
|
||||
$account->addField( "readOnly",
|
||||
name => "karma",
|
||||
value => $u->karma,
|
||||
label => $i18n->get(537)
|
||||
) if ($session->setting->get("useKarma"));
|
||||
$account->addField( "readOnly",
|
||||
name => "dateCreated",
|
||||
value=>$session->datetime->epochToHuman($u->dateCreated,"%z"),
|
||||
label=>$i18n->get(453)
|
||||
);
|
||||
$account->addField( "readOnly",
|
||||
name => "lastUpdated",
|
||||
value=>$session->datetime->epochToHuman($u->lastUpdated,"%z"),
|
||||
label=>$i18n->get(454)
|
||||
);
|
||||
$account->addField( "text",
|
||||
name=>"username",
|
||||
label=>$i18n->get(50),
|
||||
value=>$username,
|
||||
extras=>'autocomplete="off"',
|
||||
);
|
||||
|
||||
if ($u->userId eq $session->user->userId) {
|
||||
$tabform->getTab("account")->hidden(
|
||||
-name => "status",
|
||||
-value => $u->status
|
||||
$account->addField( "hidden",
|
||||
name => "status",
|
||||
value => $u->status
|
||||
);
|
||||
}
|
||||
else {
|
||||
$tabform->getTab("account")->selectBox(
|
||||
-name => "status",
|
||||
-options => \%status,
|
||||
-label => $i18n->get(816),
|
||||
-value => $u->status
|
||||
tie my %status, 'Tie::IxHash', (
|
||||
Active =>$i18n->get(817),
|
||||
Deactivated =>$i18n->get(818),
|
||||
Selfdestructed =>$i18n->get(819)
|
||||
);
|
||||
$account->addField( "selectBox",
|
||||
name => "status",
|
||||
options => \%status,
|
||||
label => $i18n->get(816),
|
||||
value => $u->status
|
||||
);
|
||||
}
|
||||
|
||||
# Auth configurations
|
||||
my $options;
|
||||
foreach (@{$session->config->get("authMethods")}) {
|
||||
$options->{$_} = $_;
|
||||
}
|
||||
$tabform->getTab("account")->selectBox(
|
||||
-name=>"authMethod",
|
||||
-options=>$options,
|
||||
-label=>$i18n->get(164),
|
||||
-value=>$u->authMethod,
|
||||
$account->addField( "selectBox",
|
||||
name=>"authMethod",
|
||||
options=>$options,
|
||||
label=>$i18n->get(164),
|
||||
value=>$u->authMethod,
|
||||
);
|
||||
foreach (@{$session->config->get("authMethods")}) {
|
||||
my $authInstance = WebGUI::Operation::Auth::getInstance($session,$_,$u->userId);
|
||||
foreach my $auth (@{$session->config->get("authMethods")}) {
|
||||
my $authInstance = WebGUI::Operation::Auth::getInstance($session,$auth,$u->userId);
|
||||
my $editUserForm = $authInstance->editUserForm;
|
||||
next unless $editUserForm;
|
||||
$tabform->getTab("account")->fieldSetStart($_);
|
||||
$tabform->getTab("account")->raw($editUserForm);
|
||||
$tabform->getTab("account")->fieldSetEnd;
|
||||
$account->addFieldset( $editUserForm, name => $auth, label => $auth );
|
||||
}
|
||||
|
||||
# Profile fields
|
||||
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {
|
||||
$tabform->getTab("profile")->fieldSetStart($category->getLabel);
|
||||
my $fieldset = $profile->addFieldset( name => $category->getLabel, label => $category->getLabel );
|
||||
foreach my $field (@{$category->getFields}) {
|
||||
next if $field->getId =~ /contentPositions/;
|
||||
my $label = $field->getLabel . ($field->isRequired ? "*" : '');
|
||||
if ($u->isVisitor) {
|
||||
$tabform->getTab("profile")->raw($field->formField({label=>$label},1,undef,undef,undef,undef,'useFormDefault'));
|
||||
$fieldset->addField($field->formField({label=>$label},1,undef,undef,undef,1,'useFormDefault'));
|
||||
}
|
||||
else {
|
||||
$tabform->getTab("profile")->raw($field->formField({label=>$label},1,$u));
|
||||
$fieldset->addField($field->formField({label=>$label},1,$u,undef,undef,1));
|
||||
}
|
||||
}
|
||||
$tabform->getTab("profile")->fieldSetEnd($category->getLabel);
|
||||
}
|
||||
|
||||
# Groups
|
||||
my @groupsToAdd = $session->form->group("groupsToAdd");
|
||||
my @exclude = $session->db->buildArray("select groupId from groupings where userId=?",[$u->userId]);
|
||||
@exclude = (@exclude,"1","2","7");
|
||||
push @exclude,"1","2","7"; # Special groups cannot be left/joined
|
||||
my $secondaryAdmin = $session->user->isInGroup('11');
|
||||
my @extraExclude = ();
|
||||
if ($secondaryAdmin && !$session->user->isAdmin) {
|
||||
@extraExclude = $session->db->buildArray('select groupId from groups where groupId not in (select groupId from groupings where userId=?)',[$session->user->userId]);
|
||||
push @exclude, $session->db->buildArray('select groupId from groups where groupId not in (select groupId from groupings where userId=?)',[$session->user->userId]);
|
||||
}
|
||||
push @extraExclude, @exclude;
|
||||
$tabform->getTab("groups")->group(
|
||||
-name=>"groupsToAdd",
|
||||
-label=>$i18n->get("groups to add"),
|
||||
-excludeGroups=>\@extraExclude,
|
||||
-size=>15,
|
||||
-multiple=>1,
|
||||
-value=>\@groupsToAdd
|
||||
$groups->addField( "group",
|
||||
name=>"groupsToAdd",
|
||||
label=>$i18n->get("groups to add"),
|
||||
excludeGroups=>\@exclude,
|
||||
size=>15,
|
||||
multiple=>1,
|
||||
value=>\@groupsToAdd
|
||||
);
|
||||
my @include;
|
||||
foreach my $group (@exclude) {
|
||||
|
|
@ -728,22 +750,16 @@ sub www_editUser {
|
|||
}
|
||||
push (@include, "0");
|
||||
my @groupsToDelete = $session->form->group("groupsToDelete");
|
||||
$tabform->getTab("groups")->selectList(
|
||||
-name=>"groupsToDelete",
|
||||
-options=>$session->db->buildHashRef("select groupId, groupName from groups
|
||||
$groups->addField( "selectList",
|
||||
name=>"groupsToDelete",
|
||||
options=>$session->db->buildHashRef("select groupId, groupName from groups
|
||||
where groupId in (".$session->db->quoteAndJoin(\@include).") and showInForms=1 order by groupName"),
|
||||
-label=>$i18n->get("groups to delete"),
|
||||
-multiple=>1,
|
||||
-size=>15,
|
||||
-value=>\@groupsToDelete
|
||||
label=>$i18n->get("groups to delete"),
|
||||
multiple=>1,
|
||||
size=>15,
|
||||
value=>\@groupsToDelete
|
||||
);
|
||||
my $submenu = _submenu(
|
||||
$session,
|
||||
{ workarea => $error.$tabform->print,
|
||||
title => 168,
|
||||
userId => $uid, }
|
||||
);
|
||||
return $submenu;;
|
||||
return '<h1>' . $i18n->get(168) . '</h1>' . $f->toHtml;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
93
t/Operation/User.t
Normal file
93
t/Operation/User.t
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# vim:syntax=perl
|
||||
#-------------------------------------------------------------------
|
||||
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
||||
#-------------------------------------------------------------------
|
||||
# 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
|
||||
#------------------------------------------------------------------
|
||||
|
||||
# Test the User operation
|
||||
#
|
||||
#
|
||||
|
||||
use FindBin;
|
||||
use strict;
|
||||
use lib "$FindBin::Bin/lib";
|
||||
use Test::More;
|
||||
use WebGUI::Test; # Must use this before any other WebGUI modules
|
||||
use WebGUI::Session;
|
||||
use WebGUI::Test::Mechanize;
|
||||
use WebGUI::Operation::User;
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Init
|
||||
my $session = WebGUI::Test->session;
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Tests
|
||||
|
||||
plan tests => 17; # Increment this number for each test you create
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Create a new user
|
||||
my $mech = WebGUI::Test::Mechanize->new( config => WebGUI::Test->file );
|
||||
$mech->get_ok( '/' );
|
||||
$mech->session->user({userId => 3});
|
||||
|
||||
$mech->get_ok( '?op=editUser;uid=new' );
|
||||
my %fields = (
|
||||
username => 'AndyDufresne',
|
||||
email => 'andy@shawshank.doj.gov',
|
||||
alias => 'Randall Stevens',
|
||||
status => 'Active',
|
||||
);
|
||||
$mech->submit_form_ok({
|
||||
fields => {
|
||||
%fields,
|
||||
'authWebGUI.identifier' => 'zihuatanejo',
|
||||
groupsToAdd => '12',
|
||||
},
|
||||
},
|
||||
"Add a new user",
|
||||
);
|
||||
|
||||
ok( my $user = WebGUI::User->newByUsername( $session, 'AndyDufresne' ), "user exists" );
|
||||
WebGUI::Test->addToCleanup( $user );
|
||||
is( $user->get('email'), $fields{email} );
|
||||
is( $user->get('alias'), $fields{alias} );
|
||||
is( $user->status, $fields{status} );
|
||||
ok( $user->isInGroup( 12 ) );
|
||||
my $auth = WebGUI::Auth::WebGUI->new( $session, $user );
|
||||
is( $auth->get('identifier'), $auth->hashPassword('zihuatanejo'), "password was set correctly" );
|
||||
|
||||
# Edit an existing user
|
||||
$mech->get_ok( '?op=editUser;uid=' . $user->getId );
|
||||
%fields = (
|
||||
username => "EllisRedding",
|
||||
email => 'red@shawshank.doj.gov',
|
||||
alias => 'Red',
|
||||
status => 'Active',
|
||||
);
|
||||
$mech->submit_form_ok({
|
||||
fields => {
|
||||
%fields,
|
||||
'authWebGUI.identifier' => 'rehabilitated',
|
||||
groupsToDelete => '12',
|
||||
},
|
||||
},
|
||||
"Edit an existing user",
|
||||
);
|
||||
|
||||
ok( my $user = WebGUI::User->newByUsername( $mech->session, 'EllisRedding' ), "user exists" );
|
||||
is( $user->get('email'), $fields{email} );
|
||||
is( $user->get('alias'), $fields{alias} );
|
||||
is( $user->status, $fields{status} );
|
||||
ok( not $user->isInGroup( 12 ) );
|
||||
$auth = WebGUI::Auth::WebGUI->new( $session, $user );
|
||||
is( $auth->get('identifier'), $auth->hashPassword('rehabilitated'), "password was set correctly" );
|
||||
|
||||
#vim:ft=perl
|
||||
Loading…
Add table
Add a link
Reference in a new issue