[# tag: ewok directory op page #] [! use Ewok::File qw(:publish upload); use Ewok::Authz qw(:all); use Ewok::Util qw(:dir); use Ewok::Meta qw(getMeta); use URI::Escape; !][- Execute({ inputfile => 'util.epl', import => 1 }); $debug = 0; $req = shift; @errors = (); ($web_dir, $fs_dir, $wd) = webfsdir($req, $fdat{p}, { errors => \@errors }); if (! @errors) { # Load directory metadata and setup %disallow hash $dirmeta = getMeta($fs_dir, { type => 'dir' }); if ($dirmeta->{fm_disallow}) { %disallow = map { lc($_) => 1 } split /[, ] */, $dirmeta->{fm_disallow}; } # If $fdat{name}, default to create $fdat{op} = 'Create' if (! $fdat{op} || $fdat{op} eq 'Metadata') && $fdat{name}; # Permissions handling my @permop = ('Permissions', 'Update'); if (grep /^$fdat{op}$/, @permop) { @pubSet = getPublishHash($fs_dir); @viewpubl = (); if (@pubSet > 1) { for my $target (@pubSet) { push @viewpubl, "-$target->{label}"; } } else { @viewpubl = ( '' ); } } } $javascript = !exists $req->{pref}->{javascript} || $req->{pref}->{javascript}; -]
op: [+ $fdat{op} +] name: [+ $fdat{name} +][$ endif $] [# Error conditions #] [- if (! @errors) { @ops = qw(Create Update Upload Permissions Metadata Publishing); $userPriv = authzGetUserHash($req, $fs_dir); $editPriv = defined $userPriv->{$EDIT_PRIV}; $publPriv = defined $userPriv->{$PUBL_PRIV}; $tmplPriv = defined $userPriv->{$TMPL_PRIV}; $authzPriv = defined $userPriv->{$AUTHZ_PRIV}; $adminPriv = defined $userPriv->{$ADMIN_PRIV}; info("Error: cannot find directory $wd.", \@errors) if ! -d $fs_dir; info("Error: cannot write to directory $wd.", \@errors) if ! @errors && ! -w $fs_dir; info("Error: unknown operation $fdat{op}.", \@errors) if ! $fdat{op} || ! grep /^$fdat{op}$/, @ops; info("Error: you are not authorised to $fdat{op} in directory $wd.", \@errors) if ($fdat{op} eq 'Create' || $fdat{op} eq 'Upload') && (! $editPriv || $disallow{lc($fdat{op})}); info("Error: you are not authorised to modify permissions on directory $wd.", \@errors) if ($fdat{op} eq 'Permissions' || $fdat{op} eq 'Update') && ! $authzPriv; info("Error: you are not authorised to modify directory metadata.", \@errors) if $fdat{op} eq 'Metadata' && ! $editPriv; info("Error: you are not authorised to modify publishing settings.", \@errors) if $fdat{op} eq 'Publishing' && ! $adminPriv; authzObjCheck($fdat{name}, $userPriv, $fdat{op}, \@errors) if ($fdat{name} =~ /\.epl\s*$/o); } errors(\@errors) if @errors; -] [$ if (! @errors) $] [- if ($fdat{op} eq 'Create') { if ($fdat{name} && $fdat{type} && ($fdat{type} ne 'l' || $fdat{target})) { if (Ewok::File::create({ req => $req, fs_dir => $fs_dir, name => $fdat{name}, type => $fdat{type}, errors => \@errors, wd => $wd, target => $fdat{target} })) { $http_headers_out{Location} = "/ewok/fm.html?p=$web_dir&type=$fdat{type}" if ! @errors; } elsif (! @errors) { info("Error: create failed - exact problem unknown.", \@errors) } } else { $req->{req_rec}->warn("Create: $fdat{type}, $fdat{name}, $fdat{target}"); } } elsif ($fdat{op} eq 'Upload' && $fdat{name} && $web_dir) { if (upload($req, $fs_dir, $fdat{name}, { errors => \@errors, web_dir => $web_dir } )) { $http_headers_out{Location} = $fdat{back} || "/ewok/fm.html?p=$web_dir"; } } elsif ($fdat{op} eq 'Metadata') { $http_headers_out{Location} = "meta.html?p=" . uri_escape($web_dir, ' '); } elsif ($fdat{op} eq 'Update') { my $update = 0; for my $perm (qw(view edit publish templates permissions)) { if ($fdat{$perm} ne $fdat{"${perm}-in"}) { $update = 1; last; } } if (!$update) { for my $target (@viewpubl) { if ($fdat{"viewpubl$target"} ne $fdat{"viewpubl${target}-in"}) { $update = 1; last; } } } if (!$update) { info("Error: no changes to permissions - not saved.", \@errors) $fdat{op} = 'Permissions'; } else { %authz = (); $authz{$VIEW_PRIV} = $fdat{view} || 'NONE'; $authz{$EDIT_PRIV} = $fdat{edit}; $authz{$PUBL_PRIV} = $fdat{publish}; $authz{$TMPL_PRIV} = $fdat{templates}; $authz{$AUTHZ_PRIV} = $fdat{permissions}; # View defaults to ALL for publishing, but if deleted assume NONE for my $target (@viewpubl) { $authz{"$VIEWPUBL_PRIV$target"} = $fdat{"viewpubl$target"} || 'NONE'; } my $authz = Ewok::Util::hashInvert(\%authz); my $pubHash = getPublishHash($fs_dir); my $args = {}; $args->{label} = $pubHash->{label} if exists $pubHash->{label}; if (authzSave($req, $fs_dir, $authz, $args)) { $http_headers_out{Location} = "/ewok/fm.html?p=$web_dir"; } else { info("Error: saving permissions failed.", \@errors) $fdat{op} = 'Permissions'; } } } -] [# Non-fatal errors: display and reproduce appropriate form #] [$ if (! exists $http_headers_out{Location}) $] [$ if $fdat{op} eq 'Create' $] [$ if ($fdat{type} eq 'l' && $fdat{name}) $]
[+ $key +] | [+ $pubHash->{$key} +] |