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

raeburn raeburn@source.lon-capa.org
Thu, 18 Mar 2010 14:50:15 -0000


raeburn		Thu Mar 18 14:50:15 2010 EDT

  Modified files:              
    /loncom/interface	lonpdfupload.pm 
  Log:
  - Ensure user is in course context.
  - use File::MMagic to confirm a PDF file was uploaded.
  - Breadcrumb trail for two step process: 1. upload form, 2. processing result.
  - Check permission from canuse_pdfforms course config.
    - if none set, default to default for domain of course.    
  
  
Index: loncom/interface/lonpdfupload.pm
diff -u loncom/interface/lonpdfupload.pm:1.15 loncom/interface/lonpdfupload.pm:1.16
--- loncom/interface/lonpdfupload.pm:1.15	Thu Mar 18 13:16:11 2010
+++ loncom/interface/lonpdfupload.pm	Thu Mar 18 14:50:15 2010
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # PDF Form Upload Handler
 #
-# $Id: lonpdfupload.pm,v 1.15 2010/03/18 13:16:11 raeburn Exp $
+# $Id: lonpdfupload.pm,v 1.16 2010/03/18 14:50:15 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -33,6 +33,7 @@
 use Apache::lonhtmlcommon();
 use Apache::loncommon();
 use Apache::lonlocal;
+use File::MMagic;
 use CAM::PDF;
 
 use strict;
@@ -43,18 +44,58 @@
     $r->send_http_header;
     return OK if $r->header_only;
 
+    #  Needs to be in a course
+    if (!$env{'request.course.fn'}) {
+        # Not in a course
+        $env{'user.error.msg'}="/adm/pdfupload:bre:0:0:Cannot upload PDF forms unless in a course";
+        return HTTP_NOT_ACCEPTABLE;
+    }
+
     # Breadcrumbs
     my $brcrum = [{'href' => '/adm/pdfupload',
                    'text' => 'Upload PDF Form'}];
+    if ($env{'form.Uploaded'} && $env{'form.file'}) {
+        push(@{$brcrum},{'href'  => '',
+                         'text'  => 'PDF upload result'});
+    }
 
     $r->print(&Apache::loncommon::start_page('Upload PDF Form',
                                              undef,
                                              {'bread_crumbs' => $brcrum,})
     );
 
+    if ($env{'request.course.id'}) {
+        my $permission = $env{'course.'.$env{'request.course.id'}.'.canuse_pdfforms'};
+        if ($permission eq '') {
+            my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
+            $permission = $domdefs{'canuse_pdfforms'};
+        }
+        unless ($permission) {
+            $r->print('<p class="LC_warning">'.
+                      &mt('Upload of PDF forms is not permitted for this course.').
+                      '</p>'.
+                      &Apache::loncommon::end_page());
+            return OK;
+        }
+    } else {
+        $r->print('<p class="LC_warning">'.
+                  &mt('Could not determine identity of this course. you may need to [_1]re-select[_2] the course.','<a href="/adm/roles">','</a>').
+                  '</p>'.
+                  &Apache::loncommon::end_page());
+        return OK;
+    }
+
     # if a file was upload
     if($env{'form.Uploaded'} && $env{'form.file'}) {
-        $r->print(&processPDF);
+        my $mm = new File::MMagic;
+        my $mime_type = $mm->checktype_contents($env{'form.file'});
+        if ($mime_type eq 'application/pdf') {
+            $r->print(&processPDF);
+        } else {
+            $r->print('<p class="LC_error">'
+                     .&mt("The uploaded file does not appear to be a PDF file.")
+                     .'</p>');
+        }
     } else { 
         # print upload form
         $r->print(&get_javascripts);