[LON-CAPA-cvs] cvs: loncom /homework bridgetask.pm lonhomework.pm structuretags.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 20 Jun 2006 03:33:56 -0000


albertel		Mon Jun 19 23:33:56 2006 EDT

  Modified files:              
    /loncom/homework	lonhomework.pm structuretags.pm bridgetask.pm 
  Log:
  - supporting checking of a sequence of resource in one swoop
  
  
Index: loncom/homework/lonhomework.pm
diff -u loncom/homework/lonhomework.pm:1.250 loncom/homework/lonhomework.pm:1.251
--- loncom/homework/lonhomework.pm:1.250	Mon Jun 12 14:45:35 2006
+++ loncom/homework/lonhomework.pm	Mon Jun 19 23:33:55 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Homework handler
 #
-# $Id: lonhomework.pm,v 1.250 2006/06/12 18:45:35 albertel Exp $
+# $Id: lonhomework.pm,v 1.251 2006/06/20 03:33:55 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -245,7 +245,8 @@
     my ($status,$datemsg)=&check_access($id);
     
     my $useslots = &Apache::lonnet::EXT("resource.$id.useslots");
-    if ($useslots ne 'resource' && $useslots ne 'map') {
+    if ($useslots ne 'resource' && $useslots ne 'map' 
+	&& $useslots ne 'map_map') {
 	return ($status,$datemsg);
     }
 
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.356 loncom/homework/structuretags.pm:1.357
--- loncom/homework/structuretags.pm:1.356	Tue May 30 08:45:37 2006
+++ loncom/homework/structuretags.pm	Mon Jun 19 23:33:55 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: structuretags.pm,v 1.356 2006/05/30 12:45:37 www Exp $
+# $Id: structuretags.pm,v 1.357 2006/06/20 03:33:55 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -342,9 +342,11 @@
 }
 
 sub initialize_storage {
+    my ($given_symb) = @_;
     undef(%Apache::lonhomework::results);
     undef(%Apache::lonhomework::history);
-    my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
+    my ($symb,$courseid,$domain,$name) = 
+	&Apache::lonxml::whichuser($given_symb);
     
     # anonymous users (CODEd exams) have no data
     if ($name eq 'anonymous' 
@@ -384,11 +386,13 @@
 # Will increment totals for attempts, students, and corrects
 # if running user has student role.  
 sub finalize_storage {
+    my ($given_symb) = @_;
     my $result;
     if (%Apache::lonhomework::results) {
 	my @remove = grep(/^INTERNAL_/,keys(%Apache::lonhomework::results));
 	delete(@Apache::lonhomework::results{@remove});
-	my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
+	my ($symb,$courseid,$domain,$name) = 
+	    &Apache::lonxml::whichuser($given_symb);
 	if ($env{'request.state'} eq 'construct' 
 	    || $symb eq ''
 	    || $Apache::lonhomework::type eq 'practice') {
Index: loncom/homework/bridgetask.pm
diff -u loncom/homework/bridgetask.pm:1.173 loncom/homework/bridgetask.pm:1.174
--- loncom/homework/bridgetask.pm:1.173	Fri Jun 16 05:27:38 2006
+++ loncom/homework/bridgetask.pm	Mon Jun 19 23:33:55 2006
@@ -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 @@
 		}
 	    }
 	    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 @@
     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 @@
 	}
 	
 	#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 @@
 	($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});