--- loncom/interface/lonuserutils.pm 2010/11/15 17:37:47 1.109.2.9 +++ loncom/interface/lonuserutils.pm 2010/01/14 18:15:31 1.112 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.109.2.9 2010/11/15 17:37:47 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.112 2010/01/14 18:15:31 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,7 +36,6 @@ use Apache::loncommon(); use Apache::lonhtmlcommon; use Apache::lonlocal; use Apache::longroup; -use Apache::lonnavmaps; use LONCAPA qw(:DEFAULT :match); ############################################################### @@ -296,8 +295,7 @@ sub hidden_input { } sub print_upload_manager_header { - my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype,$formname, - $can_assign)=@_; + my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype)=@_; my $javascript; # if (! exists($env{'form.upfile_associate'})) { @@ -311,9 +309,9 @@ sub print_upload_manager_header { } } if ($env{'form.upfile_associate'} eq 'reverse') { - $javascript=&upload_manager_javascript_reverse_associate($can_assign); + $javascript=&upload_manager_javascript_reverse_associate(); } else { - $javascript=&upload_manager_javascript_forward_associate($can_assign); + $javascript=&upload_manager_javascript_forward_associate(); } # # Deal with restored settings @@ -327,32 +325,9 @@ sub print_upload_manager_header { $password_choice = 'int'; } # - my ($sectionjs,$groupslist); + my $groupslist; if ($context eq 'course') { $groupslist = &get_groupslist(); - if ($env{'form.context'} eq 'requestcrs') { - $sectionjs = <<"ENDJS"; - -function toggleSectionsDefault() { - var usingsecs; - if (document.$formname.usesection.length > 1) { - for (var i=0; i<document.$formname.usesection.length; i++) { - if (document.$formname.usesection[i].checked) { - usingsecs = document.$formname.usesection[i].value; - } - } - } - if (usingsecs == 1) { - document.getElementById('defaultsec').style.display="block"; - } else { - document.getElementById('defaultsec').style.display="none"; - document.$formname.newsec.value = ""; - document.$formname.sections.value = ""; - } - return; -} -ENDJS - } } my $javascript_validations = &javascript_validations('upload',$krbdefdom,$password_choice,undef, @@ -365,17 +340,14 @@ ENDJS ."</p>\n"); $r->print('<div class="LC_left_float"><h3>'. &mt('Identify fields in uploaded list')."</h3>\n"); - $r->print(&mt('Enter as many fields as you can.').'<br />'. - &mt('The system will inform you and bring you back to this page,'). - '<br />'.&mt('if the data selected are insufficient to add users.')."<br />\n"); + $r->print(&mt('Enter as many fields as you can.<br /> The system will inform you and bring you back to this page, <br /> if the data selected are insufficient to add users.')."<br />\n"); $r->print(&hidden_input('action','upload'). &hidden_input('state','got_file'). &hidden_input('associate',''). &hidden_input('datatoken',$datatoken). &hidden_input('fileupload',$env{'form.fileupload'}). &hidden_input('upfiletype',$env{'form.upfiletype'}). - &hidden_input('upfile_associate',$env{'form.upfile_associate'}). - &hidden_input('context',$env{'form.context'})); + &hidden_input('upfile_associate',$env{'form.upfile_associate'})); $r->print('<br /><label><input type="checkbox" name="noFirstLine"'.$checked.' />'. &mt('Ignore First Line').'</label><br />'); $r->print('<br /><input type="button" value="'.&mt('Reverse Association').'" '. @@ -384,7 +356,7 @@ ENDJS $r->print("<br /><br />\n". '<script type="text/javascript" language="Javascript">'."\n". '// <![CDATA['."\n". - $javascript."\n".$javascript_validations."\n".$sectionjs."\n". + $javascript."\n".$javascript_validations."\n". '// ]]>'."\n". '</script>'); } @@ -415,13 +387,9 @@ sub javascript_validations { if ($context eq 'course') { if ($env{'request.course.sec'} eq '') { $setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');'; - if ($env{'form.context'} eq 'requestcrs') { - $setsections_js = &newsections_javascript($param{'formname'}); - } else { - $setsections_js = - &setsections_javascript($param{'formname'},$groupslist, - $mode,'',$crstype); - } + $setsections_js = + &setsections_javascript($param{'formname'},$groupslist, + $mode,'',$crstype); } else { $setsection_call = "'ok'"; } @@ -549,9 +517,7 @@ END END } else { $section_checks = §ion_check_js(); - - unless ($env{'form.context'} eq 'requestcrs') { - $optional_checks = (<<END); + $optional_checks = (<<END); var message=''; if (foundname==0) { message='$alert{'name'}'; @@ -566,7 +532,6 @@ END if (message!='') { message+='\\n'; } - message+='$alert{'section'}'; } if (foundemail==0) { if (message!='') { @@ -587,7 +552,6 @@ END message+='$alert{'domain'}'; } END - } if (($mode eq 'upload') && ($context eq 'domain')) { $optional_checks .= (<<END); @@ -599,14 +563,7 @@ END } END } - if ($env{'form.context'} eq 'requestcrs') { - $optional_checks .= (<<END); - vf.state.value='enrolling'; - $finish -} -END - } else { - $optional_checks .= (<<END); + $optional_checks .= (<<END); if (message!='') { message+= '\\n$alert{'continue'}'; @@ -620,7 +577,6 @@ END } } END - } } my $result = $function_name.$auth_checks.$optional_checks."\n". $section_checks.$authheader; @@ -629,46 +585,6 @@ END ############################################################### ############################################################### sub upload_manager_javascript_forward_associate { - my ($can_assign) = @_; - my ($auth_update,$numbuttons,$argreset); - if (ref($can_assign) eq 'HASH') { - if ($can_assign->{'krb4'} || $can_assign->{'krb5'}) { - $argreset .= " vf.krbarg.value='';\n"; - $numbuttons ++ ; - } - if ($can_assign->{'int'}) { - $argreset .= " vf.intarg.value='';\n"; - $numbuttons ++; - } - if ($can_assign->{'loc'}) { - $argreset .= " vf.locarg.value='';\n"; - $numbuttons ++; - } - if (!$can_assign->{'int'}) { - my $warning = &mt('You may not specify an initial password for each user, as this is only available when new users use LON-CAPA internal authentication.\n'). - &mt('Your current role does not have rights to create users with that authentication type.'); - $auth_update = <<"END"; - // Currently the initial password field is only supported for internal auth - // (see bug 6368). - if (nw==2) { - eval('vf.f'+tf+'.selectedIndex=0;') - alert('$warning'); - } -END - } elsif ($numbuttons > 1) { - $auth_update = <<"END"; - // If we set the password, make the password form below correspond to - // the new value. - if (nw==2) { - changed_radio('int',document.studentform); - set_auth_radio_buttons('int',document.studentform); -$argreset - } - -END - } - } - return(<<ENDPICK); function verify(vf,sec_caller) { var founduname=0; @@ -684,10 +600,10 @@ function verify(vf,sec_caller) { for (i=0;i<=vf.nfields.value;i++) { tw=eval('vf.f'+i+'.selectedIndex'); if (tw==1) { founduname=1; } - if (tw==2) { foundpwd=1; } - if ((tw>=3) && (tw<=7)) { foundname=1; } - if (tw==8) { foundid=1; } - if (tw==9) { foundsec=1; } + if ((tw>=2) && (tw<=6)) { foundname=1; } + if (tw==7) { foundid=1; } + if (tw==8) { foundsec=1; } + if (tw==9) { foundpwd=1; } if (tw==10) { foundemail=1; } if (tw==11) { foundrole=1; } if (tw==12) { founddomain=1; } @@ -704,14 +620,14 @@ function verify(vf,sec_caller) { // // 0 = none // 1 = username -// 2 = ipwd (password) -// 3 = names (lastname, firstnames) -// 4 = fname (firstname) -// 5 = mname (middlename) -// 6 = lname (lastname) -// 7 = gen (generation) -// 8 = id -// 9 = section +// 2 = names (lastname, firstnames) +// 3 = fname (firstname) +// 4 = mname (middlename) +// 5 = lname (lastname) +// 6 = gen (generation) +// 7 = id +// 8 = section +// 9 = ipwd (password) // 10 = email address // 11 = role // 12 = domain @@ -727,31 +643,39 @@ function flip(vf,tf) { } } // If we set this to 'lastname, firstnames', clear out all the ones - // set to 'fname','mname','lname','gen' (4,5,6,7) currently. - if (nw==3) { + // set to 'fname','mname','lname','gen' (3,4,5,6) currently. + if (nw==2) { for (i=0;i<=vf.nfields.value;i++) { - if ((eval('vf.f'+i+'.selectedIndex')>=4) && - (eval('vf.f'+i+'.selectedIndex')<=7)) { + if ((eval('vf.f'+i+'.selectedIndex')>=3) && + (eval('vf.f'+i+'.selectedIndex')<=6)) { eval('vf.f'+i+'.selectedIndex=0;') } } } - // If we set this to one of 'fname','mname','lname','gen' (4,5,6,7), - // clear out any that are set to 'lastname, firstnames' (3) - if ((nw>=4) && (nw<=7)) { + // If we set this to one of 'fname','mname','lname','gen' (3,4,5,6), + // clear out any that are set to 'lastname, firstnames' (2) + if ((nw>=3) && (nw<=6)) { for (i=0;i<=vf.nfields.value;i++) { - if (eval('vf.f'+i+'.selectedIndex')==3) { + if (eval('vf.f'+i+'.selectedIndex')==2) { eval('vf.f'+i+'.selectedIndex=0;') } } } - $auth_update + // If we set the password, make the password form below correspond to + // the new value. + if (nw==9) { + changed_radio('int',document.studentform); + set_auth_radio_buttons('int',document.studentform); + vf.intarg.value=''; + vf.krbarg.value=''; + vf.locarg.value=''; + } } function clearpwd(vf) { var i; for (i=0;i<=vf.nfields.value;i++) { - if (eval('vf.f'+i+'.selectedIndex')==2) { + if (eval('vf.f'+i+'.selectedIndex')==9) { eval('vf.f'+i+'.selectedIndex=0;') } } @@ -763,45 +687,6 @@ ENDPICK ############################################################### ############################################################### sub upload_manager_javascript_reverse_associate { - my ($can_assign) = @_; - my ($auth_update,$numbuttons,$argreset); - if (ref($can_assign) eq 'HASH') { - if ($can_assign->{'krb4'} || $can_assign->{'krb5'}) { - $argreset .= " vf.krbarg.value='';\n"; - $numbuttons ++ ; - } - if ($can_assign->{'int'}) { - $argreset .= " vf.intarg.value='';\n"; - $numbuttons ++; - } - if ($can_assign->{'loc'}) { - $argreset .= " vf.locarg.value='';\n"; - $numbuttons ++; - } - if (!$can_assign->{'int'}) { - my $warning = &mt('You may not specify an initial password, as this is only available when new users use LON-CAPA internal authentication.\n'). - &mt('Your current role does not have rights to create users with that authentication type.'); - $auth_update = <<"END"; - // Currently the initial password field is only supported for internal auth - // (see bug 6368). - if (tf==1 && nw!=0) { - eval('vf.f'+tf+'.selectedIndex=0;') - alert('$warning'); - } -END - } elsif ($numbuttons > 1) { - $auth_update = <<"END"; - // initial password specified, pick internal authentication - if (tf==1 && nw!=0) { - changed_radio('int',document.studentform); - set_auth_radio_buttons('int',document.studentform); -$argreset - } - -END - } - } - return(<<ENDPICK); function verify(vf,sec_caller) { var founduname=0; @@ -809,7 +694,6 @@ function verify(vf,sec_caller) { var foundname=0; var foundid=0; var foundsec=0; - var foundemail=0; var foundrole=0; var founddomain=0; var foundinststatus=0; @@ -817,39 +701,45 @@ function verify(vf,sec_caller) { for (i=0;i<=vf.nfields.value;i++) { tw=eval('vf.f'+i+'.selectedIndex'); if (i==0 && tw!=0) { founduname=1; } - if (i==1 && tw!=0) { foundpwd=1; } - if (((i>=2) && (i<=6)) && tw!=0 ) { foundname=1; } - if (i==7 && tw!=0) { foundid=1; } - if (i==8 && tw!=0) { foundsec=1; } - if (i==9 && tw!=0) { foundemail=1; } - if (i==10 && tw!=0) { foundrole=1; } - if (i==11 && tw!=0) { founddomain=1; } - if (i==12 && tw!=0) { foundinstatus=1; } + if (((i>=1) && (i<=5)) && tw!=0 ) { foundname=1; } + if (i==6 && tw!=0) { foundid=1; } + if (i==7 && tw!=0) { foundsec=1; } + if (i==8 && tw!=0) { foundpwd=1; } + if (i==9 && tw!=0) { foundrole=1; } + if (i==10 && tw!=0) { founddomain=1; } + if (i==13 && tw!=0) { foundinstatus=1; } } - verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail,foundrole,founddomain,foundinststatus); + verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundrole,founddomain,foundinststatus); } function flip(vf,tf) { var nw=eval('vf.f'+tf+'.selectedIndex'); var i; // picked the all one name field, reset the other name ones to blank - if (tf==2 && nw!=0) { - for (i=3;i<=6;i++) { + if (tf==1 && nw!=0) { + for (i=2;i<=5;i++) { eval('vf.f'+i+'.selectedIndex=0;') } } //picked one of the piecewise name fields, reset the all in //one field to blank - if ((tf>=3) && (tf<=6) && (nw!=0)) { - eval('vf.f2.selectedIndex=0;') + if ((tf>=2) && (tf<=5) && (nw!=0)) { + eval('vf.f1.selectedIndex=0;') + } + // intial password specified, pick internal authentication + if (tf==8 && nw!=0) { + changed_radio('int',document.studentform); + set_auth_radio_buttons('int',document.studentform); + vf.krbarg.value=''; + vf.intarg.value=''; + vf.locarg.value=''; } - $auth_update } function clearpwd(vf) { var i; - if (eval('vf.f1.selectedIndex')!=0) { - eval('vf.f1.selectedIndex=0;') + if (eval('vf.f8.selectedIndex')!=0) { + eval('vf.f8.selectedIndex=0;') } } ENDPICK @@ -872,9 +762,6 @@ sub print_upload_manager_footer { $env{'form.ipwd_choice'} ne '') { $param{'curr_authtype'} = 'int'; } - if ($env{'form.context'} eq 'requestcrs') { - $param{'context'} = $env{'form.context'}; - } my $krbform = &Apache::loncommon::authform_kerberos(%param); my $intform = &Apache::loncommon::authform_internal(%param); my $locform = &Apache::loncommon::authform_local(%param); @@ -887,11 +774,8 @@ sub print_upload_manager_footer { $Str .= '<h3>'.&mt('Options').'</h3>' .&Apache::lonhtmlcommon::start_pick_box(); - if ($env{'form.context'} eq 'requestcrs') { - $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default password')); - } else { - $Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type')); - } + + $Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type')); if ($context eq 'domain') { $Str .= '<p>' .&mt('Change authentication for existing users in domain "[_1]" to these settings?' @@ -905,17 +789,12 @@ sub print_upload_manager_footer { .'</span></p>'; } else { $Str .= '<p class="LC_info">'."\n". - &mt('This will not take effect if the user already exists.'); - my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($defdom); - if ($authnum > 1) { - $Str .= &Apache::loncommon::help_open_topic('Auth_Options'); - } - $Str .= "</p>\n"; + &mt('This will not take effect if the user already exists.'). + &Apache::loncommon::help_open_topic('Auth_Options'). + "</p>\n"; } $Str .= &set_login($defdom,$krbform,$intform,$locform); - if ($env{'form.context'} eq 'requestcrs') { - $Str .= '<input type="hidden" name="defaultdomain" value="gcitest" />'; - } + my ($home_server_pick,$numlib) = &Apache::loncommon::home_server_form_item($defdom,'lcserver', 'default','hide'); @@ -931,14 +810,14 @@ sub print_upload_manager_footer { &Apache::lonhtmlcommon::row_closure(); } - unless ($env{'form.context'} eq 'requestcrs') { - $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain')) - .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1) - .&Apache::lonhtmlcommon::row_closure() - .&Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates')) - ."<p>\n".$date_table."</p>\n" - .&Apache::lonhtmlcommon::row_closure(); - } + $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain')) + .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1) + .&Apache::lonhtmlcommon::row_closure(); + + $Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates')) + ."<p>\n".$date_table."</p>\n" + .&Apache::lonhtmlcommon::row_closure(); + if ($context eq 'domain') { $Str .= &Apache::lonhtmlcommon::row_title( &mt('Settings for assigning roles')) @@ -958,22 +837,9 @@ sub print_upload_manager_footer { &mt('Default role')) .&mt('Choose the role to assign to users without a value specified in the uploaded file.') } elsif ($context eq 'course') { - if ($env{'form.context'} eq 'requestcrs') { - $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default section')). - &mt('Students can be assigned to different sections.').'<br />'. - &mt('Will you be using sections?').' '. - '<input type="radio" name="usesection" value="1" '. - 'onclick="javascript:toggleSectionsDefault()" />'. - ' '.&mt('Yes').'</label>'. - ' <label>'. - '<input type="radio" name="usesection" value="0" checked="checked" '. - 'onclick="javascript:toggleSectionsDefault()" />'. - ' '.&mt('No').'</label>'; - } else { - $Str .= &Apache::lonhtmlcommon::row_title( + $Str .= &Apache::lonhtmlcommon::row_title( &mt('Default role and section')) - .&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file.'); - } + .&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file.'); } else { $Str .= &Apache::lonhtmlcommon::row_title( &mt('Default role and/or section(s)')) @@ -997,22 +863,11 @@ sub print_upload_manager_footer { } } else { my ($cnum,$cdom) = &get_course_identity(); - my ($rowtitle,$closure); - if ($env{'form.context'} eq 'requestcrs') { - $closure = 1; - $rowtitle = &mt('default section name (letters/numbers only)'); - } else { - $rowtitle = &mt('section'); - } + my $rowtitle = &mt('section'); my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle, - $permission,$context,'upload',$crstype, - $env{'form.context'}). - &Apache::lonhtmlcommon::row_closure($closure); - if ($env{'form.context'} eq 'requestcrs') { - $Str .= '<div id ="defaultsec" style="display: none" />'.$secbox.'</div>'; - } else { - $Str .= $secbox; - } + $permission,$context,'upload',$crstype); + $Str .= $secbox + .&Apache::lonhtmlcommon::row_closure(); my %lt; if ($crstype eq 'Community') { %lt = &Apache::lonlocal::texthash ( @@ -1025,19 +880,15 @@ sub print_upload_manager_footer { stus => 'Students selected from this list can be dropped.' ); } - unless ($env{'form.context'} eq 'requestcrs') { - $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update')) - .'<label><input type="checkbox" name="fullup" value="yes" />' - .' '.$lt{'disp'} - .'</label><br />' - .$lt{'stus'} - .&Apache::lonhtmlcommon::row_closure(); - } + $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update')) + .'<label><input type="checkbox" name="fullup" value="yes" />' + .' '.$lt{'disp'} + .'</label><br />' + .$lt{'stus'} + .&Apache::lonhtmlcommon::row_closure(); } if ($context eq 'course' || $context eq 'domain') { - unless ($env{'form.context'} eq 'requestcrs') { - $Str .= &forceid_change($context); - } + $Str .= &forceid_change($context); } $Str .= &Apache::lonhtmlcommon::end_pick_box(); @@ -1081,7 +932,7 @@ sub forceid_change { ############################################################### ############################################################### sub print_upload_manager_form { - my ($r,$context,$permission,$crstype,$formname) = @_; + my ($r,$context,$permission,$crstype) = @_; my $firstLine; my $datatoken; if (!$env{'form.datatoken'}) { @@ -1127,15 +978,13 @@ sub print_upload_manager_form { my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($defdom); # - my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($defdom); &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context, - $permission,$crstype,$formname,\%can_assign); + $permission,$crstype); my $i; my $keyfields; if ($total>=0) { my @field= (['username',&mt('Username'), $env{'form.username_choice'}], - ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}], ['names',&mt('Last Name, First Names'),$env{'form.names_choice'}], ['fname',&mt('First Name'), $env{'form.fname_choice'}], ['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}], @@ -1143,6 +992,7 @@ sub print_upload_manager_form { ['gen', &mt('Generation'), $env{'form.gen_choice'}], ['id', &mt('Student/Employee ID'),$env{'form.id_choice'}], ['sec', &mt('Section'), $env{'form.sec_choice'}], + ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}], ['email',&mt('E-mail Address'), $env{'form.email_choice'}], ['role',&mt('Role'), $env{'form.role_choice'}], ['domain',&mt('Domain'), $env{'form.domain_choice'}], @@ -1335,10 +1185,8 @@ sub default_role_selector { 'exs' => "Existing sections", 'new' => "New section", ); - $options = '<select name="defaultrole">'."\n"; - unless (($context eq 'course') && (&Apache::loncommon::needs_gci_custom())) { - $options .= ' <option value="">'.&mt('Please select').'</option>'."\n"; - } + $options = '<select name="defaultrole">'."\n". + ' <option value="">'.&mt('Please select').'</option>'."\n"; if ($context eq 'course') { $options .= &default_course_roles($context,$checkpriv,$crstype,%customroles); } elsif ($context eq 'author') { @@ -1600,8 +1448,12 @@ sub print_userlist { } if (!(($context eq 'domain') && (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) { - $r->print(' '.&list_submit_button(&mt('Update Display')). - "\n</p>\n"); + $r->print( + "\n</p>\n" + .'<p>' + .&list_submit_button(&mt('Update Display')) + ."</p>\n" + ); } my ($indexhash,$keylist) = &make_keylist_array(); my (%userlist,%userinfo,$clearcoursepick); @@ -1840,7 +1692,7 @@ sub role_filter { $role_select .= '</select>'; $output = '<label><span class="LC_nobreak">' .&mt('Role: [_1]',$role_select) - .'</span></label>'; + .'</span></label> '; } return $output; } @@ -1880,7 +1732,7 @@ sub section_group_filter { } if (@options > 0) { my $currsel; - $markup = '<select name="'.$name{$item}.'" />'."\n"; + $markup = '<select name="'.$name{$item}.'">'."\n"; foreach my $option ('all','none',@options) { $currsel = ''; if ($env{'form.'.$name{$item}} eq $option) { @@ -1895,7 +1747,9 @@ sub section_group_filter { $markup .= '</option>'."\n"; } $markup .= '</select>'."\n"; - $output .= (' 'x3).'<label>'.$title{$item}.': '.$markup.'</label>'; + $output .= (' 'x3).'<span class="LC_nobreak">' + .'<label>'.$title{$item}.': '.$markup.'</label>' + .'</span> '; } } return $output; @@ -2245,7 +2099,6 @@ sub process_date_info { sub show_users_list { my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname)=@_; - my $custommenu; if ($formname eq '') { $formname = 'studentform'; } @@ -2270,17 +2123,11 @@ sub show_users_list { $sortby = 'username'; } my $setting = $env{'form.roletype'}; - my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers,$crstype, - $clickersupport,$displaygroups); + my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers,$crstype); if ($context eq 'course') { $cid = $env{'request.course.id'}; $crstype = &Apache::loncommon::course_type(); ($cnum,$cdom) = &get_course_identity($cid); - $custommenu = &Apache::loncommon::needs_gci_custom(); - unless ($custommenu) { - $clickersupport = 1; - $displaygroups = 1; - } ($classgroups) = &Apache::loncoursedata::get_group_memberships( $userlist,$keylist,$cdom,$cnum); if ($mode eq 'autoenroll') { @@ -2401,8 +2248,6 @@ END 'role' => "role", 'type' => "enroll type/action", 'email' => "e-mail address", - 'lastlogin' => "last login", - 'submissions' => "test status", 'photo' => "photo", 'extent' => "extent", 'pr' => "Proceed", @@ -2449,19 +2294,9 @@ END push(@cols,'status'); } if ($context eq 'course') { - if ($displaygroups) { - push(@cols,'groups'); - } + push(@cols,'groups'); } push(@cols,'email'); - if ($context eq 'course') { - if ($custommenu) { - push(@cols,'lastlogin'); - if (($env{'form.showrole'} eq 'Any') || ($env{'form.showrole'} eq 'st')) { - push(@cols,'submissions'); - } - } - } } my $rolefilter = $env{'form.showrole'}; @@ -2568,7 +2403,7 @@ END if ($env{'form.userwin'}) { $checkwin = ' checked="checked"'; } - $output .= '</td><td valign="top"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>'; + $output .= '</td><td valign="top" style="border-left: 1px solid;"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>'; } $output .= "\n".'<div class="LC_clear_float_footer"> </div>'."\n". &Apache::loncommon::start_data_table(). @@ -2584,32 +2419,27 @@ END } } foreach my $item (@cols) { - if (grep(/^\Q$item\E$/,@sortable)) { - $output .= "<th><a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\">$lt{$item}</a></th>\n"; - } else { - $output .= "<th>$lt{$item}</th>\n"; - } + $output .= "<th><a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\">$lt{$item}</a></th>\n"; } my %role_types = &role_type_names(); if ($context eq 'course' && $mode ne 'autoenroll') { if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') { # Clicker display on or off? - if ($clickersupport) { - my %clicker_options = ( - 'on' => 'Show', - 'off' => 'Hide', - ); - my $clickerchg = 'on'; - if ($displayclickers eq 'on') { - $clickerchg = 'off'; - } - $output .= ' <th>'."\n".' ' - .&mt('[_1]'.$clicker_options{$clickerchg}.'[_2] clicker id' + my %clicker_options = ( + 'on' => 'Show', + 'off' => 'Hide', + ); + my $clickerchg = 'on'; + if ($displayclickers eq 'on') { + $clickerchg = 'off'; + } + $output .= ' <th>'."\n".' ' + .&mt('[_1]'.$clicker_options{$clickerchg}.'[_2] clicker id' ,'<a href="javascript:document.'.$formname.'.displayclickers.value=' ."'".$clickerchg."'".';document.'.$formname.'.submit();">' ,'</a>') ."\n".' </th>'."\n"; - } + # Photo display on or off? if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { my %photo_options = &Apache::lonlocal::texthash( @@ -2648,18 +2478,14 @@ END $CSVfile = undef; } # - if ($clickersupport) { - push @cols,'clicker'; - } + push @cols,'clicker'; # Write headers and data to file print $CSVfile '"'.$results_description.'"'."\n"; print $CSVfile '"'.join('","',map { &Apache::loncommon::csv_translate($lt{$_}) } (@cols))."\"\n"; } elsif ($mode eq 'excel') { - if ($clickersupport) { - push @cols,'clicker'; - } + push @cols,'clicker'; # Create the excel spreadsheet ($excel_workbook,$excel_filename,$format) = &Apache::loncommon::create_workbook($r); @@ -2695,40 +2521,6 @@ END Future => 'Future', Expired => 'Expired', ); - # If this is for a single course get last course "log-in" and submissions. - my (%crslogins,%stusubmissions,%elapsed,$numparts,%nummultipart,$multipart); - my $now = time; - if ($context eq 'course') { - if ($custommenu) { - %crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum); - %stusubmissions=&Apache::lonnet::dump('nohist_submissiontracker',$cdom,$cnum); - %elapsed = &Apache::lonlocal::texthash( - -1 => 'more than a month ago', - 2592000 => 'within last 30 days', - 604800 => 'within last 7 days', - 86400 => 'within last 24 hours', - ); - my $navmap = Apache::lonnavmaps::navmap->new(); - if (defined($navmap)) { - my @allres=$navmap->retrieveResources('/uploaded/'.$cdom.'/'.$cnum.'/default_1261144274.sequence',sub { $_[0]->is_problem() },0); - foreach my $resource (@allres) { - my @parts = $resource->parts(); - my $count = scalar(@parts); - if ($count > 1) { - $nummultipart{$count} ++; - } - $numparts += $count; - } - if (keys(%nummultipart) > 0) { - $multipart = '<br />'.'contains'; - foreach my $key (sort {$a <=> $b} keys(%nummultipart)) { - $multipart .= " nummultipart{$key} multipart questions (with $key parts)"; - } - } - } - } - } - # Get groups, role, permanent e-mail so we can sort on them if # necessary. foreach my $user (keys(%{$userlist})) { @@ -2875,34 +2667,6 @@ END } else { $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'}); } - if ($context eq 'course') { - if ($custommenu) { - my $lastlogin = $crslogins{$in{'username'}.':'.$in{'domain'}.':'.$in{'section'}.':'.$role}; - if ($lastlogin ne '') { - my $sincelogin = $now - $lastlogin; - if ($sincelogin < 86400) { - $in{'lastlogin'} = $elapsed{'86400'}; - } elsif ($sincelogin < 604800) { - $in{'lastlogin'} = $elapsed{'604800'}; - } elsif ($sincelogin < 2592000 ) { - $in{'lastlogin'} = $elapsed{'2592000'}; - } else { - $in{'lastlogin'} = $elapsed{'-1'}; - } - } - } - if ($role eq 'st') { - my $numsub = $stusubmissions{$in{'username'}.':'.$in{'domain'}."\0attempts"} + - $stusubmissions{$in{'username'}.':'.$in{'domain'}."\0surveysubs"}; - if (!$numsub) { - $in{'submissions'} = 'not attempted'; - } elsif ($numsub < $numparts) { - $in{'submissions'} = 'incomplete ('.$numsub.'/'.$numparts.')'; - } else { - $in{'submissions'} = 'completed'; - } - } - } if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { $r->print(&Apache::loncommon::start_data_table_row()); my $checkval; @@ -2976,27 +2740,19 @@ END $showitem = $ltstatus{$in{$item}}; } $r->print('<td>'.$showitem.'</td>'."\n"); - } elsif ($item eq 'submissions') { - if ($in{$item} =~ /^incomplete/) { - $r->print('<td>'.$in{$item}.$multipart.'</td>'); - } else { - $r->print('<td>'.$in{$item}.'</td>'."\n"); - } } else { $r->print('<td>'.$in{$item}.'</td>'."\n"); } } if (($context eq 'course') && ($mode ne 'autoenroll')) { if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') { - if ($clickersupport) { - if ($displayclickers eq 'on') { - my $clickers = + if ($displayclickers eq 'on') { + my $clickers = (&Apache::lonnet::userenvironment($in{'domain'},$in{'username'},'clickers'))[1]; - if ($clickers!~/\w/) { $clickers='-'; } - $r->print('<td>'.$clickers.'</td>'); - } else { - $r->print(' <td> </td> '); - } + if ($clickers!~/\w/) { $clickers='-'; } + $r->print('<td>'.$clickers.'</td>'); + } else { + $r->print(' <td> </td> '); } if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { if ($displayphotos eq 'on' && $role eq 'st' && $in{'photo'} ne '') { @@ -3187,7 +2943,7 @@ sub print_username_link { $output = $in->{'username'}; } else { $output = '<a href="javascript:username_display_launch('. - "'$in->{'username'}','$in->{'domain'}'".')" />'. + "'$in->{'username'}','$in->{'domain'}'".')">'. $in->{'username'}.'</a>'; } return $output; @@ -3482,22 +3238,18 @@ ENDJS } sub section_picker { - my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype,$caller) = @_; + my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype) = @_; my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); my $sections_select .= &course_sections(\%sections_count,$role); my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n"; - if ($mode eq 'upload' && $caller ne 'requestcrs') { + if ($mode eq 'upload') { my ($options,$cb_script,$coursepick) = &default_role_selector($context,1,$crstype); $secbox .= &Apache::lonhtmlcommon::row_title(&mt('role'),'LC_oddrow_value'). $options. &Apache::lonhtmlcommon::row_closure(1)."\n"; } $secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n"; - if ($caller eq 'requestcrs') { - $secbox .= '<input type="hidden" name="defaultrole" value="st" />'."\n". - '<input type="text" name="newsec" size="15" />'."\n". - '<input type="hidden" name="sections" value="" />'."\n"; - } elsif ($env{'request.course.sec'} eq '') { + if ($env{'request.course.sec'} eq '') { $secbox .= '<table class="LC_createuser"><tr class="LC_section_row">'."\n". '<td align="center">'.&mt('Existing sections')."\n". '<br />'.$sections_select.'</td><td align="center">'. @@ -3716,10 +3468,6 @@ sub show_drop_list { my ($r,$classlist,$nosort,$permission,$crstype) = @_; my $cid = $env{'request.course.id'}; my ($cnum,$cdom) = &get_course_identity($cid); - my $displaygroups; - unless (&Apache::loncommon::needs_gci_custom()) { - $displaygroups = 1; - } if (! exists($env{'form.sortby'})) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['sortby']); @@ -3797,10 +3545,8 @@ END <th>$lt{'sec'}</th> <th>$lt{'start'}</th> <th>$lt{'end'}</th> + <th>$lt{'groups'}</th> END - if ($displaygroups) { - $r->print(" <th>$lt{'groups'}</th>\n"); - } $r->print(&Apache::loncommon::end_data_table_header_row()); } else { $r->print(&Apache::loncommon::start_data_table(). @@ -3821,13 +3567,10 @@ END <a href="/adm/createuser?action=$action&sortby=start">$lt{'start'}</a> </th><th> <a href="/adm/createuser?action=$action&sortby=end">$lt{'end'}</a> + </th><th> + <a href="/adm/createuser?action=$action&sortby=groups">$lt{'groups'}</a> </th> END - if ($displaygroups) { - $r->print("<th> - <a href=\"/adm/createuser?action=$action&sortby=groups\">$lt{'groups'}</a> - </th>\n"); - } $r->print(&Apache::loncommon::end_data_table_header_row()); } # @@ -3880,10 +3623,8 @@ END <td>$section</td> <td>$start $startitem</td> <td>$end</td> + <td>$active_groups</td> END - if ($displaygroups) { - $r->print(" <td>$active_groups</td>\n"); - } $r->print(&Apache::loncommon::end_data_table_row()); } $r->print(&Apache::loncommon::end_data_table().'<br />'); @@ -3914,15 +3655,13 @@ END # Print out the initial form to get the file containing a list of users # sub print_first_users_upload_form { - my ($r,$context,$noheader,$caller) = @_; + my ($r,$context) = @_; my $str; $str = '<input type="hidden" name="phase" value="two" />'; $str .= '<input type="hidden" name="action" value="upload" />'; $str .= '<input type="hidden" name="state" value="got_file" />'; - unless ($noheader) { - $str .= '<h3>'.&mt('Upload a file containing information about users').'</h3>'."\n"; - } + $str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n"; # Excel and CSV Help $str .= '<div class="LC_left_float">' @@ -3933,18 +3672,25 @@ sub print_first_users_upload_form { &mt("How do I create a CSV file from a spreadsheet")) .'</div><br clear="all" />'."\n"; $str .= &Apache::lonhtmlcommon::start_pick_box() - .&Apache::lonhtmlcommon::row_title(&mt('File')) - .&Apache::loncommon::upfile_select_html() + .&Apache::lonhtmlcommon::row_title(&mt('File')); + if (&Apache::lonlocal::current_language() ne 'en') { + if ($context eq 'course') { + $str .= '<p class="LC_info">'."\n" + .&mt('Please upload an UTF8 encoded file to ensure a correct character encoding in your classlist.')."\n" + .'</p>'."\n"; + } + } + $str .= &Apache::loncommon::upfile_select_html() .&Apache::lonhtmlcommon::row_closure() - .&Apache::lonhtmlcommon::row_title(&mt('Ignore First Line, e.g., contains column titles')) - .'<label><input type="radio" name="noFirstLine" id="noFirstLine" value="1" /> '.&mt('Yes').'</label>' - .' ' - .'<label><input type="radio" name="noFirstLine" id="FirstLineOK" value="0" checked="checked" /> '.&mt('No').'</label>' + .&Apache::lonhtmlcommon::row_title( + '<label for="noFirstLine">' + .&mt('Ignore First Line') + .'</label>') + .'<input type="checkbox" name="noFirstLine" id="noFirstLine" />' .&Apache::lonhtmlcommon::row_closure(1) .&Apache::lonhtmlcommon::end_pick_box(); $str .= '<p>' - .'<input type="hidden" name="context" value="'.$caller.'" />' .'<input type="submit" name="fileupload" value="'.&mt('Next').'" />' .'</p>'; @@ -3969,7 +3715,7 @@ sub upfile_drop_add { $fields{$env{'form.f'.$i}}=$keyfields[$i]; } } - if (($env{'form.fullup'} ne 'yes') && ($env{'form.context'} ne 'requestcrs')) { + if ($env{'form.fullup'} ne 'yes') { $r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n". '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'); } @@ -4007,15 +3753,9 @@ sub upfile_drop_add { $crstype = &Apache::loncommon::course_type($cid); } } - my ($startdate,$enddate); - if ($env{'form.context'} eq 'requestcrs') { - $startdate = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_start_date'}; - $enddate = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_end_date'}; - } else { - ($startdate,$enddate) = &get_dates_from_form(); - if ($env{'form.makedatesdefault'}) { - $r->print(&make_dates_default($startdate,$enddate,$context,$crstype)); - } + my ($startdate,$enddate) = &get_dates_from_form(); + if ($env{'form.makedatesdefault'}) { + $r->print(&make_dates_default($startdate,$enddate,$context,$crstype)); } # Determine domain and desired host (home server) my $defdom=$env{'request.role.domain'}; @@ -4181,21 +3921,15 @@ sub upfile_drop_add { $r->print($groupwarn.'<br />'); } } - my (%curr_rules,%got_rules,%alerts,%cancreate); + my (%curr_rules,%got_rules,%alerts); my %customroles = &my_custom_roles($crstype); my @permitted_roles = - &roles_on_upload($context,$setting,$crstype,%customroles); - my %longtypes = &Apache::lonlocal::texthash( - official => 'Institutional', - unofficial => 'Non-institutional', - ); - map { $cancreate{$_} = &can_create_user($domain,$context,$_); } keys(%longtypes); + &roles_on_upload($context,$setting,$crstype,%customroles); # Get new users list foreach my $line (@userdata) { my @secs; my %entries=&Apache::loncommon::record_sep($line); # Determine user name - $entries{$fields{'username'}} =~ s/^\s+|\s+$//g; unless (($entries{$fields{'username'}} eq '') || (!defined($entries{$fields{'username'}}))) { my ($fname, $mname, $lname,$gen) = ('','','',''); @@ -4216,20 +3950,13 @@ sub upfile_drop_add { $gen=$entries{$fields{'gen'}}; } } - if ($entries{$fields{'username'}} ne &LONCAPA::clean_username($entries{$fields{'username'}})) { - my $nowhitespace; - if ($entries{$fields{'username'}} =~ /\s/) { - $nowhitespace = ' - '.&mt('usernames may not contain spaces.'); - } $r->print('<br />'. &mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]', - '<b>'.$entries{$fields{'username'}}.'</b>',$fname,$mname,$lname,$gen). - $nowhitespace); + '<b>'.$entries{$fields{'username'}}.'</b>',$fname,$mname,$lname,$gen)); next; } else { - $entries{$fields{'domain'}} =~ s/^\s+|\s+$//g; if ($entries{$fields{'domain'}} ne &LONCAPA::clean_domain($entries{$fields{'domain'}})) { $r->print('<br />'. '<b>'.$entries{$fields{'domain'}}. @@ -4288,7 +4015,6 @@ sub upfile_drop_add { # determine email address my $email=''; if (defined($fields{'email'})) { - $entries{$fields{'email'}} =~ s/^\s+|\s+$//g; if (defined($entries{$fields{'email'}})) { $email=$entries{$fields{'email'}}; unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; } @@ -4335,7 +4061,7 @@ sub upfile_drop_add { $role = $defaultrole; } # Clean up whitespace - foreach (\$id,\$fname,\$mname,\$lname,\$gen,\$inststatus) { + foreach (\$id,\$fname,\$mname,\$lname,\$gen) { $$_ =~ s/(\s+$|^\s+)//g; } # check against rules @@ -4344,67 +4070,20 @@ sub upfile_drop_add { my (%rulematch,%inst_results,%idinst_results); my $uhome=&Apache::lonnet::homeserver($username,$userdomain); if ($uhome eq 'no_host') { - if ($userdomain ne $domain) { - $r->print('<br />'. - &mt('[_1]: The domain specified ([_2]) is different to that of the course.', - '<b>'.$username.'</b>',$userdomain).'<br />'. - &mt('The user does not already exist, and you may not create a new user in a different domain.')); - next; - } + next if ($userdomain ne $domain); $checkid = 1; $newuser = 1; - if ($username =~/^[^\@]+\@[^\@]+$/) { - if ($email eq '') { - $email = $username; - } - if (&Apache::loncommon::needs_gci_custom()) { - my $lc_email; - if ($username eq $email) { - $lc_email = lc($email); - } - my $lc_username = lc($username); - if ($lc_username ne $username) { - if ($username eq $email) { - $email = $lc_username; - } - $username = $lc_username; - $uhome=&Apache::lonnet::homeserver($username,$userdomain); - if ($uhome ne 'no_host') { - $newuser = 0; - } - } - } - } - } - my $user = $username.':'.$userdomain; - if ($newuser) { my $checkhash; my $checks = { 'username' => 1 }; - $checkhash->{$user} = { 'newuser' => 1, }; + $checkhash->{$username.':'.$domain} = { 'newuser' => 1, }; &Apache::loncommon::user_rule_check($checkhash,$checks, \%alerts,\%rulematch,\%inst_results,\%curr_rules, \%got_rules); if (ref($alerts{'username'}) eq 'HASH') { if (ref($alerts{'username'}{$domain}) eq 'HASH') { - if ($alerts{'username'}{$domain}{$username}) { - $r->print('<br />'. - &mt('[_1]: matches the username format at your institution, but is not known to your directory service.','<b>'.$username.'</b>').'<br />'. - &mt('Consequently, the user was not created.')); - next; - } + next if ($alerts{'username'}{$domain}{$username}); } } - my $usertype = 'unofficial'; - if (ref($rulematch{$user}) eq 'HASH') { - if ($rulematch{$user}{'username'}) { - $usertype = 'official'; - } - } - if (!$cancreate{$usertype}) { - $r->print('<br />'. - &mt("[_1]: The user does not exist, and you are not permitted to create users of type: $longtypes{$usertype}.",'<b>'.$username.'</b>')); - next; - } } else { if ($context eq 'course' || $context eq 'author') { if ($userdomain eq $domain ) { @@ -4455,12 +4134,7 @@ sub upfile_drop_add { \%got_rules); if (ref($alerts{'id'}) eq 'HASH') { if (ref($alerts{'id'}{$userdomain}) eq 'HASH') { - if ($alerts{'id'}{$userdomain}{$id}) { - $r->print(&mt('[_1]: has a student/employee ID matching the format at your institution, but the ID is found by your directory service.', - '<b>'.$username.'</b>').'<br />'. - &mt('Consequently, the user was not created.')); - next; - } + next if ($alerts{'id'}{$userdomain}{$id}); } } } @@ -4559,20 +4233,10 @@ sub upfile_drop_add { $r->print("</p>\n<p>\n".&mt('Processed [quant,_1,user].',$counts{'user'}). "</p>\n"); if ($counts{'role'} > 0) { - if (&Apache::loncommon::needs_gci_custom()) { - $r->print("<p>\n". - &mt('[quant,_1,student] enrolled in Concept Test.',$counts{'role'}). - "</p>\n"); - } else { - $r->print("<p>\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.')."</p>\n"); - } + $r->print("<p>\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.')."</p>\n"); } else { - if (&Apache::loncommon::needs_gci_custom()) { - $r->print('<p>'.&mt('No students enrolled').'</p>'); - } else { - $r->print('<p>'.&mt('No roles added').'</p>'); - } + $r->print('<p>'.&mt('No roles added').'</p>'); } if ($counts{'auth'} > 0) { $r->print("<p>\n". @@ -5226,7 +4890,7 @@ function setSections(formname,crstype) { if (crstype == 'Community') { alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); } else { - alert("$alerts{'inec'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); + alert("$alerts{'inco'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); } return; } @@ -5258,46 +4922,6 @@ ENDSECCODE return $setsection_js; } -sub newsections_javascript { - my %alerts = &Apache::lonlocal::texthash( - inea => 'In each course, each user may only have one student role at a time.', - youh => 'You had selected ', - secs => 'sections.', - plmo => 'Please modify your selections so they include no more than one section.', - mayn => 'may not be used as the name for a section, as it is a reserved word.', - plch => 'Please choose a different section name.', - ); - my $setsection_js = <<"ENDSECCODE"; - -function setSections(formname) { - var newsecs = formname.newsec.value; - var numsplit = 0; - var numsec = 0; - if (newsecs != null && newsecs != "") { - numsplit = newsecs.split(/,/g); - numsec = numsplit.length; - } - if (numsec > 1) { - alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); - } else { - if (numsplit > 0) { - for (var j=0; j<numsplit.length; j++) { - if ((numsplit[j] == 'all') || - (numsplit[j] == 'none')) { - alert("'"+numsplit[j]+"' $alerts{'mayn'}\\n$alerts{'plch'}"); - return; - } - } - formname.sections.value = newsecs; - } - } - return 'ok'; -} - -ENDSECCODE - return $setsection_js; -} - sub can_create_user { my ($dom,$context,$usertype) = @_; my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); @@ -5412,22 +5036,14 @@ sub roles_by_context { if ($env{'request.role'} =~ m{^dc\./}) { push(@allroles,'ad'); } - if (&Apache::loncommon::needs_gci_custom()) { - if ($crstype eq 'Community') { - push(@allroles,'co'); - } else { - push(@allroles,'cc'); - } + push(@allroles,('ta','ep','in')); + if ($crstype eq 'Community') { + push(@allroles,'co'); } else { - push(@allroles,('ta','ep','in')); - if ($crstype eq 'Community') { - push(@allroles,'co'); - } else { - push(@allroles,'cc'); - } - if ($custom) { - push(@allroles,'cr'); - } + push(@allroles,'cc'); + } + if ($custom) { + push(@allroles,'cr'); } } elsif ($context eq 'author') { @allroles = ('ca','aa');