--- loncom/interface/spreadsheet/assesscalc.pm 2006/04/06 20:24:13 1.52 +++ loncom/interface/spreadsheet/assesscalc.pm 2006/12/21 02:54:19 1.57 @@ -1,5 +1,5 @@ # -# $Id: assesscalc.pm,v 1.52 2006/04/06 20:24:13 raeburn Exp $ +# $Id: assesscalc.pm,v 1.57 2006/12/21 02:54:19 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -174,7 +174,7 @@ sub initialize { ######################################################## ######################################################## sub initialize_package { - my ($sname,$sdomain,$in_navmap) = @_; + my ($sname,$sdomain,$in_navmap,$calling_sheet) = @_; $current_name = $sname; $current_domain = $sdomain; $navmap = $in_navmap; @@ -185,7 +185,7 @@ sub initialize_package { undef(%courseopt); } &load_cached_export_rows(); - &load_parameter_caches(); + &load_parameter_caches($calling_sheet); &Apache::loncoursedata::clear_internal_caches(); } @@ -202,6 +202,7 @@ sub initialize_package { ######################################################## ######################################################## sub load_parameter_caches { + my ($calling_sheet) = @_; my $userprefix = $current_name.':'.$current_domain.'_'; $userprefix =~ s/:/_/g; # @@ -234,6 +235,10 @@ sub load_parameter_caches { if (! %userdata) { %userdata = &Apache::loncoursedata::get_current_state($current_name, $current_domain); + my ($tmp) = %userdata; + if ($tmp =~ /^error:(.*)/) { + $calling_sheet->set_calcerror($1); + } $userdata{'loadtime'} = time; } return; @@ -272,7 +277,7 @@ sub ensure_current_caches { undef(%useropt); undef(%userdata); } - &load_parameter_caches(); + &load_parameter_caches($self); } ################################################## @@ -302,18 +307,19 @@ this user and course. ################################################## sub parmval { my $self = shift; - my ($what,$symb,$uname,$udom,$csec,$recurse,$mapname,$id,$fn,$cgroup)=@_; - $uname = $self->{'name'} if (! defined($uname)); - $udom = $self->{'domain'} if (! defined($udom)); - $csec = $self->{'section'} if (! defined($csec)); - $cgroup = $self->{'group'} if (! defined($cgroup)); - $symb = $self->{'symb'} if (! defined($symb)); + my ($what,$symb,$uname,$udom,$csec,$recurse,$mapname,$id,$fn,$groups)=@_; + $uname = $self->{'name'} if (! defined($uname)); + $udom = $self->{'domain'} if (! defined($udom)); + $csec = $self->{'section'} if (! defined($csec)); + $groups = $self->{'groups'} if (! defined($groups)); + $symb = $self->{'symb'} if (! defined($symb)); # my $result=''; # # This should be a if (!defined($mapname) || !defined($id) || !defined($fn)) { ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb); + $mapname = &Apache::lonnet::deversion($mapname); } # Cascading lookup scheme my $rwhat=$what; @@ -325,10 +331,6 @@ sub parmval { my $courseprefix = $self->{'cid'}; my $usercourseprefix = $uname.'_'.$udom.'_'.$self->{'cid'}; # - my $grplevel=$courseprefix.'.['.$cgroup.'].'.$what; - my $grplevelr=$courseprefix.'.['.$cgroup.'].'.$symbparm; - my $grplevelm=$courseprefix.'.['.$cgroup.'].'.$mapparm; - # my $seclevel = $courseprefix.'.['.$csec.'].'.$what; my $seclevelr = $courseprefix.'.['.$csec.'].'.$symbparm; my $seclevelm = $courseprefix.'.['.$csec.'].'.$mapparm; @@ -346,11 +348,16 @@ sub parmval { return $useropt{$ucourselevelm} if (defined($useropt{$ucourselevelm})); return $useropt{$ucourselevel} if (defined($useropt{$ucourselevel})); } - # check group - if (defined($cgroup)) { - return $courseopt{$grplevelr} if (defined($courseopt{$grplevelr})); - return $courseopt{$grplevelm} if (defined($courseopt{$grplevelm})); - return $courseopt{$grplevel} if (defined($courseopt{$grplevel})); + # 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 if (defined($csec)) { @@ -382,7 +389,7 @@ sub parmval { my $newwhat=$rwhat; $newwhat=~s/\Q$space\E/$part/; my $partgeneral=$self->parmval($newwhat,$symb,$uname,$udom,$csec,1, - $mapname,$id,$fn); + $mapname,$id,$fn,$groups); if (defined($partgeneral)) { return $partgeneral; } } if ($recurse) { return undef; } @@ -540,7 +547,7 @@ sub assess_html_row { $row_html .= &Apache::Spreadsheet::html_uneditable_cell($cell, '#FFDDDD'); } else { - $row_html .= ''; + $row_html .= ''; $row_html .= &Apache::Spreadsheet::html_editable_cell($cell, '#E0FFDD',1); } @@ -643,11 +650,12 @@ sub get_parameter_values { if (tie(%parmhash,'GDBM_File', $self->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) { my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($self->{'symb'}); + $mapname = &Apache::lonnet::deversion($mapname); foreach my $parmname (@Parameters) { my $value = $self->parmval($parmname,$self->{'symb'}, $self->{'name'},$self->{'domain'}, $self->{'section'},undef, - $mapname,$id,$fn); + $mapname,$id,$fn,$self->{'groups'}); $parameters{$parmname} =$value; } untie(%parmhash);