--- loncom/homework/bridgetask.pm 2006/05/09 18:07:56 1.145
+++ loncom/homework/bridgetask.pm 2006/05/23 19:55:40 1.153
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.145 2006/05/09 18:07:56 albertel Exp $
+# $Id: bridgetask.pm,v 1.153 2006/05/23 19:55:40 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -40,7 +40,7 @@ use Apache::slotrequest();
use Time::HiRes qw( gettimeofday tv_interval );
BEGIN {
- &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Instance','InstanceText','Criteria','ClosingParagraph'));
+ &Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Question','Instance','InstanceText','Criteria','ClosingParagraph'));
}
sub initialize_bridgetask {
@@ -79,39 +79,56 @@ sub proctor_check_auth {
$authenticated=1;
}
}
- if ($authenticated && $type eq 'Task') {
- # increment version
- my $version=
- $Apache::lonhomework::history{'resource.0.version'};
- $version++;
-
- #clean out all current results
- foreach my $key (keys(%Apache::lonhomework::history)) {
- if ($key=~/^resource\.0\./) {
- $Apache::lonhomework::results{$key}='';
- }
- }
-
- #setup new version and who did it
- $Apache::lonhomework::results{'resource.0.version'}=$version;
- $Apache::lonhomework::results{"resource.$version.0.checkedin"}=
- $user.':'.$domain;
- $Apache::lonhomework::results{"resource.$version.0.checkedin.slot"}=
- $slot_name;
-
+ if ($authenticated) {
+ &create_new_version($type,$user,$domain,$slot_name);
return 1;
- } elsif ($authenticated && $type eq 'problem') {
- &Apache::lonxml::debug("authed $slot_name");
- $Apache::lonhomework::results{"resource.0.checkedin"}=
- $user.':'.$domain;
- $Apache::lonhomework::results{"resource.0.checkedin.slot"}=
- $slot_name;
}
}
}
return 0;
}
+sub create_new_version {
+ my ($type,$user,$domain,$slot_name) = @_;
+ if ($type eq 'Task') {
+ # increment version
+ my $version=
+ $Apache::lonhomework::history{'resource.0.version'};
+ $version++;
+ &Apache::lonxml::debug("Making version $version");
+ #clean out all current results
+ foreach my $key (keys(%Apache::lonhomework::history)) {
+ if ($key=~/^resource\.0\./) {
+ $Apache::lonhomework::results{$key}='';
+ }
+ }
+
+ #setup new version and who did it
+ $Apache::lonhomework::results{'resource.0.version'}=$version;
+ if (defined($user) && defined($domain)) {
+ $Apache::lonhomework::results{"resource.$version.0.checkedin"}=
+ $user.':'.$domain;
+ } else {
+ $Apache::lonhomework::results{"resource.$version.0.checkedin"}=
+ $env{'user.name'}.':'.$env{'user.domain'};
+ }
+ if (defined($slot_name)) {
+ $Apache::lonhomework::results{"resource.$version.0.checkedin.slot"}=
+ $slot_name;
+ }
+ } elsif ($type eq 'problem') {
+ &Apache::lonxml::debug("authed $slot_name");
+ if (defined($user) && defined($domain)) {
+ $Apache::lonhomework::results{"resource.0.checkedin"}=
+ $user.':'.$domain;
+ }
+ if (defined($slot_name)) {
+ $Apache::lonhomework::results{"resource.0.checkedin.slot"}=
+ $slot_name;
+ }
+ }
+}
+
sub get_version {
my ($version,$previous);
if ($env{'form.previousversion'} &&
@@ -120,7 +137,11 @@ sub get_version {
$version=$env{'form.previousversion'};
$previous=1;
} else {
- $version=$Apache::lonhomework::history{'resource.0.version'};
+ if (defined($Apache::lonhomework::results{'resource.0.version'})) {
+ $version=$Apache::lonhomework::results{'resource.0.version'};
+ } elsif (defined($Apache::lonhomework::history{'resource.0.version'})) {
+ $version=$Apache::lonhomework::history{'resource.0.version'};
+ }
$previous=0;
}
if (wantarray) {
@@ -223,6 +244,12 @@ sub add_request_another_attempt_button {
if (!$text) { $text="Request another attempt"; }
my $result;
my $symb=&Apache::lonnet::symbread();
+ # not a slot access based resource
+ my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb);
+ if ($useslots =~ /^\s*no\s*$/i) {
+ return '';
+ }
+
my ($slot_name,$slot)=&Apache::slotrequest::check_for_reservation($symb);
my $action='get_reservation';
if ($slot_name) {
@@ -278,7 +305,8 @@ sub show_task {
( $status eq 'NOT_IN_A_SLOT') ||
( $status eq 'NEEDS_CHECKIN') ||
( $status eq 'WAITING_FOR_GRADE') ||
- ( $status eq 'INVALID_ACCESS') )) {
+ ( $status eq 'INVALID_ACCESS') ||
+ ( &get_version() eq ''))) {
return 0;
}
if ($env{'form.donescreen'}) { return 0; }
@@ -390,12 +418,13 @@ sub start_Task {
($result,$form_tag_start) =
&Apache::structuretags::page_start($target,$token,$tagstack,
$parstack,$parser,$safeeval,
- $name,&style());
+ $name,&style($target));
$result .= '
'."\n";
}
if ($target eq 'web' && $env{'request.state'} ne 'construct') {
- if ($Apache::lonhomework::modifygrades) {
+ if ($Apache::lonhomework::queuegrade
+ || $Apache::lonhomework::modifygrades) {
$result.='
";
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 {
@@ -1748,15 +1858,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.='
';
}
@@ -1768,15 +1877,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'}) {
@@ -1799,11 +1909,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') {
@@ -1816,7 +1932,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");
@@ -1842,12 +1966,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) =
@@ -1876,11 +2000,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();
}
@@ -1917,7 +2042,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 '';
@@ -1929,14 +2054,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 '';
}