--- loncom/interface/lonuserutils.pm 2023/09/04 16:17:12 1.184.4.10.2.4
+++ loncom/interface/lonuserutils.pm 2017/11/04 16:13:31 1.191
@@ -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.4 2023/09/04 16:17:12 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.191 2017/11/04 16:13:31 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -438,7 +438,7 @@ sub javascript_validations {
} elsif ($context eq 'domain') {
$setsection_call = 'setCourse()';
$setsections_js = &dc_setcourse_js($param{'formname'},$mode,
- $context,$showcredits,$domain);
+ $context,$showcredits);
}
$finish = " var checkSec = $setsection_call\n".
" if (checkSec == 'ok') {\n".
@@ -510,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') ) {
@@ -531,25 +531,19 @@ END
/* regexp here to check for non \d \. in credits */
END
} else {
- my ($numrules,$intargjs) =
- &Apache::loncommon::passwd_validation_js('vf.elements[current.argfield].value',$domain);
$auth_checks .= (< 0) {
-$intargjs
- }
}
END
}
@@ -651,7 +641,6 @@ END
$section_checks.$authheader;
return $result;
}
-
###############################################################
###############################################################
sub upload_manager_javascript_forward_associate {
@@ -954,8 +943,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'))
@@ -1137,11 +1132,6 @@ sub print_upload_manager_form {
&Apache::loncommon::load_tmp_file($r,$datatoken);
}
}
- if ($datatoken eq '') {
- $r->print('
'.&mt('Error').': '.
- &mt('Invalid datatoken').'
');
- return 'missingdata';
- }
my @records=&Apache::loncommon::upfile_record_sep();
if($env{'form.noFirstLine'}){
$firstLine=shift(@records);
@@ -1224,7 +1214,6 @@ sub print_upload_manager_form {
}
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear,
$context,$permission,$crstype,$showcredits);
- return 'ok';
}
sub setup_date_selectors {
@@ -2298,6 +2287,7 @@ sub build_user_record {
sub courses_selector {
my ($cdom,$formname) = @_;
+ my %coursecodes = ();
my %codes = ();
my @codetitles = ();
my %cat_titles = ();
@@ -2310,15 +2300,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);
@@ -3532,8 +3521,6 @@ END
setSections(formname,'$crstype');
if (seccheck == 'ok') {
opener.document.$callingform.newsecs.value = formname.sections.value;
- } else {
- return;
}
END
} else {
@@ -4118,7 +4105,7 @@ sub print_first_users_upload_form {
.&Apache::lonhtmlcommon::end_pick_box();
$str .= '
'
- .''
.'
';
@@ -4146,6 +4133,10 @@ sub upfile_drop_add {
$fields{$env{'form.f'.$i}}=$keyfields[$i];
}
}
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print('');
+ }
+ return;
+ }
+ }
+ } 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')).'');
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print('');
+ }
+ return;
+ }
+ }
+ } 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')).'');
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print('');
+ }
+ return;
+ }
+ }
+ }
} else {
$domain = $defdom;
}
@@ -4190,10 +4232,12 @@ sub upfile_drop_add {
} else {
my %home_servers = &Apache::lonnet::get_servers($defdom,'library');
if (! exists($home_servers{$desiredhost})) {
- $r->print('
'.&mt('Error').': '.
- &mt('Invalid home server specified').'
');
- $r->print(&Apache::loncommon::end_page());
- return 'invalidhome';
+ $r->print(''.&mt('Error').
+ &mt('Invalid home server specified').'');
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print('');
+ }
+ return;
}
}
# Determine authentication mechanism
@@ -4203,7 +4247,6 @@ sub upfile_drop_add {
}
my $amode = '';
my $genpwd = '';
- my @genpwdfail;
if ($env{'form.login'} eq 'krb') {
$amode='krb';
$amode.=$env{'form.krbver'};
@@ -4212,8 +4255,6 @@ 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';
@@ -4292,14 +4333,10 @@ sub upfile_drop_add {
\@statuses,\@poss_roles);
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info,
\%cstr_roles,$permission);
+
}
}
}
- if ($datatoken eq '') {
- $r->print('
'.&mt('Error').': '.
- &mt('Invalid datatoken').'
');
- return 'missingdata';
- }
if ( $domain eq &LONCAPA::clean_domain($domain)
&& ($amode ne '')) {
#######################################
@@ -4369,9 +4406,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;
@@ -4419,6 +4456,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'}};
@@ -4498,44 +4557,12 @@ 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 = '';
if (defined($fields{'role'})) {
@@ -4806,16 +4833,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) {
@@ -4857,16 +4874,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);
+ 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) {
@@ -4895,9 +4912,7 @@ sub upfile_drop_add {
"
\n");
if ($counts{'role'} > 0) {
$r->print("
\n".
- &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.
- &mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.').
- "
\n");
+ &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."\n");
} else {
$r->print('
'.&mt('No roles added').'
');
}
@@ -4907,7 +4922,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 #
#####################################
@@ -4916,9 +4930,10 @@ sub upfile_drop_add {
# Get current classlist
my $classlist = &Apache::loncoursedata::get_classlist();
if (! defined($classlist)) {
- $r->print('
'.
- &mt('There are no students with current/future access to the course.').
- '
'."\n");
+ $r->print(''."\n");
} elsif (ref($classlist) eq 'HASH') {
# Remove the students we just added from the list of students.
foreach my $line (@userdata) {
@@ -4934,7 +4949,9 @@ sub upfile_drop_add {
}
}
} # end of unless
- return 'ok';
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print('');
+ }
}
sub print_namespacing_alerts {
@@ -4977,42 +4994,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 .= '