--- loncom/homework/bridgetask.pm 2005/10/24 18:40:21 1.73 +++ loncom/homework/bridgetask.pm 2006/03/02 21:20:30 1.115 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.73 2005/10/24 18:40:21 albertel Exp $ +# $Id: bridgetask.pm,v 1.115 2006/03/02 21:20:30 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,7 +60,7 @@ sub initialize_bridgetask { } sub proctor_check_auth { - my ($slot_name,$slot)=@_; + my ($slot_name,$slot,$type)=@_; my $user=$env{'form.proctorname'}; my $domain=$env{'form.proctordomain'}; @@ -79,20 +79,33 @@ sub proctor_check_auth { $authenticated=1; } } - if ($authenticated) { + if ($authenticated && $type eq 'Task') { + # increment version my $version= - $Apache::lonhomework::results{'resource.version'}= - ++$Apache::lonhomework::history{'resource.version'}; - $Apache::lonhomework::results{"resource.$version.checkedin"}= - $user.'@'.$domain; - $Apache::lonhomework::results{"resource.$version.checkedin.slot"}= - $slot_name; + $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; + 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; } } } @@ -103,11 +116,11 @@ sub get_version { my ($version,$previous); if ($env{'form.previousversion'} && $env{'form.previousversion'} ne 'current' && - defined($Apache::lonhomework::history{'resource.'.$env{'form.previousversion'}.'.status'})) { + defined($Apache::lonhomework::history{'resource.'.$env{'form.previousversion'}.'.0.status'})) { $version=$env{'form.previousversion'}; $previous=1; } else { - $version=$Apache::lonhomework::history{'resource.version'}; + $version=$Apache::lonhomework::history{'resource.0.version'}; $previous=0; } if (wantarray) { @@ -119,10 +132,10 @@ sub get_version { sub add_previous_version_button { my ($status)=@_; my $result; - if ($Apache::lonhomework::history{'resource.version'} eq '') { + if ($Apache::lonhomework::history{'resource.0.version'} eq '') { return ''; } - if ($Apache::lonhomework::history{'resource.version'} < 2 && + if ($Apache::lonhomework::history{'resource.0.version'} < 2 && $status ne 'NEEDS_CHECKIN') { return ''; } @@ -133,8 +146,8 @@ sub add_previous_version_button { "\n"; } my @to_show; - foreach my $test_version (1..$Apache::lonhomework::history{'resource.version'}) { - if (defined($Apache::lonhomework::history{'resource.'.$test_version.'.status'})) { + foreach my $test_version (1..$Apache::lonhomework::history{'resource.0.version'}) { + if (defined($Apache::lonhomework::history{'resource.'.$test_version.'.0.status'})) { push(@to_show,$test_version); } } @@ -142,7 +155,7 @@ sub add_previous_version_button { join("\n\n"; $list.=''; - $result.='
'; + my $action = &Apache::lonenc::check_encrypted($env{'request.uri'}); $result.=<".&mt('You needed to pass all of the [_1] mandatory components and [_2] of the [_3] optional components on the bridge task.',$man_count,$opt_req,$opt_count)."
".&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)."
Empty |
"; } - $result.=" | resource | user | type | data |
---|
Status | "; } + $result.=" | user | data | ||||
---|---|---|---|---|---|---|---|
$title | $uname | "; - $result.='lock | '.$queue{$key}.' | ||||
$uname | "; + $result.=''.$queue{$key}.' | ||||||
$title | "; - $result.=' | last queue modification time | '. + $result.=" | ||||
"; + $result.=' | '. &Apache::lonlocal::locallocaltime($queue{$key})." | ||||||
-'.&mt("In Progress").' | '
}
}
- $result.="$title | $uname | ";
- $result.='queue entry | Slot: '.$slot.' End time: '.
+ $result.= " | ".$fullname->{$uname.':'.$udom}.
+ " ($uname\@$udom) | ";
+ $result.='Slot: '.$slot.' End time: '.
&Apache::lonlocal::locallocaltime($slot_data{'endtime'}).
" | |
- | $fullname->{$student} | +$fullname->{$student} ($studentdis) | RESULT } @@ -1332,6 +1563,9 @@ RESULT if ($status{'version'}) { $result .= ' '.&mt('Version').' '.$status{'version'}; } + if ($status{'grader'}) { + $result .= ' '.&mt('(Graded by [_1])',$status{'grader'}).' '; + } $result.= ' | ';
if ($status{'reviewqueue'} eq 'enqueued') {
$result .= &mt('Awaiting Review');
@@ -1355,17 +1589,23 @@ RESULT
}
sub get_student_status {
- my ($symb,$cid,$udom,$uname)=@_;
- my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},
- $udom,$uname);
+ my ($symb,$cdom,$cnum,$udom,$uname,$type)=@_;
+
my %status;
- $status{'status'}=$record{'resource.status'};
- $status{'version'}=$record{'resource.version'};
- $status{'grader'}=$record{'resource.grader'};
- $status{'reviewqueue'}=&check_queue_for_key($cid,'reviewqueue',
- &encode_queue_key($symb,$udom,$uname));
- $status{'gradingqueue'}=&check_queue_for_key($cid,'gradingqueue',
- &encode_queue_key($symb,$udom,$uname));
+
+ if ($type eq 'Task') {
+ my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},
+ $udom,$uname);
+ $status{'status'}=$record{'resource.0.status'};
+ $status{'version'}=$record{'resource.0.version'};
+ $status{'grader'}=$record{'resource.0.regrader'};
+ }
+ $status{'reviewqueue'}=
+ &check_queue_for_key($cdom,$cnum,'reviewqueue',
+ &encode_queue_key($symb,$udom,$uname));
+ $status{'gradingqueue'}=
+ &check_queue_for_key($cdom,$cnum,'gradingqueue',
+ &encode_queue_key($symb,$udom,$uname));
return %status;
}
@@ -1411,12 +1651,40 @@ sub start_Dimension {
}
sub get_instance {
- &Apache::response::pushrandomnumber();
- my @order=&Math::Random::random_permutation(@{$dimension{'instances'}});
- my $num=@order;
- my $version=&get_version();
- my $which=($version-1)%$num;
- return $order[$which];
+ my ($dim)=@_;
+ my $rand_alg=&Apache::lonnet::get_rand_alg();
+ if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
+ $rand_alg eq '64bit2' || $rand_alg eq '64bit3' ||
+ $rand_alg eq '64bit4' ) {
+ &Apache::response::pushrandomnumber();
+ my @order=&Math::Random::random_permutation(@{$dimension{'instances'}});
+ my $num=@order;
+ my $version=&get_version();
+ my $which=($version-1)%$num;
+ return $order[$which];
+ } else {
+ my ($version,$previous) = &get_version();
+ my $instance =
+ $Apache::lonhomework::history{"resource.$version.0.$dim.instance"};
+ if (defined($instance)) { return $instance; }
+
+ &Apache::response::pushrandomnumber();
+ my @instances = @{$dimension{'instances'}};
+ # remove disabled instances
+ for (my $i=0; $i < $#instances; $i++) {
+ if ($dimension{$instances[$i].'.disabled'}) {
+ splice(@instances,$i,1);
+ $i--;
+ }
+ }
+ @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;
+ &Apache::response::poprandomnumber();
+ return $instance;
+ }
}
{
@@ -1425,80 +1693,86 @@ sub get_instance {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $result=&Apache::lonxml::endredirection();
my $dim=&get_id($parstack,$safeeval);
- my $instance=&get_instance();
+ my $instance=&get_instance($dim);
my $version=&get_version();
if ($target eq 'web') {
@Apache::scripttag::parser_env = @_;
$result.=&Apache::scripttag::xmlparse($dimension{'intro'});
- @Apache::scripttag::parser_env = @_;
- $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'});
- if ($Apache::lonhomework::history{"resource.$version.status"} eq 'pass' ||
- $Apache::lonhomework::history{"resource.$version.status"} eq 'fail') {
-
- my $dim_status=$Apache::lonhomework::history{"resource.$version.$dim.status"};
- my $mandatory='Mandatory';
- if ($Apache::bridgetask::dimensionmandatory{$dim} eq 'N') {
- $mandatory='Optional';
- }
- my $dim_info=" \n";
- if ($dim_status eq 'pass') {
- $dim_info.=' ";
-
- 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.$dim.$instance.$id.status"};
- my $comment=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"};
- my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');
- if ($mandatory) {
- $mandatory='Mandatory';
- } else {
+ my @instances = $instance;
+ if (&Apache::response::showallfoils()) {
+ @instances = @{$dimension{'instances'}};
+ }
+ foreach my $instance (@instances) {
+ @Apache::scripttag::parser_env = @_;
+ $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'});
+ if ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass' ||
+ $Apache::lonhomework::history{"resource.$version.0.status"} eq 'fail') {
+
+ my $dim_status=$Apache::lonhomework::history{"resource.$version.0.$dim.status"};
+ my $mandatory='Mandatory';
+ if ($Apache::bridgetask::dimensionmandatory{$dim} eq 'N') {
$mandatory='Optional';
}
- if ($status eq 'fail') {
- } elsif ($status eq 'pass') {
- } else {
- &Apache::lonxml::error("Student viewing a graded bridgetask was shown a status of $status");
+ my $dim_info="Question : you passed this '.$mandatory.' question'; - } - if ($dim_status eq 'fail') { - $dim_info.='Question : you did not pass this '.$mandatory.' question'; - } - my $man_count=0; - my $man_passed=0; - my $opt_count=0; - my $opt_passed=0; - foreach my $id (@{$dimension{$instance.'.criterias'}}) { - if ($dimension{$instance.'.criteria.'.$id.'.mandatory'} - eq 'N') { - $opt_count++; - if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') { - $opt_passed++; - } - } else { - $man_count++; - if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') { - $man_passed++; - } - } - } - if ($man_passed eq $man_count) { $man_passed='all'; } - my $opt_req=$dimension{$instance.'.optionalrequired'}; - 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\n";
+ if ($dim_status eq 'pass') {
+ $dim_info.=' ';
}
}
} elsif ($target eq 'webgrade') {
@@ -1509,29 +1783,30 @@ sub get_instance {
&Apache::scripttag::xmlparse($dimension{$instance.'.text'});
foreach my $id (@{$dimension{$instance.'.criterias'}}) {
my $link='criteria_'.$instance.'_'.$id;
- my $status=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"};
- $result.='Question : you passed this '.$mandatory.' question'; } - 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.=' '.$status_display.' '; - if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}) { - $result.=''.$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}.' '; + if ($dim_status eq 'fail') { + $dim_info.='Question : you did not pass this '.$mandatory.' question'; + } + my $man_count=0; + my $man_passed=0; + my $opt_count=0; + my $opt_passed=0; + foreach my $id (@{$dimension{$instance.'.criterias'}}) { + if ($dimension{$instance.'.criteria.'.$id.'.mandatory'} + eq 'N') { + $opt_count++; + if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"} eq 'pass') { + $opt_passed++; + } + } else { + $man_count++; + if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"} eq 'pass') { + $man_passed++; + } + } + } + if ($man_passed eq $man_count) { $man_passed='all'; } + my $opt_req=$dimension{$instance.'.optionalrequired'}; + 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'.$mandatory. + ' Criteria'; + @Apache::scripttag::parser_env = @_; + $result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id}); + $result.=' '.$status_display.' '; + if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}) { + $result.=''.&mt('Comment: [_1]',$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).' '; + } + $result.=' |
'.
- ''.
- ''.
- ' | '.
- ''. - ''. - ' | '.
- ''.
- ' '. - ' '. - ' '. - ' '. - ' | '.
- ''.
- 'Prev '. - 'Next '. - ' |