version 1.3, 2016/02/17 00:05:14
|
version 1.6, 2023/08/23 20:43:34
|
Line 28
|
Line 28
|
### |
### |
|
|
package Apache::daxesave; |
package Apache::daxesave; |
|
use strict; |
|
|
use Apache::Constants; |
use Apache::Constants qw(:common); |
use Apache::lonnet; |
use Apache::lonnet; |
use Try::Tiny; |
use Try::Tiny; |
use File::Copy; |
use File::Copy; |
Line 44 sub handler {
|
Line 45 sub handler {
|
$request->content_type('text/plain'); |
$request->content_type('text/plain'); |
|
|
# path should be in the form "/daxeopen/priv/..." |
# path should be in the form "/daxeopen/priv/..." |
# or ^/daxeopen/uploaded/[^/]+/[^/]+/supplemental/.*html?$ |
# or ^/daxeopen/uploaded/[^/]+/[^/]+/.*html?$ |
my $path = $env{'form.path'}; |
my $path = $env{'form.path'}; |
$path =~ s/^\/daxeopen//; |
$path =~ s/^\/daxeopen//; |
|
|
Line 60 sub handler {
|
Line 61 sub handler {
|
} |
} |
} |
} |
} |
} |
} elsif ($path =~ m|^/uploaded/[^/]+/[^/]+/supplemental/|) { |
} elsif ($path =~ m|^/uploaded/[^/]+/[^/]+/|) { |
if ($env{'user.name'} ne '' && $env{'user.domain'} ne '' && $env{'request.course.id'}) { |
if ($env{'user.name'} ne '' && $env{'user.domain'} ne '' && $env{'request.course.id'}) { |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$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'})) { |
if (&Apache::lonnet::allowed('mdc', $env{'request.course.id'})) { |
$allowed = 1; |
$allowed = 1; |
} |
} |
Line 82 sub handler {
|
Line 83 sub handler {
|
|
|
my $contents = $env{'form.file'}; |
my $contents = $env{'form.file'}; |
|
|
try { |
my $mode; |
$contents = &Apache::xml_to_loncapa::convert_file($contents); |
if ($path =~ /\.(task|problem|exam|quiz|assess|survey|library|xml|html|htm|xhtml|xhtm)$/) { |
} catch { |
try { |
$request->print("error\nconvert failed for $path: $_"); |
$contents = &Apache::xml_to_loncapa::convert_file($contents); |
return OK; |
} catch { |
}; |
$request->print("error\nconvert failed for $path: $_"); |
|
return OK; |
|
}; |
|
$mode = '>:encoding(UTF-8)'; |
|
} else { |
|
$mode = '>'; |
|
} |
|
|
my $filebak = $newpath.".bak"; |
my $filebak = $newpath.".bak"; |
if (-e $newpath) { |
if (-e $newpath) { |
copy($newpath, $filebak); # errors ignored |
copy($newpath, $filebak); # errors ignored |
} |
} |
open my $out, '>:encoding(UTF-8)', $newpath; |
if (open(my $out, $mode, $newpath)) { |
print $out $contents; |
print $out $contents; |
close $out; |
close $out; |
|
$request->print("ok\n"); |
$request->print("ok\n"); |
} else { |
|
$request->print("error\nFailed to open file to save $path"); |
|
} |
return OK; |
return OK; |
} |
} |
|
|