version 1.786, 2021/12/17 15:16:51
|
version 1.791, 2023/02/09 19:27:18
|
Line 2911 sub get_last_submission {
|
Line 2911 sub get_last_submission {
|
foreach my $key (sort(split(/\:/, |
foreach my $key (sort(split(/\:/, |
$$returnhash{$version.':keys'}))) { |
$$returnhash{$version.':keys'}))) { |
$lasthash{$key}=$$returnhash{$version.':'.$key}; |
$lasthash{$key}=$$returnhash{$version.':'.$key}; |
$timestamp = |
|
&Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'}); |
|
} |
} |
|
$timestamp = |
|
&Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'}); |
} |
} |
my (%typeparts,%randombytry); |
my (%typeparts,%randombytry); |
my $showsurv = |
my $showsurv = |
Line 5731 sub updateGradeByPage {
|
Line 5731 sub updateGradeByPage {
|
my @displayPts=(); |
my @displayPts=(); |
my %aggregate = (); |
my %aggregate = (); |
my $aggregateflag = 0; |
my $aggregateflag = 0; |
|
my %queueable; |
if ($env{'form.HIDE'.$prob}) { |
if ($env{'form.HIDE'.$prob}) { |
my %record = &Apache::lonnet::restore($symbx,$env{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symbx,$env{'request.course.id'},$udom,$uname); |
my ($version,$parts) = split(/:/,$env{'form.HIDE'.$prob},2); |
my ($version,$parts) = split(/:/,$env{'form.HIDE'.$prob},2); |
Line 5740 sub updateGradeByPage {
|
Line 5741 sub updateGradeByPage {
|
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
my $newpts = $env{'form.GD_BOX'.$question.'_'.$partid}; |
my $newpts = $env{'form.GD_BOX'.$question.'_'.$partid}; |
my $oldpts = $env{'form.oldpts'.$question.'_'.$partid}; |
my $oldpts = $env{'form.oldpts'.$question.'_'.$partid}; |
my @types = $curRes->responseType($part); |
my @types = $curRes->responseType($partid); |
if (grep(/^essay$/,@types)) { |
if (grep(/^essay$/,@types)) { |
$queueable{$partid} = 1; |
$queueable{$partid} = 1; |
} else { |
} else { |
my @ids = $curRes->responseIds($part); |
my @ids = $curRes->responseIds($partid); |
for (my $i=0; $i < scalar(@ids); $i++) { |
for (my $i=0; $i < scalar(@ids); $i++) { |
my $hndgrd = &Apache::lonnet::EXT('resource.'.$part.'_'.$ids[$i]. |
my $hndgrd = &Apache::lonnet::EXT('resource.'.$partid.'_'.$ids[$i]. |
'.handgrade',$symb); |
'.handgrade',$symb); |
if (lc($hndgrd) eq 'yes') { |
if (lc($hndgrd) eq 'yes') { |
$queueable{$partid} = 1; |
$queueable{$partid} = 1; |
Line 6731 sub scantron_parse_scanline {
|
Line 6732 sub scantron_parse_scanline {
|
} |
} |
|
|
sub get_master_seq { |
sub get_master_seq { |
my ($resources,$master_seq,$symb_to_resource) = @_; |
my ($resources,$master_seq,$symb_to_resource,$need_symb_in_map,$symb_for_examcode) = @_; |
return unless ((ref($resources) eq 'ARRAY') && (ref($master_seq) eq 'ARRAY') && |
return unless ((ref($resources) eq 'ARRAY') && (ref($master_seq) eq 'ARRAY') && |
(ref($symb_to_resource) eq 'HASH')); |
(ref($symb_to_resource) eq 'HASH')); |
|
if ($need_symb_in_map) { |
|
return unless (ref($symb_for_examcode) eq 'HASH'); |
|
} |
my $resource_error; |
my $resource_error; |
foreach my $resource (@{$resources}) { |
foreach my $resource (@{$resources}) { |
my $ressymb; |
my $ressymb; |
Line 6741 sub get_master_seq {
|
Line 6745 sub get_master_seq {
|
$ressymb = $resource->symb(); |
$ressymb = $resource->symb(); |
push(@{$master_seq},$ressymb); |
push(@{$master_seq},$ressymb); |
$symb_to_resource->{$ressymb} = $resource; |
$symb_to_resource->{$ressymb} = $resource; |
|
if ($need_symb_in_map) { |
|
unless ($resource->is_map()) { |
|
my $map=(&Apache::lonnet::decode_symb($ressymb))[0]; |
|
unless (exists($symb_for_examcode->{$map})) { |
|
$symb_for_examcode->{$map} = $ressymb; |
|
} |
|
} |
|
} |
} else { |
} else { |
$resource_error = 1; |
$resource_error = 1; |
last; |
last; |
Line 8752 sub scantron_validate_doublebubble {
|
Line 8764 sub scantron_validate_doublebubble {
|
if (ref($map)) { |
if (ref($map)) { |
$randomorder = $map->randomorder(); |
$randomorder = $map->randomorder(); |
$randompick = $map->randompick(); |
$randompick = $map->randompick(); |
|
unless ($randomorder || $randompick) { |
|
foreach my $res ($navmap->retrieveResources($map,sub { $_[0]->is_map() },1,0,1)) { |
|
if ($res->randomorder()) { |
|
$randomorder = 1; |
|
} |
|
if ($res->randompick()) { |
|
$randompick = 1; |
|
} |
|
last if ($randomorder || $randompick); |
|
} |
|
} |
if ($randomorder || $randompick) { |
if ($randomorder || $randompick) { |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
if ($nav_error) { |
if ($nav_error) { |
Line 8935 sub scantron_validate_missingbubbles {
|
Line 8958 sub scantron_validate_missingbubbles {
|
if (ref($map)) { |
if (ref($map)) { |
$randomorder = $map->randomorder(); |
$randomorder = $map->randomorder(); |
$randompick = $map->randompick(); |
$randompick = $map->randompick(); |
|
unless ($randomorder || $randompick) { |
|
foreach my $res ($navmap->retrieveResources($map,sub { $_[0]->is_map() },1,0,1)) { |
|
if ($res->randomorder()) { |
|
$randomorder = 1; |
|
} |
|
if ($res->randompick()) { |
|
$randompick = 1; |
|
} |
|
last if ($randomorder || $randompick); |
|
} |
|
} |
if ($randomorder || $randompick) { |
if ($randomorder || $randompick) { |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
if ($nav_error) { |
if ($nav_error) { |
Line 9076 sub scantron_process_students {
|
Line 9110 sub scantron_process_students {
|
} |
} |
my $map=$navmap->getResourceByUrl($sequence); |
my $map=$navmap->getResourceByUrl($sequence); |
my ($randomorder,$randompick,@master_seq,%symb_to_resource,%grader_partids_by_symb, |
my ($randomorder,$randompick,@master_seq,%symb_to_resource,%grader_partids_by_symb, |
%grader_randomlists_by_symb); |
%grader_randomlists_by_symb,%symb_for_examcode); |
if (ref($map)) { |
if (ref($map)) { |
$randomorder = $map->randomorder(); |
$randomorder = $map->randomorder(); |
$randompick = $map->randompick(); |
$randompick = $map->randompick(); |
|
unless ($randomorder || $randompick) { |
|
foreach my $res ($navmap->retrieveResources($map,sub { $_[0]->is_map() },1,0,1)) { |
|
if ($res->randomorder()) { |
|
$randomorder = 1; |
|
} |
|
if ($res->randompick()) { |
|
$randompick = 1; |
|
} |
|
last if ($randomorder || $randompick); |
|
} |
|
} |
} else { |
} else { |
$r->print(&navmap_errormsg()); |
$r->print(&navmap_errormsg()); |
return ''; |
return ''; |
Line 9087 sub scantron_process_students {
|
Line 9132 sub scantron_process_students {
|
my $nav_error; |
my $nav_error; |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
if ($randomorder || $randompick) { |
if ($randomorder || $randompick) { |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource,1,\%symb_for_examcode); |
if ($nav_error) { |
if ($nav_error) { |
$r->print(&navmap_errormsg()); |
$r->print(&navmap_errormsg()); |
return ''; |
return ''; |
Line 9242 SCANTRONFORM
|
Line 9287 SCANTRONFORM
|
} |
} |
|
|
if (($scancode) && ($randomorder || $randompick)) { |
if (($scancode) && ($randomorder || $randompick)) { |
my $parmresult = |
foreach my $key (keys(%symb_for_examcode)) { |
&Apache::lonparmset::storeparm_by_symb($symb, |
my $symb_in_map = $symb_for_examcode{$key}; |
'0_examcode',2,$scancode, |
if ($symb_in_map ne '') { |
'string_examcode',$uname, |
my $parmresult = |
$udom); |
&Apache::lonparmset::storeparm_by_symb($symb_in_map, |
|
'0_examcode',2,$scancode, |
|
'string_examcode',$uname, |
|
$udom); |
|
} |
|
} |
} |
} |
$completedstudents{$uname}={'line'=>$line}; |
$completedstudents{$uname}={'line'=>$line}; |
if ($env{'form.verifyrecord'}) { |
if ($env{'form.verifyrecord'}) { |
Line 9561 END
|
Line 9611 END
|
my @lines = &Apache::lonnet::get_scantronformat_file(); |
my @lines = &Apache::lonnet::get_scantronformat_file(); |
my $count = 0; |
my $count = 0; |
foreach my $line (@lines) { |
foreach my $line (@lines) { |
next if ($line =~ /^#/); |
next if (($line =~ /^\#/) || ($line eq '')); |
$singleline = $line; |
$singleline = $line; |
$count ++; |
$count ++; |
} |
} |
Line 9755 sub validate_uploaded_scantron_file {
|
Line 9805 sub validate_uploaded_scantron_file {
|
my %unique_formats; |
my %unique_formats; |
my @formatlines = &Apache::lonnet::get_scantronformat_file(); |
my @formatlines = &Apache::lonnet::get_scantronformat_file(); |
foreach my $line (@formatlines) { |
foreach my $line (@formatlines) { |
chomp($line); |
next if (($line =~ /^\#/) || ($line eq '')); |
my @config = split(/:/,$line); |
my @config = split(/:/,$line); |
my $idstart = $config[5]; |
my $idstart = $config[5]; |
my $idlength = $config[6]; |
my $idlength = $config[6]; |
Line 10125 sub checkscantron_results {
|
Line 10175 sub checkscantron_results {
|
if (ref($map)) { |
if (ref($map)) { |
$randomorder=$map->randomorder(); |
$randomorder=$map->randomorder(); |
$randompick=$map->randompick(); |
$randompick=$map->randompick(); |
|
unless ($randomorder || $randompick) { |
|
foreach my $res ($navmap->retrieveResources($map,sub { $_[0]->is_map() },1,0,1)) { |
|
if ($res->randomorder()) { |
|
$randomorder = 1; |
|
} |
|
if ($res->randompick()) { |
|
$randompick = 1; |
|
} |
|
last if ($randomorder || $randompick); |
|
} |
|
} |
} |
} |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my $nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
my $nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
Line 11879 Side Effects: None.
|
Line 11940 Side Effects: None.
|
- missingbubble - array ref of the bubble lines that have missing |
- missingbubble - array ref of the bubble lines that have missing |
bubble errors |
bubble errors |
|
|
$randomorder - True if exam folder has randomorder set |
$randomorder - True if exam folder (or a sub-folder) has randomorder set |
$randompick - True if exam folder has randompick set |
$randompick - True if exam folder (or a sub-folder) has randompick set |
$respnumlookup - Reference to HASH mapping question numbers in bubble lines |
$respnumlookup - Reference to HASH mapping question numbers in bubble lines |
for current line to question number used for same question |
for current line to question number used for same question |
in "Master Seqence" (as seen by Course Coordinator). |
in "Master Seqence" (as seen by Course Coordinator). |