--- loncom/interface/Attic/londropadd.pm 2004/02/11 15:30:36 1.101
+++ loncom/interface/Attic/londropadd.pm 2005/01/11 22:12:22 1.123
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.101 2004/02/11 15:30:36 matthew Exp $
+# $Id: londropadd.pm,v 1.123 2005/01/11 22:12:22 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,14 +37,13 @@ use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
use Spreadsheet::WriteExcel;
+use Apache::lonstathelpers();
use Apache::lonlocal;
###############################################################
###############################################################
sub header {
- my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager').
- &Apache::loncommon::help_open_faq(9).
- &Apache::loncommon::help_open_bug('Instructor Interface');
+ my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
my $title = &mt('LON-CAPA Enrollment Manager');
return(< ';
+ $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.='
- - $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;
}
###############################################################
@@ -305,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;
@@ -701,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();
@@ -782,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'}.
@@ -806,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);
@@ -832,7 +853,7 @@ sub date_setting_table {
my $dateDefault = '
-$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('Your Excel spreadsheet').' '.&mt('is ready for download').'.\n";
$result .= '
+
END
return;
}
@@ -909,6 +937,8 @@ sub print_enroll_single_student_form {
#
my $username = $ENV{'form.cuname'};
my $domain = $ENV{'form.cudomain'};
+ $username=~s/\W//gs;
+ $domain=~s/\W//gs;
my $home = &Apache::lonnet::homeserver($username,$domain);
# $new_user flags whether we are creating a new user or using an old one
my $new_user = 1;
@@ -1102,7 +1132,7 @@ sub print_drop_menu {
# ============================================== view classlist
sub print_html_classlist {
- my $r=shift;
+ my ($r,$mode) = @_;
if (! exists($ENV{'form.sortby'})) {
$ENV{'form.sortby'} = 'username';
}
@@ -1110,111 +1140,136 @@ sub print_html_classlist {
$ENV{'form.Status'} = 'Active';
}
my $status_select = &Apache::lonhtmlcommon::StatusOptions
- ($ENV{'form.Status'},'studentform');
+ ($ENV{'form.Status'});
my $cid=$ENV{'request.course.id'};
my $cdom=$ENV{'course.'.$cid.'.domain'};
my $cnum=$ENV{'course.'.$cid.'.num'};
-# -------------------------------------------------------- Get course personnel
+ #
+ # List course personnel
my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);
- $r->print(''.&mt('Starting Date').' '.
@@ -899,6 +923,10 @@ sub get_student_username_domain_form {
');
- foreach (sort keys %coursepersonnel) {
- $r->print('
END
}
$r->print(''.$_.' ');
- foreach (split(/\,/,$coursepersonnel{$_})) {
- my ($puname,$pudom)=split(/\:/,$_);
+ #
+ if (! defined($ENV{'form.output'}) ||
+ $ENV{'form.output'} !~ /^(csv|excel|html)$/ ) {
+ $ENV{'form.output'} = 'html';
+ }
+ #
+ $r->print(' ');
+ foreach my $role (sort keys %coursepersonnel) {
+ next if ($role =~ /^\s*$/);
+ $r->print('
');
-# --------------------------------------------------------------- Student roles
- my $CCL=&mt('Current Class List');
- $r->print(< ');
}
$r->print(''.$role.' ');
+ foreach my $user (split(',',$coursepersonnel{$role})) {
+ my ($puname,$pudom)=split(':',$user);
$r->print(' '.&Apache::loncommon::aboutmewrapper(
- &Apache::loncommon::plainname($puname,
- $pudom),$puname,$pudom));
+ &Apache::loncommon::plainname($puname,
+ $pudom),
+ $puname,$pudom));
}
$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(<
-
+
+ ");
+ if ($mode eq 'autoenroll') {
+ $r->print("
+
+
END
} elsif ($mode eq 'csv') {
+ #
+ # Open a file
+ $CSVfilename = '/prtspool/'.
+ $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 $!");
+ $r->print("Problems occured in writing the csv file. ".
+ "This error has been logged. ".
+ "Please alert your LON-CAPA administrator.");
+ $CSVfile = undef;
+ }
+ #
+ # Write headers and data to file
if($statusmode eq 'Expired') {
- $r->print(&mt('Students with expired roles'));
+ print $CSVfile '"'.&mt('Students with expired roles').'"'."\n";
}
if ($statusmode eq 'Any') {
- $r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID",
- &mt("student name"),&mt("section"),&mt("status"))).
- '"'."\n");
+ print $CSVfile '"'.join('","',map {
+ &Apache::loncommon::csv_translate(&mt($_))
+ } ("username","domain","ID","student name",
+ "section","start date","end date","status")).'"'."\n";
} else {
- $r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID",
- &mt("student name"),&mt("section"))).'"'."\n");
+ print $CSVfile '"'.join('","',map {
+ &Apache::loncommon::csv_translate(&mt($_))
+ } ("username","domain","ID","student name",
+ "section","start date","end date")).'"'."\n";
}
} elsif ($mode eq 'excel') {
# Create the excel spreadsheet
@@ -1247,14 +1323,18 @@ END
$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_sheet = $excel_workbook->addworksheet('classlist');
#
my $description = 'Class List for '.
$ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- $excel_sheet->write($row++,0,$description);
+ $excel_sheet->write($row++,0,$description,$format->{'h1'});
#
$excel_sheet->write($row++,0,["username","domain","ID",
- "student name","section","status"]);
+ "student name","section",
+ "start date","end date","status"],
+ $format->{'bold'});
}
#
# Sort the students
@@ -1273,16 +1353,58 @@ 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 $username = $classlist->{$student}->[$index{'username'}];
- my $domain = $classlist->{$student}->[$index{'domain'}];
- my $section = $classlist->{$student}->[$index{'section'}];
- my $name = $classlist->{$student}->[$index{'fullname'}];
- my $id = $classlist->{$student}->[$index{'id'}];
- my $status = $classlist->{$student}->[$index{'status'}];
+ my $sdata = $classlist->{$student};
+ my $username = $sdata->[$index{'username'}];
+ my $domain = $sdata->[$index{'domain'}];
+ my $section = $sdata->[$index{'section'}];
+ 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') {
- $r->print("$lt{'type'}
+ ");
+ } else {
+ $r->print("
+Count
+ ");
+ }
+ $r->print(<
$lt{'dom'}
@@ -1224,20 +1279,41 @@ sub show_class_list {
$lt{'sn'}
$lt{'sec'}
+
+ $lt{'start'}
+
+ $lt{'end'}
-\n \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(" \n ");
+ if ($mode eq 'autoenroll') {
+ my $lockedtype = $sdata->[$index{'lockedtype'}];
+ $studentcount++;
+ my $cellentry;
+ if ($type eq 'auto') {
+ $cellentry = ''.&mt('auto').' Change';
+ $autocount ++;
+ } else {
+ $cellentry = '
+
';
+ }
+ $r->print("'.&mt('manual').' $cellentry \n ");
+ } else {
+ $r->print(" ".(++$studentcount)." \n ");
+ }
if ($linkto eq 'nothing') {
$r->print($username);
} elsif ($linkto eq 'aboutme') {
@@ -1304,33 +1426,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('
@@ -1705,16 +1856,12 @@ END
END
} else {
- 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'}
END
@@ -1751,12 +1902,25 @@ END
} (keys(%$classlist));
foreach my $student (@Sorted_Students) {
my $error;
- my $username = $classlist->{$student}->[$index{'username'}];
- my $domain = $classlist->{$student}->[$index{'domain'}];
- my $section = $classlist->{$student}->[$index{'section'}];
- my $name = $classlist->{$student}->[$index{'fullname'}];
- my $id = $classlist->{$student}->[$index{'id'}];
- my $status = $classlist->{$student}->[$index{'status'}];
+ my $sdata = $classlist->{$student};
+ my $username = $sdata->[$index{'username'}];
+ my $domain = $sdata->[$index{'domain'}];
+ my $section = $sdata->[$index{'section'}];
+ my $name = $sdata->[$index{'fullname'}];
+ my $id = $sdata->[$index{'id'}];
+ my $start = $sdata->[$index{'start'}];
+ my $end = $sdata->[$index{'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 $status = $sdata->[$index{'status'}];
next if ($status ne 'Active');
#
$r->print(<<"END");
@@ -1767,11 +1931,13 @@ END
@@ -1728,6 +1875,10 @@ END
$lt{'sn'}
$lt{'sec'}
+
+ $lt{'start'}
+
+ $lt{'end'}
$id
$name
$section
+ $start
+ $end
');
- my %lt=&Apache::lonlocal::texthash(
+ %lt=&Apache::lonlocal::texthash(
'dp' => "Drop Students",
'ca' => "check all",
'ua' => "uncheck all",
@@ -2104,30 +2270,50 @@ sub handler {
}
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['action','state']);
+
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/dropadd",
+ text=>"Enrollment Manager",
+ faq=>9,bug=>'Instructor Interface',});
# Needs to be in a course
- if (! (($ENV{'request.course.fn'}) &&
- (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'})))) {
- # Not in a course, or not allowed to modify parms
+ if (! ($ENV{'request.course.fn'})) {
+ # Not in a course
$ENV{'user.error.msg'}=
"/adm/dropadd:cst:0:0:Cannot drop or add students";
return HTTP_NOT_ACCEPTABLE;
}
#
+ my $view_permission =
+ &Apache::lonnet::allowed('vcl',$ENV{'request.course.id'});
+ my $enrl_permission =
+ &Apache::lonnet::allowed('cst',$ENV{'request.course.id'});
+ if (! $view_permission && ! $enrl_permission) {
+ $ENV{'user.error.msg'}=
+ "/adm/dropadd:cst:0:0:Cannot drop or add students";
+ return HTTP_NOT_ACCEPTABLE;
+ }
+ #
# Only output the header information if they did not request csv format
#
- if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) {
- $r->content_type('text/csv');
- } else {
- # Start page
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- $r->print(&header());
- }
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['state','action']);
+ # Start page
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ $r->print(&header());
#
# Main switch on form.action and form.state, as appropriate
if (! exists($ENV{'form.action'})) {
- &print_main_menu($r);
- } elsif ($ENV{'form.action'} eq 'upload') {
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (undef,'Enrollment Manager'));
+ &print_main_menu($r,$enrl_permission,$view_permission);
+ } elsif ($ENV{'form.action'} eq 'upload' && $enrl_permission) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/dropadd?action=upload&state=',
+ text=>"Upload Classlist"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (undef,'Upload Classlist','Course_Create_Class_List'));
if (! exists($ENV{'form.state'})) {
&print_first_courselist_upload_form($r);
} elsif ($ENV{'form.state'} eq 'got_file') {
@@ -2141,7 +2327,12 @@ sub handler {
} else {
&print_first_courselist_upload_form($r);
}
- } elsif ($ENV{'form.action'} eq 'drop') {
+ } elsif ($ENV{'form.action'} eq 'drop' && $enrl_permission) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/dropadd?action=drop',
+ text=>"Drop Students"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (undef,'Drop Students','Course_Drop_Student'));
if (! exists($ENV{'form.state'})) {
&print_drop_menu($r);
} elsif ($ENV{'form.state'} eq 'done') {
@@ -2149,7 +2340,12 @@ sub handler {
} else {
&print_drop_menu($r);
}
- } elsif ($ENV{'form.action'} eq 'enrollstudent') {
+ } elsif ($ENV{'form.action'} eq 'enrollstudent' && $enrl_permission) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/dropadd?action=enrollstudent',
+ text=>"Enroll Student"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (undef,'Enroll Student','Course_Add_Student'));
if (! exists($ENV{'form.state'})) {
&get_student_username_domain_form($r);
} elsif ($ENV{'form.state'} eq 'gotusername') {
@@ -2159,17 +2355,27 @@ sub handler {
} else {
&get_student_username_domain_form($r);
}
- } elsif ($ENV{'form.action'} eq 'classlist') {
+ } elsif ($ENV{'form.action'} eq 'classlist' && $view_permission) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/dropadd?action=classlist',
+ text=>"View Classlist"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (undef,'View Classlist','Course_View_Class_List'));
if (! exists($ENV{'form.state'})) {
- &print_html_classlist($r);
+ &print_html_classlist($r,undef);
} elsif ($ENV{'form.state'} eq 'csv') {
- &print_formatted_classlist($r,'csv');
+ &print_html_classlist($r,'csv');
} elsif ($ENV{'form.state'} eq 'excel') {
- &print_formatted_classlist($r,'excel');
+ &print_html_classlist($r,'excel');
} else {
- &print_html_classlist($r);
+ &print_html_classlist($r,undef);
}
- } elsif ($ENV{'form.action'} eq 'modifystudent') {
+ } elsif ($ENV{'form.action'} eq 'modifystudent' && $enrl_permission) {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'/adm/dropadd?action=modifystudent',
+ text=>"Modify Student Data"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (undef,'Modify Student Data','Course_Modify_Student_Data'));
if (! exists($ENV{'form.state'})) {
&print_html_classlist($r);
} elsif ($ENV{'form.state'} eq 'selected') {
@@ -2184,15 +2390,13 @@ sub handler {
&Apache::lonnet::logthis("Undetermined state in londropadd.pm. ".
"form.action = ".$ENV{'form.action'}.
"Someone should fix this.");
- &print_main_menu($r);
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (undef,'Enrollment Manager'));
+ &print_main_menu($r,$enrl_permission,$view_permission);
}
#
# Finish up
- if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) {
- $r->print("\n");
- } else {
- $r->print('