--- loncom/interface/Attic/londropadd.pm 2004/02/10 22:15:53 1.100 +++ loncom/interface/Attic/londropadd.pm 2004/03/01 16:34:54 1.106 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.100 2004/02/10 22:15:53 www Exp $ +# $Id: londropadd.pm,v 1.106 2004/03/01 16:34:54 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,9 +42,7 @@ 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(< @@ -1102,7 +1100,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,13 +1108,14 @@ 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(''); + $r->print('
'); foreach (sort keys %coursepersonnel) { $r->print(''); } $r->print('
'.$_.''); foreach (split(/\,/,$coursepersonnel{$_})) { @@ -1128,31 +1127,39 @@ sub print_html_classlist { $r->print('
'); -# --------------------------------------------------------------- Student roles + # + # Interface output my $CCL=&mt('Current Class List'); - $r->print(< - -

-$CCL -      -END + $r->print(''); + $r->print("

\n"); if ($ENV{'form.action'} ne 'modifystudent') { - my %lt=&Apache::lonlocal::texthash( - 'ef' => "Excel format", - 'ss' => "Student Status", - ); - $r->print(< -CSV format -         -$lt{'ef'} - -      -$lt{'ss'}: -END + my %lt=&Apache::lonlocal::texthash('csv' => "CSV", + 'excel' => "Excel", + 'html' => 'HTML'); + $r->print(''); + my $output_selector = ''; + $r->print(&mt('Output Format: [_1]',$output_selector).(' 'x3)); } - $r->print($status_select."

\n"); + $r->print(&mt('Student Status: [_1]',$status_select)."\n"); + $r->print(''. + "\n

\n"); + + # + # Print the classlist + $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"); @@ -1161,40 +1168,37 @@ END if ($ENV{'form.action'} eq 'modifystudent') { &show_class_list($r,'view','modify','modifystudent', $ENV{'form.Status'},$classlist,$keylist); - } else { + } elsif (! defined($mode) || $mode eq '') { &show_class_list($r,'view','aboutme','classlist', $ENV{'form.Status'},$classlist,$keylist); + } elsif ($mode eq 'csv' || $mode eq 'excel') { + &show_class_list($r,$mode,'nolink','csv', + $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 $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)$/) { $sortby = 'username'; } # Print out header + $r->print(< + + +END if ($mode eq 'view') { if ($linkto eq 'aboutme') { $r->print(&mt('Select a user name to view the users personal page.')); @@ -1228,16 +1232,33 @@ sub show_class_list { 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","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")).'"'."\n"; } } elsif ($mode eq 'excel') { # Create the excel spreadsheet @@ -1247,14 +1268,16 @@ 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","status"],$format->{'bold'}); } # # Sort the students @@ -1307,6 +1330,7 @@ END END } elsif ($mode eq 'csv') { + next if (! defined($CSVfile)); # no need to bother with $linkto my @line = (); foreach ($username,$domain,$id,$name,$section) { @@ -1315,10 +1339,7 @@ END 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]); @@ -1330,6 +1351,12 @@ END $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(); } } @@ -1365,7 +1392,28 @@ sub print_modify_student_form { $r->print('

'.$starttime.'

'); return; } + # # Deal with date forms + my $current_date_description = ''; + my $textdate = ''; + + if (! defined($starttime) || $starttime == 0) { + $current_date_description = &mt('Current Starting Date: not set'). + '
'; + } else { + $current_date_description = + &mt('Current Starting Date: [_1]', + &Apache::lonlocal::locallocaltime($starttime)).'
'; + } + if (! defined($endtime) || $endtime == 0) { + $current_date_description.= &mt('Current Ending Date: not set'). + '
'; + } else { + $current_date_description.= + &mt('Current Ending Date: [_1]', + &Apache::lonlocal::locallocaltime($endtime)).'
'; + + } my $date_table = &date_setting_table($starttime,$endtime); # if (! exists($ENV{'form.Status'}) || @@ -1398,7 +1446,6 @@ $lt{'odcc'} -

$lt{'mef'} $info{'firstname'} $info{'middlename'} $info{'lastname'} $info{'generation'}, $sname\@$sdom

@@ -1417,8 +1464,9 @@ $info{'lastname'} $info{'generation'}, $ $lt{'disn'}

-$lt{'sec'}: +$lt{'sec'}:

+

$current_date_description

$date_table

@@ -2083,6 +2131,12 @@ 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'})))) { @@ -2094,19 +2148,24 @@ sub handler { # # 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'})) { + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Enrollment Manager')); &print_main_menu($r); } elsif ($ENV{'form.action'} eq 'upload') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=upload&state=', + text=>"Upload Classlist"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Upload Classlist')); if (! exists($ENV{'form.state'})) { &print_first_courselist_upload_form($r); } elsif ($ENV{'form.state'} eq 'got_file') { @@ -2121,6 +2180,11 @@ sub handler { &print_first_courselist_upload_form($r); } } elsif ($ENV{'form.action'} eq 'drop') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=drop', + text=>"Drop Students"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Drop Students')); if (! exists($ENV{'form.state'})) { &print_drop_menu($r); } elsif ($ENV{'form.state'} eq 'done') { @@ -2129,6 +2193,11 @@ sub handler { &print_drop_menu($r); } } elsif ($ENV{'form.action'} eq 'enrollstudent') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=enrollstudent', + text=>"Enroll Student"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Enroll Student')); if (! exists($ENV{'form.state'})) { &get_student_username_domain_form($r); } elsif ($ENV{'form.state'} eq 'gotusername') { @@ -2139,16 +2208,26 @@ sub handler { &get_student_username_domain_form($r); } } elsif ($ENV{'form.action'} eq 'classlist') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=classlist', + text=>"View Classlist"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'View Classlist')); 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') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=modifystudent', + text=>"Modify Student Data"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Modify Student Data')); if (! exists($ENV{'form.state'})) { &print_html_classlist($r); } elsif ($ENV{'form.state'} eq 'selected') { @@ -2163,15 +2242,13 @@ sub handler { &Apache::lonnet::logthis("Undetermined state in londropadd.pm. ". "form.action = ".$ENV{'form.action'}. "Someone should fix this."); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Enrollment Manager')); &print_main_menu($r); } # # Finish up - if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) { - $r->print("\n"); - } else { - $r->print(''); - } + $r->print(''); return OK; }