[LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm lonconfigsettings.pm
raeburn
raeburn at source.lon-capa.org
Wed Feb 12 15:37:43 EST 2014
raeburn Wed Feb 12 20:37:43 2014 EDT
Modified files:
/loncom/interface domainprefs.pm lonconfigsettings.pm
Log:
- Bug 6646
- Domain Configuration for self-creation of accounts moved to its own
separate panel (keep storage of settings in existing locations in
configuration.db , i.e., usercreation and usermodification.
- Additional option for self-created accounts which use an e-mail address
as username -- queue for approval by Domain Coordinator.
- Can specify which DC(s) should be notified if user account requests are
added to the queue.
- Can specify what information the user needs to provide in addition to
an e-mail address when requesting creation of an account.
-------------- next part --------------
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.223 loncom/interface/domainprefs.pm:1.224
--- loncom/interface/domainprefs.pm:1.223 Wed Jan 8 17:18:11 2014
+++ loncom/interface/domainprefs.pm Wed Feb 12 20:37:42 2014
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.223 2014/01/08 17:18:11 bisitz Exp $
+# $Id: domainprefs.pm,v 1.224 2014/02/12 20:37:42 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -216,7 +216,7 @@
'requestauthor'],$dom);
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
'autoupdate','autocreate','directorysrch','contacts',
- 'usercreation','usermodification','scantron',
+ 'usercreation','selfcreation','usermodification','scantron',
'requestcourses','requestauthor','coursecategories',
'serverstatuses','helpsettings',
'coursedefaults','usersessions');
@@ -295,7 +295,6 @@
header => [{col1 => 'Setting',
col2 => 'Value',}],
},
-
'usercreation' =>
{ text => 'User creation',
help => 'Domain_Configuration_User_Creation',
@@ -306,15 +305,23 @@
{col1 => 'Context',
col2 => 'Assignable authentication types'}],
},
+ 'selfcreation' =>
+ { text => 'Users self-creating accounts',
+ help => 'Domain_Configuration_Self_Creation',
+ header => [{col1 => 'Self-creation with institutional username',
+ col2 => 'Enabled?'},
+ {col1 => 'Institutional user type (login/SSO self-creation)',
+ col2 => 'Information user can enter'},
+ {col1 => 'Self-creation with e-mail as username',
+ col2 => 'Settings'}],
+ },
'usermodification' =>
{ text => 'User modification',
help => 'Domain_Configuration_User_Modification',
header => [{col1 => 'Target user has role',
col2 => 'User information updateable in author context'},
{col1 => 'Target user has role',
- col2 => 'User information updateable in course context'},
- {col1 => "Status of user",
- col2 => 'Information settable when self-creating account (if directory data blank)'}],
+ col2 => 'User information updateable in course context'}],
},
'scantron' =>
{ text => 'Bubblesheet format file',
@@ -420,7 +427,7 @@
if ($phase eq 'process') {
my $result = &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,
\%prefs,\%domconfig,$confname,\@roles);
- if ((ref($result) eq 'HASH') && (keys(%{$result}))) {
+ if ((ref($result) eq 'HASH') && (keys(%{$result}))) {
$r->rflush();
&devalidate_remote_domconfs($dom,$result);
}
@@ -538,6 +545,8 @@
$output = &modify_directorysrch($dom,%domconfig);
} elsif ($action eq 'usercreation') {
$output = &modify_usercreation($dom,%domconfig);
+ } elsif ($action eq 'selfcreation') {
+ $output = &modify_selfcreation($dom,%domconfig);
} elsif ($action eq 'usermodification') {
$output = &modify_usermodification($dom,%domconfig);
} elsif ($action eq 'contacts') {
@@ -608,6 +617,8 @@
$output .= &print_autoupdate('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'usercreation') {
$output .= &print_usercreation('top',$dom,$settings,\$rowtotal);
+ } elsif ($action eq 'selfcreation') {
+ $output .= &print_selfcreation('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'usermodification') {
$output .= &print_usermodification('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'coursecategories') {
@@ -669,8 +680,8 @@
<td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td> </tr>'.
&print_usercreation('bottom',$dom,$settings,\$rowtotal);
$rowtotal ++;
- } elsif ($action eq 'usermodification') {
- $output .= &print_usermodification('middle',$dom,$settings,\$rowtotal).'
+ } elsif ($action eq 'selfcreation') {
+ $output .= &print_selfcreation('middle',$dom,$settings,\$rowtotal).'
</table>
</td>
</tr>
@@ -679,9 +690,12 @@
<table class="LC_nested">
<tr class="LC_info_row">
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[2]->{'col1'}).'</td>
- <td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td></tr>'.
- &print_usermodification('bottom',$dom,$settings,\$rowtotal);
+ <td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td>
+ </tr>'.
+ &print_selfcreation('bottom',$dom,$settings,\$rowtotal);
$rowtotal ++;
+ } elsif ($action eq 'usermodification') {
+ $output .= &print_usermodification('middle',$dom,$settings,\$rowtotal);
} elsif ($action eq 'coursecategories') {
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);
} elsif ($action eq 'login') {
@@ -1992,23 +2006,26 @@
if (ref($settings) eq 'HASH') {
if (ref($settings->{'notify'}) eq 'HASH') {
if ($settings->{'notify'}{'approval'} ne '') {
- map {$currapp{$_}=1;} split(/,/,$settings->{'notify'}{'approval'});
+ map {$currapp{$_}=1;} split(/,/,$settings->{'notify'}{'approval'});
}
}
}
my $numinrow = 2;
- my $css_class = 'class="LC_odd_row"';
+ my $css_class;
+ $css_class = ($$rowtotal%2? ' class="LC_odd_row"':'');
my $text;
if ($action eq 'requestcourses') {
$text = &mt('Receive notification of course requests requiring approval');
+ } elsif ($action eq 'requestauthor') {
+ $text = &mt('Receive notification of Authoring Space requests requiring approval');
} else {
- $text = &mt('Receive notification of Authoring Space requests requiring approval')
+ $text = &mt('Receive notification of queued requests for self-created user accounts requiring approval');
}
- $datatable = '<tr '.$css_class.'>'.
+ $datatable = '<tr'.$css_class.'>'.
' <td>'.$text.'</td>'.
' <td class="LC_left_item">';
my ($numdc,$table,$rows) = &active_dc_picker($dom,$numinrow,'checkbox',
- 'reqapprovalnotify',%currapp);
+ $action.'notifyapproval',%currapp);
if ($numdc > 0) {
$datatable .= $table;
} else {
@@ -3651,42 +3668,22 @@
$rowcount ++;
}
}
- my ($emailrules,$emailruleorder) =
- &Apache::lonnet::inst_userrules($dom,'email');
- if (ref($emailrules) eq 'HASH') {
- if (keys(%{$emailrules}) > 0) {
- $datatable .= &user_formats_row('email',$settings,$emailrules,
- $emailruleorder,$numinrow,$rowcount);
- $$rowtotal ++;
- $rowcount ++;
- }
- }
if ($rowcount == 0) {
$datatable .= '<tr><td colspan="2">'.&mt('No format rules have been defined for usernames or IDs in this domain.').'</td></tr>';
$$rowtotal ++;
$rowcount ++;
}
} elsif ($position eq 'middle') {
- my @creators = ('author','course','requestcrs','selfcreate');
+ my @creators = ('author','course','requestcrs');
my ($rules,$ruleorder) =
&Apache::lonnet::inst_userrules($dom,'username');
my %lt = &usercreation_types();
my %checked;
- my @selfcreate;
if (ref($settings) eq 'HASH') {
if (ref($settings->{'cancreate'}) eq 'HASH') {
foreach my $item (@creators) {
$checked{$item} = $settings->{'cancreate'}{$item};
}
- if (ref($settings->{'cancreate'}{'selfcreate'}) eq 'ARRAY') {
- @selfcreate = @{$settings->{'cancreate'}{'selfcreate'}};
- } elsif ($settings->{'cancreate'}{'selfcreate'} ne '') {
- if ($settings->{'cancreate'}{'selfcreate'} eq 'any') {
- @selfcreate = ('email','login','sso');
- } elsif ($settings->{'cancreate'}{'selfcreate'} ne 'none') {
- @selfcreate = ($settings->{'cancreate'}{'selfcreate'});
- }
- }
} elsif (ref($settings->{'cancreate'}) eq 'ARRAY') {
foreach my $item (@creators) {
if (grep(/^\Q$item\E$/,@{$settings->{'cancreate'}})) {
@@ -3698,10 +3695,8 @@
my $rownum = 0;
foreach my $item (@creators) {
$rownum ++;
- if ($item ne 'selfcreate') {
- if ($checked{$item} eq '') {
- $checked{$item} = 'any';
- }
+ if ($checked{$item} eq '') {
+ $checked{$item} = 'any';
}
my $css_class;
if ($rownum%2) {
@@ -3712,30 +3707,18 @@
$datatable .= '<tr'.$css_class.'>'.
'<td><span class="LC_nobreak">'.$lt{$item}.
'</span></td><td align="right">';
- my @options;
- if ($item eq 'selfcreate') {
- push(@options,('email','login','sso'));
- } else {
- @options = ('any');
- if (ref($rules) eq 'HASH') {
- if (keys(%{$rules}) > 0) {
- push(@options,('official','unofficial'));
- }
+ my @options = ('any');
+ if (ref($rules) eq 'HASH') {
+ if (keys(%{$rules}) > 0) {
+ push(@options,('official','unofficial'));
}
- push(@options,'none');
}
+ push(@options,'none');
foreach my $option (@options) {
my $type = 'radio';
my $check = ' ';
- if ($item eq 'selfcreate') {
- $type = 'checkbox';
- if (grep(/^\Q$option\E$/, at selfcreate)) {
- $check = ' checked="checked" ';
- }
- } else {
- if ($checked{$item} eq $option) {
- $check = ' checked="checked" ';
- }
+ if ($checked{$item} eq $option) {
+ $check = ' checked="checked" ';
}
$datatable .= '<span class="LC_nobreak"><label>'.
'<input type="'.$type.'" name="can_createuser_'.
@@ -3744,22 +3727,6 @@
}
$datatable .= '</td></tr>';
}
- my ($othertitle,$usertypes,$types) =
- &Apache::loncommon::sorted_inst_types($dom);
- my $createsettings;
- if (ref($settings) eq 'HASH') {
- $createsettings = $settings->{cancreate};
- }
- if (ref($usertypes) eq 'HASH') {
- if (keys(%{$usertypes}) > 0) {
- $datatable .= &insttypes_row($createsettings,$types,$usertypes,
- $dom,$numinrow,$othertitle,
- 'statustocreate');
- $$rowtotal ++;
- $rownum ++;
- }
- }
- $datatable .= &captcha_choice('cancreate',$createsettings,$rownum);
} else {
my @contexts = ('author','course','domain');
my @authtypes = ('int','krb4','krb5','loc');
@@ -3811,13 +3778,131 @@
return $datatable;
}
+sub print_selfcreation {
+ my ($position,$dom,$settings,$rowtotal) = @_;
+ my (@selfcreate,$createsettings,$datatable);
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'cancreate'}) eq 'HASH') {
+ $createsettings = $settings->{'cancreate'};
+ if (ref($settings->{'cancreate'}{'selfcreate'}) eq 'ARRAY') {
+ @selfcreate = @{$settings->{'cancreate'}{'selfcreate'}};
+ } elsif ($settings->{'cancreate'}{'selfcreate'} ne '') {
+ if ($settings->{'cancreate'}{'selfcreate'} eq 'any') {
+ @selfcreate = ('email','login','sso');
+ } elsif ($settings->{'cancreate'}{'selfcreate'} ne 'none') {
+ @selfcreate = ($settings->{'cancreate'}{'selfcreate'});
+ }
+ }
+ }
+ }
+ my %radiohash;
+ my $rownum = 0;
+ my $numinrow = 4;
+ map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate;
+ if ($position eq 'top') {
+ my %choices = &Apache::lonlocal::texthash (
+ cancreate_login => 'Institutional Login',
+ cancreate_sso => 'Institutional Single Sign On',
+ );
+ my @toggles = sort(keys(%choices));
+ my %defaultchecked = (
+ 'cancreate_login' => 'off',
+ 'cancreate_sso' => 'off',
+ );
+ my $itemcount = 1;
+ my $onclick;
+ ($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked,
+ \%choices,$itemcount,$onclick);
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+
+ if (ref($usertypes) eq 'HASH') {
+ if (keys(%{$usertypes}) > 0) {
+ $datatable .= &insttypes_row($createsettings,$types,$usertypes,
+ $dom,$numinrow,$othertitle,
+ 'statustocreate',$rownum);
+ $rownum ++;
+ $$rowtotal ++;
+ }
+ }
+ } elsif ($position eq 'middle') {
+ my %domconf = &Apache::lonnet::get_dom('configuration',['usermodification'],$dom);
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ $usertypes->{'default'} = $othertitle;
+ if (ref($types) eq 'ARRAY') {
+ push(@{$types},'default');
+ $usertypes->{'default'} = $othertitle;
+ foreach my $status (@{$types}) {
+ $rownum ++;
+ $datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'},
+ $numinrow,$rownum,$usertypes);
+ $$rowtotal ++;
+ }
+ }
+ } else {
+ my $css_class = $rownum%2?' class="LC_odd_row"':'';
+ my %choices =
+ &Apache::lonlocal::texthash(
+ email => 'Approved automatically',
+ emailapproval => 'Queued for approval by DC',
+ off => 'Not enabled',
+ );
+ $datatable .= '<tr'.$css_class.'>'.
+ '<td>'.&mt('E-mail address as username').
+ '</td><td class="LC_left_item">'.
+ '<span class="LC_nobreak">';
+ foreach my $option ('email','emailapproval','off') {
+ my $checked;
+ if ($option eq 'email') {
+ if ($radiohash{'cancreate_email'}) {
+ $checked = 'checked="checked"';
+ }
+ } elsif ($option eq 'emailapproval') {
+ if ($radiohash{'cancreate_emailapproval'}) {
+ $checked = 'checked="checked"';
+ }
+ } else {
+ if ((!$radiohash{'cancreate_email'}) && (!$radiohash{'cancreate_emailapproval'})) {
+ $checked = 'checked="checked"';
+ }
+ }
+ $datatable .= '<label>'.
+ '<input type="radio" name="cancreate_email" '.
+ $checked.' value="'.$option.'" />'.
+ $choices{$option}.'</label> ';
+ }
+ $$rowtotal ++;
+ $rownum ++;
+ $datatable .= '</span></td></tr>'.
+ &print_requestmail($dom,'selfcreation',$createsettings,$rowtotal);
+ $rownum ++;
+ my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
+ $numinrow = 2;
+ $datatable .= &modifiable_userdata_row('cancreate','emailusername',$settings,
+ $numinrow,$rownum,undef,$infofields,$infotitles);
+ $$rowtotal ++;
+ $rownum ++;
+ my ($emailrules,$emailruleorder) =
+ &Apache::lonnet::inst_userrules($dom,'email');
+ if (ref($emailrules) eq 'HASH') {
+ if (keys(%{$emailrules}) > 0) {
+ $datatable .= &user_formats_row('email',$settings,$emailrules,
+ $emailruleorder,$numinrow,$rownum);
+ $rownum ++;
+ $$rowtotal ++;
+ }
+ }
+ $datatable .= &captcha_choice('cancreate',$createsettings,$rownum);
+ }
+ return $datatable;
+}
+
sub captcha_choice {
my ($context,$settings,$itemcount) = @_;
my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext);
my %lt = &captcha_phrases();
$keyentry = 'hidden';
if ($context eq 'cancreate') {
- $rowname = &mt('CAPTCHA validation (e-mail as username)');
+ $rowname = &mt('CAPTCHA validation');
} elsif ($context eq 'login') {
$rowname = &mt('"Contact helpdesk" CAPTCHA validation');
}
@@ -3931,18 +4016,26 @@
author => 'When adding a co-author',
course => 'When adding a user to a course',
requestcrs => 'When requesting a course',
- selfcreate => 'User creates own account',
any => 'Any',
official => 'Institutional only ',
unofficial => 'Non-institutional only',
- email => 'E-mail address',
- login => 'Institutional Login',
- sso => 'SSO',
none => 'None',
);
return %lt;
}
+sub selfcreation_types {
+ my %lt = &Apache::lonlocal::texthash (
+ selfcreate => 'User creates own account',
+ any => 'Any',
+ official => 'Institutional only ',
+ unofficial => 'Non-institutional only',
+ email => 'E-mail address',
+ login => 'Institutional Login',
+ sso => 'SSO',
+ );
+}
+
sub authtype_names {
my %lt = &Apache::lonlocal::texthash(
int => 'Internal',
@@ -3984,20 +4077,6 @@
$$rowtotal ++;
$rowcount ++;
}
- } elsif ($position eq 'bottom') {
- $context = 'selfcreate';
- my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
- $usertypes->{'default'} = $othertitle;
- if (ref($types) eq 'ARRAY') {
- push(@{$types},'default');
- $usertypes->{'default'} = $othertitle;
- foreach my $status (@{$types}) {
- $datatable .= &modifiable_userdata_row($context,$status,$settings,
- $numinrow,$rowcount,$usertypes);
- $$rowtotal ++;
- $rowcount ++;
- }
- }
}
return $datatable;
}
@@ -4778,9 +4857,13 @@
}
sub modifiable_userdata_row {
- my ($context,$role,$settings,$numinrow,$rowcount,$usertypes) = @_;
+ my ($context,$role,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_;
my $rolename;
- if ($context eq 'selfcreate') {
+ if ($context eq 'cancreate') {
+ if ($role eq 'emailusername') {
+ $rolename = &mt('Data user provides');
+ }
+ } elsif ($context eq 'selfcreate') {
if (ref($usertypes) eq 'HASH') {
$rolename = $usertypes->{$role};
} else {
@@ -4793,9 +4876,18 @@
$rolename = &Apache::lonnet::plaintext($role);
}
}
- my @fields = ('lastname','firstname','middlename','generation',
- 'permanentemail','id');
- my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
+ my (@fields,%fieldtitles);
+ if (ref($fieldsref) eq 'ARRAY') {
+ @fields = @{$fieldsref};
+ } else {
+ @fields = ('lastname','firstname','middlename','generation',
+ 'permanentemail','id');
+ }
+ if ((ref($titlesref) eq 'HASH')) {
+ %fieldtitles = %{$titlesref};
+ } else {
+ %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
+ }
my $output;
my $css_class = $rowcount%2?' class="LC_odd_row"':'';
$output = '<tr '.$css_class.'>'.
@@ -4851,7 +4943,7 @@
}
sub insttypes_row {
- my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context) = @_;
+ my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rownum) = @_;
my %lt = &Apache::lonlocal::texthash (
cansearch => 'Users allowed to search',
statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)',
@@ -4865,9 +4957,14 @@
if ($context eq 'statustocreate') {
$class = 'LC_right_item';
}
- my $output = '<tr class="LC_odd_row">'.
- '<td>'.$lt{$context}.$showdom.
- '</td><td class="'.$class.'" colspan="2"><table>';
+ my $css_class = ' class="LC_odd_row"';
+ if ($rownum ne '') {
+ $css_class = ($rownum%2? ' class="LC_odd_row"':'');
+ }
+ print STDERR "rownum ||$rownum|| an css_class ||".$css_class."||\n";
+ my $output = '<tr'.$css_class.'>'.
+ '<td>'.$lt{$context}.$showdom.
+ '</td><td class="'.$class.'" colspan="2"><table>';
my $rem;
if (ref($types) eq 'ARRAY') {
for (my $i=0; $i<@{$types}; $i++) {
@@ -6121,7 +6218,7 @@
}
}
if (($context eq 'requestcourses') || ($context eq 'requestauthor')) {
- my @approvalnotify = &Apache::loncommon::get_env_multiple('form.reqapprovalnotify');
+ my @approvalnotify = &Apache::loncommon::get_env_multiple('form.'.$context.'notifyapproval');
@approvalnotify = sort(@approvalnotify);
$confhash{'notify'}{'approval'} = join(',', at approvalnotify);
my @crstypes = ('official','unofficial','community','textbook');
@@ -7348,106 +7445,38 @@
sub modify_usercreation {
my ($dom,%domconfig) = @_;
- my ($resulttext,%curr_usercreation,%changes,%authallowed,%cancreate);
+ my ($resulttext,%curr_usercreation,%changes,%authallowed,%cancreate,%save_usercreate);
my $warningmsg;
if (ref($domconfig{'usercreation'}) eq 'HASH') {
foreach my $key (keys(%{$domconfig{'usercreation'}})) {
- $curr_usercreation{$key} = $domconfig{'usercreation'}{$key};
- }
- }
- my @username_rule = &Apache::loncommon::get_env_multiple('form.username_rule');
- my @id_rule = &Apache::loncommon::get_env_multiple('form.id_rule');
- my @email_rule = &Apache::loncommon::get_env_multiple('form.email_rule');
- my @contexts = ('author','course','requestcrs','selfcreate');
- foreach my $item(@contexts) {
- if ($item eq 'selfcreate') {
- @{$cancreate{$item}} = &Apache::loncommon::get_env_multiple('form.can_createuser_'.$item);
- my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
- if (!((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth'))) {
- if (ref($cancreate{$item}) eq 'ARRAY') {
- if (grep(/^login$/,@{$cancreate{$item}})) {
- $warningmsg = &mt('Although account creation has been set to be available for institutional logins, currently default authentication in this domain has not been set to support this.').' '.&mt('You need to set the default authentication type to Kerberos 4 or 5 (with a Kerberos domain specified), or to Local authentication, if the localauth module has been customized in your domain to authenticate institutional logins.');
+ if ($key eq 'cancreate') {
+ if (ref($domconfig{'usercreation'}{$key}) eq 'HASH') {
+ foreach my $item (keys(%{$domconfig{'usercreation'}{$key}})) {
+ if (($item eq 'selfcreate') || ($item eq 'statustocreate') ||
+ ($item eq 'captcha') || ($item eq 'recaptchakeys')) {
+ $save_usercreate{$key}{$item} = $domconfig{'usercreation'}{$key}{$item};
+ } else {
+ $curr_usercreation{$key}{$item} = $domconfig{'usercreation'}{$key}{$item};
+ }
}
}
+ } elsif ($key eq 'email_rule') {
+ $save_usercreate{$key} = $domconfig{'usercreation'}{$key};
+ } else {
+ $curr_usercreation{$key} = $domconfig{'usercreation'}{$key};
}
- } else {
- $cancreate{$item} = $env{'form.can_createuser_'.$item};
}
}
- my ($othertitle,$usertypes,$types) =
- &Apache::loncommon::sorted_inst_types($dom);
- if (ref($types) eq 'ARRAY') {
- if (@{$types} > 0) {
- @{$cancreate{'statustocreate'}} =
- &Apache::loncommon::get_env_multiple('form.statustocreate');
- } else {
- @{$cancreate{'statustocreate'}} = ();
- }
- push(@contexts,'statustocreate');
+ my @username_rule = &Apache::loncommon::get_env_multiple('form.username_rule');
+ my @id_rule = &Apache::loncommon::get_env_multiple('form.id_rule');
+ my @contexts = ('author','course','requestcrs');
+ foreach my $item(@contexts) {
+ $cancreate{$item} = $env{'form.can_createuser_'.$item};
}
- &process_captcha('cancreate',\%changes,\%cancreate,\%curr_usercreation);
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
foreach my $item (@contexts) {
- if (($item eq 'selfcreate') || ($item eq 'statustocreate')) {
- if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
- foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) {
- if (ref($cancreate{$item}) eq 'ARRAY') {
- if (!grep(/^$curr$/,@{$cancreate{$item}})) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
- }
- }
- }
- }
- } else {
- if ($curr_usercreation{'cancreate'}{$item} eq '') {
- if (@{$cancreate{$item}} > 0) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
- }
- }
- } else {
- if ($curr_usercreation{'cancreate'}{$item} eq 'any') {
- if (@{$cancreate{$item}} < 3) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
- }
- }
- } elsif ($curr_usercreation{'cancreate'}{$item} eq 'none') {
- if (@{$cancreate{$item}} > 0) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
- }
- }
- } elsif (!grep(/^$curr_usercreation{'cancreate'}{$item}$/,@{$cancreate{$item}})) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
- }
- }
- }
- }
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- foreach my $type (@{$cancreate{$item}}) {
- if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
- if (!grep(/^$type$/,@{$curr_usercreation{'cancreate'}{$item}})) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
- }
- }
- } elsif (($curr_usercreation{'cancreate'}{$item} ne 'any') &&
- ($curr_usercreation{'cancreate'}{$item} ne 'none')) {
- if ($curr_usercreation{'cancreate'}{$item} ne $type) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
- }
- }
- }
- }
- }
- } else {
- if ($curr_usercreation{'cancreate'}{$item} ne $cancreate{$item}) {
- push(@{$changes{'cancreate'}},$item);
- }
+ if ($curr_usercreation{'cancreate'}{$item} ne $cancreate{$item}) {
+ push(@{$changes{'cancreate'}},$item);
}
}
} elsif (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') {
@@ -7498,21 +7527,6 @@
push(@{$changes{'id_rule'}}, at id_rule);
}
- if (ref($curr_usercreation{'email_rule'}) eq 'ARRAY') {
- foreach my $type (@{$curr_usercreation{'email_rule'}}) {
- if (!grep(/^\Q$type\E$/, at email_rule)) {
- push(@{$changes{'email_rule'}},$type);
- }
- }
- foreach my $type (@email_rule) {
- if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'email_rule'}})) {
- push(@{$changes{'email_rule'}},$type);
- }
- }
- } else {
- push(@{$changes{'email_rule'}}, at email_rule);
- }
-
my @authen_contexts = ('author','course','domain');
my @authtypes = ('int','krb4','krb5','loc');
my %authhash;
@@ -7543,39 +7557,395 @@
}
}
+ $save_usercreate{'cancreate'}{'course'} = $cancreate{'course'};
+ $save_usercreate{'cancreate'}{'author'} = $cancreate{'author'};
+ $save_usercreate{'cancreate'}{'requestcrs'} = $cancreate{'requestcrs'};
+ $save_usercreate{'id_rule'} = \@id_rule;
+ $save_usercreate{'username_rule'} = \@username_rule,
+ $save_usercreate{'authtypes'} = \%authhash;
+
my %usercreation_hash = (
- usercreation => {
- cancreate => \%cancreate,
- username_rule => \@username_rule,
- id_rule => \@id_rule,
- email_rule => \@email_rule,
- authtypes => \%authhash,
- }
- );
+ usercreation => \%save_usercreate,
+ );
my $putresult = &Apache::lonnet::put_dom('configuration',\%usercreation_hash,
$dom);
+ if ($putresult eq 'ok') {
+ if (keys(%changes) > 0) {
+ $resulttext = &mt('Changes made:').'<ul>';
+ if (ref($changes{'cancreate'}) eq 'ARRAY') {
+ my %lt = &usercreation_types();
+ foreach my $type (@{$changes{'cancreate'}}) {
+ my $chgtext = $lt{$type}.', ';
+ if ($cancreate{$type} eq 'none') {
+ $chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.');
+ } elsif ($cancreate{$type} eq 'any') {
+ $chgtext .= &mt('creation of new users is permitted for both institutional and non-institutional usernames.');
+ } elsif ($cancreate{$type} eq 'official') {
+ $chgtext .= &mt('creation of new users is only permitted for institutional usernames.');
+ } elsif ($cancreate{$type} eq 'unofficial') {
+ $chgtext .= &mt('creation of new users is only permitted for non-institutional usernames.');
+ }
+ $resulttext .= '<li>'.$chgtext.'</li>';
+ }
+ }
+ if (ref($changes{'username_rule'}) eq 'ARRAY') {
+ my ($rules,$ruleorder) =
+ &Apache::lonnet::inst_userrules($dom,'username');
+ my $chgtext = '<ul>';
+ foreach my $type (@username_rule) {
+ if (ref($rules->{$type}) eq 'HASH') {
+ $chgtext .= '<li>'.$rules->{$type}{'name'}.'</li>';
+ }
+ }
+ $chgtext .= '</ul>';
+ if (@username_rule > 0) {
+ $resulttext .= '<li>'.&mt('Usernames with the following formats are restricted to verified users in the institutional directory: ').$chgtext.'</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('There are now no username formats restricted to verified users in the institutional directory.').'</li>';
+ }
+ }
+ if (ref($changes{'id_rule'}) eq 'ARRAY') {
+ my ($idrules,$idruleorder) =
+ &Apache::lonnet::inst_userrules($dom,'id');
+ my $chgtext = '<ul>';
+ foreach my $type (@id_rule) {
+ if (ref($idrules->{$type}) eq 'HASH') {
+ $chgtext .= '<li>'.$idrules->{$type}{'name'}.'</li>';
+ }
+ }
+ $chgtext .= '</ul>';
+ if (@id_rule > 0) {
+ $resulttext .= '<li>'.&mt('IDs with the following formats are restricted to verified users in the institutional directory: ').$chgtext.'</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('There are now no ID formats restricted to verified users in the institutional directory.').'</li>';
+ }
+ }
+ my %authname = &authtype_names();
+ my %context_title = &context_names();
+ if (ref($changes{'authtypes'}) eq 'ARRAY') {
+ my $chgtext = '<ul>';
+ foreach my $type (@{$changes{'authtypes'}}) {
+ my @allowed;
+ $chgtext .= '<li><span class="LC_cusr_emph">'.$context_title{$type}.'</span> - '.&mt('assignable authentication types: ');
+ foreach my $auth (@authtypes) {
+ if ($authhash{$type}{$auth}) {
+ push(@allowed,$authname{$auth});
+ }
+ }
+ if (@allowed > 0) {
+ $chgtext .= join(', ', at allowed).'</li>';
+ } else {
+ $chgtext .= &mt('none').'</li>';
+ }
+ }
+ $chgtext .= '</ul>';
+ $resulttext .= '<li>'.&mt('Authentication types available for assignment to new users').'<br />'.$chgtext;
+ $resulttext .= '</li>';
+ }
+ $resulttext .= '</ul>';
+ } else {
+ $resulttext = &mt('No changes made to user creation settings');
+ }
+ } else {
+ $resulttext = '<span class="LC_error">'.
+ &mt('An error occurred: [_1]',$putresult).'</span>';
+ }
+ if ($warningmsg ne '') {
+ $resulttext .= '<br /><span class="LC_warning">'.$warningmsg.'</span><br />';
+ }
+ return $resulttext;
+}
+
+sub modify_selfcreation {
+ my ($dom,%domconfig) = @_;
+ my ($resulttext,$warningmsg,%curr_usercreation,%curr_usermodify,%changes,%cancreate);
+ my (%save_usercreate,%save_usermodify);
+#
+# Retrieve current domain configuration for self-creation of usernames from $domconfig{'usercreation'}.
+#
+ if (ref($domconfig{'usercreation'}) eq 'HASH') {
+ foreach my $key (keys(%{$domconfig{'usercreation'}})) {
+ if ($key eq 'cancreate') {
+ if (ref($domconfig{'usercreation'}{$key}) eq 'HASH') {
+ foreach my $item (keys(%{$domconfig{'usercreation'}{$key}})) {
+ if (($item eq 'selfcreate') || ($item eq 'statustocreate') ||
+ ($item eq 'captcha') || ($item eq 'recaptchakeys') ||
+ ($item eq 'emailusername') || ($item eq 'notify')) {
+ $curr_usercreation{$key}{$item} = $domconfig{'usercreation'}{$key}{$item};
+ } else {
+ $save_usercreate{$key}{$item} = $domconfig{'usercreation'}{$key}{$item};
+ }
+ }
+ }
+ } elsif ($key eq 'email_rule') {
+ $curr_usercreation{$key} = $domconfig{'usercreation'}{$key};
+ } else {
+ $save_usercreate{$key} = $domconfig{'usercreation'}{$key};
+ }
+ }
+ }
+#
+# Retrieve current domain configuration for self-creation of usernames from $domconfig{'usermodification'}.
+#
+ if (ref($domconfig{'usermodification'}) eq 'HASH') {
+ foreach my $key (keys(%{$domconfig{'usermodification'}})) {
+ if ($key eq 'selfcreate') {
+ $curr_usermodify{$key} = $domconfig{'usermodification'}{$key};
+ } else {
+ $save_usermodify{$key} = $domconfig{'usermodification'}{$key};
+ }
+ }
+ }
+
+ my @contexts = ('selfcreate');
+ @{$cancreate{'selfcreate'}} = ();
+ %{$cancreate{'emailusername'}} = ();
+ @{$cancreate{'statustocreate'}} = ();
my %selfcreatetypes = (
sso => 'users authenticated by institutional single sign on',
login => 'users authenticated by institutional log-in',
- email => 'users who provide a valid e-mail address for use as the username',
+ email => 'users who provide a valid e-mail address for use as username (automatic creation)',
+ emailapproval => 'users who provide a valid e-mail address for use as username (queued for Domain Coordinator review)',
);
+#
+# Populate $cancreate{'selfcreate'} array reference with types of user, for which self-creation of user accounts
+# is permitted.
+#
+ foreach my $item ('login','sso','email') {
+ if ($item eq 'email') {
+ if ($env{'form.cancreate_email'} eq 'email') {
+ push(@{$cancreate{'selfcreate'}},'email');
+ } elsif ($env{'form.cancreate_email'} eq 'emailapproval') {
+ push(@{$cancreate{'selfcreate'}},'emailapproval');
+ }
+ } else {
+ if ($env{'form.cancreate_'.$item}) {
+ push(@{$cancreate{'selfcreate'}},$item);
+ }
+ }
+ }
+ my (@email_rule,%userinfo,%savecaptcha);
+ my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
+#
+# Populate $cancreate{'emailusername'} hash ref with information types (if new user will provide data
+# value set to one), if self-creation with e-mail address permitted.
+#
+ if (($env{'form.cancreate_email'} eq 'email') || ($env{'form.cancreate_email'} eq 'emailapproval')) {
+ push(@contexts,'emailusername');
+ map { $userinfo{$_} = 1; } &Apache::loncommon::get_env_multiple('form.canmodify_emailusername');
+ if (ref($infofields) eq 'ARRAY') {
+ foreach my $field (@{$infofields}) {
+ if ($userinfo{$field}) {
+ $cancreate{'emailusername'}{$field} = 1;
+ }
+ }
+ }
+
+#
+# Populate $cancreate{'notify'} hash ref with names of Domain Coordinators who are to be notified of
+# queued requests for self-creation of account using e-mail address as username
+#
+
+ my @approvalnotify = &Apache::loncommon::get_env_multiple('form.selfcreationnotifyapproval');
+ @approvalnotify = sort(@approvalnotify);
+ $cancreate{'notify'}{'approval'} = join(',', at approvalnotify);
+ if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
+ if (ref($curr_usercreation{'cancreate'}{'notify'}) eq 'HASH') {
+ if ($curr_usercreation{'cancreate'}{'notify'}{'approval'} ne $cancreate{'notify'}{'approval'}) {
+ push(@{$changes{'cancreate'}},'notify');
+ }
+ } else {
+ if ($cancreate{'notify'}{'approval'}) {
+ push(@{$changes{'cancreate'}},'notify');
+ }
+ }
+ } elsif ($cancreate{'notify'}{'approval'}) {
+ push(@{$changes{'cancreate'}},'notify');
+ }
+
+#
+# Retrieve rules (if any) governing types of e-mail address which may be used as a username
+#
+ @email_rule = &Apache::loncommon::get_env_multiple('form.email_rule');
+ &process_captcha('cancreate',\%changes,\%savecaptcha,$curr_usercreation{'cancreate'});
+ if (ref($curr_usercreation{'email_rule'}) eq 'ARRAY') {
+ if (@{$curr_usercreation{'email_rule'}} > 0) {
+ foreach my $type (@{$curr_usercreation{'email_rule'}}) {
+ if (!grep(/^\Q$type\E$/, at email_rule)) {
+ push(@{$changes{'email_rule'}},$type);
+ }
+ }
+ }
+ if (@email_rule > 0) {
+ foreach my $type (@email_rule) {
+ if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'email_rule'}})) {
+ push(@{$changes{'email_rule'}},$type);
+ }
+ }
+ }
+ } elsif (@email_rule > 0) {
+ push(@{$changes{'email_rule'}}, at email_rule);
+ }
+ }
+#
+# Check if domain default is set appropriately, if selef-creation of accounts is to be available for
+# institutional log-in.
+#
+ if (grep(/^login$/,@{$cancreate{'selfcreate'}})) {
+ my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
+ if (!((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) ||
+ ($domdefaults{'auth_def'} eq 'localauth'))) {
+ $warningmsg = &mt('Although account creation has been set to be available for institutional logins, currently default authentication in this domain has not been set to support this.').' '.
+ &mt('You need to set the default authentication type to Kerberos 4 or 5 (with a Kerberos domain specified), or to Local authentication, if the localauth module has been customized in your domain to authenticate institutional logins.');
+ }
+ }
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ my @fields = ('lastname','firstname','middlename','generation',
+ 'permanentemail','id');
+ my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
+#
+# Where usernames may created for institutional log-in and/or institutional single sign on:
+# (a) populate $cancreate{'statustocreate'} array reference with institutional status types who
+# may self-create accounts
+# (b) populate $save_usermodify{'selfcreate'} hash reference with status types, and information fields
+# which the user may supply, if institutional data is unavailable.
+#
+ if (($env{'form.cancreate_login'}) || ($env{'form.cancreate_sso'})) {
+ if (ref($types) eq 'ARRAY') {
+ if (@{$types} > 0) {
+ @{$cancreate{'statustocreate'}} = &Apache::loncommon::get_env_multiple('form.statustocreate');
+ push(@contexts,'statustocreate');
+ } else {
+ undef($cancreate{'statustocreate'});
+ }
+ push(@{$types},'default');
+ $usertypes->{'default'} = $othertitle;
+ foreach my $type (@{$types}) {
+ my @modifiable = &Apache::loncommon::get_env_multiple('form.canmodify_'.$type);
+ foreach my $field (@fields) {
+ if (grep(/^\Q$field\E$/, at modifiable)) {
+ $save_usermodify{'selfcreate'}{$type}{$field} = 1;
+ } else {
+ $save_usermodify{'selfcreate'}{$type}{$field} = 0;
+ }
+ }
+ }
+ if (ref($curr_usermodify{'selfcreate'}) eq 'HASH') {
+ foreach my $type (@{$types}) {
+ if (ref($curr_usermodify{'selfcreate'}{$type}) eq 'HASH') {
+ foreach my $field (@fields) {
+ if ($save_usermodify{'selfcreate'}{$type}{$field} ne
+ $curr_usermodify{'selfcreate'}{$type}{$field}) {
+ push(@{$changes{'selfcreate'}},$type);
+ last;
+ }
+ }
+ }
+ }
+ } else {
+ foreach my $type (@{$types}) {
+ push(@{$changes{'selfcreate'}},$type);
+ }
+ }
+ }
+ }
+ foreach my $item (@contexts) {
+ if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
+ foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) {
+ if (ref($cancreate{$item}) eq 'ARRAY') {
+ if (!grep(/^$curr$/,@{$cancreate{$item}})) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ }
+ if (ref($cancreate{$item}) eq 'ARRAY') {
+ foreach my $type (@{$cancreate{$item}}) {
+ if (!grep(/^$type$/,@{$curr_usercreation{'cancreate'}{$item}})) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ }
+ } elsif (ref($curr_usercreation{'cancreate'}{$item}) eq 'HASH') {
+ if (ref($cancreate{$item}) eq 'HASH') {
+ foreach my $curr (keys(%{$curr_usercreation{'cancreate'}{$item}})) {
+ if (!$cancreate{$item}{$curr}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ foreach my $field (keys(%{$cancreate{$item}})) {
+ if (!$curr_usercreation{'cancreate'}{$item}{$field}) {
+ print STDERR "field $field in cancreate but not in curr\n";
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ }
+ } elsif ($curr_usercreation{'cancreate'}{$item}) {
+ if (ref($cancreate{$item}) eq 'ARRAY') {
+ if (!grep(/^\Q$curr_usercreation{'cancreate'}{$item}\E$/,@{$cancreate{$item}})) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ } elsif (ref($cancreate{$item}) eq 'HASH') {
+ if (!$cancreate{$item}{$curr_usercreation{'cancreate'}{$item}}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ } elsif ($item eq 'emailusername') {
+ if (keys(%userinfo) > 0) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+#
+# Populate %save_usercreate hash with updates to self-creation configuration.
+#
+ $save_usercreate{'cancreate'}{'captcha'} = $savecaptcha{'captcha'};
+ $save_usercreate{'cancreate'}{'recaptchakeys'} = $savecaptcha{'recaptchakeys'};
+ $save_usercreate{'cancreate'}{'selfcreate'} = $cancreate{'selfcreate'};
+ if (ref($cancreate{'notify'}) eq 'HASH') {
+ $save_usercreate{'cancreate'}{'notify'} = $cancreate{'notify'};
+ }
+ if (ref($cancreate{'statustocreate'}) eq 'ARRAY') {
+ $save_usercreate{'cancreate'}{'statustocreate'} = $cancreate{'statustocreate'};
+ }
+ $save_usercreate{'cancreate'}{'emailusername'} = $cancreate{'emailusername'};
+ $save_usercreate{'emailrule'} = \@email_rule;
+
+ my %userconfig_hash = (
+ usercreation => \%save_usercreate,
+ usermodification => \%save_usermodify,
+ );
+ my $putresult = &Apache::lonnet::put_dom('configuration',\%userconfig_hash,
+ $dom);
+#
+# Accumulate details of changes to domain cofiguration for self-creation of usernames in $resulttext
+#
if ($putresult eq 'ok') {
if (keys(%changes) > 0) {
$resulttext = &mt('Changes made:').'<ul>';
if (ref($changes{'cancreate'}) eq 'ARRAY') {
- my %lt = &usercreation_types();
+ my %lt = &selfcreation_types();
foreach my $type (@{$changes{'cancreate'}}) {
my $chgtext;
- unless (($type eq 'statustocreate') || ($type eq 'captcha') || ($type eq 'recaptchakeys')) {
- $chgtext = $lt{$type}.', ';
- }
if ($type eq 'selfcreate') {
if (@{$cancreate{$type}} == 0) {
- $chgtext .= &mt('creation of a new user account is not permitted.');
+ $chgtext .= &mt('Self creation of a new user account is not permitted.');
} else {
- $chgtext .= &mt('creation of a new account is permitted for:').'<ul>';
+ $chgtext .= &mt('Self-creation of a new account is permitted for:').
+ '<ul>';
foreach my $case (@{$cancreate{$type}}) {
$chgtext .= '<li>'.$selfcreatetypes{$case}.'</li>';
}
@@ -7584,7 +7954,10 @@
if (grep(/^(login|sso)$/,@{$cancreate{$type}})) {
if (ref($cancreate{'statustocreate'}) eq 'ARRAY') {
if (@{$cancreate{'statustocreate'}} == 0) {
- $chgtext .= '<br /><span class="LC_warning">'.&mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts.").'</span>';
+ $chgtext .= '<br />'.
+ '<span class="LC_warning">'.
+ &mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts.").
+ '</span>';
}
}
}
@@ -7595,11 +7968,13 @@
(ref($cancreate{'statustocreate'}) eq 'ARRAY')) {
if (@{$cancreate{'selfcreate'}} > 0) {
if (@{$cancreate{'statustocreate'}} == 0) {
-
$chgtext .= &mt("Institutional affiliations permitted to create accounts set to 'None'.");
if (!grep(/^email$/,@{$cancreate{'selfcreate'}})) {
- $chgtext .= '<br /><span class="LC_warning">'.&mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts.").'</span>';
- }
+ $chgtext .= '<br />'.
+ '<span class="LC_warning">'.
+ &mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts.").
+ '</span>';
+ }
} elsif (ref($usertypes) eq 'HASH') {
if (grep(/^(login|sso)$/,@{$cancreate{'selfcreate'}})) {
$chgtext .= &mt('Creation of a new account for an institutional user is restricted to the following institutional affiliation(s):');
@@ -7616,7 +7991,9 @@
}
$chgtext .= '</ul>';
if (!grep(/^(login|sso)$/,@{$cancreate{'selfcreate'}})) {
- $chgtext .= '<br /><span class="LC_warning">'.&mt('However, users authenticated by institutional login/single sign on are not currently permitted to create accounts.').'</span>';
+ $chgtext .= '<br /><span class="LC_warning">'.
+ &mt('However, users authenticated by institutional login/single sign on are not currently permitted to create accounts.').
+ '</span>';
}
}
} else {
@@ -7628,21 +8005,21 @@
}
}
} elsif ($type eq 'captcha') {
- if ($cancreate{$type} eq 'notused') {
+ if ($savecaptcha{$type} eq 'notused') {
$chgtext .= &mt('No CAPTCHA validation in use for self-creation screen.');
} else {
my %captchas = &captcha_phrases();
- if ($captchas{$cancreate{$type}}) {
- $chgtext .= &mt("Validation for self-creation screen set to $captchas{$cancreate{$type}}.");
+ if ($captchas{$savecaptcha{$type}}) {
+ $chgtext .= &mt("Validation for self-creation screen set to $captchas{$savecaptcha{$type}}.");
} else {
$chgtext .= &mt('Validation for self-creation screen set to unknown type.');
}
}
} elsif ($type eq 'recaptchakeys') {
my ($privkey,$pubkey);
- if (ref($cancreate{$type}) eq 'HASH') {
- $pubkey = $cancreate{$type}{'public'};
- $privkey = $cancreate{$type}{'private'};
+ if (ref($savecaptcha{$type}) eq 'HASH') {
+ $pubkey = $savecaptcha{$type}{'public'};
+ $privkey = $savecaptcha{$type}{'private'};
}
$chgtext .= &mt('ReCAPTCHA keys changes').'<ul>';
if (!$pubkey) {
@@ -7656,51 +8033,35 @@
$chgtext .= '<li>'.&mt('Private key set to [_1]',$pubkey).'</li>';
}
$chgtext .= '</ul>';
- } else {
- if ($cancreate{$type} eq 'none') {
- $chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.');
- } elsif ($cancreate{$type} eq 'any') {
- $chgtext .= &mt('creation of new users is permitted for both institutional and non-institutional usernames.');
- } elsif ($cancreate{$type} eq 'official') {
- $chgtext .= &mt('creation of new users is only permitted for institutional usernames.');
- } elsif ($cancreate{$type} eq 'unofficial') {
- $chgtext .= &mt('creation of new users is only permitted for non-institutional usernames.');
+ } elsif ($type eq 'emailusername') {
+ if (ref($cancreate{'emailusername'}) eq 'HASH') {
+ if (keys(%{$cancreate{'emailusername'}}) > 0) {
+ $chgtext .= &mt('When self-creating account with e-mail as username, user will provide the following information:').
+ '<ul>';
+ foreach my $field (@{$infofields}) {
+ if ($cancreate{'emailusername'}{$field}) {
+ $chgtext .= '<li>'.$infotitles->{$field}.'</li>';
+ }
+ }
+ $chgtext .= '</ul>';
+ } else {
+ $chgtext .= &mt('When self creating account with e-mail as username, user will not provide any information besides e-mail address');
+ }
+ }
+ } elsif ($type eq 'notify') {
+ $chgtext = &mt('No Domain Coordinators will receive notification of username requests requiring approval.');
+ if (ref($changes{'cancreate'}) eq 'ARRAY') {
+ if ((grep(/^notify$/,@{$changes{'cancreate'}})) && (ref($cancreate{'notify'}) eq 'HASH')) {
+ if ($cancreate{'notify'}{'approval'}) {
+ $chgtext = &mt('Notification of username requests requiring approval will be sent to: ').$cancreate{'notify'}{'approval'};
+ }
+ }
}
}
- $resulttext .= '<li>'.$chgtext.'</li>';
- }
- }
- if (ref($changes{'username_rule'}) eq 'ARRAY') {
- my ($rules,$ruleorder) =
- &Apache::lonnet::inst_userrules($dom,'username');
- my $chgtext = '<ul>';
- foreach my $type (@username_rule) {
- if (ref($rules->{$type}) eq 'HASH') {
- $chgtext .= '<li>'.$rules->{$type}{'name'}.'</li>';
- }
- }
- $chgtext .= '</ul>';
- if (@username_rule > 0) {
- $resulttext .= '<li>'.&mt('Usernames with the following formats are restricted to verified users in the institutional directory: ').$chgtext.'</li>';
- } else {
- $resulttext .= '<li>'.&mt('There are now no username formats restricted to verified users in the institutional directory.').'</li>';
- }
- }
- if (ref($changes{'id_rule'}) eq 'ARRAY') {
- my ($idrules,$idruleorder) =
- &Apache::lonnet::inst_userrules($dom,'id');
- my $chgtext = '<ul>';
- foreach my $type (@id_rule) {
- if (ref($idrules->{$type}) eq 'HASH') {
- $chgtext .= '<li>'.$idrules->{$type}{'name'}.'</li>';
+ if ($chgtext) {
+ $resulttext .= '<li>'.$chgtext.'</li>';
}
}
- $chgtext .= '</ul>';
- if (@id_rule > 0) {
- $resulttext .= '<li>'.&mt('IDs with the following formats are restricted to verified users in the institutional directory: ').$chgtext.'</li>';
- } else {
- $resulttext .= '<li>'.&mt('There are now no ID formats restricted to verified users in the institutional directory.').'</li>';
- }
}
if (ref($changes{'email_rule'}) eq 'ARRAY') {
my ($emailrules,$emailruleorder) =
@@ -7713,37 +8074,48 @@
}
$chgtext .= '</ul>';
if (@email_rule > 0) {
- $resulttext .= '<li>'.&mt('Accounts may not be created by users self-enrolling with e-mail addresses of the following types: ').$chgtext.'</li>';
+ $resulttext .= '<li>'.
+ &mt('Accounts may not be created by users self-enrolling with e-mail addresses of the following types: ').
+ $chgtext.
+ '</li>';
} else {
- $resulttext .= '<li>'.&mt('There are now no restrictions on e-mail addresses which may be used as a username when self-enrolling.').'</li>';
+ $resulttext .= '<li>'.
+ &mt('There are now no restrictions on e-mail addresses which may be used as a username when self-enrolling.').
+ '</li>';
}
}
-
- my %authname = &authtype_names();
- my %context_title = &context_names();
- if (ref($changes{'authtypes'}) eq 'ARRAY') {
- my $chgtext = '<ul>';
- foreach my $type (@{$changes{'authtypes'}}) {
- my @allowed;
- $chgtext .= '<li><span class="LC_cusr_emph">'.$context_title{$type}.'</span> - '.&mt('assignable authentication types: ');
- foreach my $auth (@authtypes) {
- if ($authhash{$type}{$auth}) {
- push(@allowed,$authname{$auth});
+ if (ref($changes{'selfcreate'}) eq 'ARRAY') {
+ $resulttext .= '<li>'.&mt('When self-creating institutional account:').'<ul>';
+ my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
+ foreach my $type (@{$changes{'selfcreate'}}) {
+ my $typename = $type;
+ if (ref($usertypes) eq 'HASH') {
+ if ($usertypes->{$type} ne '') {
+ $typename = $usertypes->{$type};
}
}
- if (@allowed > 0) {
- $chgtext .= join(', ', at allowed).'</li>';
+ my @modifiable;
+ $resulttext .= '<li>'.
+ &mt('Self-creation of account by users with status: [_1]',
+ '<span class="LC_cusr_emph">'.$typename.'</span>').
+ ' - '.&mt('modifiable fields (if institutional data blank): ');
+ foreach my $field (@fields) {
+ if ($save_usermodify{'selfcreate'}{$type}{$field}) {
+ push(@modifiable,'<b>'.$fieldtitles{$field}.'</b>');
+ }
+ }
+ if (@modifiable > 0) {
+ $resulttext .= join(', ', at modifiable);
} else {
- $chgtext .= &mt('none').'</li>';
+ $resulttext .= &mt('none');
}
+ $resulttext .= '</li>';
}
- $chgtext .= '</ul>';
- $resulttext .= '<li>'.&mt('Authentication types available for assignment to new users').'<br />'.$chgtext;
- $resulttext .= '</li>';
+ $resulttext .= '</ul></li>';
}
$resulttext .= '</ul>';
} else {
- $resulttext = &mt('No changes made to user creation settings');
+ $resulttext = &mt('No changes made to self-creation settings');
}
} else {
$resulttext = '<span class="LC_error">'.
@@ -7810,17 +8182,20 @@
sub modify_usermodification {
my ($dom,%domconfig) = @_;
- my ($resulttext,%curr_usermodification,%changes);
+ my ($resulttext,%curr_usermodification,%changes,%modifyhash);
if (ref($domconfig{'usermodification'}) eq 'HASH') {
foreach my $key (keys(%{$domconfig{'usermodification'}})) {
- $curr_usermodification{$key} = $domconfig{'usermodification'}{$key};
+ if ($key eq 'selfcreate') {
+ $modifyhash{$key} = $domconfig{'usermodification'}{$key};
+ } else {
+ $curr_usermodification{$key} = $domconfig{'usermodification'}{$key};
+ }
}
}
- my @contexts = ('author','course','selfcreate');
+ my @contexts = ('author','course');
my %context_title = (
author => 'In author context',
course => 'In course context',
- selfcreate => 'When self creating account',
);
my @fields = ('lastname','firstname','middlename','generation',
'permanentemail','id');
@@ -7828,14 +8203,7 @@
author => ['ca','aa'],
course => ['st','ep','ta','in','cr'],
);
- my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
- if (ref($types) eq 'ARRAY') {
- push(@{$types},'default');
- $usertypes->{'default'} = $othertitle;
- }
- $roles{'selfcreate'} = $types;
my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
- my %modifyhash;
foreach my $context (@contexts) {
foreach my $role (@{$roles{$context}}) {
my @modifiable = &Apache::loncommon::get_env_multiple('form.canmodify_'.$role);
@@ -7867,6 +8235,7 @@
}
}
}
+# FIXME need to ensure selfcreate stuff is preserved
my %usermodification_hash = (
usermodification => \%modifyhash,
);
@@ -7881,26 +8250,13 @@
if (ref($changes{$context}) eq 'ARRAY') {
foreach my $role (@{$changes{$context}}) {
my $rolename;
- if ($context eq 'selfcreate') {
- $rolename = $role;
- if (ref($usertypes) eq 'HASH') {
- if ($usertypes->{$role} ne '') {
- $rolename = $usertypes->{$role};
- }
- }
+ if ($role eq 'cr') {
+ $rolename = &mt('Custom');
} else {
- if ($role eq 'cr') {
- $rolename = &mt('Custom');
- } else {
- $rolename = &Apache::lonnet::plaintext($role);
- }
+ $rolename = &Apache::lonnet::plaintext($role);
}
my @modifiable;
- if ($context eq 'selfcreate') {
- $resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Self-creation of account by users with status: [_1]',$rolename).'</span> - '.&mt('modifiable fields (if institutional data blank): ');
- } else {
- $resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Target user with [_1] role',$rolename).'</span> - '.&mt('modifiable fields: ');
- }
+ $resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Target user with [_1] role',$rolename).'</span> - '.&mt('modifiable fields: ');
foreach my $field (@fields) {
if ($modifyhash{$context}{$role}{$field}) {
push(@modifiable,$fieldtitles{$field});
Index: loncom/interface/lonconfigsettings.pm
diff -u loncom/interface/lonconfigsettings.pm:1.27 loncom/interface/lonconfigsettings.pm:1.28
--- loncom/interface/lonconfigsettings.pm:1.27 Sun Oct 6 21:25:59 2013
+++ loncom/interface/lonconfigsettings.pm Wed Feb 12 20:37:42 2014
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: lonconfigsettings.pm,v 1.27 2013/10/06 21:25:59 raeburn Exp $
+# $Id: lonconfigsettings.pm,v 1.28 2014/02/12 20:37:42 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -265,16 +265,19 @@
if (grep(/^\Q$item\E$/, at actions)) {
push(@items,$item);
if ($context eq 'domain') {
+ my $settings = $values->{$item};
if ($item eq 'usersessions') {
$r->print('<script type="text/javascript">'."\n".
'// <![CDATA['."\n".
&Apache::loncommon::check_uncheck_jscript()."\n".
'// ]]>'."\n".
'</script>'."\n");
+ } elsif ($item eq 'selfcreation') {
+ $settings = $values->{'usercreation'};
}
($output{$item},$rowtotal{$item}) =
&Apache::domainprefs::print_config_box($r,$dom,$confname,
- $phase,$item,$prefs->{$item},$values->{$item});
+ $phase,$item,$prefs->{$item},$settings);
} else {
($output{$item},$rowtotal{$item}) =
&Apache::courseprefs::print_config_box($r,$dom,$phase,
More information about the LON-CAPA-cvs
mailing list