--- loncom/interface/Attic/lonspreadsheet.pm 2002/11/08 15:28:03 1.136
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/11/12 22:44:28 1.139
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.136 2002/11/08 15:28:03 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.139 2002/11/12 22:44:28 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -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;
@@ -1153,6 +1191,7 @@ sub sort_indicies {
#
my @sortby=();
my @sortidx=();
+ # Skip row 0
for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
push (@sortby, $sheet->{'safe'}->reval('$f{"A'.$row.'"}'));
push (@sortidx, $row);
@@ -1190,6 +1229,7 @@ sub html_editable_cell {
if ($value =~ /^\s*$/ ) {
$value = '#';
}
+ $formula =~ s/\n/\\n/gs;
$result .= ''.$value.'';
return $result;
@@ -1267,7 +1307,6 @@ END
# Print out summary/export row
####################################
my ($rowlabel,@rowdata) = &get_row($sheet,'0');
- my $rowcount = 0;
$row_html = '
'.&format_html_rowlabel($rowlabel).' | ';
$num_cols_output = 0;
foreach my $cell (@rowdata) {
@@ -1520,7 +1559,6 @@ sub create_excel_spreadsheet {
my $filename = '/prtspool/'.
$ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
time.'_'.rand(1000000000).'.xls';
- #&Apache::lonnet::logthis("spreadsheet:filename = ".$filename);
my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
if (! defined($workbook)) {
$r->log_error("Error creating excel spreadsheet $filename: $!");
@@ -1543,25 +1581,46 @@ sub create_excel_spreadsheet {
sub export_sheet_as_excel {
my $sheet = shift;
my $worksheet = shift;
+ #
+ my $rows_output = 0;
+ my $cols_output = 0;
+ ####################################
+ # Write an identifying row #
+ ####################################
+ my @Headerinfo = ($sheet->{'coursedesc'});
+ my $title = &gettitle($sheet);
+ $cols_output = 0;
+ if (defined($title)) {
+ $worksheet->write($rows_output++,$cols_output++,$title);
+ }
+ ####################################
+ # Write the summary/export row #
+ ####################################
+ my ($rowlabel,@rowdata) = &get_row($sheet,'0');
+ my $label = &format_excel_rowlabel($rowlabel);
+ $cols_output = 0;
+ $worksheet->write($rows_output,$cols_output++,$label);
+ foreach my $cell (@rowdata) {
+ $worksheet->write($rows_output,$cols_output++,$cell->{'value'});
+ }
+ $rows_output+= 2; # Skip a row, just for fun
####################################
# Prepare to output rows
####################################
my @Rows = &sort_indicies($sheet);
#
# Loop through the rows and output them one at a time
- my $rows_output=0;
foreach my $rownum (@Rows) {
my ($rowlabel,@rowdata) = &get_row($sheet,$rownum);
next if ($rowlabel =~ /^\s*$/);
- my $cols_output = 0;
+ $cols_output = 0;
my $label = &format_excel_rowlabel($rowlabel);
$worksheet->write($rows_output,$cols_output++,$label);
if (ref($label)) {
$cols_output = (scalar(@$label));
}
foreach my $cell (@rowdata) {
- $worksheet->write($rows_output,$cols_output++,
- $cell->{'value'});
+ $worksheet->write($rows_output,$cols_output++,$cell->{'value'});
}
$rows_output++;
}
@@ -1730,6 +1789,8 @@ sub makenewsheet {
$sheet->{'udom'} = $udom;
$sheet->{'sheettype'} = $stype;
$sheet->{'usymb'} = $usymb;
+ $sheet->{'mapid'} = $ENV{'form.mapid'};
+ $sheet->{'resid'} = $ENV{'form.resid'};
$sheet->{'cid'} = $ENV{'request.course.id'};
$sheet->{'csec'} = $Section{$uname.':'.$udom};
$sheet->{'coursefilename'} = $ENV{'request.course.fn'};
@@ -1737,7 +1798,7 @@ sub makenewsheet {
$sheet->{'cdom'} = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
$sheet->{'chome'} = $ENV{'course.'.$ENV{'request.course.id'}.'.home'};
$sheet->{'coursedesc'} = $ENV{'course.'.$ENV{'request.course.id'}.
- 'description'};
+ '.description'};
$sheet->{'uhome'} = &Apache::lonnet::homeserver($uname,$udom);
#
#
@@ -1943,10 +2004,11 @@ sub format_html_rowlabel {
my ($type,$labeldata) = split(':',$rowlabel,2);
my $result = '';
if ($type eq 'symb') {
- my ($symb,$uname,$udom,$title) = split(':',$labeldata);
+ my ($symb,$uname,$udom,$mapid,$resid,$title) = split(':',$labeldata);
$symb = &Apache::lonnet::unescape($symb);
$result = ''.$title.'';
+ '&uname='.$uname.'&udom='.$udom.
+ '&mapid='.$mapid.'&resid='.$resid.'">'.$title.'';
} elsif ($type eq 'student') {
my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
$result ='{'uname'}.'_'.$sheet->{'udom'}}=1;
}
}
@@ -2789,8 +2850,8 @@ sub handler {
#
# Get query string for limited number of parameters
#
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['uname','udom','usymb','ufn']);
+ &Apache::loncommon::get_unprocessed_cgi
+ ($ENV{'QUERY_STRING'},['uname','udom','usymb','ufn','mapid','resid']);
#
# Deal with restricted student permissions
#
@@ -2832,17 +2893,45 @@ sub handler {
# Header....
#
$r->print('LON-CAPA Spreadsheet');
+ my $nothing = "''";
+ if ($ENV{'browser.type'} eq 'explorer') {
+ $nothing = "'javascript:void(0);'";
+ }
+
if ($ENV{'request.role'} !~ /^st\./) {
$r->print(<
- function celledit(cn,cf) {
- var cnf=prompt(cn,cf);
- if (cnf!=null) {
- document.sheet.unewfield.value=cn;
- document.sheet.unewformula.value=cnf;
- document.sheet.submit();
+ var editwin;
+
+ function celledit(cellname,cellformula) {
+ var edit_text = '';
+ edit_text +='Cell Edit Window';
+ edit_text += '