[LON-CAPA-cvs] cvs: loncom /homework bridgetask.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Tue, 07 Nov 2006 19:43:37 -0000
This is a MIME encoded message
--albertel1162928617
Content-Type: text/plain
albertel Tue Nov 7 14:43:37 2006 EDT
Modified files:
/loncom/homework bridgetask.pm
Log:
- <Criteria> can be directly inside of a <Task> now
- <Task> status is in a separate <div>
- <Criteria> all are shown at the top of the question/task
- factored out some of the <Criteria> display code for reuse
--albertel1162928617
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20061107144337.txt"
Index: loncom/homework/bridgetask.pm
diff -u loncom/homework/bridgetask.pm:1.193 loncom/homework/bridgetask.pm:1.194
--- loncom/homework/bridgetask.pm:1.193 Mon Nov 6 12:53:06 2006
+++ loncom/homework/bridgetask.pm Tue Nov 7 14:43:37 2006
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.193 2006/11/06 17:53:06 albertel Exp $
+# $Id: bridgetask.pm,v 1.194 2006/11/07 19:43:37 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -47,12 +47,12 @@
}
my %dimension;
+my $top = 'top';
+
sub initialize_bridgetask {
# id of current Dimension, 0 means that no dimension is current
# (inside <Task> only)
@Apache::bridgetask::dimension=();
- # list of all Dimension ids seen
- %Apache::bridgetask::top_dimensionlist=();
# list of all current Instance ids
%Apache::bridgetask::instance=();
# list of all Instance ids seen in this problem
@@ -682,7 +682,7 @@
} elsif ($target eq 'web') {
$result.=&preserve_grade_info();
- $result.=&internal_location();
+ $result.=&internal_location();
$result.=$form_tag_start.
'<input type="hidden" name="submitted" value="yes" />';
&Apache::lonxml::startredirection();
@@ -697,11 +697,7 @@
#$result.='<br />Review'.&show_queue('reviewqueue');
#$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);
if ($todo) {
@@ -786,6 +782,7 @@
}
if ($target eq 'webgrade') {
$result.="\n".'<div id="LC_GRADING_criterialist">';
+ &Apache::lonxml::startredirection();
}
} elsif ($target eq 'edit') {
$result.=$form_tag_start.
@@ -1053,25 +1050,45 @@
$status.=&add_request_another_attempt_button();
}
}
+ $status.='</div>';
my $man_count=0;
+ my $man_passed=0;
my $opt_count=0;
my $opt_passed=0;
- foreach my $dim (keys(%Apache::bridgetask::top_dimensionlist)) {
- if ($Apache::bridgetask::top_dimensionlist{$dim}{'manadatory'}
+ my $dim = $top;
+ foreach my $id (@{$dimension{$dim}{'criterias'}}) {
+ my $status = &get_criteria('status',$version,$dim,$id);
+ if ($dimension{$dim}{'criteria.'.$id.'.mandatory'}
eq 'N') {
$opt_count++;
- if ($Apache::lonhomework::history{"resource.$version.0.$dim.status"} eq 'pass') {
+ 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);
+ $parstack,$safeeval);
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();
$result=~s/\Q$internal_location\E/$status/;
@@ -1130,19 +1147,29 @@
my $ungraded=0;
my $review=0;
&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=
- $Apache::lonhomework::results{"resource.$version.0.$dim.status"};
- my $mandatory=
- ($Apache::bridgetask::top_dimensionlist{$dim}{'manadatory'} ne 'N');
+ $Apache::lonhomework::results{"resource.$version.0.$id.status"};
+ my $mandatory=($dimension{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');
+
if ($status eq 'pass') {
if (!$mandatory) { $optional_passed++; }
} elsif ($status eq 'fail') {
if ($mandatory) { $mandatory_failed++; }
- } elsif ($status eq 'ungraded') {
- $ungraded++;
} elsif ($status eq 'review') {
$review++;
+ } elsif ($status eq 'ungraded') {
+ $ungraded++;
} else {
$ungraded++;
}
@@ -1150,7 +1177,7 @@
if ($optional_passed < $optional_required) {
$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'}=
$env{'user.name'}.':'.$env{'user.domain'};
if ($review) {
@@ -1235,7 +1262,22 @@
&Apache::structuretags::finalize_storage();
}
} 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="'.
# &mt('Save & Next').'" /> ';
#$result.='<input type="submit" name="end" value="'.
@@ -1992,7 +2034,11 @@
}
sub get_dim_id {
- return $Apache::bridgetask::dimension[-1];
+ if (@Apache::bridgetask::dimension) {
+ return $Apache::bridgetask::dimension[-1];
+ } else {
+ return $top;
+ }
}
sub get_id {
@@ -2053,8 +2099,10 @@
$dimension{$dim}{'nested'}=$previous_dim;
&Apache::lonxml::debug("adding $dim as criteria to $previous_dim");
} 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);
+ push(@{$dimension{$top}{'criterias'}},$dim);
}
push(@Apache::bridgetask::dimension,$dim);
&Apache::lonxml::startredirection();
@@ -2120,8 +2168,8 @@
sub get_criteria {
my ($what,$version,$dim,$id) = @_;
my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
- my $prefix = ($type eq 'criteria') ? "$dim.$id"
- : "$id";
+ my $prefix = ($type eq 'criteria' && $dim ne $top) ? "$dim.$id"
+ : "$id";
my $entry = "resource.$version.0.$prefix.$what";
if (exists($Apache::lonhomework::results{$entry})) {
return $Apache::lonhomework::results{$entry};
@@ -2129,263 +2177,245 @@
return $Apache::lonhomework::history{$entry};
}
-{
- my $last_link;
- sub link {
- my ($id) = @_;
- $id =~ s/\./_/g;
- return 'LC_GRADING_criteria_'.$id;
+sub link {
+ my ($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(@_); }
- 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;
+ my $instance=&get_instance($dim);
+ my $version=&get_version();
+ if ($target eq 'web') {
+ $result .= &nested_parse(\$dimension{$dim}{'intro'},[@_]);
+ my @instances = $instance;
+ if (&Apache::response::showallfoils()) {
+ @instances = @{$dimension{$dim}{'instances'}};
}
- my $instance=&get_instance($dim);
- my $version=&get_version();
- 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'},[@_]);
+ 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});
-
- 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 .=
+ 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>";
+
+ 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},
- [@_],{'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');
- if ($status eq 'pass') {
- if (!$mandatory) { $optional_passed++; }
- } elsif ($status eq 'fail') {
- if ($mandatory) { $mandatory_failed++; }
- } elsif ($status eq 'review') {
- $review++;
- } elsif ($status eq 'ungraded') {
- $ungraded++;
- } else {
- $ungraded++;
- }
+ my $internal_location=&internal_location($dim);
+ $result=~s/\Q$internal_location\E/$dim_info/;
}
- # FIXME optional required can apply to only <instance> right now...
- 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; }
+ }
+ } 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' => 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");
- 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';
+ my $status= &get_criteria('status',$version,$dim,$id);
+
+ my $mandatory=($dimension{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');
+ if ($status eq 'pass') {
+ if (!$mandatory) { $optional_passed++; }
+ } elsif ($status eq 'fail') {
+ if ($mandatory) { $mandatory_failed++; }
+ } elsif ($status eq 'review') {
+ $review++;
+ } elsif ($status eq 'ungraded') {
+ $ungraded++;
} else {
- $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=
- 'pass';
+ $ungraded++;
}
+ }
+
+ 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 {
- # any other targets no output
- undef($result);
+ $Apache::lonhomework::results{"resource.$version.0.$dim.status"}=
+ 'pass';
}
- &disable_dimension_parsing();
- pop(@Apache::bridgetask::dimension);
- return $result;
+ } else {
+ # any other targets no output
+ undef($result);
}
+ &disable_dimension_parsing();
+ pop(@Apache::bridgetask::dimension);
+ return $result;
+}
- sub end_Setup {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- my $result=&Apache::lonxml::endredirection();
- my $dim=&get_id($parstack,$safeeval);
- my $instance=&get_instance($dim);
- my $version=&get_version();
- if ($target eq 'web') {
- @Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
- my @instances = $instance;
- if (&Apache::response::showallfoils()) {
- @instances = @{$dimension{$dim}{'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'});
+sub end_Setup {
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
+ my $result=&Apache::lonxml::endredirection();
+ my $dim=&get_id($parstack,$safeeval);
+ my $instance=&get_instance($dim);
+ my $version=&get_version();
+ if ($target eq 'web') {
+ @Apache::scripttag::parser_env = @_;
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
+ my @instances = $instance;
+ if (&Apache::response::showallfoils()) {
+ @instances = @{$dimension{$dim}{'instances'}};
+ }
+ foreach my $instance (@instances) {
@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::xmlparse($dimension{$dim}{'questiontext'});
- } else {
- # any other targets no output
- undef($result);
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});
}
- pop(@Apache::bridgetask::dimension);
- return $result;
+ } 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::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 {
@@ -2394,7 +2424,9 @@
return '';
}
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'}) {
if (exists($Apache::lonhomework::history{$t.':resource.0.regrader'})) {
my ($gname,$gdom) =
@@ -2485,6 +2517,9 @@
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') {
my $dim = &get_dim_id();
my $id=&get_id($parstack,$safeeval);
+ if ($target eq 'web' || $target eq 'webgrade') {
+ $result .= &internal_location($id);
+ }
&Apache::lonxml::debug("Criteria $id with $dim");
if (&Apache::londefdef::is_inside_of($tagstack,'Instance')) {
my $instance_id=$Apache::bridgetask::instance{$dim}[-1];
@@ -2499,39 +2534,74 @@
$dimension{$dim}{'criteria.'.$id.'.mandatory'}=
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
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;
}
+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 {
}
--albertel1162928617--