--- loncom/homework/bridgetask.pm 2006/06/09 22:31:36 1.163
+++ loncom/homework/bridgetask.pm 2006/06/12 18:57:20 1.166
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.163 2006/06/09 22:31:36 albertel Exp $
+# $Id: bridgetask.pm,v 1.166 2006/06/12 18:57:20 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -413,6 +413,35 @@ INFO
return $result;
}
+sub done_screen {
+ my ($version) = @_;
+ my $title=&Apache::lonnet::gettitle();
+ my @files=split(',',$Apache::lonhomework::history{'resource.'.$version.'.0.bridgetask.portfiles'});
+ my (undef,undef,$domain,$user)= &Apache::lonxml::whichuser();
+ my $files = '
';
+ foreach my $file (@files) {
+ my $url="/uploaded/$domain/$user/portfolio$file";
+ if (! &Apache::lonnet::stat_file($url)) {
+ $file = &mt(' Nonexistent file: '.
+ '[_1]',$file);
+ } else {
+ $file = ''.$file.'';
+ }
+ $files .= '- '.$file.'
';
+ }
+ $files.='
';
+
+ return <$title
+ Files submitted: $files
+ You are now done with this Bridge Task
+
+ Logout
+ Change to a different course
+DONESCREEN
+
+}
+
sub start_Task {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
@@ -513,30 +542,7 @@ sub start_Task {
} elsif ($status eq 'WAITING_FOR_GRADE') {
$msg.=''.&mt('Your submission is in the grading queue.').'
';
} elsif ($env{'form.donescreen'}) {
- my $title=&Apache::lonnet::gettitle();
- my @files=split(',',$Apache::lonhomework::history{'resource.'.$version.'.0.bridgetask.portfiles'});
- my (undef,undef,$domain,$user)=
- &Apache::lonxml::whichuser();
- my $files = '';
- foreach my $file (@files) {
- my $url="/uploaded/$domain/$user/portfolio$file";
- if (! &Apache::lonnet::stat_file($url)) {
- $file = &mt(' Nonexistant file: [_1]',$file);
- } else {
- $file = ''.$file.'';
- }
- $files .= '- '.$file.'
';
- }
- $files.='
';
-
- $result.=<$title
- Files submitted: $files
- You are now done with this Bridge Task
-
- Logout
- Change to a different course
-DONESCREEN
+ $result .= &done_screen();
} elsif ($status ne 'NOT_YET_VIEWED') {
$msg.=''.&mt('Not open to be viewed').'
';
}
@@ -614,6 +620,15 @@ DONESCREEN
$result.=''.&mt("Stopped grading.").''.$back;
} elsif ($status_code eq 'cancel') {
$result.=''.&mt("Cancelled grading.").''.$back;
+ } elsif ($status_code eq 'never_versioned') {
+ $result.=''.
+ &mt("Requested user has never accessed the task.").
+ ''.$back;
+ } elsif ($status_code =~ /still_open:(.*)/) {
+ my $date = &Apache::lonlocal::locallocaltime($1);
+ $result.=''.
+ &mt("Task is still open, will close at [_1].",$date).
+ ''.$back;
} elsif ($status_code eq 'lock_failed') {
$result.=''.&mt("Failed to lock the requested record.")
.''.$back;
@@ -678,6 +693,20 @@ DONESCREEN
return $result;
}
+sub get_task_end_time {
+ my ($queue_entry,$symb,$udom,$uname) = @_;
+
+ my $end_time;
+ if (my $slot = &slotted_access($queue_entry)) {
+ my %slot_data=&Apache::lonnet::get_slot($slot);
+ $end_time = $slot_data{'endtime'};
+ } else {
+ $end_time = &Apache::lonhomework::due_date('0',$symb,
+ $udom,$uname);
+ }
+ return $end_time;
+}
+
sub get_key_todo {
my ($target)=@_;
my $todo;
@@ -726,11 +755,23 @@ sub get_key_todo {
if (!$queue) {
$env{'form.queue'} = $queue = 'none';
#not queued so doing either a re or pre grade
- #FIXME don't allow pregrade
- &Apache::lonxml::debug("not in queue no lock");
+ my %status = &Apache::lonnet::restore($symb,$cid,$udom,$uname);
+ if ($status{'resource.0.version'} < 1) {
+ return (undef,'never_versioned');
+ }
return ($gradingkey);
}
+ if ($queue) {
+ my $queue_entry = &get_queue_data($queue,$udom,$uname);
+
+ my $end_time = &get_task_end_time($queue_entry,$symb,
+ $udom,$uname);
+ if ($end_time > time) {
+ return (undef,"still_open:$end_time");
+ }
+ }
+
my $who=&queue_key_locked($queue,$gradingkey);
if ($who eq $me) {
#already have the lock
@@ -1184,8 +1225,12 @@ sub setup_env_for_other_user {
}
sub get_queue_data {
- my ($queue)=@_;
- my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser();
+ my ($queue,$udom,$uname)=@_;
+ my ($symb,$cid,$other_udom,$other_uname)=&Apache::lonxml::whichuser();
+ if (!$uname || !$udom) {
+ $uname=$other_uname;
+ $udom =$other_udom;
+ }
my $cnum=$env{'course.'.$cid.'.num'};
my $cdom=$env{'course.'.$cid.'.domain'};
my $todo="$symb\0queue\0$uname:$udom";