--- loncom/interface/spreadsheet/classcalc.pm 2003/05/23 19:36:04 1.3
+++ loncom/interface/spreadsheet/classcalc.pm 2003/06/23 16:06:11 1.9
@@ -1,5 +1,5 @@
#
-# $Id: classcalc.pm,v 1.3 2003/05/23 19:36:04 matthew Exp $
+# $Id: classcalc.pm,v 1.9 2003/06/23 16:06:11 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -51,6 +51,7 @@ use Apache::loncoursedata();
use Apache::lonhtmlcommon();
use Apache::Spreadsheet;
use Apache::studentcalc;
+use Apache::lonstatistics();
use HTML::Entities();
use Spreadsheet::WriteExcel;
use Apache::lonnet;
@@ -58,10 +59,23 @@ use Time::HiRes;
@Apache::classcalc::ISA = ('Apache::Spreadsheet');
+##
+## Package variable
+##
+
+my @Students;
+
+sub initialize {
+ &Apache::lonstatistics::clear_classlist_variables();
+ @Students = &Apache::lonstatistics::get_students();
+ return;
+}
+
sub html_header {
my $self = shift;
my ($toprow,$bottomrow);
- foreach (['Sections','Section selector goes here'],
+ &Apache::lonstatistics::clear_classlist_variables();
+ foreach (['Sections',&Apache::lonstatistics::SectionSelect('Section','multpile',3)],
['Enrollment Status',&Apache::lonhtmlcommon::StatusOptions(undef,undef,3)],
['Output Format',&Apache::Spreadsheet::output_selector()]) {
my ($name,$selector) = @{$_};
@@ -74,26 +88,6 @@ sub html_header {
"\n
";
}
-sub get_classlist {
- my $self = shift;
- # Retrieve the classlist
- my @Students = ();
- my ($classlist,$field_names) = &Apache::loncoursedata::get_classlist
- ($self->{'cid'},$self->{'cdom'},$self->{'cnum'});
- while (my ($student,$student_data) = each (%$classlist)) {
- my $studenthash = ();
- for (my $i=0; $i< scalar(@$field_names);$i++) {
- my $field = $field_names->[$i];
- $studenthash->{$field}=$student_data->[$i];
- }
- # This is where we can skip students because they are in
- # the wrong section, have expired or pending roles, whatever...
- push (@Students,$studenthash);
- }
- my @SortedStudents = sort { $a->{'fullname'} cmp $b->{'fullname'} } @Students;
- return @SortedStudents;
-}
-
sub get_title {
my $self = shift;
# Section info should be included
@@ -171,7 +165,7 @@ END
}
#
my $num_output = 0;
- foreach my $student ($self->get_classlist()) {
+ foreach my $student (@Students) {
if ($num_output++ % 50 == 0) {
$r->print("\n".$tableheader);
}
@@ -181,8 +175,8 @@ END
'&sdomain='.$student->{'domain'}.'">';
$student->{'section'} = 'none' if ($student->{'section'} eq '-1');
$r->print(''.''.$rownum.' | '.
- ''.$link.$student->{'fullname'}.' | '.
- ''.$student->{'username'}.' | '.
+ ''.$student->{'fullname'}.' | '.
+ ''.$link.$student->{'username'}.' | '.
''.$student->{'domain'} .' | '.
''.$student->{'section'} .' | '.
''.$student->{'status'} .' | '.
@@ -192,13 +186,6 @@ END
return;
}
-sub outsheet_csv {
- my $self = shift;
- my ($r) = @_;
- $r->print('csv output is not supported yet
');
-}
-
-
sub excel_rows {
# writes the meat of the spreadsheet to an excel worksheet. Called
# by Spreadsheet::outsheet_excel;
@@ -213,7 +200,7 @@ sub excel_rows {
$rows_output++;
#
# Write each students row
- foreach my $student ($self->get_classlist()) {
+ foreach my $student (@Students) {
$cols_output = 0;
my $rownum = $self->get_row_number_from_key
($student->{'username'}.':'.$student->{'domain'});
@@ -229,6 +216,31 @@ sub excel_rows {
return;
}
+sub csv_rows {
+ # writes the meat of the spreadsheet to an excel worksheet. Called
+ # by Spreadsheet::outsheet_excel;
+ my $self = shift;
+ my ($filehandle) = @_;
+ #
+ # Write a header row
+
+ $self->csv_output_row($filehandle,undef,
+ ('fullname','username','domain','section','status'));
+ #
+ # Write each students row
+ foreach my $student (@Students) {
+ my $rownum = $self->get_row_number_from_key
+ ($student->{'username'}.':'.$student->{'domain'});
+ $student->{'section'} = 'none' if ($student->{'section'} eq '-1');
+ my @studentdata = ($student->{'fullname'},
+ $student->{'username'},
+ $student->{'domain'},
+ $student->{'section'},
+ $student->{'status'});
+ $self->csv_output_row($filehandle,$rownum,@studentdata);
+ }
+ return;
+}
sub outsheet_recursive_excel {
my $self = shift;
@@ -241,12 +253,15 @@ sub compute {
$self->initialize_safe_space();
my %c = $self->constants();
my %f = $self->formulas();
- my @Students = $self->get_classlist();
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
($r,'Spreadsheet Computation Status',
'Spreadsheet Computation', scalar(@Students));
+ &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
+ 'Processing course structure');
&Apache::studentcalc::initialize_package();
- foreach my $student ($self->get_classlist()) {
+ &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
+ 'Processing first student');
+ foreach my $student (@Students) {
my $sname = $student->{'username'}.':'.$student->{'domain'};
my $studentsheet = Apache::studentcalc->new
($student->{'username'},$student->{'domain'},undef);
@@ -271,6 +286,7 @@ sub compute {
$self->constants(\%c);
$self->formulas(\%f);
$self->calcsheet();
+ $self->save() if ($self->need_to_save());
}
1;