# The LON-CAPA Homework handler # Guy Albertelli # 11/30 Gerd Kortemeyer # 6/1 Gerd Kortemeyer 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 ); sub BEGIN { &Apache::lonxml::register_insert(); } 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 (); } sub setup_vars { my ($target) = @_; return ';' # return ';$external::target='.$target.';'; } sub send_header { my ($request)= @_; $request->print(&Apache::lontexconvert::header()); # $request->print('
'); $request->print(&Apache::lontexconvert::footer()); } $Apache::lonxml::browse=''; sub check_access { 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); } sub showhash { my (%hash) = @_; my $resultkey; foreach $resultkey (sort keys %hash) { &Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}"); } &Apache::lonxml::debug("\n