--- loncom/homework/bridgetask.pm 2006/05/12 05:18:34 1.149 +++ loncom/homework/bridgetask.pm 2006/05/12 06:55:46 1.150 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.149 2006/05/12 05:18:34 albertel Exp $ +# $Id: bridgetask.pm,v 1.150 2006/05/12 06:55:46 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -79,39 +79,53 @@ 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++; + + #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; + } + 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 +134,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) { @@ -284,7 +302,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; } @@ -435,6 +454,11 @@ sub start_Task { my ($version,$previous)=&get_version(); ($status,$accessmsg,my $slot_name,$slot) = &Apache::lonhomework::check_slot_access('0','Task'); + if ($status eq 'CAN_ANSWER' && $version eq '' && $slot_name eq '') { + &create_new_version('Task'); + ($version,$previous)=&get_version(); + } + push(@Apache::inputtags::status,$status); $Apache::inputtags::slot_name=$slot_name; my $expression='$external::datestatus="'.$status.'";'; @@ -1727,9 +1751,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; }