[# tag: ewok file edit page #]
[!
use File::Basename;
use Ewok::Config qw($EWOK_EDIT_RE $EWOK_TEMPLATE_RE %EWOK_RESTRICTED_OBJECTS);
use Ewok::Authz qw(:common);
use Ewok::File qw(restrictCheck);
use Ewok::Util qw(:dir :error);
use Ewok::Locker;
!]
[-
Execute({ inputfile => 'util.epl', import => 1 });
$req = shift;
@errors = ();
$web_file = $fdat{p};
($web_dir, $fs_dir, $wd, $filename) = webfsdir($req, $web_file, { errors => \@errors });
$fs_file = "$fs_dir$filename";
$authz = authzGetUserHash($req, $fs_file);
$meta = 0;
if ($filename !~ m/$Ewok::Config::EWOK_NONMETA_RE/i) {
$meta = 1;
$meta = $fdat{meta} if exists $fdat{meta};
}
$javascript = ! exists $req->{pref} || $req->{pref}->{javascript};
$rows = $req->{pref}->{edit_window_rows} || 25;
$cols = $req->{pref}->{edit_window_columns} || 80;
-]
[$ if ($javascript) $]
[$ endif $]
ewok: edit [+ $web_file +]
[-
if (! @errors) {
if (! restrictCheck($req, 'edit', $fs_dir, [ $filename ],
{ errors => \@errors, web_dir => $web_dir, })) {
# Errors in @errors
}
elsif ($filename !~ m/$EWOK_EDIT_RE/ &&
$filename !~ m/$EWOK_TEMPLATE_RE/ &&
! $EWOK_RESTRICTED_OBJECTS{$filename}) {
info("Error: cannot edit '$filename'.", \@errors);;
}
elsif (($filename =~ m/$EWOK_EDIT_RE/ && ! $authz->{$EDIT_PRIV}) ||
($filename =~ m/$EWOK_TEMPLATE_RE/ && ! $authz->{$TMPL_PRIV})) {
info("Error: insufficient privileges to edit '$filename'.", \@errors);
}
elsif (! -r $fs_file) {
info("Error: cannot read '$filename'.", \@errors);
}
elsif (-l $fs_file) {
info("Error: cannot edit '$filename' - it's a link (try editing the target).",
\@errors);
}
else {
my $l = Ewok::Locker->new();
$l->lock($fs_file, $req->{user},
{ errors => \@errors, altfile => $web_file, op => 'edit' });
}
}
errors(\@errors) if @errors;
-]
[$ if (! @errors) $]
Editing [+ $web_file +], status LOCKED.
Note: do NOT use your browser 'Back' key here or
the lock on this file will not be removed properly.
[#
[$ endif $]