--- loncom/interface/lonuserutils.pm 2024/01/05 04:09:47 1.184.4.10.2.7
+++ loncom/interface/lonuserutils.pm 2019/05/06 19:28:17 1.199
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA user accounts
#
-# $Id: lonuserutils.pm,v 1.184.4.10.2.7 2024/01/05 04:09:47 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.199 2019/05/06 19:28:17 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -103,7 +103,7 @@ sub modifystudent {
sub modifyuserrole {
my ($context,$setting,$changeauth,$cid,$udom,$uname,$uid,$umode,$upass,
$first,$middle,$last,$gene,$sec,$forceid,$desiredhome,$email,$role,
- $end,$start,$checkid,$inststatus,$emptyok) = @_;
+ $end,$start,$checkid,$inststatus) = @_;
my ($scope,$userresult,$authresult,$roleresult,$idresult);
if ($setting eq 'course' || $context eq 'course') {
$scope = '/'.$cid;
@@ -134,25 +134,6 @@ sub modifyuserrole {
generation => $gene,
id => $uid,
);
-
- # When "Update ID in user's course(s)" and "Force change of existing ID"
- # checkboxes both checked, prevent replacement of name information
- # in classlist.db file(s) for the user's course(s) with blank(s),
- # in the case where the uploaded csv file was without column(s) for
- # the particular field. Fields are: First Name, Middle Names/Initials,
- # Last Name (or the composite: Last Name, First Names), and Generation.
-
- my %emptyallowed;
- if ((ref($emptyok) eq 'HASH') && (keys(%{$emptyok}) > 0)) {
- %emptyallowed = %{$emptyok};
- }
- foreach my $field (keys(%userupdate)) {
- if ($userupdate{$field} eq '') {
- unless ($emptyallowed{$field}) {
- delete($userupdate{$field});
- }
- }
- }
$idresult = &propagate_id_change($uname,$udom,\%userupdate);
}
}
@@ -529,7 +510,7 @@ END
";
} elsif ($mode eq 'modifycourse') {
$auth_checks .= "
- if ((current.argfield !== null) && (current.argfield !== undefined) && (current.argfield !== '') && (vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '')) {
+ if (vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '') {
";
}
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) {
@@ -551,7 +532,7 @@ END
END
} else {
my ($numrules,$intargjs) =
- &Apache::loncommon::passwd_validation_js('vf.elements[current.argfield].value',$domain);
+ &passwd_validation_js('vf.elements[current.argfield].value',$domain);
$auth_checks .= (< 0)) {
+ my $alertmsg = &mt('Initial password did not satisfy requirement(s):').'\n\n';
+ if ($min) {
+ $alert{'min'} = &mt('minimum [quant,_1,character]',$min).'\n';
+ }
+ if ($max) {
+ $alert{'max'} = &mt('maximum [quant,_1,character]',$max).'\n';
+ }
+ my (@charalerts,@charrules);
+ if (@chars) {
+ if (grep(/^uc$/,@chars)) {
+ push(@charalerts,&mt('contain at least one upper case letter'));
+ push(@charrules,'uc');
+ }
+ if (grep(/^lc$/,@chars)) {
+ push(@charalerts,&mt('contain at least one lower case letter'));
+ push(@charrules,'lc');
+ }
+ if (grep(/^num$/,@chars)) {
+ push(@charalerts,&mt('contain at least one number'));
+ push(@charrules,'num');
+ }
+ if (grep(/^spec$/,@chars)) {
+ push(@charalerts,&mt('contain at least one non-alphanumeric'));
+ push(@charrules,'spec');
+ }
+ }
+ $intargjs = qq| var rulesmsg = '';\n|.
+ qq| var currpwval = $currpasswdval;\n|;
+ if ($min) {
+ $intargjs .= qq|
+ if (currpwval.length < $min) {
+ rulesmsg += ' - $alert{min}';
+ }
+|;
+ }
+ if ($max) {
+ $intargjs .= qq|
+ if (currpwval.length > $max) {
+ rulesmsg += ' - $alert{max}';
+ }
+|;
+ }
+ if (@chars > 0) {
+ my $charrulestr = '"'.join('","',@charrules).'"';
+ my $charalertstr = '"'.join('","',@charalerts).'"';
+ $intargjs .= qq| var brokerules = new Array();\n|.
+ qq| var charrules = new Array($charrulestr);\n|.
+ qq| var charalerts = new Array($charalertstr);\n|;
+ my %rules;
+ map { $rules{$_} = 1; } @chars;
+ if ($rules{'uc'}) {
+ $intargjs .= qq|
+ var ucRegExp = /[A-Z]/;
+ if (!ucRegExp.test(currpwval)) {
+ brokerules.push('uc');
+ }
+|;
+ }
+ if ($rules{'lc'}) {
+ $intargjs .= qq|
+ var lcRegExp = /[a-z]/;
+ if (!lcRegExp.test(currpwval)) {
+ brokerules.push('lc');
+ }
+|;
+ }
+ if ($rules{'num'}) {
+ $intargjs .= qq|
+ var numRegExp = /[0-9]/;
+ if (!numRegExp.test(currpwval)) {
+ brokerules.push('num');
+ }
+|;
+ }
+ if ($rules{'spec'}) {
+ $intargjs .= q|
+ var specRegExp = /[!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{\|}~]/;
+ if (!specRegExp.test(currpwval)) {
+ brokerules.push('spec');
+ }
+|;
+ }
+ $intargjs .= qq|
+ if (brokerules.length > 0) {
+ for (var i=0; i\n";
}
- $Str .= &set_login($defdom,$krbform,$intform,$locform);
+ $Str .= &set_login($defdom,$krbform,$intform,$locform,$ltiform);
my ($home_server_pick,$numlib) =
&Apache::loncommon::home_server_form_item($defdom,'lcserver',
@@ -973,8 +1083,14 @@ sub print_upload_manager_footer {
&Apache::lonhtmlcommon::row_closure();
}
+ my ($trusted,$untrusted);
+ if ($context eq 'course') {
+ ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('enroll',$defdom);
+ } elsif ($context eq 'author') {
+ ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('othcoau',$defdom);
+ }
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))
- .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1)
+ .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1,undef,$trusted,$untrusted)
.&Apache::lonhtmlcommon::row_closure();
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
@@ -1607,24 +1723,6 @@ sub print_userlist {
if (! exists($env{'form.sortby'})) {
$env{'form.sortby'} = 'username';
}
- my ($showstart,$showend);
- if (($env{'form.Status'} eq '') && ($env{'form.phase'} eq '') &&
- ($env{'form.showrole'} eq '') && ($context eq 'course') &&
- ($env{'request.course.id'} ne '') &&
- ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'} ne '')) {
- my $now = time;
- my $startaccess = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_start_date'};
- my $endaccess = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_end_date'};
- if (($startaccess) && ($startaccess > $now)) {
- $env{'form.Status'} = 'Future';
- $showstart = 1;
- }
- if (($endaccess ne '') && ($endaccess != 0) && ($endaccess < $now)) {
- $env{'form.Status'} = 'Expired';
- undef($showstart);
- $showend = 1;
- }
- }
if ($env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) {
$env{'form.Status'} = 'Active';
}
@@ -1692,7 +1790,7 @@ sub print_userlist {
$r->print(§ion_group_filter($cnum,$cdom));
}
$r->print(''.
- &column_checkboxes($context,$mode,$formname,$showcredits,$showstart,$showend).
+ &column_checkboxes($context,$mode,$formname,$showcredits).
'
');
if ($env{'form.phase'} eq '') {
$r->print('
'.
@@ -2081,7 +2179,7 @@ sub get_cols_array {
}
sub column_checkboxes {
- my ($context,$mode,$formname,$showcredits,$showstart,$showend) = @_;
+ my ($context,$mode,$formname,$showcredits) = @_;
my @cols = &get_cols_array($context,$mode,$showcredits);
my @showncols = &Apache::loncommon::get_env_multiple('form.showcol');
my (%disabledchk,%unchecked);
@@ -2094,21 +2192,11 @@ sub column_checkboxes {
if ($showcredits) {
$unchecked{'credits'} = 1;
}
- my %curr_groups = &Apache::longroup::coursegroups();
- unless (keys(%curr_groups)) {
- $unchecked{'groups'} = 1;
- }
- } elsif ($context eq 'domain') {
+ } elsif ($context eq 'domain') {
$unchecked{'extent'} = 1;
}
- if ($showstart) {
- $unchecked{'lastlogin'} = 1;
- } else {
- $unchecked{'start'} = 1;
- }
- unless ($showend) {
- $unchecked{'end'} = 1;
- }
+ $unchecked{'start'} = 1;
+ $unchecked{'end'} = 1;
} else {
if ($env{'form.Status'} ne 'Any') {
$disabledchk{'status'} = 1;
@@ -2345,6 +2433,7 @@ sub build_user_record {
sub courses_selector {
my ($cdom,$formname) = @_;
+ my %coursecodes = ();
my %codes = ();
my @codetitles = ();
my %cat_titles = ();
@@ -2357,15 +2446,14 @@ sub courses_selector {
my $jscript = '';
my $totcodes = 0;
- my $instcats = &Apache::lonnet::get_dom_instcats($cdom);
- if (ref($instcats) eq 'HASH') {
- if ((ref($instcats->{'codetitles'}) eq 'ARRAY') && (ref($instcats->{'codes'}) eq 'HASH') &&
- (ref($instcats->{'cat_titles'}) eq 'HASH') && (ref($instcats->{'cat_order'}) eq 'HASH')) {
- %codes = %{$instcats->{'codes'}};
- @codetitles = @{$instcats->{'codetitles'}};
- %cat_titles = %{$instcats->{'cat_titles'}};
- %cat_order = %{$instcats->{'cat_order'}};
- $totcodes = scalar(keys(%codes));
+ $totcodes =
+ &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,
+ $cdom,$totcodes);
+ if ($totcodes > 0) {
+ $format_reply =
+ &Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes,
+ \%codes,\@codetitles,\%cat_titles,\%cat_order);
+ if ($format_reply eq 'ok') {
my $numtypes = @codetitles;
&Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);
my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles);
@@ -3579,8 +3667,6 @@ END
setSections(formname,'$crstype');
if (seccheck == 'ok') {
opener.document.$callingform.newsecs.value = formname.sections.value;
- } else {
- return;
}
END
} else {
@@ -4206,42 +4292,19 @@ sub upfile_drop_add {
$fieldstype{$field.'_choice'} = 'scalar';
}
&Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype);
- my ($cid,$crstype,$setting,$crsdom,$crsnum,$oldcrsuserdoms,%emptyok);
+ my ($cid,$crstype,$setting,$crsdom);
if ($context eq 'domain') {
$setting = $env{'form.roleaction'};
- if (exists($fields{'names'})) {
- map { $emptyok{$_} = 1; } ('lastname','firstname','middlename');
- } else {
- if (exists($fields{'lname'})) {
- $emptyok{'lastname'} = 1;
- }
- if (exists($fields{'fname'})) {
- $emptyok{'firstname'} = 1;
- }
- if (exists($fields{'mname'})) {
- $emptyok{'middlename'} = 1;
- }
- }
- if (exists($fields{'gen'})) {
- $emptyok{'generation'} = 1;
- }
}
if ($env{'request.course.id'} ne '') {
$cid = $env{'request.course.id'};
$crstype = &Apache::loncommon::course_type();
$crsdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- $crsnum = $env{'course.'.$env{'request.course.id'}.'.num'};
} elsif ($setting eq 'course') {
if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) {
$cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'};
$crstype = &Apache::loncommon::course_type($cid);
$crsdom = $env{'form.dcdomain'};
- $crsnum = $env{'form.dccourse'};
- if (exists($env{'course.'.$cid.'.internal.userdomains'})) {
- $oldcrsuserdoms = 1;
- }
- my %coursedesc = &Apache::lonnet::coursedescription($cid,{ one_time => 1 });
- $env{'course.'.$cid.'.internal.userdomains'} = $coursedesc{'internal.userdomains'};
}
}
my ($startdate,$enddate) = &get_dates_from_form();
@@ -4252,7 +4315,47 @@ sub upfile_drop_add {
my $defdom=$env{'request.role.domain'};
my $domain;
if ($env{'form.defaultdomain'} ne '') {
- $domain = $env{'form.defaultdomain'};
+ if (($context eq 'course') || ($setting eq 'course')) {
+ if ($env{'form.defaultdomain'} eq $crsdom) {
+ $domain = $env{'form.defaultdomain'};
+ } else {
+ if (&Apache::lonnet::will_trust('enroll',$crsdom,$env{'form.defaultdomain'})) {
+ $domain = $env{'form.defaultdomain'};
+ } else {
+ $r->print(''.&mt('Error').': '.
+ &mt('Enrollment of users not permitted for specified default domain: [_1].',
+ &Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'');
+ return 'untrusted';
+ }
+ }
+ } elsif ($context eq 'author') {
+ if ($env{'form.defaultdomain'} eq $defdom) {
+ $domain = $env{'form.defaultdomain'};
+ } else {
+ if ((&Apache::lonnet::will_trust('othcoau',$defdom,$env{'form.defaultdomain'})) &&
+ (&Apache::lonnet::will_trust('coaurem',$env{'form.defaultdomain'},$defdom))) {
+ $domain = $env{'form.defaultdomain'};
+ } else {
+ $r->print(''.&mt('Error').': '.
+ &mt('Addition of users not permitted for specified default domain: [_1].',
+ &Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'');
+ return 'untrusted';
+ }
+ }
+ } elsif (($context eq 'domain') && ($setting eq 'domain')) {
+ if ($env{'form.defaultdomain'} eq $defdom) {
+ $domain = $env{'form.defaultdomain'};
+ } else {
+ if (&Apache::lonnet::will_trust('domroles',$defdom,$env{'form.defaultdomain'})) {
+ $domain = $env{'form.defaultdomain'};
+ } else {
+ $r->print(''.&mt('Error').': '.
+ &mt('Addition of users not permitted for specified default domain: [_1].',
+ &Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'');
+ return 'untrusted';
+ }
+ }
+ }
} else {
$domain = $defdom;
}
@@ -4264,7 +4367,6 @@ sub upfile_drop_add {
if (! exists($home_servers{$desiredhost})) {
$r->print(''.&mt('Error').': '.
&mt('Invalid home server specified').'
');
- $r->print(&Apache::loncommon::end_page());
return 'invalidhome';
}
}
@@ -4275,7 +4377,6 @@ sub upfile_drop_add {
}
my $amode = '';
my $genpwd = '';
- my @genpwdfail;
if ($env{'form.login'} eq 'krb') {
$amode='krb';
$amode.=$env{'form.krbver'};
@@ -4284,14 +4385,14 @@ sub upfile_drop_add {
$amode='internal';
if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) {
$genpwd=$env{'form.intarg'};
- @genpwdfail =
- &Apache::loncommon::check_passwd_rules($domain,$genpwd);
}
} elsif ($env{'form.login'} eq 'loc') {
$amode='localauth';
if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) {
$genpwd=$env{'form.locarg'};
}
+ } elsif ($env{'form.login'} eq 'lti') {
+ $amode='lti';
}
if ($amode =~ /^krb/) {
if (! defined($genpwd) || $genpwd eq '') {
@@ -4364,6 +4465,7 @@ sub upfile_drop_add {
\@statuses,\@poss_roles);
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info,
\%cstr_roles,$permission);
+
}
}
}
@@ -4441,9 +4543,9 @@ sub upfile_drop_add {
my $newuserdom = $env{'request.role.domain'};
map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes);
# Get new users list
- my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname,
- %showpasswdrules,$haspasswdmap);
+ my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname);
my $counter = -1;
+ my (%willtrust,%trustchecked);
foreach my $line (@userdata) {
$counter ++;
my @secs;
@@ -4491,6 +4593,28 @@ sub upfile_drop_add {
'"'.$entries{$fields{'domain'}}.'"',
$fname,$mname,$lname,$gen);
next;
+ } elsif ($entries{$fields{'domain'}} ne $domain) {
+ my $possdom = $entries{$fields{'domain'}};
+ if ($context eq 'course' || $setting eq 'course') {
+ unless ($trustchecked{$possdom}) {
+ $willtrust{$possdom} = &Apache::lonnet::will_trust('enroll',$domain,$possdom);
+ $trustchecked{$possdom} = 1;
+ }
+ } elsif ($context eq 'author') {
+ unless ($trustchecked{$possdom}) {
+ $willtrust{$possdom} = &Apache::lonnet::will_trust('othcoau',$domain,$possdom);
+ }
+ if ($willtrust{$possdom}) {
+ $willtrust{$possdom} = &Apache::lonnet::will_trust('coaurem',$possdom,$domain);
+ }
+ }
+ unless ($willtrust{$possdom}) {
+ $disallow{$counter} =
+ &mt('Unacceptable domain [_1] for user [_2] [_3] [_4] [_5]',
+ '"'.$possdom.'"',
+ $fname,$mname,$lname,$gen);
+ next;
+ }
}
my $username = $entries{$fields{'username'}};
my $userdomain = $entries{$fields{'domain'}};
@@ -4570,43 +4694,11 @@ sub upfile_drop_add {
}
}
# determine user password
- my $password;
- my $passwdfromfile;
+ my $password = $genpwd;
if (defined($fields{'ipwd'})) {
if ($entries{$fields{'ipwd'}}) {
$password=$entries{$fields{'ipwd'}};
- $passwdfromfile = 1;
- if ($env{'form.login'} eq 'int') {
- my $uhome=&Apache::lonnet::homeserver($username,$userdomain);
- if (($uhome eq 'no_host') || ($changeauth)) {
- my @brokepwdrules =
- &Apache::loncommon::check_passwd_rules($domain,$password);
- if (@brokepwdrules) {
- $disallow{$counter} = &mt('[_1]: Password included in file for this user did not meet requirements.',
- ''.$username.'');
- map { $showpasswdrules{$_} = 1; } @brokepwdrules;
- next;
- }
- }
- }
- }
- }
- unless ($passwdfromfile) {
- if ($env{'form.login'} eq 'int') {
- if (@genpwdfail) {
- my $uhome=&Apache::lonnet::homeserver($username,$userdomain);
- if (($uhome eq 'no_host') || ($changeauth)) {
- $disallow{$counter} = &mt('[_1]: No specific password in file for this user; default password did not meet requirements',
- ''.$username.'');
- unless ($haspasswdmap) {
- map { $showpasswdrules{$_} = 1; } @genpwdfail;
- $haspasswdmap = 1;
- }
- }
- next;
- }
}
- $password = $genpwd;
}
# determine user role
my $role = '';
@@ -4675,7 +4767,7 @@ sub upfile_drop_add {
&mt('The user does not already exist, and you may not create a new user in a different domain.');
next;
} else {
- unless ($password || $env{'form.login'} eq 'loc') {
+ unless (($password ne '') || ($env{'form.login'} eq 'loc') || ($env{'form.login'} eq 'lti')) {
$disallow{$counter} =
&mt('[_1]: This is a new user but no default password was provided, and the authentication type requires one.',
''.$username.'');
@@ -4878,16 +4970,6 @@ sub upfile_drop_add {
my (%userres,%authres,%roleres,%idres);
my $singlesec = '';
if ($role eq 'st') {
- if (($context eq 'domain') && ($changeauth eq 'Yes') && (!$newuser)) {
- if ((&Apache::lonnet::allowed('mau',$userdomain)) &&
- (&Apache::lonnet::homeserver($username,$userdomain) ne 'no_host')) {
- if ((($amode =~ /^krb4|krb5|internal$/) && $password ne '') ||
- ($amode eq 'localauth')) {
- $authresult =
- &Apache::lonnet::modifyuserauth($userdomain,$username,$amode,$password);
- }
- }
- }
my $sec;
if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') {
if (@secs > 0) {
@@ -4929,16 +5011,16 @@ sub upfile_drop_add {
}
}
}
- }
- if (!$multiple) {
- ($userresult,$authresult,$roleresult,$idresult) =
- &modifyuserrole($context,$setting,
- $changeauth,$cid,$userdomain,$username,
- $id,$amode,$password,$fname,
- $mname,$lname,$gen,$singlesec,
- $env{'form.forceid'},$desiredhost,
- $email,$role,$enddate,$startdate,
- $checkid,$inststatus,\%emptyok);
+ if (!$multiple) {
+ ($userresult,$authresult,$roleresult,$idresult) =
+ &modifyuserrole($context,$setting,
+ $changeauth,$cid,$userdomain,$username,
+ $id,$amode,$password,$fname,
+ $mname,$lname,$gen,$singlesec,
+ $env{'form.forceid'},$desiredhost,
+ $email,$role,$enddate,$startdate,
+ $checkid,$inststatus);
+ }
}
}
if ($multiple) {
@@ -4960,13 +5042,6 @@ sub upfile_drop_add {
} # end of loop
$r->print('');
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
- if (($context eq 'domain') && ($setting eq 'course')) {
- unless ($oldcrsuserdoms) {
- if (exists($env{'course.'.$cid.'.internal.userdomains'})) {
- delete($env{'course.'.$cid.'.internal.userdomains'});
- }
- }
- }
}
# Flush the course logs so reverse user roles immediately updated
$r->register_cleanup(\&Apache::lonnet::flushcourselogs);
@@ -4986,7 +5061,6 @@ sub upfile_drop_add {
$counts{'auth'})."
\n");
}
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules));
- $r->print(&passwdrule_alerts($domain,\%showpasswdrules));
#####################################
# Display list of students to drop #
#####################################
@@ -5056,42 +5130,6 @@ sub print_namespacing_alerts {
}
}
-sub passwdrule_alerts {
- my ($domain,$passwdrules) = @_;
- my $warning;
- if (ref($passwdrules) eq 'HASH') {
- my %showrules = %{$passwdrules};
- if (keys(%showrules)) {
- my %passwdconf = &Apache::lonnet::get_passwdconf($domain);
- $warning = ''.&mt('Password requirement(s) unmet for one or more users:').'';
- if ($showrules{'min'}) {
- my $min = $passwdconf{'min'};
- if ($min eq '') {
- $min = $Apache::lonnet::passwdmin;
- }
- $warning .= '- '.&mt('minimum [quant,_1,character]',$min).'
';
- }
- if ($showrules{'max'}) {
- $warning .= '- '.&mt('maximum [quant,_1,character]',$passwdconf{'max'}).'
';
- }
- if ($showrules{'uc'}) {
- $warning .= '- '.&mt('contain at least one upper case letter').'
';
- }
- if ($showrules{'lc'}) {
- $warning .= '- '.&mt('contain at least one lower case letter').'
';
- }
- if ($showrules{'num'}) {
- $warning .= '- '.&mt('contain at least one number').'
';
- }
- if ($showrules{'spec'}) {
- $warning .= '- '.&mt('contain at least one non-alphanumeric').'
';
- }
- $warning .= '
';
- }
- }
- return $warning;
-}
-
sub user_change_result {
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc,
$username,$userdomain,$userchg) = @_;
@@ -5595,7 +5633,7 @@ END
}
sub set_login {
- my ($dom,$authformkrb,$authformint,$authformloc) = @_;
+ my ($dom,$authformkrb,$authformint,$authformloc,$authformlti) = @_;
my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
my $response;
my ($authnum,%can_assign) =
@@ -5617,6 +5655,11 @@ sub set_login {
''.$authformloc.' | '.
&Apache::loncommon::end_data_table_row()."\n";
}
+ if ($can_assign{'lti'}) {
+ $response .= &Apache::loncommon::start_data_table_row().
+ ''.$authformlti.' | '.
+ &Apache::loncommon::end_data_table_row()."\n";
+ }
$response .= &Apache::loncommon::end_data_table();
}
return $response;
@@ -6145,9 +6188,6 @@ sub get_permission {
$permission{'selfenrolladmin'} = 1;
}
}
- unless ($permission{'selfenrolladmin'}) {
- $permission{'selfenrollview'} = 1;
- }
}
if ($env{'request.course.id'}) {
my $user;
@@ -6196,9 +6236,8 @@ sub get_permission {
}
}
my $allowed = 0;
- foreach my $key (keys(%permission)) {
- next if (($key eq 'owner') || ($key eq 'co-owner'));
- if ($permission{$key}) { $allowed=1; last; }
+ foreach my $perm (values(%permission)) {
+ if ($perm) { $allowed=1; last; }
}
return (\%permission,$allowed);
}
@@ -6407,7 +6446,7 @@ sub verify_authen {
$finish = "document.$formname.submit();";
}
my ($numrules,$intargjs) =
- &Apache::loncommon::passwd_validation_js('argpicked',$domain);
+ &passwd_validation_js('argpicked',$domain);
my $outcome = <<"ENDSCRIPT";
function auth_check() {
@@ -6611,7 +6650,7 @@ sub selfenrollment_administration {
}
}
if ($settings{'internal.selfenrollmgrdc'} ne '') {
- @in_domain = split(/,/,$settings{'internal.selfenrollmgrdc'});
+ my @in_domain = split(/,/,$settings{'internal.selfenrollmgrdc'});
my @diffs = &Apache::loncommon::compare_arrays(\@in_domain,$possconfigs);
unless (@diffs) {
return (\@in_course,\@in_domain);