--- loncom/interface/lonpdfupload.pm 2010/03/18 13:16:11 1.15 +++ loncom/interface/lonpdfupload.pm 2014/02/28 19:20:06 1.23 @@ -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.23 2014/02/28 19:20:06 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,8 +32,11 @@ use Apache::Constants qw(:common :http); use Apache::lonnet; use Apache::lonhtmlcommon(); use Apache::loncommon(); +use Apache::lonnavmaps(); use Apache::lonlocal; +use File::MMagic; use CAM::PDF; +use LONCAPA qw(:DEFAULT :match); use strict; @@ -43,18 +46,59 @@ sub handler() { $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('
'. + &mt('Upload of PDF forms is not permitted for this course.'). + '
'. + &Apache::loncommon::end_page()); + return OK; + } + } else { + $r->print(''. + &mt('Could not determine identity of this course.').' '. + &mt('You may need to [_1]re-select[_2] the course.','',''). + '
'. + &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('' + .&mt("The uploaded file does not appear to be a PDF file.") + .'
'); + } } else { # print upload form $r->print(&get_javascripts); @@ -83,15 +127,17 @@ sub get_javascripts() { # it's only for giving a message to the user my $result .= <