--- loncom/interface/spreadsheet/studentcalc.pm 2004/12/08 00:56:00 1.27 +++ loncom/interface/spreadsheet/studentcalc.pm 2005/03/03 17:52:36 1.28 @@ -1,5 +1,5 @@ # -# $Id: studentcalc.pm,v 1.27 2004/12/08 00:56:00 albertel Exp $ +# $Id: studentcalc.pm,v 1.28 2005/03/03 17:52:36 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -63,13 +63,14 @@ use Apache::lonlocal; @Apache::studentcalc::ISA = ('Apache::Spreadsheet'); my @Sequences = (); +my $navmap; my %Exportrows = (); my $current_course; sub initialize { - &Apache::assesscalc::initialize(); &initialize_sequence_cache(); + &Apache::assesscalc::initialize($navmap); } sub initialize_package { @@ -90,14 +91,27 @@ sub initialize_sequence_cache { # # Set up the sequences and assessments undef(@Sequences); - my ($top,$sequences,$assessments) = - &Apache::loncoursedata::get_sequence_assessment_data(); - if (! defined($top) || ! ref($top)) { - # There has been an error, better report it - &Apache::lonnet::logthis('top is undefined (studentcalc.pm)'); - return; + undef($navmap); + $navmap = Apache::lonnavmaps::navmap->new(); + if (!defined($navmap)) { + &Apache::lonnet::logthis('student spreadsheet:Can not open Coursemap'); + } + my @all_sequences = $navmap->retrieveResources(undef, + sub { shift->is_map(); },1,0,1); + for my $sequence ($navmap->getById('0.0'), @all_sequences) { + if ($navmap->hasResource($sequence,sub { shift->is_problem(); }, 0)){ + push(@Sequences,$sequence); + } } - @Sequences = @{$sequences} if (ref($sequences) eq 'ARRAY'); +} + +sub get_resources { + my ($seq) = @_; + return () if (! defined($navmap) || ! ref($navmap)); + my @resources = $navmap->retrieveResources($seq, + sub { shift->is_problem(); }, + 0,0,0); + return @resources; } sub clear_package { @@ -143,9 +157,9 @@ sub parent_link { sub convenience_links { my $self = shift; my ($resource) = @_; - my $result=&Apache::loncommon::submlink('',$self->{'name'},$self->{'domain'},$resource->{'symb'},'LONcatInfo'); - $result .= &Apache::loncommon::pgrdlink('',$self->{'name'},$self->{'domain'},$resource->{'symb'},'LONcatInfo'); - $result .= &Apache::loncommon::pprmlink('',$self->{'name'},$self->{'domain'},$resource->{'symb'},'LONcatInfo'); + my $result=&Apache::loncommon::submlink('',$self->{'name'},$self->{'domain'},$resource->symb,'LONcatInfo'); + $result .= &Apache::loncommon::pgrdlink('',$self->{'name'},$self->{'domain'},$resource->symb,'LONcatInfo'); + $result .= &Apache::loncommon::pprmlink('',$self->{'name'},$self->{'domain'},$resource->symb,'LONcatInfo'); return $result; } @@ -248,12 +262,10 @@ END &initialize_sequence_cache(); } foreach my $Sequence (@Sequences) { - next if ($Sequence->{'num_assess'} < 1); - $r->print("

".$Sequence->{'title'}."

\n"); + $r->print("

".$Sequence->compTitle."

