version 1.128.2.9, 2006/04/19 20:36:19
|
version 1.154, 2006/05/25 19:37:47
|
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 378 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 408 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 425 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 458 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 489 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 509 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 595 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 631 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 677 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 800 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 833 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 841 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 867 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 905 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 983 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 1008 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 1021 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 1088 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 1107 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 1134 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); |
} |
} |
|
|
Line 1177 sub show_queue {
|
Line 1237 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 1196 sub show_queue {
|
Line 1263 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 ($end_time ne '' && time > $end_time) { |
$result.=(<<FORM); |
$result.=(<<FORM); |
<td>$status</td> |
<td>$status</td> |
<td> |
<td> |
Line 1213 sub show_queue {
|
Line 1280 sub show_queue {
|
FORM |
FORM |
|
|
} else { |
} else { |
$result.='<td>'.&mt("In Progress").'</td>' |
$result.='<td>'.&mt("In Progress").'</td><td> </td>' |
} |
} |
} |
} |
$result.= "<td>".$fullname->{$uname.':'.$udom}. |
$result.= "<td>".$fullname->{$uname.':'.$udom}. |
" <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 1249 sub get_queue_counts {
|
Line 1316 sub get_queue_counts {
|
} elsif ($key!~/(timestamp|locked)$/) { |
} elsif ($key!~/(timestamp|locked)$/) { |
my ($symb,$uname,$udom) = &decode_queue_key($key); |
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 1264 sub get_queue_counts {
|
Line 1337 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 1289 sub queue_key_locked {
|
Line 1362 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)=@_; |
my @possible; # will hold queue entries that are valid to be selected |
my @possible; # will hold queue entries that are valid to be selected |
Line 1303 sub pick_from_queue_data {
|
Line 1392 sub pick_from_queue_data {
|
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 |
Line 1334 sub pick_from_queue_data {
|
Line 1437 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 1354 sub find_mid_grade {
|
Line 1457 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 1616 sub get_id {
|
Line 1719 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 1658 sub get_instance {
|
Line 1762 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 1669 sub get_instance {
|
Line 1775 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 1707 sub get_instance {
|
Line 1815 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 1722 sub get_instance {
|
Line 1831 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 1745 sub get_instance {
|
Line 1861 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 1765 sub get_instance {
|
Line 1880 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 1781 sub get_instance {
|
Line 1897 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 1796 sub get_instance {
|
Line 1912 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 1813 sub get_instance {
|
Line 1935 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 1839 sub get_instance {
|
Line 1969 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 1873 sub grading_history {
|
Line 2003 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 1914 sub start_InstanceText {
|
Line 2045 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 1926 sub end_InstanceText {
|
Line 2057 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 1972 sub proctor_validation_screen {
|
Line 2110 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> |