Diff for /loncom/homework/bridgetask.pm between versions 1.196 and 1.197

version 1.196, 2006/11/07 21:31:22 version 1.197, 2006/11/09 17:50:51
Line 1051  DONEBUTTON Line 1051  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') {   &mt('You needed to pass all of the [_1] mandatory components and [_2] of the [_3] optional components, of which you passed [_4].',
     $opt_count++;      $counts{'man'},$counts{'opt_req'},
     if ($status eq 'pass') {      $counts{'opt'},$counts{'opt_passed'}).
  $opt_passed++;      "</p></div>\n";
     }      
  } 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 2098  sub start_Dimension { Line 2081  sub start_Dimension {
  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'};   $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}{'depth'}=0;
Line 2230  sub end_Dimension { Line 2214  sub end_Dimension {
  }   }
  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';   my $question = ('sub' x $dimension{$dim}{'depth'}).'question';
  my $ucquestion = $question;   $question =~ s/^(.)/uc($1)/e;
  $ucquestion =~ s/^(.)/uc($1)/e;  
  if ($dim_status eq 'pass') {   if ($dim_status eq 'pass') {
     $dim_info.='<h3>'.$ucquestion.' : 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>'.$ucquestion.' : 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 2387  sub end_Dimension { Line 2351  sub end_Dimension {
     return $result;      return $result;
 }  }
   
   sub 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();

Removed from v.1.196  
changed lines
  Added in v.1.197


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