--- loncom/interface/Attic/londropadd.pm 2004/02/20 19:44:59 1.102 +++ loncom/interface/Attic/londropadd.pm 2004/02/26 22:42:21 1.103 @@ -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.103 2004/02/26 22:42:21 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1100,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'; } @@ -1108,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{$_})) { @@ -1126,31 +1127,38 @@ 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"); @@ -1159,27 +1167,16 @@ 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)=@_; @@ -1188,11 +1185,19 @@ sub show_class_list { # Variables for excel output my ($excel_workbook, $excel_sheet, $excel_filename,$row); # + # 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.')); @@ -1226,16 +1231,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 @@ -1305,6 +1327,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) { @@ -1313,10 +1336,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]); @@ -1328,6 +1348,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(); } } @@ -2121,14 +2147,10 @@ sub handler { # &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['state','action']); - 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()); - } + # 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'})) { @@ -2193,13 +2215,13 @@ sub handler { $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 @@ -2228,11 +2250,7 @@ sub handler { } # # Finish up - if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) { - $r->print("\n"); - } else { - $r->print(''); - } + $r->print(''); return OK; }