--- loncom/interface/Attic/londropadd.pm 2004/02/20 19:44:59 1.102 +++ loncom/interface/Attic/londropadd.pm 2005/01/31 11:27:14 1.124 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.102 2004/02/20 19:44:59 matthew Exp $ +# $Id: londropadd.pm,v 1.124 2005/01/31 11:27:14 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,6 +37,7 @@ use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::Constants qw(:common :http REDIRECT); use Spreadsheet::WriteExcel; +use Apache::lonstathelpers(); use Apache::lonlocal; ############################################################### @@ -135,47 +136,61 @@ sub domain_form { ############################################################### # Menu Phase One sub print_main_menu { - my $r=shift; - my %Text = &Apache::lonlocal::texthash - ('upload' => 'Upload a class list', - 'enrollone' => 'Enroll a single student', - 'modify' => 'Modify student data', - 'view' => 'View Class List', - 'drop' => 'Drop Students', - 'populate' => 'Automated Enrollment Manager'); - my %help=(); - foreach ('Course_Drop_Student','Course_Add_Student', - 'Course_Modify_Student_Data','Course_View_Class_List', - 'Course_Create_Class_List') { - $help{$_}=&Apache::loncommon::help_open_topic($_); + my ($r,$enrl_permission,$view_permission)=@_; + # + my ($cdom,$cnum) = split/_/,$ENV{'request.course.id'}; + my @menu = + ( + { text => 'Upload a class list', + help => 'Course_Create_Class_List', + action => 'upload', + permission => $enrl_permission, + }, + { text => 'Enroll a single student', + help => 'Course_Add_Student', + action => 'enrollstudent', + permission => $enrl_permission, + }, + { text => 'Modify student data', + help => 'Course_Modify_Student_Data', + action => 'modifystudent', + permission => $enrl_permission, + }, + { text => 'View Class List', + help => 'Course_View_Class_List', + action => 'classlist', + permission => $view_permission, + }, + { text => 'Drop Students', + help => 'Course_Drop_Student', + action => 'drop', + permission => $enrl_permission, + }, + { text => 'Automated Enrollment Manager', + permission => &Apache::lonnet::auto_run($cnum,$cdom), + url => '/adm/populate', + }, + ); + my $menu_html = ''; + foreach my $menu_item (@menu) { + next if (! $menu_item->{'permission'}); + $menu_html.='
'; + $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.='
'.$/; } - - $r->print(<- - $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'} -
- - $Text{'populate'} - -END + $r->print($menu_html); + return; } ############################################################### @@ -303,7 +318,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; @@ -699,7 +714,7 @@ sub enroll_single_student { $ENV{'form.csec'}=~s/\W//g; # # We do the dates first because the action of making them the defaul - # in the course is entirely seperate from the action of enrolling the + # 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(); @@ -755,7 +770,7 @@ sub enroll_single_student { $ENV{'form.clast'},$ENV{'form.cgen'}, $ENV{'form.csec'},$enddate, $startdate,$ENV{'form.forceid'}, - $desiredhost); + $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.')."
"); @@ -780,7 +795,7 @@ sub setup_date_selectors { my ($starttime,$endtime,$mode) = @_; if (! defined($starttime)) { $starttime = time; - unless ($mode eq 'createcourse') { + 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'}. @@ -804,12 +819,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); @@ -830,7 +853,7 @@ sub date_setting_table { my $dateDefault = ''.&mt('Starting Date').' | '. @@ -897,6 +923,10 @@ sub get_student_username_domain_form {
'.$_.' | ');
- foreach (split(/\,/,$coursepersonnel{$_})) {
- my ($puname,$pudom)=split(/\:/,$_);
+ #
+ if (! defined($ENV{'form.output'}) ||
+ $ENV{'form.output'} !~ /^(csv|excel|html)$/ ) {
+ $ENV{'form.output'} = 'html';
+ }
+ #
+ $r->print('
-$CCL - -END + # + # Interface output + $r->print(''); + $r->print(" \n");
if ($ENV{'form.action'} ne 'modifystudent') {
- my %lt=&Apache::lonlocal::texthash(
- 'ef' => "Excel format",
- 'ss' => "Student Status",
- );
- $r->print(< '.&mt('Current Class List').''); my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); if (! defined($classlist)) { $r->print(&mt('There are no students currently enrolled.')."\n"); } else { # Print out the available choices if ($ENV{'form.action'} eq 'modifystudent') { - &show_class_list($r,'view','modify','modifystudent', + &show_class_list($r,'view','modify', $ENV{'form.Status'},$classlist,$keylist); } else { - &show_class_list($r,'view','aboutme','classlist', + &show_class_list($r,$ENV{'form.output'},'aboutme', $ENV{'form.Status'},$classlist,$keylist); } } } -# ============================================== view classlist -sub print_formatted_classlist { - my $r=shift; - my $mode = shift; - my $cid=$ENV{'request.course.id'}; - my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); - if (! defined($classlist)) { - $r->print(&mt('There are no students currently enrolled.')."\n"); - } else { - &show_class_list($r,$mode,'nolink','csv', - $ENV{'form.Status'},$classlist,$keylist); - } -} - # =================================================== Show student list to drop sub show_class_list { - my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_; + my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_; my $cid=$ENV{'request.course.id'}; # # Variables for excel output - my ($excel_workbook, $excel_sheet, $excel_filename,$row); + my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); + # + # Variables for csv output + my ($CSVfile,$CSVfilename); # my $sortby = $ENV{'form.sortby'}; - if ($sortby !~ /^(username|domain|section|fullname|id)$/) { + if ($sortby !~ /^(username|domain|section|fullname|id|start|end|type)$/) { $sortby = 'username'; } # Print out header - if ($mode eq 'view') { + unless ($mode eq 'autoenroll') { + $r->print(<
$cellentry | \n ");
+ } else {
+ $r->print(" | ".(++$studentcount)." | \n ");
+ }
if ($linkto eq 'nothing') {
$r->print($username);
} elsif ($linkto eq 'aboutme') {
@@ -1302,33 +1434,61 @@ END
| $id |
$name |
$section |
-$start |
+ $end |
+
END
} elsif ($mode eq 'csv') {
+ next if (! defined($CSVfile));
# no need to bother with $linkto
+ 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) {
+ foreach ($username,$domain,$id,$name,$section,$start,$end) {
push @line,&Apache::loncommon::csv_translate($_);
}
if ($statusmode eq 'Any') {
push @line,&Apache::loncommon::csv_translate($status);
}
- my $tmp = $";
- $" = '","';
- $r->print("\"@line\"\n");
- $" = $tmp;
+ print $CSVfile '"'.join('","',@line).'"'."\n";
} elsif ($mode eq 'excel') {
- $excel_sheet->write($row++,0,[$username,$domain,$id,
- $name,$section,$status]);
+ $excel_sheet->write($row,0,[$username,$domain,$id,
+ $name,$section]);
+ my $col = 5;
+ foreach my $time ($start,$end) {
+ $excel_sheet->write($row,$col++,
+ &Apache::lonstathelpers::calc_serial($time),
+ $format->{'date'});
+ }
+ $excel_sheet->write($row,$col++,$status);
+ $row++;
}
}
- if ($mode eq 'view') {
+ if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
$r->print(''); } elsif ($mode eq 'excel') { $excel_workbook->close(); $r->print(' '. &mt('Your Excel spreadsheet').' '.&mt('is ready for download').'. '."\n"); + } elsif ($mode eq 'csv') { + close($CSVfile); + $r->print(''. + &mt('Your CSV file').' is ready for download.'. + "\n"); + $r->rflush(); + } + if ($mode eq 'autoenroll') { + return ($studentcount,$autocount,$manualcount,$lockcount,$unlockcount); } + return; } @@ -1663,7 +1823,7 @@ sub show_drop_list { ['sortby']); } my $sortby = $ENV{'form.sortby'}; - if ($sortby !~ /^(username|domain|section|fullname|id)$/) { + if ($sortby !~ /^(username|domain|section|fullname|id|start|end)$/) { $sortby = 'username'; } # @@ -1687,13 +1847,14 @@ function uncheckAll(field) { END +my %lt=&Apache::lonlocal::texthash('usrn' => "username", + 'dom' => "domain", + 'sn' => "student name", + 'sec' => "section", + 'start' => "start date", + 'end' => "end date", + ); if ($nosort) { - my %lt=&Apache::lonlocal::texthash( - 'usrn' => "username", - 'dom' => "domain", - 'sn' => "student name", - 'sec' => "section", - ); $r->print(<ID |
$lt{'sn'} |
$lt{'sec'} |
+ $lt{'start'} |
+ $lt{'end'} |
|
@@ -1726,6 +1883,10 @@ END
$lt{'sn'}
$lt{'sec'}
+ |
+ $lt{'start'}
+ |
+ $lt{'end'}
|
$id |
$name |
$section |
+ $start |
+ $end |
|