--- loncom/homework/bridgetask.pm 2010/08/23 03:24:01 1.252
+++ loncom/homework/bridgetask.pm 2010/12/31 02:40:14 1.257
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.252 2010/08/23 03:24:01 raeburn Exp $
+# $Id: bridgetask.pm,v 1.257 2010/12/31 02:40:14 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,6 +37,7 @@ use Apache::lonmenu;
use Apache::lonlocal;
use Apache::lonxml;
use Apache::slotrequest();
+use Apache::structuretags();
use Time::HiRes qw( gettimeofday tv_interval );
use LONCAPA;
@@ -380,6 +381,7 @@ sub show_task {
( $status eq 'BANNED') ||
( $status eq 'UNAVAILABLE') ||
( $status eq 'NOT_IN_A_SLOT') ||
+ ( $status eq 'NOT_YET_VIEWED') ||
( $status eq 'NEEDS_CHECKIN') ||
( $status eq 'WAITING_FOR_GRADE') ||
( $status eq 'INVALID_ACCESS') ||
@@ -545,23 +547,35 @@ sub done_screen {
my $title=&Apache::lonnet::gettitle($env{'request.uri'});
my @files=split(',',$Apache::lonhomework::history{'resource.'.$version.'.0.bridgetask.portfiles'});
my (undef,undef,$domain,$user)= &Apache::lonnet::whichuser();
- my $files = '
';
- my $msg;
- foreach my $file (@files) {
- my $url="/uploaded/$domain/$user/portfolio$file";
- if (! &Apache::lonnet::stat_file($url)) {
- $file = ''
- .&mt('[_1]Nonexistent file:[_2]'
- ,' '
- ,' '.$file.'');
- $msg .= "".&mt('Submitted non-existent file [_1]',$file)."
\n";
- } else {
- $file = ''.$file.'';
- $msg .= "".&mt('Submitted file [_1]',$file)."
\n";
- }
- $files .= '- '.$file.'
';
+ my ($msg,$files,$shown);
+ if (@files > 0) {
+ $files = '';
+ foreach my $file (@files) {
+ my $url="/uploaded/$domain/$user/portfolio$file";
+ if (! &Apache::lonnet::stat_file($url)) {
+ $file = ''
+ .&mt('[_1]Nonexistent file:[_2]'
+ ,' '
+ ,' '.$file.'');
+ $msg .= "".&mt('Submitted non-existent file [_1]',$file)."
\n";
+ } else {
+ $file = ''.$file.'';
+ $msg .= "".&mt('Submitted file [_1]',$file)."
\n";
+ }
+ $files .= '- '.$file.'
';
+ }
+ $files.='
';
+ $shown = ''.&mt('Files submitted: [_1]',$files).'
'
+ .''.&mt('You are now done with this Bridge Task').'
'
+ .'
'
+ .''.&mt('Logout').'
'
+ .''.&mt('Change to a different course').'
';
+ } else {
+ $msg = &mt("Submission status: no files currently submitted, when 'Done' was indicated.");
+ $shown = ''.
+ &mt('You did not submit any files. Please try again.').'
'.
+ ''.&mt('Back to Bridge Task').'
';
}
- $files.='
';
my $subject = &mt('Submission message for [_1]',$title);
my ($message_status,$comment_status);
my $setting = $env{'course.'.$env{'request.course.id'}.'.task_messages'};
@@ -581,15 +595,11 @@ sub done_screen {
$comment_status = ''.&mt('Message sent to instructor: [_1]',
$comment_status).'
';
}
+
return "$title
"
- .''.&mt('Files submitted: [_1]',$files).'
'
- .''.&mt('You are now done with this Bridge Task').'
'
- .'
'
- .''.&mt('Logout').'
'
-.''.&mt('Change to a different course').'
'
-.$message_status
-.$comment_status;
-
+ .$shown
+ .$message_status
+ .$comment_status;
}
sub start_Task {
@@ -619,6 +629,14 @@ sub start_Task {
&Apache::structuretags::page_start($target,$token,$tagstack,
$parstack,$parser,$safeeval,
$name,&style($target));
+
+ }
+ if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
+ $target eq 'tex') {
+ if ($env{'form.markaccess'}) {
+ my @interval=&Apache::lonnet::EXT("resource.0.interval");
+ &Apache::lonnet::set_first_access($interval[1]);
+ }
}
if ($target eq 'web' && $env{'request.state'} ne 'construct') {
@@ -661,8 +679,8 @@ sub start_Task {
my ($version,$previous)=&get_version();
($status,$accessmsg,my $slot_name,$slot) =
&Apache::lonhomework::check_slot_access('0','Task');
- if ($status eq 'CAN_ANSWER' && $version eq '') {
- # CAN_ANSWER mode, and no current version, unproctored access
+ if ((($status eq 'CAN_ANSWER') || ($status eq 'NOT_YET_VIEWED')) && ($version eq '')) {
+ # CAN_ANSWER or NOT_YET_VIEWED mode, and no current version, unproctored access
# thus self-checkedin
my $check = &check_in('Task',undef,undef,$slot_name);
if ($check =~ /^error: /) {
@@ -706,7 +724,10 @@ sub start_Task {
$msg.=''.&mt('Your submission is in the grading queue.').'
';
} elsif ($env{'form.donescreen'}) {
$result .= &done_screen($version);
- } elsif ($status ne 'NOT_YET_VIEWED') {
+ } elsif ($status eq 'NOT_YET_VIEWED') {
+ my $symb=&Apache::lonnet::symbread();
+ $msg.=&Apache::structuretags::firstaccess_msg($accessmsg,$symb);
+ } else {
$msg.=''.&mt('Not open to be viewed').'
';
}
if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
@@ -784,6 +805,11 @@ sub start_Task {
$result.=''.&mt("Stopped grading.").''.$back;
} elsif ($status_code eq 'cancel') {
$result.=''.&mt("Cancelled grading.").''.$back;
+ } elsif ($status_code eq 'terminated') {
+ $result.= ''.&mt('Terminated grading').'
'.
+ ''.
+ &mt('Grading for [_1] has not been saved because of a grading key mismatch.',
+ ''.$env{'form.terminated'}.'').'
'.$back;
} elsif ($status_code eq 'never_versioned') {
$result.=''.
&mt("Requested user has never accessed the task.").
@@ -1004,6 +1030,8 @@ sub get_key_todo {
return (undef,'stop');
} elsif ($env{'form.cancel'}) {
return (undef,'cancel');
+ } elsif ($env{'form.terminated'}) {
+ return (undef, 'terminated');
} elsif ($env{'form.next'}) {
return (undef,'select_user');
}
@@ -1049,13 +1077,17 @@ sub get_key_todo {
if ($env{'form.queuemode'} ne 'selected') {
# don't get something new from the queue if they hit the stop button
- if (!(($env{'form.cancel'} || $env{'form.stop'})
+ if (!(($env{'form.cancel'} || $env{'form.stop'} || $env{'form.terminated'})
&& $target eq 'webgrade')
&& !$env{'form.gradingaction'}) {
&Apache::lonxml::debug("Getting anew $queue");
return (&get_from_queue($queue));
} else {
- return (undef,'stop');
+ if ($env{'form.terminated'}) {
+ return (undef,'terminated');
+ } else {
+ return (undef,'stop');
+ }
}
}
return (undef,undef)
@@ -1093,13 +1125,13 @@ sub end_Task {
$portheader = &mt('Submit Portfolio Files for Grading');
$porttext = &mt('Indicate the files from your portfolio to be evaluated in grading this task.');
}
- $result.="\n".''.&Apache::lonhtmlcommon::start_pick_box().
+ $result.="\n".'
'.&Apache::lonhtmlcommon::start_pick_box().
&Apache::inputtags::file_selector("$version.0",
"bridgetask","*",
'portfolioonly',
'
'.$portheader.'
'.
$porttext.'
').
- &Apache::lonhtmlcommon::end_pick_box().'';
+ &Apache::lonhtmlcommon::end_pick_box().'';
}
if (!$previous && $status ne 'SHOW_ANSWER' &&
&show_task($status,$previous)) {
@@ -1320,10 +1352,10 @@ DONEBUTTON
$Apache::lonhomework::results{"resource.$version.0.solved"};
}
&minimize_storage();
- my $canstore;
+ my ($canstore,$domain,$name,$symb,$courseid);
+ ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser();
+
if ($env{'form.gradingkey'}) {
- my ($symb,$courseid,$domain,$name) =
- &Apache::lonnet::whichuser();
my $todo=&unescape($env{'form.gradingkey'});
my ($keysymb,$uname,$udom)=&decode_queue_key($todo);
if ($symb eq $keysymb) {
@@ -1334,39 +1366,48 @@ DONEBUTTON
}
if ($canstore) {
&Apache::structuretags::finalize_storage();
- } else {
- $result .= '
'.
- &mt('Information extracted from the current gradingkey was for a different BT or user from those for which grading data are to be stored.').' '.&mt('No grading changes stored.').'
';
- }
-
- # data stored, now handle queue
- if ($review) {
- if ($env{'form.queue'} eq 'reviewqueue') {
- &check_queue_unlock($env{'form.queue'});
- &Apache::lonxml::debug(" still needs review not changing status.");
- } else {
- if ($env{'form.queue'} ne 'none') {
- &move_between_queues($env{'form.queue'},'reviewqueue');
+ my @interval = &Apache::lonnet::EXT("resource.0.interval");
+ if ($interval[0] =~ /^\d+$/ && $interval[1] eq 'resource') {
+ my $key=$courseid."\0".$symb;
+ my %times=&Apache::lonnet::get('firstaccesstimes',
+ [$key],$domain,$name);
+ if ($times{$key}) {
+ my $delresult.=&Apache::lonnet::del('firstaccesstimes',
+ [$key],$domain,$name);
+ }
+ }
+ # data stored, now handle queue
+ if ($review) {
+ if ($env{'form.queue'} eq 'reviewqueue') {
+ &check_queue_unlock($env{'form.queue'});
+ &Apache::lonxml::debug(" still needs review not changing status.");
} else {
- &add_to_queue('reviewqueue',\%queue_data);
+ if ($env{'form.queue'} ne 'none') {
+ &move_between_queues($env{'form.queue'},'reviewqueue');
+ } else {
+ &add_to_queue('reviewqueue',\%queue_data);
+ }
}
- }
- } elsif ($ungraded) {
- if ($env{'form.queue'} eq 'reviewqueue') {
- &Apache::lonxml::debug("moving back.");
- &move_between_queues($env{'form.queue'},
- 'gradingqueue');
- } elsif ($env{'form.queue'} eq 'none' ) {
- &add_to_queue('gradingqueue',\%queue_data);
- } else {
- &check_queue_unlock($env{'form.queue'});
- }
- } elsif ($mandatory_failed) {
- &remove_from_queue($env{'form.queue'});
- } else {
- &remove_from_queue($env{'form.queue'});
- }
- }
+ } elsif ($ungraded) {
+ if ($env{'form.queue'} eq 'reviewqueue') {
+ &Apache::lonxml::debug("moving back.");
+ &move_between_queues($env{'form.queue'},
+ 'gradingqueue');
+ } elsif ($env{'form.queue'} eq 'none' ) {
+ &add_to_queue('gradingqueue',\%queue_data);
+ } else {
+ &check_queue_unlock($env{'form.queue'});
+ }
+ } elsif ($mandatory_failed) {
+ &remove_from_queue($env{'form.queue'});
+ } else {
+ &remove_from_queue($env{'form.queue'});
+ }
+ } else {
+ &check_queue_unlock($env{'form.queue'});
+ $env{'form.terminated'} = $name.':'.$domain;
+ }
+ }
if (exists($Apache::lonhomework::results{'INTERNAL_store'})) {
# instance generation occurred and hasn't yet been stored
&Apache::structuretags::finalize_storage();