Diff for /loncom/homework/bridgetask.pm between versions 1.194 and 1.199

version 1.194, 2006/11/07 19:43:37 version 1.199, 2006/11/09 20:42:43
Line 1009  sub end_Task { Line 1009  sub end_Task {
  if (!$previous && $status ne 'SHOW_ANSWER' &&   if (!$previous && $status ne 'SHOW_ANSWER' &&
     &show_task($status,$previous)) {      &show_task($status,$previous)) {
     $result.=&Apache::inputtags::gradestatus('0');      $result.=&Apache::inputtags::gradestatus('0');
     $result.='</form>';   }
   
    $result.='</form>';
   
    if (!$previous && $status ne 'SHOW_ANSWER' &&
       &show_task($status,$previous)) {
     my $action = &Apache::lonenc::check_encrypt($env{'request.uri'});      my $action = &Apache::lonenc::check_encrypt($env{'request.uri'});
     $result.=<<DONEBUTTON;      $result.=<<DONEBUTTON;
 <form name="done" method="post" action="$action">  <form name="done" method="post" action="$action">
Line 1051  DONEBUTTON Line 1056  DONEBUTTON
  }   }
     }      }
     $status.='</div>';      $status.='</div>';
     my $man_count=0;  
     my $man_passed=0;  
     my $opt_count=0;  
     my $opt_passed=0;  
     my $dim = $top;      my $dim = $top;
     foreach my $id (@{$dimension{$dim}{'criterias'}}) {      my %counts = &get_counts($dim,undef,$parstack,
  my $status = &get_criteria('status',$version,$dim,$id);       $safeeval);
  if ($dimension{$dim}{'criteria.'.$id.'.mandatory'}      $status.="\n<div class='LC_$bt_status LC_criteria LC_task_overall_status'><p>".
     eq 'N') {   &question_status_message(\%counts,-1).
     $opt_count++;   "</p></div>\n";
     if ($status eq 'pass') {      
  $opt_passed++;  
     }  
  } else {  
     $man_count++;  
     if ($status eq 'pass') { $man_passed++; }  
  }  
     }  
     if ($man_passed eq $man_count) { $man_passed='all'; }  
   
     my $opt_req=&Apache::lonxml::get_param('OptionalRequired',  
    $parstack,$safeeval);  
     if ($opt_req !~ /\S/) { $opt_req='0'; }  
   
     $status.="\n<div class='LC_$bt_status LC_criteria LC_task_overall_status'>".&mt('You needed to pass all of the [_1] mandatory components and [_2] of the [_3] optional components, of which you passed [_4].',$man_count,$opt_req,$opt_count,$opt_passed)."</p></div>\n";  
   
   
     foreach my $id (@{$dimension{$dim}{'criterias'}}) {      foreach my $id (@{$dimension{$dim}{'criterias'}}) {
  my $type = $dimension{$dim}{'criteria.'.$id.'.type'};   my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
Line 2097  sub start_Dimension { Line 2083  sub start_Dimension {
     &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);      &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
  push(@{$dimension{$previous_dim}{'criterias'}},$dim);   push(@{$dimension{$previous_dim}{'criterias'}},$dim);
  $dimension{$dim}{'nested'}=$previous_dim;   $dimension{$dim}{'nested'}=$previous_dim;
    $dimension{$dim}{'depth'} = 1 + $dimension{$previous_dim}{'depth'};
   
  &Apache::lonxml::debug("adding $dim as criteria to $previous_dim");   &Apache::lonxml::debug("adding $dim as criteria to $previous_dim");
     } else {      } else {
    $dimension{$top}{'depth'}=0;
  $dimension{$top}{'criteria.'.$dim.'.type'}='dimension';   $dimension{$top}{'criteria.'.$dim.'.type'}='dimension';
  $dimension{$top}{'criteria.'.$dim.'.mandatory'}=   $dimension{$top}{'criteria.'.$dim.'.mandatory'}=
     &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);      &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
Line 2227  sub end_Dimension { Line 2216  sub end_Dimension {
     $mandatory='Optional';      $mandatory='Optional';
  }   }
  my $dim_info="<div class='LC_$dim_status LC_question_grade'>\n";   my $dim_info="<div class='LC_$dim_status LC_question_grade'>\n";
    my $question = ('sub' x $dimension{$dim}{'depth'}).'question';
    $question =~ s/^(.)/uc($1)/e;
  if ($dim_status eq 'pass') {   if ($dim_status eq 'pass') {
     $dim_info.='<h3>Question : you passed this '.$mandatory.' question</h3>';      $dim_info.='<h3>'.$question.' : you passed this '.$mandatory.' question</h3>';
  }   }
  if ($dim_status eq 'fail') {   if ($dim_status eq 'fail') {
     $dim_info.='<h3>Question : you did not pass this '.$mandatory.' question</h3>';      $dim_info.='<h3>'.$question.' : you did not pass this '.$mandatory.' question</h3>';
  }  
  my $man_count=0;  
  my $man_passed=0;  
  my $opt_count=0;  
  my $opt_passed=0;  
  foreach my $id ( @{$dimension{$dim}{$instance.'.criterias'}},  
  @{$dimension{$dim}{'criterias'}} ) {  
     my $status = &get_criteria('status',$version,$dim,$id);  
     if ($dimension{$dim}{'criteria.'.$id.'.mandatory'}   
  eq 'N') {  
  $opt_count++;  
  if ($status eq 'pass') { $opt_passed++; }  
     } else {  
  $man_count++;  
  if ($status eq 'pass') { $man_passed++; }  
     }  
  }  
  if ($man_passed eq $man_count) { $man_passed='all'; }  
   
  my $opt_req=$dimension{$dim}{$instance.'.optionalrequired'};  
  if ($opt_req !~ /\S/) {  
     $opt_req=  
  &Apache::lonxml::get_param('OptionalRequired',  
    $parstack,$safeeval);  
     if ($opt_req !~ /\S/) { $opt_req = 0; }  
  }   }
  $dim_info.="\n<p>".&mt('You passed [_1] of the [_2] mandatory components and [_3] of the [_4] optional components, of which you were required to pass [_5].',$man_passed,$man_count,$opt_passed,$opt_count,$opt_req)."</p>\n</div>";   my %counts = &get_counts($dim,$instance,$parstack,
    $safeeval);
   
    $dim_info.="\n<p>"
       .&question_status_message(\%counts,
         $dimension{$dim}{'depth'})
       ."</p>\n</div>";
   
  foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},   foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
  @{$dimension{$dim}{'criterias'}}) {   @{$dimension{$dim}{'criterias'}}) {
Line 2284  sub end_Dimension { Line 2256  sub end_Dimension {
  $result.=   $result.=
     &nested_parse(\$dimension{$dim}{'questiontext'},[@_],      &nested_parse(\$dimension{$dim}{'questiontext'},[@_],
   {'set_dim_id'          => undef,    {'set_dim_id'          => undef,
    'delayed_dim_results' => 0});     'delayed_dim_results' => 1});
  foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},   foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
  @{$dimension{$dim}{'criterias'}} ) {   @{$dimension{$dim}{'criterias'}} ) {
     my $type = $dimension{$dim}{'criteria.'.$id.'.type'};      my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
Line 2382  sub end_Dimension { Line 2354  sub end_Dimension {
     return $result;      return $result;
 }  }
   
   sub question_status_message {
       my ($counts,$depth) = @_;
       my %req  = ('man' => 'mandatory',
    'opt' => 'optional',);
       my %type = ('cri' => 'criteria',
    'dim' => ('sub'x($depth+1)).'questions',);
       my @sections;
       foreach my $req ('man','opt') {
    foreach my $type ('cri','dim') {
       if ($counts->{$req.'_'.$type}) {
    push(@sections,
        $counts->{$req.'_'.$type.'_passed'}.' of '.
        $counts->{$req.'_'.$type}.' '.
        $req{$req}.' '.$type{$type});
       }
    }
       }
   
       my $status = 'You passed ';
       if (@sections == -1) {
       } elsif (@sections == 1) {
    $status .= $sections[0];
       } elsif (@sections == 2) {
    $status .= $sections[0].' and '.$sections[1];
       } else {
    my $last = pop(@sections);
    $status .= join(', ',@sections).', and '.$last;
       }
       $status .= '.';
       if ($counts->{'opt'}) {
    $status .= ' You were required to pass '.$counts->{'opt_req'}.
       ' optional component'.($counts->{'opt_req'} == 1?'':'s');
       }
       return $status;
   }
   
   sub get_counts {
       my ($dim,$instance,$parstack,$safeeval) = @_;
       my %counts;
       my @possible = ('man_cri','man_dim',
       'opt_cri','opt_dim',
       'man_cri_passed', 'man_dim_passed',
       'opt_cri_passed', 'opt_dim_passed',
       'man_passed',
       'opt_passed',
       'opt_req');
       foreach my $which (@possible) { $counts{$which} = 0; }
   
       my $version = &get_version();
   
       foreach my $id ( @{$dimension{$dim}{$instance.'.criterias'}},
        @{$dimension{$dim}{'criterias'}} ) {
    my $status = &get_criteria('status',$version,$dim,$id);
    my $which;
    if ($dimension{$dim}{'criteria.'.$id.'.mandatory'} 
       eq 'N') {
       $which = 'opt';
    } else {
       $which = 'man';
    }
    $counts{$which}++;
    if ($status eq 'pass') { $counts{$which.'_passed'}++; }
    if ($dimension{$dim}{'criteria.'.$id.'.type'}
       eq 'dimension') {
       $which .= '_dim';
    } else {
       $which .= '_cri';
    }
    $counts{$which}++;
    if ($status eq 'pass') { $counts{$which.'_passed'}++; }
   
   
       }
       if ($counts{'man_dim_passed'} eq $counts{'man_dim'}) {
    $counts{'man_dim_passed'}='all';
       }
       if ($counts{'man_cri_passed'} eq $counts{'man_cri'}) {
    $counts{'man_cri_passed'}='all';
       }
       
       $counts{'opt_req'}=$dimension{$dim}{$instance.'.optionalrequired'};
       if ($counts{'opt_req'} !~ /\S/) {
    $counts{'opt_req'}= &Apache::lonxml::get_param('OptionalRequired',
          $parstack,$safeeval);
    if ($counts{'opt_req'} !~ /\S/) { $counts{'opt_req'} = 0; }
       }
       return %counts;
   }
   
 sub end_Setup {  sub end_Setup {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result=&Apache::lonxml::endredirection();      my $result=&Apache::lonxml::endredirection();
Line 2518  sub start_Criteria { Line 2579  sub start_Criteria {
  my $dim = &get_dim_id();   my $dim = &get_dim_id();
  my $id=&get_id($parstack,$safeeval);   my $id=&get_id($parstack,$safeeval);
  if ($target eq 'web' || $target eq 'webgrade') {   if ($target eq 'web' || $target eq 'webgrade') {
     $result .= &internal_location($id);      if ($target eq 'webgrade' && $dim ne 'top') {
    &Apache::lonxml::debug(" for $dim $id stashing results into $dim ");
    $dimension{$dim}{'result'} .= &internal_location($id);
       } else {
    &Apache::lonxml::debug(" not stashing $dim $id");
    $result .= &internal_location($id);
       }
  }   }
  &Apache::lonxml::debug("Criteria $id with $dim");   &Apache::lonxml::debug("Criteria $id with $dim");
  if (&Apache::londefdef::is_inside_of($tagstack,'Instance')) {   if (&Apache::londefdef::is_inside_of($tagstack,'Instance')) {

Removed from v.1.194  
changed lines
  Added in v.1.199


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