--- loncom/interface/lonuserutils.pm 2010/01/20 21:42:30 1.97.2.13 +++ loncom/interface/lonuserutils.pm 2009/11/12 15:58:22 1.104 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.97.2.13 2010/01/20 21:42:30 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.104 2009/11/12 15:58:22 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -386,7 +386,7 @@ sub javascript_validations { if (($context eq 'course') || ($context eq 'domain')) { if ($context eq 'course') { if ($env{'request.course.sec'} eq '') { - $setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');'; + $setsection_call = 'setSections(document.'.$param{'formname'}."'$crstype'".');'; $setsections_js = &setsections_javascript($param{'formname'},$groupslist, $mode,'',$crstype); @@ -1141,7 +1141,7 @@ sub date_setting_table { } sub make_dates_default { - my ($startdate,$enddate,$context,$crstype = @_; + my ($startdate,$enddate,$context,$crstype) = @_; my $result = ''; if ($context eq 'course') { my ($cnum,$cdom) = &get_course_identity(); @@ -1446,19 +1446,14 @@ sub print_userlist { '<input type="hidden" name="phase" value="" /></form>'); return; } - if (!(($context eq 'domain') && - (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) { - $r->print( - "\n</p>\n" - .'<p>' - .&list_submit_button(&mt('Update Display')) - ."</p>\n" - ); + if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { + $r->print(' '.&list_submit_button(&mt('Update Display')). + "\n</p>\n"); } my ($indexhash,$keylist) = &make_keylist_array(); - my (%userlist,%userinfo,$clearcoursepick); + my (%userlist,%userinfo); 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') { @@ -1481,15 +1476,9 @@ sub print_userlist { $courseform."\n". &Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::end_pick_box().'</p>'. - '<p><input type="hidden" name="origroletype" value="'.$env{'form.roletype'}.'" />'. - &list_submit_button(&mt('Update Display')). + '<p>'.&list_submit_button(&mt('Update Display')). "\n".'</p><span class="LC_warning">'.$warning.'</span>'."\n"); - $clearcoursepick = 0; - if (($env{'form.origroletype'} ne '') && - ($env{'form.origroletype'} ne $env{'form.roletype'})) { - $clearcoursepick = 1; - } - if (($env{'form.coursepick'}) && (!$clearcoursepick)) { + if ($env{'form.coursepick'}) { $r->print('<hr />'.&mt('Searching').' ...<br /> <br />'); } } else { @@ -1562,8 +1551,9 @@ sub print_userlist { } } } - } elsif ($env{'form.roletype'} eq 'course') { - if (($env{'form.coursepick'}) && (!$clearcoursepick)) { + } elsif (($env{'form.roletype'} eq 'course') || + ($env{'form.roletype'} eq 'community')) { + if ($env{'form.coursepick'}) { my %courses = &process_coursepick(); my %allusers; my $hidepriv = 1; @@ -1731,7 +1721,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) { @@ -1746,9 +1736,7 @@ sub section_group_filter { $markup .= '</option>'."\n"; } $markup .= '</select>'."\n"; - $output .= (' 'x3).'<span class="LC_nobreak">' - .'<label>'.$title{$item}.': '.$markup.'</label>' - .'</span> '; + $output .= (' 'x3).'<label>'.$title{$item}.': '.$markup.'</label>'; } } return $output; @@ -1968,17 +1956,13 @@ sub process_coursepick { my $coursefilter = $env{'form.coursepick'}; my $cdom = $env{'request.role.domain'}; my %courses; - my $crssrch = 'Course'; - if ($env{'form.roletype'} eq 'community') { - $crssrch = 'Community'; - } if ($coursefilter eq 'all') { %courses = &Apache::lonnet::courseiddump($cdom,'.','.','.','.','.', - undef,undef,$crssrch); + undef,undef,'Course'); } elsif ($coursefilter eq 'category') { my $instcode = &instcode_from_coursefilter(); %courses = &Apache::lonnet::courseiddump($cdom,'.','.',$instcode,'.','.', - undef,undef,$crssrch); + undef,undef,'Course'); } elsif ($coursefilter eq 'specific') { if ($env{'form.coursetotal'} > 1) { my @course_ids = split(/&&/,$env{'form.courselist'}); @@ -2163,7 +2147,7 @@ END } elsif ($context eq 'domain') { if ($setting eq 'community') { $crstype = 'Community'; - } elsif ($setting eq 'course') { + } elsif ($crstype eq 'course') { $crstype = 'Course'; } } @@ -2276,7 +2260,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') { @@ -2287,7 +2271,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'); @@ -2302,24 +2286,19 @@ END if ($env{'form.showrole'} eq 'cr') { $rolefilter = &mt('custom'); } elsif ($env{'form.showrole'} ne 'Any') { - $rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'}); + $rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'},$crstype); } my $results_description; 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); if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { if ($permission->{'cusr'}) { - unless (($context eq 'domain') && - (($setting eq 'course') || ($setting eq 'community'))) { - $actionselect = - &select_actions($context,$setting,$statusmode,$formname); - } + $actionselect = &select_actions($context,$setting,$statusmode,$formname); } $r->print(<<END); <input type="hidden" name="srchby" value="uname" /> @@ -2330,7 +2309,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> @@ -2375,7 +2354,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'}) { @@ -2386,6 +2365,7 @@ END $env{'request.course.sec'})) { push(@linkdests,'track'); } + $output .= '<td>'; my $usernamelink = $env{'form.usernamelink'}; if ($usernamelink eq '') { @@ -2412,7 +2392,11 @@ END <th><a href=\"javascript:document.$formname.sortby.value='type';document.$formname.submit();\">$lt{'type'}</a></th> "; } else { - $output .= "\n".'<th> </th>'."\n"; + if ($mode eq 'pickauthor') { + $output .= "\n".'<th> </th>'."\n"; + } else { + $output .= "\n".'<th>'.&mt('Count').'</th>'."\n"; + } if ($actionselect) { $output .= '<th>'.&mt('Select').'</th>'."\n"; } @@ -2467,13 +2451,9 @@ END time.'_'.rand(1000000000).'.csv'; unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { $r->log_error("Couldn't open $CSVfilename for output $!"); - $r->print( - '<p class="LC_error">' - .&mt('Problems occurred in writing the CSV file.') - .' '.&mt('This error has been logged.') - .' '.&mt('Please alert your LON-CAPA administrator.') - .'</p>' - ); + $r->print(&mt('Problems occurred in writing the CSV file. ' + .'This error has been logged. ' + .'Please alert your LON-CAPA administrator.')); $CSVfile = undef; } # @@ -2655,7 +2635,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 { @@ -2942,7 +2922,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; @@ -2954,7 +2934,6 @@ sub role_type_names { 'author' => 'Co-Author Roles', 'course' => 'Course Roles', 'community' => 'Community Roles', - ); return %lt; } @@ -3409,7 +3388,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') { @@ -3662,20 +3640,27 @@ sub print_first_users_upload_form { $str .= '<input type="hidden" name="action" value="upload" />'; $str .= '<input type="hidden" name="state" value="got_file" />'; - $str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n"; # Excel and CSV Help - $str .= '<div class="LC_left_float">' + $str .= '<p>' .&Apache::loncommon::help_open_topic("Course_Create_Class_List", &mt("How do I create a users list from a spreadsheet")) - .'</div><div class="LC_left_float">'."\n" + ."<br />\n" .&Apache::loncommon::help_open_topic("Course_Convert_To_CSV", &mt("How do I create a CSV file from a spreadsheet")) - .'</div><br clear="all" />'."\n"; + ."</p>\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">' @@ -3689,6 +3674,8 @@ sub print_first_users_upload_form { .'<input type="submit" name="fileupload" value="'.&mt('Next').'" />' .'</p>'; + $str .= &Apache::loncommon::end_page(); + $r->print($str); return; } @@ -3750,7 +3737,7 @@ sub upfile_drop_add { } my ($startdate,$enddate) = &get_dates_from_form(); if ($env{'form.makedatesdefault'}) { - $r->print(&make_dates_default($startdate,$enddate,$context,$crstype); + $r->print(&make_dates_default($startdate,$enddate,$context,$crstype)); } # Determine domain and desired host (home server) my $defdom=$env{'request.role.domain'}; @@ -3809,7 +3796,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') { @@ -4161,7 +4148,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) { @@ -4820,7 +4807,7 @@ sub setsections_javascript { accr => 'A course coordinator role will be added with access to all sections.', acor => 'A coordinator role will be added with access to all sections', inea => 'In each course, each user may only have one student role at a time.', - inec => 'In each community, each user may only have one member role at a time.', + inec => 'In each community, each user may only have on member role at a time.', youh => 'You had selected ', secs => 'sections.', plmo => 'Please modify your selections so they include no more than one section.', @@ -4828,13 +4815,11 @@ sub setsections_javascript { plch => 'Please choose a different section name.', mnot => 'may not be used as a section name, as it is the name of a course group.', secn => 'Section names and group names must be distinct. Please choose a different section name.', - nonw => 'Section names may only contain letters or numbers.', ); $setsection_js .= <<"ENDSECCODE"; function setSections(formname,crstype) { var re1 = /^currsec_/; - var re2 =/\\W/; var groups = new Array($groupslist); for (var i=0;i<formname.elements.length;i++) { var str = formname.elements[i].name; @@ -4878,23 +4863,9 @@ function setSections(formname,crstype) { } var newsecs = formname.elements[i+1].value; var numsplit; - var validsecs = new Array(); - var badsecs = new Array(); if (newsecs != null && newsecs != "") { numsplit = newsecs.split(/,/g); numsec = numsec + numsplit.length; - for (var i=0; i<numsplit.length; i++) { - if (re2.test(numsplit[i]) == true) { - badsecs.push(numsplit[i]); - } else { - validsecs.push(numsplit[i]); - } - } - if (badsecs.length > 0) { - alert("$alerts{'nonw'}\\n$alerts{'plch'}"); - return; - } - numsec = numsec + validsecs.length; } if ((role == 'st') && (numsec > 1)) { @@ -5378,7 +5349,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',