--- loncom/interface/lonuserutils.pm 2010/11/13 01:29:34 1.97.2.20 +++ loncom/interface/lonuserutils.pm 2010/08/04 16:50:29 1.121 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.97.2.20 2010/11/13 01:29:34 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.121 2010/08/04 16:50:29 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -47,8 +47,7 @@ sub modifystudent { # this one. If $csec is defined, drop them from all other sections of # this course and add them to section $csec my ($cnum,$cdom) = &get_course_identity($courseid); - my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1}); - my %roles = &Apache::lonnet::dump('roles',$udom,$unam,'.',undef,$extra); + my %roles = &Apache::lonnet::dump('roles',$udom,$unam); my ($tmp) = keys(%roles); # Bail out if we were unable to get the students roles return "$1" if ($tmp =~ /^(con_lost|error|no_such_host)/i); @@ -1448,7 +1447,7 @@ sub print_userlist { return; } if (!(($context eq 'domain') && - (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) { + (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) { $r->print( "\n</p>\n" .'<p>' @@ -1459,7 +1458,7 @@ sub print_userlist { my ($indexhash,$keylist) = &make_keylist_array(); my (%userlist,%userinfo,$clearcoursepick); if (($context eq 'domain') && - ($env{'form.roletype'} eq 'course') || + ($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')) { my ($crstype,$numcodes,$title,$warning); if ($env{'form.roletype'} eq 'course') { @@ -1473,9 +1472,11 @@ sub print_userlist { $title = &mt('Select Communities'); $warning = &mt('Warning: data retrieval for multiple communities can take considerable time, as this operation is not currently optimized.'); } + my @standardnames = &Apache::loncommon::get_standard_codeitems(); my $courseform = &Apache::lonhtmlcommon::course_selection($formname,$numcodes, - $codetitles,$idlist,$idlist_titles,$crstype); + $codetitles,$idlist,$idlist_titles,$crstype, + \@standardnames); $r->print('<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n". &Apache::lonhtmlcommon::start_pick_box()."\n". &Apache::lonhtmlcommon::row_title($title,'LC_oddrow_value')."\n". @@ -1693,7 +1694,7 @@ sub role_filter { $role_select .= '</select>'; $output = '<label><span class="LC_nobreak">' .&mt('Role: [_1]',$role_select) - .'</span></label>'; + .'</span></label> '; } return $output; } @@ -1924,7 +1925,7 @@ function setCourseCat(formname) { if (formname.Year.options[formname.Year.selectedIndex].value == -1) { return; } - courseSet('Year'); + courseSet('$codetitles[0]'); for (var j=0; j<formname.Semester.length; j++) { if (formname.Semester.options[j].value == "$env{'form.Semester'}") { formname.Semester.options[j].selected = true; @@ -1933,7 +1934,7 @@ function setCourseCat(formname) { if (formname.Semester.options[formname.Semester.selectedIndex].value == -1) { return; } - courseSet('Semester'); + courseSet('$codetitles[1]'); for (var j=0; j<formname.Department.length; j++) { if (formname.Department.options[j].value == "$env{'form.Department'}") { formname.Department.options[j].selected = true; } @@ -1941,7 +1942,7 @@ function setCourseCat(formname) { if (formname.Department.options[formname.Department.selectedIndex].value == -1) { return; } - courseSet('Department'); + courseSet('$codetitles[2]'); for (var j=0; j<formname.Number.length; j++) { if (formname.Number.options[j].value == "$env{'form.Number'}") { formname.Number.options[j].selected = true; @@ -2278,7 +2279,7 @@ END push(@cols,'section'); } if (!($context eq 'domain' && ($env{'form.roletype'} eq 'course') - && ($env{'form.roletype'} eq 'community'))) { + && ($env{'form.roletype'} eq 'community'))) { push(@cols,('start','end')); } if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { @@ -2289,7 +2290,7 @@ END $env{'form.roletype'} eq 'community')) { push (@cols,'extent'); } - if (($statusmode eq 'Any') && + if (($statusmode eq 'Any') && (!($context eq 'domain' && (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community'))))) { push(@cols,'status'); @@ -2310,7 +2311,6 @@ END if ($mode ne 'autoenroll') { $results_description = &results_header_row($rolefilter,$statusmode, $context,$permission,$mode,$crstype); - $r->print('<b>'.$results_description.'</b><br /><br />'); } my ($output,$actionselect,%canchange,%canchangesec); @@ -2332,7 +2332,7 @@ END END if ($actionselect) { $output .= <<"END"; -<div class="LC_left_float"><fieldset><legend><b>$lt{'ac'}</b></legend> +<div class="LC_left_float"><fieldset><legend>$lt{'ac'}</legend> $actionselect <br/><br /><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.$formname.actionlist)" /> <input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.$formname.actionlist)" /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action('actionlist')" /></fieldset></div> @@ -2377,7 +2377,7 @@ END } } } - $output .= '<div class="LC_left_float"><fieldset><legend><b>'.$lt{'link'}.'</b></legend>'. + $output .= '<div class="LC_left_float"><fieldset><legend>'.$lt{'link'}.'</legend>'. '<table><tr>'; my @linkdests = ('aboutme'); if ($permission->{'cusr'}) { @@ -2388,6 +2388,7 @@ END $env{'request.course.sec'})) { push(@linkdests,'track'); } + $output .= '<td>'; my $usernamelink = $env{'form.usernamelink'}; if ($usernamelink eq '') { @@ -2404,7 +2405,7 @@ END if ($env{'form.userwin'}) { $checkwin = ' checked="checked"'; } - $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 .= '</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(). @@ -2657,7 +2658,7 @@ END if ($clickers!~/\w/) { $clickers='-'; } $in{'clicker'} = $clickers; my $role = $in{'role'}; - $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype); + $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype); if (! defined($in{'start'}) || $in{'start'} == 0) { $in{'start'} = &mt('none'); } else { @@ -3176,7 +3177,7 @@ ENDJS chse => 'Changes in section affiliation to apply to selected users', fors => 'For student roles, changing the section will result in a section switch as students may only be in one section of a course at a time.', forn => 'For a course role that is not "student", users may have roles in more than one section at a time.', - reta => "Retain each user's current section affiliations?", + reta => "Retain each user's current section affiliations?", dnap => '(Does not apply to student roles).', ); my ($date_items,$headertext); @@ -3409,7 +3410,6 @@ sub results_header_row { } } elsif (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')) { - my $coursefilter = $env{'form.coursepick'}; if ($env{'form.roletype'} eq 'course') { if ($coursefilter eq 'category') { @@ -3673,8 +3673,15 @@ 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( '<label for="noFirstLine">' @@ -3808,7 +3815,7 @@ sub upfile_drop_add { } elsif ($setting eq 'course') { $defaultrole = $env{'form.courserole'}; $defaultsec = $env{'form.sections'}; - } + } } elsif ($context eq 'author') { $defaultrole = $env{'form.defaultrole'}; } elsif ($context eq 'course') { @@ -3924,7 +3931,6 @@ sub upfile_drop_add { 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) = ('','','',''); @@ -3947,17 +3953,11 @@ sub upfile_drop_add { } 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'}}. @@ -4016,7 +4016,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=''; } @@ -4063,7 +4062,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 @@ -4168,7 +4167,7 @@ sub upfile_drop_add { $role = 'cr_'.$env{'user.domain'}.'_'. $env{'user.name'}.'_'.$role; } - if (($role ne 'cc') && ($role ne 'co')) { + if (($role ne 'cc') && ($role ne 'co')) { if (@secs > 1) { $multiple = 1; foreach my $sec (@secs) { @@ -4574,7 +4573,7 @@ sub update_user_list { if ($sec eq '') { $nochg = 1; $keepnosection = 1; - } else { + } else { push(@retained,$sec); } } @@ -4603,12 +4602,12 @@ sub update_user_list { $result = 'ok'; $nothingtodo = 1; } else { - foreach my $newsec (@newsecs) { + foreach my $newsec (@newsecs) { if (!grep(/^\Q$newsec\E$/,@retained)) { if ($role eq 'st') { $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$newsec,$end,$start,$type,$locktype,$cid,'',$context); if (@newsecs > 1) { - my $showsingle; + my $showsingle; if ($newsec eq '') { $showsingle = &mt('No section'); } else { @@ -4616,10 +4615,10 @@ sub update_user_list { } if ($crstype eq 'Community') { $warn_singlesec = &mt('Although more than one section was indicated, a role was only added for the first section - [_1], as each community member may only be in one section at a time.','<i>'.$showsingle.'</i>'); - } else { + } else { $warn_singlesec = &mt('Although more than one section was indicated, a role was only added for the first section - [_1], as each student may only be in one section of a course at a time.','<i>'.$showsingle.'</i>'); } - $showsecs = $showsingle; + $showsecs = $showsingle; last; } else { if ($newsec eq '') { @@ -4632,10 +4631,11 @@ sub update_user_list { my $newscope = $scopestem; if ($newsec ne '') { $newscope .= '/'.$newsec; - push(@shownew,$newsec); + push(@shownew,$newsec); } $result = &Apache::lonnet::assignrole($udom,$uname, $newscope,$role,$end,$start); + } } } @@ -4685,7 +4685,7 @@ sub update_user_list { $r->print('<div class="LC_warning">'.$warn_singlesec.'</div>'); } } elsif ($choice eq 'chgdates') { - $r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for '[_3]' - [_4]",$plrole,$extent, + $r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for '[_3]' - [_4]",$plrole,$extent, '<i>'.&Apache::loncommon::plainname($uname,$udom).'</i>', $dates).'<br />'); $count ++; @@ -5517,7 +5517,7 @@ sub sectioncheck_alerts { my %alerts = &Apache::lonlocal::texthash( curd => 'You must select a course or community in the current domain', inea => 'In each course, each user may only have one student role at a time', - inco => 'In each community, each user may only have one member role at a time', + inco => 'In each community, each user may only have one member role at a time', youh => 'You had selected', sect => 'sections', plsm => 'Please modify your selections so they include no more than one section',