--- loncom/interface/statistics/lonstathelpers.pm 2004/03/16 16:30:31 1.8 +++ loncom/interface/statistics/lonstathelpers.pm 2004/04/01 22:13:39 1.11 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonstathelpers.pm,v 1.8 2004/03/16 16:30:31 matthew Exp $ +# $Id: lonstathelpers.pm,v 1.11 2004/04/01 22:13:39 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -345,6 +345,60 @@ sub get_prev_curr_next { =pod +=item GetStudentAnswers($r,$problem,$Students) + +Determines the correct answer for a set of students on a given problem. +The students answers are stored in the student hashes pointed to by the +array @$Students under the key 'answer'. + +Inputs: $r +$problem: hash reference containing the keys 'resource', 'part', and 'respid'. +$Students: reference to array containing student hashes (need 'username', + 'domain'). + +Returns: nothing + +=cut + +##################################################### +##################################################### +sub GetStudentAnswers { + my ($r,$problem,$Students) = @_; + my $c = $r->connection(); + my %Answers; + my ($resource,$partid,$respid) = ($problem->{'resource'}, + $problem->{'part'}, + $problem->{'respid'}); + # Read in the cache (if it exists) before we start timing things. + &Apache::lonstathelpers::ensure_proper_cache($resource->{'symb'}); + # Open progress window + my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin + ($r,'Student Answer Compilation Status', + 'Student Answer Compilation Progress', scalar(@$Students)); + $r->rflush(); + foreach my $student (@$Students) { + last if ($c->aborted()); + my $sname = $student->{'username'}; + my $sdom = $student->{'domain'}; + my $answer = &Apache::lonstathelpers::analyze_problem_as_student + ($resource,$sname,$sdom,$partid,$respid); + &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, + &mt('last student')); + $student->{'answer'} = $answer; + } + &Apache::lonstathelpers::write_answer_cache(); + return if ($c->aborted()); + $r->rflush(); + # close progress window + &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); + return; +} + +##################################################### +##################################################### + +=pod + =item analyze_problem_as_student Analyzes a homework problem for a student and returns the correct answer @@ -424,11 +478,11 @@ sub get_answer { } foreach my $foil (@{$Answer{$prefix.'.shown'}}) { if (ref($values{$foil}) eq 'ARRAY') { - $returnvalue.=&HTML::Entities::encode($foil).'='. - join(',',map {&HTML::Entities::encode($_)} @{$values{$foil}}).'&'; + $returnvalue.=&HTML::Entities::encode($foil,'<>&"').'='. + join(',',map {&HTML::Entities::encode($_,'<>&"')} @{$values{$foil}}).'&'; } else { - $returnvalue.=&HTML::Entities::encode($foil).'='. - &HTML::Entities::encode($values{$foil}).'&'; + $returnvalue.=&HTML::Entities::encode($foil,'<>&"').'='. + &HTML::Entities::encode($values{$foil},'<>&"').'&'; } } $returnvalue =~ s/ /\%20/g; @@ -947,6 +1001,43 @@ sub get_time_limits { return ($starttime,$endtime); } + + +#################################################### +#################################################### + +=pod + +=item sections_description + +Inputs: @Sections, an array of sections + +Returns: A text description of the sections selected. + +=cut + +#################################################### +#################################################### +sub sections_description { + my @Sections = @_; + my $sectionstring = ''; + if (scalar(@Sections) > 1) { + if (scalar(@Sections) > 2) { + my $last = pop(@Sections); + $sectionstring = "Sections ".join(', ',@Sections).', and '.$last; + } else { + $sectionstring = "Sections ".join(' and ',@Sections); + } + } else { + if ($Sections[0] eq 'all') { + $sectionstring = "All sections"; + } else { + $sectionstring = "Section ".$Sections[0]; + } + } + return $sectionstring; +} + #################################################### ####################################################