version 1.70, 2005/10/14 16:23:39
|
version 1.89, 2005/12/20 18:09:49
|
Line 60 sub initialize_bridgetask {
|
Line 60 sub initialize_bridgetask {
|
} |
} |
|
|
sub proctor_check_auth { |
sub proctor_check_auth { |
my ($slot_name,$slot)=@_; |
my ($slot_name,$slot,$type)=@_; |
my $user=$env{'form.proctorname'}; |
my $user=$env{'form.proctorname'}; |
my $domain=$env{'form.proctordomain'}; |
my $domain=$env{'form.proctordomain'}; |
|
|
Line 68 sub proctor_check_auth {
|
Line 68 sub proctor_check_auth {
|
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 $authhost=&Apache::lonnet::authenticate($puser,$env{'form.proctorpassword'},$pdom); |
my $authenticated=0; |
if ($authhost ne 'no_host') { |
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') { |
my $version= |
my $version= |
$Apache::lonhomework::results{'resource.version'}= |
$Apache::lonhomework::results{'resource.0.version'}= |
++$Apache::lonhomework::history{'resource.version'}; |
++$Apache::lonhomework::history{'resource.0.version'}; |
$Apache::lonhomework::results{"resource.$version.checkedin"}= |
$Apache::lonhomework::results{"resource.$version.0.checkedin"}= |
$user.'@'.$domain; |
$user.'@'.$domain; |
$Apache::lonhomework::results{"resource.$version.checkedin.slot"}= |
$Apache::lonhomework::results{"resource.$version.0.checkedin.slot"}= |
$slot_name; |
$slot_name; |
foreach my $key (keys(%Apache::lonhomework::history)) { |
foreach my $key (keys(%Apache::lonhomework::history)) { |
if ($key=~/^resource\.0\./) { |
if ($key=~/^resource\.0\./) { |
Line 83 sub proctor_check_auth {
|
Line 93 sub proctor_check_auth {
|
} |
} |
} |
} |
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; |
} |
} |
} |
} |
} |
} |
Line 93 sub get_version {
|
Line 109 sub get_version {
|
my ($version,$previous); |
my ($version,$previous); |
if ($env{'form.previousversion'} && |
if ($env{'form.previousversion'} && |
$env{'form.previousversion'} ne 'current' && |
$env{'form.previousversion'} ne 'current' && |
defined($Apache::lonhomework::history{'resource.'.$env{'form.previousversion'}.'.status'})) { |
defined($Apache::lonhomework::history{'resource.'.$env{'form.previousversion'}.'.0.status'})) { |
$version=$env{'form.previousversion'}; |
$version=$env{'form.previousversion'}; |
$previous=1; |
$previous=1; |
} else { |
} else { |
$version=$Apache::lonhomework::history{'resource.version'}; |
$version=$Apache::lonhomework::history{'resource.0.version'}; |
$previous=0; |
$previous=0; |
} |
} |
if (wantarray) { |
if (wantarray) { |
Line 109 sub get_version {
|
Line 125 sub get_version {
|
sub add_previous_version_button { |
sub add_previous_version_button { |
my ($status)=@_; |
my ($status)=@_; |
my $result; |
my $result; |
if ($Apache::lonhomework::history{'resource.version'} eq '') { |
if ($Apache::lonhomework::history{'resource.0.version'} eq '') { |
return ''; |
return ''; |
} |
} |
if ($Apache::lonhomework::history{'resource.version'} < 2 && |
if ($Apache::lonhomework::history{'resource.0.version'} < 2 && |
$status ne 'NEEDS_CHECKIN') { |
$status ne 'NEEDS_CHECKIN') { |
return ''; |
return ''; |
} |
} |
Line 123 sub add_previous_version_button {
|
Line 139 sub add_previous_version_button {
|
"</h3>\n"; |
"</h3>\n"; |
} |
} |
my @to_show; |
my @to_show; |
foreach my $test_version (1..$Apache::lonhomework::history{'resource.version'}) { |
foreach my $test_version (1..$Apache::lonhomework::history{'resource.0.version'}) { |
if (defined($Apache::lonhomework::history{'resource.'.$test_version.'.status'})) { |
if (defined($Apache::lonhomework::history{'resource.'.$test_version.'.0.status'})) { |
push(@to_show,$test_version); |
push(@to_show,$test_version); |
} |
} |
} |
} |
Line 306 sub internal_location {
|
Line 322 sub internal_location {
|
sub submission_time_stamp { |
sub submission_time_stamp { |
my ($symb,$courseid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my ($symb,$courseid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my $submissiontime; |
my $submissiontime; |
my $version=$Apache::lonhomework::history{'resource.version'}; |
my $version=$Apache::lonhomework::history{'resource.0.version'}; |
for (my $v=$Apache::lonhomework::history{'version'};$v>0;$v--) { |
for (my $v=$Apache::lonhomework::history{'version'};$v>0;$v--) { |
if (defined($Apache::lonhomework::history{$v.':resource.'.$version.'.0.bridgetask.portfiles'})) { |
if (defined($Apache::lonhomework::history{$v.':resource.'.$version.'.0.bridgetask.portfiles'})) { |
$submissiontime=$Apache::lonhomework::history{$v.':timestamp'}; |
$submissiontime=$Apache::lonhomework::history{$v.':timestamp'}; |
Line 314 sub submission_time_stamp {
|
Line 330 sub submission_time_stamp {
|
} |
} |
my $result; |
my $result; |
if ($submissiontime) { |
if ($submissiontime) { |
my $slot_name=$Apache::lonhomework::history{'resource.'.$version.'.checkedin.slot'}; |
my $slot_name=$Apache::lonhomework::history{'resource.'.$version.'.0.checkedin.slot'}; |
my %slot=&Apache::lonnet::get_slot($slot_name); |
my %slot=&Apache::lonnet::get_slot($slot_name); |
my $diff = $slot{'endtime'} - $submissiontime; |
my $diff = $slot{'endtime'} - $submissiontime; |
my ($color,$when)=('red','after'); |
my ($color,$when)=('#FF6666','after'); |
if ($diff > 0) { ($color,$when)=('green','before'); } |
if ($diff > 0) { ($color,$when)=('#336600','before'); } |
my $info; |
my $info; |
if ($diff%60) { $info=($diff%60).' seconds'; } |
if ($diff%60) { $info=($diff%60).' seconds'; } |
$diff=int($diff/60); |
$diff=int($diff/60); |
Line 344 sub webgrade_standard_info {
|
Line 360 sub webgrade_standard_info {
|
my $file=$file_url.$partial_file; |
my $file=$file_url.$partial_file; |
$file=~s|/+|/|g; |
$file=~s|/+|/|g; |
&Apache::lonnet::allowuploaded('/adm/bridgetask',$file); |
&Apache::lonnet::allowuploaded('/adm/bridgetask',$file); |
$file_list.='<li><nobr><a href="'.$file.'" target="lonGRDs"><img src="'. |
$file_list.='<li><nobr><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'. |
&Apache::loncommon::icon($file).'" border=0"> '.$file. |
&Apache::loncommon::icon($file).'" border=0"> '.$file. |
'</a></nobr></li>'."\n"; |
'</a></nobr></li>'."\n"; |
} |
} |
Line 365 INFO
|
Line 381 INFO
|
} |
} |
|
|
sub start_Task { |
sub start_Task { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
|
|
my ($status,$accessmsg,$slot); |
my ($status,$accessmsg,$slot); |
if ($target ne 'webgrade') { |
if ($target ne 'webgrade') { |
&Apache::structuretags::init_problem_globals('Task'); |
&Apache::structuretags::init_problem_globals('Task'); |
&Apache::structuretags::initialize_storage(); |
&Apache::structuretags::initialize_storage(); |
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
|
if ($env{'request.state'} eq 'construct') { |
|
&Apache::structuretags::setup_rndseed($safeeval); |
|
} |
} |
} |
|
|
$Apache::lonhomework::parsing_a_task=1; |
$Apache::lonhomework::parsing_a_task=1; |
Line 379 sub start_Task {
|
Line 398 sub start_Task {
|
my ($result,$head_tag_start,$body_tag_start,$form_tag_start)= |
my ($result,$head_tag_start,$body_tag_start,$form_tag_start)= |
&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); |
&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); |
|
|
if ($target eq 'web') { |
if ($target eq 'web' && $env{'request.state'} ne 'construct') { |
if ($Apache::lonhomework::modifygrades) { |
if ($Apache::lonhomework::modifygrades) { |
$body_tag_start.='<form name="gradesubmission" method="POST" action="'; |
$body_tag_start.='<form name="gradesubmission" method="POST" action="'; |
my $uri=$env{'request.uri'}; |
my $uri=$env{'request.uri'}; |
Line 396 sub start_Task {
|
Line 415 sub start_Task {
|
} |
} |
} |
} |
} |
} |
|
if ($target eq 'web' && $env{'request.state'} eq 'construct') { |
|
$form_tag_start.=&Apache::structuretags::problem_web_to_edit_header($env{'form.rndseed'}); |
|
} |
if ($target eq 'web' || ($target eq 'grade' && !$env{'form.webgrade'}) || $target eq 'answer' || |
if ($target eq 'web' || ($target eq 'grade' && !$env{'form.webgrade'}) || $target eq 'answer' || |
$target eq 'tex') { |
$target eq 'tex') { |
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_task_access('0'); |
&Apache::lonhomework::check_slot_access('0','Task'); |
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.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); |
$body_tag_start.=&add_previous_version_button($status); |
if (!&show_task($status,$previous)) { |
if (!&show_task($status,$previous)) { |
my $bodytext=&Apache::lonxml::get_all_text("/task",$parser); |
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; |
$result.= $head_tag_start.'</head>'.$body_tag_start; |
|
if ($env{'request.state'} eq 'construct') { |
|
$result.=$form_tag_start; |
|
} |
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.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>'; |
Line 451 DONESCREEN
|
Line 476 DONESCREEN
|
} |
} |
} elsif ($target eq 'grade' && !$env{'form.webgrade'}) { |
} elsif ($target eq 'grade' && !$env{'form.webgrade'}) { |
if ($status eq 'NEEDS_CHECKIN') { |
if ($status eq 'NEEDS_CHECKIN') { |
&proctor_check_auth($slot_name,$slot); |
if(&proctor_check_auth($slot_name,$slot,'Task') |
|
&& defined($Apache::inputtags::slot_name)) { |
|
my $result=&add_to_queue('gradingqueue', |
|
[$Apache::inputtags::slot_name]); |
|
&Apache::lonxml::debug("add_to_queue said $result"); |
|
} |
} |
} |
} |
} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
Line 502 DONESCREEN
|
Line 532 DONESCREEN
|
} else { |
} else { |
if ($target eq 'webgrade') { |
if ($target eq 'webgrade') { |
$result.="\n"; |
$result.="\n"; |
|
my $back='<p><a href="/adm/flip?postdata=return:">'. |
|
&mt('Return to resource').'</a></p>'; |
if ($status_code eq 'stop') { |
if ($status_code eq 'stop') { |
$result.='<b>'.&mt("Stopped grading.").'</b>'; |
$result.='<b>'.&mt("Stopped grading.").'</b>'.$back; |
} elsif ($status_code eq 'lock_failed') { |
} elsif ($status_code eq 'lock_failed') { |
$result.='<b>'.&mt("Failed to lock the request record.").'</b>'; |
$result.='<b>'.&mt("Failed to lock the request record.") |
|
.'</b>'.$back; |
} elsif ($status_code eq 'unlock') { |
} elsif ($status_code eq 'unlock') { |
$result.='<b>'.&mt("Unlocked the requested record.").'</b>'; |
$result.='<b>'.&mt("Unlocked the requested record.") |
|
.'</b>'.$back; |
$result.=&show_queue($env{'form.queue'},1); |
$result.=&show_queue($env{'form.queue'},1); |
} elsif ($status_code eq 'show_list') { |
} elsif ($status_code eq 'show_list') { |
$result.=&show_queue($env{'form.queue'},1); |
$result.=&show_queue($env{'form.queue'},1); |
} elsif ($status_code eq 'select_user') { |
} elsif ($status_code eq 'select_user') { |
$result.=&select_user(); |
$result.=&select_user(); |
} else { |
} else { |
$result.='<b>'.&mt("No user to be graded.").'</b>'; |
$result.='<b>'.&mt("No user to be graded.").'</b>'.$back; |
} |
} |
} |
} |
$webgrade='no'; |
$webgrade='no'; |
my $bodytext=&Apache::lonxml::get_all_text("/task",$parser); |
my $bodytext=&Apache::lonxml::get_all_text("/task",$parser,$style); |
} |
} |
if ($target eq 'webgrade' && defined($env{'form.queue'})) { |
if ($target eq 'webgrade' && defined($env{'form.queue'})) { |
if ($webgrade eq 'yes') { |
if ($webgrade eq 'yes') { |
Line 543 DONESCREEN
|
Line 577 DONESCREEN
|
} |
} |
if ($webgrade eq 'yes') { $result.=&webgrade_standard_info(); } |
if ($webgrade eq 'yes') { $result.=&webgrade_standard_info(); } |
} |
} |
|
} elsif ($target eq 'edit') { |
|
$result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start. |
|
&Apache::structuretags::problem_edit_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 />"; |
|
my $temp=&Apache::edit::insertlist($target,$token); |
|
$result.=$temp; |
} else { |
} else { |
# page_start returned a starting result, delete it if we don't need it |
# page_start returned a starting result, delete it if we don't need it |
$result = ''; |
$result = ''; |
Line 641 sub get_key_todo {
|
Line 682 sub get_key_todo {
|
} |
} |
return (undef,undef) |
return (undef,undef) |
} |
} |
|
|
sub end_Task { |
sub end_Task { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $result=''; |
my $result=''; |
Line 664 sub end_Task {
|
Line 704 sub end_Task {
|
<h2>'.&mt('Submit Portfolio Files for Grading').'</h2> |
<h2>'.&mt('Submit Portfolio Files for Grading').'</h2> |
<p>'.&mt('Indicate the files from your portfolio to be evaluated in grading this task.').'</p>'). |
<p>'.&mt('Indicate the files from your portfolio to be evaluated in grading this task.').'</p>'). |
"</table>"; |
"</table>"; |
|
} |
|
if (!$previous && $status ne 'SHOW_ANSWER' && |
|
&show_task($status,$previous)) { |
$result.=&Apache::inputtags::gradestatus('0'); |
$result.=&Apache::inputtags::gradestatus('0'); |
$result.='</form>'; |
$result.='</form>'; |
$result.=<<DONEBUTTON; |
$result.=<<DONEBUTTON; |
Line 672 sub end_Task {
|
Line 715 sub end_Task {
|
<input type="submit" value="Done" /> |
<input type="submit" value="Done" /> |
</form> |
</form> |
DONEBUTTON |
DONEBUTTON |
} |
} |
if (&show_task($status,$previous) && |
if (&show_task($status,$previous) && |
$Apache::lonhomework::history{"resource.$version.status"} =~ /^(pass|fail)$/) { |
$Apache::lonhomework::history{"resource.$version.0.status"} =~ /^(pass|fail)$/) { |
my $bt_status=$Apache::lonhomework::history{"resource.$version.status"}; |
my $bt_status=$Apache::lonhomework::history{"resource.$version.0.status"}; |
my $title=&Apache::lonnet::gettitle(); |
my $title=&Apache::lonnet::gettitle(); |
my %slot=&Apache::lonnet::get_slot($Apache::inputtags::slot_name); |
|
|
my $slot_name= |
|
$Apache::lonhomework::history{"resource.$version.0.checkedin.slot"}; |
|
my %slot=&Apache::lonnet::get_slot($slot_name); |
my $start_time= |
my $start_time= |
&Apache::lonlocal::locallocaltime($slot{'starttime'}); |
&Apache::lonlocal::locallocaltime($slot{'starttime'}); |
|
|
my $status; |
my $status = "\n<div class='$bt_status'>\n"; |
$status.="\n<div class='$bt_status'>\n"; |
|
|
|
if ($bt_status eq 'pass') { |
if ($bt_status eq 'pass') { |
$status.='<h2>You passed the '.$title.' given on '. |
$status.='<h2>You passed the '.$title.' given on '. |
$start_time.'.</h2>'; |
$start_time.'</h2>'; |
} |
} |
if ($bt_status eq 'fail') { |
if ($bt_status eq 'fail') { |
$status.='<h2>You did not pass the '.$title.' given on '. |
$status.='<h2>You did not pass the '.$title.' given on '. |
$start_time.'.</h2>'; |
$start_time.'</h2>'; |
if (!$previous) { |
if (!$previous) { |
$status.=&add_request_another_attempt_button(); |
$status.=&add_request_another_attempt_button(); |
} |
} |
Line 702 DONEBUTTON
|
Line 747 DONEBUTTON
|
if ($Apache::bridgetask::dimensionmandatory{$dim_id} |
if ($Apache::bridgetask::dimensionmandatory{$dim_id} |
eq 'N') { |
eq 'N') { |
$opt_count++; |
$opt_count++; |
if ($Apache::lonhomework::history{"resource.$version.$dim_id.status"} eq 'pass') { |
if ($Apache::lonhomework::history{"resource.$version.0.$dim_id.status"} eq 'pass') { |
$opt_passed++; |
$opt_passed++; |
} |
} |
} else { |
} else { |
Line 739 DONEBUTTON
|
Line 784 DONEBUTTON
|
$Apache::lonhomework::results{"resource.$version.0.submission"}=''; |
$Apache::lonhomework::results{"resource.$version.0.submission"}=''; |
} else { |
} else { |
delete($Apache::lonhomework::results{"resource.$version.0.bridgetask.portfiles"}); |
delete($Apache::lonhomework::results{"resource.$version.0.bridgetask.portfiles"}); |
|
$award = ''; |
} |
} |
&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' |
&add_to_queue('gradingqueue',$Apache::inputtags::slot_name); |
&& defined($Apache::inputtags::slot_name)) { |
|
&add_to_queue('gradingqueue',[$Apache::inputtags::slot_name]); |
} |
} |
|
} elsif ($Apache::lonhomework::results{'INTERNAL_store'}) { |
|
&Apache::structuretags::finalize_storage(); |
} |
} |
if ($target eq 'grade' && $env{'form.webgrade'} eq 'yes') { |
if ($target eq 'grade' && $env{'form.webgrade'} eq 'yes') { |
my $optional_required= |
my $optional_required= |
Line 757 DONEBUTTON
|
Line 806 DONEBUTTON
|
&Apache::lonhomework::showhash(%Apache::lonhomework::results); |
&Apache::lonhomework::showhash(%Apache::lonhomework::results); |
foreach my $dim_id (@Apache::bridgetask::dimensionlist) { |
foreach my $dim_id (@Apache::bridgetask::dimensionlist) { |
my $status= |
my $status= |
$Apache::lonhomework::results{"resource.$version.$dim_id.status"}; |
$Apache::lonhomework::results{"resource.$version.0.$dim_id.status"}; |
my $mandatory= |
my $mandatory= |
($Apache::bridgetask::dimensionmandatory{$dim_id} ne 'N'); |
($Apache::bridgetask::dimensionmandatory{$dim_id} ne 'N'); |
if ($status eq 'pass') { |
if ($status eq 'pass') { |
Line 776 DONEBUTTON
|
Line 825 DONEBUTTON
|
$mandatory_failed++; |
$mandatory_failed++; |
} |
} |
&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.grader'}= |
$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.status"}='review'; |
$Apache::lonhomework::results{"resource.$version.0.status"}='review'; |
if ($env{'form.queue'} eq 'reviewqueue') { |
if ($env{'form.queue'} eq 'reviewqueue') { |
&check_queue_unlock($env{'form.queue'}); |
&check_queue_unlock($env{'form.queue'}); |
&Apache::lonxml::debug(" still needs review not changing status."); |
&Apache::lonxml::debug(" still needs review not changing status."); |
Line 787 DONEBUTTON
|
Line 836 DONEBUTTON
|
&move_between_queues($env{'form.queue'},'reviewqueue'); |
&move_between_queues($env{'form.queue'},'reviewqueue'); |
} |
} |
} elsif ($ungraded) { |
} elsif ($ungraded) { |
$Apache::lonhomework::results{"resource.$version.status"}='ungraded'; |
$Apache::lonhomework::results{"resource.$version.0.status"}='ungraded'; |
if ($env{'form.queue'} eq 'reviewqueue' || |
if ($env{'form.queue'} eq 'reviewqueue' || |
$env{'form.queue'} eq 'none' ) { |
$env{'form.queue'} eq 'none' ) { |
&Apache::lonxml::debug("moving back."); |
&Apache::lonxml::debug("moving back."); |
Line 796 DONEBUTTON
|
Line 845 DONEBUTTON
|
&check_queue_unlock($env{'form.queue'}); |
&check_queue_unlock($env{'form.queue'}); |
} |
} |
} elsif ($mandatory_failed) { |
} elsif ($mandatory_failed) { |
$Apache::lonhomework::results{"resource.$version.status"}='fail'; |
$Apache::lonhomework::results{"resource.$version.0.status"}='fail'; |
$Apache::lonhomework::results{"resource.$version.0.solved"}='incorrect_by_override'; |
$Apache::lonhomework::results{"resource.$version.0.solved"}='incorrect_by_override'; |
$Apache::lonhomework::results{"resource.$version.0.award"}='INCORRECT'; |
$Apache::lonhomework::results{"resource.$version.0.award"}='INCORRECT'; |
$Apache::lonhomework::results{"resource.$version.0.awarded"}='0'; |
$Apache::lonhomework::results{"resource.$version.0.awarded"}='0'; |
Line 814 DONEBUTTON
|
Line 863 DONEBUTTON
|
["$version.0.bridgetask"]); |
["$version.0.bridgetask"]); |
} |
} |
} else { |
} else { |
$Apache::lonhomework::results{"resource.$version.status"}='pass'; |
$Apache::lonhomework::results{"resource.$version.0.status"}='pass'; |
$Apache::lonhomework::results{"resource.$version.0.solved"}='correct_by_override'; |
$Apache::lonhomework::results{"resource.$version.0.solved"}='correct_by_override'; |
$Apache::lonhomework::results{"resource.$version.0.award"}='EXACT_ANS'; |
$Apache::lonhomework::results{"resource.$version.0.award"}='EXACT_ANS'; |
$Apache::lonhomework::results{"resource.$version.0.awarded"}='1'; |
$Apache::lonhomework::results{"resource.$version.0.awarded"}='1'; |
Line 831 DONEBUTTON
|
Line 880 DONEBUTTON
|
["$version.0.bridgetask"]); |
["$version.0.bridgetask"]); |
} |
} |
} |
} |
$Apache::lonhomework::results{"resource.status"}= |
$Apache::lonhomework::results{"resource.0.status"}= |
$Apache::lonhomework::results{"resource.$version.status"}; |
$Apache::lonhomework::results{"resource.$version.0.status"}; |
if (defined($Apache::lonhomework::results{"resource.$version.0.awarded"})) { |
if (defined($Apache::lonhomework::results{"resource.$version.0.awarded"})) { |
$Apache::lonhomework::results{"resource.0.award"}= |
$Apache::lonhomework::results{"resource.0.award"}= |
$Apache::lonhomework::results{"resource.$version.0.award"}; |
$Apache::lonhomework::results{"resource.$version.0.award"}; |
Line 856 DONEBUTTON
|
Line 905 DONEBUTTON
|
$result.='</form>'.&Apache::loncommon::endbodytag().'</html>'; |
$result.='</form>'.&Apache::loncommon::endbodytag().'</html>'; |
} elsif ($target eq 'meta') { |
} elsif ($target eq 'meta') { |
$result.=&Apache::response::meta_package_write('Task'); |
$result.=&Apache::response::meta_package_write('Task'); |
$result.=&meta_stores_write('solved','string','Problem Status'); |
$result.=&Apache::response::meta_stores_write('solved','string', |
$result.=&meta_stores_write('tries','int_zeropos', |
'Problem Status'); |
'Number of Attempts'); |
$result.=&Apache::response::meta_stores_write('tries','int_zeropos', |
$result.=&meta_stores_write('awarded','float', |
'Number of Attempts'); |
'Partial Credit Factor'); |
$result.=&Apache::response::meta_stores_write('awarded','float', |
$result.=&meta_stores_write('status','string', |
'Partial Credit Factor'); |
'Bridge Task Status'); |
$result.=&Apache::response::meta_stores_write('status','string', |
|
'Bridge Task Status'); |
} |
} |
undef($Apache::lonhomework::parsing_a_task); |
undef($Apache::lonhomework::parsing_a_task); |
return $result; |
return $result; |
Line 877 sub move_between_queues {
|
Line 927 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->[0]]); |
if ($result ne 'ok') { |
if ($result ne 'ok') { |
return $result; |
return $result; |
} |
} |
Line 905 sub check_queue_unlock {
|
Line 955 sub check_queue_unlock {
|
return 'not_owner'; |
return 'not_owner'; |
} |
} |
|
|
|
sub in_queue { |
|
my ($queue,$symb,$cdom,$cnum,$udom,$uname)=@_; |
|
if ($queue eq 'none') { return 0; } |
|
if (!defined($symb) || !defined($cdom) || !defined($cnum) |
|
|| !defined($udom) || !defined($uname)) { |
|
($symb,my $cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
|
$cnum=$env{'course.'.$cid.'.num'}; |
|
$cdom=$env{'course.'.$cid.'.domain'}; |
|
} |
|
|
|
my $key=&encode_queue_key($symb,$udom,$uname); |
|
my %results = &Apache::lonnet::get($queue,[$key],$cdom,$cnum); |
|
|
|
if (defined($results{$key})) { |
|
return 1; |
|
} |
|
return 0; |
|
} |
|
|
sub remove_from_queue { |
sub remove_from_queue { |
my ($queue)=@_; |
my ($queue,$symb,$cdom,$cnum,$udom,$uname)=@_; |
if ($queue eq 'none') { return 'ok'; } |
if ($queue eq 'none') { return 'ok'; } |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
if (!defined($symb) || !defined($cdom) || !defined($cnum) |
my $cnum=$env{'course.'.$cid.'.num'}; |
|| !defined($udom) || !defined($uname)) { |
my $cdom=$env{'course.'.$cid.'.domain'}; |
($symb,my $cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my $key="$symb\0queue\0$uname\@$udom"; |
$cnum=$env{'course.'.$cid.'.num'}; |
|
$cdom=$env{'course.'.$cid.'.domain'}; |
|
} |
|
if (!&in_queue($queue,$symb,$cdom,$cnum,$udom,$uname)) { |
|
return 'ok'; |
|
} |
|
my $key=&encode_queue_key($symb,$udom,$uname); |
my @keys=($key,"$key\0locked"); |
my @keys=($key,"$key\0locked"); |
return &Apache::lonnet::del($queue,\@keys,$cdom,$cnum); |
return &Apache::lonnet::del($queue,\@keys,$cdom,$cnum); |
} |
} |
Line 940 sub get_queue_data {
|
Line 1015 sub get_queue_data {
|
return undef; |
return undef; |
} |
} |
|
|
|
|
sub check_queue_for_key { |
sub check_queue_for_key { |
my ($cid,$queue,$todo)=@_; |
my ($cdom,$cnum,$queue,$todo)=@_; |
my $cnum=$env{'course.'.$cid.'.num'}; |
|
my $cdom=$env{'course.'.$cid.'.domain'}; |
|
my %results= |
my %results= |
&Apache::lonnet::get($queue,[$todo,"$todo\0locked"],$cdom,$cnum); |
&Apache::lonnet::get($queue,[$todo,"$todo\0locked"],$cdom,$cnum); |
|
|
Line 951 sub check_queue_for_key {
|
Line 1026 sub check_queue_for_key {
|
if (defined($results{"$todo\0locked"})) { |
if (defined($results{"$todo\0locked"})) { |
return 'locked'; |
return 'locked'; |
} |
} |
my $slot=$results{$todo}->[0]; |
my $slot; |
my %slot_data=&Apache::lonnet::get_slot($slot); |
if (ref($results{$todo}) eq 'ARRAY') { |
if ($slot_data{'endtime'} > time) { |
$slot = $results{$todo}[0]; |
return 'in_progress'; |
} elsif (ref($results{$todo}) eq 'HASH') { |
|
$slot = $results{$todo}{'slot'}; |
|
} |
|
if (defined($slot)) { |
|
my %slot_data=&Apache::lonnet::get_slot($slot); |
|
if ($slot_data{'endtime'} > time) { |
|
return 'in_progress'; |
|
} |
} |
} |
return 'enqueued'; |
return 'enqueued'; |
} |
} |
Line 962 sub check_queue_for_key {
|
Line 1044 sub check_queue_for_key {
|
} |
} |
|
|
sub add_to_queue { |
sub add_to_queue { |
my ($queue,$slot_name)=@_; |
my ($queue,$user_data)=@_; |
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 (!$cid || $env{'request.state'} eq 'construct') { |
|
return 'no_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"}=[$slot_name]; |
$data{"$symb\0queue\0$uname\@$udom"}=$user_data; |
return &Apache::lonnet::put($queue,\%data,$cdom,$cnum); |
return &Apache::lonnet::cput($queue,\%data,$cdom,$cnum); |
} |
} |
|
|
sub show_queue { |
sub show_queue { |
Line 995 sub show_queue {
|
Line 1080 sub show_queue {
|
if ($tmp=~/^error: 2 /) { |
if ($tmp=~/^error: 2 /) { |
return "\n<h3>Current Queue - $queue</h3><table border='1'><tr><td>Empty</td></tr></table>"; |
return "\n<h3>Current Queue - $queue</h3><table border='1'><tr><td>Empty</td></tr></table>"; |
} |
} |
$result.="\n<h3>Current Queue - $queue </h3><table border='1'><tr>"; |
$result.="\n<h3>Current Queue - $symb $queue </h3><table border='1'><tr>"; |
if ($with_selects) { $result.="<th></th>"; } |
if ($with_selects) { $result.="<th></th>"; } |
$result.="<th>resource</th><th>user</th><th>type</th><th>data</th></tr>"; |
$result.="<th>resource</th><th>user</th><th>type</th><th>data</th></tr>"; |
foreach my $key (sort(keys(%queue))) { |
foreach my $key (sort(keys(%queue))) { |
Line 1183 sub lock_key {
|
Line 1268 sub lock_key {
|
return 0; |
return 0; |
} |
} |
|
|
|
sub get_queue_symb_status { |
|
my ($queue,$symb,$cdom,$cnum) = @_; |
|
if (!defined($cdom) || !defined($cnum)) { |
|
my (undef,$cid)=&Apache::lonxml::whichuser(); |
|
$cnum=$env{'course.'.$cid.'.num'}; |
|
$cdom=$env{'course.'.$cid.'.domain'}; |
|
} |
|
my $regexp="^$symb\0"; |
|
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
|
my ($tmp)=%queue; |
|
if ($tmp=~/^error: 2 /) { return; } |
|
my @users; |
|
foreach my $key (sort(keys(%queue))) { |
|
next if ($key=~/locked$/); |
|
next if ($key=~/timestamp$/); |
|
my ($symb,$uname,$udom) = &decode_queue_key($key); |
|
push(@users,"$uname:$udom"); |
|
} |
|
return @users; |
|
} |
|
|
sub get_from_queue { |
sub get_from_queue { |
my ($queue)=@_; |
my ($queue)=@_; |
my $result; |
my $result; |
Line 1194 sub get_from_queue {
|
Line 1300 sub get_from_queue {
|
if ($todo) { return $todo; } |
if ($todo) { return $todo; } |
while (1) { |
while (1) { |
my $starttime=time; |
my $starttime=time; |
&Apache::lonnet::put($queue,{"$symb\0timestamp"=>$starttime}, |
&Apache::lonnet::cput($queue,{"$symb\0timestamp"=>$starttime}, |
$cdom,$cnum); |
$cdom,$cnum); |
&Apache::lonxml::debug("$starttime"); |
&Apache::lonxml::debug("$starttime"); |
my $regexp="^$symb\0queue\0"; |
my $regexp="^$symb\0queue\0"; |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); |
Line 1266 sub select_user {
|
Line 1372 sub select_user {
|
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
|
|
my %status = &get_student_status($symb,$cid,$udom,$uname); |
my $cnum=$env{'course.'.$cid.'.num'}; |
|
my $cdom=$env{'course.'.$cid.'.domain'}; |
|
my %status = &get_student_status($symb,$cdom,$cnum,$udom,$uname, |
|
'Task'); |
my $queue = 'none'; |
my $queue = 'none'; |
my $cannot_grade; |
my $cannot_grade; |
if ($status{'reviewqueue'} =~ /^(in_progress|enqueue)$/) { |
if ($status{'reviewqueue'} =~ /^(in_progress|enqueue)$/) { |
Line 1345 RESULT
|
Line 1454 RESULT
|
} |
} |
|
|
sub get_student_status { |
sub get_student_status { |
my ($symb,$cid,$udom,$uname)=@_; |
my ($symb,$cdom,$cnum,$udom,$uname,$type)=@_; |
my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'}, |
|
$udom,$uname); |
|
my %status; |
my %status; |
$status{'status'}=$record{'resource.status'}; |
|
$status{'version'}=$record{'resource.version'}; |
if ($type eq 'Task') { |
$status{'grader'}=$record{'resource.grader'}; |
my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'}, |
$status{'reviewqueue'}=&check_queue_for_key($cid,'reviewqueue', |
$udom,$uname); |
&encode_queue_key($symb,$udom,$uname)); |
$status{'status'}=$record{'resource.0.status'}; |
$status{'gradingqueue'}=&check_queue_for_key($cid,'gradingqueue', |
$status{'version'}=$record{'resource.0.version'}; |
&encode_queue_key($symb,$udom,$uname)); |
$status{'grader'}=$record{'resource.0.regrader'}; |
|
} |
|
$status{'reviewqueue'}= |
|
&check_queue_for_key($cdom,$cnum,'reviewqueue', |
|
&encode_queue_key($symb,$udom,$uname)); |
|
$status{'gradingqueue'}= |
|
&check_queue_for_key($cdom,$cnum,'gradingqueue', |
|
&encode_queue_key($symb,$udom,$uname)); |
return %status; |
return %status; |
} |
} |
|
|
Line 1401 sub start_Dimension {
|
Line 1516 sub start_Dimension {
|
} |
} |
|
|
sub get_instance { |
sub get_instance { |
&Apache::response::pushrandomnumber(); |
my ($dim)=@_; |
my @order=&Math::Random::random_permutation(@{$dimension{'instances'}}); |
my $rand_alg=&Apache::lonnet::get_rand_alg(); |
my $num=@order; |
if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' || |
my $version=&get_version(); |
$rand_alg eq '64bit2' || $rand_alg eq '64bit3' || |
my $which=($version-1)%$num; |
$rand_alg eq '64bit4' ) { |
return $order[$which]; |
&Apache::response::pushrandomnumber(); |
|
my @order=&Math::Random::random_permutation(@{$dimension{'instances'}}); |
|
my $num=@order; |
|
my $version=&get_version(); |
|
my $which=($version-1)%$num; |
|
return $order[$which]; |
|
} else { |
|
my ($version,$previous) = &get_version(); |
|
my $instance = |
|
$Apache::lonhomework::history{"resource.$version.0.$dim.instance"}; |
|
if (defined($instance)) { return $instance; } |
|
|
|
&Apache::response::pushrandomnumber(); |
|
my @instances = @{$dimension{'instances'}}; |
|
# remove disabled instances |
|
for (my $i=0; $i < $#instances; $i++) { |
|
if ($dimension{$instances[$i].'.disabled'}) { |
|
splice(@instances,$i,1); |
|
$i--; |
|
} |
|
} |
|
@instances = &Math::Random::random_permutation(@instances); |
|
$instance = $instances[($version-1)%scalar(@instances)]; |
|
$Apache::lonhomework::results{"resource.$version.0.$dim.instance"} = |
|
$instance; |
|
$Apache::lonhomework::results{'INTERNAL_store'} = 1; |
|
&Apache::response::poprandomnumber(); |
|
return $instance; |
|
} |
} |
} |
|
|
{ |
{ |
Line 1415 sub get_instance {
|
Line 1558 sub get_instance {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $result=&Apache::lonxml::endredirection(); |
my $result=&Apache::lonxml::endredirection(); |
my $dim=&get_id($parstack,$safeeval); |
my $dim=&get_id($parstack,$safeeval); |
my $instance=&get_instance(); |
my $instance=&get_instance($dim); |
my $version=&get_version(); |
my $version=&get_version(); |
if ($target eq 'web') { |
if ($target eq 'web') { |
@Apache::scripttag::parser_env = @_; |
@Apache::scripttag::parser_env = @_; |
$result.=&Apache::scripttag::xmlparse($dimension{'intro'}); |
$result.=&Apache::scripttag::xmlparse($dimension{'intro'}); |
@Apache::scripttag::parser_env = @_; |
my @instances = $instance; |
$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); |
if (&Apache::response::showallfoils()) { |
if ($Apache::lonhomework::history{"resource.$version.status"} eq 'pass' || |
@instances = @{$dimension{'instances'}}; |
$Apache::lonhomework::history{"resource.$version.status"} eq 'fail') { |
} |
|
foreach my $instance (@instances) { |
my $dim_status=$Apache::lonhomework::history{"resource.$version.$dim.status"}; |
@Apache::scripttag::parser_env = @_; |
my $mandatory='Mandatory'; |
$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.text'}); |
if ($Apache::bridgetask::dimensionmandatory{$dim} eq 'N') { |
if ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass' || |
$mandatory='Optional'; |
$Apache::lonhomework::history{"resource.$version.0.status"} eq 'fail') { |
} |
|
my $dim_info="<div class='$dim_status'>\n"; |
my $dim_status=$Apache::lonhomework::history{"resource.$version.0.$dim.status"}; |
if ($dim_status eq 'pass') { |
my $mandatory='Mandatory'; |
$dim_info.='<h3>Question : you passed this '.$mandatory.' question</h3>'; |
if ($Apache::bridgetask::dimensionmandatory{$dim} eq 'N') { |
} |
|
if ($dim_status eq 'fail') { |
|
$dim_info.='<h3>Question : you did not pass this '.$mandatory.' question</h3>'; |
|
} |
|
my $man_count=0; |
|
my $man_passed=0; |
|
my $opt_count=0; |
|
my $opt_passed=0; |
|
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
|
if ($dimension{$instance.'.criteria.'.$id.'.mandatory'} |
|
eq 'N') { |
|
$opt_count++; |
|
if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') { |
|
$opt_passed++; |
|
} |
|
} else { |
|
$man_count++; |
|
if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"} eq 'pass') { |
|
$man_passed++; |
|
} |
|
} |
|
} |
|
if ($man_passed eq $man_count) { $man_passed='all'; } |
|
my $opt_req=$dimension{$instance.'.optionalrequired'}; |
|
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>"; |
|
|
|
my $internal_location=&internal_location($dim); |
|
$result=~s/\Q$internal_location\E/$dim_info/; |
|
|
|
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
|
my $status=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"}; |
|
my $comment=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}; |
|
my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N'); |
|
if ($mandatory) { |
|
$mandatory='Mandatory'; |
|
} else { |
|
$mandatory='Optional'; |
$mandatory='Optional'; |
} |
} |
if ($status eq 'fail') { |
my $dim_info="<div class='$dim_status'>\n"; |
} elsif ($status eq 'pass') { |
if ($dim_status eq 'pass') { |
} else { |
$dim_info.='<h3>Question : you passed this '.$mandatory.' question</h3>'; |
&Apache::lonxml::error("Student viewing a graded bridgetask was shown a status of $status"); |
} |
|
if ($dim_status eq 'fail') { |
|
$dim_info.='<h3>Question : you did not pass this '.$mandatory.' question</h3>'; |
|
} |
|
my $man_count=0; |
|
my $man_passed=0; |
|
my $opt_count=0; |
|
my $opt_passed=0; |
|
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
|
if ($dimension{$instance.'.criteria.'.$id.'.mandatory'} |
|
eq 'N') { |
|
$opt_count++; |
|
if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"} eq 'pass') { |
|
$opt_passed++; |
|
} |
|
} else { |
|
$man_count++; |
|
if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"} eq 'pass') { |
|
$man_passed++; |
|
} |
|
} |
} |
} |
my $status_display=$status; |
if ($man_passed eq $man_count) { $man_passed='all'; } |
$status_display=~s/^([a-z])/uc($1)/e; |
my $opt_req=$dimension{$instance.'.optionalrequired'}; |
@Apache::scripttag::parser_env = @_; |
if ($opt_req !~ /\S/) { $opt_req='0'; } |
$result.='<div class="'.$status.'"><h4>'.$mandatory. |
$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>"; |
' Criteria</h4><p>'; |
|
@Apache::scripttag::parser_env = @_; |
my $internal_location=&internal_location($dim); |
$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id}); |
$result=~s/\Q$internal_location\E/$dim_info/; |
$result.='</p><p class="grade">'.$status_display.'</p>'; |
|
if ($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}) { |
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
$result.='<p class="comment">'.$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}.'</p>'; |
my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"}; |
|
my $comment=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}; |
|
my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N'); |
|
if ($mandatory) { |
|
$mandatory='Mandatory'; |
|
} else { |
|
$mandatory='Optional'; |
|
} |
|
if ($status eq 'fail') { |
|
} elsif ($status eq 'pass') { |
|
} else { |
|
&Apache::lonxml::error("Student viewing a graded bridgetask was shown a status of $status"); |
|
} |
|
my $status_display=$status; |
|
$status_display=~s/^([a-z])/uc($1)/e; |
|
@Apache::scripttag::parser_env = @_; |
|
$result.='<div class="'.$status.'"><h4>'.$mandatory. |
|
' Criteria</h4><p>'; |
|
@Apache::scripttag::parser_env = @_; |
|
$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id}); |
|
$result.='</p><p class="grade">'.$status_display.'</p>'; |
|
if ($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}) { |
|
$result.='<p class="comment">'.$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}.'</p>'; |
|
} |
|
$result.='</div>'; |
} |
} |
$result.='</div>'; |
|
} |
} |
} |
} |
} elsif ($target eq 'webgrade') { |
} elsif ($target eq 'webgrade') { |
Line 1499 sub get_instance {
|
Line 1648 sub get_instance {
|
&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='criteria_'.$instance.'_'.$id; |
my $link='criteria_'.$instance.'_'.$id; |
my $status=$Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.status"}; |
my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"}; |
$result.='<tr><td width="100%" valign="top">'. |
$result.='<tr><td width="100%" valign="top">'. |
'<a name="'.$link.'" />'. |
'<a name="'.$link.'" />'. |
'<a name="next_'.$last_link.'" />'. |
'<a name="next_'.$last_link.'" />'. |
Line 1510 sub get_instance {
|
Line 1659 sub get_instance {
|
#$dimension{$instance.'.criteria.'.$id}. |
#$dimension{$instance.'.criteria.'.$id}. |
'</td>'. |
'</td>'. |
'<td><nobr>Additional Comment for Student</nobr> <br />'. |
'<td><nobr>Additional Comment for Student</nobr> <br />'. |
'<textarea style="width:100%" rows="8" width="25" wrap="hard" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.$dim.$instance.$id.comment"}).'</textarea>'. |
'<textarea style="width:100%" rows="8" width="25" wrap="hard" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).'</textarea>'. |
'</td>'. |
'</td>'. |
'<td>'. |
'<td>'. |
'<nobr><label><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label></nobr><br />'. |
'<nobr><label><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label></nobr><br />'. |
Line 1530 sub get_instance {
|
Line 1679 sub get_instance {
|
my $ungraded=0; |
my $ungraded=0; |
my $review=0; |
my $review=0; |
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
foreach my $id (@{$dimension{$instance.'.criterias'}}) { |
my $status=$Apache::lonhomework::results{"resource.$version.$dim.$instance.$id.status"}=$env{'form.HWVAL_criteria_'.$instance.'_'.$id}; |
my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.status"}=$env{'form.HWVAL_criteria_'.$instance.'_'.$id}; |
$Apache::lonhomework::results{"resource.$version.$dim.$instance.$id.comment"}=$env{'form.HWVAL_comment_criteria_'.$instance.'_'.$id}; |
$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.comment"}=$env{'form.HWVAL_comment_criteria_'.$instance.'_'.$id}; |
my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N'); |
my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N'); |
if ($status eq 'pass') { |
if ($status eq 'pass') { |
if (!$mandatory) { $optional_passed++; } |
if (!$mandatory) { $optional_passed++; } |
Line 1550 sub get_instance {
|
Line 1699 sub get_instance {
|
} |
} |
&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"); |
if ($review) { |
if ($review) { |
$Apache::lonhomework::results{"resource.$version.$dim.status"}= |
$Apache::lonhomework::results{"resource.$version.0.$dim.status"}= |
'review'; |
'review'; |
} elsif ($ungraded) { |
} elsif ($ungraded) { |
$Apache::lonhomework::results{"resource.$version.$dim.status"}= |
$Apache::lonhomework::results{"resource.$version.0.$dim.status"}= |
'ungraded'; |
'ungraded'; |
} elsif ($mandatory_failed) { |
} elsif ($mandatory_failed) { |
$Apache::lonhomework::results{"resource.$version.$dim.status"}= |
$Apache::lonhomework::results{"resource.$version.0.$dim.status"}= |
'fail'; |
'fail'; |
} else { |
} else { |
$Apache::lonhomework::results{"resource.$version.$dim.status"}= |
$Apache::lonhomework::results{"resource.$version.$dim.status"}= |
Line 1571 sub get_instance {
|
Line 1720 sub get_instance {
|
} |
} |
|
|
sub start_IntroParagraph { |
sub start_IntroParagraph { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result; |
my $result; |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($tagstack->[-2] eq 'Dimension') { |
if ($tagstack->[-2] eq 'Dimension') { |
$dimension{'intro'}=&Apache::lonxml::get_all_text('/introparagraph',$parser); |
$dimension{'intro'}=&Apache::lonxml::get_all_text('/introparagraph',$parser,$style); |
|
|
} elsif ($target eq 'webgrade') { |
} elsif ($target eq 'webgrade') { |
&Apache::lonxml::get_all_text('/introparagraph',$parser); |
&Apache::lonxml::get_all_text('/introparagraph',$parser,$style); |
} |
} |
|
|
} |
} |
Line 1596 sub start_Instance {
|
Line 1745 sub start_Instance {
|
push(@Apache::bridgetask::instancelist,$id); |
push(@Apache::bridgetask::instancelist,$id); |
$dimension{$id.'.optionalrequired'}= |
$dimension{$id.'.optionalrequired'}= |
&Apache::lonxml::get_param('OptionalRequired',$parstack,$safeeval); |
&Apache::lonxml::get_param('OptionalRequired',$parstack,$safeeval); |
|
my $disabled = &Apache::lonxml::get_param('Disabled',$parstack,$safeeval); |
|
if (lc($disabled) eq 'yes') { |
|
$dimension{$id.'.disabled'}='1'; |
|
} |
return ''; |
return ''; |
} |
} |
|
|
Line 1603 sub end_Instance {
|
Line 1756 sub end_Instance {
|
} |
} |
|
|
sub start_InstanceText { |
sub start_InstanceText { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
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); |
my $text=&Apache::lonxml::get_all_text('/instancetext',$parser,$style); |
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$dimension{$instance_id.'.text'}=$text; |
$dimension{$instance_id.'.text'}=$text; |
} |
} |
Line 1617 sub end_InstanceText {
|
Line 1770 sub end_InstanceText {
|
} |
} |
|
|
sub start_Criteria { |
sub start_Criteria { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $instance_id=$Apache::bridgetask::instance[-1]; |
my $instance_id=$Apache::bridgetask::instance[-1]; |
my $criteria=&Apache::lonxml::get_all_text('/criteria',$parser); |
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; |
$dimension{$instance_id.'.criteria.'.$id}=$criteria; |