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

albertel lon-capa-cvs@mail.lon-capa.org
Fri, 12 May 2006 06:55:49 -0000


albertel		Fri May 12 02:55:49 2006 EDT

  Modified files:              
    /loncom/homework	bridgetask.pm 
  Log:
  -when visiting a non-slotted (and thus non0proctored) resource need to create  a new version on the frist viewing.
  
  - if instance creation occurs when version is blank dont' store the resutls.
  
  
Index: loncom/homework/bridgetask.pm
diff -u loncom/homework/bridgetask.pm:1.149 loncom/homework/bridgetask.pm:1.150
--- loncom/homework/bridgetask.pm:1.149	Fri May 12 01:18:34 2006
+++ loncom/homework/bridgetask.pm	Fri May 12 02:55:46 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.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 @@
 		    $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 @@
 	$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 @@
 		       ( $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 @@
 	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 @@
 	}
 	@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;
     }