--- loncom/interface/spreadsheet/classcalc.pm 2003/05/16 20:55:11 1.1
+++ loncom/interface/spreadsheet/classcalc.pm 2003/05/29 18:31:27 1.7
@@ -1,5 +1,5 @@
#
-# $Id: classcalc.pm,v 1.1 2003/05/16 20:55:11 matthew Exp $
+# $Id: classcalc.pm,v 1.7 2003/05/29 18:31:27 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,30 +59,46 @@ use Time::HiRes;
@Apache::classcalc::ISA = ('Apache::Spreadsheet');
-sub get_classlist {
+##
+## Package variable
+##
+
+my @Students;
+
+sub initialize {
+ &Apache::lonstatistics::clear_classlist_variables();
+ @Students = &Apache::lonstatistics::get_students();
+ return;
+}
+
+sub html_header {
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 ($toprow,$bottomrow);
+ &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) = @{$_};
+ $toprow .= '
'.$name.' | ';
+ $bottomrow .= ''.$selector.' | ';
}
- my @SortedStudents = sort { $a->{'fullname'} cmp $b->{'fullname'} } @Students;
- return @SortedStudents;
+ return "\n
\n".
+ "".$toprow."
\n".
+ "".$bottomrow."
\n".
+ "
\n";
}
sub get_title {
my $self = shift;
- my $title = ''.$self->{'coursedesc'}."
\n";
# Section info should be included
+ my @title = ($self->{'coursedesc'}, scalar(localtime(time)) );
+ return @title;
+}
+
+sub get_html_title {
+ my $self = shift;
+ my ($classcalc_title,$time) = $self->get_title();
+ my $title = ''.$classcalc_title."
\n".''.$time."
\n";
return $title;
}
@@ -98,6 +115,7 @@ sub outsheet_html {
my $num_uneditable = 26;
my $num_left = 52-$num_uneditable;
my $tableheader =<<"END";
+
Course |
@@ -131,6 +149,7 @@ END
#
# Prepare to output rows
$tableheader =<<"END";
+
Row |
student | username | domain |
@@ -146,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);
}
@@ -163,18 +182,64 @@ END
''.$student->{'status'} .' | '.
$self->html_row($num_uneditable,$rownum)."
\n");
}
- $r->print("
\n");
+ $r->print("\n");
return;
}
-sub outsheet_csv {
+sub excel_rows {
+ # writes the meat of the spreadsheet to an excel worksheet. Called
+ # by Spreadsheet::outsheet_excel;
my $self = shift;
- my ($r) = @_;
+ my ($worksheet,$cols_output,$rows_output) = @_;
+ #
+ # Write a header row
+ $cols_output = 0;
+ foreach my $value ('fullname','username','domain','section','status') {
+ $worksheet->write($rows_output,$cols_output++,$value);
+ }
+ $rows_output++;
+ #
+ # Write each students row
+ foreach my $student (@Students) {
+ $cols_output = 0;
+ 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->excel_output_row($worksheet,$rownum,$rows_output++,
+ @studentdata);
+ }
+ return;
}
-sub outsheet_excel {
+sub csv_rows {
+ # writes the meat of the spreadsheet to an excel worksheet. Called
+ # by Spreadsheet::outsheet_excel;
my $self = shift;
- my ($r) = @_;
+ 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 {
@@ -182,27 +247,17 @@ sub outsheet_recursive_excel {
my ($r) = @_;
}
-sub display {
- my $self = shift;
- my ($r) = @_;
- $self->compute($r);
- # display as html/csv/excel/etc....
- $self->outsheet_html($r);
- return;
-}
-
sub compute {
my $self = shift;
my ($r) = @_;
$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::studentcalc::initialize_package();
- foreach my $student ($self->get_classlist()) {
+ foreach my $student (@Students) {
my $sname = $student->{'username'}.':'.$student->{'domain'};
my $studentsheet = Apache::studentcalc->new
($student->{'username'},$student->{'domain'},undef);
@@ -227,6 +282,7 @@ sub compute {
$self->constants(\%c);
$self->formulas(\%f);
$self->calcsheet();
+ $self->save() if ($self->need_to_save());
}
1;