Diff for /loncom/interface/spreadsheet/assesscalc.pm between versions 1.10 and 1.20

version 1.10, 2003/05/27 20:20:25 version 1.20, 2003/09/09 18:46:28
Line 44  assesscalc Line 44  assesscalc
 package Apache::assesscalc;  package Apache::assesscalc;
   
 use strict;  use strict;
   use warnings FATAL=>'all';
   no warnings 'uninitialized';
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
Line 123  sub clear_package { Line 125  sub clear_package {
     undef(%courseopt);      undef(%courseopt);
 }  }
   
   sub initialize {
       &clear_package();
   }
   
 ########################################################  ########################################################
 ########################################################  ########################################################
   
Line 136  sub clear_package { Line 142  sub clear_package {
 ########################################################  ########################################################
 sub initialize_package {  sub initialize_package {
     my ($sname,$sdomain) = @_;      my ($sname,$sdomain) = @_;
     $current_course = $ENV{'request.course.id'};  
     $current_name   = $sname;      $current_name   = $sname;
     $current_domain = $sdomain;      $current_domain = $sdomain;
     undef(%courseopt);      if ($current_course ne $ENV{'request.course.id'}) {
           $current_course = $ENV{'request.course.id'};
           undef(%courseopt);
       }
     &load_cached_export_rows();      &load_cached_export_rows();
     &load_parameter_caches();      &load_parameter_caches();
 }  }
Line 161  sub load_parameter_caches { Line 169  sub load_parameter_caches {
     #      #
     # Course Parameters Cache      # Course Parameters Cache
     if (! %courseopt) {      if (! %courseopt) {
         &Apache::lonnet::logthis("loading course options");  
         $current_course = $ENV{'request.course.id'};          $current_course = $ENV{'request.course.id'};
         undef(%courseopt);          undef(%courseopt);
         if (! defined($current_name) || ! defined($current_domain)) {          if (! defined($current_name) || ! defined($current_domain)) {
Line 201  sub load_parameter_caches { Line 208  sub load_parameter_caches {
 ########################################################  ########################################################
 sub ensure_current_parameter_caches {  sub ensure_current_parameter_caches {
     my $self = shift;      my $self = shift;
       ##
       ## Check for a modified parameters
       ##
     if (! defined($current_course) ||       if (! defined($current_course) || 
         $current_course ne $ENV{'request.course.id'} ) {          $current_course ne $ENV{'request.course.id'} ) {
         $current_course = $ENV{'request.course.id'};          $current_course = $ENV{'request.course.id'};
         undef(%courseopt);           undef(%courseopt); 
     }      }
       ##
       ## Check for new user
       ##
     if (! defined($current_name)   || $current_name ne $self->{'name'} ||      if (! defined($current_name)   || $current_name ne $self->{'name'} ||
         ! defined($current_domain) || $current_domain ne $self->{'domain'}) {          ! defined($current_domain) || $current_domain ne $self->{'domain'}) {
         $current_domain = $self->{'domain'};          $current_domain = $self->{'domain'};
Line 241  this user and course. Line 254  this user and course.
 ##################################################  ##################################################
 sub parmval {  sub parmval {
     my $self = shift;      my $self = shift;
     my ($what,$symb,$uname,$udom,$csec)=@_;      my ($what,$symb,$uname,$udom,$csec,$recurse)=@_;
     $uname = $self->{'name'}    if (! defined($uname));      $uname = $self->{'name'}    if (! defined($uname));
     $udom  = $self->{'domain'}  if (! defined($udom));      $udom  = $self->{'domain'}  if (! defined($udom));
     $csec  = $self->{'section'} if (! defined($csec));      $csec  = $self->{'section'} if (! defined($csec));
Line 250  sub parmval { Line 263  sub parmval {
     my $result='';      my $result='';
     #      #
     # This should be a       # This should be a 
     my ($mapname,$id,$fn)=split(/___/,$symb);      my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb);
     # Cascading lookup scheme      # Cascading lookup scheme
     my $rwhat=$what;      my $rwhat=$what;
     $what =~ s/^parameter\_//;      $what =~ s/^parameter\_//;
Line 306  sub parmval { Line 319  sub parmval {
  if ($part eq '') { $part='0'; }   if ($part eq '') { $part='0'; }
  my $newwhat=$rwhat;   my $newwhat=$rwhat;
  $newwhat=~s/\Q$space\E/$part/;   $newwhat=~s/\Q$space\E/$part/;
  my $partgeneral=$self->parmval($newwhat,$symb,$uname,$udom,$csec);   my $partgeneral=$self->parmval($newwhat,$symb,$uname,$udom,$csec,1);
  if (defined($partgeneral)) { return $partgeneral; }   if (defined($partgeneral)) { return $partgeneral; }
     }      }
       if ($recurse) { return undef; }
       my $pack_def=&Apache::lonnet::packages_tab_default($fn,'resource.'.$what);
       if (defined($pack_def)) { return $pack_def; }
     #nothing defined      #nothing defined
     return '';      return '';
 }  }
Line 328  sub get_html_title { Line 344  sub get_html_title {
 sub get_title {  sub get_title {
     my $self = shift;      my $self = shift;
     my @title = ();      my @title = ();
     if (($self->{'usymb'} eq '_feedback') ||      if (($self->{'symb'} eq '_feedback') ||
         ($self->{'usymb'} eq '_evaluation') ||          ($self->{'symb'} eq '_evaluation') ||
         ($self->{'usymb'} eq '_discussion') ||          ($self->{'symb'} eq '_discussion') ||
         ($self->{'usymb'} eq '_tutoring')) {          ($self->{'symb'} eq '_tutoring')) {
         my $assess_title = ucfirst($self->{'usymb'});          my $assess_title = ucfirst($self->{'symb'});
         $assess_title =~ s/^_//;          $assess_title =~ s/^_//;
         push(@title,$assess_title);          push(@title,$assess_title);
     } else {      } else {
Line 365  sub outsheet_html { Line 381  sub outsheet_html {
     ###################################      ###################################
     # Determine table structure      # Determine table structure
     ###################################      ###################################
       my $importcolor = '#FFFFFF';
       my $exportcolor = '#FFFFAA';
     my $num_uneditable = 1;      my $num_uneditable = 1;
     my $num_left = 52-$num_uneditable;      my $num_left = 52-$num_uneditable;
     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">Assessment</font></th>
   <td bgcolor="#FFDDDD" 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">Calculations</font></b></td>
 </tr><tr>  </tr><tr>
Line 379  END Line 397  END
     my $label_num = 0;      my $label_num = 0;
     foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){      foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){
         if ($label_num<$num_uneditable) {           if ($label_num<$num_uneditable) { 
             $tableheader .= '<td bgcolor="#FFDDDD">';              $tableheader .= '<td bgcolor="'.$importcolor.'">';
         } else {          } else {
             $tableheader .= '<td>';              $tableheader .= '<td>';
         }          }
Line 392  END Line 410  END
     #      #
     # Print out template row      # Print out template row
     $r->print('<tr><td>Template</td><td>&nbsp;</td>'.      $r->print('<tr><td>Template</td><td>&nbsp;</td>'.
       $self->html_template_row($num_uneditable)."</tr>\n");        $self->html_template_row($num_uneditable,$importcolor).
                 "</tr>\n");
     #      #
     # Print out summary/export row      # Print out summary/export row
     $r->print('<tr><td>Export</td><td>0</td>'.      $r->print('<tr><td>Export</td><td>0</td>'.
       $self->html_export_row()."</tr>\n");        $self->html_export_row($exportcolor)."</tr>\n");
     #      #
     # Prepare to output rows      # Prepare to output rows
     $tableheader =<<"END";      $tableheader =<<"END";
Line 405  END Line 424  END
 END  END
     foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){      foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){
  if ($label_num<$num_uneditable) {    if ($label_num<$num_uneditable) { 
             $tableheader.='<th bgcolor="#FFDDDD">';              $tableheader.='<th bgcolor="'.$importcolor.'">';
         } else {          } else {
             $tableheader.='<th>';              $tableheader.='<th>';
         }          }
Line 418  END Line 437  END
     $r->print("</table>\n".$tableheader);      $r->print("</table>\n".$tableheader);
  }   }
  $r->print('<tr><td>'.$rownum.'</td>'.   $r->print('<tr><td>'.$rownum.'</td>'.
                   $self->assess_html_row($rownum)."</tr>\n");                    $self->assess_html_row($rownum,$importcolor)."</tr>\n");
     }      }
     $r->print("</table>\n");      $r->print("</table>\n");
     return;      return;
Line 426  END Line 445  END
   
 sub assess_html_row {  sub assess_html_row {
     my $self = shift();      my $self = shift();
     my ($row) = @_;      my ($row,$importcolor) = @_;
     my $parameter_name = $self->{'formulas'}->{'A'.$row};      my $parameter_name = $self->{'formulas'}->{'A'.$row};
     my @rowdata = $self->get_row($row);      my @rowdata = $self->get_row($row);
     my $num_cols_output = 0;      my $num_cols_output = 0;
Line 440  sub assess_html_row { Line 459  sub assess_html_row {
     }      }
     foreach my $cell (@rowdata) {      foreach my $cell (@rowdata) {
         if ($num_cols_output < 1) {          if ($num_cols_output < 1) {
             $row_html .= '<td bgcolor="#FFDDDD">';              $row_html .= '<td bgcolor="'.$importcolor.'">';
             $row_html .= &Apache::Spreadsheet::html_uneditable_cell($cell,              $row_html .= &Apache::Spreadsheet::html_uneditable_cell($cell,
                                                                     '#FFDDDD');                                                                      '#FFDDDD');
         } else {          } else {
Line 505  sub excel_rows { Line 524  sub excel_rows {
   
 sub compute {  sub compute {
     my $self = shift;      my $self = shift;
     $self->logthis('computing');      my ($r) = @_;
       my $connection = $r->connection();
       if ($connection->aborted()) { $self->cleanup(); return; }
   #    $self->logthis('computing');
     $self->initialize_safe_space();      $self->initialize_safe_space();
       #########################################
       #########################################
       ###                                   ###
       ###  Retrieve the problem parameters  ###
       ###                                   ###
       #########################################
       #########################################
       my @Mandatory_parameters = ("stores_0_solved",
                                   "stores_0_awarddetail",
                                   "stores_0_awarded",
                                   "timestamp",
                                   "stores_0_tries",
                                   "stores_0_award");
     #      #
     # Definitions      # Definitions
     undef(%nice_parameter_name);      undef(%nice_parameter_name);
     my %parameters;   # holds underscored parameters by name      my %parameters;   # holds underscored parameters by name
     #      #
     # Get the metadata fields and determine their proper names      # Get the metadata fields and determine their proper names
     my ($symap,$syid,$srcf)=split(/___/,$self->{'symb'});      my ($symap,$syid,$srcf)=&Apache::lonnet::decode_symb($self->{'symb'});
     my @Metadata = split(/\,/,&Apache::lonnet::metadata($srcf,'keys'));      my @Metadata = split(/\,/,&Apache::lonnet::metadata($srcf,'keys'));
     foreach my $parm (@Metadata) {      foreach my $parm (@Mandatory_parameters,@Metadata) {
         next if ($parm !~ /^(resource\.|stores|parameter)_/);          next if ($parm !~ /^(resource\.|stores|parameter)_/);
         my $cleaned_name = $parm;          my $cleaned_name = $parm;
         $cleaned_name =~ s/^resource\./stores_/;          $cleaned_name =~ s/^resource\./stores_/;
Line 530  sub compute { Line 565  sub compute {
     }      }
     #      #
     # Get the values of the metadata fields      # Get the values of the metadata fields
       if ($connection->aborted()) { $self->cleanup(); return; }
     $self->ensure_current_parameter_caches();      $self->ensure_current_parameter_caches();
       if ($connection->aborted()) { $self->cleanup(); return; }
     my $filename = $self->{'coursefilename'}.'_parms.db';      my $filename = $self->{'coursefilename'}.'_parms.db';
     if (tie(%parmhash,'GDBM_File',      if (tie(%parmhash,'GDBM_File',
             $self->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) {              $self->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) {
Line 542  sub compute { Line 579  sub compute {
     } else {      } else {
         $self->logthis('unable to tie '.$filename);          $self->logthis('unable to tie '.$filename);
     }      }
       if ($connection->aborted()) { $self->cleanup(); return; }
     #      #
     # Clean out unnecessary parameters      # Clean out unnecessary parameters
     foreach (keys(%parameters)) {      foreach (keys(%parameters)) {
Line 576  sub compute { Line 614  sub compute {
             }              }
         }          }
     }      }
       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 586  sub compute { Line 626  sub compute {
     }      }
     $self->formulas(\%f);      $self->formulas(\%f);
     $self->constants(\%c);      $self->constants(\%c);
       if ($connection->aborted()) { $self->cleanup(); return; }
     $self->calcsheet();      $self->calcsheet();
     #      #
     # Store export row in cache      # Store export row in cache
Line 595  sub compute { Line 636  sub compute {
     #      #
     # Save the export data      # Save the export data
     $self->save_export_data();      $self->save_export_data();
       $self->save() if ($self->need_to_save());
       if ($connection->aborted()) { $self->cleanup(); return; }
     return;      return;
 }  }
   
Line 663  These rows are saved in the students dir Line 706  These rows are saved in the students dir
 ########################################################  ########################################################
 ########################################################  ########################################################
 sub load_cached_export_rows {  sub load_cached_export_rows {
     %Exportrows = undef;      undef(%Exportrows);
     my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'.      my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'.
                                     $ENV{'request.course.id'},                                      $ENV{'request.course.id'},
                                     $current_domain,$current_name,undef);                                      $current_domain,$current_name,undef);
Line 704  spreadsheet only if necessary. Line 747  spreadsheet only if necessary.
 #############################################  #############################################
 sub export_data {  sub export_data {
     my $self = shift;      my $self = shift;
       my ($r) = @_;
       my $connection = $r->connection();
     my $symb = $self->{'symb'};      my $symb = $self->{'symb'};
     if (! exists($ENV{'request.role.adv'}) || ! $ENV{'request.role.adv'} ||      if (! exists($ENV{'request.role.adv'}) || ! $ENV{'request.role.adv'} ||
         ! exists($Exportrows{$symb}) || ! defined($Exportrows{$symb})  ||          ! exists($Exportrows{$symb}) || ! defined($Exportrows{$symb})  ||
         ! $self->check_expiration_time($Exportrows{$symb}->{'time'}) ||          ! $self->check_expiration_time($Exportrows{$symb}->{'time'}) ||
         ! exists($Exportrows{$symb}->{$self->{'filename'}}) ||          ! exists($Exportrows{$symb}->{$self->{'filename'}}) ||
         ! defined($Exportrows{$symb}->{$self->{'filename'}})) {          ! defined($Exportrows{$symb}->{$self->{'filename'}}) ||
         $self->compute();          ! ref($Exportrows{$symb}->{$self->{'filename'}}) 
           ) {
           $self->compute($r);
     }      }
       if ($connection->aborted()) { $self->cleanup(); return; }
     my @Data = @{$Exportrows{$symb}->{$self->{'filename'}}};      my @Data = @{$Exportrows{$symb}->{$self->{'filename'}}};
     if ($Data[0] =~ /^(.*)___=___/) {      if ($Data[0] =~ /^(.*)___=___/) {
         $self->{'sheetname'} = $1;          $self->{'sheetname'} = $1;

Removed from v.1.10  
changed lines
  Added in v.1.20


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