\n"); $r->print($tableheader); - foreach my $resource (@{$Sequence->{'contents'}}) { - next if ($resource->{'type'} ne 'assessment'); - my $rownum = $self->get_row_number_from_key($resource->{'symb'}); + foreach my $resource (&get_resources($Sequence)) { + my $rownum = $self->get_row_number_from_key($resource->symb); my $assess_filename = $self->{'row_source'}->{$rownum}; my $row_output = ''; if ($editing_is_allowed) { @@ -263,17 +275,17 @@ END ''.$resource->{'title'}.'
'; + '&usymb='.&Apache::lonnet::escape($resource->symb). + '">'.$resource->compTitle.'
'; $row_output .= &assess_file_selector($rownum, $assess_filename, \@AssessFileNames). ''; } else { - $row_output .= 'src.'?symb='. + &Apache::lonnet::escape($resource->symb). '">Go To'; - $row_output .= ''.$resource->{'title'}.''; + $row_output .= ''.$resource->compTitle.''; } if ($self->blackout() && $self->{'blackout_rows'}->{$rownum}>0) { $row_output .= @@ -361,11 +373,10 @@ sub csv_rows { &initialize_sequence_cache(); } foreach my $Sequence (@Sequences) { - next if ($Sequence->{'num_assess'} < 1); - foreach my $resource (@{$Sequence->{'contents'}}) { - my $rownum = $self->get_row_number_from_key($resource->{'symb'}); - my @assessdata = ($Sequence->{'title'}, - $resource->{'title'}); + foreach my $resource (&get_resources($Sequence)) { + my $rownum = $self->get_row_number_from_key($resource->symb); + my @assessdata = ($Sequence->compTitle, + $resource->compTitle); $self->csv_output_row($filehandle,$rownum,@assessdata); } } @@ -390,11 +401,10 @@ sub excel_rows { &initialize_sequence_cache(); } foreach my $Sequence (@Sequences) { - next if ($Sequence->{'num_assess'} < 1); - foreach my $resource (@{$Sequence->{'contents'}}) { - my $rownum = $self->get_row_number_from_key($resource->{'symb'}); - my @assessdata = ($Sequence->{'title'}, - $resource->{'title'}); + foreach my $resource (&get_resources($Sequence)) { + my $rownum = $self->get_row_number_from_key($resource->symb); + my @assessdata = ($Sequence->compTitle, + $resource->compTitle); $self->excel_output_row($worksheet,$rownum,$rows_output++, @assessdata); } @@ -414,11 +424,10 @@ sub get_rows_in_sequence { my $self = shift(); my ($sequence) = @_; my @Rows; - foreach my $resource (@{$sequence->{'contents'}}) { - if ($resource->{'type'} eq 'assessment') { - my $rownum = $self->get_row_number_from_key($resource->{'symb'}); - push (@Rows,$rownum); - } + my @resources = &get_resources($sequence); + foreach my $resource (@resources) { + my $rownum = $self->get_row_number_from_key($resource->symb); + push (@Rows,$rownum); } return @Rows; } @@ -497,18 +506,17 @@ sub compute { &initialize_sequence_cache(); } $self->initialize_safe_space(); - &Apache::assesscalc::initialize_package($self->{'name'},$self->{'domain'}); + &Apache::assesscalc::initialize_package($self->{'name'},$self->{'domain'}, + $navmap); my %f = $self->formulas(); # # Process the formulas list - # the formula for the A column of a row is symb__&&__filename my %c = $self->constants(); foreach my $seq (@Sequences) { - next if ($seq->{'num_assess'}<1); - foreach my $resource (@{$seq->{'contents'}}) { + foreach my $resource (&get_resources($seq)) { if ($connection->aborted()) { $self->cleanup(); return; } - next if ($resource->{'type'} ne 'assessment'); - my $rownum = $self->get_row_number_from_key($resource->{'symb'}); + my $rownum = $self->get_row_number_from_key($resource->symb); my $cell = 'A'.$rownum; my $assess_filename = 'Default'; if (exists($self->{'row_source'}->{$rownum})) { @@ -516,13 +524,13 @@ sub compute { } else { $self->{'row_source'}->{$rownum} = $assess_filename; } - $f{$cell} = $resource->{'symb'}.'__&&&__'.$assess_filename; + $f{$cell} = $resource->symb.'__&&&__'.$assess_filename; if ($connection->aborted()) { $self->cleanup(); return; } my $assessSheet; $assessSheet = Apache::assesscalc->new($self->{'name'}, $self->{'domain'}, $assess_filename, - $resource->{'symb'}); + $resource->symb); my @exportdata = $assessSheet->export_data($r); # if ($assessSheet->badcalc()) {