\n";
@@ -829,6 +884,7 @@ DONEBUTTON
$man_count++;
}
}
+
my $opt_req=&Apache::lonxml::get_param('OptionalRequired',
$parstack,$safeeval);
if ($opt_req !~ /\S/) { $opt_req='0'; }
@@ -837,8 +893,6 @@ DONEBUTTON
my $internal_location=&internal_location();
$result=~s/\Q$internal_location\E/$status/;
}
- }
- if ($target eq 'web') {
$result.="\n
\n".
&Apache::loncommon::end_page({'discussion' => 1});
}
@@ -864,9 +918,18 @@ DONEBUTTON
}
&Apache::lonhomework::showhash(%Apache::lonhomework::results);
&Apache::structuretags::finalize_storage();
- if ($award eq 'SUBMITTED'
- && defined($Apache::inputtags::slot_name)) {
- &add_to_queue('gradingqueue',[$Apache::inputtags::slot_name]);
+ if ($award eq 'SUBMITTED') {
+ my $useslots = &Apache::lonnet::EXT("resource.0.useslots");
+ if ($useslots =~ /^\s*no\s*$/i) {
+ &add_to_queue('gradingqueue',
+ {'type' => 'Task',
+ 'time' => time});
+ } elsif (defined($Apache::inputtags::slot_name)) {
+ &add_to_queue('gradingqueue',
+ {'type' => 'Task',
+ 'time' => time,
+ 'slot' => $Apache::inputtags::slot_name});
+ }
}
} elsif ($Apache::lonhomework::results{'INTERNAL_store'}) {
&Apache::structuretags::finalize_storage();
@@ -1005,7 +1068,7 @@ sub move_between_queues {
} else {
$cur_data = ['none'];
}
- my $result=&add_to_queue($dest_queue,[$cur_data->[0]]);
+ my $result=&add_to_queue($dest_queue,$cur_data);
if ($result ne 'ok') {
return $result;
}
@@ -1104,17 +1167,17 @@ sub check_queue_for_key {
if (defined($results{"$todo\0locked"})) {
return 'locked';
}
- my $slot;
- if (ref($results{$todo}) eq 'ARRAY') {
- $slot = $results{$todo}[0];
- } elsif (ref($results{$todo}) eq 'HASH') {
- $slot = $results{$todo}{'slot'};
- }
- if (defined($slot)) {
+ if (my $slot=&slotted_access($results{$todo})) {
my %slot_data=&Apache::lonnet::get_slot($slot);
if ($slot_data{'endtime'} > time) {
return 'in_progress';
}
+ } else {
+ my ($symb) = &decode_queue_key($todo);
+ my $due_date = &Apache::lonhomework::due_date('0',$symb);
+ if ($due_date > time) {
+ return 'in_progress';
+ }
}
return 'enqueued';
}
@@ -1174,8 +1237,15 @@ sub show_queue {
&Apache::lonlocal::locallocaltime($queue{$key})."";
} elsif ($key!~/(timestamp|locked)$/) {
$result.="
@@ -1519,7 +1623,7 @@ sub select_user {
$seclist
- | $fullname->{$student} ($studentdis) |
+ $classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()] ($student) |
RESULT
}
@@ -1613,6 +1717,7 @@ sub get_id {
}
my %dimension;
+sub start_Question { return &start_Dimension(@_); }
sub start_Dimension {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
undef(%dimension);
@@ -1655,9 +1760,11 @@ sub get_instance {
}
@instances = &Math::Random::random_permutation(@instances);
$instance = $instances[($version-1)%scalar(@instances)];
- $Apache::lonhomework::results{"resource.$version.0.$dim.instance"} =
- $instance;
- $Apache::lonhomework::results{'INTERNAL_store'} = 1;
+ if ($version =~ /^\d$/) {
+ $Apache::lonhomework::results{"resource.$version.0.$dim.instance"} =
+ $instance;
+ $Apache::lonhomework::results{'INTERNAL_store'} = 1;
+ }
&Apache::response::poprandomnumber();
return $instance;
}
@@ -1666,9 +1773,11 @@ sub get_instance {
{
my $last_link;
sub link {
- my ($instance,$id) = @_;
- return 'LC_GRADING_criteria_'.$instance.'_'.$id;
+ 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();
@@ -1704,11 +1813,12 @@ sub get_instance {
my $man_passed=0;
my $opt_count=0;
my $opt_passed=0;
- foreach my $id (@{$dimension{$instance.'.criterias'}}) {
- if ($dimension{$instance.'.criteria.'.$id.'.mandatory'}
+ foreach my $id ( @{$dimension{$instance.'.criterias'}},
+ @{$dimension{'criterias'}} ) {
+ if ($dimension{'criteria.'.$id.'.mandatory'}
eq 'N') {
$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++;
}
} else {
@@ -1719,17 +1829,24 @@ sub get_instance {
}
}
if ($man_passed eq $man_count) { $man_passed='all'; }
+
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 ".&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)." \n";
my $internal_location=&internal_location($dim);
$result=~s/\Q$internal_location\E/$dim_info/;
- foreach my $id (@{$dimension{$instance.'.criterias'}}) {
- my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"};
- my $comment=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"};
- my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');
+ foreach my $id (@{$dimension{$instance.'.criterias'}},
+ @{$dimension{'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{'criteria.'.$id.'.mandatory'} ne 'N');
if ($mandatory) {
$mandatory='Mandatory';
} else {
@@ -1742,15 +1859,14 @@ sub get_instance {
}
my $status_display=$status;
$status_display=~s/^([a-z])/uc($1)/e;
- @Apache::scripttag::parser_env = @_;
$result.=
''
.$mandatory.' Criteria';
@Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id});
+ $result.=&Apache::scripttag::xmlparse($dimension{'criteria.'.$id});
$result.=' '.$status_display.' ';
- if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}) {
- $result.='';
+ if ($Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}) {
+ $result.='';
}
$result.=' ';
}
@@ -1762,15 +1878,16 @@ sub get_instance {
&Apache::scripttag::xmlparse($dimension{'intro'});
@Apache::scripttag::parser_env = @_;
&Apache::scripttag::xmlparse($dimension{$instance.'.text'});
- foreach my $id (@{$dimension{$instance.'.criterias'}}) {
- my $link=&link($instance,$id);
- my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"};
+ foreach my $id (@{$dimension{$instance.'.criterias'}},
+ @{$dimension{'criterias'}} ) {
+ my $link=&link($id);
+ my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"};
$result.=''."\n";
- $result.=&grading_history($version,$dim,$instance,$id);
+ $result.=&grading_history($version,$dim,$id);
$last_link=$link;
}
} elsif ($target eq 'grade' && $env{'form.webgrade'}) {
@@ -1793,11 +1910,17 @@ sub get_instance {
my $mandatory_failed=0;
my $ungraded=0;
my $review=0;
- foreach my $id (@{$dimension{$instance.'.criterias'}}) {
- my $link=&link($instance,$id);
- my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.status"}=$env{'form.HWVAL_'.$link};
- $Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.comment"}=$env{'form.HWVAL_comment_'.$link};
- my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');
+
+ @Apache::scripttag::parser_env = @_;
+ $result.=&Apache::scripttag::xmlparse($dimension{'intro'});
+ foreach my $id (@{$dimension{$instance.'.criterias'}},
+ @{$dimension{'criterias'}}) {
+ my $link=&link($id);
+ @Apache::scripttag::parser_env = @_;
+ $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'});
+ 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{'criteria.'.$id.'.mandatory'} ne 'N');
if ($status eq 'pass') {
if (!$mandatory) { $optional_passed++; }
} elsif ($status eq 'fail') {
@@ -1810,7 +1933,15 @@ sub get_instance {
$ungraded++;
}
}
- if ($optional_passed < $dimension{$instance.'.optionalrequired'}) {
+ # FIXME optional required can apply to only 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++;
}
&Apache::lonxml::debug("all instance ".join(':',@{$dimension{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");
@@ -1836,12 +1967,12 @@ sub get_instance {
}
sub grading_history {
- my ($version,$dim,$instance,$criteria) = @_;
+ my ($version,$dim,$id) = @_;
if (!&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) {
return '';
}
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'}) {
if (exists($Apache::lonhomework::history{$t.':resource.0.regrader'})) {
my ($gname,$gdom) =
@@ -1870,11 +2001,12 @@ sub grading_history {
sub start_IntroParagraph {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result;
- if ($target eq 'web' || $target eq 'webgrade') {
- if ($tagstack->[-2] eq 'Dimension') {
- $dimension{'intro'}=&Apache::lonxml::get_all_text('/introparagraph',$parser,$style);
-
- } elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') {
+ if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') {
+ if ($tagstack->[-2] eq 'Dimension' || $tagstack->[-2] eq 'Question' ) {
+ $dimension{'intro'}=
+ &Apache::lonxml::get_all_text('/introparagraph',
+ $parser,$style);
+ } elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') {
&Apache::lonxml::startredirection();
}
@@ -1911,7 +2043,7 @@ sub start_InstanceText {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $instance_id=$Apache::bridgetask::instance[-1];
my $text=&Apache::lonxml::get_all_text('/instancetext',$parser,$style);
- if ($target eq 'web' || $target eq 'webgrade') {
+ if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') {
$dimension{$instance_id.'.text'}=$text;
}
return '';
@@ -1923,14 +2055,21 @@ sub end_InstanceText {
sub start_Criteria {
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);
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') {
my $id=&get_id($parstack,$safeeval);
- $dimension{$instance_id.'.criteria.'.$id}=$criteria;
- $dimension{$instance_id.'.criteria.'.$id.'.mandatory'}=
- &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
- push(@{$dimension{$instance_id.'.criterias'}},$id);
+ if (&Apache::londefdef::is_inside_of($tagstack,'Instance')) {
+ my $instance_id=$Apache::bridgetask::instance[-1];
+ $dimension{"criteria.$instance_id.$id"}=$criteria;
+ $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 '';
}
|