[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 <problem> 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.