--- loncom/homework/daxesave.pm 2016/02/17 00:05:14 1.3 +++ loncom/homework/daxesave.pm 2016/12/13 21:37:35 1.5 @@ -1,7 +1,7 @@ # The LearningOnline Network # Convert and save a problem from Daxe. # -# $Id: daxesave.pm,v 1.3 2016/02/17 00:05:14 damieng Exp $ +# $Id: daxesave.pm,v 1.5 2016/12/13 21:37:35 damieng Exp $ # # Copyright Michigan State University Board of Trustees # @@ -44,7 +44,7 @@ sub handler { $request->content_type('text/plain'); # path should be in the form "/daxeopen/priv/..." - # or ^/daxeopen/uploaded/[^/]+/[^/]+/supplemental/.*html?$ + # or ^/daxeopen/uploaded/[^/]+/[^/]+/.*html?$ my $path = $env{'form.path'}; $path =~ s/^\/daxeopen//; @@ -60,11 +60,11 @@ sub handler { } } } - } elsif ($path =~ m|^/uploaded/[^/]+/[^/]+/supplemental/|) { + } elsif ($path =~ m|^/uploaded/[^/]+/[^/]+/|) { if ($env{'user.name'} ne '' && $env{'user.domain'} ne '' && $env{'request.course.id'}) { $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - if ($path =~ m|^/uploaded/\Q$cdom\E/\Q$cnum\E/supplemental/| && $path !~ /\.\./) { + if ($path =~ m|^/uploaded/\Q$cdom\E/\Q$cnum\E/| && $path !~ /\.\./) { if (&Apache::lonnet::allowed('mdc', $env{'request.course.id'})) { $allowed = 1; } @@ -82,18 +82,24 @@ sub handler { my $contents = $env{'form.file'}; - try { - $contents = &Apache::xml_to_loncapa::convert_file($contents); - } catch { - $request->print("error\nconvert failed for $path: $_"); - return OK; - }; + my $mode; + if ($path =~ /\.(task|problem|exam|quiz|assess|survey|library|xml|html|htm|xhtml|xhtm)$/) { + try { + $contents = &Apache::xml_to_loncapa::convert_file($contents); + } catch { + $request->print("error\nconvert failed for $path: $_"); + return OK; + }; + $mode = '>:encoding(UTF-8)'; + } else { + $mode = '>'; + } my $filebak = $newpath.".bak"; if (-e $newpath) { copy($newpath, $filebak); # errors ignored } - open my $out, '>:encoding(UTF-8)', $newpath; + open my $out, $mode, $newpath; print $out $contents; close $out;