Diff for /loncom/homework/bridgetask.pm between versions 1.150 and 1.151

version 1.150, 2006/05/12 06:55:46 version 1.151, 2006/05/16 06:43:42
Line 40  use Apache::slotrequest(); Line 40  use Apache::slotrequest();
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Instance','InstanceText','Criteria','ClosingParagraph'));      &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Question','Instance','InstanceText','Criteria','ClosingParagraph'));
 }  }
   
 sub initialize_bridgetask {  sub initialize_bridgetask {
Line 878  DONEBUTTON Line 878  DONEBUTTON
     $man_count++;      $man_count++;
  }   }
     }      }
       
     my $opt_req=&Apache::lonxml::get_param('OptionalRequired',      my $opt_req=&Apache::lonxml::get_param('OptionalRequired',
  $parstack,$safeeval);   $parstack,$safeeval);
     if ($opt_req !~ /\S/) { $opt_req='0'; }      if ($opt_req !~ /\S/) { $opt_req='0'; }
Line 1709  sub get_id { Line 1710  sub get_id {
 }  }
   
 my %dimension;  my %dimension;
   sub start_Question { return &start_Dimension(@_); }
 sub start_Dimension {  sub start_Dimension {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     undef(%dimension);      undef(%dimension);
Line 1764  sub get_instance { Line 1766  sub get_instance {
 {  {
     my $last_link;      my $last_link;
     sub link {      sub link {
  my ($instance,$id) = @_;   my ($id) = @_;
  return 'LC_GRADING_criteria_'.$instance.'_'.$id;   $id =~ s/\./_/g;
    return 'LC_GRADING_criteria_'.$id;
     }      }
       sub end_Question { return &end_Dimension(@_); }
     sub end_Dimension {      sub end_Dimension {
  my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
  my $result=&Apache::lonxml::endredirection();   my $result=&Apache::lonxml::endredirection();
  my $dim=&get_id($parstack,$safeeval);   my $dim=&get_id($parstack,$safeeval);
  my $instance=&get_instance($dim);   my $instance=&get_instance($dim);
  my $version=&get_version();   my $version=&get_version();
       use Data::Dumper;
       &Apache::lonxml::debug(Dumper(\%dimension));
  if ($target eq 'web') {   if ($target eq 'web') {
     @Apache::scripttag::parser_env = @_;      @Apache::scripttag::parser_env = @_;
     $result.=&Apache::scripttag::xmlparse($dimension{'intro'});      $result.=&Apache::scripttag::xmlparse($dimension{'intro'});
Line 1802  sub get_instance { Line 1808  sub get_instance {
     my $man_passed=0;      my $man_passed=0;
     my $opt_count=0;      my $opt_count=0;
     my $opt_passed=0;      my $opt_passed=0;
     foreach my $id (@{$dimension{$instance.'.criterias'}}) {      foreach my $id ( @{$dimension{$instance.'.criterias'}},
  if ($dimension{$instance.'.criteria.'.$id.'.mandatory'}        @{$dimension{'criterias'}} ) {
    if ($dimension{'criteria.'.$id.'.mandatory'} 
     eq 'N') {      eq 'N') {
     $opt_count++;      $opt_count++;
     if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"} eq 'pass') {      if ($Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"} eq 'pass') {
  $opt_passed++;   $opt_passed++;
     }      }
  } else {   } else {
Line 1817  sub get_instance { Line 1824  sub get_instance {
  }   }
     }      }
     if ($man_passed eq $man_count) { $man_passed='all'; }      if ($man_passed eq $man_count) { $man_passed='all'; }
   
     my $opt_req=$dimension{$instance.'.optionalrequired'};      my $opt_req=$dimension{$instance.'.optionalrequired'};
     if ($opt_req !~ /\S/) { $opt_req='0'; }      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>";      $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 $internal_location=&internal_location($dim);      my $internal_location=&internal_location($dim);
     $result=~s/\Q$internal_location\E/$dim_info/;      $result=~s/\Q$internal_location\E/$dim_info/;
   
     foreach my $id (@{$dimension{$instance.'.criterias'}}) {      foreach my $id (@{$dimension{$instance.'.criterias'}},
  my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"};      @{$dimension{'criterias'}}) {
  my $comment=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"};   my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"};
  my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');   my $comment=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"};
    my $mandatory=($dimension{'criteria.'.$id.'.mandatory'} ne 'N');
  if ($mandatory) {   if ($mandatory) {
     $mandatory='Mandatory';      $mandatory='Mandatory';
  } else {   } else {
Line 1840  sub get_instance { Line 1854  sub get_instance {
  }   }
  my $status_display=$status;   my $status_display=$status;
  $status_display=~s/^([a-z])/uc($1)/e;   $status_display=~s/^([a-z])/uc($1)/e;
  @Apache::scripttag::parser_env = @_;  
  $result.=   $result.=
     '<div class="LC_'.$status.' LC_criteria"><h4>'      '<div class="LC_'.$status.' LC_criteria"><h4>'
     .$mandatory.' Criteria</h4><p>';      .$mandatory.' Criteria</h4><p>';
  @Apache::scripttag::parser_env = @_;   @Apache::scripttag::parser_env = @_;
  $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id});   $result.=&Apache::scripttag::xmlparse($dimension{'criteria.'.$id});
  $result.='</p><p class="LC_grade">'.$status_display.'</p>';   $result.='</p><p class="LC_grade">'.$status_display.'</p>';
  if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}) {   if ($Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}) {
     $result.='<p class="LC_comment">'.&mt('Comment: [_1]',$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).'</p>';      $result.='<p class="LC_comment">'.&mt('Comment: [_1]',$Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}).'</p>';
  }   }
  $result.='</div>';   $result.='</div>';
     }      }
Line 1860  sub get_instance { Line 1873  sub get_instance {
     &Apache::scripttag::xmlparse($dimension{'intro'});      &Apache::scripttag::xmlparse($dimension{'intro'});
     @Apache::scripttag::parser_env = @_;      @Apache::scripttag::parser_env = @_;
     &Apache::scripttag::xmlparse($dimension{$instance.'.text'});      &Apache::scripttag::xmlparse($dimension{$instance.'.text'});
     foreach my $id (@{$dimension{$instance.'.criterias'}}) {      foreach my $id (@{$dimension{$instance.'.criterias'}},
  my $link=&link($instance,$id);      @{$dimension{'criterias'}} ) {
  my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"};   my $link=&link($id);
    my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"};
  $result.='<div class="LC_GRADING_criteria" id="'.$link.'">'."\n".   $result.='<div class="LC_GRADING_criteria" id="'.$link.'">'."\n".
     '<div class="LC_GRADING_criteriatext" id="next_'.$last_link.'">'."\n";      '<div class="LC_GRADING_criteriatext" id="next_'.$last_link.'">'."\n";
  @Apache::scripttag::parser_env = @_;   @Apache::scripttag::parser_env = @_;
  $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id});   $result.=&Apache::scripttag::xmlparse($dimension{'criteria.'.$id});
  $result.='</div>'."\n".   $result.='</div>'."\n".
     #$dimension{$instance.'.criteria.'.$id}.      #$dimension{'criteria.'.$id}.
     '<div class="LC_GRADING_grade">'."\n".      '<div class="LC_GRADING_grade">'."\n".
     '<label class="LC_GRADING_ungraded"><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label>'."\n".      '<label class="LC_GRADING_ungraded"><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label>'."\n".
     '<label class="LC_GRADING_fail"><input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.&mt('Fail').'</label>'."\n".      '<label class="LC_GRADING_fail"><input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.&mt('Fail').'</label>'."\n".
Line 1876  sub get_instance { Line 1890  sub get_instance {
     '<label class="LC_GRADING_review"><input type="radio" name="HWVAL_'.$link.'" value="review" '.($status eq 'review' ? 'checked="checked"':'').' />'.&mt('Review').'</label>'."\n".      '<label class="LC_GRADING_review"><input type="radio" name="HWVAL_'.$link.'" value="review" '.($status eq 'review' ? 'checked="checked"':'').' />'.&mt('Review').'</label>'."\n".
     '</div>'."\n".      '</div>'."\n".
     '<label class="LC_GRADING_comment">'.&mt('Additional Comment for Student')."\n".      '<label class="LC_GRADING_comment">'.&mt('Additional Comment for Student')."\n".
     '<textarea class="LC_GRADING_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).'</textarea>'."\n".      '<textarea class="LC_GRADING_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}).'</textarea>'."\n".
     '</label>'."\n".      '</label>'."\n".
     '<ul class="LC_GRADING_navbuttons">'."\n".      '<ul class="LC_GRADING_navbuttons">'."\n".
     '<li><a href="#'.$last_link.'">Prev</a></li>'."\n".      '<li><a href="#'.$last_link.'">Prev</a></li>'."\n".
     '<li><a href="#next_'.$link.'">Next</a></li>'."\n".      '<li><a href="#next_'.$link.'">Next</a></li>'."\n".
     '</ul>'."\n".      '</ul>'."\n".
                     '</div>'."\n";                      '</div>'."\n";
  $result.=&grading_history($version,$dim,$instance,$id);   $result.=&grading_history($version,$dim,$id);
  $last_link=$link;   $last_link=$link;
     }      }
  } elsif ($target eq 'grade' && $env{'form.webgrade'}) {   } elsif ($target eq 'grade' && $env{'form.webgrade'}) {
Line 1891  sub get_instance { Line 1905  sub get_instance {
     my $mandatory_failed=0;      my $mandatory_failed=0;
     my $ungraded=0;      my $ungraded=0;
     my $review=0;      my $review=0;
     foreach my $id (@{$dimension{$instance.'.criterias'}}) {      foreach my $id (@{$dimension{$instance.'.criterias'}},
  my $link=&link($instance,$id);      @{$dimension{'criterias'}}) {
  my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.status"}=$env{'form.HWVAL_'.$link};   my $link=&link($id);
  $Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.comment"}=$env{'form.HWVAL_comment_'.$link};   my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$id.status"}=$env{'form.HWVAL_'.$link};
  my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');   $Apache::lonhomework::results{"resource.$version.0.$dim.$id.comment"}=$env{'form.HWVAL_comment_'.$link};
    my $mandatory=($dimension{'criteria.'.$id.'.mandatory'} ne 'N');
  if ($status eq 'pass') {   if ($status eq 'pass') {
     if (!$mandatory) { $optional_passed++; }      if (!$mandatory) { $optional_passed++; }
  } elsif ($status eq 'fail') {   } elsif ($status eq 'fail') {
Line 1908  sub get_instance { Line 1923  sub get_instance {
     $ungraded++;      $ungraded++;
  }   }
     }      }
     if ($optional_passed < $dimension{$instance.'.optionalrequired'}) {      # FIXME optional required can apply to only <instance> right now...
       my $opt_req=$dimension{$instance.'.optionalrequired'};
       if ($opt_req !~ /\S/) {
    $opt_req=
       &Apache::lonxml::get_param('OptionalRequired',
          $parstack,$safeeval);
    if ($opt_req !~ /\S/) { $opt_req = 0; }
       }
       if ($optional_passed < $opt_req) {
  $mandatory_failed++;   $mandatory_failed++;
     }      }
     &Apache::lonxml::debug("all instance ".join(':',@{$dimension{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");      &Apache::lonxml::debug("all instance ".join(':',@{$dimension{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");
Line 1934  sub get_instance { Line 1957  sub get_instance {
 }  }
   
 sub grading_history {  sub grading_history {
     my ($version,$dim,$instance,$criteria) = @_;      my ($version,$dim,$id) = @_;
     if (!&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) {      if (!&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) {
  return '';   return '';
     }      }
     my ($result,$grader);      my ($result,$grader);
     my $scope="resource.$version.0.$dim.$instance.$criteria";      my $scope="resource.$version.0.$dim.$id";
     foreach my $t (1..$Apache::lonhomework::history{'version'}) {      foreach my $t (1..$Apache::lonhomework::history{'version'}) {
  if (exists($Apache::lonhomework::history{$t.':resource.0.regrader'})) {   if (exists($Apache::lonhomework::history{$t.':resource.0.regrader'})) {
     my ($gname,$gdom) =       my ($gname,$gdom) = 
Line 1969  sub start_IntroParagraph { Line 1992  sub start_IntroParagraph {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;      my $result;
     if ($target eq 'web' || $target eq 'webgrade') {      if ($target eq 'web' || $target eq 'webgrade') {
  if ($tagstack->[-2] eq 'Dimension') {   if ($tagstack->[-2] eq 'Dimension' || $tagstack->[-2] eq 'Question' ) {
     $dimension{'intro'}=&Apache::lonxml::get_all_text('/introparagraph',$parser,$style);      $dimension{'intro'}=
    &Apache::lonxml::get_all_text('/introparagraph',
  } elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') {        $parser,$style);
           } elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') {
     &Apache::lonxml::startredirection();      &Apache::lonxml::startredirection();
  }   }
   
Line 2021  sub end_InstanceText { Line 2045  sub end_InstanceText {
   
 sub start_Criteria {  sub start_Criteria {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $instance_id=$Apache::bridgetask::instance[-1];  
     my $criteria=&Apache::lonxml::get_all_text('/criteria',$parser,$style);      my $criteria=&Apache::lonxml::get_all_text('/criteria',$parser,$style);
     if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') {      if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') {
  my $id=&get_id($parstack,$safeeval);   my $id=&get_id($parstack,$safeeval);
  $dimension{$instance_id.'.criteria.'.$id}=$criteria;   if (&Apache::londefdef::is_inside_of($tagstack,'Instance')) {
  $dimension{$instance_id.'.criteria.'.$id.'.mandatory'}=      my $instance_id=$Apache::bridgetask::instance[-1];
     &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);      $dimension{"criteria.$instance_id.$id"}=$criteria;
  push(@{$dimension{$instance_id.'.criterias'}},$id);      $dimension{"criteria.$instance_id.$id.mandatory"}=
    &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
       push(@{$dimension{$instance_id.'.criterias'}},"$instance_id.$id");
    } else {
       $dimension{'criteria.'.$id}=$criteria;
       $dimension{'criteria.'.$id.'.mandatory'}=
    &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
       push(@{$dimension{'criterias'}},$id);
    }
     }      }
     return '';      return '';
 }  }

Removed from v.1.150  
changed lines
  Added in v.1.151


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