Diff for /loncom/interface/spreadsheet/studentcalc.pm between versions 1.27 and 1.28

version 1.27, 2004/12/08 00:56:00 version 1.28, 2005/03/03 17:52:36
Line 63  use Apache::lonlocal; Line 63  use Apache::lonlocal;
 @Apache::studentcalc::ISA = ('Apache::Spreadsheet');  @Apache::studentcalc::ISA = ('Apache::Spreadsheet');
   
 my @Sequences = ();  my @Sequences = ();
   my $navmap;
 my %Exportrows = ();  my %Exportrows = ();
   
 my $current_course;  my $current_course;
   
 sub initialize {  sub initialize {
     &Apache::assesscalc::initialize();  
     &initialize_sequence_cache();      &initialize_sequence_cache();
       &Apache::assesscalc::initialize($navmap);
 }  }
   
 sub initialize_package {  sub initialize_package {
Line 90  sub initialize_sequence_cache { Line 91  sub initialize_sequence_cache {
     #      #
     # Set up the sequences and assessments      # Set up the sequences and assessments
     undef(@Sequences);      undef(@Sequences);
     my ($top,$sequences,$assessments) =       undef($navmap);
         &Apache::loncoursedata::get_sequence_assessment_data();      $navmap = Apache::lonnavmaps::navmap->new();
     if (! defined($top) || ! ref($top)) {      if (!defined($navmap)) {
         # There has been an error, better report it          &Apache::lonnet::logthis('student spreadsheet:Can not open Coursemap');
         &Apache::lonnet::logthis('top is undefined (studentcalc.pm)');      }
         return;      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 {  sub clear_package {
Line 143  sub parent_link { Line 157  sub parent_link {
 sub convenience_links {  sub convenience_links {
     my $self = shift;      my $self = shift;
     my ($resource) = @_;      my ($resource) = @_;
     my $result=&Apache::loncommon::submlink('<img src="/adm/lonMisc/subm_button.gif" border="0" />',$self->{'name'},$self->{'domain'},$resource->{'symb'},'LONcatInfo');      my $result=&Apache::loncommon::submlink('<img src="/adm/lonMisc/subm_button.gif" border="0" />',$self->{'name'},$self->{'domain'},$resource->symb,'LONcatInfo');
     $result .= &Apache::loncommon::pgrdlink('<img src="/adm/lonMisc/pgrd_button.gif" border="0" />',$self->{'name'},$self->{'domain'},$resource->{'symb'},'LONcatInfo');      $result .= &Apache::loncommon::pgrdlink('<img src="/adm/lonMisc/pgrd_button.gif" border="0" />',$self->{'name'},$self->{'domain'},$resource->symb,'LONcatInfo');
     $result .= &Apache::loncommon::pprmlink('<img src="/adm/lonMisc/pprm_button.gif" border="0" />',$self->{'name'},$self->{'domain'},$resource->{'symb'},'LONcatInfo');      $result .= &Apache::loncommon::pprmlink('<img src="/adm/lonMisc/pprm_button.gif" border="0" />',$self->{'name'},$self->{'domain'},$resource->symb,'LONcatInfo');
     return $result;      return $result;
 }  }
   
Line 248  END Line 262  END
         &initialize_sequence_cache();          &initialize_sequence_cache();
     }      }
     foreach my $Sequence (@Sequences) {      foreach my $Sequence (@Sequences) {
  next if ($Sequence->{'num_assess'} < 1);   $r->print("<h3>".$Sequence->compTitle."</h3>\n");
  $r->print("<h3>".$Sequence->{'title'}."</h3>\n");  
   $r->print($tableheader);    $r->print($tableheader);
  foreach my $resource (@{$Sequence->{'contents'}}) {   foreach my $resource (&get_resources($Sequence)) {
     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 $assess_filename = $self->{'row_source'}->{$rownum};              my $assess_filename = $self->{'row_source'}->{$rownum};
             my $row_output = '<tr>';              my $row_output = '<tr>';
             if ($editing_is_allowed) {              if ($editing_is_allowed) {
Line 263  END Line 275  END
                     '<a href="/adm/assesscalc?sname='.$self->{'name'}.                      '<a href="/adm/assesscalc?sname='.$self->{'name'}.
                     '&sdomain='.$self->{'domain'}.                      '&sdomain='.$self->{'domain'}.
                     '&filename='.$assess_filename.                      '&filename='.$assess_filename.
                     '&usymb='.&Apache::lonnet::escape($resource->{'symb'}).                      '&usymb='.&Apache::lonnet::escape($resource->symb).
                     '">'.$resource->{'title'}.'</a><br />';                      '">'.$resource->compTitle.'</a><br />';
                 $row_output .= &assess_file_selector($rownum,                  $row_output .= &assess_file_selector($rownum,
                                                      $assess_filename,                                                       $assess_filename,
                                                      \@AssessFileNames).                                                       \@AssessFileNames).
                                                          '</td>';                                                           '</td>';
             } else {              } else {
                 $row_output .= '<td><a href="'.$resource->{'src'}.'?symb='.                  $row_output .= '<td><a href="'.$resource->src.'?symb='.
                     &Apache::lonnet::escape($resource->{'symb'}).                      &Apache::lonnet::escape($resource->symb).
                     '">Go&nbsp;To</a>';                      '">Go&nbsp;To</a>';
                 $row_output .= '</td><td>'.$resource->{'title'}.'</td>';                  $row_output .= '</td><td>'.$resource->compTitle.'</td>';
             }              }
             if ($self->blackout() && $self->{'blackout_rows'}->{$rownum}>0) {              if ($self->blackout() && $self->{'blackout_rows'}->{$rownum}>0) {
                 $row_output .=                   $row_output .= 
Line 361  sub csv_rows { Line 373  sub csv_rows {
         &initialize_sequence_cache();          &initialize_sequence_cache();
     }      }
     foreach my $Sequence (@Sequences) {      foreach my $Sequence (@Sequences) {
  next if ($Sequence->{'num_assess'} < 1);   foreach my $resource (&get_resources($Sequence)) {
  foreach my $resource (@{$Sequence->{'contents'}}) {      my $rownum = $self->get_row_number_from_key($resource->symb);
     my $rownum = $self->get_row_number_from_key($resource->{'symb'});              my @assessdata = ($Sequence->compTitle,
             my @assessdata = ($Sequence->{'title'},                                $resource->compTitle);
                               $resource->{'title'});  
             $self->csv_output_row($filehandle,$rownum,@assessdata);              $self->csv_output_row($filehandle,$rownum,@assessdata);
         }          }
     }      }
Line 390  sub excel_rows { Line 401  sub excel_rows {
         &initialize_sequence_cache();          &initialize_sequence_cache();
     }      }
     foreach my $Sequence (@Sequences) {      foreach my $Sequence (@Sequences) {
  next if ($Sequence->{'num_assess'} < 1);   foreach my $resource (&get_resources($Sequence)) {
  foreach my $resource (@{$Sequence->{'contents'}}) {      my $rownum = $self->get_row_number_from_key($resource->symb);
     my $rownum = $self->get_row_number_from_key($resource->{'symb'});              my @assessdata = ($Sequence->compTitle,
             my @assessdata = ($Sequence->{'title'},                                $resource->compTitle);
                               $resource->{'title'});  
             $self->excel_output_row($worksheet,$rownum,$rows_output++,              $self->excel_output_row($worksheet,$rownum,$rows_output++,
                                     @assessdata);                                      @assessdata);
         }          }
Line 414  sub get_rows_in_sequence { Line 424  sub get_rows_in_sequence {
     my $self = shift();      my $self = shift();
     my ($sequence) = @_;      my ($sequence) = @_;
     my @Rows;      my @Rows;
     foreach my $resource (@{$sequence->{'contents'}}) {      my @resources = &get_resources($sequence);
         if ($resource->{'type'} eq 'assessment') {      foreach my $resource (@resources) {
             my $rownum = $self->get_row_number_from_key($resource->{'symb'});          my $rownum = $self->get_row_number_from_key($resource->symb);
             push (@Rows,$rownum);          push (@Rows,$rownum);
         }  
     }      }
     return @Rows;      return @Rows;
 }  }
Line 497  sub compute { Line 506  sub compute {
         &initialize_sequence_cache();          &initialize_sequence_cache();
     }      }
     $self->initialize_safe_space();      $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();      my %f = $self->formulas();
     #      #
     # Process the formulas list -       # Process the formulas list - 
     #   the formula for the A column of a row is symb__&&__filename      #   the formula for the A column of a row is symb__&&__filename
     my %c = $self->constants();      my %c = $self->constants();
     foreach my $seq (@Sequences) {      foreach my $seq (@Sequences) {
         next if ($seq->{'num_assess'}<1);          foreach my $resource (&get_resources($seq)) {
         foreach my $resource (@{$seq->{'contents'}}) {  
             if ($connection->aborted()) { $self->cleanup(); return; }              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 $cell = 'A'.$rownum;
             my $assess_filename = 'Default';              my $assess_filename = 'Default';
             if (exists($self->{'row_source'}->{$rownum})) {              if (exists($self->{'row_source'}->{$rownum})) {
Line 516  sub compute { Line 524  sub compute {
             } else {              } else {
                 $self->{'row_source'}->{$rownum} = $assess_filename;                  $self->{'row_source'}->{$rownum} = $assess_filename;
             }              }
             $f{$cell} = $resource->{'symb'}.'__&&&__'.$assess_filename;              $f{$cell} = $resource->symb.'__&&&__'.$assess_filename;
             if ($connection->aborted()) { $self->cleanup(); return; }              if ($connection->aborted()) { $self->cleanup(); return; }
             my $assessSheet;              my $assessSheet;
                 $assessSheet = Apache::assesscalc->new($self->{'name'},                  $assessSheet = Apache::assesscalc->new($self->{'name'},
                                                        $self->{'domain'},                                                         $self->{'domain'},
                                                        $assess_filename,                                                         $assess_filename,
                                                        $resource->{'symb'});                                                         $resource->symb);
             my @exportdata = $assessSheet->export_data($r);              my @exportdata = $assessSheet->export_data($r);
             #              #
             if ($assessSheet->badcalc()) {              if ($assessSheet->badcalc()) {

Removed from v.1.27  
changed lines
  Added in v.1.28


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>