--- loncom/interface/Attic/lonspreadsheet.pm 2002/12/04 21:49:33 1.154 +++ loncom/interface/Attic/lonspreadsheet.pm 2003/03/19 17:16:23 1.160.2.4 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.154 2002/12/04 21:49:33 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.160.2.4 2003/03/19 17:16:23 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -833,7 +833,7 @@ sub expandnamed { push @matches,$parameter if ($parameter =~ /$expression/); } if (scalar(@matches) == 0) { - $returnvalue = 'unmatched parameter: '.$parameter; + $returnvalue = undef; #'unmatched parameter: '.$parameter; } elsif (scalar(@matches) == 1) { $returnvalue = '$c{\''.$matches[0].'\'}'; } elsif (scalar(@matches) > 0) { @@ -961,7 +961,7 @@ ENDDEFS sub templaterow { my $sheet = shift; my @cols=(); - my $rowlabel = 'Template'; + my $rowlabel = 'Template '; foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m', @@ -989,8 +989,10 @@ sub outrowassess { } else { $rowlabel = ''; } + } elsif ($ENV{'request.role'} =~ /^st\./) { + $rowlabel = 'Summary0'; } else { - $rowlabel = 'Export'; + $rowlabel = 'Export0'; } foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', @@ -1011,9 +1013,9 @@ sub outrow { $rowlabel = $sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$n}}; } else { if ($sheet->{'sheettype'} eq 'classcalc') { - $rowlabel = 'Summary'; + $rowlabel = 'Summary0'; } else { - $rowlabel = 'Export'; + $rowlabel = 'Export0'; } } foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M', @@ -1259,7 +1261,7 @@ sub html_editable_cell { } elsif ($value =~ /^\s*$/ ) { $value = '#'; } else { - $value = &HTML::Entities::encode($value); + $value = &HTML::Entities::encode($value) if ($value !~/ /); } # Make the formula safe for outputting $formula =~ s/\'/\"/g; @@ -1277,13 +1279,14 @@ sub html_editable_cell { sub html_uneditable_cell { my ($cell,$bgcolor) = @_; my $value = (defined($cell) ? $cell->{'value'} : ''); - $value = &HTML::Entities::encode($value); + $value = &HTML::Entities::encode($value) if ($value !~/ /); return ' '.$value.' '; } 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'; @@ -1306,7 +1309,7 @@ sub outsheet_html { my $tabledata =<<"END"; - + '; - my $num_cols_output = 0; - foreach my $cell (@rowdata) { - if ($num_cols_output++ < $num_uneditable) { - $row_html .= ''; + $num_cols_output = 0; + foreach my $cell (@rowdata) { + if ($requester_is_student || + $num_cols_output++ < $num_uneditable) { + $row_html .= ''; } - $row_html .= ''; + $row_html.= "\n"; + $r->print($row_html); } - $row_html.= "\n"; - $r->print($row_html); #################################### # Print out summary/export row #################################### @@ -1350,12 +1358,12 @@ END $row_html = ''; $num_cols_output = 0; foreach my $cell (@rowdata) { - if ($num_cols_output++ < 26) { + if ($num_cols_output++ < 26 && ! $requester_is_student) { $row_html .= ''; } @@ -1432,7 +1440,7 @@ END $bgcolor='#FFDDDD' if ($shown_cells < $num_uneditable); # $row_html.='
$realm$realm Import @@ -1328,21 +1331,26 @@ END #################################### # Print out template row #################################### - my ($rowlabel,@rowdata) = &get_row($sheet,'-'); - my $row_html = '
'.&format_html_rowlabel($sheet,$rowlabel).''; - $row_html .= &html_uneditable_cell($cell,'#FFDDDD'); - } else { - $row_html .= ''; - $row_html .= &html_editable_cell($cell,'#E0FFDD'); + my ($num_cols_output,$row_html,$rowlabel,@rowdata); + + if (! $requester_is_student) { + ($rowlabel,@rowdata) = &get_row($sheet,'-'); + $row_html = '
'.&format_html_rowlabel($sheet,$rowlabel).''; + $row_html .= &html_uneditable_cell($cell,'#FFDDDD'); + } else { + $row_html .= ''; + $row_html .= &html_editable_cell($cell,'#E0FFDD'); + } + $row_html .= '
'.&format_html_rowlabel($sheet,$rowlabel).''; $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 .= ''; - 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); @@ -1833,13 +1841,27 @@ sub readsheet { } %f=%{&parse_sheet(\$sheetxml)}; } else { - my $sheet=''; my %tmphash = &Apache::lonnet::dump($fn,$cdom,$cnum); my ($tmp) = keys(%tmphash); - unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { + if ($tmp !~ /^(con_lost|error|no_such_host)/i) { foreach (keys(%tmphash)) { $f{$_}=$tmphash{$_}; } + } else { + # Unable to grab the specified spreadsheet, + # so we get the default ones instead. + $fn = 'default_'.$stype; + $sheet->{'filename'} = $fn; + my $dfn = $fn; + $dfn =~ s/\_/\./g; + my $sheetxml; + if (my $fh=Apache::File->new($includedir.'/'.$dfn)) { + $sheetxml = join('',<$fh>); + } else { + $sheetxml=''. + '"Unable to load spreadsheet"'; + } + %f=%{&parse_sheet(\$sheetxml)}; } } # Cache and set @@ -1860,6 +1882,14 @@ sub makenewsheet { $sheet->{'mapid'} = $ENV{'form.mapid'}; $sheet->{'resid'} = $ENV{'form.resid'}; $sheet->{'cid'} = $ENV{'request.course.id'}; + if (! exists($Section{$uname.':'.$udom})) { + my $classlist = &Apache::loncoursedata::get_classlist(); + foreach my $student (keys(%$classlist)) { + my ($studentDomain,$studentName,undef,undef,undef,$studentSection, + undef,undef) = @{$classlist->{$student}}; + $Section{$studentName.':'.$studentDomain} = $studentSection; + } + } $sheet->{'csec'} = $Section{$uname.':'.$udom}; $sheet->{'coursefilename'} = $ENV{'request.course.fn'}; $sheet->{'cnum'} = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; @@ -2072,8 +2102,27 @@ sub parmval { # second, check map parms my $thisparm = $parmhash{$symbparm}; return $thisparm if (defined($thisparm)); + # first, check default - return &Apache::lonnet::metadata($fn,$rwhat.'.default'); + $thisparm = &Apache::lonnet::metadata($fn,$rwhat.'.default'); + return $thisparm if (defined($thisparm)); + + #Cascade Up + my $space=$what; + $space=~s/\.\w+$//; + if ($space ne '0') { + my @parts=split(/_/,$space); + my $id=pop(@parts); + my $part=join('_',@parts); + if ($part eq '') { $part='0'; } + my $newwhat=$rwhat; + $newwhat=~s/\Q$space\E/$part/; + my $partgeneral=&parmval($newwhat,$sheet); + if (defined($partgeneral)) { return $partgeneral; } + } + + #nothing defined + return ''; } @@ -2369,7 +2418,7 @@ sub updatestudentassesssheet { unless ((exists($sheet->{'rowlabel'}->{$usy}) && (defined($sheet->{'rowlabel'}->{$usy})) || (!$1) || ($formula =~ /^(~~~|---)/) )) { - $f{$_}='!!! Obsolete'; + $f{$cell}='!!! Obsolete'; $changed=1; } } @@ -2893,7 +2942,8 @@ sub cachedssheets { $uname = $uname || $sheet->{'uname'}; $udom = $udom || $sheet->{'udom'}; if (! $loadedcaches{$uname.'_'.$udom}) { - my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets', + my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'. + $ENV{'request.course.id'}, $sheet->{'udom'}, $sheet->{'uname'}); if ($tmp[0] !~ /^error/) { @@ -2985,9 +3035,9 @@ sub handler { $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; - } +# if (!$ENV{'form.ufn'} || $ENV{'form.ufn'} eq 'default') { +# $ENV{'form.ufn'}='course_default_'.$sheettype; +# } # # Interactive loading of specific sheet? # @@ -3123,7 +3173,7 @@ ENDSCRIPT # If a new formula had been entered, go from work copy if ($ENV{'form.unewfield'}) { $r->print('

Modified Workcopy

'); - $ENV{'form.unewformula'}=~s/\'/\"/g; + #$ENV{'form.unewformula'}=~s/\'/\"/g; $r->print('

Cell '.$ENV{'form.unewfield'}.' =

');
         $r->print(&HTML::Entities::encode($ENV{'form.unewformula'}).
                   '

'); @@ -3189,6 +3239,7 @@ ENDSCRIPT $oldsheets{'course'} ne $sheet->{'cid'}) { undef %oldsheets; undef %loadedcaches; + undef %Section; } $oldsheets{'course'} = $sheet->{'cid'}; # @@ -3255,8 +3306,8 @@ ENDSCRIPT } $r->print('>'); # - # CSV format checkbox (classcalc sheets only) - $r->print(' Output as '. "\n"); foreach my $mode (qw/HTML CSV Excel/) { $r->print('