--- loncom/interface/statistics/lonproblemanalysis.pm 2002/07/30 21:31:48 1.2 +++ loncom/interface/statistics/lonproblemanalysis.pm 2002/08/05 20:53:38 1.4 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: lonproblemanalysis.pm,v 1.2 2002/07/30 21:31:48 stredwic Exp $ +# $Id: lonproblemanalysis.pm,v 1.4 2002/08/05 20:53:38 stredwic Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,52 +41,63 @@ use strict; use Apache::lonnet(); use GDBM_File; -my $jr; +#my $jr; sub BuildProblemAnalysisPage { - my ($cacheDB)=@_; + my ($cacheDB, $r)=@_; my %cache; - my $Str = ''; - unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { - $Str .= 'Unable to tie database.'; - return $Str; + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { + $r->print('Unable to tie database.'); + return; } - $Str .= &IntervalOptions($cache{'Interval'}); - $Str .= &OptionResponseTable($cache{'OptionResponses'}, \%cache); + $r->print(&IntervalOptions($cache{'Interval'})); + $r->rflush(); + $r->print(&OptionResponseTable($cache{'OptionResponses'}, \%cache)); untie(%cache); - return $Str; + return; } sub BuildAnalyzePage { my ($cacheDB, $students, $courseID,$r)=@_; - $jr = $r; +# $jr = $r; my $c = $r->connection; my $Str = ''; my %cache; + &Create_PrgWin($r); + my $count=0; foreach (@$students) { + &Update_PrgWin(scalar(@$students),$count,$_,$r); if($c->aborted) { return $Str; } - my $courseData = - &Apache::loncoursedata::DownloadCourseInformation($_, - $courseID); - if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) { - &Apache::loncoursedata::ProcessStudentData(\%cache, - $courseData, $_); + my $downloadTime=''; + if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { + $downloadTime = $cache{$_.':lastDownloadTime'}; untie(%cache); - } else { - last if($c->aborted()); - next; } + if($downloadTime eq 'Not downloaded') { + my $courseData = + &Apache::loncoursedata::DownloadCourseInformation($_, + $courseID); + if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { + &Apache::loncoursedata::ProcessStudentData(\%cache, + $courseData, $_); + untie(%cache); + } else { + next; + } + } + $count++; } + &Close_PrgWin($r); - unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { $Str .= 'Unable to tie database.'; return $Str; } @@ -108,17 +119,22 @@ sub BuildAnalyzePage { return $Str; } + if($c->aborted()) { untie(%cache); return $Str; } + #compute the intervals &Interval($part, $problem, $interval, $analyzeData->{'concepts'}, \%ConceptData); $title =~ s/\ /"_"/eg; $Str .= '
'.$uri.''; + + if($c->aborted()) { untie(%cache); return $Str; } #Java script Progress window # &Create_PrgWin(); # &Update_PrgWin("Starting-to-analyze-problem"); for(my $index=0; $index<(scalar @$students); $index++) { + if($c->aborted()) { untie(%cache); return $Str; } # &Update_PrgWin($index); # &OpStatus($problem, $students->[$index], $courseID, \%ConceptData, # $analyzeData->{'foil_to_concept'}, $analyzeData, \%cache); @@ -129,10 +145,12 @@ sub BuildAnalyzePage { $Str .= '
'; for (my $k=0; $k<$interval; $k++ ) { + if($c->aborted()) { untie(%cache); return $Str; } $Str .= &DrawGraph($k, $title, $analyzeData->{'concepts'}, \%ConceptData); } for (my $k=0; $k<$interval; $k++ ) { + if($c->aborted()) { untie(%cache); return $Str; } $Str .= &DrawTable($k, $analyzeData->{'concepts'}, \%ConceptData); } my $Answ=&Apache::lonnet::ssi($uri); @@ -212,6 +230,41 @@ sub OptionResponseTable { return $Str; } +# Create progress +sub Create_PrgWin { + my ($r)=@_; + $r->print(< + popwin=open('','popwin','width=400,height=100'); + popwin.document.writeln(''+ + 'LON-CAPA Statistics'+ + '

Computation Progress

'+ + '
'+ + '
'+ + ''); + popwin.document.close(); + +ENDPOP + + $r->rflush(); +} + +# update progress +sub Update_PrgWin { + my ($totalStudents,$index,$name,$r)=@_; + $r->print(''); + $r->rflush(); +} + +# close Progress Line +sub Close_PrgWin { + my ($r)=@_; + $r->print(''); + $r->rflush(); +} + #---- END Problem Analysis Web Page ------------------------------------------ #---- Analyze Web Page -------------------------------------------------------