--- loncom/homework/lonhomework.pm 2004/12/20 12:16:47 1.188 +++ loncom/homework/lonhomework.pm 2005/01/11 19:38:53 1.192 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.188 2004/12/20 12:16:47 foxr Exp $ +# $Id: lonhomework.pm,v 1.192 2005/01/11 19:38:53 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -54,74 +54,29 @@ use Apache::loncommon(); use Apache::lonlocal; use Time::HiRes qw( gettimeofday tv_interval ); use Apache::lonnet(); -# -# FIXME!!!!!!! -# Be nice if someone -# - Took credit/blame for this module. -# - At least commented the purpose of each major -# sub -# - Even better commented the major blocks. -# -# I'll have a go at it for what I need. -# ?'s- mean maybe this is right. -# The number of ?'s represents the rough level -# of doubt I have about rightness, with ??? representing -# uncertainty based on the first blush interpretation. -# ?? - I have some code to back up this interpretation. -# ? - I"m pretty sure I understand the code that backs up this -# interpretation. -# ???? - Absolutely clueless. -# . - I'm pretty sure the interpretation is correct. -# RF. - - -# 'Exported' Variables: - -# viewgrades is 'F' if users are not allowed to view the grades.. T otherwise. -$Apache::lonhomework::viewgrades = 'F'; # By default cannot. +# FIXME - improve commenting -# Internal variables. - -my $DEBUG=0; # set nonzero to enable debugging. BEGIN { &Apache::lonxml::register_insert(); } -# -# Issue debug log messages. -# Parameters: -# The log message to issue. -# Implicit Inputs: -# DEBUG - If non zero the message is issued, otherwise not. -# -sub Debug { - my ($message) = @_; - - if($DEBUG) { - my @call_context = caller(1); - my $prefix = "$call_context[3]:$call_context[2]:: "; - &Apache::lonnet::logthis($prefix.$message); - } -} # -# I believe this sub defines how to render the -# problem based on the context of the rendering? +# Decides what targets to render for. # Implicit inputs: # Various session environment variables: -# request.state - State of the resource actually ?? -# published - Examining in resource space. -# uploaded - Not sure how this happens????? -# contruct - Rendering in construction space for viewing. -# form.grade_target - +# request.state - published - is a /res/ resource +# uploaded - is a /uploaded/ resource +# contruct - is a /priv/ resource +# form.grade_target - a form parameter requesting a specific target sub get_target { - &Debug("request.state = $ENV{'request.state'}"); + &Apache::lonxml::debug("request.state = $ENV{'request.state'}"); if( defined($ENV{'form.grade_target'})) { - &Debug("form.grade_target = $ENV{'form.grade_target'}"); + &Apache::lonxml::debug("form.grade_target= $ENV{'form.grade_target'}"); } else { - &Debug("form.grade_target "); + &Apache::lonxml::debug("form.grade_target "); } if (($ENV{'request.state'} eq "published") || ($ENV{'request.state'} eq "uploaded")) { @@ -160,7 +115,8 @@ sub get_target { } else { return ('web','answer'); } - } elsif ( $ENV{'form.problemmode'} eq &mt('Edit') ) { + } elsif ( $ENV{'form.problemmode'} eq &mt('Edit') || + $ENV{'form.problemmode'} eq 'Edit') { if ( $ENV{'form.submitted'} eq 'edit' ) { if ( $ENV{'form.submit'} eq &mt('Submit Changes and View') ) { return ('modified','web','answer'); @@ -364,7 +320,7 @@ sub check_access { &Apache::lonxml::debug("looking for accesstime $first_access"); if (!$first_access) { $status='NOT_YET_VIEWED'; - $datemsg=' '.$interval.' seconds'; + $datemsg=&seconds_to_human_length($interval); } else { my $newdate=localtime($first_access+$interval); if (time > ($first_access+$interval)) { @@ -392,6 +348,25 @@ sub check_access { return ($status,$datemsg); } +sub seconds_to_human_length { + my ($length)=@_; + + my $seconds=$length%60; $length=int($length/60); + my $minutes=$length%60; $length=int($length/60); + my $hours=$length%24; $length=int($length/24); + my $days=$length; + + my $timestr; + if ($days > 0) { $timestr.=&mt('[quant,_1,day]',$days); } + if ($hours > 0) { $timestr.=($timestr?", ":""). + &mt('[quant,_1,hour]',$hours); } + if ($minutes > 0) { $timestr.=($timestr?", ":""). + &mt('[quant,_1,minute]',$minutes); } + if ($seconds > 0) { $timestr.=($timestr?", ":""). + &mt('[quant,_1,second]',$seconds); } + return $timestr; +} + sub showhash { my (%hash) = @_; &showhashsubset(\%hash,'.'); @@ -671,10 +646,10 @@ sub editxmlmode { } return ''; } + # # Render the page in whatever target desired. # - sub renderpage { my ($request,$file) = @_; @@ -866,7 +841,8 @@ sub handler { if ( &Apache::lonnet::mod_perl_version() == 2 ) { &Apache::lonnet::cleanenv(); } - $request->internal_redirect('/adm/ambiguous'); return; + &Apache::lonnet::logthis(&Apache::lonnet::mod_perl_version()); + $request->internal_redirect('/adm/ambiguous'); return OK; } } if (&setupheader($request)) { return OK; } @@ -891,7 +867,8 @@ sub handler { #&view_or_edit_menu($request); $ENV{'form.problemmode'}='View'; &renderpage($request,$file); - } elsif ($ENV{'form.problemmode'} eq &mt('EditXML')) { + } elsif ($ENV{'form.problemmode'} eq &mt('EditXML') || + $ENV{'form.problemmode'} eq 'EditXML') { &editxmlmode($request,$file); } elsif ($ENV{'form.problemmode'} eq &mt('Calculate answers')) { &analyze($request,$file);