--- loncom/interface/Attic/londropadd.pm 2004/06/09 17:08:27 1.113
+++ loncom/interface/Attic/londropadd.pm 2006/11/23 03:17:17 1.150
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.113 2004/06/09 17:08:27 raeburn Exp $
+# $Id: londropadd.pm,v 1.150 2006/11/23 03:17:17 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -32,25 +32,21 @@
package Apache::londropadd;
use strict;
-use Apache::lonnet();
+use Apache::lonnet;
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
use Spreadsheet::WriteExcel;
use Apache::lonstathelpers();
use Apache::lonlocal;
+use Apache::longroup;
###############################################################
###############################################################
sub header {
- my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
- my $title = &mt('LON-CAPA Enrollment Manager');
+ my $start_page=&Apache::loncommon::start_page('Enrollment Manager');
return(<
- - $Text{'enrollone'} - $help{'Course_Add_Student'} -
- - $Text{'modify'} - $help{'Course_Modify_Student_Data'} -
- - $Text{'view'} - $help{'Course_View_Class_List'} -
- - $Text{'drop'} - $help{'Course_Drop_Student'} -
-END
- my ($cdom,$cnum) = split/_/,$ENV{'request.course.id'};
- if (&Apache::lonnet::auto_run($cnum,$cdom) ) {
- $r->print(< ';
+ $menu_html.='';
+ if (exists($menu_item->{'url'})) {
+ $menu_html.=qq{};
+ } else {
+ $menu_html.=
+ qq{};
+ }
+ $menu_html.= &mt($menu_item->{'text'}).'';
+ if (exists($menu_item->{'help'})) {
+ $menu_html.=
+ &Apache::loncommon::help_open_topic($menu_item->{'help'});
+ }
+ $menu_html.=' \n".
&mt('Note: this will not take effect if the user already exists').
+ &Apache::loncommon::help_open_topic('Auth_Options').
" \n";
$Str .= $krbform."\n \n".
$intform."\n \n".
@@ -606,15 +637,16 @@ sub print_upload_manager_footer {
$Str .= " \n".$date_table."'.&mt('Uploading Class List')."
\n".
"
\n".
''.&mt('Identify fields')."
\n");
@@ -237,14 +265,14 @@ sub print_upload_manager_header {
&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('fileupload',$env{'form.fileupload'}).
+ &hidden_input('upfiletype',$env{'form.upfiletype'}).
+ &hidden_input('upfile_associate',$env{'form.upfile_associate'}));
$r->print('');
- $r->print(''.
- &mt('Ignore First Line'));
+ $r->print('');
$r->print("
\n".
'');
@@ -282,7 +310,7 @@ sub javascript_validations {
ipass => 'You need to specify the initial password.',
name => 'The optional name field was not specified.',
snum => 'The optional student number field was not specified.',
- section => 'The optional section or group field was not specified.',
+ section => 'The optional section field was not specified.',
email => 'The optional email address field was not specified.',
continue => 'Continue enrollment?',
);
@@ -309,7 +337,7 @@ END
return;
}
// alert('current.radiovalue = '+current.radiovalue);
- if (current.radiovalue == null || current.radiovalue == 'nochange') {
+ if (current.radiovalue == null || current.radiovalue == '' || current.radiovalue == 'nochange') {
// They did not check any of the login radiobuttons.
alert('$alert{'authen'}');
return;
@@ -368,6 +396,7 @@ END
}
END
}
+ my $section_checks;
my $optional_checks = '';
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) {
$optional_checks = (<'.&mt('Login Type')."
\n";
$Str .= "".&mt('Starting and Ending Dates')."
\n";
$Str .= "".&mt('Full Update')."
\n";
- $Str .= ''.
+ $Str .= '
\n".''; + $Str .= "
\n".'
\n"; - $Str .= '\n
\n";
+ $Str .= ''."
\n";
$Str .= &mt('Note: for large courses, this operation may be time '.
'consuming');
@@ -629,14 +661,14 @@ sub print_upload_manager_form {
my $firstLine;
my $datatoken;
- if (!$ENV{'form.datatoken'}) {
+ if (!$env{'form.datatoken'}) {
$datatoken=&Apache::loncommon::upfile_store($r);
} else {
- $datatoken=$ENV{'form.datatoken'};
+ $datatoken=$env{'form.datatoken'};
&Apache::loncommon::load_tmp_file($r);
}
my @records=&Apache::loncommon::upfile_record_sep();
- if($ENV{'form.noFirstLine'}){
+ if($env{'form.noFirstLine'}){
$firstLine=shift(@records);
}
my $total=$#records;
@@ -659,7 +691,7 @@ sub print_upload_manager_form {
});
#
# Determine kerberos parameters as appropriate
- my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
my ($krbdef,$krbdefdom) =
&Apache::loncommon::get_kerberos_defaults($defdom);
#
@@ -668,17 +700,17 @@ sub print_upload_manager_form {
my $keyfields;
if ($total>=0) {
my @field=
- (['username',&mt('Username'), $ENV{'form.username_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'}],
- ['lname',&mt('Last Name'), $ENV{'form.lname_choice'}],
- ['gen', &mt('Generation'), $ENV{'form.gen_choice'}],
- ['id', &mt('ID/Student Number'),$ENV{'form.id_choice'}],
- ['sec', &mt('Group/Section'), $ENV{'form.sec_choice'}],
- ['ipwd', &mt('Initial Password'),$ENV{'form.ipwd_choice'}],
- ['email',&mt('EMail Address'), $ENV{'form.email_choice'}]);
- if ($ENV{'form.upfile_associate'} eq 'reverse') {
+ (['username',&mt('Username'), $env{'form.username_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'}],
+ ['lname',&mt('Last Name'), $env{'form.lname_choice'}],
+ ['gen', &mt('Generation'), $env{'form.gen_choice'}],
+ ['id', &mt('ID/Student Number'),$env{'form.id_choice'}],
+ ['sec', &mt('Section'), $env{'form.sec_choice'}],
+ ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],
+ ['email',&mt('EMail Address'), $env{'form.email_choice'}]);
+ if ($env{'form.upfile_associate'} eq 'reverse') {
&Apache::loncommon::csv_print_samples($r,\@records);
$i=&Apache::loncommon::csv_print_select_table($r,\@records,
\@field);
@@ -702,25 +734,29 @@ sub print_upload_manager_form {
sub enroll_single_student {
my $r=shift;
# Remove non alphanumeric values from section
- $ENV{'form.csec'}=~s/\W//g;
+ $env{'form.csec'}=~s/\W//g;
#
# We do the dates first because the action of making them the defaul
# in the course is entirely separate from the action of enrolling the
# student. Also, a failure in setting the dates as default is not fatal
# to the process of enrolling / modifying a student.
my ($startdate,$enddate) = &get_dates_from_form();
- if ($ENV{'form.makedatesdefault'}) {
+ if ($env{'form.makedatesdefault'}) {
$r->print(&make_dates_default($startdate,$enddate));
}
$r->print('
'.&mt('Enrolling').' '.$ENV{'form.cuname'}." \@ ". - $ENV{'form.lcdomain'}.'
'); - if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&& - ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) { + $r->print(''.&mt('Enrolling').' '.$env{'form.cuname'}." \@ ". + $env{'form.lcdomain'}.'
'); + if (($env{'form.cuname'}) + && ($env{'form.cuname'} + eq &LONCAPA::clean_username($env{'form.cuname'})) + && ($env{'form.lcdomain'}) + && ($env{'form.lcdomain'} + eq &LONCAPA::clean_domain($env{'form.lcdomain'}))) { # Deal with home server selection - my $domain=$ENV{'form.lcdomain'}; - my $desiredhost = $ENV{'form.lcserver'}; + my $domain=$env{'form.lcdomain'}; + my $desiredhost = $env{'form.lcserver'}; if (lc($desiredhost) eq 'default') { $desiredhost = undef; } else { @@ -735,33 +771,33 @@ sub enroll_single_student { # End of home server selection logic my $amode=''; my $genpwd=''; - if ($ENV{'form.login'} eq 'krb') { + if ($env{'form.login'} eq 'krb') { $amode='krb'; - $amode.=$ENV{'form.krbver'}; - $genpwd=$ENV{'form.krbarg'}; - } elsif ($ENV{'form.login'} eq 'int') { + $amode.=$env{'form.krbver'}; + $genpwd=$env{'form.krbarg'}; + } elsif ($env{'form.login'} eq 'int') { $amode='internal'; - $genpwd=$ENV{'form.intarg'}; - } elsif ($ENV{'form.login'} eq 'loc') { + $genpwd=$env{'form.intarg'}; + } elsif ($env{'form.login'} eq 'loc') { $amode='localauth'; - $genpwd=$ENV{'form.locarg'}; + $genpwd=$env{'form.locarg'}; if (!$genpwd) { $genpwd=" "; } } - my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'}, - $ENV{'form.lcdomain'}); + my $home = &Apache::lonnet::homeserver($env{'form.cuname'}, + $env{'form.lcdomain'}); if ((($amode) && ($genpwd)) || ($home ne 'no_host')) { # Clean out any old roles the student has in this class. - &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'}, - $ENV{'request.course.id'},$ENV{'form.csec'}, + &modifystudent($env{'form.lcdomain'},$env{'form.cuname'}, + $env{'request.course.id'},$env{'form.csec'}, $desiredhost); my $login_result = &Apache::lonnet::modifystudent - ($ENV{'form.lcdomain'},$ENV{'form.cuname'}, - $ENV{'form.cstid'},$amode,$genpwd, - $ENV{'form.cfirst'},$ENV{'form.cmiddle'}, - $ENV{'form.clast'},$ENV{'form.cgen'}, - $ENV{'form.csec'},$enddate, - $startdate,$ENV{'form.forceid'}, - $desiredhost); + ($env{'form.lcdomain'},$env{'form.cuname'}, + $env{'form.cstid'},$amode,$genpwd, + $env{'form.cfirst'},$env{'form.cmiddle'}, + $env{'form.clast'},$env{'form.cgen'}, + $env{'form.csec'},$enddate, + $startdate,$env{'form.forceid'}, + $desiredhost,$env{'form.emailaddress'}); if ($login_result =~ /^ok/) { $r->print($login_result); $r->print("".&mt('If active, the new role will be available when the student next logs in to LON-CAPA.')."
"); @@ -775,7 +811,7 @@ sub enroll_single_student { } else { $r->print(&mt('Invalid login mode or password.').' '); } - $r->print(''.&mt('Unable to enroll').' '.$ENV{'form.cuname'}.'.'); + $r->print(''.&mt('Unable to enroll').' '.$env{'form.cuname'}.'.'); } } else { $r->print(&mt('Invalid username or domain')); @@ -786,10 +822,10 @@ sub setup_date_selectors { my ($starttime,$endtime,$mode) = @_; if (! defined($starttime)) { $starttime = time; - unless ($mode eq 'createcourse') { - if (exists($ENV{'course.'.$ENV{'request.course.id'}. + unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { + if (exists($env{'course.'.$env{'request.course.id'}. '.default_enrollment_start_date'})) { - $starttime = $ENV{'course.'.$ENV{'request.course.id'}. + $starttime = $env{'course.'.$env{'request.course.id'}. '.default_enrollment_start_date'}; } } @@ -797,9 +833,9 @@ sub setup_date_selectors { if (! defined($endtime)) { $endtime = time+(6*30*24*60*60); # 6 months from now, approx unless ($mode eq 'createcourse') { - if (exists($ENV{'course.'.$ENV{'request.course.id'}. + if (exists($env{'course.'.$env{'request.course.id'}. '.default_enrollment_end_date'})) { - $endtime = $ENV{'course.'.$ENV{'request.course.id'}. + $endtime = $env{'course.'.$env{'request.course.id'}. '.default_enrollment_end_date'}; } } @@ -810,12 +846,20 @@ sub setup_date_selectors { my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform', 'enddate', $endtime); - if ($mode eq 'createcourse') { + if ($mode eq 'create_enrolldates') { $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', - 'startdate', + 'startenroll', $starttime); $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', - 'enddate', + 'endenroll', + $endtime); + } + if ($mode eq 'create_defaultdates') { + $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', + 'startaccess', + $starttime); + $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', + 'endaccess', $endtime); } return ($startdateform,$enddateform); @@ -824,7 +868,7 @@ sub setup_date_selectors { sub get_dates_from_form { my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); - if ($ENV{'form.no_end_date'}) { + if ($env{'form.no_end_date'}) { $enddate = 0; } return ($startdate,$enddate); @@ -834,16 +878,19 @@ sub date_setting_table { my ($starttime,$endtime,$mode) = @_; my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode); my $dateDefault = ''.&mt('Starting Date').' | '. @@ -859,8 +906,8 @@ sub date_setting_table { sub make_dates_default { my ($startdate,$enddate) = @_; my $result = ''; - my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; - my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; + my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; my $put_result = &Apache::lonnet::put('environment', {'default_enrollment_start_date'=>$startdate, 'default_enrollment_end_date' =>$enddate},$dom,$crs); @@ -868,7 +915,8 @@ sub make_dates_default { $result .= "Set default start and end dates for course
$lt{'hs'}: | $homeserver_form |
---|---|
$lt{'mail'}: | +
+ | |
$lt{'mail'}: | ++ + |
---|
-
Count - | +".&Apache::loncommon::start_data_table()." + | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
$lt{'type'} | + "); + } else { + $r->print(" +Count | + "); + } + $r->print(<$lt{'dom'} @@ -1238,14 +1349,31 @@ END $lt{'start'} | $lt{'end'} + | + $lt{'grp'} | -'."\n".' '. + ''. + $photo_options{$photochg}.' '.$lt{'photo'}."\n". + ' | '."\n"); + } + $r->print(" \n"); } elsif ($mode eq 'csv') { # # Open a file $CSVfilename = '/prtspool/'. - $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. + $env{'user.name'}.'_'.$env{'user.domain'}.'_'. time.'_'.rand(1000000000).'.csv'; unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { $r->log_error("Couldn't open $CSVfilename for output $!"); @@ -1259,36 +1387,36 @@ END if($statusmode eq 'Expired') { print $CSVfile '"'.&mt('Students with expired roles').'"'."\n"; } + if($statusmode eq 'Future') { + print $CSVfile '"'.&mt('Students with future roles').'"'."\n"; + } if ($statusmode eq 'Any') { print $CSVfile '"'.join('","',map { &Apache::loncommon::csv_translate(&mt($_)) } ("username","domain","ID","student name", - "section","start date","end date","status")).'"'."\n"; + "section","start date","end date","status","active groups")) + .'"'."\n"; } else { print $CSVfile '"'.join('","',map { &Apache::loncommon::csv_translate(&mt($_)) } ("username","domain","ID","student name", - "section","start date","end date")).'"'."\n"; + "section","start date","end date","active groups")).'"'."\n"; } } elsif ($mode eq 'excel') { # Create the excel spreadsheet - $excel_filename = '/prtspool/'. - $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. - time.'_'.rand(1000000000).'.xls'; - $excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'. - $excel_filename); - $excel_workbook->set_tempdir('/home/httpd/perl/tmp'); - # - $format = &Apache::loncommon::define_excel_formats($excel_workbook); + ($excel_workbook,$excel_filename,$format) = + &Apache::loncommon::create_workbook($r); + return if (! defined($excel_workbook)); $excel_sheet = $excel_workbook->addworksheet('classlist'); # my $description = 'Class List for '. - $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; + $env{'course.'.$env{'request.course.id'}.'.description'}; $excel_sheet->write($row++,0,$description,$format->{'h1'}); # $excel_sheet->write($row++,0,["username","domain","ID", "student name","section", - "start date","end date","status"], + "start date","end date","status", + "active groups"], $format->{'bold'}); } # @@ -1298,6 +1426,7 @@ END foreach (@$keylist) { $index{$_} = $i++; } + $index{'groups'} = scalar(@{$keylist}); my $index = $index{$sortby}; my $second = $index{'username'}; my $third = $index{'domain'}; @@ -1309,21 +1438,62 @@ END lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third]) } (keys(%$classlist)); my $studentcount = 0; + my $autocount = 0; + my $manualcount = 0; + my $unlockcount = 0; + my $lockcount = 0; foreach my $student (@Sorted_Students) { my $sdata = $classlist->{$student}; + my $groups = $classgroups->{$student}; my $username = $sdata->[$index{'username'}]; my $domain = $sdata->[$index{'domain'}]; my $section = $sdata->[$index{'section'}]; + my $active_groups; + if (ref($groups->{active}) eq 'HASH') { + $active_groups = join(', ',keys(%{$groups->{'active'}})); + } my $name = $sdata->[$index{'fullname'}]; my $id = $sdata->[$index{'id'}]; my $status = $sdata->[$index{'status'}]; my $start = $sdata->[$index{'start'}]; my $end = $sdata->[$index{'end'}]; + my $type = $sdata->[$index{'type'}]; next if (($statusmode ne 'Any') && ($status ne $statusmode)); - if ($mode eq 'view' || $mode eq 'html') { - $start = &Apache::lonlocal::locallocaltime($start); - $end = &Apache::lonlocal::locallocaltime($end); - $r->print("||||||
".(++$studentcount)." | \n ");
+ if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
+ if (! defined($start) || $start == 0) {
+ $start = &mt('none');
+ } else {
+ $start = &Apache::lonlocal::locallocaltime($start);
+ }
+ if (! defined($end) || $end == 0) {
+ $end = &mt('none');
+ } else {
+ $end = &Apache::lonlocal::locallocaltime($end);
+ }
+ $r->print(&Apache::loncommon::start_data_table_row());
+ if ($mode eq 'autoenroll') {
+ my $lockedtype = $sdata->[$index{'lockedtype'}];
+ $studentcount++;
+ my $cellentry;
+ if ($type eq 'auto') {
+ $cellentry = ''.&mt('auto').' ';
+ $autocount ++;
+ } else {
+ $cellentry = '
| $cellentry | \n "); + } else { + $r->print(" | ".(++$studentcount)." | \n "); + } if ($linkto eq 'nothing') { $r->print($username); } elsif ($linkto eq 'aboutme') { @@ -1347,13 +1517,35 @@ END | $section | $start | $end | -$active_groups | END + if ($env{'course.'.$env{'request.course.id'}. + '.internal.showphoto'}) { + if ($displayphotos eq 'on') { + my $imgurl = + &Apache::lonnet::retrievestudentphoto($domain, + $username,'gif', + 'thumbnail'); + + $r->print(''); + } + } + $r->print(&Apache::loncommon::end_data_table_row()); } elsif ($mode eq 'csv') { next if (! defined($CSVfile)); # no need to bother with $linkto - $start = &Apache::lonlocal::locallocaltime($start); - $end = &Apache::lonlocal::locallocaltime($end); + if (! defined($start) || $start == 0) { + $start = &mt('none'); + } else { + $start = &Apache::lonlocal::locallocaltime($start); + } + if (! defined($end) || $end == 0) { + $end = &mt('none'); + } else { + $end = &Apache::lonlocal::locallocaltime($end); + } my @line = (); foreach ($username,$domain,$id,$name,$section,$start,$end) { push @line,&Apache::loncommon::csv_translate($_); @@ -1361,22 +1553,28 @@ END if ($statusmode eq 'Any') { push @line,&Apache::loncommon::csv_translate($status); } + push @line,&Apache::loncommon::csv_translate($active_groups); print $CSVfile '"'.join('","',@line).'"'."\n"; } elsif ($mode eq 'excel') { $excel_sheet->write($row,0,[$username,$domain,$id, $name,$section]); my $col = 5; foreach my $time ($start,$end) { - $excel_sheet->write($row,$col++, + if (defined($time) && $time != 0) { + $excel_sheet->write($row,$col++, &Apache::lonstathelpers::calc_serial($time), $format->{'date'}); + } else { + $excel_sheet->write($row,$col++,'none'); + } } $excel_sheet->write($row,$col++,$status); + $excel_sheet->write($row,$col++,$active_groups); $row++; } } - if ($mode eq 'view' || $mode eq 'html') { - $r->print(' |