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

version 1.193, 2006/11/06 17:53:06 version 1.194, 2006/11/07 19:43:37
Line 47  BEGIN { Line 47  BEGIN {
 }  }
   
 my %dimension;  my %dimension;
   my $top = 'top';
   
 sub initialize_bridgetask {  sub initialize_bridgetask {
     # id of current Dimension, 0 means that no dimension is current       # id of current Dimension, 0 means that no dimension is current 
     # (inside <Task> only)      # (inside <Task> only)
     @Apache::bridgetask::dimension=();      @Apache::bridgetask::dimension=();
     # list of all Dimension ids seen  
     %Apache::bridgetask::top_dimensionlist=();  
     # list of all current Instance ids      # list of all current Instance ids
     %Apache::bridgetask::instance=();      %Apache::bridgetask::instance=();
     # list of all Instance ids seen in this problem      # list of all Instance ids seen in this problem
Line 682  sub start_Task { Line 682  sub start_Task {
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
   
     $result.=&preserve_grade_info();      $result.=&preserve_grade_info();
     $result.=&internal_location();      $result.=&internal_location(); 
     $result.=$form_tag_start.      $result.=$form_tag_start.
  '<input type="hidden" name="submitted" value="yes" />';   '<input type="hidden" name="submitted" value="yes" />';
     &Apache::lonxml::startredirection();      &Apache::lonxml::startredirection();
Line 697  sub start_Task { Line 697  sub start_Task {
     #$result.='<br />Review'.&show_queue('reviewqueue');      #$result.='<br />Review'.&show_queue('reviewqueue');
     #$result.='<br />Grade'.&show_queue('gradingqueue');      #$result.='<br />Grade'.&show_queue('gradingqueue');
  }   }
  # FIXME Blast! still need to reorg this, need to reshow the  
         #       queue being reviewed once done with the grade pass...  
         #       Hrrm, vaildation pass should perhaps say 'not_locked'  
         #       perhaps do a search if there is a key that is mine and if  
         #       there isn't reshow the queue....  
  my ($todo,$status_code,$msg)=&get_key_todo($target);   my ($todo,$status_code,$msg)=&get_key_todo($target);
   
  if ($todo) {   if ($todo) {
Line 786  sub start_Task { Line 782  sub start_Task {
  }   }
  if ($target eq 'webgrade') {   if ($target eq 'webgrade') {
     $result.="\n".'<div id="LC_GRADING_criterialist">';      $result.="\n".'<div id="LC_GRADING_criterialist">';
       &Apache::lonxml::startredirection();
  }   }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=$form_tag_start.   $result.=$form_tag_start.
Line 1053  DONEBUTTON Line 1050  DONEBUTTON
     $status.=&add_request_another_attempt_button();      $status.=&add_request_another_attempt_button();
  }   }
     }      }
       $status.='</div>';
     my $man_count=0;      my $man_count=0;
       my $man_passed=0;
     my $opt_count=0;      my $opt_count=0;
     my $opt_passed=0;      my $opt_passed=0;
     foreach my $dim (keys(%Apache::bridgetask::top_dimensionlist)) {      my $dim = $top;
  if ($Apache::bridgetask::top_dimensionlist{$dim}{'manadatory'}      foreach my $id (@{$dimension{$dim}{'criterias'}}) {
    my $status = &get_criteria('status',$version,$dim,$id);
    if ($dimension{$dim}{'criteria.'.$id.'.mandatory'}
     eq 'N') {      eq 'N') {
     $opt_count++;      $opt_count++;
     if ($Apache::lonhomework::history{"resource.$version.0.$dim.status"} eq 'pass') {      if ($status eq 'pass') {
  $opt_passed++;   $opt_passed++;
     }      }
  } else {   } else {
     $man_count++;      $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',      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'; }
     $status.="\n<p>".&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";  
       $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'}}) {
    my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
    if ($type eq 'dimension') {
       $result.=$dimension{$id}{'result'};
       next;
    }
    my $criteria = 
       &nested_parse(\$dimension{$dim}{'criteria.'.$id},
     [@_]);
    $status .= &layout_web_Criteria($dim,$id,$criteria);
       }
   
     my $internal_location=&internal_location();      my $internal_location=&internal_location();
     $result=~s/\Q$internal_location\E/$status/;      $result=~s/\Q$internal_location\E/$status/;
Line 1130  DONEBUTTON Line 1147  DONEBUTTON
     my $ungraded=0;      my $ungraded=0;
     my $review=0;         my $review=0;   
     &Apache::lonhomework::showhash(%Apache::lonhomework::results);      &Apache::lonhomework::showhash(%Apache::lonhomework::results);
     foreach my $dim (keys(%Apache::bridgetask::top_dimensionlist)) {      my $dim = $top;
       foreach my $id (@{$dimension{$dim}{'criterias'}}) {
    my $link=&link($id);
   
    my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
   
    if ($type eq 'criteria') {
       # dimensional 'criteria' don't get assigned grades
       $Apache::lonhomework::results{"resource.$version.0.$id.status"}=$env{'form.HWVAL_'.$link};
       $Apache::lonhomework::results{"resource.$version.0.$id.comment"}=$env{'form.HWVAL_comment_'.$link};
    } 
  my $status=   my $status=
     $Apache::lonhomework::results{"resource.$version.0.$dim.status"};      $Apache::lonhomework::results{"resource.$version.0.$id.status"};
  my $mandatory=   my $mandatory=($dimension{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');
     ($Apache::bridgetask::top_dimensionlist{$dim}{'manadatory'} 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') {
     if ($mandatory) { $mandatory_failed++; }      if ($mandatory) { $mandatory_failed++; }
  } elsif ($status eq 'ungraded') {  
     $ungraded++;  
  } elsif ($status eq 'review') {   } elsif ($status eq 'review') {
     $review++;      $review++;
    } elsif ($status eq 'ungraded') {
       $ungraded++;
  } else {   } else {
     $ungraded++;      $ungraded++;
  }   }
Line 1150  DONEBUTTON Line 1177  DONEBUTTON
     if ($optional_passed < $optional_required) {      if ($optional_passed < $optional_required) {
  $mandatory_failed++;   $mandatory_failed++;
     }      }
     &Apache::lonxml::debug("all dim ".join(':',keys(%Apache::bridgetask::top_dimensionlist))."results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");      &Apache::lonxml::debug(" task results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");
     $Apache::lonhomework::results{'resource.0.regrader'}=      $Apache::lonhomework::results{'resource.0.regrader'}=
  $env{'user.name'}.':'.$env{'user.domain'};   $env{'user.name'}.':'.$env{'user.domain'};
     if ($review) {      if ($review) {
Line 1235  DONEBUTTON Line 1262  DONEBUTTON
     &Apache::structuretags::finalize_storage();      &Apache::structuretags::finalize_storage();
  }   }
     } elsif ($target eq 'webgrade') {      } elsif ($target eq 'webgrade') {
  $result.="</div>";   $result.=&Apache::lonxml::endredirection();
    my $dim = $top;
    foreach my $id (@{$dimension{$dim}{'criterias'}} ) {
       my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
       if ($type eq 'dimension') {
    # dimensional 'criteria' don't get assigned grades
    next;
       } else {
    my $criteria =&nested_parse(\$dimension{$dim}{'criteria.'.$id},
        [@_]);
    $criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
    my $internal_location=&internal_location($id);
    $result=~s/\Q$internal_location\E/$criteria/;
       }
    }
           $result.="</div>";
  #$result.='<input type="submit" name="next" value="'.   #$result.='<input type="submit" name="next" value="'.
  #    &mt('Save &amp; Next').'" /> ';   #    &mt('Save &amp; Next').'" /> ';
  #$result.='<input type="submit" name="end" value="'.   #$result.='<input type="submit" name="end" value="'.
Line 1992  sub end_ClosingParagraph { Line 2034  sub end_ClosingParagraph {
 }  }
   
 sub get_dim_id {  sub get_dim_id {
     return $Apache::bridgetask::dimension[-1];      if (@Apache::bridgetask::dimension) {
    return $Apache::bridgetask::dimension[-1];
       } else {
    return $top;
       }
 }  }
   
 sub get_id {  sub get_id {
Line 2053  sub start_Dimension { Line 2099  sub start_Dimension {
  $dimension{$dim}{'nested'}=$previous_dim;   $dimension{$dim}{'nested'}=$previous_dim;
  &Apache::lonxml::debug("adding $dim as criteria to $previous_dim");   &Apache::lonxml::debug("adding $dim as criteria to $previous_dim");
     } else {      } else {
  $Apache::bridgetask::top_dimensionlist{$dim}{'manadatory'}=   $dimension{$top}{'criteria.'.$dim.'.type'}='dimension';
    $dimension{$top}{'criteria.'.$dim.'.mandatory'}=
     &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);      &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
    push(@{$dimension{$top}{'criterias'}},$dim);
     }      }
     push(@Apache::bridgetask::dimension,$dim);      push(@Apache::bridgetask::dimension,$dim);
     &Apache::lonxml::startredirection();      &Apache::lonxml::startredirection();
Line 2120  sub get_instance { Line 2168  sub get_instance {
 sub get_criteria {  sub get_criteria {
     my ($what,$version,$dim,$id) = @_;      my ($what,$version,$dim,$id) = @_;
     my $type = $dimension{$dim}{'criteria.'.$id.'.type'};      my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
     my $prefix = ($type eq 'criteria') ? "$dim.$id"      my $prefix = ($type eq 'criteria' && $dim ne $top) ? "$dim.$id"
                                : "$id";                                                 : "$id";
     my $entry = "resource.$version.0.$prefix.$what";      my $entry = "resource.$version.0.$prefix.$what";
     if (exists($Apache::lonhomework::results{$entry})) {      if (exists($Apache::lonhomework::results{$entry})) {
  return $Apache::lonhomework::results{$entry};   return $Apache::lonhomework::results{$entry};
Line 2129  sub get_criteria { Line 2177  sub get_criteria {
     return $Apache::lonhomework::history{$entry};      return $Apache::lonhomework::history{$entry};
 }  }
   
 {  sub link {
     my $last_link;      my ($id) = @_;
     sub link {      $id =~ s/\./_/g;
  my ($id) = @_;      return 'LC_GRADING_criteria_'.$id;
  $id =~ s/\./_/g;  }
  return 'LC_GRADING_criteria_'.$id;  sub end_Question { return &end_Dimension(@_); }
   sub end_Dimension {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $result=&Apache::lonxml::endredirection();
       my $dim=&get_id($parstack,$safeeval);
       if (&skip_dimension_parsing($dim)) {
    &disable_dimension_parsing($dim);
    pop(@Apache::bridgetask::dimension);
    return;
     }      }
     sub end_Question { return &end_Dimension(@_); }      my $instance=&get_instance($dim);
     sub end_Dimension {      my $version=&get_version();
  my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      if ($target eq 'web') {
  my $result=&Apache::lonxml::endredirection();   $result .= &nested_parse(\$dimension{$dim}{'intro'},[@_]);
  my $dim=&get_id($parstack,$safeeval);   my @instances = $instance;
  if (&skip_dimension_parsing($dim)) {   if (&Apache::response::showallfoils()) {
     &disable_dimension_parsing($dim);      @instances = @{$dimension{$dim}{'instances'}};
     pop(@Apache::bridgetask::dimension);  
     return;  
  }   }
  my $instance=&get_instance($dim);   my $shown_question_text;
  my $version=&get_version();   foreach my $instance (@instances) {
  if ($target eq 'web') {  
     $result .= &nested_parse(\$dimension{$dim}{'intro'},[@_]);  
     my @instances = $instance;  
     if (&Apache::response::showallfoils()) {  
  @instances = @{$dimension{$dim}{'instances'}};  
     }  
     my $shown_question_text;  
     foreach my $instance (@instances) {  
  $result .= &nested_parse(\$dimension{$dim}{$instance.'.text'},  
  [@_]);  
  $result .= &nested_parse(\$dimension{$dim}{'questiontext'},  
  [@_],{'set_dim_id' => undef});  
  my $task_status =   
     $Apache::lonhomework::history{"resource.$version.0.status"};  
  if ($task_status ne 'pass' && $task_status ne 'fail') {  
   
     foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},  
     @{$dimension{$dim}{'criterias'}}) {  
  my $type = $dimension{$dim}{'criteria.'.$id.'.type'};  
  &Apache::lonxml::debug("$id is $type");  
  if ($type eq 'dimension') {  
     $result.=  
  &nested_parse(\$dimension{$dim}{'criteria.'.$id},  
       [@_],{'set_dim_id' => $id});  
  }  
     }  
  } else {  
     my $dim_status=$Apache::lonhomework::history{"resource.$version.0.$dim.status"};  
     my $mandatory='Mandatory';  
     if (&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval) eq 'N') {  
  $mandatory='Optional';  
     }  
     my $dim_info="<div class='LC_$dim_status LC_question_grade'>\n";  
     if ($dim_status eq 'pass') {  
  $dim_info.='<h3>Question : you passed this '.$mandatory.' question</h3>';  
     }  
     if ($dim_status eq 'fail') {  
  $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 $internal_location=&internal_location($dim);  
     $result=~s/\Q$internal_location\E/$dim_info/;  
   
     foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},  
     @{$dimension{$dim}{'criterias'}}) {  
  my $type = $dimension{$dim}{'criteria.'.$id.'.type'};  
  if ($type eq 'dimension') {  
     $result.=$dimension{$id}{'result'};  
     next;  
  }  
     }  
  }  
     }  
  } elsif ($target eq 'webgrade') {  
     # in case of any side effects that we need  
     &nested_parse(\$dimension{$dim}{'intro'},[@_]);  
     &nested_parse(\$dimension{$dim}{$instance.'.text'},[@_]);  
     $result.=  
  &nested_parse(\$dimension{$dim}{'questiontext'},[@_],  
       {'set_dim_id'          => undef,  
        'delayed_dim_results' => 1});  
     foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},  
     @{$dimension{$dim}{'criterias'}} ) {  
  my $type = $dimension{$dim}{'criteria.'.$id.'.type'};  
  if ($type eq 'dimension') {  
     # dimensional 'criteria' don't get assigned grades  
     $result.=  
  &nested_parse(\$dimension{$dim}{'criteria.'.$id},  
       [@_],{'set_dim_id' => $id});  
     next;  
  }  
   
  my $link=&link($id);  
  my $status= &get_criteria('status',$version,$dim,$id);  
  $result.='<div class="LC_GRADING_criteria" id="'.$link.'">'."\n".  
     '<div class="LC_GRADING_criteriatext" id="next_'.$last_link.'">'."\n";  
  $result.=  
     &nested_parse(\$dimension{$dim}{'criteria.'.$id},[@_]);  
   
  $result.='</div>'."\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_fail"><input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.&mt('Fail').'</label>'."\n".  
     '<label class="LC_GRADING_pass"><input type="radio" name="HWVAL_'.$link.'" value="pass" '.($status eq 'pass' ? 'checked="checked"':'').' />'.&mt('Pass').'</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".  
     '<label class="LC_GRADING_comment">'.&mt('Additional Comment for Student')."\n".  
     '<textarea class="LC_GRADING_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode(&get_criteria('comment',$version,$dim,$id),'<>"&').'</textarea>'."\n".  
     '</label>'."\n".  
     '<ul class="LC_GRADING_navbuttons">'."\n".  
     '<li><a href="#'.$last_link.'">Prev</a></li>'."\n".  
     '<li><a href="#next_'.$link.'">Next</a></li>'."\n".  
     '</ul>'."\n".  
                     '</div>'."\n";  
  $result.=&grading_history($version,$dim,$id);  
  $last_link=$link;  
     }  
     if (&nest()) {  
  &Apache::lonxml::debug(" for $dim stashing results into ".$dimension{$dim}{'nested'});  
  $dimension{$dimension{$dim}{'nested'}}{'result'}.=$result;  
  undef($result);  
     }  
  } elsif ($target eq 'grade' && $env{'form.webgrade'}) {  
     my $optional_passed=0;  
     my $mandatory_failed=0;  
     my $ungraded=0;  
     my $review=0;  
   
     $result .= &nested_parse(\$dimension{$dim}{'intro'},[@_]);  
     $result .= &nested_parse(\$dimension{$dim}{$instance.'.text'},      $result .= &nested_parse(\$dimension{$dim}{$instance.'.text'},
      [@_]);       [@_]);
     $result .= &nested_parse(\$dimension{$dim}{'questiontext'},      $result .= &nested_parse(\$dimension{$dim}{'questiontext'},
      [@_],{'set_dim_id' => undef});       [@_],{'set_dim_id' => undef});
       my $task_status = 
     foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},   $Apache::lonhomework::history{"resource.$version.0.status"};
     @{$dimension{$dim}{'criterias'}}) {      if ($task_status ne 'pass' && $task_status ne 'fail') {
  my $link=&link($id);  
    foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
  my $type = $dimension{$dim}{'criteria.'.$id.'.type'};   @{$dimension{$dim}{'criterias'}}) {
  if ($type eq 'criteria') {      my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
     # dimensional 'criteria' don't get assigned grades      &Apache::lonxml::debug("$id is $type");
     $Apache::lonhomework::results{"resource.$version.0.$dim.$id.status"}=$env{'form.HWVAL_'.$link};      if ($type eq 'dimension') {
     $Apache::lonhomework::results{"resource.$version.0.$dim.$id.comment"}=$env{'form.HWVAL_comment_'.$link};   $result.=
  } else {      &nested_parse(\$dimension{$dim}{'criteria.'.$id},
     $result .=    [@_],{'set_dim_id' => $id});
       }
    }
       } else {
    my $dim_status=$Apache::lonhomework::history{"resource.$version.0.$dim.status"};
    my $mandatory='Mandatory';
    if (&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval) eq 'N') {
       $mandatory='Optional';
    }
    my $dim_info="<div class='LC_$dim_status LC_question_grade'>\n";
    if ($dim_status eq 'pass') {
       $dim_info.='<h3>Question : you passed this '.$mandatory.' question</h3>';
    }
    if ($dim_status eq 'fail') {
       $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>";
   
    foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
    @{$dimension{$dim}{'criterias'}}) {
       my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
       if ($type eq 'dimension') {
    $result.=$dimension{$id}{'result'};
    next;
       }
       my $criteria = 
  &nested_parse(\$dimension{$dim}{'criteria.'.$id},   &nested_parse(\$dimension{$dim}{'criteria.'.$id},
       [@_],{'set_dim_id' => $id});        [@_]);
       $dim_info .= &layout_web_Criteria($dim,$id,$criteria);
  }   }
  my $status= &get_criteria('status',$version,$dim,$id);  
   
  my $mandatory=($dimension{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');   my $internal_location=&internal_location($dim);
  if ($status eq 'pass') {   $result=~s/\Q$internal_location\E/$dim_info/;
     if (!$mandatory) { $optional_passed++; }  
  } elsif ($status eq 'fail') {  
     if ($mandatory) { $mandatory_failed++; }  
  } elsif ($status eq 'review') {  
     $review++;  
  } elsif ($status eq 'ungraded') {  
     $ungraded++;  
  } else {  
     $ungraded++;  
  }  
     }      }
     # FIXME optional required can apply to only <instance> right now...   }
     my $opt_req=$dimension{$dim}{$instance.'.optionalrequired'};      } elsif ($target eq 'webgrade') {
     if ($opt_req !~ /\S/) {   # in case of any side effects that we need
  $opt_req=   &nested_parse(\$dimension{$dim}{'intro'},[@_]);
     &Apache::lonxml::get_param('OptionalRequired',   &nested_parse(\$dimension{$dim}{$instance.'.text'},[@_]);
        $parstack,$safeeval);   $result.=
  if ($opt_req !~ /\S/) { $opt_req = 0; }      &nested_parse(\$dimension{$dim}{'questiontext'},[@_],
     {'set_dim_id'          => undef,
      'delayed_dim_results' => 0});
    foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
    @{$dimension{$dim}{'criterias'}} ) {
       my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
       if ($type eq 'dimension') {
    # dimensional 'criteria' don't get assigned grades
    $result.=
       &nested_parse(\$dimension{$dim}{'criteria.'.$id},
     [@_],{'set_dim_id' => $id});
    next;
       } else {
    my $criteria =&nested_parse(\$dimension{$dim}{'criteria.'.$id},
        [@_]);
    $criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
    my $internal_location=&internal_location($id);
    $result=~s/\Q$internal_location\E/$criteria/;
     }      }
     if ($optional_passed < $opt_req) {   }
  $mandatory_failed++;   if (&nest()) {
       &Apache::lonxml::debug(" for $dim stashing results into ".$dimension{$dim}{'nested'});
       $dimension{$dimension{$dim}{'nested'}}{'result'}.=$result;
       undef($result);
    }
       } elsif ($target eq 'grade' && $env{'form.webgrade'}) {
    my $optional_passed=0;
    my $mandatory_failed=0;
    my $ungraded=0;
    my $review=0;
   
    $result .= &nested_parse(\$dimension{$dim}{'intro'},[@_]);
    $result .= &nested_parse(\$dimension{$dim}{$instance.'.text'},
    [@_]);
    $result .= &nested_parse(\$dimension{$dim}{'questiontext'},
    [@_],{'set_dim_id' => undef});
   
    foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
    @{$dimension{$dim}{'criterias'}}) {
       my $link=&link($id);
       
       my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
       if ($type eq 'criteria') {
    # dimensional 'criteria' don't get assigned grades
    $Apache::lonhomework::results{"resource.$version.0.$dim.$id.status"}=$env{'form.HWVAL_'.$link};
    $Apache::lonhomework::results{"resource.$version.0.$dim.$id.comment"}=$env{'form.HWVAL_comment_'.$link};
       } else {
    $result .=
       &nested_parse(\$dimension{$dim}{'criteria.'.$id},
     [@_],{'set_dim_id' => $id});
     }      }
     &Apache::lonxml::debug("all instance ".join(':',@{$dimension{$dim}{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");      my $status= &get_criteria('status',$version,$dim,$id);
     if ($review) {      
  $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=      my $mandatory=($dimension{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');
     'review';      if ($status eq 'pass') {
     } elsif ($ungraded) {   if (!$mandatory) { $optional_passed++; }
  $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=      } elsif ($status eq 'fail') {
     'ungraded';   if ($mandatory) { $mandatory_failed++; }
     } elsif ($mandatory_failed) {      } elsif ($status eq 'review') {
  $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=   $review++;
     'fail';      } elsif ($status eq 'ungraded') {
    $ungraded++;
     } else {      } else {
  $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=   $ungraded++;
     'pass';  
     }      }
    }
   
    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; }
    }
    if ($optional_passed < $opt_req) {
       $mandatory_failed++;
    }
    &Apache::lonxml::debug("all instance ".join(':',@{$dimension{$dim}{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");
    if ($review) {
       $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=
    'review';
    } elsif ($ungraded) {
       $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=
    'ungraded';
    } elsif ($mandatory_failed) {
       $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=
    'fail';
  } else {   } else {
     # any other targets no output      $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=
     undef($result);   'pass';
  }   }
  &disable_dimension_parsing();      } else {
  pop(@Apache::bridgetask::dimension);   # any other targets no output
  return $result;   undef($result);
     }      }
       &disable_dimension_parsing();
       pop(@Apache::bridgetask::dimension);
       return $result;
   }
   
     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();
  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();
  if ($target eq 'web') {      if ($target eq 'web') {
     @Apache::scripttag::parser_env = @_;   @Apache::scripttag::parser_env = @_;
     $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'intro'});   $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
     my @instances = $instance;   my @instances = $instance;
     if (&Apache::response::showallfoils()) {   if (&Apache::response::showallfoils()) {
  @instances = @{$dimension{$dim}{'instances'}};      @instances = @{$dimension{$dim}{'instances'}};
     }   }
     foreach my $instance (@instances) {   foreach my $instance (@instances) {
  @Apache::scripttag::parser_env = @_;  
  $result.=&Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});  
  @Apache::scripttag::parser_env = @_;  
  $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});  
     }  
  } elsif ($target eq 'webgrade'   
  || $target eq 'grade' && $env{'form.webgrade'}) {  
     # in case of any side effects that we need  
     @Apache::scripttag::parser_env = @_;  
     &Apache::scripttag::xmlparse($dimension{$dim}{'intro'});  
     @Apache::scripttag::parser_env = @_;      @Apache::scripttag::parser_env = @_;
     &Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});      $result.=&Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});
     @Apache::scripttag::parser_env = @_;      @Apache::scripttag::parser_env = @_;
     &Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});      $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});
  } else {  
     # any other targets no output  
     undef($result);  
  }   }
  pop(@Apache::bridgetask::dimension);      } elsif ($target eq 'webgrade' 
  return $result;       || $target eq 'grade' && $env{'form.webgrade'}) {
    # in case of any side effects that we need
    @Apache::scripttag::parser_env = @_;
    &Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
    @Apache::scripttag::parser_env = @_;
    &Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});
    @Apache::scripttag::parser_env = @_;
    &Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});
       } else {
    # any other targets no output
    undef($result);
     }      }
       pop(@Apache::bridgetask::dimension);
       return $result;
 }  }
   
 sub grading_history {  sub grading_history {
Line 2394  sub grading_history { Line 2424  sub grading_history {
  return '';   return '';
     }      }
     my ($result,$grader);      my ($result,$grader);
     my $scope="resource.$version.0.$dim.$id";      my $scope="resource.$version.0.";
       $scope .= ($dim ne $top) ? "$dim.$id"
                        : "$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 2485  sub start_Criteria { Line 2517  sub start_Criteria {
     if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') {      if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') {
  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') {
       $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')) {
     my $instance_id=$Apache::bridgetask::instance{$dim}[-1];      my $instance_id=$Apache::bridgetask::instance{$dim}[-1];
Line 2499  sub start_Criteria { Line 2534  sub start_Criteria {
     $dimension{$dim}{'criteria.'.$id.'.mandatory'}=      $dimension{$dim}{'criteria.'.$id.'.mandatory'}=
  &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);   &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
     push(@{$dimension{$dim}{'criterias'}},$id);      push(@{$dimension{$dim}{'criterias'}},$id);
   
     my $version=&get_version();  
     my $task_status =   
  $Apache::lonhomework::history{"resource.$version.0.status"};  
     if ($target eq 'web'   
  && ($task_status eq 'pass' || $task_status eq 'fail')) {  
  my $status= &get_criteria('status', $version,$dim,$id);  
  my $comment=&get_criteria('comment',$version,$dim,$id);  
  my $mandatory=($dimension{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');  
  if ($mandatory) {  
     $mandatory='Mandatory';  
  } else {  
     $mandatory='Optional';  
  }  
  my $status_display=$status;  
  $status_display=~s/^([a-z])/uc($1)/e;  
  $result.=  
     '<div class="LC_'.$status.' LC_criteria"><h4>'  
     .$mandatory.' Criteria</h4><p>';  
  $result.=  
     &nested_parse(\$dimension{$dim}{'criteria.'.$id},[@_]);  
  $result.='</p><p class="LC_grade">'.$status_display.'</p>';  
  if ($comment =~ /\w/) {  
     $result.='<p class="LC_comment">'.  
  &mt('Comment: [_1]',$comment).'</p>';  
  }  
  $result.='</div>';  
     }  
  }   }
     }      }
     return $result;      return $result;
 }  }
   
   sub layout_web_Criteria {
       my ($dim,$id,$criteria) = @_;
   
       my $version = &get_version();
       my $status= &get_criteria('status', $version,$dim,$id);
       my $comment=&get_criteria('comment',$version,$dim,$id);
       my $mandatory=($dimension{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');
       if ($mandatory) {
    $mandatory='Mandatory';
       } else {
    $mandatory='Optional';
       }
       my $status_display=$status;
       $status_display=~s/^([a-z])/uc($1)/e;
       my $criteria_info.=
    '<div class="LC_'.$status.' LC_criteria"><h4>'
    .$mandatory.' Criteria</h4><p>';
       $criteria_info.= $criteria;
       $criteria_info.='</p><p class="LC_grade">'.$status_display.'</p>';
       if ($comment =~ /\w/) {
    $criteria_info.='<p class="LC_comment">'.
       &mt('Comment: [_1]',$comment).'</p>';
       }
       $criteria_info.='</div>';
       return $criteria_info;
   }
   
   sub layout_webgrade_Criteria {
       my ($dim,$id,$criteria) = @_;
       my $link=&link($id);
       my $version = &get_version();
       my $status  = &get_criteria('status',$version,$dim,$id);
       my $result = 
    '<div class="LC_GRADING_criteria">'."\n".
    '<div class="LC_GRADING_criteriatext">'."\n".
    $criteria.
    '</div>'."\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_fail">
               <input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.
       &mt('Fail').
    '</label>'."\n".
    '<label class="LC_GRADING_pass">
                <input type="radio" name="HWVAL_'.$link.'" value="pass" '.($status eq 'pass' ? 'checked="checked"':'').' />'.
        &mt('Pass').
     '</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".
     '<label class="LC_GRADING_comment">'.&mt('Additional Comment for Student')."\n".
     '<textarea class="LC_GRADING_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode(&get_criteria('comment',$version,$dim,$id),'<>"&').'</textarea>'."\n".
     '</label>'."\n".
     '</div>'."\n".
     &grading_history($version,$dim,$id);
       return $result;
   }
   
 sub end_Criteria {  sub end_Criteria {
 }  }
   

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


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