--- loncom/homework/bridgetask.pm 2006/06/09 22:31:36 1.163 +++ loncom/homework/bridgetask.pm 2006/06/12 23:17:56 1.167 @@ -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.167 2006/06/12 23:17:56 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -413,6 +413,58 @@ 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 = ''; + my $subject = "Submission message for $title"; + my ($message_status,$comment_status); + my $setting = $env{'course.'.$env{'request.course.id'}.'.task_messages'}; + $setting =~ s/^\s*(\S*)\s*$/$1/; + $setting = lc($setting); + if ($setting eq 'only_student' + || $setting eq 'student_and_user_notes_screen') { + $message_status = + &Apache::lonmsg::user_normal_msg($user,$domain,$subject,$msg); + $message_status = '

'.&mt('Message sent to user: [_1]', + $message_status).'

'; + } + if ($setting eq 'student_and_user_notes_screen') { + $comment_status = + &Apache::lonmsg::store_instructor_comment($subject.'
'. + $msg,$user,$domain); + $comment_status = '

'.&mt('Message sent to instructor: [_1]', + $comment_status).'

'; + } + return <$title +

Files submitted: $files

+

You are now done with this Bridge Task

+
+

Logout

+

Change to a different course

+$message_status +$comment_status +DONESCREEN + +} + sub start_Task { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; @@ -513,30 +565,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 = ''; - - $result.=<$title -

Files submitted: $files

-

You are now done with this Bridge Task

-
-

Logout

-

Change to a different course

-DONESCREEN + $result .= &done_screen($version); } elsif ($status ne 'NOT_YET_VIEWED') { $msg.='

'.&mt('Not open to be viewed').'

'; } @@ -614,6 +643,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 +716,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 +778,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 +1248,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";