--- loncom/interface/lonuserutils.pm 2024/01/05 04:09:47 1.184.4.10.2.7 +++ loncom/interface/lonuserutils.pm 2017/08/07 20:22:13 1.185 @@ -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.185 2017/08/07 20:22:13 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); } } @@ -457,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". @@ -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') ) { @@ -550,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 } @@ -670,7 +641,6 @@ END $section_checks.$authheader; return $result; } - ############################################################### ############################################################### sub upload_manager_javascript_forward_associate { @@ -973,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')) @@ -1151,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'}){ @@ -1243,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 { @@ -1607,24 +1575,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 +1642,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 +2031,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 +2044,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 +2285,7 @@ sub build_user_record { sub courses_selector { my ($cdom,$formname) = @_; + my %coursecodes = (); my %codes = (); my @codetitles = (); my %cat_titles = (); @@ -2357,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); @@ -2402,8 +2342,7 @@ function setCourseCat(formname) { } courseSet('$codetitles[1]'); for (var j=0; j' .'

'; @@ -4176,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'}); @@ -4193,6 +4127,10 @@ sub upfile_drop_add { $fields{$env{'form.f'.$i}}=$keyfields[$i]; } } + if ($env{'form.fullup'} ne 'yes') { + $r->print('
'."\n". + ''); + } # # Store the field choices away my @storefields = qw/username names fname mname lname gen id @@ -4206,42 +4144,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 +4167,43 @@ 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')) { + unless ($env{'form.defaultdomain'} eq $crsdom) { + 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')).''); + $r->print(&Apache::loncommon::end_page()); + } + return; + } + } elsif ($context eq 'author') { + unless ($env{'form.defaultdomain'} eq $defdom) { + if ((&Apache::lonnet::will_trust('othcoau',$defdom,$env{'form.defaultdomain'})) && + (&Apache::lonnet::will_trust('coremau',$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')).''); + $r->print(&Apache::loncommon::end_page()); + } + return; + } + } elsif (($context eq 'domain') && ($setting eq 'domain')) { + unless ($env{'form.defaultdomain'} eq $defdom) { + 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')).''); + $r->print(&Apache::loncommon::end_page()); + } + } + } } else { $domain = $defdom; } @@ -4262,10 +4213,10 @@ 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(''.&mt('Error'). + &mt('Invalid home server specified').''); $r->print(&Apache::loncommon::end_page()); - return 'invalidhome'; + return; } } # Determine authentication mechanism @@ -4275,7 +4226,6 @@ sub upfile_drop_add { } my $amode = ''; my $genpwd = ''; - my @genpwdfail; if ($env{'form.login'} eq 'krb') { $amode='krb'; $amode.=$env{'form.krbver'}; @@ -4284,8 +4234,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'; @@ -4364,14 +4312,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 '')) { ####################################### @@ -4441,9 +4385,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 +4435,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,44 +4536,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'})) { @@ -4878,16 +4812,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 +4853,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 +4884,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); @@ -4974,9 +4891,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').'

'); } @@ -4986,7 +4901,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 # ##################################### @@ -4995,9 +4909,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(''. + ''. + '

'.&mt('There are no students with current/future access to the course.').'

'. + '
'."\n"); } elsif (ref($classlist) eq 'HASH') { # Remove the students we just added from the list of students. foreach my $line (@userdata) { @@ -5013,7 +4928,9 @@ sub upfile_drop_add { } } } # end of unless - return 'ok'; + if ($env{'form.fullup'} ne 'yes') { + $r->print(''); + } } sub print_namespacing_alerts { @@ -5056,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:').''; - } - } - return $warning; -} - sub user_change_result { my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, $username,$userdomain,$userchg) = @_; @@ -5961,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; @@ -6145,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; @@ -6196,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); } @@ -6247,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'); @@ -6256,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 @@ -6400,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() { @@ -6441,7 +6246,6 @@ function auth_check() { break; case 'int': alertmsg = '$alerts{'ipass'}'; - break; case 'fsys': alertmsg = '$alerts{'ipass'}'; break; @@ -6455,11 +6259,6 @@ function auth_check() { alert(alertmsg); return; } - } else if (logintype == 'int') { - var numrules = $numrules; - if (numrules > 0) { -$intargjs - } } $finish } @@ -6611,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);