--- loncom/homework/lonhomework.pm 2001/01/06 16:35:36 1.27 +++ loncom/homework/lonhomework.pm 2001/08/20 23:31:07 1.57 @@ -1,7 +1,7 @@ # The LON-CAPA Homework handler # Guy Albertelli # 11/30 Gerd Kortemeyer -# 6/1 Gerd Kortemeyer +# 6/1,8/17,8/18 Gerd Kortemeyer package Apache::lonhomework; use strict; @@ -12,24 +12,44 @@ 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.submit'}) { + 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.submit'}) { + if ( defined $ENV{'form.submitted'}) { return ('grade', 'web'); } else { return ('web'); } } else { - return ('edit'); + 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 (); @@ -44,19 +64,28 @@ sub setup_vars { sub send_header { my ($request)= @_; $request->print(&Apache::lontexconvert::header()); - $ENV{'request.uri'}=$request->uri; # $request->print('
'); $request->print(&Apache::lontexconvert::footer()); } -#@Apache::lonhomework::date_status=(); -#@Apache::lonhomework::date_msg=(); -sub check_date { +$Apache::lonxml::browse=''; + +sub check_access { my ($id) = @_; my $date =''; my $status = ''; @@ -72,6 +101,8 @@ sub check_date { &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; @@ -90,7 +121,7 @@ sub check_date { $datemsg = "is due at $date"; } elsif ($type eq 'answerdate') { $status='CLOSED'; - $datemsg = "was due as $lastdate, and answers will be available at $date"; + $datemsg = "was due on $lastdate, and answers will be available on $date"; } if ($status eq 'CAN_ANSWER') { #check #tries @@ -100,7 +131,19 @@ sub check_date { if ( $maxtries eq '' ) { $maxtries = '2'; } if ($tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } } + + if (($status ne 'CLOSED') && ($Apache::lonhomework::type eq 'exam') && + (!$Apache::lonhomework::history{"resource.0.outtoken"})) { + return ('UNCHECKEDOUT','needs to be checked out'); + } + + &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'; @@ -109,13 +152,46 @@ sub check_date { return ($status,$datemsg); } -sub handler { - my $request=$_[0]; +# ----------------------------------------------------------------- whichuser +# returns a list of $symb, $courseid, $domain, $name that is correct for +# calls to lonnet functions for this setup. +# - looks for form.grade_ parameters +sub whichuser { + my $symb=&Apache::lonnet::symbread(); + my $courseid=$ENV{'request.course.id'}; + my $domain=$ENV{'user.domain'}; + my $name=$ENV{'user.name'}; + if (defined($ENV{'form.grade_symb'})) { + my $tmp_courseid=$ENV{'form.grade_courseid'}; + my $allowed=&Apache::lonnet::allowed('mgr',$tmp_courseid); + if ($allowed) { + $symb=$ENV{'form.grade_symb'}; + $courseid=$ENV{'form.grade_courseid'}; + $domain=$ENV{'form.grade_domain'}; + $name=$ENV{'form.grade_username'}; + } + } + return ($symb,$courseid,$domain,$name); +} - if ( $ENV{'user.name'} eq 'albertel' ) { $Apache::lonxml::debug=1; } - - my (@targets) = &get_target(); +sub showhash { + my (%hash) = @_; + my $resultkey; + foreach $resultkey (sort keys %hash) { + &Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}"); + } + &Apache::lonxml::debug("\n