--- loncom/homework/lonhomework.pm 2004/03/09 20:37:58 1.171
+++ loncom/homework/lonhomework.pm 2004/11/13 20:40:32 1.183
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Homework handler
#
-# $Id: lonhomework.pm,v 1.171 2004/03/09 20:37:58 albertel Exp $
+# $Id: lonhomework.pm,v 1.183 2004/11/13 20:40:32 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -52,7 +52,7 @@ use Apache::Constants qw(:common);
use HTML::Entities();
use Apache::loncommon();
use Apache::lonlocal;
-#use Time::HiRes qw( gettimeofday tv_interval );
+use Time::HiRes qw( gettimeofday tv_interval );
BEGIN {
&Apache::lonxml::register_insert();
@@ -207,11 +207,11 @@ sub check_access {
if ( ! ($ENV{'form.problemstate'} eq 'CANNOT_ANSWER_correct' &&
lc($Apache::lonhomework::problemstatus) eq 'no')) {
return ('CANNOT_ANSWER',
- &mt('is in this state by royal decree.'));
+ &mt('is in this state due to author settings.'));
}
} else {
return ($ENV{'form.problemstate'},
- &mt('is in this state by royal decree.'));
+ &mt('is in this state due to author settings.'));
}
}
&Apache::lonxml::debug("in construction ignoring dates");
@@ -292,7 +292,26 @@ sub check_access {
$status = 'CANNOT_ANSWER';
}
}
-
+ if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') {
+ my $interval=&Apache::lonnet::EXT("resource.$id.interval");
+ &Apache::lonxml::debug("looking for interval $interval");
+ if ($interval) {
+ my $first_access=&Apache::lonnet::get_first_access('map');
+ &Apache::lonxml::debug("looking for accesstime $first_access");
+ if (!$first_access) {
+ $status='NOT_YET_VIEWED';
+ $datemsg=' '.$interval.' seconds';
+ } else {
+ my $newdate=localtime($first_access+$interval);
+ if (time > ($first_access+$interval)) {
+ $status='CLOSED';
+ $datemsg = &mt("was due on")." $newdate".&mt(", and answers will be available on")." $date";
+ } else {
+ $datemsg = &mt("is due at")." $newdate";
+ }
+ }
+ }
+ }
#if (($status ne 'CLOSED') && ($Apache::lonhomework::type eq 'exam') &&
# (!$Apache::lonhomework::history{"resource.0.outtoken"})) {
# return ('UNCHECKEDOUT','needs to be checked out');
@@ -430,17 +449,21 @@ sub handle_save_or_undo {
sub analyze_header {
my ($request) = @_;
+ my $bodytag='
';
+ if ($ENV{'environment.remote'} eq 'off') {
+ $bodytag=&Apache::loncommon::bodytag();
+ }
my $result.='
'.&mt("Analyzing a problem").'
- '.&Apache::lonxml::message_location().'
+ '.$bodytag.&Apache::lonxml::message_location().'
';
&Apache::lonxml::add_messages(\$result);
$request->print($result);
@@ -465,10 +488,12 @@ sub analyze {
my %prog_state=
&Apache::lonhtmlcommon::Create_PrgWin($request,&mt('Analyze Progress'),
&mt('Getting Problem Variants'),
- $ENV{'form.numtoanalyze'});
+ $ENV{'form.numtoanalyze'},
+ 'inline',undef);
for(my $i=1;$i<$ENV{'form.numtoanalyze'}+1;$i++) {
&Apache::lonhtmlcommon::Increment_PrgWin($request,\%prog_state,
&mt('last problem'));
+ if (&Apache::loncommon::connection_aborted($request)) { return; }
my $subresult=&Apache::lonnet::ssi($request->uri,
('grade_target' => 'analyze'),
('rndseed' => $i+$rndseed));
@@ -490,6 +515,7 @@ sub analyze {
}
&Apache::lonhtmlcommon::Update_PrgWin($request,\%prog_state,
&mt('Analyzing Results'));
+ $request->print('
'.&mt('List of possible answers').': ');
foreach my $part (sort(keys(%allparts))) {
if (defined(@{ $overall{$part.'.answer'} })) {
my $num_cols=scalar(@{ $overall{$part.'.answer'}->[0] });
@@ -545,15 +571,19 @@ sub editxmlmode {
&Apache::loncommon::helpLatexCheatsheet("Problem_Editor_XML_Index",
"Problem Editing Help").
''.
- &Apache::loncommon::help_open_faq(5).
- &Apache::loncommon::help_open_bug('Authoring').' | ';
+ &Apache::loncommon::help_open_menu('',undef,undef,undef,5,'Authoring').
+ '';
if ($cols > 80) { $cols = 80; }
if ($cols < 70) { $cols = 70; }
if ($rows < 20) { $rows = 20; }
- $result.=''.
- &Apache::lonxml::message_location().'
+ my $bodytag='';
+ if ($ENV{'environment.remote'} eq 'off') {
+ $bodytag=&Apache::loncommon::bodytag();
+ }
+ $result.=''.$bodytag.&Apache::lonxml::message_location().'
';
&Apache::lonxml::add_messages(\$result);
$request->print($result);
@@ -580,6 +610,13 @@ sub renderpage {
&Apache::lonxml::debug("Running targets ".join(':',@targets));
my $overall_result;
foreach my $target (@targets) {
+ # FIXME need to do something intelligent when a problem goes
+ # from viewable to not viewable due to map conditions
+ #&setuppermissions();
+ #if ( $Apache::lonhomework::browse ne '2'
+ # && $Apache::lonhomework::browse ne 'F' ) {
+ # $request->print(" You most likely shouldn't see me.");
+ #}
#my $t0 = [&gettimeofday()];
my $problem=&Apache::lonnet::getfile($file);
if ($problem eq -1) {
@@ -668,8 +705,8 @@ sub newproblem {
copy($templatefilename,$dest);
&renderpage($request,$dest);
} else {
- my $url=$request->uri;
- my $shownurl=$url;
+ my $url=&HTML::Entities::encode($request->uri,'<>&"');
+ my $shownurl=$url;
$shownurl=~s-^/~-/priv/-;
my $dest = &Apache::lonnet::filelocation("",$request->uri);
my $errormsg;
@@ -708,7 +745,7 @@ ENDNEWPROBLEM
sub view_or_edit_menu {
my ($request) = @_;
- my $url=$request->uri;
+ my $url=&HTML::Entities::encode($request->uri,'<>&"');
my %lt=&Apache::lonlocal::texthash( 'would' => 'Would you like to',
'view' => 'View',
'Edit' => 'edit',
@@ -732,10 +769,7 @@ sub handler {
$Apache::lonxml::debug=$ENV{'user.debug'};
if (&setupheader($request)) { return OK; }
$ENV{'request.uri'}=$request->uri;
-
- #setup permissions
- $Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'});
- $Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
+ &setuppermissions();
&Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:");
# some times multiple problemmodes are submitted, need to select
# the last one
@@ -753,7 +787,8 @@ sub handler {
#check if we know where we are
if ($ENV{'request.course.fn'} && !&Apache::lonnet::symbread()) {
# if we are browsing we might not be able to know where we are
- if ($Apache::lonhomework::browse ne 'F') {
+ if ($Apache::lonhomework::browse ne 'F' &&
+ $ENV{'request.state'} ne "construct") {
#should know where we are, so ask
if ( &Apache::lonnet::mod_perl_version() == 2 ) {
&Apache::lonnet::cleanenv();