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

foxr lon-capa-cvs@mail.lon-capa.org
Thu, 03 Nov 2005 11:10:27 -0000


foxr		Thu Nov  3 06:10:27 2005 EDT

  Modified files:              
    /loncom/homework	structuretags.pm 
  Log:
  Use numerical date comparisons when figuring out if duedates match
  in printing.  This is positioning myself to do modifications to how
  printed due dates work.
  
  
  
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.307 loncom/homework/structuretags.pm:1.308
--- loncom/homework/structuretags.pm:1.307	Tue Nov  1 16:52:47 2005
+++ loncom/homework/structuretags.pm	Thu Nov  3 06:10:25 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: structuretags.pm,v 1.307 2005/11/01 21:52:47 albertel Exp $
+# $Id: structuretags.pm,v 1.308 2005/11/03 11:10:25 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -422,19 +422,28 @@
 ENDCHECKOUT
 }
 
+# initializes the problem globals across the inputtags, lonhomework, and 
+# structuretags modules.
+#
+# 
 sub init_problem_globals {
     my ($type)=@_;
     #initialize globals
+    #   For problems, we start out in part 0 (outside a <part> tag).
+    #   and part 0 is used to describe the main body of the <problem>
+    #
     if ($type eq 'problem') {
 	$Apache::inputtags::part='0';
 	@Apache::inputtags::partlist=('0');
 	$Apache::lonhomework::problemstatus=&get_problem_status('0');
 	$Apache::lonhomework::ignore_response_errors=0;
+
     } elsif ($type eq 'library') {
 	$Apache::inputtags::part='';
 	@Apache::inputtags::partlist=();
 	$Apache::lonhomework::problemstatus='';	
 	$Apache::lonhomework::ignore_response_errors=1;
+
     } elsif ($type eq 'Task') {
 	$Apache::inputtags::part='0';
 	@Apache::inputtags::partlist=('0');
@@ -490,6 +499,9 @@
 sub start_problem {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
 
+    # Problems don't nest and we don't allow more than one <problem> in
+    # a .problem file.
+    #
     if ( $Apache::inputtags::part ne '' ||
 	 $Apache::lonhomework::parsing_a_problem) {
 	&Apache::lonxml::error('Only one &lt;problem&gt; allowed in a .problem file');
@@ -653,25 +665,37 @@
 			    '.disableexampointprint'}) eq 'yes') {
 		$allow_print_points=0;
 	    }
-	    my $duedate = &Apache::lonnet::EXT("resource.$id.duedate"); 
-	    $duedate = POSIX::strftime("%c",localtime($duedate));
-	    my $temp_file;
-	    my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due";
-	    if (-e $filename) {
-		$temp_file = Apache::File->new($filename);
-	    } else {
-		$temp_file = Apache::File->new('>>'.$filename);
-	    }
-	    my @due_file_content = <$temp_file>;
-	    my $due_file_content = $due_file_content[$#due_file_content];
-	    chomp $due_file_content;
 	    my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');
 	    my $begin_doc='\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent ';
 	    my $toc_line='\vskip 1 mm\noindent '.$startminipage.
 		'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}';
-	    if ($due_file_content ne $duedate) {
+
+	    #  Figure out what the due date is and if we need to print it in the problem header.
+	    #  We have been logging the last due date written to file.  
+	    #
+
+
+	    my $duetime = &Apache::lonnet::EXT("resource.$id.duedate"); 
+	    my $duedate = POSIX::strftime("%c",localtime($duetime));
+	    my $temp_file;
+	    my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due";
+
+	    # Figure out what the last printed due date is or set it to the epoch if no duedates
+	    # have been printed.
+
+	    my $due_file_content = 0;      #   If the file does not yet exist, time is the epoch.
+	    if (-e $filename) {
+		$temp_file = Apache::File->new($filename);
+		my @due_file      = <$temp_file>;
+		$due_file_content = $due_file[$#due_file];
+		chomp $due_file_content;
+	    } 
+	    # The big change; Due do the comparison on 
+	    # the absolute time rather than textual time since that is format independent.
+	    #
+	    if ($due_file_content ne $duetime) {
 		$temp_file = Apache::File->new('>'.$filename);
-		print $temp_file "$duedate\n";
+		print $temp_file "$duetime\n";
 		if (not $env{'request.symb'} =~ m/\.page_/) {
 		    if(not $duedate=~m/1969/ and $Apache::lonhomework::type ne 'exam') {
 			$result .= $begin_doc.