version 1.21, 2003/09/10 18:33:35
|
version 1.25, 2003/10/02 17:07:41
|
Line 50 use Apache::Constants qw(:common :http);
|
Line 50 use Apache::Constants qw(:common :http);
|
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::Spreadsheet; |
use Apache::Spreadsheet; |
|
use Apache::loncoursedata(); |
use HTML::Entities(); |
use HTML::Entities(); |
use Spreadsheet::WriteExcel; |
use Spreadsheet::WriteExcel; |
use GDBM_File; |
use GDBM_File; |
Line 90 use Time::HiRes;
|
Line 91 use Time::HiRes;
|
######################################################## |
######################################################## |
|
|
my %Exportrows; |
my %Exportrows; |
|
my %newExportrows; |
|
|
my $current_name; |
my $current_name; |
my $current_domain; |
my $current_domain; |
Line 99 my %parmhash;
|
Line 101 my %parmhash;
|
my %nice_parameter_name; |
my %nice_parameter_name; |
|
|
my %useropt; |
my %useropt; |
|
my %userdata; |
my %courseopt; |
my %courseopt; |
|
|
######################################################## |
######################################################## |
Line 110 my %courseopt;
|
Line 113 my %courseopt;
|
|
|
=item &clear_package() |
=item &clear_package() |
|
|
Reset all package variables. |
Reset all package variables and clean up caches. |
|
|
=cut |
=cut |
|
|
######################################################## |
######################################################## |
######################################################## |
######################################################## |
sub clear_package { |
sub clear_package { |
|
if (defined($current_name) && |
|
defined($current_domain) && |
|
defined($current_course) && |
|
$current_course eq $ENV{'request.course.id'} && |
|
%newExportrows) { |
|
&save_cached_export_rows($current_name,$current_domain); |
|
} |
undef(%Exportrows); |
undef(%Exportrows); |
|
undef(%newExportrows); |
undef($current_name); |
undef($current_name); |
undef($current_domain); |
undef($current_domain); |
undef($current_course); |
undef($current_course); |
undef(%useropt); |
undef(%useropt); |
|
undef(%userdata); |
undef(%courseopt); |
undef(%courseopt); |
} |
} |
|
|
|
sub save_cached_export_rows { |
|
my ($sname,$sdomain) = @_; |
|
my $start = Time::HiRes::time; |
|
my $result = &Apache::lonnet::put |
|
('nohist_calculatedsheets_'.$ENV{'request.course.id'}, |
|
$newExportrows{$sname.':'.$sdomain}, |
|
$sdomain,$sname); |
|
delete($newExportrows{$sname.':'.$sdomain}); |
|
} |
|
|
sub initialize { |
sub initialize { |
&clear_package(); |
&clear_package(); |
|
&Apache::loncoursedata::clear_internal_caches(); |
} |
} |
|
|
######################################################## |
######################################################## |
Line 145 sub initialize_package {
|
Line 168 sub initialize_package {
|
$current_name = $sname; |
$current_name = $sname; |
$current_domain = $sdomain; |
$current_domain = $sdomain; |
undef(%useropt); |
undef(%useropt); |
|
undef(%userdata); |
if ($current_course ne $ENV{'request.course.id'}) { |
if ($current_course ne $ENV{'request.course.id'}) { |
$current_course = $ENV{'request.course.id'}; |
$current_course = $ENV{'request.course.id'}; |
undef(%courseopt); |
undef(%courseopt); |
} |
} |
&load_cached_export_rows(); |
&load_cached_export_rows(); |
&load_parameter_caches(); |
&load_parameter_caches(); |
|
&Apache::loncoursedata::clear_internal_caches(); |
} |
} |
|
|
|
|
######################################################## |
######################################################## |
######################################################## |
######################################################## |
|
|
Line 194 sub load_parameter_caches {
|
Line 220 sub load_parameter_caches {
|
} |
} |
$useropt{'loadtime'} = time; |
$useropt{'loadtime'} = time; |
} |
} |
|
if (! %userdata) { |
|
%userdata = &Apache::loncoursedata::get_current_state($current_name, |
|
$current_domain); |
|
$userdata{'loadtime'} = time; |
|
} |
|
return; |
} |
} |
|
|
######################################################## |
######################################################## |
Line 207 sub load_parameter_caches {
|
Line 239 sub load_parameter_caches {
|
|
|
######################################################## |
######################################################## |
######################################################## |
######################################################## |
sub ensure_current_parameter_caches { |
sub ensure_current_caches { |
my $self = shift; |
my $self = shift; |
## |
## |
## Check for a modified parameters |
## Check for a modified parameters |
Line 216 sub ensure_current_parameter_caches {
|
Line 248 sub ensure_current_parameter_caches {
|
$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); |
|
undef(%useropt); |
|
undef(%userdata); |
} |
} |
## |
## |
## Check for new user |
## Check for new user |
Line 225 sub ensure_current_parameter_caches {
|
Line 259 sub ensure_current_parameter_caches {
|
$current_domain = $self->{'domain'}; |
$current_domain = $self->{'domain'}; |
$current_name = $self->{'name'}; |
$current_name = $self->{'name'}; |
undef(%useropt); |
undef(%useropt); |
|
undef(%userdata); |
} |
} |
&load_parameter_caches(); |
&load_parameter_caches(); |
} |
} |
Line 531 sub get_parm_names {
|
Line 566 sub get_parm_names {
|
my @Mandatory_parameters = @_; |
my @Mandatory_parameters = @_; |
my %parameters_and_names; |
my %parameters_and_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 (@Mandatory_parameters,@Metadata) { |
foreach my $parm (@Mandatory_parameters,@Metadata) { |
next if ($parm !~ /^(resource\.|stores|parameter)_/); |
next if ($parm !~ /^(resource\.|stores|parameter)_/); |
Line 587 sub deal_with_export_row {
|
Line 622 sub deal_with_export_row {
|
return; |
return; |
} |
} |
|
|
|
sub get_problem_state { |
|
my $self = shift; |
|
my %student_parameters; |
|
if (exists($userdata{$self->{'symb'}}) && |
|
ref($userdata{$self->{'symb'}}) eq 'HASH') { |
|
%student_parameters = %{$userdata{$self->{'symb'}}}; |
|
} |
|
return %student_parameters; |
|
} |
|
|
sub compute { |
sub compute { |
my $self = shift; |
my $self = shift; |
my ($r) = @_; |
my ($r) = @_; |
my $connection = $r->connection(); |
my $connection = $r->connection(); |
if ($connection->aborted()) { $self->cleanup(); return; } |
if ($connection->aborted()) { $self->cleanup(); return; } |
# $self->logthis('computing'); |
|
$self->initialize_safe_space(); |
$self->initialize_safe_space(); |
######################################### |
######################################### |
######################################### |
######################################### |
Line 622 sub compute {
|
Line 665 sub compute {
|
# |
# |
# Get the values of the metadata fields |
# Get the values of the metadata fields |
if ($connection->aborted()) { $self->cleanup(); return; } |
if ($connection->aborted()) { $self->cleanup(); return; } |
$self->ensure_current_parameter_caches(); |
$self->ensure_current_caches(); |
if ($connection->aborted()) { $self->cleanup(); return; } |
if ($connection->aborted()) { $self->cleanup(); return; } |
%parameters = $self->get_parameter_values(keys(%parameters)); |
%parameters = $self->get_parameter_values(keys(%parameters)); |
if ($connection->aborted()) { $self->cleanup(); return; } |
if ($connection->aborted()) { $self->cleanup(); return; } |
Line 633 sub compute {
|
Line 676 sub compute {
|
} |
} |
# |
# |
# Get the students performance data |
# Get the students performance data |
my %student_parameters = |
my %student_parameters = $self->get_problem_state(); |
&Apache::loncoursedata::get_current_state($self->{'name'}, |
|
$self->{'domain'}, |
|
$self->{'symb'}, |
|
$self->{'cid'}); |
|
while (my ($parm,$value) = each(%student_parameters)) { |
while (my ($parm,$value) = each(%student_parameters)) { |
$parm =~ s/^resource\./stores_/; |
$parm =~ s/^resource\./stores_/; |
$parm =~ s/\./_/g; |
$parm =~ s/\./_/g; |
Line 653 sub compute {
|
Line 692 sub compute {
|
while (my ($parm,$value) = each(%parameters)) { |
while (my ($parm,$value) = each(%parameters)) { |
last if ($self->blackout()); |
last if ($self->blackout()); |
next if ($parm !~ /^(parameter_.*)_problemstatus$/); |
next if ($parm !~ /^(parameter_.*)_problemstatus$/); |
if ($parameters{$1.'_answerdate'} eq '' || |
if ($parameters{$1.'_answerdate'} ne '' && |
$parameters{$1.'_answerdate'} < time) { |
$parameters{$1.'_answerdate'} < time) { |
next; |
next; |
} |
} |
Line 840 sub save_export_data {
|
Line 879 sub save_export_data {
|
} |
} |
my $key = join(':',($self->{'name'},$self->{'domain'},'assesscalc',$symb)); |
my $key = join(':',($self->{'name'},$self->{'domain'},'assesscalc',$symb)); |
my $timekey = $key.'.time'; |
my $timekey = $key.'.time'; |
my $newstore= join('___;___',@{$Exportrows{$symb}->{$self->{'filename'}}}); |
my $newstore= join('___;___', |
|
map {s/[^[:print:]]//g;$_;} # strip out unprintable |
|
@{$Exportrows{$symb}->{$self->{'filename'}}}); |
$newstore = $self->{'filename'}.'___=___'.$newstore; |
$newstore = $self->{'filename'}.'___=___'.$newstore; |
my $result = &Apache::lonnet::put |
$newExportrows{$student}->{$key} = $newstore; |
('nohist_calculatedsheets_'.$ENV{'request.course.id'}, |
$newExportrows{$student}->{$timekey} = $Exportrows{$symb}->{'time'}; |
{ $key => $newstore, |
|
$timekey => $Exportrows{$symb}->{'time'} }, |
|
$self->{'domain'}, |
|
$self->{'name'}); |
|
|
|
return; |
return; |
} |
} |
|
|