Diff for /loncom/interface/spreadsheet/assesscalc.pm between versions 1.51.2.1 and 1.58

version 1.51.2.1, 2006/05/15 23:44:46 version 1.58, 2007/01/23 01:36:26
Line 174  sub initialize { Line 174  sub initialize {
 ########################################################  ########################################################
 ########################################################  ########################################################
 sub initialize_package {  sub initialize_package {
     my ($sname,$sdomain,$in_navmap) = @_;      my ($sname,$sdomain,$in_navmap,$calling_sheet) = @_;
     $current_name   = $sname;      $current_name   = $sname;
     $current_domain = $sdomain;      $current_domain = $sdomain;
     $navmap = $in_navmap;      $navmap = $in_navmap;
Line 185  sub initialize_package { Line 185  sub initialize_package {
         undef(%courseopt);          undef(%courseopt);
     }      }
     &load_cached_export_rows();      &load_cached_export_rows();
     &load_parameter_caches();      &load_parameter_caches($calling_sheet);
     &Apache::loncoursedata::clear_internal_caches();      &Apache::loncoursedata::clear_internal_caches();
 }  }
   
Line 202  sub initialize_package { Line 202  sub initialize_package {
 ########################################################  ########################################################
 ########################################################  ########################################################
 sub load_parameter_caches {  sub load_parameter_caches {
       my ($calling_sheet) = @_;
     my $userprefix = $current_name.':'.$current_domain.'_';      my $userprefix = $current_name.':'.$current_domain.'_';
     $userprefix =~ s/:/_/g;      $userprefix =~ s/:/_/g;
     #      #
Line 234  sub load_parameter_caches { Line 235  sub load_parameter_caches {
     if (! %userdata) {      if (! %userdata) {
         %userdata = &Apache::loncoursedata::get_current_state($current_name,          %userdata = &Apache::loncoursedata::get_current_state($current_name,
                                                               $current_domain);                                                                $current_domain);
    my ($tmp) = %userdata;
    if ($tmp =~ /^error:(.*)/) {
       $calling_sheet->set_calcerror($1);
    }
         $userdata{'loadtime'} = time;          $userdata{'loadtime'} = time;
     }      }
     return;      return;
Line 272  sub ensure_current_caches { Line 277  sub ensure_current_caches {
         undef(%useropt);          undef(%useropt);
         undef(%userdata);          undef(%userdata);
     }      }
     &load_parameter_caches();      &load_parameter_caches($self);
 }  }
   
 ##################################################  ##################################################
Line 290  Returns: The value of a parameter, or '' Line 295  Returns: The value of a parameter, or ''
   
 This function cascades through the possible levels searching for a value for  This function cascades through the possible levels searching for a value for
 a parameter.  The levels are checked in the following order:  a parameter.  The levels are checked in the following order:
 user, course (at section level and course level), map, and lonnet::metadata.  user, course (at group, section level and course level), map, and 
   lonnet::metadata.
 This function uses %parmhash, which must be tied prior to calling it.  This function uses %parmhash, which must be tied prior to calling it.
 This function also requires %courseopt and %useropt to be initialized for  This function also requires %courseopt and %useropt to be initialized for
 this user and course.  this user and course.
Line 301  this user and course. Line 307  this user and course.
 ##################################################  ##################################################
 sub parmval {  sub parmval {
     my $self = shift;      my $self = shift;
     my ($what,$symb,$uname,$udom,$csec,$recurse,$mapname,$id,$fn)=@_;      my ($what,$symb,$uname,$udom,$csec,$recurse,$mapname,$id,$fn,$groups)=@_;
     $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));
     $symb  = $self->{'symb'}    if (! defined($symb));      $groups = $self->{'groups'}   if (! defined($groups)); 
       $symb   = $self->{'symb'}     if (! defined($symb));
     #      #
     my $result='';      my $result='';
     #      #
Line 335  sub parmval { Line 342  sub parmval {
     my $ucourselevel  = $usercourseprefix.'.'.$what;      my $ucourselevel  = $usercourseprefix.'.'.$what;
     my $ucourselevelr = $usercourseprefix.'.'.$symbparm;      my $ucourselevelr = $usercourseprefix.'.'.$symbparm;
     my $ucourselevelm = $usercourseprefix.'.'.$mapparm;      my $ucourselevelm = $usercourseprefix.'.'.$mapparm;
    # check user      # check user
     if (defined($uname)) {      if (defined($uname)) {
         return $useropt{$ucourselevelr} if (defined($useropt{$ucourselevelr}));          return $useropt{$ucourselevelr} if (defined($useropt{$ucourselevelr}));
         return $useropt{$ucourselevelm} if (defined($useropt{$ucourselevelm}));          return $useropt{$ucourselevelm} if (defined($useropt{$ucourselevelm}));
         return $useropt{$ucourselevel}  if (defined($useropt{$ucourselevel}));          return $useropt{$ucourselevel}  if (defined($useropt{$ucourselevel}));
     }      }
       # check groups
       if (defined($groups) && ref($groups) eq 'ARRAY') {
           foreach my $group (@{$groups}) {
               foreach my $level ($symbparm,$mapparm,$what) {
                   my $item = $courseprefix.'.['.$group.'].'.$level;
                   if (defined($courseopt{$item})) {
                       return $courseopt{$item};
                   }
               }
           }
       }
     # check section      # check section
     if (defined($csec)) {      if (defined($csec)) {
         return $courseopt{$seclevelr} if (defined($courseopt{$seclevelr}));          return $courseopt{$seclevelr} if (defined($courseopt{$seclevelr}));
Line 371  sub parmval { Line 389  sub parmval {
  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,1,   my $partgeneral=$self->parmval($newwhat,$symb,$uname,$udom,$csec,1,
        $mapname,$id,$fn);         $mapname,$id,$fn,$groups);
  if (defined($partgeneral)) { return $partgeneral; }   if (defined($partgeneral)) { return $partgeneral; }
     }      }
     if ($recurse) { return undef; }      if ($recurse) { return undef; }
Line 529  sub assess_html_row { Line 547  sub assess_html_row {
             $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="#E0FFDD">';
             $row_html .= &Apache::Spreadsheet::html_editable_cell($cell,              $row_html .= &Apache::Spreadsheet::html_editable_cell($cell,
                                                                   '#E0FFDD',1);                                                                    '#E0FFDD',1);
         }          }
Line 637  sub get_parameter_values { Line 655  sub get_parameter_values {
             my $value = $self->parmval($parmname,$self->{'symb'},              my $value = $self->parmval($parmname,$self->{'symb'},
        $self->{'name'},$self->{'domain'},         $self->{'name'},$self->{'domain'},
        $self->{'section'},undef,         $self->{'section'},undef,
        $mapname,$id,$fn);         $mapname,$id,$fn,$self->{'groups'});
             $parameters{$parmname} =$value;              $parameters{$parmname} =$value;
         }          }
         untie(%parmhash);          untie(%parmhash);
Line 834  sub sett { Line 852  sub sett {
             # Replace 'A0' with the value from 'A0'              # Replace 'A0' with the value from 'A0'
             $t{$cell}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$sheet_values\{\'$2\'\}/g;              $t{$cell}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$sheet_values\{\'$2\'\}/g;
             # Replace parameters              # Replace parameters
             $t{$cell}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.$self->expandnamed($2)/ge;              $t{$cell}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.$self->expandnamed($2)/sge;
         }          }
     }      }
     #      #
Line 853  sub sett { Line 871  sub sett {
             $t{$cell}=$formula;              $t{$cell}=$formula;
             $t{$cell}=~s/\.\.+/\,/g;              $t{$cell}=~s/\.\.+/\,/g;
             $t{$cell}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$sheet_values\{\'$2\'\}/g;              $t{$cell}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$sheet_values\{\'$2\'\}/g;
             $t{$cell}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.$self->expandnamed($2)/ge;              $t{$cell}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.$self->expandnamed($2)/sge;
         }          }
     }      }
     # Put %t into the safe space      # Put %t into the safe space

Removed from v.1.51.2.1  
changed lines
  Added in v.1.58


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