[LON-CAPA-cvs] cvs: loncom /homework structuretags.pm /interface lonpdfupload.pm
raeburn
raeburn at source.lon-capa.org
Fri Apr 3 14:09:24 EDT 2026
raeburn Fri Apr 3 18:09:24 2026 EDT
Modified files:
/loncom/interface lonpdfupload.pm
/loncom/homework structuretags.pm
Log:
- Bug 6121. PDF Forms supported for questiontype set to "practice", albeit
with no "permanent" recording of submissions.
-------------- next part --------------
Index: loncom/interface/lonpdfupload.pm
diff -u loncom/interface/lonpdfupload.pm:1.40 loncom/interface/lonpdfupload.pm:1.41
--- loncom/interface/lonpdfupload.pm:1.40 Fri Apr 3 17:35:03 2026
+++ loncom/interface/lonpdfupload.pm Fri Apr 3 18:09:23 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# PDF Form Upload Handler
#
-# $Id: lonpdfupload.pm,v 1.40 2026/04/03 17:35:03 raeburn Exp $
+# $Id: lonpdfupload.pm,v 1.41 2026/04/03 18:09:23 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -397,7 +397,8 @@
my ($error, at pdfdata) = @_;
my ($result,$meta,%grades,%problems,%foreigncourse,%mismatchuser,
%types,%checkboxoff,%checkboxon,%checkboxtotal,%checkboxinfo,
- %essaydraft,%symb_to_res,%possfields,%orderedsymb,$navmap,$count,$debug);
+ %essaydraft,%symb_to_res,%possfields,%orderedsymb,%practiceseed,
+ $navmap,$count,$debug);
$navmap = Apache::lonnavmaps::navmap->new();
if (!defined($navmap)) {
@@ -503,6 +504,8 @@
} elsif (($type eq 'essay') && ($HWVAL =~ /^HWDRAFT(.+)$/)) {
$essaydraft{$symb.$part}{'HWVAL'.$1} = $value;
next;
+ } elsif ($HWVAL eq 'HWRNDSEED') {
+ $practiceseed{$symb} = $value;
}
my $submit = $part;
$submit =~ s/part_(.*)/submit_$1/;
@@ -633,6 +636,12 @@
if ($res->is_exam()) {
$ungradeable{$symb}{$part} = &mt('Question type set to "exam".');
} else {
+ if ($res->is_practice($part)) {
+ unless (exists($practiceseed{$symb})) {
+ $ungradeable{$symb}{$part} = &mt('Question type set to "practice".');
+ next;
+ }
+ }
my ($status,$datemsg) = &Apache::lonhomework::check_slot_access($part,'problem',$symb);
if ($status eq 'CAN_ANSWER') {
%{$gradeable{$symb}{$part}} = %problem;
@@ -658,11 +667,13 @@
}
if (keys(%gradeable)) {
$result .= '<h3 class="LC_heading_3">'.&mt('Saved').'</h3>'.
- &show_results('graded',$showparts{'graded'},\%symb_to_res,\%gradeable,\%orderedsymb);
+ &show_results('graded',$showparts{'graded'},\%symb_to_res,
+ \%gradeable,\%orderedsymb,\%practiceseed);
}
if (keys(%ungradeable)) {
$result .= '<h3 class="LC_heading_3">'.&mt('Not Saved').'</h3>'.
- &show_results('ungraded',$showparts{'ungraded'},\%symb_to_res,\%ungradeable,\%orderedsymb);
+ &show_results('ungraded',$showparts{'ungraded'},\%symb_to_res,
+ \%ungradeable,\%orderedsymb);
}
if (keys(%foreigncourse)) {
my ($numother,$othercrsmsg);
@@ -704,9 +715,12 @@
}
sub show_results {
- my ($category,$showparts,$symb_to_res,$cathashref,$orderref) = @_;
+ my ($category,$showparts,$symb_to_res,$cathashref,$orderref,$practiceseedref) = @_;
return unless ((ref($symb_to_res)) && (ref($cathashref) eq 'HASH') &&
(ref($orderref) eq 'HASH'));
+ if ($category eq 'graded') {
+ return unless (ref($practiceseedref) eq 'HASH');
+ }
my %colheaders;
if ($category eq 'graded') {
%colheaders =
@@ -756,13 +770,18 @@
$title.'</a></td>';
my $count = 1;
foreach my $part (sort(keys(%{$cathashref->{$symb}}))) {
- my $message;
+ my ($message,$practice);
if ($category eq 'graded') {
my $problemstatus;
if (ref($res) eq 'Apache::lonnavmaps::resource') {
$problemstatus = $res->problemstatus($part);
+ $practice = $res->is_practice($part);
+ if (($practice) && (exists($practiceseedref->{$symb}))) {
+ $cathashref->{$symb}{$part}{'rndseed'} = $practiceseedref->{$symb};
+ }
}
- $message = &grade_problem($symb,$part,$problemstatus,$cathashref->{$symb}{$part});
+ $message = &grade_problem($symb,$part,$problemstatus,$practice,
+ $cathashref->{$symb}{$part});
} else {
$message = $cathashref->{$symb}{$part};
}
@@ -787,11 +806,17 @@
}
sub grade_problem {
- my ($symb,$part,$problemstatus,$to_grade) = @_;
+ my ($symb,$part,$problemstatus,$practice,$to_grade) = @_;
return unless (ref($to_grade) eq 'HASH');
my %problem = %{$to_grade};
&Apache::loncommon::ssi_with_retries(&Apache::lonnet::clutter($problem{'resource'}), 5,%problem);
- my %record = &Apache::lonnet::restore($symb);
+ my %record;
+ if ($practice) {
+ $env{'request.state'} = "published";
+ %record = &Apache::lonnet::tmprestore($symb);
+ } else {
+ %record = &Apache::lonnet::restore($symb);
+ }
my $award = $record{"resource.$part.award"};
my $awarded = $record{"resource.$part.awarded"};
my $solved = $record{"resource.$part.solved"};
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.598 loncom/homework/structuretags.pm:1.599
--- loncom/homework/structuretags.pm:1.598 Mon Mar 23 00:04:02 2026
+++ loncom/homework/structuretags.pm Fri Apr 3 18:09:24 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.598 2026/03/23 00:04:02 raeburn Exp $
+# $Id: structuretags.pm,v 1.599 2026/04/03 18:09:24 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1970,6 +1970,7 @@
my $accessmsg;
my $resource_due;
my $ipused;
+ my $practice_rndseed;
my $name= &get_resource_name($parstack,$safeeval);
my ($result,$form_tag_start,$slot_name,$slot,$probpartlist,$firstaccres);
@@ -2051,6 +2052,7 @@
if ($env{'request.state'} ne "construct" &&
($symb eq '' || $Apache::lonhomework::type eq 'practice')) {
my $rndseedval = $rndseed;
+ $practice_rndseed = $rndseed;
if (($symb eq '') && ($Apache::lonhomework::type eq 'randomizetry')) {
$rndseedval = $env{'form.rndseed'};
}
@@ -2181,7 +2183,26 @@
} elsif ($target eq 'tex') {
$result .= 'INSERTTEXFRONTMATTERHERE';
$result .= &select_metadata_hyphenation();
- }
+ if (($Apache::lonhomework::type eq 'practice') &&
+ ($status eq 'CAN_ANSWER') &&
+ ($env{'form.pdfFormFields'} eq 'yes')) {
+ my ($uname,$udom,$digest) = &Apache::lonxml::get_user_digest();
+ if (($env{'request.symb'}) && ($env{'request.course.id'})) {
+ my %uuids = &Apache::lonnet::get('nohist_formfields',
+ [$env{'request.course.id'}.':'.$env{'request.symb'}],
+ $udom,$uname);
+ if ((exists($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) &&
+ ($uuids{$env{'request.course.id'}.':'.$env{'request.symb'}})) {
+ my $fieldname = 'uuid\_'.$uuids{$env{'request.course.id'}.':'.$env{'request.symb'}}
+ .'&user\_'. $digest;
+ my $escpart = $Apache::inputtags::part;
+ $escpart =~ s{_}{\\_}g;
+ $fieldname .= '\&part\_'.$escpart.'\&text\&HWRNDSEED';
+ $result .= &Apache::lonxml::print_pdf_hidden_textfield($fieldname,$practice_rndseed);
+ }
+ }
+ }
+ }
} elsif ($target eq 'edit') {
$result .= $form_tag_start.&problem_edit_header();
$Apache::lonxml::warnings_error_header=
More information about the LON-CAPA-cvs
mailing list