--- loncom/interface/lonpdfupload.pm	2009/05/15 17:53:06	1.4
+++ loncom/interface/lonpdfupload.pm	2009/06/17 13:00:38	1.13
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
-# Publication Handler
+# PDF Form Upload Handler
 #
-# $Id: lonpdfupload.pm,v 1.4 2009/05/15 17:53:06 onken Exp $
+# $Id: lonpdfupload.pm,v 1.13 2009/06/17 13:00:38 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -65,7 +65,15 @@ sub handler() {
     $env{'request.uri'}=$r->uri;
     $r->content_type('text/html');
     $r->send_http_header();
-    $r->print(&Apache::loncommon::start_page('Upload-PDF-Form'));
+
+    # Breadcrumbs
+    my $brcrum = [{'href' => '/pdfupload',
+                   'text' => 'Upload PDF Form'}];
+
+    $r->print(&Apache::loncommon::start_page('Upload PDF Form',
+                                             undef,
+                                             {'bread_crumbs' => $brcrum,})
+    );
 
     #load post data into environment
     &Apache::lonacc::get_posted_cgi($r);
@@ -80,10 +88,16 @@ sub handler() {
     }
 
     #link to course-content
-    $r->print("    <br />\n    <a href='/adm/navmaps'>\n      ".&mt("Navigate Contents")."\n    </a>\n    <br />");
+    $r->print('<hr />'
+             .'<p>'."\n"
+             .'<a href="/adm/navmaps">'."\n"
+             .&mt("Navigate Contents")."\n"
+             .'</a>'."\n"
+             .'</p>'."\n"
+    );
 
     #&dumpenv($r); #debug -> prints the environment
-    $r->print("  </body> \n</html>\n");
+    $r->print(&Apache::loncommon::end_page());
     return OK;
 }
 
