--- loncom/interface/Attic/lonspreadsheet.pm 2002/11/08 15:28:03 1.136
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/11/26 14:58:41 1.150
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.136 2002/11/08 15:28:03 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.150 2002/11/26 14:58:41 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -53,16 +53,16 @@ built-in functions.
package Apache::lonspreadsheet;
use strict;
+use Apache::Constants qw(:common :http);
+use Apache::lonnet;
+use Apache::lonhtmlcommon;
+use Apache::loncoursedata;
+use Apache::File();
use Safe;
use Safe::Hole;
use Opcode;
-use Apache::lonnet;
-use Apache::Constants qw(:common :http);
use GDBM_File;
use HTML::TokeParser;
-use Apache::lonhtmlcommon;
-use Apache::loncoursedata;
-use Apache::File();
use Spreadsheet::WriteExcel;
#
@@ -1086,6 +1086,44 @@ sub geterrorlog {
return ${$sheet->{'safe'}->varglob('errorlog')};
}
+sub gettitle {
+ my $sheet = shift;
+ if ($sheet->{'sheettype'} eq 'classcalc') {
+ return $sheet->{'coursedesc'};
+ } elsif ($sheet->{'sheettype'} eq 'studentcalc') {
+ return 'Grades for '.$sheet->{'uname'}.'@'.$sheet->{'udom'};
+ } elsif ($sheet->{'sheettype'} eq 'assesscalc') {
+ if (($sheet->{'usymb'} eq '_feedback') ||
+ ($sheet->{'usymb'} eq '_evaluation') ||
+ ($sheet->{'usymb'} eq '_discussion') ||
+ ($sheet->{'usymb'} eq '_tutoring')) {
+ my $title = $sheet->{'usymb'};
+ $title =~ s/^_//;
+ $title = ucfirst($title);
+ return $title;
+ }
+ return if (! defined($sheet->{'mapid'}) ||
+ $sheet->{'mapid'} !~ /^\d+$/);
+ my $mapid = $sheet->{'mapid'};
+ return if (! defined($sheet->{'resid'}) ||
+ $sheet->{'resid'} !~ /^\d+$/);
+ my $resid = $sheet->{'resid'};
+ my %course_db;
+ tie(%course_db,'GDBM_File',$sheet->{'coursefilename'}.'.db',
+ &GDBM_READER(),0640);
+ return if (! tied(%course_db));
+ my $key = 'title_'.$mapid.'.'.$resid;
+ my $title = '';
+ if (exists($course_db{$key})) {
+ $title = $course_db{$key};
+ } else {
+ $title = $sheet->{'usymb'};
+ }
+ untie (%course_db);
+ return $title;
+ }
+}
+
# ----------------------------------------------------- Get value of $f{'A'.$n}
sub getfa {
my $sheet = shift;
@@ -1111,7 +1149,7 @@ sub exportdata {
sub update_student_sheet{
- my $sheet = shift;
+ my ($sheet,$r,$c) = @_;
# Load in the studentcalc sheet
&readsheet($sheet,'default_studentcalc');
# Determine the structure (contained assessments, etc) of the sheet
@@ -1119,7 +1157,7 @@ sub update_student_sheet{
# Load in the cached sheets for this student
&cachedssheets($sheet);
# Load in the (possibly cached) data from the assessment sheets
- &loadstudent($sheet);
+ &loadstudent($sheet,$r,$c);
# Compute the sheet
&calcsheet($sheet);
}
@@ -1148,16 +1186,45 @@ sub get_row {
########################################################################
sub sort_indicies {
my $sheet = shift;
- #
- # Sort the rows in some manner
- #
- my @sortby=();
my @sortidx=();
- for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
- push (@sortby, $sheet->{'safe'}->reval('$f{"A'.$row.'"}'));
- push (@sortidx, $row);
+ #
+ if ($sheet->{'sheettype'} eq 'classcalc') {
+ my @sortby=(undef);
+ # Skip row 0
+ for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
+ my (undef,$sname,$sdom,$fullname,$section,$id) =
+ split(':',$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$row}});
+ push (@sortby, lc($fullname));
+ push (@sortidx, $row);
+ }
+ @sortidx = sort { $sortby[$a] cmp $sortby[$b]; } @sortidx;
+ } elsif ($sheet->{'sheettype'} eq 'studentcalc') {
+ my @sortby1=(undef);
+ my @sortby2=(undef);
+ # Skip row 0
+ for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
+ my (undef,$symb,$uname,$udom,$mapid,$resid,$title) =
+ split(':',$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$row}});
+ $symb = &Apache::lonnet::unescape($symb);
+ my ($sequence) = ($symb =~ /\/([^\/]*\.sequence)/);
+ if ($sequence eq '') {
+ $sequence = $symb;
+ }
+ push (@sortby1, $sequence);
+ push (@sortby2, $title);
+ push (@sortidx, $row);
+ }
+ @sortidx = sort { $sortby1[$a] cmp $sortby1[$b] ||
+ $sortby2[$a] cmp $sortby2[$b] } @sortidx;
+ } else {
+ my @sortby=(undef);
+ # Skip row 0
+ for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
+ push (@sortby, $sheet->{'safe'}->reval('$f{"A'.$row.'"}'));
+ push (@sortidx, $row);
+ }
+ @sortidx = sort { $sortby[$a] cmp $sortby[$b]; } @sortidx;
}
- @sortidx=sort { lc($sortby[$a]) cmp lc($sortby[$b]); } @sortidx;
return @sortidx;
}
@@ -1190,6 +1257,7 @@ sub html_editable_cell {
if ($value =~ /^\s*$/ ) {
$value = '#';
}
+ $formula =~ s/\n/\\n/gs;
$result .= ''.$value.'';
return $result;
@@ -1249,7 +1317,7 @@ END
# Print out template row
####################################
my ($rowlabel,@rowdata) = &get_row($sheet,'-');
- my $row_html = '
'.&format_html_rowlabel($rowlabel).'
';
+ my $row_html = '
'.&format_html_rowlabel($sheet,$rowlabel).'
';
my $num_cols_output = 0;
foreach my $cell (@rowdata) {
if ($num_cols_output++ < $num_uneditable) {
@@ -1267,8 +1335,7 @@ END
# Print out summary/export row
####################################
my ($rowlabel,@rowdata) = &get_row($sheet,'0');
- my $rowcount = 0;
- $row_html = '
'.&format_html_rowlabel($rowlabel).'
';
+ $row_html = '
'.&format_html_rowlabel($sheet,$rowlabel).'
';
$num_cols_output = 0;
foreach my $cell (@rowdata) {
if ($num_cols_output++ < 26) {
@@ -1293,6 +1360,20 @@ END
foreach my $rownum (@Rows) {
my ($rowlabel,@rowdata) = &get_row($sheet,$rownum);
next if ($rowlabel =~ /^\s*$/);
+ next if (($sheet->{'sheettype'} eq 'assesscalc') &&
+ (! $ENV{'form.showall'}) &&
+ ($rowdata[0]->{'value'} =~ /^\s*$/));
+ if (! $ENV{'form.showall'} &&
+ $sheet->{'sheettype'} =~ /^(studentcalc|classcalc)$/) {
+ my $row_is_empty = 1;
+ foreach my $cell (@rowdata) {
+ if ($cell->{'value'} !~ /^\s*$/) {
+ $row_is_empty = 0;
+ last;
+ }
+ }
+ next if ($row_is_empty);
+ }
#
my $defaultbg='#E0FF';
#
@@ -1300,11 +1381,11 @@ END
'';
#
if ($sheet->{'sheettype'} eq 'classcalc') {
- $row_html.='
'.&format_html_rowlabel($rowlabel).'
';
+ $row_html.='
'.&format_html_rowlabel($sheet,$rowlabel).'
';
# Output links for each student?
# Nope, that is already done for us in format_html_rowlabel (for now)
} elsif ($sheet->{'sheettype'} eq 'studentcalc') {
- $row_html.='