# The LON-CAPA homework handler # # Handles homework. # # YEAR=2000 # 7/25,8/2,8/7,8/8,8/11,9/14,9/19,10/2,10/5,10/11,11/7,11/21 Guy Albertelli # 11/30 Gerd Kortemeyer # 12/4,12/8,12/12,12/15,12/19,12/21 Guy Albertelli # YEAR=2001 # 1/6,1/8,1/9,1/10,1/11,1/12,1/15,1/25,2/7,2/13,2/19,4/16,4/26 Guy Albertelli # 5/4,5/13,5/21 Guy Albertelli # 6/1 Gerd Kortemeyer # 6/5,6/12,6/26,7/2,7/18 Guy Albertelli # 8/6 Scott Harrison package Apache::lonhomework; use strict; use Apache::style; use Apache::lonxml; use Apache::lonnet; use Apache::inputtags; use Apache::structuretags; use Apache::response; use Apache::hint; use Apache::outputtags; use Apache::Constants qw(:common); #use Time::HiRes qw( gettimeofday tv_interval ); # ======================================================================= BEGIN sub BEGIN { &Apache::lonxml::register_insert(); } # =============================================== Get target (returns an array) sub get_target { if ( $ENV{'request.state'} eq "published") { if ( defined $ENV{'form.submitted'}) { return ('grade','web'); } else { return ('web'); } } elsif ($ENV{'request.state'} eq "construct") { if ( defined $ENV{'form.preview'}) { if ( defined $ENV{'form.submitted'}) { return ('grade','web'); } else { return ('web'); } } else { if ( $ENV{'form.problemmode'} eq 'View' ) { if ( defined $ENV{'form.submitted'}) { return ('grade','web'); } else { return ('web'); } } elsif ( $ENV{'form.problemmode'} eq 'Edit' ) { if ( $ENV{'form.submitted'} eq 'edit' ) { return ('modified','edit'); } else { return ('edit'); } } else { return ('web'); } } } return (); } # ===================================== Set up variables (return scalar string) sub setup_vars { my ($target) = @_; return ';' # return ';$external::target='.$target.';'; } # ================================================================= Send header sub send_header { my ($request) = @_; $request->print(&Apache::lontexconvert::header()); # $request->print('
'); $request->print(&Apache::lontexconvert::footer()); } $Apache::lonxml::browse = ''; # =============================================== Check date (returns an array) sub check_date { my ($id) = @_; my $date =''; my $status = ''; my $datemsg = ''; my $lastdate = ''; my $temp; my $type; my $passed; &Apache::lonxml::debug("checking for part :$id:"); foreach $temp ("opendate","duedate","answerdate") { $lastdate = $date; $date = &Apache::lonnet::EXT("resource.$id.$temp"); &Apache::lonxml::debug("found :$date: for :$temp:"); if ($date eq '') { $date = "an unknown date"; $passed = 0; } elsif ($date eq 'con_lost') { $date = "an indeterminate date"; $passed = 0; } else { if (time < $date) { $passed = 0; } else { $passed = 1; } $date = localtime $date; } if (!$passed) { $type = $temp; last; } } &Apache::lonxml::debug("have :$type:$passed:"); if ($passed) { $status = 'SHOW_ANSWER'; $datemsg = $date; } elsif ($type eq 'opendate') { $status = 'CLOSED'; $datemsg = "will open on $date"; } elsif ($type eq 'duedate') { $status = 'CAN_ANSWER'; $datemsg = "is due at $date"; } elsif ($type eq 'answerdate') { $status = 'CLOSED'; $datemsg = "was due on $lastdate, and answers will be available on ". "$date"; } if ($status eq 'CAN_ANSWER') { #check #tries my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); if ( $tries eq '' ) { $tries = '0'; } if ( $maxtries eq '' ) { $maxtries = '2'; } if ($tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } } &Apache::lonxml::debug("sending back :$status:$datemsg:"); if (($Apache::lonhomework::browse eq 'F') && ($status eq 'CLOSED')) { &Apache::lonxml::debug("should be allowed to browse a resource when ". "closed"); $status = 'CAN_ANSWER'; $datemsg = 'is closed but you are allowed to view it'; } if ($ENV{'request.state'} eq "construct") { &Apache::lonxml::debug("in construction ignoring dates"); $status = 'CAN_ANSWER'; $datemsg = 'is in under construction'; } return ($status,$datemsg); } # ================================================================== Shows hash sub showhash { my (%hash) = @_; my $resultkey; foreach $resultkey (sort keys %hash) { &Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}"); } &Apache::lonxml::debug("\n