--- loncom/homework/bridgetask.pm 2006/03/29 14:04:45 1.130 +++ 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.130 2006/03/29 14:04:45 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 { @@ -66,7 +66,7 @@ sub proctor_check_auth { my @allowed=split(",",$slot->{'proctor'}); foreach my $possible (@allowed) { - my ($puser,$pdom)=(split('@',$possible)); + my ($puser,$pdom)=(split(':',$possible)); if ($puser eq $user && $pdom eq $domain) { my $authenticated=0; if ( $slot->{'secret'} =~ /\S/ && @@ -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) { @@ -170,8 +191,8 @@ sub add_grading_button { my (undef,$cid)=&Apache::lonxml::whichuser(); my $cnum=$env{'course.'.$cid.'.num'}; my $cdom=$env{'course.'.$cid.'.domain'}; - my %sections; - my $numsections=&Apache::loncommon::get_sections($cdom,$cnum,\%sections); + my %sections = &Apache::loncommon::get_sections($cdom,$cnum); + my $size=5; if (scalar(keys(%sections)) < 3) { $size=scalar(keys(%sections))+2; @@ -214,7 +235,7 @@ sub add_grading_button { 'gradingdomain'); $result.=&Apache::loncommon::studentbrowser_javascript(); $result.= '
'; - } + } return $result; } @@ -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; } @@ -349,12 +377,15 @@ sub webgrade_standard_info { my %lt=&Apache::lonlocal::texthash('done' => 'Next Item', 'stop' => 'Quit Grading', + 'fail' => 'Fail Rest', ); my $result=<