--- loncom/homework/bridgetask.pm 2006/06/16 09:27:38 1.173 +++ loncom/homework/bridgetask.pm 2006/06/20 03:33:55 1.174 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.173 2006/06/16 09:27:38 albertel Exp $ +# $Id: bridgetask.pm,v 1.174 2006/06/20 03:33:55 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -83,7 +83,12 @@ sub proctor_check_auth { } } if ($authenticated) { - &create_new_version($type,$user,$domain,$slot_name); + my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); + if ( $useslots eq 'map_map') { + &checkin_resource($user,$domain,$slot_name); + } else { + &create_new_version($type,$user,$domain,$slot_name); + } return 1; } } @@ -91,8 +96,42 @@ sub proctor_check_auth { return 0; } +sub check_in { + my ($type,$user,$domain,$slot_name) = @_; + my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); + if ( $useslots eq 'map_map') { + &check_in_sequence($user,$domain,$slot_name); + } else { + &create_new_version($type,$user,$domain,$slot_name); + } + return 1; +} + +sub check_in_sequence { + my ($user,$domain,$slot_name) = @_; + my $navmap = Apache::lonnavmaps::navmap->new(); + my ($symb) = &Apache::lonxml::whichuser(); + my ($map) = &Apache::lonnet::decode_symb($symb); + my @resources = $navmap->retrieveResources($map,undef,1,0); + my %old_history = %Apache::lonhomework::history; + my %old_results = %Apache::lonhomework::results; + + foreach my $res (@resources) { + &Apache::lonxml::debug("doing ".$res->src); + &Apache::structuretags::initialize_storage($res->symb); + my $type = ($res->is_task()) ? 'Task' : 'problem'; + &create_new_version($type,$user,$domain,$slot_name); + &Apache::structuretags::finalize_storage($res->symb); + } + + %Apache::lonhomework::history = %old_history; + %Apache::lonhomework::results = %old_results; +} + sub create_new_version { my ($type,$user,$domain,$slot_name) = @_; + + my $id = '0'; if ($type eq 'Task') { # increment version my $version= @@ -107,28 +146,24 @@ sub create_new_version { } #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; + $Apache::lonhomework::results{'resource.0.version'}=$version; + $id = "$version.0"; + if (!defined($user) || defined($domain)) { + $user = $env{'user.name'}; + $domain = $env{'user.domain'}; } + } 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; - } + } + + if (defined($user) && defined($domain)) { + $Apache::lonhomework::results{"resource.$id.checkedin"}= + $user.':'.$domain; + } + if (defined($slot_name)) { + $Apache::lonhomework::results{"resource.$id.checkedin.slot"}= + $slot_name; } } @@ -563,7 +598,9 @@ sub start_Task { ($status,$accessmsg,my $slot_name,$slot) = &Apache::lonhomework::check_slot_access('0','Task'); if ($status eq 'CAN_ANSWER' && $version eq '') { - &create_new_version('Task',undef,undef,$slot_name); + # CAN_ANSWR mode, and no current version, unproctored access + # thus self-checkedin + &check_in('Task',undef,undef,$slot_name); &add_to_queue('gradingqueue',{'type' => 'Task', 'time' => time, 'slot' => $slot_name});