version 1.256, 2010/11/01 16:32:32
|
version 1.274, 2025/03/31 13:55:08
|
Line 32 package Apache::bridgetask;
|
Line 32 package Apache::bridgetask;
|
|
|
use strict; |
use strict; |
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::loncommon; |
use Apache::File(); |
use Apache::File(); |
use Apache::lonmenu; |
use Apache::lonmenu; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::slotrequest(); |
use Apache::slotrequest(); |
use Apache::structuretags(); |
use Apache::structuretags(); |
|
use HTML::Entities(); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use LONCAPA; |
use LONCAPA; |
|
|
Line 65 sub initialize_bridgetask {
|
Line 67 sub initialize_bridgetask {
|
sub proctor_check_auth { |
sub proctor_check_auth { |
my ($slot_name,$slot,$type)=@_; |
my ($slot_name,$slot,$type)=@_; |
my $user=$env{'form.proctorname'}; |
my $user=$env{'form.proctorname'}; |
|
$user =~ s/^\s+|\s+$//g; |
my $domain=$env{'form.proctordomain'}; |
my $domain=$env{'form.proctordomain'}; |
|
|
my @allowed=split(",",$slot->{'proctor'}); |
my @allowed=split(",",$slot->{'proctor'}); |
Line 83 sub proctor_check_auth {
|
Line 86 sub proctor_check_auth {
|
} |
} |
} |
} |
if ($authenticated) { |
if ($authenticated) { |
my $check = &check_in($type,$user,$domain,$slot_name); |
my $check = &check_in($type,$user,$domain,$slot_name,$slot->{'iptied'}); |
if ($check =~ /^error:/) { |
if ($check =~ /^error:/) { |
return 0; |
return 0; |
} |
} |
Line 95 sub proctor_check_auth {
|
Line 98 sub proctor_check_auth {
|
} |
} |
|
|
sub check_in { |
sub check_in { |
my ($type,$user,$domain,$slot_name) = @_; |
my ($type,$user,$domain,$slot_name,$needsiptied) = @_; |
my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); |
my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); |
|
my $ip=$ENV{'REMOTE_ADDR'} || $env{'request.host'}; |
if ( $useslots eq 'map_map') { |
if ( $useslots eq 'map_map') { |
my $result = &check_in_sequence($user,$domain,$slot_name); |
my $result = &check_in_sequence($user,$domain,$slot_name,$ip,$needsiptied); |
if ($result =~ /^error: /) { |
if ($result =~ /^error: /) { |
return $result; |
return $result; |
} |
} |
} else { |
} else { |
&create_new_version($type,$user,$domain,$slot_name); |
my ($symb) = &Apache::lonnet::whichuser(); |
&Apache::structuretags::finalize_storage(); |
my $result = &create_new_version($type,$user,$domain,$slot_name,$symb,$ip,$needsiptied); |
|
if ($result eq 'ok') { |
|
&Apache::structuretags::finalize_storage(); |
|
} |
|
return $result; |
} |
} |
return 1; |
return 1; |
} |
} |
|
|
sub check_in_sequence { |
sub check_in_sequence { |
my ($user,$domain,$slot_name) = @_; |
my ($user,$domain,$slot_name,$ip,$needsiptied) = @_; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
if (!defined($navmap)) { |
if (!defined($navmap)) { |
return 'error: '; |
return 'error: No navmap'; |
} |
} |
my ($symb) = &Apache::lonnet::whichuser(); |
my ($symb) = &Apache::lonnet::whichuser(); |
my ($map) = &Apache::lonnet::decode_symb($symb); |
my ($map) = &Apache::lonnet::decode_symb($symb); |
my @resources = |
my @resources = |
$navmap->retrieveResources($map, sub { $_[0]->is_problem() },0,0); |
$navmap->retrieveResources($map, sub { $_[0]->is_problem() || $_[0]->is_tool() },0,0); |
my %old_history = %Apache::lonhomework::history; |
my %old_history = %Apache::lonhomework::history; |
my %old_results = %Apache::lonhomework::results; |
my %old_results = %Apache::lonhomework::results; |
|
|
|
my $errorcount; |
foreach my $res (@resources) { |
foreach my $res (@resources) { |
&Apache::lonxml::debug("doing ".$res->src); |
&Apache::lonxml::debug("doing ".$res->src); |
&Apache::structuretags::initialize_storage($res->symb); |
&Apache::structuretags::initialize_storage($res->symb); |
my $type = ($res->is_task()) ? 'Task' : 'problem'; |
my $type; |
&create_new_version($type,$user,$domain,$slot_name); |
if ($res->is_task()) { |
&Apache::structuretags::finalize_storage($res->symb); |
$type = 'Task'; |
|
} elsif ($res->is_tool) { |
|
$type = 'tool'; |
|
} else { |
|
$type = 'problem'; |
|
} |
|
my $result = &create_new_version($type,$user,$domain,$slot_name,$res->symb,$ip,$needsiptied); |
|
if ($result eq 'ok') { |
|
&Apache::structuretags::finalize_storage($res->symb); |
|
} else { |
|
$errorcount ++; |
|
} |
} |
} |
|
|
%Apache::lonhomework::history = %old_history; |
%Apache::lonhomework::history = %old_history; |
%Apache::lonhomework::results = %old_results; |
%Apache::lonhomework::results = %old_results; |
|
if ($errorcount) { |
|
return 'error: IP taken'; |
|
} |
} |
} |
|
|
sub create_new_version { |
sub create_new_version { |
my ($type,$user,$domain,$slot_name) = @_; |
my ($type,$user,$domain,$slot_name,$symb,$ip,$needsiptied) = @_; |
|
|
|
if ($needsiptied) { |
|
my $uniqkey = "$slot_name\0$symb\0$ip"; |
|
my ($cdom,$cnum); |
|
if ($env{'request.course.id'}) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my %hash = ( |
|
"$slot_name\0$symb\0$ip" => $env{'user.name'}.':'.$env{'user.domain'}, |
|
); |
|
unless (&Apache::lonnet::newput('slot_uniqueips',\%hash,$cdom,$cnum) eq 'ok') { |
|
return 'error: IP taken'; |
|
} |
|
} |
|
} |
|
|
my $id = '0'; |
my $id = '0'; |
if ($type eq 'Task') { |
if ($type eq 'Task') { |
Line 159 sub create_new_version {
|
Line 197 sub create_new_version {
|
$domain = $env{'user.domain'}; |
$domain = $env{'user.domain'}; |
} |
} |
|
|
} elsif ($type eq 'problem') { |
} elsif (($type eq 'problem') || ($type eq 'tool')) { |
&Apache::lonxml::debug("authed $slot_name"); |
&Apache::lonxml::debug("authed $slot_name"); |
} |
} |
if (!defined($user) || !defined($domain)) { |
if (!defined($user) || !defined($domain)) { |
Line 169 sub create_new_version {
|
Line 207 sub create_new_version {
|
|
|
$Apache::lonhomework::results{"resource.$id.checkedin"}= |
$Apache::lonhomework::results{"resource.$id.checkedin"}= |
$user.':'.$domain; |
$user.':'.$domain; |
|
$Apache::lonhomework::results{"resource.$id.checkedin.ip"}=$ip; |
|
|
if (defined($slot_name)) { |
if (defined($slot_name)) { |
$Apache::lonhomework::results{"resource.$id.checkedin.slot"}= |
$Apache::lonhomework::results{"resource.$id.checkedin.slot"}= |
$slot_name; |
$slot_name; |
} |
} |
|
return 'ok'; |
} |
} |
|
|
sub get_version { |
sub get_version { |
Line 199 sub get_version {
|
Line 239 sub get_version {
|
|
|
sub add_previous_version_button { |
sub add_previous_version_button { |
my ($status)=@_; |
my ($status)=@_; |
|
my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser(); |
|
if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) { |
|
return; |
|
} |
my $result; |
my $result; |
if ($Apache::lonhomework::history{'resource.0.version'} eq '') { |
if ($Apache::lonhomework::history{'resource.0.version'} eq '') { |
return ''; |
return ''; |
Line 235 sub add_previous_version_button {
|
Line 279 sub add_previous_version_button {
|
} |
} |
|
|
sub add_grading_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 $cnum=$env{'course.'.$cid.'.num'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my %sections = &Apache::loncommon::get_sections($cdom,$cnum); |
my %sections = &Apache::loncommon::get_sections($cdom,$cnum); |
Line 245 sub add_grading_button {
|
Line 292 sub add_grading_button {
|
$size=scalar(keys(%sections))+2; |
$size=scalar(keys(%sections))+2; |
} |
} |
my $sec_select = "\n".'<select multiple="multiple" name="chosensections" size="'.$size.'">'."\n"; |
my $sec_select = "\n".'<select multiple="multiple" name="chosensections" size="'.$size.'">'."\n"; |
$sec_select .= "\t<option value='all' selected='selected'>all</option>\n"; |
$sec_select .= "\t".'<option value="all" selected="selected">'.&mt('all')."</option>\n"; |
foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) { |
foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) { |
$sec_select .= "\t<option value=\"$sec\">$sec</option>\n"; |
$sec_select .= "\t<option value=\"$sec\">$sec</option>\n"; |
} |
} |
$sec_select .= "\t<option value='none'>none</option>\n</select>\n"; |
$sec_select .= "\t".'<option value="none">'.&mt('none')."</option>\n</select>\n"; |
|
|
my $result="\n\t".'<input type="submit" name="gradeasubmission" value="'. |
my $uri=$env{'request.uri'}; |
&mt("Get a submission to grade").'" />'; |
if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); } |
$result.="\n\t".'<input type="hidden" name="grade_target" value="webgrade" />'; |
my $result = |
|
'<form name="gradesubmission" method="post" action="'.$uri.'">'. |
|
"\n\t".'<input type="submit" name="gradeasubmission" value="'. |
|
&mt("Get a submission to grade").'" />'. |
|
"\n\t".'<input type="hidden" name="grade_target" value="webgrade" />'; |
my $see_all = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}); |
my $see_all = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}); |
my $see_sec = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}. |
my $see_sec = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}. |
'/'.$env{'request.course.sec'}); |
'/'.$env{'request.course.sec'}); |
Line 299 sub add_grading_button {
|
Line 350 sub add_grading_button {
|
$result.=&Apache::loncommon::studentbrowser_javascript(); |
$result.=&Apache::loncommon::studentbrowser_javascript(); |
$result.= '</p>'."\n"; |
$result.= '</p>'."\n"; |
} |
} |
|
$result .= '</form>'."\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 = '<form method="post" name="slotrequest" action="/adm/slotrequest">'. |
|
'<input type="hidden" name="symb" value="'.$symb.'" />'. |
|
'<input type="hidden" name="command" value="showslots" />'. |
|
'<input type="submit" name="requestattempt" value="'. |
|
&mt('Show Slot list').'" />'. |
|
'</form>'; |
|
my $target_id = |
|
&Apache::lonstathelpers::make_target_id({symb => $symb, |
|
part => '0'}); |
|
if (!§ion_restricted()) { |
|
$result.='<form method="post" name="gradingstatus" action="/adm/statistics">'. |
|
'<input type="hidden" name="problemchoice" value="'.$target_id.'" />'. |
|
'<input type="hidden" name="reportSelected" value="grading_analysis" />'. |
|
'<input type="submit" name="grading" value="'. |
|
&mt('Show Grading Status').'" />'. |
|
'</form>'; |
|
} |
|
} |
return $result; |
return $result; |
} |
} |
|
|
sub add_request_another_attempt_button { |
sub add_request_another_attempt_button { |
my ($text)=@_; |
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'); } |
if (!$text) { $text=&mt('Request another attempt'); } |
my $result; |
my $result; |
my $symb=&Apache::lonnet::symbread(); |
my $symb=&Apache::lonnet::symbread(); |
Line 635 sub start_Task {
|
Line 721 sub start_Task {
|
$target eq 'tex') { |
$target eq 'tex') { |
if ($env{'form.markaccess'}) { |
if ($env{'form.markaccess'}) { |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
&Apache::lonnet::set_first_access($interval[1]); |
my ($timelimit) = ($interval[0] =~ /^(\d+)/); |
|
&Apache::lonnet::set_first_access($interval[1],$timelimit); |
} |
} |
} |
} |
|
|
if ($target eq 'web' && $env{'request.state'} ne 'construct') { |
if ($target eq 'web' && $env{'request.state'} ne 'construct') { |
if ($Apache::lonhomework::queuegrade |
if ($Apache::lonhomework::queuegrade |
|| $Apache::lonhomework::modifygrades) { |
|| $Apache::lonhomework::modifygrades) { |
$result.='<form name="gradesubmission" method="post" action="'; |
$result .= &add_grading_button(); |
my $uri=$env{'request.uri'}; |
|
if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); } |
|
$result.=$uri.'">'.&add_grading_button()."</form>\n"; |
|
my $symb=&Apache::lonnet::symbread(); |
my $symb=&Apache::lonnet::symbread(); |
if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'}) |
if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'}) |
|| &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) { |
|| &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) { |
$result.='<form method="post" name="slotrequest" action="/adm/slotrequest">'. |
$result .= &add_slotlist_button(); |
'<input type="hidden" name="symb" value="'.$symb.'" />'. |
|
'<input type="hidden" name="command" value="showslots" />'. |
|
'<input type="submit" name="requestattempt" value="'. |
|
&mt('Show Slot list').'" />'. |
|
'</form>'; |
|
my $target_id = |
|
&Apache::lonstathelpers::make_target_id({symb => $symb, |
|
part => '0'}); |
|
if (!§ion_restricted()) { |
|
$result.='<form method="post" name="gradingstatus" action="/adm/statistics">'. |
|
'<input type="hidden" name="problemchoice" value="'.$target_id.'" />'. |
|
'<input type="hidden" name="reportSelected" value="grading_analysis" />'. |
|
'<input type="submit" name="grading" value="'. |
|
&mt('Show Grading Status').'" />'. |
|
'</form>'; |
|
} |
|
} |
} |
} |
} |
} |
} |
Line 682 sub start_Task {
|
Line 750 sub start_Task {
|
if ((($status eq 'CAN_ANSWER') || ($status eq 'NOT_YET_VIEWED')) && ($version eq '')) { |
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 |
# CAN_ANSWER or NOT_YET_VIEWED mode, and no current version, unproctored access |
# thus self-checkedin |
# thus self-checkedin |
my $check = &check_in('Task',undef,undef,$slot_name); |
my $needsiptied; |
if ($check =~ /^error: /) { |
if (ref($slot)) { |
|
$needsiptied = $slot->{'iptied'}; |
|
} |
|
my $check = &check_in('Task',undef,undef,$slot_name,$needsiptied); |
|
if ($check =~ /^error:\s+(.*)$/) { |
my $symb=&Apache::lonnet::symbread(); |
my $symb=&Apache::lonnet::symbread(); |
&Apache::lonnet::logthis("Error during self-checkin of version $version of Task (symb: $symb) using slot: $slot_name"); |
&Apache::lonnet::logthis("Error: $1 during self-checkin of version $version of Task (symb: $symb) using slot: $slot_name"); |
} |
} |
&add_to_queue('gradingqueue',{'type' => 'Task', |
&add_to_queue('gradingqueue',{'type' => 'Task', |
'time' => time, |
'time' => time, |
'slot' => $slot_name}); |
'slot' => $slot_name}); |
($version,$previous)=&get_version(); |
($version,$previous)=&get_version(); |
} |
} |
|
if (($target eq 'web') && ($version ne '') && ($slot_name ne '')) { |
my $status_id = |
if (ref($slot) eq 'HASH') { |
($previous || $status eq 'SHOW_ANSWER') ? 'LC_task_feedback' |
if ($slot->{'endtime'} > time()) { |
: 'LC_task_take'; |
$result .= |
|
&Apache::lonhtmlcommon::set_due_date($slot->{'endtime'}); |
|
} |
|
} |
|
} |
|
|
|
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 .= '<div class="LC_task" id="'.$status_id.'">'."\n"; |
$result .= '<div class="LC_task" id="'.$status_id.'">'."\n"; |
|
|
push(@Apache::inputtags::status,$status); |
push(@Apache::inputtags::status,$status); |
Line 713 sub start_Task {
|
Line 796 sub start_Task {
|
} |
} |
my $msg; |
my $msg; |
if ($status eq 'UNAVAILABLE') { |
if ($status eq 'UNAVAILABLE') { |
$msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>'; |
$msg.='<p class="LC_error">'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</p>'; |
} elsif ($status eq 'NOT_IN_A_SLOT') { |
} elsif ($status eq 'NOT_IN_A_SLOT') { |
$msg.='<h1>'.&mt('You are not currently signed up to work at this time and/or place.').'</h1>'; |
$msg.='<p class="LC_warning">'.&mt('You are not currently signed up to work at this time and/or place.').'</p>'; |
$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') { |
} elsif ($status eq 'NEEDS_CHECKIN') { |
$msg.='<h1>'.&mt('You need the Proctor to validate you.'). |
$msg.='<p class="LC_warning">'.&mt('You need the Proctor to validate you.'). |
'</h1>'.&proctor_validation_screen($slot); |
'</p>'.&proctor_validation_screen($slot); |
} elsif ($status eq 'WAITING_FOR_GRADE') { |
} elsif ($status eq 'WAITING_FOR_GRADE') { |
$msg.='<h1>'.&mt('Your submission is in the grading queue.').'</h1>'; |
$msg.='<p class="LC_info">'.&mt('Your submission is in the grading queue.').'</p>'; |
} elsif ($env{'form.donescreen'}) { |
} elsif ($env{'form.donescreen'}) { |
$result .= &done_screen($version); |
$result .= &done_screen($version); |
} elsif ($status eq 'NOT_YET_VIEWED') { |
} elsif ($status eq 'NOT_YET_VIEWED') { |
my $symb=&Apache::lonnet::symbread(); |
my $symb=&Apache::lonnet::symbread(); |
$msg.=&Apache::structuretags::firstaccess_msg($accessmsg,$symb); |
$msg.=&Apache::structuretags::firstaccess_msg($accessmsg,$symb); |
|
} elsif ($status eq 'NEED_DIFFERENT_IP') { |
|
#FIXME |
} else { |
} else { |
$msg.='<h1>'.&mt('Not open to be viewed').'</h1>'; |
$msg.='<p class="LC_warning">'.&mt('Not open to be viewed').'</p>'; |
} |
} |
if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') { |
if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') { |
$msg.='The problem '.$accessmsg; |
$msg.='The problem '.$accessmsg; |
Line 958 sub get_key_todo {
|
Line 1043 sub get_key_todo {
|
my $classlist=&get_limited_classlist(); |
my $classlist=&get_limited_classlist(); |
if (!&allow_grade_user($classlist->{$uname.':'.$udom})) { |
if (!&allow_grade_user($classlist->{$uname.':'.$udom})) { |
return (undef,'not_allowed', |
return (undef,'not_allowed', |
&mt('Requested student ([_1]) is in a section you aren\'t allowed to grade.',$uname.':'.$udom)); |
&mt("Requested student ([_1]) is in a section you aren't allowed to grade.",$uname.':'.$udom)); |
} |
} |
} |
} |
my $gradingkey=&encode_queue_key($symb,$udom,$uname); |
my $gradingkey=&encode_queue_key($symb,$udom,$uname); |
Line 1125 sub end_Task {
|
Line 1210 sub end_Task {
|
$portheader = &mt('Submit Portfolio Files for Grading'); |
$portheader = &mt('Submit Portfolio Files for Grading'); |
$porttext = &mt('Indicate the files from your portfolio to be evaluated in grading this task.'); |
$porttext = &mt('Indicate the files from your portfolio to be evaluated in grading this task.'); |
} |
} |
$result.="\n".'<p>'.&Apache::lonhtmlcommon::start_pick_box(). |
$result.="\n".'<div>'.&Apache::lonhtmlcommon::start_pick_box(). |
&Apache::inputtags::file_selector("$version.0", |
&Apache::inputtags::file_selector("$version.0", |
"bridgetask","*", |
"bridgetask","*", |
'portfolioonly', |
'portfolioonly', |
'<h3>'.$portheader.'</h3><br />'. |
'<h3>'.$portheader.'</h3><br />'. |
$porttext.'<br />'). |
$porttext.'<br />'). |
&Apache::lonhtmlcommon::end_pick_box().'</p>'; |
&Apache::lonhtmlcommon::end_pick_box().'</div>'; |
} |
} |
if (!$previous && $status ne 'SHOW_ANSWER' && |
if (!$previous && $status ne 'SHOW_ANSWER' && |
&show_task($status,$previous)) { |
&show_task($status,$previous)) { |
Line 1214 DONEBUTTON
|
Line 1299 DONEBUTTON
|
} |
} |
$result.="\n</div>\n". |
$result.="\n</div>\n". |
&Apache::loncommon::end_page({'discussion' => 1}); |
&Apache::loncommon::end_page({'discussion' => 1}); |
} |
} elsif ($target eq 'answer') { |
|
$result.="\n</div>\n"; |
|
} |
} |
} |
|
|
my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); |
my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); |
Line 1225 DONEBUTTON
|
Line 1312 DONEBUTTON
|
} elsif (defined($Apache::lonhomework::history{"resource.$version.0.checkedin.slot"})) { |
} elsif (defined($Apache::lonhomework::history{"resource.$version.0.checkedin.slot"})) { |
$queue_data{'slot'} = $Apache::lonhomework::history{"resource.$version.0.checkedin.slot"}; |
$queue_data{'slot'} = $Apache::lonhomework::history{"resource.$version.0.checkedin.slot"}; |
} |
} |
|
|
|
|
if ($target eq 'grade' && !$env{'form.webgrade'} && !$previous |
if ($target eq 'grade' && !$env{'form.webgrade'} && !$previous |
&& $status eq 'CAN_ANSWER') { |
&& $status eq 'CAN_ANSWER') { |
Line 1367 DONEBUTTON
|
Line 1454 DONEBUTTON
|
if ($canstore) { |
if ($canstore) { |
&Apache::structuretags::finalize_storage(); |
&Apache::structuretags::finalize_storage(); |
my @interval = &Apache::lonnet::EXT("resource.0.interval"); |
my @interval = &Apache::lonnet::EXT("resource.0.interval"); |
if ($interval[0] =~ /^\d+$/ && $interval[1] eq 'resource') { |
if ($interval[0] =~ /^\d+/ && $interval[1] eq 'resource') { |
my $key=$courseid."\0".$symb; |
my $key=$courseid."\0".$symb; |
my %times=&Apache::lonnet::get('firstaccesstimes', |
my %times=&Apache::lonnet::get('firstaccesstimes', |
[$key],$domain,$name); |
[$key],$domain,$name); |
Line 1756 sub show_queue {
|
Line 1843 sub show_queue {
|
$result.=(<<FORM); |
$result.=(<<FORM); |
<td>$status</td> |
<td>$status</td> |
<td> |
<td> |
<form style="display: inline" method="post"> |
<form style="display: inline" method="post" action=""> |
<input type="hidden" name="gradingkey" value="$ekey" /> |
<input type="hidden" name="gradingkey" value="$ekey" /> |
<input type="hidden" name="queue" value="$queue" /> |
<input type="hidden" name="queue" value="$queue" /> |
<input type="hidden" name="gradingaction" value="$action" /> |
<input type="hidden" name="gradingaction" value="$action" /> |
Line 2175 sub select_user {
|
Line 2262 sub select_user {
|
$result.=&Apache::loncommon::start_data_table_row(); |
$result.=&Apache::loncommon::start_data_table_row(); |
$result.=<<RESULT; |
$result.=<<RESULT; |
<td> |
<td> |
<form style="display: inline" method="post"> |
<form style="display: inline" method="post" action=""> |
<input type="hidden" name="gradingkey" value="$todo" /> |
<input type="hidden" name="gradingkey" value="$todo" /> |
<input type="hidden" name="queue" value="$queue" /> |
<input type="hidden" name="queue" value="$queue" /> |
<input type="hidden" name="webgrade" value="no" /> |
<input type="hidden" name="webgrade" value="no" /> |
Line 3193 sub proctor_validation_screen {
|
Line 3280 sub proctor_validation_screen {
|
my ($slot) = @_; |
my ($slot) = @_; |
my (undef,undef,$domain,$user) = &Apache::lonnet::whichuser(); |
my (undef,undef,$domain,$user) = &Apache::lonnet::whichuser(); |
my $url=&Apache::lonnet::studentphoto($domain,$user,'jpg'); |
my $url=&Apache::lonnet::studentphoto($domain,$user,'jpg'); |
if ($url ne '/adm/lonKaputt/lonlogo_broken.gif') { |
|
$url = "<tr><td colspan=\"2\"><img src=\"$url\" /></td></tr>"; |
|
} else { |
|
undef($url); |
|
} |
|
|
|
my $name=&Apache::loncommon::plainname($user,$domain); |
my $name=&Apache::loncommon::plainname($user,$domain); |
|
|
my $msg; |
my $msg; |
if ($env{'form.proctorpassword'}) { |
if ($env{'form.proctorpassword'}) { |
$msg.='<p><span class="LC_warning">' |
$msg.='<p><span class="LC_warning">' |
Line 3228 sub proctor_validation_screen {
|
Line 3309 sub proctor_validation_screen {
|
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'prva' => "Proctor Validation", |
'prva' => "Proctor Validation", |
'yoro' => "Your room's proctor needs to validate your access to this resource.", |
'yoro' => "Your room's proctor needs to validate your access to this resource.", |
'prus' => "Proctor's Username:", |
'prus' => "Proctor's Username", |
'pasw' => "Password:", |
'pasw' => "Password", |
'prdo' => "Proctor's Domain:", |
'prdo' => "Proctor's Domain", |
'vali' => 'Validate', |
'vali' => 'Validate', |
'stui' => "Student who should be logged in is:", |
'stui' => "Student who should be logged in is:", |
'name' => "Name:", |
'name' => "Name", |
'sid' => "Student/Employee ID", |
'sid' => "Student/Employee ID", |
'unam' => "Username:", |
'unam' => "Username", |
|
'phot' => "Photo", |
); |
); |
my $result= (<<ENDCHECKOUT); |
my $proctortable = |
<h2>$lt{'prva'}</h2> |
&Apache::lonhtmlcommon::start_pick_box()."\n". |
<p>$lt{'yoro'}</p> |
&Apache::lonhtmlcommon::row_title('<label for="proctorname">'.$lt{'prus'}.'</label>'). |
$msg |
'<input type="text" name="proctorname" value="'.$env{'form.proctorname'}.'" '. |
|
'id="proctorname" autocomplete="new-password" />'. |
|
&Apache::lonhtmlcommon::row_closure()."\n". |
|
&Apache::lonhtmlcommon::row_title('<label for="proctorpassword">'.$lt{'pasw'}.'</label>'). |
|
'<input type="password" name="proctorpassword" value="" '. |
|
'id="proctorpassword" autocomplete="new-password" />'. |
|
&Apache::lonhtmlcommon::row_closure()."\n". |
|
&Apache::lonhtmlcommon::row_title('<label for="proctordomain">'.$lt{'prdo'}.'</label>'). |
|
'<input type="text" name="proctordomain" value="'.$env{'form.proctordomain'}.'" '. |
|
'id="proctordomain" autocomplete="off" />'. |
|
&Apache::lonhtmlcommon::row_closure(1)."\n". |
|
&Apache::lonhtmlcommon::end_pick_box()."\n"; |
|
|
|
my $studenttable = |
|
&Apache::loncommon::start_data_table('LC_manage_reservations'). |
|
&Apache::loncommon::start_data_table_row(). |
|
'<th>'.$lt{'name'}.':</th><td>'.$name.'</td>'. |
|
&Apache::loncommon::end_data_table_row()."\n". |
|
&Apache::loncommon::start_data_table_row(). |
|
'<th>'.$lt{'sid'}.':</th><td>'.$env{'environment.id'}.'</td>'. |
|
&Apache::loncommon::end_data_table_row()."\n". |
|
&Apache::loncommon::start_data_table_row(). |
|
'<th>'.$lt{'unam'}.':</th><td>'.$user.':'.$domain.'</td>'. |
|
&Apache::loncommon::end_data_table_row(); |
|
if ($url ne '/adm/lonKaputt/lonlogo_broken.gif') { |
|
$studenttable .= &Apache::loncommon::start_data_table_row(). |
|
'<th valign="top">'.$lt{'phot'}.'</th>'. |
|
'<td valign="top"><img src="'.&HTML::Entities::encode($url,'&<>"').'" '. |
|
'alt="'.&mt('Photo of [_1]',$name).'" /></td>'. |
|
&Apache::loncommon::end_data_table_row()."\n"; |
|
} |
|
$studenttable .= &Apache::loncommon::end_data_table()."\n"; |
|
if ($msg ne '') { |
|
$msg = "<p>$msg</p>"; |
|
} else { |
|
$msg = '<br /><br />'; |
|
} |
|
return (<<ENDCHECKOUT); |
|
<div style="padding:0;clear:both;margin:0;border:0"> |
|
<h2 class="LC_heading_2">$lt{'prva'}</h2><hr /> |
|
<div class="LC_left_float"> |
|
$lt{'yoro'} |
|
$msg |
<form name="checkout" method="post" action="$uri"> |
<form name="checkout" method="post" action="$uri"> |
<input type="hidden" name="validate" value="yes" /> |
<input type="hidden" name="validate" value="yes" /> |
<input type="hidden" name="submitted" value="yes" /> |
<input type="hidden" name="submitted" value="yes" /> |
<table> |
$proctortable |
<tr><td>$lt{'prus'}</td><td><input type="string" name="proctorname" value="$env{'form.proctorname'}" /></td></tr> |
<br /> |
<tr><td>$lt{'pasw'}</td><td><input type="password" name="proctorpassword" value="" /></td></tr> |
<input type="submit" name="checkoutbutton" value="$lt{'vali'}" /> |
<tr><td>$lt{'prdo'}</td><td><input type="string" name="proctordomain" value="$env{'form.proctordomain'}" /></td></tr> |
|
</table> |
|
<input type="submit" name="checkoutbutton" value="$lt{'vali'}" /><br /> |
|
<table border="1"> |
|
<tr><td> |
|
<table> |
|
<tr><td colspan="2">$lt{'stui'}</td></tr> |
|
<tr><td>$lt{'name'}</td><td>$name</td></tr> |
|
<tr><td>$lt{'sid'}</td><td>$env{'environment.id'}</td></tr> |
|
<tr><td>$lt{'unam'}</td><td>$user:$domain</td></tr> |
|
$url |
|
</table> |
|
</tr></td> |
|
</table> |
|
</form> |
</form> |
|
</div> |
|
<div class="LC_left_float"> |
|
$lt{'stui'} |
|
<br /><br /> |
|
$studenttable |
|
</div> |
|
</div> |
ENDCHECKOUT |
ENDCHECKOUT |
|
|
return $result; |
|
} |
} |
|
|
1; |
1; |