Diff for /loncom/interface/spreadsheet/assesscalc.pm between versions 1.25 and 1.30

version 1.25, 2003/10/02 17:07:41 version 1.30, 2003/12/08 19:58:39
Line 55  use HTML::Entities(); Line 55  use HTML::Entities();
 use Spreadsheet::WriteExcel;  use Spreadsheet::WriteExcel;
 use GDBM_File;  use GDBM_File;
 use Time::HiRes;  use Time::HiRes;
   use Apache::lonlocal;
   
 @Apache::assesscalc::ISA = ('Apache::Spreadsheet');  @Apache::assesscalc::ISA = ('Apache::Spreadsheet');
   
Line 367  sub parmval { Line 368  sub parmval {
   
 sub get_html_title {  sub get_html_title {
     my $self = shift;      my $self = shift;
     my ($assess_title,$name,$time) = $self->get_title();      my ($assess_title,$name,$time) = $self->get_full_title();
     my $title = '<h1>'.$assess_title.'</h1>'.      my $title = '<h1>'.$assess_title.'</h1>'.
         '<h2>'.$name.', '.          '<h2>'.$name.', '.
         &Apache::loncommon::aboutmewrapper          &Apache::loncommon::aboutmewrapper
Line 379  sub get_html_title { Line 380  sub get_html_title {
   
 sub get_title {  sub get_title {
     my $self = shift;      my $self = shift;
     my @title = ();  
     if (($self->{'symb'} eq '_feedback') ||      if (($self->{'symb'} eq '_feedback') ||
         ($self->{'symb'} eq '_evaluation') ||          ($self->{'symb'} eq '_evaluation') ||
         ($self->{'symb'} eq '_discussion') ||          ($self->{'symb'} eq '_discussion') ||
         ($self->{'symb'} eq '_tutoring')) {          ($self->{'symb'} eq '_tutoring')) {
         my $assess_title = ucfirst($self->{'symb'});          my $assess_title = ucfirst($self->{'symb'});
         $assess_title =~ s/^_//;          $assess_title =~ s/^_//;
         push(@title,$assess_title);          return $assess_title;
     } else {      } else {
         push(@title,&Apache::lonnet::gettitle($self->{'symb'}));          return &Apache::lonnet::gettitle($self->{'symb'});
     }      }
   }
   
   sub get_full_title {
       my $self = shift;
       my @title = ($self->get_title());
     # Look up the users identifying information      # Look up the users identifying information
     # Get the users information      # Get the users information
     my %userenv = &Apache::loncoursedata::GetUserName($self->{'name'},      my %userenv = &Apache::loncoursedata::GetUserName($self->{'name'},
Line 398  sub get_title { Line 403  sub get_title {
         join(' ',@userenv{'firstname','middlename','lastname','generation'});          join(' ',@userenv{'firstname','middlename','lastname','generation'});
     $name =~ s/\s+$//;      $name =~ s/\s+$//;
     push (@title,$name);      push (@title,$name);
     push (@title,scalar(localtime(time)));      push (@title,&Apache::lonlocal::locallocaltime(time));
     return @title;      return @title;
 }  }
   
Line 407  sub parent_link { Line 412  sub parent_link {
     my $link .= '<p><a href="/adm/studentcalc?'.      my $link .= '<p><a href="/adm/studentcalc?'.
         'sname='.$self->{'name'}.          'sname='.$self->{'name'}.
             '&sdomain='.$self->{'domain'}.'">'.              '&sdomain='.$self->{'domain'}.'">'.
                 'Student level sheet</a></p>'."\n";                  &mt('Student level sheet').'</a></p>'."\n";
     return $link;      return $link;
 }  }
   
 sub outsheet_html {  sub outsheet_html {
     my $self = shift;      my $self = shift;
     my ($r) = @_;      my ($r) = @_;
       ####################################
       # Report any calculation errors    #
       ####################################
       $r->print($self->html_report_error());
     ###################################      ###################################
     # Determine table structure      # Determine table structure
     ###################################      ###################################
Line 421  sub outsheet_html { Line 430  sub outsheet_html {
     my $exportcolor = '#FFFFAA';      my $exportcolor = '#FFFFAA';
     my $num_uneditable = 1;      my $num_uneditable = 1;
     my $num_left = 52-$num_uneditable;      my $num_left = 52-$num_uneditable;
       my %lt=&Apache::lonlocal::texthash(
          'as' => 'Assessment',
          'ca' => 'Calculations',
          );
     my $tableheader =<<"END";      my $tableheader =<<"END";
 <table border="2">  <table border="2">
 <tr>  <tr>
   <th colspan="2" rowspan="2"><font size="+2">Assessment</font></th>    <th colspan="2" rowspan="2"><font size="+2">$lt{'as'}</font></th>
   <td bgcolor="$importcolor" colspan="$num_uneditable">&nbsp;</td>    <td bgcolor="$importcolor" colspan="$num_uneditable">&nbsp;</td>
   <td colspan="$num_left">    <td colspan="$num_left">
       <b><font size="+1">Calculations</font></b></td>        <b><font size="+1">$lt{'ca'}</font></b></td>
 </tr><tr>  </tr><tr>
 END  END
     my $label_num = 0;      my $label_num = 0;
Line 469  END Line 482  END
     #      #
     my $num_output = 0;      my $num_output = 0;
     foreach my $rownum (sort {$a <=> $b} ($self->rows())) {      foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
           if (! $self->parameter_part_is_valid(
                                                $self->{'formulas'}->{'A'.$rownum}
                                                )) {
               next;
           }
  if ($num_output++ % 50 == 0) {   if ($num_output++ % 50 == 0) {
     $r->print("</table>\n".$tableheader);      $r->print("</table>\n".$tableheader);
  }   }
Line 513  sub csv_rows { Line 531  sub csv_rows {
     # writes the meat of the spreadsheet to an excel worksheet.  Called      # writes the meat of the spreadsheet to an excel worksheet.  Called
     # by Spreadsheet::outsheet_excel;      # by Spreadsheet::outsheet_excel;
     my $self = shift;      my $self = shift;
     my ($filehandle) = @_;      my ($connection,$filehandle) = @_;
     #      #
     # Write a header row      # Write a header row
     $self->csv_output_row($filehandle,undef,      $self->csv_output_row($filehandle,undef,
                           ('Parameter','Description','Value'));                            (&mt('Parameter'),&mt('Description'),&mt('Value')));
     #      #
     # Write each row      # Write each row
     foreach my $rownum (sort {$a <=> $b} ($self->rows())) {      foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
Line 536  sub excel_rows { Line 554  sub excel_rows {
     # writes the meat of the spreadsheet to an excel worksheet.  Called      # writes the meat of the spreadsheet to an excel worksheet.  Called
     # by Spreadsheet::outsheet_excel;      # by Spreadsheet::outsheet_excel;
     my $self = shift;      my $self = shift;
     my ($worksheet,$cols_output,$rows_output) = @_;      my ($connection,$worksheet,$cols_output,$rows_output) = @_;
       return if (! ref($worksheet));
     #      #
     # Write a header row      # Write a header row
     $cols_output = 0;      $cols_output = 0;
Line 632  sub get_problem_state { Line 651  sub get_problem_state {
     return %student_parameters;      return %student_parameters;
 }  }
   
   sub determine_parts {
       my $self = shift;
       if (exists($self->{'Parts'}) && ref($self->{'Parts'}) eq 'HASH') {
           return;
       }
       my (undef,undef,$url) = &Apache::lonnet::decode_symb($self->{'symb'});
       my $src = &Apache::lonnet::clutter($url);
       return if (! defined($src));
       my %Parts;
       my $metadata = &Apache::lonnet::metadata($src,'packages');
       foreach (split(',',$metadata)) {
           my ($part) = (/^part_(.*)$/);
           if (defined($part) && 
               ! &Apache::loncommon::check_if_partid_hidden
                   ($part,$self->{'symb'},$self->{'name'},$self->{'domain'})
               ) {
               $Parts{$part}++;
           }
       }
       # Make sure part 0 is defined.
       $Parts{'0'}++;
       $self->{'Parts'} = \%Parts;
       return;
   }
   
   sub parameter_part_is_valid {
       my $self = shift;
       my ($parameter) = @_;
       return 1 if ($parameter eq 'timestamp');
       if (! defined($self->{'Parts'}) || 
           ! ref ($self->{'Parts'})    ||
           ref($self->{'Parts'}) ne 'HASH') {
           return 1;
       }
       #
       my (undef,$part) = 
           ($parameter =~ m/^(resource|stores|parameter)_([^_]+)_.*/);
       if (exists($self->{'Parts'})          && 
           exists($self->{'Parts'}->{$part}) &&
           $self->{'Parts'}->{$part} ) {
           return 1;
       } else {
           return 0;
       }
   }
   
 sub compute {  sub compute {
     my $self = shift;      my $self = shift;
     my ($r) = @_;      my ($r) = @_;
Line 683  sub compute { Line 748  sub compute {
         $parameters{$parm} = $value;          $parameters{$parm} = $value;
     }      }
     #      #
       # Clean out any bad parameters
       $self->determine_parts();
       foreach my $param (keys(%parameters)) {
           if (! $self->parameter_part_is_valid($param)) {
               delete ($parameters{$param});
           }
       }
       #
     # Set up the formulas and parameter values      # Set up the formulas and parameter values
     my %f=$self->formulas();      my %f=$self->formulas();
     my %c;      my %c;
Line 705  sub compute { Line 778  sub compute {
     if ($connection->aborted()) { $self->cleanup(); return; }      if ($connection->aborted()) { $self->cleanup(); return; }
     #      #
     # Move the parameters into the spreadsheet      # Move the parameters into the spreadsheet
     if ($connection->aborted()) { $self->cleanup(); return; }  
     while (my ($parm,$value) = each(%parameters)) {      while (my ($parm,$value) = each(%parameters)) {
         my $cell = 'A'.$self->get_row_number_from_key($parm);          my $cell = 'A'.$self->get_row_number_from_key($parm);
         $f{$cell} = $parm;          $f{$cell} = $parm;
Line 844  sub export_data { Line 916  sub export_data {
         $self->compute($r);          $self->compute($r);
     }      }
     if ($connection->aborted()) { $self->cleanup(); return; }      if ($connection->aborted()) { $self->cleanup(); return; }
     my @Data = @{$Exportrows{$symb}->{$self->{'filename'}}};      my @Data;
     if ($Data[0] =~ /^(.*)___=___/) {      if ($self->badcalc()) {
         $self->{'sheetname'} = $1;          @Data = ();
         $Data[0] =~ s/^(.*)___=___//;      } else {
     }          @Data = @{$Exportrows{$symb}->{$self->{'filename'}}};
     for (my $i=0;$i<$#Data;$i++) {          if ($Data[0] =~ /^(.*)___=___/) {
         $Data[$i]="'".$Data[$i]."'" if ($Data[$i]=~/\D/ && defined($Data[$i]));              $self->{'sheetname'} = $1;
               $Data[0] =~ s/^(.*)___=___//;
           }
           for (my $i=0;$i<$#Data;$i++) {
               if ($Data[$i]=~/\D/ && defined($Data[$i])) {
                   $Data[$i]="'".$Data[$i]."'";
               }
           }
     }      }
     return @Data;      return @Data;
 }  }
Line 873  sub save_export_data { Line 952  sub save_export_data {
     return if ($self->temporary());      return if ($self->temporary());
     my $student = $self->{'name'}.':'.$self->{'domain'};      my $student = $self->{'name'}.':'.$self->{'domain'};
     my $symb    = $self->{'symb'};      my $symb    = $self->{'symb'};
       if ($self->badcalc()){
           # do not save data away when calculations have not been done properly.
           delete($Exportrows{$symb});
           return;
       }
     if (! exists($Exportrows{$symb}) ||       if (! exists($Exportrows{$symb}) || 
         ! exists($Exportrows{$symb}->{$self->{'filename'}})) {          ! exists($Exportrows{$symb}->{$self->{'filename'}})) {
         return;          return;

Removed from v.1.25  
changed lines
  Added in v.1.30


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