--- loncom/interface/lonuserutils.pm 2023/10/06 02:27:26 1.184.4.10.2.5
+++ loncom/interface/lonuserutils.pm 2017/08/08 15:34:32 1.186
@@ -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.5 2023/10/06 02:27:26 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.186 2017/08/08 15:34:32 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 ($trustedref,$untrustedref);
+ if ($context eq 'course') {
+ ($trustedref,$untrustedref) = &Apache::lonnet::trusted_domains('enroll',$defdom);
+ } elsif ($context eq 'author') {
+ ($trustedref,$untrustedref) = &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,$trustedref,$untrustedref)
.&Apache::lonhtmlcommon::row_closure();
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
@@ -1132,15 +1127,8 @@ sub print_upload_manager_form {
if (!$env{'form.datatoken'}) {
$datatoken=&Apache::loncommon::upfile_store($r);
} else {
- $datatoken=&Apache::loncommon::valid_datatoken($env{'form.datatoken'});
- if ($datatoken ne '') {
- &Apache::loncommon::load_tmp_file($r,$datatoken);
- }
- }
- if ($datatoken eq '') {
- $r->print(''.&mt('Error').': '.
- &mt('Invalid datatoken').'
');
- return 'missingdata';
+ $datatoken=$env{'form.datatoken'};
+ &Apache::loncommon::load_tmp_file($r);
}
my @records=&Apache::loncommon::upfile_record_sep();
if($env{'form.noFirstLine'}){
@@ -1224,7 +1212,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 +2285,7 @@ sub build_user_record {
sub courses_selector {
my ($cdom,$formname) = @_;
+ my %coursecodes = ();
my %codes = ();
my @codetitles = ();
my %cat_titles = ();
@@ -2310,15 +2298,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);
@@ -2355,8 +2342,7 @@ function setCourseCat(formname) {
}
courseSet('$codetitles[1]');
for (var j=0; j'
.'
';
@@ -4129,10 +4113,7 @@ sub print_first_users_upload_form {
# ================================================= Drop/Add from uploaded file
sub upfile_drop_add {
my ($r,$context,$permission,$showcredits) = @_;
- my $datatoken = &Apache::loncommon::valid_datatoken($env{'form.datatoken'});
- if ($datatoken ne '') {
- &Apache::loncommon::load_tmp_file($r,$datatoken);
- }
+ &Apache::loncommon::load_tmp_file($r);
my @userdata=&Apache::loncommon::upfile_record_sep();
if($env{'form.noFirstLine'}){shift(@userdata);}
my @keyfields = split(/\,/,$env{'form.keyfields'});
@@ -4146,6 +4127,10 @@ sub upfile_drop_add {
$fields{$env{'form.f'.$i}}=$keyfields[$i];
}
}
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print(''."\n");
} elsif (ref($classlist) eq 'HASH') {
# Remove the students we just added from the list of students.
foreach my $line (@userdata) {
@@ -4950,7 +4928,9 @@ sub upfile_drop_add {
}
}
} # end of unless
- return 'ok';
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print('');
+ }
}
sub print_namespacing_alerts {
@@ -4993,42 +4973,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) = @_;
@@ -5898,70 +5842,6 @@ sub can_modify_userinfo {
return %canmodify;
}
-sub can_change_internalpass {
- my ($uname,$udom,$crstype,$permission) = @_;
- my $canchange;
- if (&Apache::lonnet::allowed('mau',$udom)) {
- $canchange = 1;
- } elsif ((ref($permission) eq 'HASH') && ($permission->{'mip'}) &&
- ($udom eq $env{'request.role.domain'})) {
- unless ($env{'course.'.$env{'request.course.id'}.'.internal.nopasswdchg'}) {
- my ($cnum,$cdom) = &get_course_identity();
- if ((&Apache::lonnet::is_course_owner($cdom,$cnum)) && ($udom eq $env{'user.domain'})) {
- my @userstatuses = ('default');
- my %userenv = &Apache::lonnet::userenvironment($udom,$uname,'inststatus');
- if ($userenv{'inststatus'} ne '') {
- @userstatuses = split(/:/,$userenv{'inststatus'});
- }
- my $noupdate = 1;
- my %passwdconf = &Apache::lonnet::get_passwdconf($cdom);
- if (ref($passwdconf{'crsownerchg'}) eq 'HASH') {
- if (ref($passwdconf{'crsownerchg'}{'for'}) eq 'ARRAY') {
- foreach my $status (@userstatuses) {
- if (grep(/^\Q$status\E$/,@{$passwdconf{'crsownerchg'}{'for'}})) {
- undef($noupdate);
- last;
- }
- }
- }
- }
- if ($noupdate) {
- return;
- }
- my %owned = &Apache::lonnet::courseiddump($cdom,'.',1,'.',
- $env{'user.name'}.':'.$env{'user.domain'},
- undef,undef,undef,'.');
- my %roleshash = &Apache::lonnet::get_my_roles($uname,$udom,'userroles',
- ['active','future']);
- foreach my $key (keys(%roleshash)) {
- my ($name,$domain,$role) = split(/:/,$key);
- if ($role eq 'st') {
- next if (($name eq $cnum) && ($domain eq $cdom));
- if ($owned{$domain.'_'.$name}) {
- if (ref($owned{$domain.'_'.$name}) eq 'HASH') {
- if ($owned{$domain.'_'.$name}{'nopasswdchg'}) {
- $noupdate = 1;
- last;
- }
- }
- } else {
- $noupdate = 1;
- last;
- }
- } else {
- $noupdate = 1;
- last;
- }
- }
- unless ($noupdate) {
- $canchange = 1;
- }
- }
- }
- }
- return $canchange;
-}
-
sub check_usertype {
my ($dom,$uname,$rules,$curr_rules,$got_rules) = @_;
my $usertype;
@@ -6082,21 +5962,12 @@ sub get_permission {
$permission{'selfenrolladmin'} = 1;
}
}
- unless ($permission{'selfenrolladmin'}) {
- $permission{'selfenrollview'} = 1;
- }
}
if ($env{'request.course.id'}) {
- my $user;
- if (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')) {
- $user = $env{'user.name'}.':'.$env{'user.domain'};
- }
+ my $user = $env{'user.name'}.':'.$env{'user.domain'};
if (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.courseowner'} eq
$user)) {
$permission{'owner'} = 1;
- if (&Apache::lonnet::allowed('mip',$env{'request.course.id'})) {
- $permission{'mip'} = 1;
- }
} elsif (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.co-owners'} ne '')) {
if (grep(/^\Q$user\E$/,split(/,/,$env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}))) {
$permission{'co-owner'} = 1;
@@ -6133,9 +6004,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);
}
@@ -6184,7 +6054,7 @@ sub get_course_identity {
}
sub dc_setcourse_js {
- my ($formname,$mode,$context,$showcredits,$domain) = @_;
+ my ($formname,$mode,$context,$showcredits) = @_;
my ($dc_setcourse_code,$authen_check);
my $cctext = &Apache::lonnet::plaintext('cc');
my $cotext = &Apache::lonnet::plaintext('co');
@@ -6193,7 +6063,7 @@ sub dc_setcourse_js {
if ($mode eq 'upload') {
$role = 'courserole';
} else {
- $authen_check = &verify_authen($formname,$context,$domain);
+ $authen_check = &verify_authen($formname,$context);
}
$dc_setcourse_code = (<<"SCRIPTTOP");
$authen_check
@@ -6337,14 +6207,12 @@ ENDSCRIPT
}
sub verify_authen {
- my ($formname,$context,$domain) = @_;
+ my ($formname,$context) = @_;
my %alerts = &authcheck_alerts();
my $finish = "return 'ok';";
if ($context eq 'author') {
$finish = "document.$formname.submit();";
}
- my ($numrules,$intargjs) =
- &Apache::loncommon::passwd_validation_js('argpicked',$domain);
my $outcome = <<"ENDSCRIPT";
function auth_check() {
@@ -6378,7 +6246,6 @@ function auth_check() {
break;
case 'int':
alertmsg = '$alerts{'ipass'}';
- break;
case 'fsys':
alertmsg = '$alerts{'ipass'}';
break;
@@ -6392,11 +6259,6 @@ function auth_check() {
alert(alertmsg);
return;
}
- } else if (logintype == 'int') {
- var numrules = $numrules;
- if (numrules > 0) {
-$intargjs
- }
}
$finish
}
@@ -6548,7 +6410,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);