version 1.128.2.7, 2006/04/10 07:21:14
|
version 1.157, 2006/05/25 20:08:18
|
Line 40 use Apache::slotrequest();
|
Line 40 use Apache::slotrequest();
|
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Instance','InstanceText','Criteria','ClosingParagraph')); |
&Apache::lonxml::register('Apache::bridgetask',('Task','IntroParagraph','Dimension','Question','Instance','InstanceText','Criteria','ClosingParagraph')); |
} |
} |
|
|
sub initialize_bridgetask { |
sub initialize_bridgetask { |
Line 66 sub proctor_check_auth {
|
Line 66 sub proctor_check_auth {
|
|
|
my @allowed=split(",",$slot->{'proctor'}); |
my @allowed=split(",",$slot->{'proctor'}); |
foreach my $possible (@allowed) { |
foreach my $possible (@allowed) { |
my ($puser,$pdom)=(split('@',$possible)); |
my ($puser,$pdom)=(split(':',$possible)); |
if ($puser eq $user && $pdom eq $domain) { |
if ($puser eq $user && $pdom eq $domain) { |
my $authenticated=0; |
my $authenticated=0; |
if ( $slot->{'secret'} =~ /\S/ && |
if ( $slot->{'secret'} =~ /\S/ && |
Line 79 sub proctor_check_auth {
|
Line 79 sub proctor_check_auth {
|
$authenticated=1; |
$authenticated=1; |
} |
} |
} |
} |
if ($authenticated && $type eq 'Task') { |
if ($authenticated) { |
# increment version |
&create_new_version($type,$user,$domain,$slot_name); |
my $version= |
|
$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; |
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; |
|
} |
} |
} |
} |
} |
} |
return 0; |
return 0; |
} |
} |
|
|
|
sub create_new_version { |
|
my ($type,$user,$domain,$slot_name) = @_; |
|
if ($type eq 'Task') { |
|
# increment version |
|
my $version= |
|
$Apache::lonhomework::history{'resource.0.version'}; |
|
$version++; |
|
&Apache::lonxml::debug("Making 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; |
|
if (defined($user) && defined($domain)) { |
|
$Apache::lonhomework::results{"resource.$version.0.checkedin"}= |
|
$user.':'.$domain; |
|
} else { |
|
$Apache::lonhomework::results{"resource.$version.0.checkedin"}= |
|
$env{'user.name'}.':'.$env{'user.domain'}; |
|
} |
|
if (defined($slot_name)) { |
|
$Apache::lonhomework::results{"resource.$version.0.checkedin.slot"}= |
|
$slot_name; |
|
} |
|
} elsif ($type eq 'problem') { |
|
&Apache::lonxml::debug("authed $slot_name"); |
|
if (defined($user) && defined($domain)) { |
|
$Apache::lonhomework::results{"resource.0.checkedin"}= |
|
$user.':'.$domain; |
|
} |
|
if (defined($slot_name)) { |
|
$Apache::lonhomework::results{"resource.0.checkedin.slot"}= |
|
$slot_name; |
|
} |
|
} |
|
} |
|
|
sub get_version { |
sub get_version { |
my ($version,$previous); |
my ($version,$previous); |
if ($env{'form.previousversion'} && |
if ($env{'form.previousversion'} && |
Line 120 sub get_version {
|
Line 137 sub get_version {
|
$version=$env{'form.previousversion'}; |
$version=$env{'form.previousversion'}; |
$previous=1; |
$previous=1; |
} else { |
} else { |
$version=$Apache::lonhomework::history{'resource.0.version'}; |
if (defined($Apache::lonhomework::results{'resource.0.version'})) { |
|
$version=$Apache::lonhomework::results{'resource.0.version'}; |
|
} elsif (defined($Apache::lonhomework::history{'resource.0.version'})) { |
|
$version=$Apache::lonhomework::history{'resource.0.version'}; |
|
} |
$previous=0; |
$previous=0; |
} |
} |
if (wantarray) { |
if (wantarray) { |
Line 170 sub add_grading_button {
|
Line 191 sub add_grading_button {
|
my (undef,$cid)=&Apache::lonxml::whichuser(); |
my (undef,$cid)=&Apache::lonxml::whichuser(); |
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; |
my %sections = &Apache::loncommon::get_sections($cdom,$cnum); |
my $numsections=&Apache::loncommon::get_sections($cdom,$cnum,\%sections); |
|
my $size=5; |
my $size=5; |
if (scalar(keys(%sections)) < 3) { |
if (scalar(keys(%sections)) < 3) { |
$size=scalar(keys(%sections))+2; |
$size=scalar(keys(%sections))+2; |
Line 214 sub add_grading_button {
|
Line 235 sub add_grading_button {
|
'gradingdomain'); |
'gradingdomain'); |
$result.=&Apache::loncommon::studentbrowser_javascript(); |
$result.=&Apache::loncommon::studentbrowser_javascript(); |
$result.= '</p>'; |
$result.= '</p>'; |
} |
} |
return $result; |
return $result; |
} |
} |
|
|
Line 223 sub add_request_another_attempt_button {
|
Line 244 sub add_request_another_attempt_button {
|
if (!$text) { $text="Request another attempt"; } |
if (!$text) { $text="Request another attempt"; } |
my $result; |
my $result; |
my $symb=&Apache::lonnet::symbread(); |
my $symb=&Apache::lonnet::symbread(); |
|
# not a slot access based resource |
|
my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb); |
|
if ($useslots =~ /^\s*no\s*$/i) { |
|
return ''; |
|
} |
|
|
my ($slot_name,$slot)=&Apache::slotrequest::check_for_reservation($symb); |
my ($slot_name,$slot)=&Apache::slotrequest::check_for_reservation($symb); |
my $action='get_reservation'; |
my $action='get_reservation'; |
if ($slot_name) { |
if ($slot_name) { |
Line 278 sub show_task {
|
Line 305 sub show_task {
|
( $status eq 'NOT_IN_A_SLOT') || |
( $status eq 'NOT_IN_A_SLOT') || |
( $status eq 'NEEDS_CHECKIN') || |
( $status eq 'NEEDS_CHECKIN') || |
( $status eq 'WAITING_FOR_GRADE') || |
( $status eq 'WAITING_FOR_GRADE') || |
( $status eq 'INVALID_ACCESS') )) { |
( $status eq 'INVALID_ACCESS') || |
|
( &get_version() eq ''))) { |
return 0; |
return 0; |
} |
} |
if ($env{'form.donescreen'}) { return 0; } |
if ($env{'form.donescreen'}) { return 0; } |
Line 349 sub webgrade_standard_info {
|
Line 377 sub webgrade_standard_info {
|
|
|
my %lt=&Apache::lonlocal::texthash('done' => 'Next Item', |
my %lt=&Apache::lonlocal::texthash('done' => 'Next Item', |
'stop' => 'Quit Grading', |
'stop' => 'Quit Grading', |
|
'fail' => 'Fail Rest', |
); |
); |
|
|
my $result=<<INFO; |
my $result=<<INFO; |
<div class="LC_GRADING_maincontrols"> |
<div class="LC_GRADING_maincontrols"> |
<input type="submit" name="next" value="$lt{'done'}" /> |
<input type="submit" name="next" value="$lt{'done'}" /> |
<input type="submit" name="stop" value="$lt{'stop'}" /> |
<input type="submit" name="stop" value="$lt{'stop'}" /> |
|
<input type="button" name="fail" value="$lt{'fail'}" |
|
onclick="javascript:onFailRest()" /> |
</div> |
</div> |
$file_list |
$file_list |
INFO |
INFO |
Line 375 sub start_Task {
|
Line 406 sub start_Task {
|
} |
} |
|
|
$Apache::lonhomework::parsing_a_task=1; |
$Apache::lonhomework::parsing_a_task=1; |
#should get back a <html> or the neccesary stuff to start XML/MathML |
|
my ($result,$head_tag_start,$body_tag_start,$form_tag_start)= |
|
&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); |
|
|
|
$head_tag_start .= &style($target); |
|
$body_tag_start .= '<div class="LC_task">'."\n"; |
|
|
|
|
my $name; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$head_tag_start.='<title>'. |
$name = &Apache::structuretags::get_resource_name($parstack,$safeeval); |
&Apache::structuretags::get_resource_name($parstack,$safeeval). |
} |
'</title>'; |
|
|
my ($result,$form_tag_start); |
|
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex' |
|
|| $target eq 'edit') { |
|
($result,$form_tag_start) = |
|
&Apache::structuretags::page_start($target,$token,$tagstack, |
|
$parstack,$parser,$safeeval, |
|
$name,&style($target)); |
|
$result .= '<div class="LC_task">'."\n"; |
} |
} |
|
|
if ($target eq 'web' && $env{'request.state'} ne 'construct') { |
if ($target eq 'web' && $env{'request.state'} ne 'construct') { |
if ($Apache::lonhomework::modifygrades) { |
if ($Apache::lonhomework::queuegrade |
$body_tag_start.='<form name="gradesubmission" method="post" action="'; |
|| $Apache::lonhomework::modifygrades) { |
|
$result.='<form name="gradesubmission" method="post" action="'; |
my $uri=$env{'request.uri'}; |
my $uri=$env{'request.uri'}; |
if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); } |
if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); } |
$body_tag_start.=$uri.'">'.&add_grading_button()."</form>"; |
$result.=$uri.'">'.&add_grading_button()."</form>"; |
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'})) { |
$body_tag_start.='<form method="post" name="slotrequest" action="/adm/slotrequest">'. |
$result.='<form method="post" name="slotrequest" action="/adm/slotrequest">'. |
'<input type="hidden" name="symb" value="'.$symb.'" />'. |
'<input type="hidden" name="symb" value="'.$symb.'" />'. |
'<input type="hidden" name="command" value="showslots" />'. |
'<input type="hidden" name="command" value="showslots" />'. |
'<input type="submit" name="requestattempt" value="'. |
'<input type="submit" name="requestattempt" value="'. |
Line 405 sub start_Task {
|
Line 440 sub start_Task {
|
my $target_id = |
my $target_id = |
&Apache::lonstathelpers::make_target_id({symb => $symb, |
&Apache::lonstathelpers::make_target_id({symb => $symb, |
part => '0'}); |
part => '0'}); |
$body_tag_start.='<form method="post" name="gradingstatus" action="/adm/statistics">'. |
$result.='<form method="post" name="gradingstatus" action="/adm/statistics">'. |
'<input type="hidden" name="problemchoice" value="'.$target_id.'" />'. |
'<input type="hidden" name="problemchoice" value="'.$target_id.'" />'. |
'<input type="hidden" name="reportSelected" value="grading_analysis" />'. |
'<input type="hidden" name="reportSelected" value="grading_analysis" />'. |
'<input type="submit" name="grading" value="'. |
'<input type="submit" name="grading" value="'. |
Line 422 sub start_Task {
|
Line 457 sub start_Task {
|
my ($version,$previous)=&get_version(); |
my ($version,$previous)=&get_version(); |
($status,$accessmsg,my $slot_name,$slot) = |
($status,$accessmsg,my $slot_name,$slot) = |
&Apache::lonhomework::check_slot_access('0','Task'); |
&Apache::lonhomework::check_slot_access('0','Task'); |
|
if ($status eq 'CAN_ANSWER' && $version eq '') { |
|
&create_new_version('Task',undef,undef,$slot_name); |
|
&add_to_queue('gradingqueue',{'type' => 'Task', |
|
'time' => time, |
|
'slot' => $slot_name}); |
|
($version,$previous)=&get_version(); |
|
} |
|
|
push(@Apache::inputtags::status,$status); |
push(@Apache::inputtags::status,$status); |
$Apache::inputtags::slot_name=$slot_name; |
$Apache::inputtags::slot_name=$slot_name; |
my $expression='$external::datestatus="'.$status.'";'; |
my $expression='$external::datestatus="'.$status.'";'; |
$expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$version.0.solved"}.'";'; |
$expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$version.0.solved"}.'";'; |
&Apache::run::run($expression,$safeeval); |
&Apache::run::run($expression,$safeeval); |
&Apache::lonxml::debug("Got $status"); |
&Apache::lonxml::debug("Got $status"); |
$body_tag_start.=&add_previous_version_button($status); |
$result.=&add_previous_version_button($status); |
if (!&show_task($status,$previous)) { |
if (!&show_task($status,$previous)) { |
my $bodytext=&Apache::lonxml::get_all_text("/task",$parser,$style); |
my $bodytext=&Apache::lonxml::get_all_text("/task",$parser,$style); |
if ( $target eq "web" ) { |
if ( $target eq "web" ) { |
$result.= $head_tag_start.'</head>'.$body_tag_start; |
|
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$result.=$form_tag_start; |
$result.=$form_tag_start; |
} |
} |
Line 455 sub start_Task {
|
Line 497 sub start_Task {
|
my $files = '<ul>'; |
my $files = '<ul>'; |
foreach my $file (@files) { |
foreach my $file (@files) { |
my $url="/uploaded/$domain/$user/portfolio$file"; |
my $url="/uploaded/$domain/$user/portfolio$file"; |
$file = '<tt>'.$file.'</tt>'; |
if (! &Apache::lonnet::stat_file($url)) { |
|
$file = &mt('<font color="red"> Nonexistant file:</font> <tt>[_1]</tt>',$file); |
|
} else { |
|
$file = '<tt>'.$file.'</tt>'; |
|
} |
$files .= '<li>'.$file.'</li>'; |
$files .= '<li>'.$file.'</li>'; |
} |
} |
$files.='</ul>'; |
$files.='</ul>'; |
Line 486 DONESCREEN
|
Line 532 DONESCREEN
|
if ($status eq 'NEEDS_CHECKIN') { |
if ($status eq 'NEEDS_CHECKIN') { |
if(&proctor_check_auth($slot_name,$slot,'Task') |
if(&proctor_check_auth($slot_name,$slot,'Task') |
&& defined($Apache::inputtags::slot_name)) { |
&& defined($Apache::inputtags::slot_name)) { |
my $result=&add_to_queue('gradingqueue', |
my $result= |
[$Apache::inputtags::slot_name]); |
&add_to_queue('gradingqueue', |
|
{'type' => 'Task', |
|
'time' => time, |
|
'slot' => |
|
$Apache::inputtags::slot_name}); |
&Apache::lonxml::debug("add_to_queue said $result"); |
&Apache::lonxml::debug("add_to_queue said $result"); |
} |
} |
} |
} |
} |
} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
$result.="$head_tag_start</head> |
|
$body_tag_start \n"; |
|
|
|
$result.=&preserve_grade_info(); |
$result.=&preserve_grade_info(); |
$result.=&internal_location(); |
$result.=&internal_location(); |
$result.=$form_tag_start. |
$result.=$form_tag_start. |
Line 506 DONESCREEN
|
Line 554 DONESCREEN
|
$target eq 'webgrade') { |
$target eq 'webgrade') { |
my $webgrade='yes'; |
my $webgrade='yes'; |
if ($target eq 'webgrade') { |
if ($target eq 'webgrade') { |
$result.=$head_tag_start. |
$result.= "\n".'<div class="LC_GRADING_task">'."\n". |
'</head>'.$body_tag_start. |
|
"\n".'<div class="LC_GRADING_task">'."\n". |
|
'<script type="text/javascript" |
'<script type="text/javascript" |
src="/res/adm/includes/task_grading.js"></script>'; |
src="/res/adm/includes/task_grading.js"></script>'; |
#$result.='<br />Review'.&show_queue('reviewqueue'); |
#$result.='<br />Review'.&show_queue('reviewqueue'); |
Line 592 DONESCREEN
|
Line 638 DONESCREEN
|
$result.="\n".'<div id="LC_GRADING_criterialist">'; |
$result.="\n".'<div id="LC_GRADING_criterialist">'; |
} |
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start. |
$result.=$form_tag_start. |
&Apache::structuretags::problem_edit_header(); |
&Apache::structuretags::problem_edit_header(); |
$Apache::lonxml::warnings_error_header= |
$Apache::lonxml::warnings_error_header= |
&mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")."<br />"; |
&mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")."<br />"; |
Line 628 sub get_key_todo {
|
Line 674 sub get_key_todo {
|
} |
} |
|
|
|
|
my $me=$env{'user.name'}.'@'.$env{'user.domain'}; |
my $me=$env{'user.name'}.':'.$env{'user.domain'}; |
|
|
#need to try both queues.. |
#need to try both queues.. |
if (defined($env{'form.regradeaspecificsubmission'}) && |
if (defined($env{'form.regradeaspecificsubmission'}) && |
Line 674 sub get_key_todo {
|
Line 720 sub get_key_todo {
|
#otherwise (defined($who) && $who ne $me) some else has it... |
#otherwise (defined($who) && $who ne $me) some else has it... |
return (undef,'not_allowed', |
return (undef,'not_allowed', |
&mt('Another user ([_1]) currently has the record for [_2] locked.', |
&mt('Another user ([_1]) currently has the record for [_2] locked.', |
$who,$env{'form.gradinguser'}.'@'.$env{'form.gradingdomain'})); |
$who,$env{'form.gradinguser'}.':'.$env{'form.gradingdomain'})); |
} |
} |
|
|
|
|
Line 797 DONEBUTTON
|
Line 843 DONEBUTTON
|
my $bt_status=$Apache::lonhomework::history{"resource.$version.0.status"}; |
my $bt_status=$Apache::lonhomework::history{"resource.$version.0.status"}; |
my $title=&Apache::lonnet::gettitle(); |
my $title=&Apache::lonnet::gettitle(); |
|
|
|
my $start_time; |
|
|
my $slot_name= |
my $slot_name= |
$Apache::lonhomework::history{"resource.$version.0.checkedin.slot"}; |
$Apache::lonhomework::history{"resource.$version.0.checkedin.slot"}; |
my %slot=&Apache::lonnet::get_slot($slot_name); |
if ($slot_name) { |
my $start_time= |
my %slot=&Apache::lonnet::get_slot($slot_name); |
&Apache::lonlocal::locallocaltime($slot{'starttime'}); |
|
|
$start_time=$slot{'starttime'} |
|
} else { |
|
$start_time= |
|
&Apache::lonnet::EXT('resource.0.opendate'); |
|
} |
|
$start_time=&Apache::lonlocal::locallocaltime($start_time); |
|
|
my $status = "\n<div class='LC_$bt_status LC_criteria'>\n"; |
my $status = "\n<div class='LC_$bt_status LC_criteria'>\n"; |
|
|
Line 830 DONEBUTTON
|
Line 884 DONEBUTTON
|
$man_count++; |
$man_count++; |
} |
} |
} |
} |
|
|
my $opt_req=&Apache::lonxml::get_param('OptionalRequired', |
my $opt_req=&Apache::lonxml::get_param('OptionalRequired', |
$parstack,$safeeval); |
$parstack,$safeeval); |
if ($opt_req !~ /\S/) { $opt_req='0'; } |
if ($opt_req !~ /\S/) { $opt_req='0'; } |
Line 838 DONEBUTTON
|
Line 893 DONEBUTTON
|
my $internal_location=&internal_location(); |
my $internal_location=&internal_location(); |
$result=~s/\Q$internal_location\E/$status/; |
$result=~s/\Q$internal_location\E/$status/; |
} |
} |
} |
$result.="\n</div>\n". |
if ($target eq 'web') { |
&Apache::loncommon::end_page({'discussion' => 1}); |
$result.="\n</div>\n".&Apache::lonxml::xmlend().'</html>'; |
|
} |
} |
} |
} |
if ($target eq 'grade' && !$env{'form.webgrade'} && !$previous) { |
if ($target eq 'grade' && !$env{'form.webgrade'} && !$previous) { |
Line 864 DONEBUTTON
|
Line 918 DONEBUTTON
|
} |
} |
&Apache::lonhomework::showhash(%Apache::lonhomework::results); |
&Apache::lonhomework::showhash(%Apache::lonhomework::results); |
&Apache::structuretags::finalize_storage(); |
&Apache::structuretags::finalize_storage(); |
if ($award eq 'SUBMITTED' |
if ($award eq 'SUBMITTED') { |
&& defined($Apache::inputtags::slot_name)) { |
my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); |
&add_to_queue('gradingqueue',[$Apache::inputtags::slot_name]); |
if ($useslots =~ /^\s*no\s*$/i) { |
|
&add_to_queue('gradingqueue', |
|
{'type' => 'Task', |
|
'time' => time}); |
|
} elsif (defined($Apache::inputtags::slot_name)) { |
|
&add_to_queue('gradingqueue', |
|
{'type' => 'Task', |
|
'time' => time, |
|
'slot' => $Apache::inputtags::slot_name}); |
|
} |
} |
} |
} elsif ($Apache::lonhomework::results{'INTERNAL_store'}) { |
} elsif ($Apache::lonhomework::results{'INTERNAL_store'}) { |
&Apache::structuretags::finalize_storage(); |
&Apache::structuretags::finalize_storage(); |
Line 902 DONEBUTTON
|
Line 965 DONEBUTTON
|
} |
} |
&Apache::lonxml::debug("all dim ".join(':',@Apache::bridgetask::dimensionlist)."results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review"); |
&Apache::lonxml::debug("all dim ".join(':',@Apache::bridgetask::dimensionlist)."results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review"); |
$Apache::lonhomework::results{'resource.0.regrader'}= |
$Apache::lonhomework::results{'resource.0.regrader'}= |
$env{'user.name'}.'@'.$env{'user.domain'}; |
$env{'user.name'}.':'.$env{'user.domain'}; |
if ($review) { |
if ($review) { |
$Apache::lonhomework::results{"resource.$version.0.status"}='review'; |
$Apache::lonhomework::results{"resource.$version.0.status"}='review'; |
if ($env{'form.queue'} eq 'reviewqueue') { |
if ($env{'form.queue'} eq 'reviewqueue') { |
Line 980 DONEBUTTON
|
Line 1043 DONEBUTTON
|
#$result.='<input type="submit" name="save" value="'. |
#$result.='<input type="submit" name="save" value="'. |
# &mt('Save Partial Grade and Continue Grading').'" /> '; |
# &mt('Save Partial Grade and Continue Grading').'" /> '; |
$result.='</form>'."\n</div>\n</div>\n". |
$result.='</form>'."\n</div>\n</div>\n". |
&Apache::loncommon::endbodytag().'</html>'; |
&Apache::loncommon::end_page(); |
} elsif ($target eq 'meta') { |
} elsif ($target eq 'meta') { |
$result.=&Apache::response::meta_package_write('Task'); |
$result.=&Apache::response::meta_package_write('Task'); |
$result.=&Apache::response::meta_stores_write('solved','string', |
$result.=&Apache::response::meta_stores_write('solved','string', |
Line 1005 sub move_between_queues {
|
Line 1068 sub move_between_queues {
|
} else { |
} else { |
$cur_data = ['none']; |
$cur_data = ['none']; |
} |
} |
my $result=&add_to_queue($dest_queue,[$cur_data->[0]]); |
my $result=&add_to_queue($dest_queue,$cur_data); |
if ($result ne 'ok') { |
if ($result ne 'ok') { |
return $result; |
return $result; |
} |
} |
Line 1018 sub check_queue_unlock {
|
Line 1081 sub check_queue_unlock {
|
if ($queue eq 'none') { return 'ok'; } |
if ($queue eq 'none') { return 'ok'; } |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
if (!defined($key)) { |
if (!defined($key)) { |
$key="$symb\0queue\0$uname\@$udom"; |
$key="$symb\0queue\0$uname:$udom"; |
} |
} |
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 $me=$env{'user.name'}.'@'.$env{'user.domain'}; |
my $me=$env{'user.name'}.':'.$env{'user.domain'}; |
my $who=&queue_key_locked($queue,$key,$cdom,$cnum); |
my $who=&queue_key_locked($queue,$key,$cdom,$cnum); |
if ($who eq $me) { |
if ($who eq $me) { |
return &Apache::lonnet::del($queue,["$key\0locked"],$cdom,$cnum); |
return &Apache::lonnet::del($queue,["$key\0locked"],$cdom,$cnum); |
Line 1085 sub get_queue_data {
|
Line 1148 sub get_queue_data {
|
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
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 $todo="$symb\0queue\0$uname\@$udom"; |
my $todo="$symb\0queue\0$uname:$udom"; |
my ($key,$value)=&Apache::lonnet::get($queue,[$todo],$cdom,$cnum); |
my ($key,$value)=&Apache::lonnet::get($queue,[$todo],$cdom,$cnum); |
if ($key eq $todo && ref($value)) { |
if ($key eq $todo && ref($value)) { |
return $value; |
return $value; |
Line 1104 sub check_queue_for_key {
|
Line 1167 sub check_queue_for_key {
|
if (defined($results{"$todo\0locked"})) { |
if (defined($results{"$todo\0locked"})) { |
return 'locked'; |
return 'locked'; |
} |
} |
my $slot; |
if (my $slot=&slotted_access($results{$todo})) { |
if (ref($results{$todo}) eq 'ARRAY') { |
|
$slot = $results{$todo}[0]; |
|
} elsif (ref($results{$todo}) eq 'HASH') { |
|
$slot = $results{$todo}{'slot'}; |
|
} |
|
if (defined($slot)) { |
|
my %slot_data=&Apache::lonnet::get_slot($slot); |
my %slot_data=&Apache::lonnet::get_slot($slot); |
if ($slot_data{'endtime'} > time) { |
if ($slot_data{'endtime'} > time) { |
return 'in_progress'; |
return 'in_progress'; |
} |
} |
|
} else { |
|
my ($symb) = &decode_queue_key($todo); |
|
my $due_date = &Apache::lonhomework::due_date('0',$symb); |
|
if ($due_date > time) { |
|
return 'in_progress'; |
|
} |
} |
} |
return 'enqueued'; |
return 'enqueued'; |
} |
} |
Line 1131 sub add_to_queue {
|
Line 1194 sub add_to_queue {
|
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 %data; |
my %data; |
$data{"$symb\0queue\0$uname\@$udom"}=$user_data; |
$data{"$symb\0queue\0$uname:$udom"}=$user_data; |
return &Apache::lonnet::cput($queue,\%data,$cdom,$cnum); |
return &Apache::lonnet::cput($queue,\%data,$cdom,$cnum); |
} |
} |
|
|
|
sub get_limited_classlist { |
|
my ($sections) = @_; |
|
|
|
my $classlist = &Apache::loncoursedata::get_classlist(); |
|
foreach my $student (keys(%$classlist)) { |
|
if ( $classlist->{$student}[&Apache::loncoursedata::CL_STATUS()] |
|
ne 'Active') { |
|
delete($classlist->{$student}); |
|
} |
|
} |
|
|
|
if (ref($sections) && !grep('all',@{ $sections })) { |
|
foreach my $student (keys(%$classlist)) { |
|
my $section = |
|
$classlist->{$student}[&Apache::loncoursedata::CL_SECTION()]; |
|
if (! grep($section,@{ $sections })) { |
|
delete($classlist->{$student}); |
|
} |
|
} |
|
} |
|
return $classlist; |
|
} |
|
|
|
|
sub show_queue { |
sub show_queue { |
my ($queue,$with_selects)=@_; |
my ($queue,$with_selects)=@_; |
my $result; |
my $result; |
Line 1144 sub show_queue {
|
Line 1231 sub show_queue {
|
|
|
my @chosen_sections= |
my @chosen_sections= |
&Apache::loncommon::get_env_multiple('form.chosensections'); |
&Apache::loncommon::get_env_multiple('form.chosensections'); |
&Apache::grades::init_perm(); |
|
my ($classlist,$section,$fullname)=&Apache::grades::getclasslist(\@chosen_sections,); |
my $classlist = &get_limited_classlist(\@chosen_sections); |
&Apache::grades::reset_perm(); |
|
if (!(grep(/^all$/,@chosen_sections))) { |
if (!(grep(/^all$/,@chosen_sections))) { |
$result.='<p> Showing only sections <tt>'.join(', ',@chosen_sections). |
$result.='<p> Showing only sections <tt>'.join(', ',@chosen_sections). |
'</tt>.</p> '."\n"; |
'</tt>.</p> '."\n"; |
} |
} |
|
|
|
my ($view,$view_section); |
|
my $scope = $env{'request.course.id'}; |
|
if (!($view=&Apache::lonnet::allowed('vgr',$scope))) { |
|
$scope .= '/'.$env{'request.course.sec'}; |
|
if ( $view = &Apache::lonnet::allowed('vgr',$scope)) { |
|
$view_section=$env{'request.course.sec'}; |
|
} else { |
|
undef($view); |
|
} |
|
} |
|
|
my $regexp="^$symb\0"; |
my $regexp="^$symb\0"; |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my ($tmp)=%queue; |
my ($tmp)=%queue; |
Line 1165 sub show_queue {
|
Line 1263 sub show_queue {
|
foreach my $key (sort(keys(%queue))) { |
foreach my $key (sort(keys(%queue))) { |
my ($symb,$uname,$udom) = &decode_queue_key($key); |
my ($symb,$uname,$udom) = &decode_queue_key($key); |
if (!defined($classlist->{$uname.':'.$udom})) { next; } |
if (!defined($classlist->{$uname.':'.$udom})) { next; } |
|
|
|
my $section = $classlist->{$uname.':'.$udom}[&Apache::loncoursedata::CL_SECTION()]; |
|
|
|
my $can_view=1; |
|
if (!$view |
|
|| ($view_section && !$section) |
|
|| ($view_section && $section && ($view_section ne $section))) { |
|
$can_view=0; |
|
} |
|
|
if ($key=~/locked$/ && !$with_selects) { |
if ($key=~/locked$/ && !$with_selects) { |
$result.="<tr><td>$uname</td>"; |
$result.="<tr><td>$uname</td>"; |
$result.='<td>'.$queue{$key}.'</td></tr>'; |
$result.='<td>'.$queue{$key}.'</td></tr>'; |
Line 1174 sub show_queue {
|
Line 1282 sub show_queue {
|
&Apache::lonlocal::locallocaltime($queue{$key})."</td></tr>"; |
&Apache::lonlocal::locallocaltime($queue{$key})."</td></tr>"; |
} elsif ($key!~/(timestamp|locked)$/) { |
} elsif ($key!~/(timestamp|locked)$/) { |
$result.="<tr>"; |
$result.="<tr>"; |
my $slot=$queue{$key}->[0]; |
my ($end_time,$slot_text); |
my %slot_data=&Apache::lonnet::get_slot($slot); |
if (my $slot=&slotted_access($queue{$key})) { |
|
my %slot_data=&Apache::lonnet::get_slot($slot); |
|
$end_time = $slot_data{'endtime'}; |
|
$slot_text = &mt('Slot: [_1]',$slot); |
|
} else { |
|
$end_time = &Apache::lonhomework::due_date('0',$symb); |
|
$slot_text = ''; |
|
} |
if ($with_selects) { |
if ($with_selects) { |
my $ekey=&Apache::lonnet::escape($key); |
my $ekey=&Apache::lonnet::escape($key); |
my ($action,$description,$status)=('select',&mt('Select')); |
my ($action,$description,$status)=('select',&mt('Select')); |
if (exists($queue{"$key\0locked"})) { |
if (exists($queue{"$key\0locked"})) { |
my $me=$env{'user.name'}.'@'.$env{'user.domain'}; |
my $me=$env{'user.name'}.':'.$env{'user.domain'}; |
$status=&mt('Locked by <tt>[_1]</tt>',$queue{"$key\0locked"}); |
$status=&mt('Locked by <tt>[_1]</tt>',$queue{"$key\0locked"}); |
if ($me eq $queue{"$key\0locked"}) { |
if ($me eq $queue{"$key\0locked"}) { |
($action,$description)=('resume',&mt('Resume')); |
($action,$description)=('resume',&mt('Resume')); |
Line 1193 sub show_queue {
|
Line 1308 sub show_queue {
|
$seclist.='<input type="hidden" name="chosensections" |
$seclist.='<input type="hidden" name="chosensections" |
value="'.$sec.'" />'; |
value="'.$sec.'" />'; |
} |
} |
if (time > $slot_data{'endtime'}) { |
if ($can_view && ($end_time ne '' && time > $end_time)) { |
$result.=(<<FORM); |
$result.=(<<FORM); |
<td>$status</td> |
<td>$status</td> |
<td> |
<td> |
Line 1208 sub show_queue {
|
Line 1323 sub show_queue {
|
</form> |
</form> |
</td> |
</td> |
FORM |
FORM |
|
} elsif (!$can_view && ($end_time ne '' && time > $end_time)) { |
|
$result.='<td>'.&mt("Not gradable").'</td><td> </td>' |
} else { |
} else { |
$result.='<td>'.&mt("In Progress").'</td>' |
$result.='<td>'.&mt("In Progress").'</td><td> </td>' |
} |
} |
} |
} |
$result.= "<td>".$fullname->{$uname.':'.$udom}. |
$result.= "<td>".$classlist->{$uname.':'.$udom}[&Apache::loncoursedata::CL_FULLNAME()]. |
" <tt>($uname\@$udom)</tt> </td>"; |
" <tt>($uname:$udom)</tt> </td>"; |
$result.='<td>Slot: '.$slot.' End time: '. |
$result.='<td>'.$slot_text.' End time: '. |
&Apache::lonlocal::locallocaltime($slot_data{'endtime'}). |
&Apache::lonlocal::locallocaltime($end_time). |
"</td></tr>"; |
"</td></tr>"; |
} |
} |
} |
} |
Line 1230 sub get_queue_counts {
|
Line 1346 sub get_queue_counts {
|
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
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 $classlist=&get_limited_classlist(); |
|
|
my $regexp="^$symb\0"; |
my $regexp="^$symb\0"; |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my ($tmp)=%queue; |
my ($tmp)=%queue; |
Line 1239 sub get_queue_counts {
|
Line 1358 sub get_queue_counts {
|
my ($entries,$ready_to_grade,$locks)=(0,0,0); |
my ($entries,$ready_to_grade,$locks)=(0,0,0); |
my %slot_cache; |
my %slot_cache; |
foreach my $key (sort(keys(%queue))) { |
foreach my $key (sort(keys(%queue))) { |
|
my ($symb,$uname,$udom) = &decode_queue_key($key); |
|
if (!defined($classlist->{$uname.':'.$udom})) { next; } |
|
|
if ($key=~/locked$/) { |
if ($key=~/locked$/) { |
$locks++; |
$locks++; |
} elsif ($key=~/timestamp$/) { |
} elsif ($key=~/timestamp$/) { |
#ignore |
#ignore |
} elsif ($key!~/(timestamp|locked)$/) { |
} elsif ($key!~/(timestamp|locked)$/) { |
my ($symb,$uname,$udom) = &decode_queue_key($key); |
|
$entries++; |
$entries++; |
my $slot=$queue{$key}->[0]; |
if (my $slot=&slotted_access($queue{$key})) { |
if (!exists($slot_cache{$slot})) { |
if (!exists($slot_cache{$slot})) { |
my %slot_data=&Apache::lonnet::get_slot($slot); |
my %slot_data=&Apache::lonnet::get_slot($slot); |
$slot_cache{$slot} = \%slot_data; |
$slot_cache{$slot} = \%slot_data; |
} |
} |
if (time > $slot_cache{$slot}{'endtime'}) { |
if (time > $slot_cache{$slot}{'endtime'}) { |
$ready_to_grade++; |
$ready_to_grade++; |
|
} |
|
} else { |
|
my $due_date = &Apache::lonhomework::due_date('0',$symb); |
|
if ($due_date ne '' && time > $due_date) { |
|
$ready_to_grade++; |
|
} |
} |
} |
} |
} |
} |
} |
Line 1261 sub get_queue_counts {
|
Line 1388 sub get_queue_counts {
|
|
|
sub encode_queue_key { |
sub encode_queue_key { |
my ($symb,$udom,$uname)=@_; |
my ($symb,$udom,$uname)=@_; |
return "$symb\0queue\0$uname\@$udom"; |
return "$symb\0queue\0$uname:$udom"; |
} |
} |
|
|
sub decode_queue_key { |
sub decode_queue_key { |
my ($key)=@_; |
my ($key)=@_; |
my ($symb,undef,$user) = split("\0",$key); |
my ($symb,undef,$user) = split("\0",$key); |
my ($uname,$udom) = split('@',$user); |
my ($uname,$udom) = split(':',$user); |
return ($symb,$uname,$udom); |
return ($symb,$uname,$udom); |
} |
} |
|
|
Line 1286 sub queue_key_locked {
|
Line 1413 sub queue_key_locked {
|
return undef; |
return undef; |
} |
} |
|
|
|
sub slotted_access { |
|
my ($queue_entry) = @_; |
|
if (ref($queue_entry) eq 'ARRAY') { |
|
if (defined($queue_entry->[0])) { |
|
return $queue_entry->[0]; |
|
} |
|
return undef; |
|
} elsif (ref($queue_entry) eq 'HASH') { |
|
if (defined($queue_entry->{'slot'})) { |
|
return $queue_entry->{'slot'}; |
|
} |
|
return undef; |
|
} |
|
return undef; |
|
} |
|
|
sub pick_from_queue_data { |
sub pick_from_queue_data { |
my ($queue,$check_section,$queuedata,$cdom,$cnum)=@_; |
my ($queue,$check_section,$queuedata,$cdom,$cnum,$classlist)=@_; |
my @possible; # will hold queue entries that are valid to be selected |
my @possible; # will hold queue entries that are valid to be selected |
foreach my $key (keys(%$queuedata)) { |
foreach my $key (keys(%$queuedata)) { |
if ($key =~ /\0locked$/) { next; } |
if ($key =~ /\0locked$/) { next; } |
if ($key =~ /\0timestamp$/) { next; } |
if ($key =~ /\0timestamp$/) { next; } |
|
|
my ($symb,$uname,$udom)=&decode_queue_key($key); |
my ($symb,$uname,$udom)=&decode_queue_key($key); |
|
if (!defined($classlist->{$uname.':'.$udom})) { next; } |
|
|
if ($check_section) { |
if ($check_section) { |
my $section=&Apache::lonnet::getsection($uname,$udom); |
my $section = |
|
$classlist->{$uname.':'.$udom}[&Apache::loncoursedata::CL_SECTION()]; |
if ($section eq $check_section) { |
if ($section eq $check_section) { |
&Apache::lonxml::debug("my sec"); |
&Apache::lonxml::debug("my sec"); |
next; |
next; |
} |
} |
} |
} |
my $slot=$queuedata->{$key}[0]; |
my $end_time; |
my %slot_data=&Apache::lonnet::get_slot($slot); |
if (my $slot=&slotted_access($queuedata->{$key})) { |
if ($slot_data{'endtime'} > time) { |
&Apache::lonxml::debug("looking at slot $slot"); |
&Apache::lonxml::debug("not time"); |
my %slot_data=&Apache::lonnet::get_slot($slot); |
next; |
if ($slot_data{'endtime'} < time) { |
|
$end_time = $slot_data{'endtime'}; |
|
} else { |
|
&Apache::lonxml::debug("not time ".$slot_data{'endtime'}); |
|
next; |
|
} |
|
} else { |
|
my $due_date = &Apache::lonhomework::due_date('0',$symb); |
|
if ($due_date < time) { |
|
$end_time = $due_date; |
|
} else { |
|
&Apache::lonxml::debug("not time $due_date"); |
|
next; |
|
} |
} |
} |
|
|
if (exists($queuedata->{"$key\0locked"})) { |
if (exists($queuedata->{"$key\0locked"})) { |
&Apache::lonxml::debug("someone already has um."); |
&Apache::lonxml::debug("someone already has um."); |
next; |
next; |
} |
} |
push(@possible,[$key,$slot_data{'endtime'}]); |
push(@possible,[$key,$end_time]); |
} |
} |
if (@possible) { |
if (@possible) { |
# sort entries in order by slot end time |
# sort entries in order by slot end time |
@possible = sort { $a->[1] <=> $b->[1] } @possible; |
@possible = sort { $a->[1] <=> $b->[1] } @possible; |
# pick one of the entries in the top 10% in small queues and one |
# pick one of the entries in the top 10% in small queues and one |
# of the first ten entries in large queues |
# of the first ten entries in large queues |
my $ten_percent = int($#possible * 0.1); |
#my $ten_percent = int($#possible * 0.1); |
if ($ten_percent < 1 ) { $ten_percent = 1; } |
#if ($ten_percent < 1 ) { $ten_percent = 1; } |
if ($ten_percent > 10) { $ten_percent = 10; } |
#if ($ten_percent > 10) { $ten_percent = 10; } |
my $max=($#possible < $ten_percent) ? $#possible : $ten_percent; |
#my $max=($#possible < $ten_percent) ? $#possible : $ten_percent; |
|
|
return $possible[int(rand($max))][0]; |
#return $possible[int(rand($max))][0]; |
|
return $possible[0][0]; |
} |
} |
return undef; |
return undef; |
} |
} |
Line 1330 sub pick_from_queue_data {
|
Line 1492 sub pick_from_queue_data {
|
sub find_mid_grade { |
sub find_mid_grade { |
my ($queue,$symb,$cdom,$cnum)=@_; |
my ($queue,$symb,$cdom,$cnum)=@_; |
my $todo=&Apache::lonnet::unescape($env{'form.gradingkey'}); |
my $todo=&Apache::lonnet::unescape($env{'form.gradingkey'}); |
my $me=$env{'user.name'}.'@'.$env{'user.domain'}; |
my $me=$env{'user.name'}.':'.$env{'user.domain'}; |
if ($todo) { |
if ($todo) { |
my $who=&queue_key_locked($queue,$todo,$cdom,$cnum); |
my $who=&queue_key_locked($queue,$todo,$cdom,$cnum); |
if ($who eq $me) { return $todo; } |
if ($who eq $me) { return $todo; } |
Line 1350 sub find_mid_grade {
|
Line 1512 sub find_mid_grade {
|
|
|
sub lock_key { |
sub lock_key { |
my ($queue,$todo)=@_; |
my ($queue,$todo)=@_; |
my $me=$env{'user.name'}.'@'.$env{'user.domain'}; |
my $me=$env{'user.name'}.':'.$env{'user.domain'}; |
my (undef,$cid)=&Apache::lonxml::whichuser(); |
my (undef,$cid)=&Apache::lonxml::whichuser(); |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
Line 1370 sub get_queue_symb_status {
|
Line 1532 sub get_queue_symb_status {
|
$cnum=$env{'course.'.$cid.'.num'}; |
$cnum=$env{'course.'.$cid.'.num'}; |
$cdom=$env{'course.'.$cid.'.domain'}; |
$cdom=$env{'course.'.$cid.'.domain'}; |
} |
} |
|
my $classlist=&get_limited_classlist(); |
|
|
my $regexp="^$symb\0"; |
my $regexp="^$symb\0"; |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my ($tmp)=%queue; |
my ($tmp)=%queue; |
Line 1379 sub get_queue_symb_status {
|
Line 1543 sub get_queue_symb_status {
|
next if ($key=~/locked$/); |
next if ($key=~/locked$/); |
next if ($key=~/timestamp$/); |
next if ($key=~/timestamp$/); |
my ($symb,$uname,$udom) = &decode_queue_key($key); |
my ($symb,$uname,$udom) = &decode_queue_key($key); |
|
next if (!defined($classlist->{$uname.':'.$udom})); |
push(@users,"$uname:$udom"); |
push(@users,"$uname:$udom"); |
} |
} |
return @users; |
return @users; |
Line 1394 sub get_from_queue {
|
Line 1559 sub get_from_queue {
|
&Apache::lonxml::debug("found ".join(':',&decode_queue_key($todo))); |
&Apache::lonxml::debug("found ".join(':',&decode_queue_key($todo))); |
if ($todo) { return $todo; } |
if ($todo) { return $todo; } |
my $attempts=0; |
my $attempts=0; |
|
|
|
my $classlist=&get_limited_classlist(); |
|
|
while (1) { |
while (1) { |
if ($attempts > 2) { |
if ($attempts > 2) { |
# tried twice to get a queue entry, giving up |
# tried twice to get a queue entry, giving up |
Line 1404 sub get_from_queue {
|
Line 1572 sub get_from_queue {
|
$cdom,$cnum); |
$cdom,$cnum); |
&Apache::lonxml::debug("$starttime"); |
&Apache::lonxml::debug("$starttime"); |
my $regexp="^$symb\0queue\0"; |
my $regexp="^$symb\0queue\0"; |
my $range= ($attempts < 1 ) ? '0-100' : '0-400'; |
#my $range= ($attempts < 1 ) ? '0-100' : '0-400'; |
|
|
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
#make a pass looking for a user _not_ in my section |
#make a pass looking for a user _not_ in my section |
if ($env{'request.course.sec'}) { |
if ($env{'request.course.sec'}) { |
&Apache::lonxml::debug("sce"); |
&Apache::lonxml::debug("sce"); |
$todo=&pick_from_queue_data($queue,$env{'request.course.sec'}, |
$todo=&pick_from_queue_data($queue,$env{'request.course.sec'}, |
\%queue,$cdom,$cnum); |
\%queue,$cdom,$cnum,$classlist); |
&Apache::lonxml::debug("sce $todo"); |
&Apache::lonxml::debug("sce $todo"); |
} |
} |
# no one _not_ in our section so look for any user that is |
# no one _not_ in our section so look for any user that is |
# ready for grading |
# ready for grading |
if (!$todo) { |
if (!$todo) { |
&Apache::lonxml::debug("no sce"); |
&Apache::lonxml::debug("no sce"); |
$todo=&pick_from_queue_data($queue,undef,\%queue,$cdom,$cnum); |
$todo=&pick_from_queue_data($queue,undef,\%queue,$cdom,$cnum, |
|
$classlist); |
&Apache::lonxml::debug("no sce $todo"); |
&Apache::lonxml::debug("no sce $todo"); |
} |
} |
# no user to grade |
# no user to grade |
Line 1463 sub select_user {
|
Line 1632 sub select_user {
|
|
|
my @chosen_sections= |
my @chosen_sections= |
&Apache::loncommon::get_env_multiple('form.chosensections'); |
&Apache::loncommon::get_env_multiple('form.chosensections'); |
&Apache::grades::init_perm(); |
|
my ($classlist,$section,$fullname)=&Apache::grades::getclasslist(\@chosen_sections,); |
my $classlist = &get_limited_classlist(\@chosen_sections); |
&Apache::grades::reset_perm(); |
|
|
|
my $result; |
my $result; |
if (!(grep(/^all$/,@chosen_sections))) { |
if (!(grep(/^all$/,@chosen_sections))) { |
Line 1474 sub select_user {
|
Line 1642 sub select_user {
|
} |
} |
$result.='<table border="1">'; |
$result.='<table border="1">'; |
|
|
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
foreach my $student (sort {lc($classlist->{$a}[&Apache::loncoursedata::CL_FULLNAME()]) cmp lc($classlist->{$b}[&Apache::loncoursedata::CL_FULLNAME()]) } (keys(%$classlist))) { |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
|
|
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
Line 1497 sub select_user {
|
Line 1665 sub select_user {
|
my $todo = |
my $todo = |
&Apache::lonnet::escape(&encode_queue_key($symb,$udom,$uname)); |
&Apache::lonnet::escape(&encode_queue_key($symb,$udom,$uname)); |
if ($cannot_grade) { |
if ($cannot_grade) { |
$result.='<tr><td> </td><td>'.$fullname->{$student}. |
$result.='<tr><td> </td><td>'.$classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()]. |
'</td><td>'; |
'</td><td>'; |
} else { |
} else { |
my $seclist; |
my $seclist; |
Line 1505 sub select_user {
|
Line 1673 sub select_user {
|
$seclist.='<input type="hidden" name="chosensections" |
$seclist.='<input type="hidden" name="chosensections" |
value="'.$sec.'" />'; |
value="'.$sec.'" />'; |
} |
} |
my $studentdis = $student; |
|
$studentdis =~ tr/:/@/; |
|
$result.=<<RESULT; |
$result.=<<RESULT; |
<tr> |
<tr> |
<td> |
<td> |
Line 1518 sub select_user {
|
Line 1684 sub select_user {
|
<input type="submit" name="submit" value="Regrade" /> |
<input type="submit" name="submit" value="Regrade" /> |
$seclist |
$seclist |
</form> |
</form> |
<td>$fullname->{$student} <tt>($studentdis)</tt></td> |
<td>$classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()] <tt>($student)</tt></td> |
<td> |
<td> |
RESULT |
RESULT |
} |
} |
Line 1612 sub get_id {
|
Line 1778 sub get_id {
|
} |
} |
|
|
my %dimension; |
my %dimension; |
|
sub start_Question { return &start_Dimension(@_); } |
sub start_Dimension { |
sub start_Dimension { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
undef(%dimension); |
undef(%dimension); |
Line 1654 sub get_instance {
|
Line 1821 sub get_instance {
|
} |
} |
@instances = &Math::Random::random_permutation(@instances); |
@instances = &Math::Random::random_permutation(@instances); |
$instance = $instances[($version-1)%scalar(@instances)]; |
$instance = $instances[($version-1)%scalar(@instances)]; |
$Apache::lonhomework::results{"resource.$version.0.$dim.instance"} = |
if ($version =~ /^\d$/) { |
$instance; |
$Apache::lonhomework::results{"resource.$version.0.$dim.instance"} = |
$Apache::lonhomework::results{'INTERNAL_store'} = 1; |
$instance; |
|
$Apache::lonhomework::results{'INTERNAL_store'} = 1; |
|
} |
&Apache::response::poprandomnumber(); |
&Apache::response::poprandomnumber(); |
return $instance; |
return $instance; |
} |
} |
Line 1665 sub get_instance {
|
Line 1834 sub get_instance {
|
{ |
{ |
my $last_link; |
my $last_link; |
sub link { |
sub link { |
my ($instance,$id) = @_; |
my ($id) = @_; |
return 'LC_GRADING_criteria_'.$instance.'_'.$id; |
$id =~ s/\./_/g; |
|
return 'LC_GRADING_criteria_'.$id; |
} |
} |
|
sub end_Question { return &end_Dimension(@_); } |
sub end_Dimension { |
sub end_Dimension { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $result=&Apache::lonxml::endredirection(); |
my $result=&Apache::lonxml::endredirection(); |
Line 1703 sub get_instance {
|
Line 1874 sub get_instance {
|
my $man_passed=0; |
my $man_passed=0; |
my $opt_count=0; |
my $opt_count=0; |
my $opt_passed=0; |
my $opt_passed=0; |
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
foreach my $id ( @{$dimension{$instance.'.criterias'}}, |
if ($dimension{$instance.'.criteria.'.$id.'.mandatory'} |
@{$dimension{'criterias'}} ) { |
|
if ($dimension{'criteria.'.$id.'.mandatory'} |
eq 'N') { |
eq 'N') { |
$opt_count++; |
$opt_count++; |
if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"} eq 'pass') { |
if ($Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"} eq 'pass') { |
$opt_passed++; |
$opt_passed++; |
} |
} |
} else { |
} else { |
Line 1718 sub get_instance {
|
Line 1890 sub get_instance {
|
} |
} |
} |
} |
if ($man_passed eq $man_count) { $man_passed='all'; } |
if ($man_passed eq $man_count) { $man_passed='all'; } |
|
|
my $opt_req=$dimension{$instance.'.optionalrequired'}; |
my $opt_req=$dimension{$instance.'.optionalrequired'}; |
if ($opt_req !~ /\S/) { $opt_req='0'; } |
if ($opt_req !~ /\S/) { |
|
$opt_req= |
|
&Apache::lonxml::get_param('OptionalRequired', |
|
$parstack,$safeeval); |
|
if ($opt_req !~ /\S/) { $opt_req = 0; } |
|
} |
$dim_info.="\n<p>".&mt('You passed [_1] of the [_2] mandatory components and [_3] of the [_4] optional components, of which you were required to pass [_5].',$man_passed,$man_count,$opt_passed,$opt_count,$opt_req)."</p>\n</div>"; |
$dim_info.="\n<p>".&mt('You passed [_1] of the [_2] mandatory components and [_3] of the [_4] optional components, of which you were required to pass [_5].',$man_passed,$man_count,$opt_passed,$opt_count,$opt_req)."</p>\n</div>"; |
|
|
my $internal_location=&internal_location($dim); |
my $internal_location=&internal_location($dim); |
$result=~s/\Q$internal_location\E/$dim_info/; |
$result=~s/\Q$internal_location\E/$dim_info/; |
|
|
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
foreach my $id (@{$dimension{$instance.'.criterias'}}, |
my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"}; |
@{$dimension{'criterias'}}) { |
my $comment=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}; |
my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"}; |
my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N'); |
my $comment=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}; |
|
my $mandatory=($dimension{'criteria.'.$id.'.mandatory'} ne 'N'); |
if ($mandatory) { |
if ($mandatory) { |
$mandatory='Mandatory'; |
$mandatory='Mandatory'; |
} else { |
} else { |
Line 1741 sub get_instance {
|
Line 1920 sub get_instance {
|
} |
} |
my $status_display=$status; |
my $status_display=$status; |
$status_display=~s/^([a-z])/uc($1)/e; |
$status_display=~s/^([a-z])/uc($1)/e; |
@Apache::scripttag::parser_env = @_; |
|
$result.= |
$result.= |
'<div class="LC_'.$status.' LC_criteria"><h4>' |
'<div class="LC_'.$status.' LC_criteria"><h4>' |
.$mandatory.' Criteria</h4><p>'; |
.$mandatory.' Criteria</h4><p>'; |
@Apache::scripttag::parser_env = @_; |
@Apache::scripttag::parser_env = @_; |
$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id}); |
$result.=&Apache::scripttag::xmlparse($dimension{'criteria.'.$id}); |
$result.='</p><p class="LC_grade">'.$status_display.'</p>'; |
$result.='</p><p class="LC_grade">'.$status_display.'</p>'; |
if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}) { |
if ($Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}) { |
$result.='<p class="LC_comment">'.&mt('Comment: [_1]',$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).'</p>'; |
$result.='<p class="LC_comment">'.&mt('Comment: [_1]',$Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}).'</p>'; |
} |
} |
$result.='</div>'; |
$result.='</div>'; |
} |
} |
Line 1761 sub get_instance {
|
Line 1939 sub get_instance {
|
&Apache::scripttag::xmlparse($dimension{'intro'}); |
&Apache::scripttag::xmlparse($dimension{'intro'}); |
@Apache::scripttag::parser_env = @_; |
@Apache::scripttag::parser_env = @_; |
&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); |
&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); |
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
foreach my $id (@{$dimension{$instance.'.criterias'}}, |
my $link=&link($instance,$id); |
@{$dimension{'criterias'}} ) { |
my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"}; |
my $link=&link($id); |
|
my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$id.status"}; |
$result.='<div class="LC_GRADING_criteria" id="'.$link.'">'."\n". |
$result.='<div class="LC_GRADING_criteria" id="'.$link.'">'."\n". |
'<div class="LC_GRADING_criteriatext" id="next_'.$last_link.'">'."\n"; |
'<div class="LC_GRADING_criteriatext" id="next_'.$last_link.'">'."\n"; |
@Apache::scripttag::parser_env = @_; |
@Apache::scripttag::parser_env = @_; |
$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id}); |
$result.=&Apache::scripttag::xmlparse($dimension{'criteria.'.$id}); |
$result.='</div>'."\n". |
$result.='</div>'."\n". |
#$dimension{$instance.'.criteria.'.$id}. |
#$dimension{'criteria.'.$id}. |
'<div class="LC_GRADING_grade">'."\n". |
'<div class="LC_GRADING_grade">'."\n". |
'<label class="LC_GRADING_ungraded"><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label>'."\n". |
'<label class="LC_GRADING_ungraded"><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label>'."\n". |
'<label class="LC_GRADING_fail"><input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.&mt('Fail').'</label>'."\n". |
'<label class="LC_GRADING_fail"><input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.&mt('Fail').'</label>'."\n". |
Line 1777 sub get_instance {
|
Line 1956 sub get_instance {
|
'<label class="LC_GRADING_review"><input type="radio" name="HWVAL_'.$link.'" value="review" '.($status eq 'review' ? 'checked="checked"':'').' />'.&mt('Review').'</label>'."\n". |
'<label class="LC_GRADING_review"><input type="radio" name="HWVAL_'.$link.'" value="review" '.($status eq 'review' ? 'checked="checked"':'').' />'.&mt('Review').'</label>'."\n". |
'</div>'."\n". |
'</div>'."\n". |
'<label class="LC_GRADING_comment">'.&mt('Additional Comment for Student')."\n". |
'<label class="LC_GRADING_comment">'.&mt('Additional Comment for Student')."\n". |
'<textarea class="LC_GRADING_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).'</textarea>'."\n". |
'<textarea class="LC_GRADING_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.0.$dim.$id.comment"}).'</textarea>'."\n". |
'</label>'."\n". |
'</label>'."\n". |
'<ul class="LC_GRADING_navbuttons">'."\n". |
'<ul class="LC_GRADING_navbuttons">'."\n". |
'<li><a href="#'.$last_link.'">Prev</a></li>'."\n". |
'<li><a href="#'.$last_link.'">Prev</a></li>'."\n". |
'<li><a href="#next_'.$link.'">Next</a></li>'."\n". |
'<li><a href="#next_'.$link.'">Next</a></li>'."\n". |
'</ul>'."\n". |
'</ul>'."\n". |
'</div>'."\n"; |
'</div>'."\n"; |
$result.=&grading_history($version,$dim,$instance,$id); |
$result.=&grading_history($version,$dim,$id); |
$last_link=$link; |
$last_link=$link; |
} |
} |
} elsif ($target eq 'grade' && $env{'form.webgrade'}) { |
} elsif ($target eq 'grade' && $env{'form.webgrade'}) { |
Line 1792 sub get_instance {
|
Line 1971 sub get_instance {
|
my $mandatory_failed=0; |
my $mandatory_failed=0; |
my $ungraded=0; |
my $ungraded=0; |
my $review=0; |
my $review=0; |
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
|
my $link=&link($instance,$id); |
@Apache::scripttag::parser_env = @_; |
my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.status"}=$env{'form.HWVAL_'.$link}; |
$result.=&Apache::scripttag::xmlparse($dimension{'intro'}); |
$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.comment"}=$env{'form.HWVAL_comment_'.$link}; |
foreach my $id (@{$dimension{$instance.'.criterias'}}, |
my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N'); |
@{$dimension{'criterias'}}) { |
|
my $link=&link($id); |
|
@Apache::scripttag::parser_env = @_; |
|
$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); |
|
my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$id.status"}=$env{'form.HWVAL_'.$link}; |
|
$Apache::lonhomework::results{"resource.$version.0.$dim.$id.comment"}=$env{'form.HWVAL_comment_'.$link}; |
|
my $mandatory=($dimension{'criteria.'.$id.'.mandatory'} ne 'N'); |
if ($status eq 'pass') { |
if ($status eq 'pass') { |
if (!$mandatory) { $optional_passed++; } |
if (!$mandatory) { $optional_passed++; } |
} elsif ($status eq 'fail') { |
} elsif ($status eq 'fail') { |
Line 1809 sub get_instance {
|
Line 1994 sub get_instance {
|
$ungraded++; |
$ungraded++; |
} |
} |
} |
} |
if ($optional_passed < $dimension{$instance.'.optionalrequired'}) { |
# FIXME optional required can apply to only <instance> right now... |
|
my $opt_req=$dimension{$instance.'.optionalrequired'}; |
|
if ($opt_req !~ /\S/) { |
|
$opt_req= |
|
&Apache::lonxml::get_param('OptionalRequired', |
|
$parstack,$safeeval); |
|
if ($opt_req !~ /\S/) { $opt_req = 0; } |
|
} |
|
if ($optional_passed < $opt_req) { |
$mandatory_failed++; |
$mandatory_failed++; |
} |
} |
&Apache::lonxml::debug("all instance ".join(':',@{$dimension{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review"); |
&Apache::lonxml::debug("all instance ".join(':',@{$dimension{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review"); |
Line 1835 sub get_instance {
|
Line 2028 sub get_instance {
|
} |
} |
|
|
sub grading_history { |
sub grading_history { |
my ($version,$dim,$instance,$criteria) = @_; |
my ($version,$dim,$id) = @_; |
if (!&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) { |
if (!&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) { |
return ''; |
return ''; |
} |
} |
my ($result,$grader); |
my ($result,$grader); |
my $scope="resource.$version.0.$dim.$instance.$criteria"; |
my $scope="resource.$version.0.$dim.$id"; |
foreach my $t (1..$Apache::lonhomework::history{'version'}) { |
foreach my $t (1..$Apache::lonhomework::history{'version'}) { |
if (exists($Apache::lonhomework::history{$t.':resource.0.regrader'})) { |
if (exists($Apache::lonhomework::history{$t.':resource.0.regrader'})) { |
my ($gname,$gdom) = |
my ($gname,$gdom) = |
split('@',$Apache::lonhomework::history{$t.':resource.0.regrader'}); |
split(':',$Apache::lonhomework::history{$t.':resource.0.regrader'}); |
my $fullname = &Apache::loncommon::plainname($gname,$gdom); |
my $fullname = &Apache::loncommon::plainname($gname,$gdom); |
$grader = &Apache::loncommon::aboutmewrapper($fullname, |
$grader = &Apache::loncommon::aboutmewrapper($fullname, |
$gname,$gdom); |
$gname,$gdom); |
Line 1869 sub grading_history {
|
Line 2062 sub grading_history {
|
sub start_IntroParagraph { |
sub start_IntroParagraph { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result; |
my $result; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') { |
if ($tagstack->[-2] eq 'Dimension') { |
if ($tagstack->[-2] eq 'Dimension' || $tagstack->[-2] eq 'Question' ) { |
$dimension{'intro'}=&Apache::lonxml::get_all_text('/introparagraph',$parser,$style); |
$dimension{'intro'}= |
|
&Apache::lonxml::get_all_text('/introparagraph', |
} elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') { |
$parser,$style); |
|
} elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') { |
&Apache::lonxml::startredirection(); |
&Apache::lonxml::startredirection(); |
} |
} |
|
|
Line 1910 sub start_InstanceText {
|
Line 2104 sub start_InstanceText {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $instance_id=$Apache::bridgetask::instance[-1]; |
my $instance_id=$Apache::bridgetask::instance[-1]; |
my $text=&Apache::lonxml::get_all_text('/instancetext',$parser,$style); |
my $text=&Apache::lonxml::get_all_text('/instancetext',$parser,$style); |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') { |
$dimension{$instance_id.'.text'}=$text; |
$dimension{$instance_id.'.text'}=$text; |
} |
} |
return ''; |
return ''; |
Line 1922 sub end_InstanceText {
|
Line 2116 sub end_InstanceText {
|
|
|
sub start_Criteria { |
sub start_Criteria { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $instance_id=$Apache::bridgetask::instance[-1]; |
|
my $criteria=&Apache::lonxml::get_all_text('/criteria',$parser,$style); |
my $criteria=&Apache::lonxml::get_all_text('/criteria',$parser,$style); |
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') { |
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'grade') { |
my $id=&get_id($parstack,$safeeval); |
my $id=&get_id($parstack,$safeeval); |
$dimension{$instance_id.'.criteria.'.$id}=$criteria; |
if (&Apache::londefdef::is_inside_of($tagstack,'Instance')) { |
$dimension{$instance_id.'.criteria.'.$id.'.mandatory'}= |
my $instance_id=$Apache::bridgetask::instance[-1]; |
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval); |
$dimension{"criteria.$instance_id.$id"}=$criteria; |
push(@{$dimension{$instance_id.'.criterias'}},$id); |
$dimension{"criteria.$instance_id.$id.mandatory"}= |
|
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval); |
|
push(@{$dimension{$instance_id.'.criterias'}},"$instance_id.$id"); |
|
} else { |
|
$dimension{'criteria.'.$id}=$criteria; |
|
$dimension{'criteria.'.$id.'.mandatory'}= |
|
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval); |
|
push(@{$dimension{'criterias'}},$id); |
|
} |
} |
} |
return ''; |
return ''; |
} |
} |
Line 1968 sub proctor_validation_screen {
|
Line 2169 sub proctor_validation_screen {
|
<tr><td colspan="2">Student who should be logged in is:</td></tr> |
<tr><td colspan="2">Student who should be logged in is:</td></tr> |
<tr><td>Name:</td><td>$name</td></tr> |
<tr><td>Name:</td><td>$name</td></tr> |
<tr><td>Student ID:</td><td>$env{'environment.id'}</td></tr> |
<tr><td>Student ID:</td><td>$env{'environment.id'}</td></tr> |
<tr><td>Usename</td><td>$user\@$domain</td></tr> |
<tr><td>Usename</td><td>$user:$domain</td></tr> |
<tr><td colspan="2"><img src="$url" /></td></tr> |
<tr><td colspan="2"><img src="$url" /></td></tr> |
</table> |
</table> |
</tr></td> |
</tr></td> |