--- loncom/interface/lonuserutils.pm 2007/12/24 05:26:31 1.33 +++ loncom/interface/lonuserutils.pm 2008/01/05 18:36:26 1.44 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.33 2007/12/24 05:26:31 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.44 2008/01/05 18:36:26 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; } @@ -333,17 +333,12 @@ sub print_upload_manager_header { sub javascript_validations { my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain, $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 =(<<END); + my $function_name = <<"END"; $setsections_js function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { @@ -456,7 +450,7 @@ END foundatype=1; if (current.argfield == null || current.argfield == '') { var alertmsg = ''; - switch (current.value) { + switch (current.radiovalue) { case 'krb': alertmsg = '$alert{'krb'}'; break; @@ -521,14 +515,8 @@ END } END } - my $result = $function_name; - if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { - $result .= $auth_checks; - } - $result .= $optional_checks."\n".$section_checks; - if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { - $result .= $authheader; - } + my $result = $function_name.$auth_checks.$optional_checks."\n". + $section_checks.$authheader; return $result; } ############################################################### @@ -761,8 +749,7 @@ sub print_upload_manager_footer { $permission,$context,'upload'); $Str .= $secbox."<h3>".&mt('Full Update')."</h3>\n". '<p><label><input type="checkbox" name="fullup" value="yes">'. - ' '.&mt('Display students with current/future access, who are not in the uploaded file.').'<br />'.&mt('Students selected from this list can be dropped.'); - "</label></p>\n"; + ' '.&mt('Display students with current/future access who are not in the uploaded file.').'</label><br />'.&mt('Students selected from this list can be dropped.').'</p>'."\n"; } if ($context eq 'course' || $context eq 'domain') { $Str .= &forceid_change($context); @@ -1311,7 +1298,7 @@ sub print_userlist { &Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::end_pick_box().'</p>'. '<p>'.&list_submit_button(&mt('Update Display')). - "\n</p>\n"); + "\n".'</p><span class="LC_warning">'.&mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.').'</span>'."\n"); if ($env{'form.coursepick'}) { $r->print('<hr />'.&mt('Searching').' ...<br /> <br />'); } @@ -1321,31 +1308,21 @@ sub print_userlist { $r->rflush(); if ($context eq 'course') { my $classlist = &Apache::loncoursedata::get_classlist(); - my $secidx = &Apache::loncoursedata::CL_SECTION(); - my $viewablesec = &viewable_section($permission); - foreach my $student (keys(%{$classlist})) { - my $section = $classlist->{$student}[$secidx]; - if ($viewablesec ne '') { - if ($section ne $viewablesec) { - next; - } else { - $userlist{$student} = $classlist->{$student}; - } + %userlist = %{$classlist}; + if ($env{'form.showrole'} ne 'st') { + my $showroles; + if ($env{'form.showrole'} ne 'Any') { + $showroles = [$env{'form.showrole'}]; } else { - $userlist{$student} = $classlist->{$student}; + $showroles = undef; } + my $withsec = 1; + my $hidepriv = 1; + my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, + \@statuses,$showroles,undef,$withsec,$hidepriv); + &gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, + \%advrolehash,$permission); } - my $showroles; - if ($env{'form.showrole'} ne 'Any') { - $showroles = [$env{'form.showrole'}]; - } else { - $showroles = undef; - } - my $withsec = 1; - my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, - \@statuses,$showroles,undef,$withsec); - &gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, - \%advrolehash,$permission); } else { my (%cstr_roles,%dom_roles); if ($context eq 'author') { @@ -1394,7 +1371,8 @@ sub print_userlist { } elsif ($env{'form.roletype'} eq 'course') { if ($env{'form.coursepick'}) { my %courses = &process_coursepick(); - my %allusers; + my %allusers; + my $hidepriv = 1; foreach my $cid (keys(%courses)) { my ($cnum,$cdom,$cdesc) = &get_course_identity($cid); next if ($cnum eq '' || $cdom eq ''); @@ -1412,7 +1390,7 @@ sub print_userlist { foreach my $type (@statuses) { $access{$type} = $type; } - &Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\@sections,\%users,\%userdata,\%statushash); + &Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\@sections,\%users,\%userdata,\%statushash,$hidepriv); foreach my $user (keys(%userdata)) { next if (ref($userinfo{$user}) eq 'HASH'); foreach my $item ('fullname','id') { @@ -1810,6 +1788,7 @@ sub make_keylist_array { $index->{'email'} = &Apache::loncoursedata::CL_PERMANENTEMAIL(); $index->{'role'} = &Apache::loncoursedata::CL_ROLE(); $index->{'extent'} = &Apache::loncoursedata::CL_EXTENT(); + $index->{'photo'} = &Apache::loncoursedata::CL_PHOTO(); foreach my $key (keys(%{$index})) { $keylist->[$index->{$key}] = $key; } @@ -1877,7 +1856,7 @@ sub show_users_list { $sortby = 'username'; } my $setting = $env{'form.roletype'}; - my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers,$secfilter,$grpfilter); + my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers); if ($context eq 'course') { $cid = $env{'request.course.id'}; ($cnum,$cdom) = &get_course_identity($cid); @@ -1918,7 +1897,19 @@ END my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); my $singconfirm = &mt(' for a single user?'); my $multconfirm = &mt(' for multiple users?'); - my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode); + my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode); + my %lt = &Apache::lonlocal::texthash( + acwi => 'Access will be set to start immediately', + asyo => 'as you did not select an end date in the pop-up window', + accw => 'Access will be set to continue indefinitely', + asyd => 'as you did not select an end date in the pop-up window', + sewi => "Sections will be switched to 'No section'", + ayes => "as you either selected the 'No section' option", + oryo => 'or you did not select a section in the pop-up window', + arol => 'A role with no section will be added', + swbs => 'Sections will be switched to:', + rwba => 'Roles will be added for section(s):', + ); $r->print(<<END); <script type="text/javascript" language="Javascript"> @@ -1944,12 +1935,47 @@ function verify_action (field) { } else { var message = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].text; + var choice = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].value; if (numchecked == 1) { message += singconf; } else { message += multconf; } + if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate') { + var datemsg = ''; + if ((document.studentform.startdate_month.value == '') && + (document.studentform.startdate_day.value == '') && + (document.studentform.startdate_year.value == '')) { + datemsg = "\\n$lt{'acwi'},\\n$lt{'asyo'}.\\n"; + } + if ((document.studentform.enddate_month.value == '') && + (document.studentform.enddate_day.value == '') && + (document.studentform.enddate_year.value == '')) { + datemsg += "\\n$lt{'accw'},\\n$lt{'asyd'}.\\n"; + } + if (datemsg != '') { + message += "\\n"+datemsg; + } + } + if (choice == 'chgsec') { + var rolefilter = document.studentform.showrole.options[document.studentform.showrole.selectedIndex].value; + var retained = document.studentform.retainsec.value; + var secshow = document.studentform.newsecs.value; + if (secshow == '') { + if (rolefilter == 'st' || retained == 0 || retained == "") { + message += "\\n\\n$lt{'sewi'},\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n"; + } else { + message += "\\n\\n$lt{'arol'}\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n"; + } + } else { + if (rolefilter == 'st' || retained == 0 || retained == "") { + message += "\\n\\n$lt{'swbs'} "+secshow+".\\n"; + } else { + message += "\\n\\n$lt{'rwba'} "+secshow+".\\n"; + } + } + } if (confirm(message)) { document.studentform.phase.value = 'bulkchange'; document.studentform.submit(); @@ -2000,6 +2026,7 @@ END 'clicker' => "clicker id", 'photo' => "photo", 'extent' => "extent", + 'go' => "go", 'pr' => "Proceed", 'ca' => "check all", 'ua' => "uncheck all", @@ -2082,10 +2109,10 @@ END $output .= &mt("Click on a username to view the user's personal page.").'<br />'; } if ($actionselect) { - $output .= <<"END"; -$lt{'ac'}: $actionselect <input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /></p> + $output .= <<"END"; +$lt{'ac'}: $actionselect <input type="button" value="$lt{'go'}" onclick="javascript:opendatebrowser(this.form,'studentform','go')" /></p> <p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> -<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /> +<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /><br /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /> END my @allroles; if ($env{'form.showrole'} eq 'Any') { @@ -2235,6 +2262,10 @@ END # Get groups, role, permanent e-mail so we can sort on them if # necessary. foreach my $user (keys(%{$userlist})) { + if ($user eq '' ) { + delete($userlist->{$user}); + next; + } if ($context eq 'domain' && $user eq $env{'request.role.domain'}.'-domainconfig:'.$env{'request.role.domain'}) { delete($userlist->{$user}); next; @@ -2280,6 +2311,13 @@ END } if ($mode ne 'autoenroll') { my $section = $userlist->{$user}->[$index{'section'}]; + if (($env{'request.course.sec'} ne '') && + ($section ne $env{'request.course.sec'})) { + if ($role eq 'st') { + delete($userlist->{$user}); + next; + } + } if ($secfilter eq 'none') { if ($section ne '') { delete($userlist->{$user}); @@ -2302,6 +2340,13 @@ END next; } } + if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { + if (($displayphotos eq 'on') && ($role eq 'st')) { + $userlist->{$user}->[$index{'photo'}] = + &Apache::lonnet::retrievestudentphoto($udom,$uname, + 'gif','thumbnail'); + } + } } } my %emails = &Apache::loncommon::getemails($uname,$udom); @@ -2377,7 +2422,6 @@ END $r->print("<td>$cellentry</td>\n"); } else { $r->print("<td>$rowcount</td>\n"); - $checkval; if ($actionselect) { my $showcheckbox; if ($role =~ /^cr\//) { @@ -2434,11 +2478,8 @@ END $r->print(' <td> </td> '); } if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { - if ($displayphotos eq 'on' && $sdata->[$index{'role'}] eq 'st') { - my $imgurl = - &Apache::lonnet::retrievestudentphoto($in{'domain'},$in{'username'}, - 'gif','thumbnail'); - $r->print(' <td align="right"><a href="javascript:photowindow('."'".&Apache::lonnet::studentphoto($in{'domain'},$in{'username'},'jpg')."'".')"><img src="'.$imgurl.'" border="1"></a></td>'); + if ($displayphotos eq 'on' && $role eq 'st' && $in{'photo'} ne '') { + $r->print(' <td align="right"><a href="javascript:photowindow('."'".&Apache::lonnet::studentphoto($in{'domain'},$in{'username'},'jpg')."'".')"><img src="'.$in{'photo'}.'" border="1"></a></td>'); } else { $r->print(' <td> </td> '); } @@ -2590,7 +2631,7 @@ sub select_actions { } } if ($options) { - $output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'studentform'".')" />'."\n". + $output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'studentform','change'".')" />'."\n". '<option value="" selected="selected">'. &mt('Please select').'</option>'."\n".$options."\n".'</select>'; if ($choices{'dates'}) { @@ -2627,13 +2668,29 @@ sub date_section_javascript { } else { $title = &mt('Date selector'); } + my %nopopup = &Apache::lonlocal::texthash ( + revoke => "Check the boxes for any users for whom roles are to be revoked, and click 'Proceed'", + delete => "Check the boxes for any users for whom roles are to be deleted, and click 'Proceed'", + none => "Choose an action to take for selected users", + ); my $output = ' <script type="text/javascript"> var stdeditbrowser;'."\n"; $output .= <<"ENDONE"; - function opendatebrowser(callingform,formname) { + function opendatebrowser(callingform,formname,calledby) { var bulkaction = callingform.bulkaction.options[callingform.bulkaction.selectedIndex].value; if (bulkaction == 'revoke' || bulkaction == 'delete' || bulkaction == '') { + if (calledby == 'go') { + if (bulkaction == 'revoke') { + alert("$nopopup{'revoke'}"); + } + if (bulkaction == 'delete') { + alert("$nopopup{'delete'}"); + } + if (bulkaction == '') { + alert("$nopopup{'none'}"); + } + } return; } var url = '/adm/createuser?'; @@ -2677,7 +2734,15 @@ function saveselections(formname) { END if ($env{'form.bulkaction'} eq 'chgsec') { $output .= <<"END"; - opener.document.$callingform.retainsec.value = formname.retainsec.value; + if (formname.retainsec.length > 1) { + for (var i=0; i<formname.retainsec.length; i++) { + if (formname.retainsec[i].checked == true) { + opener.document.$callingform.retainsec.value = formname.retainsec[i].value; + } + } + } else { + opener.document.$callingform.retainsec.value = formname.retainsec.value; + } setSections(formname); if (seccheck == 'ok') { opener.document.$callingform.newsecs.value = formname.sections.value; @@ -3339,7 +3404,7 @@ sub upfile_drop_add { ); my $flushc=0; my %student=(); - my (%curr_groups,@sections,@cleansec,@secs,$defaultwarn,$groupwarn); + my (%curr_groups,@sections,@cleansec,$defaultwarn,$groupwarn); my %userchg; if ($context eq 'course' || $setting eq 'course') { if ($context eq 'course') { @@ -3378,10 +3443,10 @@ sub upfile_drop_add { } my (%curr_rules,%got_rules,%alerts); my %customroles = &my_custom_roles(); - my ($custom_ok,@permitted_roles) = - &roles_on_upload($context,%customroles); + my @permitted_roles = &roles_on_upload($context,$setting,%customroles); # Get new users list foreach my $line (@userdata) { + my @secs; my %entries=&Apache::loncommon::record_sep($line); # Determine user name unless (($entries{$fields{'username'}} eq '') || @@ -3415,8 +3480,8 @@ sub upfile_drop_add { my $username = $entries{$fields{'username'}}; if (defined($fields{'sec'})) { if (defined($entries{$fields{'sec'}})) { + $entries{$fields{'sec'}} =~ s/\W//g; my $item = $entries{$fields{'sec'}}; - $item =~ s/(\s+$|^\s+)//g; if ($item eq "none" || $item eq 'all') { $r->print('<br />'.&mt('<b>[_1]</b>: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a reserved word.',$username,$fname,$mname,$lname,$gen,$item)); next; @@ -3475,13 +3540,10 @@ sub upfile_drop_add { my $role = ''; if (defined($fields{'role'})) { if ($entries{$fields{'role'}}) { - if (grep(/^\Q$entries{$fields{'role'}}\E$/,@permitted_roles)) { - $role=$entries{$fields{'role'}}; - $role =~ s/(\s+$|^\s+)//g; - } - if ($custom_ok) { - if ($customroles{$role}) { - $role = 'cr_'.$env{'user.domain'}.'_'.$env{'user.name'}.'_'.$entries{$fields{'role'}}; + $entries{$fields{'role'}} =~ s/(\s+$|^\s+)//g; + if ($entries{$fields{'role'}} ne '') { + if (grep(/^\Q$entries{$fields{'role'}}\E$/,@permitted_roles)) { + $role = $entries{$fields{'role'}}; } } if ($role eq '') { @@ -3576,59 +3638,60 @@ sub upfile_drop_add { my $multiple = 0; my ($userresult,$authresult,$roleresult,$idresult); my (%userres,%authres,%roleres,%idres); + my $singlesec = ''; if ($role eq 'st') { my $sec; - if ($cid) { - if (@secs > 0) { - $sec = $secs[0]; - } - &modifystudent($domain,$username,$cid,$sec, - $desiredhost); - $roleresult = - &Apache::lonnet::modifystudent - ($domain,$username,$id,$amode,$password, - $fname,$mname,$lname,$gen,$sec,$enddate, - $startdate,$env{'form.forceid'}, - $desiredhost,$email,'manual','',$cid); - $userresult = $roleresult; + if (@secs > 0) { + $sec = $secs[0]; } + &modifystudent($domain,$username,$cid,$sec, + $desiredhost); + $roleresult = + &Apache::lonnet::modifystudent + ($domain,$username,$id,$amode,$password, + $fname,$mname,$lname,$gen,$sec,$enddate, + $startdate,$env{'form.forceid'}, + $desiredhost,$email,'manual','',$cid); + $userresult = $roleresult; } else { - if (($context eq 'course') || - (grep(/^\Q$role\E$/,@courseroles))) { - if (!$cid) { - next; - } - } - my $singlesec; - if ((grep(/^\Q$role\E$/,@courseroles)) && ($role ne 'cc')) { - if (@secs > 1) { - $multiple = 1; - foreach my $sec (@secs) { - ($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) = - &modifyuserrole($context,$setting, - $changeauth,$cid,$domain,$username, - $id,$amode,$password,$fname, - $mname,$lname,$gen,$sec, - $env{'form.forceid'},$desiredhost, - $email,$role,$enddate,$startdate,$checkid); + if ($role ne '') { + if ($context eq 'course' || $setting eq 'course') { + if ($customroles{$role}) { + $role = 'cr_'.$env{'user.domain'}.'_'. + $env{'user.name'}.'_'.$role; + } + if ($role ne 'cc') { + if (@secs > 1) { + $multiple = 1; + foreach my $sec (@secs) { + ($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) = + &modifyuserrole($context,$setting, + $changeauth,$cid,$domain,$username, + $id,$amode,$password,$fname, + $mname,$lname,$gen,$sec, + $env{'form.forceid'},$desiredhost, + $email,$role,$enddate, + $startdate,$checkid); + } + } elsif (@secs > 0) { + $singlesec = $secs[0]; + } } - } elsif (@secs > 0) { - $singlesec = $secs[0]; } } if (!$multiple) { ($userresult,$authresult,$roleresult,$idresult) = &modifyuserrole($context,$setting, - $changeauth,$cid,$domain,$username, - $id,$amode,$password,$fname, - $mname,$lname,$gen,$singlesec, - $env{'form.forceid'},$desiredhost, - $email,$role,$enddate,$startdate,$checkid); + $changeauth,$cid,$domain,$username, + $id,$amode,$password,$fname, + $mname,$lname,$gen,$singlesec, + $env{'form.forceid'},$desiredhost, + $email,$role,$enddate,$startdate,$checkid); } } if ($multiple) { foreach my $sec (sort(keys(%userres))) { - $flushc = + $flushc = &user_change_result($r,$userres{$sec},$authres{$sec}, $roleres{$sec},$idres{$sec},\%counts,$flushc, $username,\%userchg); @@ -3951,7 +4014,11 @@ sub update_user_list { if (@newsecs == 0) { $result = &mt('No change in section assignment (none)'); $nochg = 1; - } + } else { + $revresult = + &Apache::lonnet::revokerole($udom,$uname, + $scope,$role); + } } else { if (@newsecs > 0) { if (grep(/^\Q$sec\E$/,@newsecs)) { @@ -4170,7 +4237,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.'"'; @@ -4178,12 +4245,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 { @@ -4478,24 +4559,17 @@ sub authorpriv { } sub roles_on_upload { - my ($context,%customroles) = @_; + my ($context,$setting,%customroles) = @_; my (@possible_roles,@permitted_roles); - if ($context eq 'domain') { - @possible_roles = &curr_role_permissions($context,undef,1); - push(@possible_roles,&curr_role_permissions($context,'course',1)); - } else { - @possible_roles = &curr_role_permissions($context,undef,1); - } - my $custom_ok = 0; + @possible_roles = &curr_role_permissions($context,$setting,1); foreach my $role (@possible_roles) { if ($role eq 'cr') { - $custom_ok = 1; push(@permitted_roles,keys(%customroles)); } else { push(@permitted_roles,$role); } } - return ($custom_ok,@permitted_roles); + return @permitted_roles; } sub get_course_identity { @@ -4520,15 +4594,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 != "") { @@ -4613,9 +4691,11 @@ SCRIPTTOP } } } - document.$formname.submit(); + var authcheck = auth_check(); + if (authcheck == 'ok') { + document.$formname.submit(); + } } - ENDSCRIPT } else { $dc_setcourse_code .= " @@ -4636,6 +4716,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<document.$formname.login.length; i++) { + if (document.$formname.login[i].checked == true) { + loginpicked = 1; + logintype = document.$formname.login[i].value; + } + } + if (loginpicked == 0) { + alert("$alerts{'authen'}"); + return; + } + } + } else { + logintype = document.$formname.login.value; + } + if (logintype == 'nochange') { + return 'ok'; + } + var argpicked = document.$formname.elements[logintype+'arg'].value; + if ((argpicked == null) || (argpicked == '') || (typeof argpicked == 'undefined')) { + var alertmsg = ''; + switch (logintype) { + case 'krb': + alertmsg = '$alerts{'krb'}'; + break; + case 'int': + alertmsg = '$alerts{'ipass'}'; + case 'fsys': + alertmsg = '$alerts{'ipass'}'; + break; + case 'loc': + alertmsg = ''; + break; + default: + alertmsg = ''; + } + if (alertmsg != '') { + alert(alertmsg); + return; + } + } + $finish +} +ENDSCRIPT } sub sectioncheck_alerts { @@ -4657,5 +4797,15 @@ sub sectioncheck_alerts { return %alerts; } +sub authcheck_alerts { + my %alerts = + &Apache::lonlocal::texthash( + authen => '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;