--- loncom/homework/lonhomework.pm 2004/12/17 22:30:30 1.187 +++ loncom/homework/lonhomework.pm 2005/03/01 03:24:05 1.197 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.187 2004/12/17 22:30:30 albertel Exp $ +# $Id: lonhomework.pm,v 1.197 2005/03/01 03:24:05 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -53,12 +53,31 @@ use HTML::Entities(); use Apache::loncommon(); use Apache::lonlocal; use Time::HiRes qw( gettimeofday tv_interval ); +use Apache::lonnet(); + +# FIXME - improve commenting + BEGIN { &Apache::lonxml::register_insert(); } + +# +# Decides what targets to render for. +# Implicit inputs: +# Various session environment variables: +# 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 { + &Apache::lonxml::debug("request.state = $ENV{'request.state'}"); + if( defined($ENV{'form.grade_target'})) { + &Apache::lonxml::debug("form.grade_target= $ENV{'form.grade_target'}"); + } else { + &Apache::lonxml::debug("form.grade_target "); + } if (($ENV{'request.state'} eq "published") || ($ENV{'request.state'} eq "uploaded")) { if ( defined($ENV{'form.grade_target'} ) @@ -96,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'); @@ -300,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)) { @@ -328,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,'.'); @@ -338,10 +377,11 @@ sub showarray { my ($array)=@_; my $string="("; foreach my $elm (@{ $array }) { - if (ref($elm)) { - if ($elm =~ /ARRAY/ ) { - $string.=&showarray($elm); - } + if (ref($elm) eq 'ARRAY') { + $string.=&showarray($elm); + } elsif (ref($elm) eq 'HASH') { + $string.= "HASH --- \n
"; + $string.= &showhashsubset($elm,'.'); } else { $string.="$elm," } @@ -355,20 +395,15 @@ sub showhashsubset { my ($hash,$keyre) = @_; my $resultkey; foreach $resultkey (sort keys %$hash) { - if ($resultkey =~ /$keyre/) { - if (ref($$hash{$resultkey})) { - if ($$hash{$resultkey} =~ /ARRAY/ ) { - &Apache::lonxml::debug("$resultkey ---- ". - &showarray($$hash{$resultkey})); - } elsif ($$hash{$resultkey} =~ /HASH/ ) { - &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); - &showhashsubset($$hash{$resultkey},'.'); - } else { - &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); - } - } else { - &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); - } + if ($resultkey !~ /$keyre/) { next; } + if (ref($$hash{$resultkey}) eq 'ARRAY' ) { + &Apache::lonxml::debug("$resultkey ---- ". + &showarray($$hash{$resultkey})); + } elsif (ref($$hash{$resultkey}) eq 'HASH' ) { + &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); + &showhashsubset($$hash{$resultkey},'.'); + } else { + &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); } } &Apache::lonxml::debug("\n
restored values^
\n"); @@ -384,7 +419,7 @@ sub setuppermissions { $viewgrades = &Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}. '/'.$ENV{'request.course.sec'}); } - $Apache::lonhomework::viewgrades = $viewgrades; + $Apache::lonhomework::viewgrades = $viewgrades; # File global variable...dirt. if ($Apache::lonhomework::browse eq 'F' && $ENV{'form.devalidatecourseresdata'} eq 'on') { my (undef,$courseid) = &Apache::lonxml::whichuser(); @@ -396,14 +431,12 @@ sub setuppermissions { sub setupheader { my $request=$_[0]; - if ($ENV{'browser.mathml'}) { - &Apache::loncommon::content_type($request,'text/xml'); - } else { - &Apache::loncommon::content_type($request,'text/html'); - } + &Apache::loncommon::content_type($request,'text/html'); if (!$Apache::lonxml::debug && ($ENV{'REQUEST_METHOD'} eq 'GET')) { &Apache::loncommon::no_cache($request); } +# $request->set_last_modified(&Apache::lonnet::metadata($request->uri, +# 'lastrevisiondate')); $request->send_http_header; return OK if $request->header_only; return '' @@ -459,7 +492,8 @@ sub analyze_header { if ($ENV{'environment.remote'} eq 'off') { $bodytag=&Apache::loncommon::bodytag(); } - my $result.=' + my $html=&Apache::lonxml::xmlbegin(); + my $result.=$html.' '.&mt("Analyzing a problem").' '.$bodytag.&Apache::lonxml::message_location().'
'. &Apache::structuretags::remember_problem_state().' @@ -608,6 +643,9 @@ sub editxmlmode { return ''; } +# +# Render the page in whatever target desired. +# sub renderpage { my ($request,$file) = @_; @@ -776,18 +814,14 @@ sub handler { $Apache::lonxml::debug=$ENV{'user.debug'}; $ENV{'request.uri'}=$request->uri; &setuppermissions(); - &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:"); # some times multiple problemmodes are submitted, need to select # the last one - &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); - if ( defined($ENV{'form.problemmode'}) && - ref($ENV{'form.problemmode'}) ) { - &Apache::lonxml::debug("Problem Mode ".join(",",@$ENV{'form.problemmode'})); + if ( defined($ENV{'form.problemmode'}) && ref($ENV{'form.problemmode'}) ) { my $mode=$ENV{'form.problemmode'}->[-1]; undef $ENV{'form.problemmode'}; $ENV{'form.problemmode'}=$mode; } - &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); + my $file=&Apache::lonnet::filelocation("",$request->uri); #check if we know where we are @@ -799,11 +833,13 @@ 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; } - + &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:"); + &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); my ($symb) = &Apache::lonxml::whichuser(); &Apache::lonxml::debug('symb is '.$symb); if ($ENV{'request.state'} eq "construct" || $symb eq '') { @@ -824,7 +860,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);