[LON-CAPA-cvs] cvs: loncom /homework bridgetask.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Tue, 13 Jun 2006 20:28:49 -0000
This is a MIME encoded message
--albertel1150230529
Content-Type: text/plain
albertel Tue Jun 13 16:28:49 2006 EDT
Modified files:
/loncom/homework bridgetask.pm
Log:
- nested <Dimension>s almost working, placement of output is not yet correct
--albertel1150230529
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20060613162849.txt"
Index: loncom/homework/bridgetask.pm
diff -u loncom/homework/bridgetask.pm:1.168 loncom/homework/bridgetask.pm:1.169
--- loncom/homework/bridgetask.pm:1.168 Tue Jun 13 11:45:54 2006
+++ loncom/homework/bridgetask.pm Tue Jun 13 16:28:49 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.168 2006/06/13 15:45:54 albertel Exp $
+# $Id: bridgetask.pm,v 1.169 2006/06/13 20:28:49 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -46,7 +46,7 @@
&Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Question','QuestionText','Setup','Instance','InstanceText','Criteria','ClosingParagraph'));
}
-my %dimension_info;
+my %dimension;
sub initialize_bridgetask {
# id of current Dimension, 0 means that no dimension is current
# (inside <Task> only)
@@ -59,7 +59,7 @@
@Apache::bridgetask::instancelist=();
# key of queud user data that we are currently grading
$Apache::bridgetask::queue_key='';
- undef(%dimension_info);
+ undef(%dimension);
}
sub proctor_check_auth {
@@ -1917,6 +1917,11 @@
push(@{$Apache::bridgetask::dimension{$previous_dim}{'contains'}},
$dim);
# FIXME need to add as a 'criteria' for nesting
+ $dimension{$previous_dim}{'criteria.'.$dim}='';
+ $dimension{$previous_dim}{'criteria.'.$dim.'.type'}='dimension';
+ $dimension{$previous_dim}{'criteria.'.$dim.'.mandatory'}=
+ &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
+ push(@{$dimension{$previous_dim}{'criterias'}},$dim);
} else {
$Apache::bridgetask::top_dimensionlist{$dim}{'manadatory'}=
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
@@ -1931,7 +1936,7 @@
my $dim = &get_dim_id();
my $text=&Apache::lonxml::get_all_text('/questiontext',$parser,$style);
if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') {
- $dimension_info{$dim}{'questiontext'}=$text;
+ $dimension{$dim}{'questiontext'}=$text;
}
return '';
}
@@ -1947,7 +1952,7 @@
$rand_alg eq '64bit2' || $rand_alg eq '64bit3' ||
$rand_alg eq '64bit4' ) {
&Apache::response::pushrandomnumber();
- my @order=&Math::Random::random_permutation(@{$dimension_info{$dim}{'instances'}});
+ my @order=&Math::Random::random_permutation(@{$dimension{$dim}{'instances'}});
my $num=@order;
my $version=&get_version();
my $which=($version-1)%$num;
@@ -1959,10 +1964,10 @@
if (defined($instance)) { return $instance; }
&Apache::response::pushrandomnumber();
- my @instances = @{$dimension_info{$dim}{'instances'}};
+ my @instances = @{$dimension{$dim}{'instances'}};
# remove disabled instances
for (my $i=0; $i < $#instances; $i++) {
- if ($dimension_info{$dim}{$instances[$i].'.disabled'}) {
+ if ($dimension{$dim}{$instances[$i].'.disabled'}) {
splice(@instances,$i,1);
$i--;
}
@@ -1979,6 +1984,18 @@
}
}
+sub get_criteria {
+ my ($what,$version,$dim,$id) = @_;
+ my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
+ my $prefix = ($type eq 'criteria') ? "$dim.$id"
+ : "$id";
+ my $entry = "resource.$version.0.$prefix.$what";
+ if (exists($Apache::lonhomework::results{$entry})) {
+ return $Apache::lonhomework::results{$entry};
+ }
+ return $Apache::lonhomework::history{$entry};
+}
+
{
my $last_link;
sub link {
@@ -1995,19 +2012,21 @@
my $version=&get_version();
if ($target eq 'web') {
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{'intro'});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
my @instances = $instance;
if (&Apache::response::showallfoils()) {
- @instances = @{$dimension_info{$dim}{'instances'}};
+ @instances = @{$dimension{$dim}{'instances'}};
}
my $shown_question_text;
foreach my $instance (@instances) {
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{$instance.'.text'});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{'questiontext'});
- if ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass' ||
- $Apache::lonhomework::history{"resource.$version.0.status"} eq 'fail') {
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});
+
+ my $task_status =
+ $Apache::lonhomework::history{"resource.$version.0.status"};
+ if ($task_status eq 'pass' || $task_status eq 'fail') {
my $dim_status=$Apache::lonhomework::history{"resource.$version.0.$dim.status"};
my $mandatory='Mandatory';
@@ -2025,24 +2044,21 @@
my $man_passed=0;
my $opt_count=0;
my $opt_passed=0;
- foreach my $id ( @{$dimension_info{$dim}{$instance.'.criterias'}},
- @{$dimension_info{$dim}{'criterias'}} ) {
- if ($dimension_info{$dim}{'criteria.'.$id.'.mandatory'}
+ 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 ($Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"} eq 'pass') {
- $opt_passed++;
- }
+ if ($status eq 'pass') { $opt_passed++; }
} else {
$man_count++;
- if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"} eq 'pass') {
- $man_passed++;
- }
+ if ($status eq 'pass') { $man_passed++; }
}
}
if ($man_passed eq $man_count) { $man_passed='all'; }
- my $opt_req=$dimension_info{$dim}{$instance.'.optionalrequired'};
+ my $opt_req=$dimension{$dim}{$instance.'.optionalrequired'};
if ($opt_req !~ /\S/) {
$opt_req=
&Apache::lonxml::get_param('OptionalRequired',
@@ -2054,11 +2070,15 @@
my $internal_location=&internal_location($dim);
$result=~s/\Q$internal_location\E/$dim_info/;
- foreach my $id (@{$dimension_info{$dim}{$instance.'.criterias'}},
- @{$dimension_info{$dim}{'criterias'}}) {
- my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"};
- my $comment=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"};
- my $mandatory=($dimension_info{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');
+ foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
+ @{$dimension{$dim}{'criterias'}}) {
+ # FIXME need to collect the dimension style criteria
+ # and output them here.
+ my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
+ next if ($type eq 'dimension');
+ 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 {
@@ -2075,10 +2095,11 @@
'<div class="LC_'.$status.' LC_criteria"><h4>'
.$mandatory.' Criteria</h4><p>';
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{'criteria.'.$id});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'criteria.'.$id});
$result.='</p><p class="LC_grade">'.$status_display.'</p>';
- 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.$id.comment"}).'</p>';
+ if ($comment) {
+ $result.='<p class="LC_comment">'.
+ &mt('Comment: [_1]',$comment).'</p>';
}
$result.='</div>';
}
@@ -2087,21 +2108,25 @@
} elsif ($target eq 'webgrade') {
# in case of any side effects that we need
@Apache::scripttag::parser_env = @_;
- &Apache::scripttag::xmlparse($dimension_info{$dim}{'intro'});
+ &Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
@Apache::scripttag::parser_env = @_;
- &Apache::scripttag::xmlparse($dimension_info{$dim}{$instance.'.text'});
+ &Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});
@Apache::scripttag::parser_env = @_;
- &Apache::scripttag::xmlparse($dimension_info{$dim}{'questiontext'});
- foreach my $id (@{$dimension_info{$dim}{$instance.'.criterias'}},
- @{$dimension_info{$dim}{'criterias'}} ) {
+ &Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});
+ foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
+ @{$dimension{$dim}{'criterias'}} ) {
+ # dimensional 'criteria' don't get assigned grades
+ my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
+ next if ($type eq 'dimension');
+
my $link=&link($id);
- my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"};
+ 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";
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{'criteria.'.$id});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'criteria.'.$id});
$result.='</div>'."\n".
- #$dimension_info{$dim}{'criteria.'.$id}.
+ #$dimension{$dim}{'criteria.'.$id}.
'<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".
@@ -2109,7 +2134,7 @@
'<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($Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}).'</textarea>'."\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".
@@ -2126,18 +2151,25 @@
my $review=0;
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{'intro'});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{$instance.'.text'});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});
@Apache::scripttag::parser_env = @_;
- &Apache::scripttag::xmlparse($dimension_info{$dim}{'questiontext'});
+ &Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});
- foreach my $id (@{$dimension_info{$dim}{$instance.'.criterias'}},
- @{$dimension_info{$dim}{'criterias'}}) {
+ foreach my $id (@{$dimension{$dim}{$instance.'.criterias'}},
+ @{$dimension{$dim}{'criterias'}}) {
my $link=&link($id);
- my $status=$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};
- my $mandatory=($dimension_info{$dim}{'criteria.'.$id.'.mandatory'} ne 'N');
+
+ 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};
+ }
+ 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') {
@@ -2151,7 +2183,7 @@
}
}
# FIXME optional required can apply to only <instance> right now...
- my $opt_req=$dimension_info{$dim}{$instance.'.optionalrequired'};
+ my $opt_req=$dimension{$dim}{$instance.'.optionalrequired'};
if ($opt_req !~ /\S/) {
$opt_req=
&Apache::lonxml::get_param('OptionalRequired',
@@ -2161,7 +2193,7 @@
if ($optional_passed < $opt_req) {
$mandatory_failed++;
}
- &Apache::lonxml::debug("all instance ".join(':',@{$dimension_info{$dim}{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");
+ &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';
@@ -2179,6 +2211,7 @@
# any other targets no output
undef($result);
}
+ pop(@Apache::bridgetask::dimension);
return $result;
}
@@ -2190,30 +2223,31 @@
my $version=&get_version();
if ($target eq 'web') {
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{'intro'});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
my @instances = $instance;
if (&Apache::response::showallfoils()) {
- @instances = @{$dimension_info{$dim}{'instances'}};
+ @instances = @{$dimension{$dim}{'instances'}};
}
foreach my $instance (@instances) {
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{$instance.'.text'});
+ $result.=&Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension_info{$dim}{'questiontext'});
+ $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_info{$dim}{'intro'});
+ &Apache::scripttag::xmlparse($dimension{$dim}{'intro'});
@Apache::scripttag::parser_env = @_;
- &Apache::scripttag::xmlparse($dimension_info{$dim}{$instance.'.text'});
+ &Apache::scripttag::xmlparse($dimension{$dim}{$instance.'.text'});
@Apache::scripttag::parser_env = @_;
- &Apache::scripttag::xmlparse($dimension_info{$dim}{'questiontext'});
+ &Apache::scripttag::xmlparse($dimension{$dim}{'questiontext'});
} else {
# any other targets no output
undef($result);
}
+ pop(@Apache::bridgetask::dimension);
return $result;
}
}
@@ -2256,7 +2290,7 @@
my $dim = &get_dim_id();
if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') {
if ($tagstack->[-2] eq 'Dimension' || $tagstack->[-2] eq 'Question' ) {
- $dimension_info{$dim}{'intro'}=
+ $dimension{$dim}{'intro'}=
&Apache::lonxml::get_all_text('/introparagraph',
$parser,$style);
} elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') {
@@ -2278,14 +2312,14 @@
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $dim = &get_dim_id();
my $id = &get_id($parstack,$safeeval);
- push(@{$dimension_info{$dim}{'instances'}},$id);
+ push(@{$dimension{$dim}{'instances'}},$id);
push(@{$Apache::bridgetask::instance{$dim}},$id);
push(@Apache::bridgetask::instancelist,$id);
- $dimension_info{$dim}{$id.'.optionalrequired'}=
+ $dimension{$dim}{$id.'.optionalrequired'}=
&Apache::lonxml::get_param('OptionalRequired',$parstack,$safeeval);
my $disabled = &Apache::lonxml::get_param('Disabled',$parstack,$safeeval);
if (lc($disabled) eq 'yes') {
- $dimension_info{$dim}{$id.'.disabled'}='1';
+ $dimension{$dim}{$id.'.disabled'}='1';
}
return '';
}
@@ -2299,7 +2333,7 @@
my $instance_id=$Apache::bridgetask::instance{$dim}[-1];
my $text=&Apache::lonxml::get_all_text('/instancetext',$parser,$style);
if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') {
- $dimension_info{$dim}{$instance_id.'.text'}=$text;
+ $dimension{$dim}{$instance_id.'.text'}=$text;
}
return '';
}
@@ -2314,17 +2348,20 @@
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') {
my $dim = &get_dim_id();
my $id=&get_id($parstack,$safeeval);
+ &Apache::lonxml::debug("Criteria $id with $dim");
if (&Apache::londefdef::is_inside_of($tagstack,'Instance')) {
my $instance_id=$Apache::bridgetask::instance{$dim}[-1];
- $dimension_info{$dim}{"criteria.$instance_id.$id"}=$criteria;
- $dimension_info{$dim}{"criteria.$instance_id.$id.mandatory"}=
+ $dimension{$dim}{"criteria.$instance_id.$id"}=$criteria;
+ $dimension{$dim}{"criteria.$instance_id.$id.type"}='criteria';
+ $dimension{$dim}{"criteria.$instance_id.$id.mandatory"}=
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
- push(@{$dimension_info{$dim}{$instance_id.'.criterias'}},"$instance_id.$id");
+ push(@{$dimension{$dim}{$instance_id.'.criterias'}},"$instance_id.$id");
} else {
- $dimension_info{$dim}{'criteria.'.$id}=$criteria;
- $dimension_info{$dim}{'criteria.'.$id.'.mandatory'}=
+ $dimension{$dim}{'criteria.'.$id}=$criteria;
+ $dimension{$dim}{'criteria.'.$id.'.type'}='criteria';
+ $dimension{$dim}{'criteria.'.$id.'.mandatory'}=
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
- push(@{$dimension_info{$dim}{'criterias'}},$id);
+ push(@{$dimension{$dim}{'criterias'}},$id);
}
}
return '';
--albertel1150230529--