[LON-CAPA-cvs] cvs: loncom /homework essayresponse.pm /interface lonpdfupload.pm

raeburn raeburn at source.lon-capa.org
Sun Mar 22 20:22:20 EDT 2026


raeburn		Mon Mar 23 00:22:20 2026 EDT

  Modified files:              
    /loncom/homework	essayresponse.pm 
    /loncom/interface	lonpdfupload.pm 
  Log:
  - Bug 6121 PDF form fields
    Checkbox provided above textarea for essayresponse to indicate if text in
    filled form field is to be graded (checked) or is a draft (unchecked). 
  
  
Index: loncom/homework/essayresponse.pm
diff -u loncom/homework/essayresponse.pm:1.128 loncom/homework/essayresponse.pm:1.129
--- loncom/homework/essayresponse.pm:1.128	Sun Mar  2 05:22:43 2025
+++ loncom/homework/essayresponse.pm	Mon Mar 23 00:22:19 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # essay (ungraded) style responses
 #
-# $Id: essayresponse.pm,v 1.128 2025/03/02 05:22:43 raeburn Exp $
+# $Id: essayresponse.pm,v 1.129 2026/03/23 00:22:19 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -45,10 +45,10 @@
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;
     my $id = &Apache::response::start_response($parstack,$safeeval);
+    my $part= $Apache::inputtags::part;
     if ($target eq 'meta') {
 	$result=&Apache::response::meta_package_write('essayresponse');
     } elsif ($target eq 'web') {
-        my $part= $Apache::inputtags::part; 
         my $coll;
         if ($Apache::lonhomework::history{"resource.$part.$id.collaborators"} =~ /\S/) {
             $coll = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');
@@ -68,7 +68,7 @@
                 ($Apache::lonhomework::type eq 'anonsurveycred')) {
                 $hiddendraft = '<input type="hidden" name="HWDRAFT'.$part.'_'.$id.'" value="yes" />';
             } else {
-                $result = &draft_row($part,$id,$ncol,$uploadedfiletypes,'essayresponse');
+                $result = &draft_row($part,$id,$ncol,$uploadedfiletypes,'essayresponse',$target);
 	    }
 	    if ($ncol > 0) {
                 $result .= &get_collab_row($part,$id,$coll,$ncol);
@@ -93,12 +93,21 @@
         } else {
             $result = &show_status_table($part,$id,$coll);
         }
+    } elsif ((($target eq 'tex') && ($env{'form.pdfFormFields'} eq 'yes')) &&
+              ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') &&
+              ($Apache::lonhomework::type ne 'exam')) {
+        unless (($Apache::lonhomework::type eq 'survey') ||
+                ($Apache::lonhomework::type eq 'surveycred') ||
+                ($Apache::lonhomework::type eq 'anonsurvey') ||
+                ($Apache::lonhomework::type eq 'anonsurveycred')) {
+            $result = &draft_row($part,$id,'','','essayresponse',$target);
+        }
     }
     return $result;
 }
 
 sub draft_row {
-    my ($part,$id,$ncol,$uploadedfiletypes,$resptype) = @_;
+    my ($part,$id,$ncol,$uploadedfiletypes,$resptype,$target) = @_;
     my $status_text = &mt('Submission type');
     if ($Apache::lonhomework::history{"resource.$part.award"} eq 'DRAFT') {
         $status_text .= '<br />'.&mt('(Currently -- draft)');
@@ -117,7 +126,8 @@
                     externalresponse => &mt('Submit entries below for grading'),
                   }
     );
-    return &Apache::lonhtmlcommon::row_title($status_text).
+    if ($target eq 'web') {
+        return &Apache::lonhtmlcommon::row_title($status_text).
            '<fieldset class="LC_landmark">'.
            '<legend class="LC_visually_hidden">'.$status_text.'</legend>'.
            '<div><label><input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="yes" checked="checked" />'.
@@ -126,6 +136,29 @@
            '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="no" /> '.
            $label{'draft'}{$resptype}.'</label></div></fieldset>'.
            &Apache::lonhtmlcommon::row_closure($closure);
+    } elsif ((($target eq 'tex') && ($env{'form.pdfFormFields'} eq 'yes')) &&
+              ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') &&
+              ($Apache::lonhomework::type ne 'exam')) {
+        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
+                               .'&part_'.$part
+                               .'&essay'
+                               .'&HWDRAFT_'.$id;
+                return '\vskip 4 mm'.
+                       &Apache::lonxml::print_pdf_checkbox($fieldname,'yes').' '.
+                       &mt('Check if submitting for grading. Uncheck if saving a draft.').
+                       '\strut \\\\ \strut \\\\';
+            }
+        }
+    }
 }
 
 sub get_collab_row {
Index: loncom/interface/lonpdfupload.pm
diff -u loncom/interface/lonpdfupload.pm:1.35 loncom/interface/lonpdfupload.pm:1.36
--- loncom/interface/lonpdfupload.pm:1.35	Sun Mar 22 23:12:53 2026
+++ loncom/interface/lonpdfupload.pm	Mon Mar 23 00:22:20 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # PDF Form Upload Handler
 #
-# $Id: lonpdfupload.pm,v 1.35 2026/03/22 23:12:53 raeburn Exp $
+# $Id: lonpdfupload.pm,v 1.36 2026/03/23 00:22:20 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -301,7 +301,8 @@
 sub grade_pdf {
     my @pdfdata = @_;
     my ($result,$meta,%grades,%problems,%foreigncourse,%mismatchuser,
-        %types,%checkboxoff,%checkboxon,%checkboxtotal,%checkboxinfo,$debug);
+        %types,%checkboxoff,%checkboxon,%checkboxtotal,%checkboxinfo,
+        %essaydraft,$debug);
 
     my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {
@@ -399,6 +400,9 @@
                                     }
                                 }
                                 next;
+                            } elsif (($type eq 'essay') && ($HWVAL =~ /^HWDRAFT(.+)$/)) {
+                                $essaydraft{$symb.$part}{'HWVAL'.$1} = $value;
+                                next;
                             }
 
                             my $submit = $part;
@@ -520,6 +524,14 @@
                             }
                         }
                     }
+                    if ($types{$key}{$hwval} eq 'text') {
+                        if (ref($essaydraft{$key}) eq 'HASH') {
+                            if ($essaydraft{$key}{$hwval} eq 'yes') {
+                                my ($id) = ($hwval =~ /^HWVAL_(.+)$/);
+                                $problem{'HWDRAFT'.$part.'_'.$id} = 'yes';
+                            }
+                        }
+                    }
                 }
             }
             my ($problemname, $grade) = &grade_problem(%problem);




More information about the LON-CAPA-cvs mailing list