--- loncom/interface/Attic/lonspreadsheet.pm 2002/12/02 21:22:39 1.152 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/12/04 21:49:33 1.154 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.152 2002/12/02 21:22:39 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.154 2002/12/04 21:49:33 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; @@ -1387,18 +1395,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.= '
'. ''; @@ -1902,9 +1913,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; } @@ -1927,7 +1945,10 @@ sub tmpwrite { $fn=$tmpdir.$fn.'.tmp'; my $fh; if ($fh=Apache::File->new('>'.$fn)) { - print $fh join("\n",&getformulas($sheet)); + my %f = &getformulas($sheet); + while( my ($cell,$formula) = each(%f)) { + print $fh &Apache::lonnet::escape($cell)."=".&Apache::lonnet::escape($formula)."\n"; + } } } @@ -1943,32 +1964,36 @@ sub tmpread { my %fo=(); my $countrows=0; if ($fh=Apache::File->new($fn)) { - my $name; - while ($name=<$fh>) { - chomp($name); - my $value=<$fh>; - chomp($value); - $fo{$name}=$value; - if ($name=~/^A(\d+)$/) { - if ($1>$countrows) { - $countrows=$1; - } - } - } - } + while (<$fh>) { + chomp; + my ($cell,$formula) = split(/=/); + $cell = &Apache::lonnet::unescape($cell); + $formula = &Apache::lonnet::unescape($formula); + $fo{$cell} = $formula; + } + } +# chomp($value); +# $fo{$name}=$value; +# if ($name=~/^A(\d+)$/) { +# if ($1>$countrows) { +# $countrows=$1; +# } +# } +# } +# } if ($nform eq 'changesheet') { $fo{'A'.$nfield}=(split(/__&&&\__/,$fo{'A'.$nfield}))[0]; unless ($ENV{'form.sel_'.$nfield} eq 'Default') { $fo{'A'.$nfield}.='__&&&__'.$ENV{'form.sel_'.$nfield}; } - } elsif ($nfield eq 'insertrow') { - $countrows++; - my $newrow=substr('000000'.$countrows,-7); - if ($nform eq 'top') { - $fo{'A'.$countrows}='--- '.$newrow; - } else { - $fo{'A'.$countrows}='~~~ '.$newrow; - } +# } elsif ($nfield eq 'insertrow') { +# $countrows++; +# my $newrow=substr('000000'.$countrows,-7); +# if ($nform eq 'top') { +# $fo{'A'.$countrows}='--- '.$newrow; +# } else { +# $fo{'A'.$countrows}='~~~ '.$newrow; +# } } else { if ($nfield) { $fo{$nfield}=$nform; } } @@ -2062,11 +2087,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*$/) { @@ -2090,8 +2119,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); @@ -2112,8 +2143,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); @@ -2221,10 +2254,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)) { @@ -2236,8 +2270,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); @@ -2336,10 +2371,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 @@ -2680,7 +2711,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)) { @@ -2701,6 +2732,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; @@ -2946,11 +2978,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? # @@ -3265,3 +3302,5 @@ ENDSCRIPT 1; __END__ + +