--- loncom/homework/bridgetask.pm 2009/03/27 00:20:39 1.246
+++ loncom/homework/bridgetask.pm 2012/01/03 00:28:17 1.258
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.246 2009/03/27 00:20:39 raeburn Exp $
+# $Id: bridgetask.pm,v 1.258 2012/01/03 00:28:17 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;
@@ -198,6 +199,10 @@ sub get_version {
sub add_previous_version_button {
my ($status)=@_;
+ my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser();
+ if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
+ return;
+ }
my $result;
if ($Apache::lonhomework::history{'resource.0.version'} eq '') {
return '';
@@ -234,7 +239,10 @@ sub add_previous_version_button {
}
sub add_grading_button {
- my (undef,$cid)=&Apache::lonnet::whichuser();
+ my (undef,$cid,$udom,$uname)=&Apache::lonnet::whichuser();
+ if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
+ return;
+ }
my $cnum=$env{'course.'.$cid.'.num'};
my $cdom=$env{'course.'.$cid.'.domain'};
my %sections = &Apache::loncommon::get_sections($cdom,$cnum);
@@ -249,10 +257,14 @@ sub add_grading_button {
$sec_select .= "\t\n";
}
$sec_select .= "\t\n\n";
-
- my $result="\n\t".'';
- $result.="\n\t".'';
+
+ my $uri=$env{'request.uri'};
+ if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); }
+ my $result =
+ '
'."\n";
+ return $result;
+}
+
+sub add_slotlist_button {
+ my (undef,$cid,$udom,$uname)=&Apache::lonnet::whichuser();
+ if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
+ return;
+ }
+ my $symb=&Apache::lonnet::symbread();
+ my $result;
+ if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'}) ||
+ &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
+ $result = '';
+ my $target_id =
+ &Apache::lonstathelpers::make_target_id({symb => $symb,
+ part => '0'});
+ if (!§ion_restricted()) {
+ $result.='';
+ }
+ }
return $result;
}
sub add_request_another_attempt_button {
my ($text)=@_;
+ my (undef,$cid,$udom,$uname)=&Apache::lonnet::whichuser();
+ if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
+ return;
+ }
if (!$text) { $text=&mt('Request another attempt'); }
my $result;
my $symb=&Apache::lonnet::symbread();
@@ -315,7 +362,7 @@ sub add_request_another_attempt_button {
my ($slot_name,$slot)=&Apache::slotrequest::check_for_reservation($symb);
my $action='get_reservation';
if ($slot_name) {
- $text=&mt('Change reservation.');
+ $text=&mt('Change reservation');
$action='change_reservation';
my $description=&Apache::slotrequest::get_description($slot_name,
$slot);
@@ -380,6 +427,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 +593,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 .= "
';
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 +641,11 @@ sub done_screen {
$comment_status = '
'.&mt('Message sent to instructor: [_1]',
$comment_status).'
'
-.$message_status
-.$comment_status;
-
+ .$shown
+ .$message_status
+ .$comment_status;
}
sub start_Task {
@@ -619,35 +675,24 @@ 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') {
if ($Apache::lonhomework::queuegrade
|| $Apache::lonhomework::modifygrades) {
- $result.='\n";
+ $result .= &add_grading_button();
my $symb=&Apache::lonnet::symbread();
if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'})
|| &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
- $result.='';
- my $target_id =
- &Apache::lonstathelpers::make_target_id({symb => $symb,
- part => '0'});
- if (!§ion_restricted()) {
- $result.='';
- }
+ $result .= &add_slotlist_button();
}
}
}
@@ -661,8 +706,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: /) {
@@ -675,9 +720,12 @@ sub start_Task {
($version,$previous)=&get_version();
}
- my $status_id =
- ($previous || $status eq 'SHOW_ANSWER') ? 'LC_task_feedback'
- : 'LC_task_take';
+ my $status_id = 'LC_task_take';
+ if ($previous && $target eq 'answer') {
+ $status_id = 'LC_task_answer';
+ } elsif ($previous || $status eq 'SHOW_ANSWER') {
+ $status_id = 'LC_task_feedback';
+ }
$result .= '
'."\n";
push(@Apache::inputtags::status,$status);
@@ -698,7 +746,7 @@ sub start_Task {
$msg.='
'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'
';
} elsif ($status eq 'NOT_IN_A_SLOT') {
$msg.='
'.&mt('You are not currently signed up to work at this time and/or place.').'
';
- $msg.=&add_request_another_attempt_button("Sign up for time to work.");
+ $msg.=&add_request_another_attempt_button("Sign up for time to work");
} elsif ($status eq 'NEEDS_CHECKIN') {
$msg.='
'.&mt('You need the Proctor to validate you.').
'
'.&proctor_validation_screen($slot);
@@ -706,7 +754,10 @@ sub start_Task {
$msg.='
'.&mt('Your submission is in the grading queue.').'
';
}
if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
@@ -714,7 +765,7 @@ sub start_Task {
}
$result.=$msg.' ';
} elsif ($target eq 'tex') {
- $result.='\begin{document}\noindent \vskip 1 mm \begin{minipage}{\textwidth}\vskip 0 mm';
+ $result.='\noindent \vskip 1 mm \begin{minipage}{\textwidth}\vskip 0 mm';
if ($status eq 'UNAVAILABLE') {
$result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';
} else {
@@ -784,6 +835,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 +1060,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 +1107,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)
@@ -1085,14 +1147,21 @@ sub end_Task {
}
if ($status eq 'CAN_ANSWER' && !$previous &&
!$env{'form.donescreen'}) {
- $result.="\n".'
'.
+ my ($portheader,$porttext);
+ if ($Apache::lonhomework::history{"resource.$version.0.bridgetask.portfiles"}) {
+ $portheader = &mt('Submit Additional Portfolio Files for Grading');
+ $porttext = &mt('Indicate which additional files from your portfolio are to be evaluated in grading this task.');
+ } else {
+ $portheader = &mt('Submit Portfolio Files for Grading');
+ $porttext = &mt('Indicate the files from your portfolio to be evaluated in grading this task.');
+ }
+ $result.="\n".'