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

version 1.1, 2003/05/16 20:55:11 version 1.10, 2003/05/27 20:20:25
Line 46  package Apache::assesscalc; Line 46  package Apache::assesscalc;
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::loncommon;
 use Apache::Spreadsheet;  use Apache::Spreadsheet;
 use HTML::Entities();  use HTML::Entities();
 use Spreadsheet::WriteExcel;  use Spreadsheet::WriteExcel;
Line 171  sub load_parameter_caches { Line 172  sub load_parameter_caches {
         my $id  = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};          my $id  = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
         my %Tmp = &Apache::lonnet::dump('resourcedata',$dom,$id);          my %Tmp = &Apache::lonnet::dump('resourcedata',$dom,$id);
         while (my ($name,$value) = each(%Tmp)) {          while (my ($name,$value) = each(%Tmp)) {
             $courseopt{$userprefix.$name}=$value;              $courseopt{$name}=$value;
         }          }
     }      }
     if (! %useropt) {      if (! %useropt) {
Line 198  sub load_parameter_caches { Line 199  sub load_parameter_caches {
   
 ########################################################  ########################################################
 ########################################################  ########################################################
   
 sub ensure_current_parameter_caches {  sub ensure_current_parameter_caches {
     my $self = shift;      my $self = shift;
     if (! defined($current_course) ||       if (! defined($current_course) || 
Line 258  sub parmval { Line 258  sub parmval {
     #      #
     my $symbparm = $symb.'.'.$what;      my $symbparm = $symb.'.'.$what;
     my $mapparm  = $mapname.'___(all).'.$what;      my $mapparm  = $mapname.'___(all).'.$what;
       my $courseprefix = $self->{'cid'};
     my $usercourseprefix = $uname.'_'.$udom.'_'.$self->{'cid'};      my $usercourseprefix = $uname.'_'.$udom.'_'.$self->{'cid'};
     #      #
     my $seclevel  = $usercourseprefix.'.['.$csec.'].'.$what;      my $seclevel  = $courseprefix.'.['.$csec.'].'.$what;
     my $seclevelr = $usercourseprefix.'.['.$csec.'].'.$symbparm;      my $seclevelr = $courseprefix.'.['.$csec.'].'.$symbparm;
     my $seclevelm = $usercourseprefix.'.['.$csec.'].'.$mapparm;      my $seclevelm = $courseprefix.'.['.$csec.'].'.$mapparm;
     #      #
     my $courselevel  = $usercourseprefix.'.'.$what;      my $courselevel  = $courseprefix.'.'.$what;
     my $courselevelr = $usercourseprefix.'.'.$symbparm;      my $courselevelr = $courseprefix.'.'.$symbparm;
     my $courselevelm = $usercourseprefix.'.'.$mapparm;      my $courselevelm = $courseprefix.'.'.$mapparm;
       #
       my $ucourselevel  = $usercourseprefix.'.'.$what;
       my $ucourselevelr = $usercourseprefix.'.'.$symbparm;
       my $ucourselevelm = $usercourseprefix.'.'.$mapparm;
    # check user     # check user
     if (defined($uname)) {      if (defined($uname)) {
         return $useropt{$courselevelr} if (defined($useropt{$courselevelr}));          return $useropt{$ucourselevelr} if (defined($useropt{$ucourselevelr}));
         return $useropt{$courselevelm} if (defined($useropt{$courselevelm}));          return $useropt{$ucourselevelm} if (defined($useropt{$ucourselevelm}));
         return $useropt{$courselevel}  if (defined($useropt{$courselevel}));          return $useropt{$ucourselevel}  if (defined($useropt{$ucourselevel}));
     }      }
     # check section      # check section
     if (defined($csec)) {      if (defined($csec)) {
Line 308  sub parmval { Line 313  sub parmval {
     return '';      return '';
 }  }
   
   sub get_html_title {
       my $self = shift;
       my ($assess_title,$name,$time) = $self->get_title();
       my $title = '<h1>'.$assess_title.'</h1>'.
           '<h2>'.$name.', '.
           &Apache::loncommon::aboutmewrapper
                            ($self->{'name'}.'@'.$self->{'domain'},
                             $self->{'name'},$self->{'domain'});
       $title .= '<h3>'.$time.'</h3>';
       return $title;
   }
   
 sub get_title {  sub get_title {
     my $self = shift;      my $self = shift;
     my $title;      my @title = ();
     if (($self->{'usymb'} eq '_feedback') ||      if (($self->{'usymb'} eq '_feedback') ||
         ($self->{'usymb'} eq '_evaluation') ||          ($self->{'usymb'} eq '_evaluation') ||
         ($self->{'usymb'} eq '_discussion') ||          ($self->{'usymb'} eq '_discussion') ||
         ($self->{'usymb'} eq '_tutoring')) {          ($self->{'usymb'} eq '_tutoring')) {
         $title = $self->{'usymb'};          my $assess_title = ucfirst($self->{'usymb'});
         $title =~ s/^_//;          $assess_title =~ s/^_//;
         $title = '<h1>'.ucfirst($title)."</h1>\n";          push(@title,$assess_title);
     } else {      } else {
         $title = '<h1>'.&Apache::lonnet::gettitle($self->{'symb'})."</h1>\n";          push(@title,&Apache::lonnet::gettitle($self->{'symb'}));
     }      }
     $title .= '<h2>'.$self->{'name'}.'@'.$self->{'domain'}."</h2>\n";      # Look up the users identifying information
     $title .= '<h3>'.localtime(time).'</h3>';      # Get the users information
     #      my %userenv = &Apache::loncoursedata::GetUserName($self->{'name'},
     return $title;                                                        $self->{'domain'});
       my $name = 
           join(' ',@userenv{'firstname','middlename','lastname','generation'});
       $name =~ s/\s+$//;
       push (@title,$name);
       push (@title,scalar(localtime(time)));
       return @title;
 }  }
   
 sub parent_link {  sub parent_link {
Line 390  END Line 413  END
     }      }
     #      #
     my $num_output = 0;      my $num_output = 0;
     foreach my $rownum ($self->rows()) {      foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
  if ($num_output++ % 50 == 0) {   if ($num_output++ % 50 == 0) {
     $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($num_uneditable,$rownum)."</tr>\n");                    $self->assess_html_row($rownum)."</tr>\n");
     }      }
     $r->print("</table>\n");      $r->print("</table>\n");
     return;      return;
Line 403  END Line 426  END
   
 sub assess_html_row {  sub assess_html_row {
     my $self = shift();      my $self = shift();
     my ($num_uneditable,$row) = @_;      my ($row) = @_;
     my $requester_is_student = ($ENV{'request.role'} =~ /^st\./);  
     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 417  sub assess_html_row { Line 439  sub assess_html_row {
         $row_html .= '<td>'.$parameter_name.'</td>';          $row_html .= '<td>'.$parameter_name.'</td>';
     }      }
     foreach my $cell (@rowdata) {      foreach my $cell (@rowdata) {
  if ($requester_is_student ||           if ($num_cols_output < 1) {
     $num_cols_output++ < $num_uneditable) {              $row_html .= '<td bgcolor="#FFDDDD">';
     $row_html .= '<td bgcolor="#FFDDDD">';              $row_html .= &Apache::Spreadsheet::html_uneditable_cell($cell,
     $row_html .= &Apache::Spreadsheet::html_uneditable_cell($cell,'#FFDDDD');                                                                      '#FFDDDD');
  } else {          } else {
     $row_html .= '<td bgcolor="#EOFFDD">';              $row_html .= '<td bgcolor="#EOFFDD">';
     $row_html .= &Apache::Spreadsheet::html_editable_cell($cell,'#E0FFDD');              $row_html .= &Apache::Spreadsheet::html_editable_cell($cell,
  }                                                                    '#E0FFDD',1);
           }
  $row_html .= '</td>';   $row_html .= '</td>';
           $num_cols_output++;
     }      }
     return $row_html;      return $row_html;
 }  }
   
 sub outsheet_csv {  sub csv_rows {
     my $self = shift;      # writes the meat of the spreadsheet to an excel worksheet.  Called
     my ($r)=@_;      # by Spreadsheet::outsheet_excel;
 }      my $self = shift;
       my ($filehandle) = @_;
 sub outsheet_excel {      #
     my $self = shift;      # Write a header row
     my ($r)=@_;      $self->csv_output_row($filehandle,undef,
                             ('Parameter','Description','Value'));
       #
       # Write each row
       foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
           my $parameter_name = $self->{'formulas'}->{'A'.$rownum};
           my $description = '';
           if (exists($nice_parameter_name{$parameter_name})) {
               $description = $nice_parameter_name{$parameter_name};
           }
           $self->csv_output_row($filehandle,$rownum,
                                 $parameter_name,$description);
       }
       return;
 }  }
   
 sub display {  sub excel_rows {
     my $self = shift;      # writes the meat of the spreadsheet to an excel worksheet.  Called
     my ($r) = @_;      # by Spreadsheet::outsheet_excel;
     $self->compute();      my $self = shift;
     $self->outsheet_html($r);      my ($worksheet,$cols_output,$rows_output) = @_;
       #
       # Write a header row
       $cols_output = 0;
       foreach my $value ('Parameter','Description','Value') {
           $worksheet->write($rows_output,$cols_output++,$value);
       }
       $rows_output++;    
       #
       # Write each row
       foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
           my $parameter_name = $self->{'formulas'}->{'A'.$rownum};
           my $description = '';
           if (exists($nice_parameter_name{$parameter_name})) {
               $description = $nice_parameter_name{$parameter_name};
           }
           $self->excel_output_row($worksheet,$rownum,$rows_output++,
                                   $parameter_name,$description);
       }
       return;
 }  }
   
 sub compute {  sub compute {
Line 479  sub compute { Line 535  sub compute {
     if (tie(%parmhash,'GDBM_File',      if (tie(%parmhash,'GDBM_File',
             $self->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) {              $self->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) {
         foreach my $parmname (keys(%parameters)) {          foreach my $parmname (keys(%parameters)) {
             my $value =  $self->parmval($parmname);              my $value = $self->parmval($parmname);
             $parameters{$parmname} =$value;              $parameters{$parmname} =$value;
         }          }
         untie(%parmhash);          untie(%parmhash);
Line 508  sub compute { Line 564  sub compute {
     my %f=$self->formulas();      my %f=$self->formulas();
     my %c;      my %c;
     #      #
       # Check for blackout requirements
       if ((!exists($ENV{'request.role.adv'}) || !$ENV{'request.role.adv'})) {
           while (my ($parm,$value) = each(%parameters)) {
               last if ($self->blackout());
               next if ($parm !~ /^(parameter_.*)_problemstatus$/);
               next if ($parameters{$1.'_answerdate'}<time);
               if (lc($value) eq 'no') {
                   # We must blackout this sheet
                   $self->blackout(1);
               }
           }
       }
       #
       # Move the parameters into the spreadsheet
     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;
           $value = '"'.$value.'"' if ($value =~/[^0-9.]/);
         $c{$parm} = $value;          $c{$parm} = $value;
     }      }
     $self->formulas(%f);      $self->formulas(\%f);
     $self->constants(%c);      $self->constants(\%c);
     $self->calcsheet();      $self->calcsheet();
     #      #
     # Store export row in cache      # Store export row in cache
Line 593  These rows are saved in the students dir Line 664  These rows are saved in the students dir
 ########################################################  ########################################################
 sub load_cached_export_rows {  sub load_cached_export_rows {
     %Exportrows = undef;      %Exportrows = undef;
     &Apache::lonnet::logthis("loading cached assess sheets for $current_name $current_domain");  
     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 635  spreadsheet only if necessary. Line 705  spreadsheet only if necessary.
 sub export_data {  sub export_data {
     my $self = shift;      my $self = shift;
     my $symb = $self->{'symb'};      my $symb = $self->{'symb'};
     if (! exists($Exportrows{$symb}) || ! defined($Exportrows{$symb})  ||      if (! exists($ENV{'request.role.adv'}) || ! $ENV{'request.role.adv'} ||
           ! 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'}})) {
Line 667  Writes the export data for this spreadsh Line 738  Writes the export data for this spreadsh
 #############################################  #############################################
 sub save_export_data {  sub save_export_data {
     my $self = shift;      my $self = shift;
       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 (! exists($Exportrows{$symb}) ||       if (! exists($Exportrows{$symb}) || 

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


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