--- loncom/interface/Attic/lonspreadsheet.pm 2002/12/03 10:04:21 1.153
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/12/05 15:31:05 1.155
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.153 2002/12/03 10:04:21 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.155 2002/12/05 15:31:05 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -981,7 +981,11 @@ sub outrowassess {
if ($n) {
my ($usy,$ufn)=split(/__&&&\__/,$sheet->{'f'}->{'A'.$n});
if (exists($sheet->{'rowlabel'}->{$usy})) {
- $rowlabel = $sheet->{'rowlabel'}->{$usy};
+ # This is dumb, but we need the information when we output
+ # the html version of the studentcalc spreadsheet for the
+ # links to the assesscalc sheets.
+ $rowlabel = $sheet->{'rowlabel'}->{$usy}.':'.
+ &Apache::lonnet::escape($ufn);
} else {
$rowlabel = '';
}
@@ -1198,9 +1202,13 @@ sub sort_indicies {
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 ($key,undef) = split(/__&&&\__/,$sheet->{'f'}->{'A'.$row});
+ my $rowlabel = $sheet->{'rowlabel'}->{$key};
+ my (undef,$symb,$mapid,$resid,$title,$ufn) =
+ split(':',$rowlabel);
+ $ufn = &Apache::lonnet::unescape($ufn);
+ $symb = &Apache::lonnet::unescape($symb);
+ $title = &Apache::lonnet::unescape($title);
my ($sequence) = ($symb =~ /\/([^\/]*\.sequence)/);
if ($sequence eq '') {
$sequence = $symb;
@@ -1276,6 +1284,7 @@ sub html_uneditable_cell {
sub outsheet_html {
my ($sheet,$r) = @_;
my ($num_uneditable,$realm,$row_type);
+ my $requester_is_student = ($ENV{'request.role'} =~ /^st\./);
if ($sheet->{'sheettype'} eq 'assesscalc') {
$num_uneditable = 1;
$realm = 'Assessment';
@@ -1320,34 +1329,39 @@ END
####################################
# Print out template row
####################################
- my ($rowlabel,@rowdata) = &get_row($sheet,'-');
- my $row_html = '
'.&format_html_rowlabel($sheet,'Summary').' ';
$num_cols_output = 0;
foreach my $cell (@rowdata) {
- if ($num_cols_output++ < 26) {
+ if ($num_cols_output++ < 26 && ! $requester_is_student) {
$row_html .= '';
$row_html .= &html_editable_cell($cell,'#CCCCFF');
} else {
$row_html .= ' ';
- $row_html .= &html_uneditable_cell(undef,'#CCCCFF');
+ $row_html .= &html_uneditable_cell($cell,'#CCCCFF');
}
$row_html .= ' ';
}
@@ -1387,18 +1401,21 @@ END
if ($sheet->{'sheettype'} eq 'classcalc') {
$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)
+ # Nope, that is already done for us in format_html_rowlabel
+ # (for now)
} elsif ($sheet->{'sheettype'} eq 'studentcalc') {
+ my $ufn = (split(/:/,$rowlabel))[5];
$row_html.=''.&format_html_rowlabel($sheet,$rowlabel);
$row_html.= ' '.
''.
'Default ';
+
foreach (@{$sheet->{'othersheets'}}) {
$row_html.=''.$_.' ';
}
$row_html.=' ';
@@ -1421,7 +1438,7 @@ END
$bgcolor='#FFDDDD' if ($shown_cells < $num_uneditable);
#
$row_html.='';
- if ($shown_cells < $num_uneditable) {
+ if ($requester_is_student || $shown_cells < $num_uneditable) {
$row_html .= &html_uneditable_cell($cell,$bgcolor);
} else {
$row_html .= &html_editable_cell($cell,$bgcolor);
@@ -1902,9 +1919,16 @@ sub writesheet {
$cdom,$cnum);
if ($reply eq 'ok') {
if ($makedef) {
- return &Apache::lonnet::put('environment',
- {'spreadsheet_default_'.$stype => $fn },
- $cdom,$cnum);
+ $reply = &Apache::lonnet::put('environment',
+ {'spreadsheet_default_'.$stype => $fn },
+ $cdom,$cnum);
+ if ($reply eq 'ok' &&
+ ($sheet->{'sheettype'} eq 'studentcalc' ||
+ $sheet->{'sheettype'} eq 'assesscalc')) {
+ # Expire the spreadsheets of the other students.
+ &Apache::lonnet::expirespread('','','studentcalc','');
+ }
+ return $reply;
}
return $reply;
}
@@ -2069,11 +2093,15 @@ sub format_html_rowlabel {
my ($type,$labeldata) = split(':',$rowlabel,2);
my $result = '';
if ($type eq 'symb') {
- my ($symb,$mapid,$resid,$title) = split(':',$labeldata);
- $symb = &Apache::lonnet::unescape($symb);
+ my ($symb,$mapid,$resid,$title,$ufn) = split(':',$labeldata);
+ $ufn = 'default' if (!defined($ufn) || $ufn eq '');
+ $ufn = &Apache::lonnet::unescape($ufn);
+ $symb = &Apache::lonnet::unescape($symb);
+ $title = &Apache::lonnet::unescape($title);
$result = ''.$title.' ';
+ '&ufn='.$ufn.
+ '&mapid='.$mapid.'&resid='.$resid.'">'.$title.'';
} elsif ($type eq 'student') {
my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
if ($fullname =~ /^\s*$/) {
@@ -2097,8 +2125,10 @@ sub format_csv_rowlabel {
my ($type,$labeldata) = split(':',$rowlabel,2);
my $result = '';
if ($type eq 'symb') {
- my ($symb,$mapid,$resid,$title) = split(':',$labeldata);
- $symb = &Apache::lonnet::unescape($symb);
+ my ($symb,$mapid,$resid,$title,$ufn) = split(':',$labeldata);
+ $ufn = &Apache::lonnet::unescape($ufn);
+ $symb = &Apache::lonnet::unescape($symb);
+ $title = &Apache::lonnet::unescape($title);
$result = $title;
} elsif ($type eq 'student') {
my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
@@ -2119,8 +2149,10 @@ sub format_excel_rowlabel {
my ($type,$labeldata) = split(':',$rowlabel,2);
my $result = '';
if ($type eq 'symb') {
- my ($symb,$mapid,$resid,$title) = split(':',$labeldata);
- $symb = &Apache::lonnet::unescape($symb);
+ my ($symb,$mapid,$resid,$title,$ufn) = split(':',$labeldata);
+ $ufn = &Apache::lonnet::unescape($ufn);
+ $symb = &Apache::lonnet::unescape($symb);
+ $title = &Apache::lonnet::unescape($title);
$result = $title;
} elsif ($type eq 'student') {
my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
@@ -2228,10 +2260,11 @@ sub get_student_rowlabels {
return 'Could not access course data';
}
#
- my %assesslist;
+ my %assesslist = ();
foreach ('Feedback','Evaluation','Tutoring','Discussion') {
my $symb = '_'.lc($_);
- $assesslist{$symb} = join(':',('symb',$symb,0,0,$_));
+ $assesslist{$symb} = join(':',('symb',$symb,0,0,
+ &Apache::lonnet::escape($_)));
}
#
while (my ($key,$srcf) = each(%course_db)) {
@@ -2243,8 +2276,9 @@ sub get_student_rowlabels {
my $symb=
&Apache::lonnet::declutter($course_db{'map_id_'.$mapid}).
'___'.$resid.'___'.&Apache::lonnet::declutter($srcf);
- $assesslist{$symb}='symb:'.&Apache::lonnet::escape($symb).':'
- .$mapid.':'.$resid.':'.$course_db{'title_'.$id};
+ $assesslist{$symb} ='symb:'.&Apache::lonnet::escape($symb).':'
+ .$mapid.':'.$resid.':'.
+ &Apache::lonnet::escape($course_db{'title_'.$id});
}
}
untie(%course_db);
@@ -2343,10 +2377,6 @@ sub updatestudentassesssheet {
($formula =~ /^(~~~|---)/) )) {
$f{$_}='!!! Obsolete';
$changed=1;
- } elsif ($ufn) {
- # I do not think this works any more
- $sheet->{'rowlabel'}->{$usy}
- =~s/assesscalc\?usymb\=/assesscalc\?ufn\=$ufn&\usymb\=/;
}
}
# New and unknown keys
@@ -2687,7 +2717,7 @@ sub forcedrecalc {
&checkthis($uname.':'.$udom.':assesscalc:'.$map,$time) ||
&checkthis($uname.':'.$udom.':assesscalc:'.$usymb,$time)) {
return 1;
- }
+ }
} else {
if (&checkthis('::studentcalc:',$time) ||
&checkthis($uname.':'.$udom.':studentcalc:',$time)) {
@@ -2708,6 +2738,7 @@ sub exportsheet {
$udom = $udom || $sheet->{'udom'};
$stype = $stype || $sheet->{'sheettype'};
my @exportarr=();
+ # This handles the assessment sheets for '_feedback', etc
if (defined($usymb) && ($usymb=~/^\_(\w+)/) &&
(!defined($fn) || $fn eq '')) {
$fn='default_'.$1;
@@ -2953,11 +2984,16 @@ sub handler {
delete $ENV{'form.unewformula'} if (exists($ENV{'form.unewformula'}));
}
#
- # Clean up symb and spreadsheet filename
+ # Look for special assessment spreadsheets - '_feedback', etc.
#
- if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) {
+ if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'} ||
+ $ENV{'form.ufn'} eq '' ||
+ $ENV{'form.ufn'} eq 'default')) {
$ENV{'form.ufn'}='default_'.$1;
}
+ if (!$ENV{'form.ufn'} || $ENV{'form.ufn'} eq 'default') {
+ $ENV{'form.ufn'}='course_default_'.$sheettype;
+ }
#
# Interactive loading of specific sheet?
#
@@ -3272,3 +3308,5 @@ ENDSCRIPT
1;
__END__
+
+