version 1.188, 2004/12/20 12:16:47
|
version 1.194, 2005/01/28 09:49:52
|
Line 54 use Apache::loncommon();
|
Line 54 use Apache::loncommon();
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Apache::lonnet(); |
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. |
# FIXME - improve commenting |
|
|
$Apache::lonhomework::viewgrades = 'F'; # By default cannot. |
|
|
|
# Internal variables. |
|
|
|
my $DEBUG=0; # set nonzero to enable debugging. |
|
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register_insert(); |
&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 |
# Decides what targets to render for. |
# problem based on the context of the rendering? |
|
# Implicit inputs: |
# Implicit inputs: |
# Various session environment variables: |
# Various session environment variables: |
# request.state - State of the resource actually ?? |
# request.state - published - is a /res/ resource |
# published - Examining in resource space. |
# uploaded - is a /uploaded/ resource |
# uploaded - Not sure how this happens????? |
# contruct - is a /priv/ resource |
# contruct - Rendering in construction space for viewing. |
# form.grade_target - a form parameter requesting a specific target |
# form.grade_target - |
|
sub get_target { |
sub get_target { |
&Debug("request.state = $ENV{'request.state'}"); |
&Apache::lonxml::debug("request.state = $ENV{'request.state'}"); |
if( defined($ENV{'form.grade_target'})) { |
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 { |
} else { |
&Debug("form.grade_target <undefined>"); |
&Apache::lonxml::debug("form.grade_target <undefined>"); |
} |
} |
if (($ENV{'request.state'} eq "published") || |
if (($ENV{'request.state'} eq "published") || |
($ENV{'request.state'} eq "uploaded")) { |
($ENV{'request.state'} eq "uploaded")) { |
Line 160 sub get_target {
|
Line 115 sub get_target {
|
} else { |
} else { |
return ('web','answer'); |
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.submitted'} eq 'edit' ) { |
if ( $ENV{'form.submit'} eq &mt('Submit Changes and View') ) { |
if ( $ENV{'form.submit'} eq &mt('Submit Changes and View') ) { |
return ('modified','web','answer'); |
return ('modified','web','answer'); |
Line 364 sub check_access {
|
Line 320 sub check_access {
|
&Apache::lonxml::debug("looking for accesstime $first_access"); |
&Apache::lonxml::debug("looking for accesstime $first_access"); |
if (!$first_access) { |
if (!$first_access) { |
$status='NOT_YET_VIEWED'; |
$status='NOT_YET_VIEWED'; |
$datemsg=' '.$interval.' seconds'; |
$datemsg=&seconds_to_human_length($interval); |
} else { |
} else { |
my $newdate=localtime($first_access+$interval); |
my $newdate=localtime($first_access+$interval); |
if (time > ($first_access+$interval)) { |
if (time > ($first_access+$interval)) { |
Line 392 sub check_access {
|
Line 348 sub check_access {
|
return ($status,$datemsg); |
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 { |
sub showhash { |
my (%hash) = @_; |
my (%hash) = @_; |
&showhashsubset(\%hash,'.'); |
&showhashsubset(\%hash,'.'); |
Line 402 sub showarray {
|
Line 377 sub showarray {
|
my ($array)=@_; |
my ($array)=@_; |
my $string="("; |
my $string="("; |
foreach my $elm (@{ $array }) { |
foreach my $elm (@{ $array }) { |
if (ref($elm)) { |
if (ref($elm) eq 'ARRAY') { |
if ($elm =~ /ARRAY/ ) { |
$string.=&showarray($elm); |
$string.=&showarray($elm); |
} elsif (ref($elm) eq 'HASH') { |
} |
$string.= "HASH --- \n<br />"; |
|
$string.= &showhashsubset($elm,'.'); |
} else { |
} else { |
$string.="$elm," |
$string.="$elm," |
} |
} |
Line 419 sub showhashsubset {
|
Line 395 sub showhashsubset {
|
my ($hash,$keyre) = @_; |
my ($hash,$keyre) = @_; |
my $resultkey; |
my $resultkey; |
foreach $resultkey (sort keys %$hash) { |
foreach $resultkey (sort keys %$hash) { |
if ($resultkey =~ /$keyre/) { |
if ($resultkey !~ /$keyre/) { next; } |
if (ref($$hash{$resultkey})) { |
if (ref($$hash{$resultkey}) eq 'ARRAY' ) { |
if ($$hash{$resultkey} =~ /ARRAY/ ) { |
&Apache::lonxml::debug("$resultkey ---- ". |
&Apache::lonxml::debug("$resultkey ---- ". |
&showarray($$hash{$resultkey})); |
&showarray($$hash{$resultkey})); |
} elsif (ref($$hash{$resultkey}) eq 'HASH' ) { |
} elsif ($$hash{$resultkey} =~ /HASH/ ) { |
&Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); |
&Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); |
&showhashsubset($$hash{$resultkey},'.'); |
&showhashsubset($$hash{$resultkey},'.'); |
} else { |
} else { |
&Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); |
&Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); |
|
} |
|
} else { |
|
&Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); |
|
} |
|
} |
} |
} |
} |
&Apache::lonxml::debug("\n<br />restored values^</br>\n"); |
&Apache::lonxml::debug("\n<br />restored values^</br>\n"); |
Line 468 sub setupheader {
|
Line 439 sub setupheader {
|
if (!$Apache::lonxml::debug && ($ENV{'REQUEST_METHOD'} eq 'GET')) { |
if (!$Apache::lonxml::debug && ($ENV{'REQUEST_METHOD'} eq 'GET')) { |
&Apache::loncommon::no_cache($request); |
&Apache::loncommon::no_cache($request); |
} |
} |
|
$request->set_last_modified(&Apache::lonnet::metadata($request->uri, |
|
'lastrevisiondate'); |
$request->send_http_header; |
$request->send_http_header; |
return OK if $request->header_only; |
return OK if $request->header_only; |
return '' |
return '' |
Line 671 sub editxmlmode {
|
Line 644 sub editxmlmode {
|
} |
} |
return ''; |
return ''; |
} |
} |
|
|
# |
# |
# Render the page in whatever target desired. |
# Render the page in whatever target desired. |
# |
# |
|
|
sub renderpage { |
sub renderpage { |
my ($request,$file) = @_; |
my ($request,$file) = @_; |
|
|
Line 843 sub handler {
|
Line 816 sub handler {
|
$Apache::lonxml::debug=$ENV{'user.debug'}; |
$Apache::lonxml::debug=$ENV{'user.debug'}; |
$ENV{'request.uri'}=$request->uri; |
$ENV{'request.uri'}=$request->uri; |
&setuppermissions(); |
&setuppermissions(); |
&Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:"); |
|
# some times multiple problemmodes are submitted, need to select |
# some times multiple problemmodes are submitted, need to select |
# the last one |
# the last one |
&Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); |
if ( defined($ENV{'form.problemmode'}) && ref($ENV{'form.problemmode'}) ) { |
if ( defined($ENV{'form.problemmode'}) && |
|
ref($ENV{'form.problemmode'}) ) { |
|
&Apache::lonxml::debug("Problem Mode ".join(",",@$ENV{'form.problemmode'})); |
|
my $mode=$ENV{'form.problemmode'}->[-1]; |
my $mode=$ENV{'form.problemmode'}->[-1]; |
undef $ENV{'form.problemmode'}; |
undef $ENV{'form.problemmode'}; |
$ENV{'form.problemmode'}=$mode; |
$ENV{'form.problemmode'}=$mode; |
} |
} |
&Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); |
|
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
|
|
#check if we know where we are |
#check if we know where we are |
Line 866 sub handler {
|
Line 835 sub handler {
|
if ( &Apache::lonnet::mod_perl_version() == 2 ) { |
if ( &Apache::lonnet::mod_perl_version() == 2 ) { |
&Apache::lonnet::cleanenv(); |
&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; } |
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(); |
my ($symb) = &Apache::lonxml::whichuser(); |
&Apache::lonxml::debug('symb is '.$symb); |
&Apache::lonxml::debug('symb is '.$symb); |
if ($ENV{'request.state'} eq "construct" || $symb eq '') { |
if ($ENV{'request.state'} eq "construct" || $symb eq '') { |
Line 891 sub handler {
|
Line 862 sub handler {
|
#&view_or_edit_menu($request); |
#&view_or_edit_menu($request); |
$ENV{'form.problemmode'}='View'; |
$ENV{'form.problemmode'}='View'; |
&renderpage($request,$file); |
&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); |
&editxmlmode($request,$file); |
} elsif ($ENV{'form.problemmode'} eq &mt('Calculate answers')) { |
} elsif ($ENV{'form.problemmode'} eq &mt('Calculate answers')) { |
&analyze($request,$file); |
&analyze($request,$file); |