--- loncom/homework/bridgetask.pm 2005/05/24 19:33:28 1.30 +++ loncom/homework/bridgetask.pm 2006/03/02 22:23:31 1.117 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.30 2005/05/24 19:33:28 albertel Exp $ +# $Id: bridgetask.pm,v 1.117 2006/03/02 22:23:31 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use Apache::File(); use Apache::lonmenu; use Apache::lonlocal; use Apache::lonxml; +use Apache::slotrequest(); use Time::HiRes qw( gettimeofday tv_interval ); BEGIN { @@ -59,7 +60,7 @@ sub initialize_bridgetask { } sub proctor_check_auth { - my ($slot_name,$slot)=@_; + my ($slot_name,$slot,$type)=@_; my $user=$env{'form.proctorname'}; my $domain=$env{'form.proctordomain'}; @@ -67,21 +68,44 @@ sub proctor_check_auth { foreach my $possible (@allowed) { my ($puser,$pdom)=(split('@',$possible)); if ($puser eq $user && $pdom eq $domain) { - my $authhost=&Apache::lonnet::authenticate($puser,$env{'form.proctorpassword'},$pdom); - if ($authhost ne 'no_host') { + my $authenticated=0; + if ( $slot->{'secret'} =~ /\S/ && + $env{'form.proctorpassword'} eq $slot->{'secret'} ) { + $authenticated=1; + } else { + + my $authhost=&Apache::lonnet::authenticate($puser,$env{'form.proctorpassword'},$pdom); + if ($authhost ne 'no_host') { + $authenticated=1; + } + } + if ($authenticated && $type eq 'Task') { + # increment version my $version= - $Apache::lonhomework::results{'resource.version'}= - ++$Apache::lonhomework::history{'resource.version'}; - $Apache::lonhomework::results{"resource.$version.checkedin"}= - $user.'@'.$domain; - $Apache::lonhomework::results{"resource.$version.checkedin.slot"}= - $slot_name; + $Apache::lonhomework::history{'resource.0.version'}; + $version++; + + #clean out all current results foreach my $key (keys(%Apache::lonhomework::history)) { if ($key=~/^resource\.0\./) { $Apache::lonhomework::results{$key}=''; } } + + #setup new version and who did it + $Apache::lonhomework::results{'resource.0.version'}=$version; + $Apache::lonhomework::results{"resource.$version.0.checkedin"}= + $user.'@'.$domain; + $Apache::lonhomework::results{"resource.$version.0.checkedin.slot"}= + $slot_name; + return 1; + } elsif ($authenticated && $type eq 'problem') { + &Apache::lonxml::debug("authed $slot_name"); + $Apache::lonhomework::results{"resource.0.checkedin"}= + $user.'@'.$domain; + $Apache::lonhomework::results{"resource.0.checkedin.slot"}= + $slot_name; } } } @@ -91,11 +115,12 @@ sub proctor_check_auth { sub get_version { my ($version,$previous); if ($env{'form.previousversion'} && - defined($Apache::lonhomework::history{'resource.'.$env{'form.previousversion'}.'.status'})) { + $env{'form.previousversion'} ne 'current' && + defined($Apache::lonhomework::history{'resource.'.$env{'form.previousversion'}.'.0.status'})) { $version=$env{'form.previousversion'}; $previous=1; } else { - $version=$Apache::lonhomework::history{'resource.version'}; + $version=$Apache::lonhomework::history{'resource.0.version'}; $previous=0; } if (wantarray) { @@ -107,10 +132,10 @@ sub get_version { sub add_previous_version_button { my ($status)=@_; my $result; - if ($Apache::lonhomework::history{'resource.version'} eq '') { + if ($Apache::lonhomework::history{'resource.0.version'} eq '') { return ''; } - if ($Apache::lonhomework::history{'resource.version'} < 2 && + if ($Apache::lonhomework::history{'resource.0.version'} < 2 && $status ne 'NEEDS_CHECKIN') { return ''; } @@ -121,15 +146,16 @@ sub add_previous_version_button { "\n"; } my @to_show; - foreach my $test_version (1..$Apache::lonhomework::history{'resource.version'}) { - if (defined($Apache::lonhomework::history{'resource.'.$test_version.'.status'})) { + foreach my $test_version (1..$Apache::lonhomework::history{'resource.0.version'}) { + if (defined($Apache::lonhomework::history{'resource.'.$test_version.'.0.status'})) { push(@to_show,$test_version); } } my $list='\n\n"; - $result.='
'; return $result; } @@ -166,13 +257,160 @@ sub preserve_grade_info { return $result; } +sub style { + return (< +STYLE + +} + +sub show_task { + my ($status,$previous)=@_; + if (!$previous && ( + ( $status eq 'CLOSED' ) || + ( $status eq 'BANNED') || + ( $status eq 'UNAVAILABLE') || + ( $status eq 'NOT_IN_A_SLOT') || + ( $status eq 'NEEDS_CHECKIN') || + ( $status eq 'WAITING_FOR_GRADE') || + ( $status eq 'INVALID_ACCESS') )) { + return 0; + } + if ($env{'form.donescreen'}) { return 0; } + return 1; +} + +sub internal_location { + my ($id)=@_; + return ''; +} + +sub submission_time_stamp { + my ($symb,$courseid,$udom,$uname)=&Apache::lonxml::whichuser(); + my $submissiontime; + my $version=$Apache::lonhomework::history{'resource.0.version'}; + for (my $v=$Apache::lonhomework::history{'version'};$v>0;$v--) { + if (defined($Apache::lonhomework::history{$v.':resource.'.$version.'.0.bridgetask.portfiles'})) { + $submissiontime=$Apache::lonhomework::history{$v.':timestamp'}; + } + } + my $result; + if ($submissiontime) { + my $slot_name=$Apache::lonhomework::history{'resource.'.$version.'.0.checkedin.slot'}; + my %slot=&Apache::lonnet::get_slot($slot_name); + my $diff = $slot{'endtime'} - $submissiontime; + my ($color,$when)=('#FF6666','after'); + if ($diff > 0) { ($color,$when)=('#336600','before'); } + my $info; + if ($diff%60) { $info=($diff%60).' seconds'; } + $diff=int($diff/60); + if ($diff%60) { $info=($diff%60).' minutes '.$info; } + $diff=int($diff/60); + if ($diff) { $info=$diff.' hours '.$info; } + $result=''. + &mt('Student submitted [_1] [_2] the deadline. + (Submission was at [_3], end of period was [_4].)', + $info,$when,scalar(localtime($submissiontime)), + scalar(localtime($slot{'endtime'}))). + '
'; + } + return $result; +} + +sub webgrade_standard_info { + my ($version)=&get_version(); + my (undef,undef,$udom,$uname) = &Apache::lonxml::whichuser(); + my $file_url = '/uploaded/'.$udom.'/'.$uname.'/portfolio/'; + my $file_list="Files submitted: $files
+You are now done with this Bridge Task
+Found '. &Apache::lonnet::gettitle($symb).' for '.$uname.' at '.$udom.' |
'; - if ($env{'form.stop'}) { - $result.=&mt("Stopped grading."); + $result.="\n"; + my $back=''; + if ($status_code eq 'stop') { + $result.=''.&mt("Stopped grading.").''.$back; + } elsif ($status_code eq 'lock_failed') { + $result.=''.&mt("Failed to lock the requested record.") + .''.$back; + } elsif ($status_code eq 'unlock') { + $result.=''.&mt("Unlocked the requested record.") + .''.$back; + $result.=&show_queue($env{'form.queue'},1); + } elsif ($status_code eq 'show_list') { + $result.=&show_queue($env{'form.queue'},1); + } elsif ($status_code eq 'select_user') { + $result.=&select_user(); + } elsif ($status_code eq 'unable') { + $result.=''.&mt("Unable to aqcuire a user to grade.").''.$back; + } elsif ($status_code eq 'not_allowed') { + $result.=''.&mt('Not allowed to grade the requested user.').' '.$msg.''.$back; } else { - $result.=&mt("No user to be graded."); + $result.=''.&mt("No user to be graded.").''.$back; + } + } + $webgrade='no'; + my $bodytext=&Apache::lonxml::get_all_text("/task",$parser,$style); + } + if ($target eq 'webgrade' && defined($env{'form.queue'})) { + if ($webgrade eq 'yes') { + $result.=&submission_time_stamp(); + } + $result.=$form_tag_start; + $result.=''; + $result.=''; + if ($env{'form.regrade'}) { + $result.=''; + } + if ($env{'form.chosensections'}) { + my @chosen_sections= + &Apache::loncommon::get_env_multiple('form.chosensections'); + foreach my $sec (@chosen_sections) { + $result.=''; } - $result.=' |
".&mt('You needed to pass all of the [_1] mandatory components and [_2] of the [_3] optional components, of which you passed [_4].',$man_count,$opt_req,$opt_count,$opt_passed)."