--- loncom/interface/lonuserutils.pm 2007/12/22 19:12:51 1.28 +++ loncom/interface/lonuserutils.pm 2008/01/01 17:24:59 1.37 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.28 2007/12/22 19:12:51 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.37 2008/01/01 17:24:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -76,7 +76,7 @@ sub modifystudent { } } if ($result eq '') { - $result = 'Unable to find section for this student'; + $result = &mt('Unable to find section for this student'); } else { $result =~ s/(ok:)+/ok/g; } @@ -304,7 +304,7 @@ sub print_upload_manager_header { my $javascript_validations = &javascript_validations('upload',$krbdefdom,$password_choice,undef, $env{'request.role.domain'},$context, - $permission,$groupslist); + $groupslist); my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':''); $r->print(&mt('Total number of records found in file: [_1].',$distotal). "
\n"); @@ -332,18 +332,13 @@ sub print_upload_manager_header { ############################################################### sub javascript_validations { my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain, - $context,$permission,$groupslist)=@_; - + $context,$groupslist)=@_; my %param = ( kerb_def_dom => $krbdefdom, curr_authtype => $curr_authtype, ); - if ($mode eq 'createuser') { - $param{'formname'} = 'cu'; - } elsif ($mode eq 'upload') { + if ($mode eq 'upload') { $param{'formname'} = 'studentform'; - } elsif ($mode eq 'singlestudent') { - $param{'formname'} = 'cu'; } elsif ($mode eq 'createcourse') { $param{'formname'} = 'ccrs'; } elsif ($mode eq 'modifycourse') { @@ -367,7 +362,7 @@ sub javascript_validations { } } elsif ($context eq 'domain') { $setsection_call = 'setCourse()'; - $setsections_js = &dc_setcourse_js($param{'formname'},$mode); + $setsections_js = &dc_setcourse_js($param{'formname'},$mode,$context); } $finish = " var checkSec = $setsection_call\n". " if (checkSec == 'ok') {\n". @@ -389,8 +384,7 @@ sub javascript_validations { role => 'The optional role field was not specified.', continue => 'Continue adding users?', ); - - my $function_name =(<".&mt('Full Update')."\n". '

\n"; + ' '.&mt('Display students with current/future access who are not in the uploaded file.').'
'.&mt('Students selected from this list can be dropped.').'

'."\n"; } if ($context eq 'course' || $context eq 'domain') { $Str .= &forceid_change($context); @@ -1264,7 +1251,7 @@ sub print_userlist { if ($env{'form.showrole'} eq 'Any') { $roleselected = ' selected="selected" '; } - my $role_select; + my ($role_select,$cnum,$cdom); if ($context eq 'domain') { $role_select = &domain_roles_select(); $r->print(''); @@ -1288,6 +1275,10 @@ sub print_userlist { } $role_select .= ''; $r->print(''); + if ($context eq 'course') { + ($cnum,$cdom) = &get_course_identity(); + $r->print(§ion_group_filter($cnum,$cdom)); + } } if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { $r->print(' '.&list_submit_button(&mt('Update Display')). @@ -1307,7 +1298,7 @@ sub print_userlist { &Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::end_pick_box().'

'. '

'.&list_submit_button(&mt('Update Display')). - "\n

\n"); + "\n".'

'.&mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.').''."\n"); if ($env{'form.coursepick'}) { $r->print('
'.&mt('Searching').' ...
 
'); } @@ -1331,8 +1322,6 @@ sub print_userlist { $userlist{$student} = $classlist->{$student}; } } - my $cid = $env{'request.course.id'}; - my ($cnum,$cdom) = &get_course_identity($cid); my $showroles; if ($env{'form.showrole'} ne 'Any') { $showroles = [$env{'form.showrole'}]; @@ -1468,6 +1457,62 @@ sub print_userlist { $env{'form.phase'}.'" />'); } +sub section_group_filter { + my ($cnum,$cdom) = @_; + my @filters; + if ($env{'request.course.sec'} eq '') { + @filters = ('sec'); + } + push(@filters,'grp'); + my %name = ( + sec => 'secfilter', + grp => 'grpfilter', + ); + my %title = &Apache::lonlocal::texthash ( + sec => 'Section(s)', + grp => 'Group(s)', + all => 'all', + none => 'none', + ); + my ($output,@options); + foreach my $item (@filters) { + my $markup; + if ($env{'form.'.$name{$item}} eq '') { + $env{'form.'.$name{$item}} = 'all'; + } + if ($item eq 'sec') { + if ($env{'form.showrole'} eq 'cc') { + $env{'form.'.$name{$item}} = 'none'; + } + my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); + @options = sort(keys(%sections_count)); + } elsif ($item eq 'grp') { + my %curr_groups = &Apache::longroup::coursegroups(); + @options = sort(keys(%curr_groups)); + } + if (@options > 0) { + my $currsel; + $markup = ''."\n"; + $output .= (' 'x3).''; + } + } + return $output; +} + sub list_submit_button { my ($text) = @_; return ''; @@ -2047,6 +2092,11 @@ END $env{'request.role.domain'})) { $canchange{$role} = 1; } + } elsif ($setting eq 'author') { + if (&Apache::lonnet::allowed('c'.$role, + $env{'request.role.domain'})) { + $canchange{$role} = 1; + } } } elsif ($context eq 'author') { if (&Apache::lonnet::allowed('c'.$role, @@ -2158,6 +2208,17 @@ END $index{$idx} = $i++; } my $usercount = 0; + my ($secfilter,$grpfilter); + if ($context eq 'course') { + $secfilter = $env{'form.secfilter'}; + $grpfilter = $env{'form.grpfilter'}; + if ($secfilter eq '') { + $secfilter = 'all'; + } + if ($grpfilter eq '') { + $grpfilter = 'all'; + } + } # Get groups, role, permanent e-mail so we can sort on them if # necessary. foreach my $user (keys(%{$userlist})) { @@ -2195,11 +2256,40 @@ END delete($userlist->{$user}); next; } - if (ref($classgroups) eq 'HASH') { - $groups = $classgroups->{$user}; - } - if (ref($groups->{active}) eq 'HASH') { - $userlist->{$user}->[$index{'groups'}] = join(', ',keys(%{$groups->{'active'}})); + if ($context eq 'course') { + my @ac_groups; + if (ref($classgroups) eq 'HASH') { + $groups = $classgroups->{$user}; + } + if (ref($groups->{'active'}) eq 'HASH') { + @ac_groups = keys(%{$groups->{'active'}}); + $userlist->{$user}->[$index{'groups'}] = join(', ',@ac_groups); + } + if ($mode ne 'autoenroll') { + my $section = $userlist->{$user}->[$index{'section'}]; + if ($secfilter eq 'none') { + if ($section ne '') { + delete($userlist->{$user}); + next; + } + } elsif ($secfilter ne 'all') { + if ($section ne $secfilter) { + delete($userlist->{$user}); + next; + } + } + if ($grpfilter eq 'none') { + if (@ac_groups > 0) { + delete($userlist->{$user}); + next; + } + } elsif ($grpfilter ne 'all') { + if (!grep(/^\Q$grpfilter\E$/,@ac_groups)) { + delete($userlist->{$user}); + next; + } + } + } } my %emails = &Apache::loncommon::getemails($uname,$udom); if ($emails{'permanentemail'} =~ /\S/) { @@ -2274,7 +2364,6 @@ END $r->print("$cellentry\n"); } else { $r->print("$rowcount\n"); - $checkval; if ($actionselect) { my $showcheckbox; if ($role =~ /^cr\//) { @@ -2736,14 +2825,48 @@ sub results_header_row { $description .= &mt('All users in course with [_1] roles',$rolefilter); } } + my $constraint; my $viewablesec = &viewable_section($permission); if ($viewablesec ne '') { if ($env{'form.showrole'} eq 'st') { - $description .= ' '.&mt('(section [_1] only)',$viewablesec); + $constraint = &mt('only users in section "[_1]"',$viewablesec); } elsif ($env{'form.showrole'} ne 'cc') { - $description .= ' '.&mt('(only users affiliated with no section or section [_1])',$viewablesec); + $constraint = &mt('only users affiliated with no section or section "[_1]"',$viewablesec); + } + if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) { + if ($env{'form.grpfilter'} eq 'none') { + $constraint .= &mt(' and not in any group'); + } else { + $constraint .= &mt(' and members of group: "[_1]"',$env{'form.grpfilter'}); + } + } + } else { + if (($env{'form.secfilter'} ne 'all') && ($env{'form.secfilter'} ne '')) { + if ($env{'form.secfilter'} eq 'none') { + $constraint = &mt('only users affiliated with no section'); + } else { + $constraint = &mt('only users affiliated with section "[_1]"',$env{'form.secfilter'}); + } + } + if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) { + if ($env{'form.grpfilter'} eq 'none') { + if ($constraint eq '') { + $constraint = &mt('only users not in any group'); + } else { + $constraint .= &mt(' and also not in any group'); + } + } else { + if ($constraint eq '') { + $constraint = &mt('only members of group: "[_1]"',$env{'form.grpfilter'}); + } else { + $constraint .= &mt(' and also members of group: "[_1]"'.$env{'form.grpfilter'}); + } + } } } + if ($constraint ne '') { + $description .= ' ('.$constraint.')'; + } } elsif ($context eq 'author') { $description = &mt('Author space for [_1]', @@ -2841,8 +2964,8 @@ sub viewable_section { ################################################# ################################################# sub show_drop_list { - my ($r,$classlist,$keylist,$nosort,$permission)=@_; - my $cid=$env{'request.course.id'}; + my ($r,$classlist,$nosort,$permission) = @_; + my $cid = $env{'request.course.id'}; my ($cnum,$cdom) = &get_course_identity($cid); if (! exists($env{'form.sortby'})) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, @@ -2852,9 +2975,6 @@ sub show_drop_list { if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) { $sortby = 'username'; } - my ($classgroups) = &Apache::loncoursedata::get_group_memberships( - $classlist,$keylist,$cdom,$cnum); - # my $action = "drop"; my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); $r->print(< END - -my %lt=&Apache::lonlocal::texthash('usrn' => "username", - 'dom' => "domain", - 'sn' => "student name", - 'sec' => "section", - 'start' => "start date", - 'end' => "end date", - 'groups' => "active groups", - ); + my ($indexhash,$keylist) = &make_keylist_array(); + my $studentcount = 0; + if (ref($classlist) eq 'HASH') { + foreach my $student (keys(%{$classlist})) { + my $sdata = $classlist->{$student}; + my $status = $sdata->[$indexhash->{'status'}]; + my $section = $sdata->[$indexhash->{'section'}]; + if ($status ne 'Active') { + delete($classlist->{$student}); + next; + } + if ($env{'request.course.sec'} ne '') { + if ($section ne $env{'request.course.sec'}) { + delete($classlist->{$student}); + next; + } + } + $studentcount ++; + } + } + if (!$studentcount) { + $r->print(&mt('There are no students to drop.')); + return; + } + my ($classgroups) = &Apache::loncoursedata::get_group_memberships( + $classlist,$keylist,$cdom,$cnum); + my %lt=&Apache::lonlocal::texthash('usrn' => "username", + 'dom' => "domain", + 'sn' => "student name", + 'sec' => "section", + 'start' => "start date", + 'end' => "end date", + 'groups' => "active groups", + ); if ($nosort) { $r->print(&Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row()); @@ -2918,32 +3063,26 @@ END } # # Sort the students - my %index; - my $i; - foreach (@$keylist) { - $index{$_} = $i++; - } - $index{'groups'} = scalar(@$keylist); - my $index = $index{$sortby}; - my $second = $index{'username'}; - my $third = $index{'domain'}; + my $index = $indexhash->{$sortby}; + my $second = $indexhash->{'username'}; + my $third = $indexhash->{'domain'}; my @Sorted_Students = sort { lc($classlist->{$a}->[$index]) cmp lc($classlist->{$b}->[$index]) || lc($classlist->{$a}->[$second]) cmp lc($classlist->{$b}->[$second]) || lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third]) - } (keys(%$classlist)); + } (keys(%{$classlist})); foreach my $student (@Sorted_Students) { my $error; my $sdata = $classlist->{$student}; - my $username = $sdata->[$index{'username'}]; - my $domain = $sdata->[$index{'domain'}]; - my $section = $sdata->[$index{'section'}]; - my $name = $sdata->[$index{'fullname'}]; - my $id = $sdata->[$index{'id'}]; - my $start = $sdata->[$index{'start'}]; - my $end = $sdata->[$index{'end'}]; + my $username = $sdata->[$indexhash->{'username'}]; + my $domain = $sdata->[$indexhash->{'domain'}]; + my $section = $sdata->[$indexhash->{'section'}]; + my $name = $sdata->[$indexhash->{'fullname'}]; + my $id = $sdata->[$indexhash->{'id'}]; + my $start = $sdata->[$indexhash->{'start'}]; + my $end = $sdata->[$indexhash->{'end'}]; my $groups = $classgroups->{$student}; my $active_groups; if (ref($groups->{active}) eq 'HASH') { @@ -2959,25 +3098,18 @@ END } else { $end = &Apache::lonlocal::locallocaltime($end); } - my $status = $sdata->[$index{'status'}]; - next if ($status ne 'Active'); - if ($env{'request.course.sec'} ne '') { - if ($section ne $env{'request.course.sec'}) { - next; - } - } my $studentkey = $student.':'.$section; - my $startitem = ''; + my $startitem = ''; # $r->print(&Apache::loncommon::start_data_table_row()); $r->print(<<"END"); - + $username $domain $id $name $section - $start + $start $startitem $end $active_groups END @@ -2985,7 +3117,7 @@ END } $r->print(&Apache::loncommon::end_data_table().'
'); %lt=&Apache::lonlocal::texthash( - 'dp' => "Expire Users' Roles", + 'dp' => "Drop Students", 'ca' => "check all", 'ua' => "uncheck all", ); @@ -3042,6 +3174,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 foreach my $field (qw/username names @@ -3488,7 +3624,7 @@ sub upfile_drop_add { $flushc = &user_change_result($r,$userresult,$authresult, $roleresult,$idresult,\%counts,$flushc, - $username,%userchg); + $username,\%userchg); } } else { if ($context eq 'course') { @@ -3510,11 +3646,13 @@ sub upfile_drop_add { } # end of foreach (@userdata) # Flush the course logs so reverse user roles immediately updated &Apache::lonnet::flushcourselogs(); - $r->print("

\n

\n".&mt('Processed [_1] user(s).',$counts{'user'}). + $r->print("

\n

\n".&mt('Processed [quant,_1,user].',$counts{'user'}). "

\n"); if ($counts{'role'} > 0) { $r->print("

\n". - &mt('Roles added for [_1] users. If user is active, the new role will be available when the user next logs in to LON-CAPA.',$counts{'role'})."

\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').'

'); } if ($counts{'auth'} > 0) { $r->print("

\n". @@ -3522,23 +3660,22 @@ sub upfile_drop_add { $counts{'auth'})."

\n"); } $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); - $r->print(''); - $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','prevphase','currstate'])); - $r->print('
'); ##################################### - # Drop students # + # Display list of students to drop # ##################################### if ($env{'form.fullup'} eq 'yes') { - $r->print('

'.&mt('Dropping Students')."

\n"); + $r->print('

'.&mt('Students to Drop')."

\n"); # Get current classlist - my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); + my $classlist = &Apache::loncoursedata::get_classlist(); if (! defined($classlist)) { - $r->print(&mt('There are no students currently enrolled.'). - "\n"); + $r->print('
'. + ''. + &mt('There are no students with current/future access to the course.'). + '
'."\n"); } else { # Remove the students we just added from the list of students. - foreach (@userdata) { - my %entries=&Apache::loncommon::record_sep($_); + foreach my $line (@userdata) { + my %entries=&Apache::loncommon::record_sep($line); unless (($entries{$fields{'username'}} eq '') || (!defined($entries{$fields{'username'}}))) { delete($classlist->{$entries{$fields{'username'}}. @@ -3546,10 +3683,13 @@ sub upfile_drop_add { } } # Print out list of dropped students. - &show_drop_list($r,$classlist,$keylist,'nosort'); + &show_drop_list($r,$classlist,'nosort',$permission); } } } # end of unless + if ($env{'form.fullup'} ne 'yes') { + $r->print(''); + } } sub print_namespacing_alerts { @@ -3593,8 +3733,8 @@ sub print_namespacing_alerts { } sub user_change_result { - my ($r,$userresult,$authresult,$roleresult,$counts,$flushc,$username, - $userchg) = @_; + my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, + $username,$userchg) = @_; my $okresult = 0; if ($userresult ne 'ok') { if ($userresult =~ /^error:(.+)$/) { @@ -3635,6 +3775,9 @@ sub user_change_result { $flushc=0; } } + if ($idresult) { + $r->print($idresult); + } return $flushc; } @@ -3643,14 +3786,12 @@ sub print_drop_menu { my ($r,$context,$permission) = @_; $r->print('

'.&mt("Drop Students").'

'."\n". '
'."\n"); - my $cid=$env{'request.course.id'}; - my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); + my $classlist = &Apache::loncoursedata::get_classlist(); if (! defined($classlist)) { $r->print(&mt('There are no students currently enrolled.')."\n"); - return; + } else { + &show_drop_list($r,$classlist,'nosort',$permission); } - # Print out the available choices - &show_drop_list($r,$classlist,$keylist,$permission); $r->print('
'. &Apache::loncommon::end_page()); return; } @@ -3662,10 +3803,10 @@ sub update_user_list { my $now = time; my $count=0; my @changelist; - if ($choice ne '') { - @changelist = &Apache::loncommon::get_env_multiple('form.actionlist'); - } else { + if ($choice eq 'drop') { @changelist = &Apache::loncommon::get_env_multiple('form.droplist'); + } else { + @changelist = &Apache::loncommon::get_env_multiple('form.actionlist'); } my %result_text = ( ok => { 'revoke' => 'Revoked', 'delete' => 'Deleted', @@ -3752,12 +3893,11 @@ sub update_user_list { } } elsif ($choice eq 'delete') { if ($role eq 'st') { - &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); - } else { - $result = - &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now, - $start,1); - } + &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$now,$start,$type,$locktype,$cid); + } + $result = + &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now, + $start,1); } else { #reenable, activate, change access dates or change section if ($choice ne 'chgsec') { @@ -3862,11 +4002,24 @@ sub update_user_list { $count++; } else { $r->print( - &mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]:[_4]", + &mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]: [_4].", $plrole,$extent,$uname.':'.$udom,$result).'
'); } } - $r->print('

'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,users].",$count).'

'); + $r->print('
'."\n"); + if ($choice eq 'drop') { + $r->print(''."\n". + ''."\n". + ''."\n"); + } else { + foreach my $item ('action','sortby','roletype','showrole','Status','secfilter','grpfilter') { + if ($env{'form.'.$item} ne '') { + $r->print(''."\n"); + } + } + } + $r->print('

'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,no users].",$count).'

'); if ($count > 0) { if ($choice eq 'revoke' || $choice eq 'drop') { $r->print('

'.&mt('Re-enabling will re-activate data for the role.

')); @@ -3876,23 +4029,25 @@ sub update_user_list { } if ($env{'form.makedatesdefault'}) { if ($choice eq 'chgdates' || $choice eq 'reenable' || $choice eq 'activate') { - $r->print(&make_dates_default($startdate,$enddate)); + $r->print(&make_dates_default($startdate,$enddate,$context)); } } + my $linktext = &mt('Display User Lists'); + if ($choice eq 'drop') { + $linktext = &mt('Display current class roster'); + } + $r->print(''.$linktext.'
'."\n"); } sub classlist_drop { - my ($scope,$uname,$udom,$now,$action) = @_; + my ($scope,$uname,$udom,$now) = @_; my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); - my $cid=$cdom.'_'.$cnum; - my $user = $uname.':'.$udom; - if ($action eq 'drop') { + if (&Apache::lonnet::is_course($cdom,$cnum)) { + my $user = $uname.':'.$udom; if (!&active_student_roles($cnum,$cdom,$uname,$udom)) { my $result = &Apache::lonnet::cput('classlist', - { $user => $now }, - $env{'course.'.$cid.'.domain'}, - $env{'course.'.$cid.'.num'}); + { $user => $now },$cdom,$cnum); return &mt('Drop from classlist: [_1]', ''.$result.'').'
'; } @@ -3962,16 +4117,26 @@ sub course_sections { my ($sections_count,$role) = @_; my $output = ''; my @sections = (sort {$a <=> $b} keys %{$sections_count}); - if (scalar(@sections) == 1) { + my $numsec = scalar(@sections); + if ($numsec <= 1) { $output = ''."\n"; + if ($role eq 'st') { + $output .= '>'."\n". + ' '."\n". + ' \n"; + } else { + $output .= 'multiple="multiple" size="'.$multiple.'">'."\n"; + } foreach my $sec (@sections) { $output .= '\n"; } @@ -3991,7 +4156,7 @@ sub get_groupslist { } sub setsections_javascript { - my ($formname,$groupslist,$mode) = @_; + my ($formname,$groupslist,$mode,$checkauth) = @_; my ($checkincluded,$finish,$rolecode,$setsection_js); if ($mode eq 'upload') { $checkincluded = 'formname.name == "'.$formname.'"'; @@ -3999,12 +4164,26 @@ sub setsections_javascript { $rolecode = "var role = formname.defaultrole.options[formname.defaultrole.selectedIndex].value;\n"; } elsif ($formname eq 'cu') { $checkincluded = 'formname.elements[i-1].checked == true'; - $finish = 'formname.submit()'; + if ($checkauth) { + $finish = "var authcheck = auth_check();\n". + " if (authcheck == 'ok') {\n". + " formname.submit();\n". + " }\n"; + } else { + $finish = 'formname.submit()'; + } $rolecode = "var match = str.split('_'); var role = match[3];\n"; } elsif ($formname eq 'enrollstudent') { $checkincluded = 'formname.name == "'.$formname.'"'; - $finish = 'formname.submit()'; + if ($checkauth) { + $finish = "var authcheck = auth_check();\n". + " if (authcheck == 'ok') {\n". + " formname.submit();\n". + " }\n"; + } else { + $finish = 'formname.submit()'; + } $rolecode = "var match = str.split('_'); var role = match[1];\n"; } else { @@ -4341,15 +4520,19 @@ sub get_course_identity { } sub dc_setcourse_js { - my ($formname,$mode) = @_; - my $dc_setcourse_code; + my ($formname,$mode,$context) = @_; + my ($dc_setcourse_code,$authen_check); my $cctext = &Apache::lonnet::plaintext('cc'); my %alerts = §ioncheck_alerts(); my $role = 'role'; if ($mode eq 'upload') { $role = 'courserole'; + } else { + $authen_check = &verify_authen($formname,$context); } $dc_setcourse_code = (<<"SCRIPTTOP"); +$authen_check + function setCourse() { var course = document.$formname.dccourse.value; if (course != "") { @@ -4434,9 +4617,11 @@ SCRIPTTOP } } } - document.$formname.submit(); + var authcheck = auth_check(); + if (authcheck == 'ok') { + document.$formname.submit(); + } } - ENDSCRIPT } else { $dc_setcourse_code .= " @@ -4457,6 +4642,66 @@ ENDSCRIPT return -1; } ENDSCRIPT + return $dc_setcourse_code; +} + +sub verify_authen { + my ($formname,$context) = @_; + my %alerts = &authcheck_alerts(); + my $finish = "return 'ok';"; + if ($context eq 'author') { + $finish = "document.$formname.submit();"; + } + my $outcome = <<"ENDSCRIPT"; + +function auth_check() { + var logintype; + if (document.$formname.login.length) { + if (document.$formname.login.length > 0) { + var loginpicked = 0; + for (var i=0; i 'You must choose an authentication type.', + krb => 'You need to specify the Kerberos domain.', + ipass => 'You need to specify the initial password.', + ); + return %alerts; +} + 1;