@@ -116,7 +130,7 @@ END
 
 sub get_javascripts() {
     
-    my $message = &mt('Please choose a PDF-File');
+    my $message = &mt('Please choose a PDF-File.');
 
     # simple test if the upload ends with ".pdf"
     # it's only for giving a message to the user
@@ -140,37 +154,30 @@ END
 
 sub get_uploadform() {
     
-    #TODO use LON-CAPA routines like pick_box or like that  
     my %lt = &Apache::lonlocal::texthash(
-                 'title'=>'Submit a PDF-Form with problems', 
-                 'chFile' => 'Choose file:',
-                 'submit'=>'Submit'
+                 'title'  => 'Upload a PDF Form with filled Form Fields', 
+                 'chFile' => 'File',
+                 'submit' => 'Upload',
              );
 
-    my $result = <<END
-    <form method="post" enctype="multipart/form-data" onsubmit="return checkFilename(this);">
-      <input type="hidden" name="type" value="upload" />
-      <br />
-      <b>$lt{'title'}</b>
-      <table class="LC_pick_box"> 
-        <tbody>
-          <tr class="LC_pick_box_row">
-            <td class="LC_pick_box_title">
-              $lt{'chFile'}
-            </td>
-            <td class="LC_pick_box_value LC_odd_row">
-              <input type="file" name="file" id="filename" />
-            </td>
-          </tr>
-        </tbody>
-      </table>
-      <br />
-      <input type="submit" name="Uploaded" value="$lt{'submit'}" />
-    </form>
-    <br />
-    <hr />    
-END
-;
+    my $result = 
+        '<br />'
+       .'<form method="post" enctype="multipart/form-data" onsubmit="return checkFilename(this);">'
+       .'<input type="hidden" name="type" value="upload" />'
+       .&Apache::lonhtmlcommon::start_pick_box()
+       .&Apache::lonhtmlcommon::row_headline()
+       .'<h2>'.$lt{'title'}.'</h2>'
+       .&Apache::lonhtmlcommon::row_closure()
+       .&Apache::lonhtmlcommon::row_title($lt{'chFile'})
+       .'<input type="file" name="file" id="filename" />'
+       .&Apache::lonhtmlcommon::row_closure(1)
+       .&Apache::lonhtmlcommon::end_pick_box()
+       .'<p>'
+       .'<input type="submit" name="Uploaded" value="'.$lt{'submit'}.'" />'
+       .'</p>'
+       .'</form>'
+       .'<br />';
+
   return $result;
 }
 
@@ -183,7 +190,9 @@ sub processPDF {
     if (scalar @pdfdata) {    
         &grade_pdf(@pdfdata);
     } else {
-        $result .= "<h2>".&mt("Can't find any valid PDF-formfields")."</h2>";
+        $result .= '<p class="LC_error">'
+                  .&mt("Can't find any valid PDF formfields.")
+                  .'</p>';
     }
 }
 
@@ -218,11 +227,6 @@ sub grade_pdf {
     my $debug = ();
 
     $debug  .= "Found: ". scalar @pdfdata." Entries \n";
-    $result .= '<br />';
-    $result .= &Apache::loncommon::start_data_table();
-    $result .= &Apache::loncommon::start_data_table_header_row();
-    $result .= &mt('<b>Results of PDF-Form problems</b>');
-    $result .= &Apache::loncommon::end_data_table_header_row();
 
     foreach my $entry (sort(@pdfdata)) {
         if ($entry =~ /^meta.*/) {
@@ -232,7 +236,11 @@ sub grade_pdf {
             $user =~ s/(.*)\n/$1/; #TODO is that equals to chomp?
             
             if($user ne $env{'user.name'} or  $domain ne $env{'user.domain'}) {
-                return "<pre>".&mt('Wrong username in PDF-File').": $user $domain -> $env{'user.domain'} $env{'user.name'} </pre>";    
+                return '<p class="LC_error">'
+                      .&mt('Wrong username ([_1]) found in PDF file. Expected username: [_2]'
+                          ,$user.':'.$domain
+                          ,$env{'user.domain'}.':'.$env{'user.name'})
+                      .'</p>';
             }
 
         } elsif($entry =~ /^upload.*/)  {
@@ -242,7 +250,7 @@ sub grade_pdf {
             my ($map,$id,$resource)=&Apache::lonnet::decode_symb($symb);  
             $value =~ s/(.*)\n/$1/; 
 
-            #fehlerhafte Radiobuttons rausfiltern (Bug in CABAReT Stage)
+            #filter incorrect radiobuttons (Bug in CABAReT Stage)
             if($type eq 'radiobuttonresponse' && $value eq 'Off' ) {
                 next;
             }
@@ -253,7 +261,7 @@ sub grade_pdf {
                  $problems{$symb.$part}{$HWVAL} = $value;
             } else {
                  $problems{$symb.$part} =  { 'resource' => $resource,
-                                        'symb' => &Apache::lonenc::encrypted($symb),
+                                        'symb' => $symb,
                                         'submitted' => $part,
                                         $submit => 'Answer',
                                         $HWVAL => $value};
@@ -265,23 +273,29 @@ sub grade_pdf {
     }
     #$result .= $debug;
 
+    $result .= '<h2>'.&mt('Results of PDF Form problems').'</h2>';
+    $result .= &Apache::loncommon::start_data_table()
+              .&Apache::loncommon::start_data_table_header_row()
+              .'<th>'.&mt('Problem Name').'</th>'
+              .'<th>'.&mt('Grading').'</th>'
+              .&Apache::loncommon::start_data_table_header_row()
+              .&Apache::loncommon::end_data_table_header_row();
+
     foreach my $key (sort (keys %problems)) {
         my %problem = %{$problems{$key}};
         my ($problemname, $grade) = &grade_problem(%problem);
 
-        $problemname =~ s/(.*)\s*-\sPart\s0/$1/; #cut part when there is only one part in problem
-
         $result .= &Apache::loncommon::start_data_table_row();
         $result .= "<td>$problemname</td><td class='";
-        if($grade eq "EXACT_ANS") {
+        if($grade eq "EXACT_ANS" || $grade eq "APPROX_ANS") {
             $result .= "LC_answer_correct";
         } else { 
             $result .= "LC_answer_charged_try";
         }
+        $grade = &parse_grade_answer($grade);
         $result .= "'>$grade</span></td>";
         $result .= &Apache::loncommon::end_data_table_row();
     }
-    #$result .= "\n</table>";
     $result .= &Apache::loncommon::end_data_table();
 
 
@@ -290,25 +304,41 @@ sub grade_pdf {
 
 sub grade_problem {
     my %problem = @_;
+    my ($title, $part) = ();
 
-    my ($content) =  &Apache::loncommon::ssi_with_retries('/res/'.
-            $problem{'resource'}, 5, %problem);
-    
-    #TODO ? filter html response can't be the answer 
-    #     ! find an other way to get a problemname and Part
-    $content =~ s/.*class="LC_current_location".*>(.*)<\/td>.*/$1/g;
-    $content = $1;
+    &Apache::loncommon::ssi_with_retries('/res/'.$problem{'resource'}, 5, %problem);
 
-    my $part = $problem{submitted};
+    $title = &Apache::lonnet::gettitle($problem{'symb'});    
+    $part = $problem{submitted};
     $part =~ s/part_(.*)/$1/;
-    $content .= " - Part $part";
+    unless($part eq '0') {
+        #add information about part number
+        $title .= " - Part $part";
+    }
  
     my %problemhash = &Apache::lonnet::restore($problem{'symb'});
     my $grade = $problemhash{"resource.$part.award"};
 
-    return ($content, $grade);    
+    return ($title, $grade);    
+}
+
+sub parse_grade_answer {
+    my ($shortcut) = @_;
+     my %answerhash = ('EXACT_ANS' => &mt('You are correct.'),
+                       'APPROX_ANS' => &mt('You are correct.'),
+                       'INCORRECT' => &mt('You are incorrect'),
+     );
+
+    foreach my $key (keys %answerhash) {
+        if($shortcut eq $key) {
+            return $answerhash{$shortcut};
+        }  
+    }
+    return &mt('See course contents for further information.');
+
 }
 
+
 sub dumpenv  {
     my $r = shift;