[! use Ewok::Meta qw(:all); use Ewok::Metamap qw(getMap checkType); use Ewok::Authz qw(:common); use Ewok::Util qw(info); !][- $debug = 0; $req = shift; $zone = $fdat{z}; $dir = $fdat{d}; $name = "\u$dir"; $verb = $ENV{SCRIPT_NAME}; $verb =~ s|^.*/([^/]+)\.html?|\u$1|o; $zmap = { news => { dir => '/etools/news/', title => "\u$verb news item", item => 'news item', acknowledge => 'Thanks, your news item has been submitted.', alert_subject => 'News item pending', alert_uri => 'http://ewok.corp.ot/etools/news/pending', }, weblog => { dir => '/etools/weblog/', title => "Weblog entry for $name", item => 'weblog entry', # alert => 'gavinc@ot.com.au', template => "$dir-%s-%06d.html", labels => 0, }, }; undef $zone unless exists $zmap{$zone}; if (!$zone) { # Try and derive the zone from the script name for my $z (keys %$zmap) { if ($ENV{SCRIPT_NAME} =~ m/^$zmap->{$z}->{dir}/) { $zone = $z; } } } if ($zone) { $web_file = $ENV{SCRIPT_NAME}; ($web_dir = $web_file) =~ s|/[^/]+$|/|o; $fs_file = $ENV{SCRIPT_FILENAME}; ($fs_dir = $fs_file) =~ s|/[^/]+$|/|o; $fs_dir .= '/' if substr($fs_dir,-1) ne '/'; if ($dir) { if (-d "$fs_dir$dir") { $web_dir .= $dir; $fs_dir .= $dir; } else { info("Error: invalid directory '$dir'.", \@errors); } } $web_dir .= '/' if substr($web_dir,-1) ne '/'; $fs_dir .= '/' if substr($fs_dir,-1) ne '/'; $authz = authzGetUserHash($req, $fs_file); $referer = $fdat{referer} || $ENV{HTTP_REFERER} || '/ewok/fm.html'; $op = $fdat{op}; # Initialisations $metamap = undef; $show = 0; # Create alerts @alert = (); push @alert, split(/\s*,\s*/, $req->{dir}->{create_alert}); push @alert, split(/\s*,\s*/, $zmap->{$zone}->{alert}); } else { info("Error: unknown zone '$zone'.", \@errors); } -]

[+ $zmap->{$zone}->{title} +]

[$ if ($debug) $]
zone: [+ $zone +]
fs_dir: [+ $fs_dir +]
web_dir: [+ $web_dir +]
alert: [+ join ',',@alert +]
[$ endif $] [$ sub showErrors $][- $errors = shift; -]

[+ $escmode = 0; join("
\n", @$errors) +]

[$ endsub $] [# Treat errors to this point as fatal #] [$ if (@errors) $] [- showErrors \@errors -] [# Cancel #][$ elsif ($op eq 'Cancel') $] [- $http_headers_out{'Location'} = $referer; -] [# Create #][$ elsif ($op eq $verb) $] [# Check metadata #] [- ($metamap, $keys) = getMap($fs_file, { create => 1 }); -] [$ foreach $key (split /,/, $fdat{meta_all}) $][- $prop = $metamap->{$key}; if (defined $prop) { $value = $fdat{$key}; $value = $prop->{default} if $value eq '' && $prop->{default} ne ''; # Check value if not FIXED if (grep /^$key$/, split(/,/, $fdat{meta_check})) { if ($value ne '') { if (! checkType($key, $value, $prop->{datatype}, \$error)) { push @invalid, $key; push @errors, $error; } # If select list, ignore 'N/A' and 'None' values elsif ($prop->{datatype} =~ m/\|/o) { $value = '' if $value =~ m|^N/A$|oi || $value =~ m|^None$|oi; } } elsif ($prop->{fieldtype} eq MANDATORY) { push @invalid, $key; push @errors, "Error: $key is mandatory."; } } # Add to meta hash $meta->{$key} = $value; } else { info("Error: no metadata properties for $key field.", \@errors); } -][$ endforeach $] [$ if (@errors) $][- $show = 1 -][$ else $] [# Metadata okay - do the create #] [- $text = $meta->{text}; delete $meta->{text}; $filename = Ewok::File::create({ req => $req, fs_dir => $fs_dir, name_style => 'month', text => $text, meta => $meta, name_template => $zmap->{$zone}->{template}, }); -] [$ if (@errors) $] [- showErrors \@errors -] [$ else $] [# Create successful - alert, acknowledge, and/or redirect #] [- # Check for a create alert if (@alert) { my $uri = $zmap->{$zone}->{alert_uri} || "http://$ENV{HTTP_HOST}$web_dir$filename"; my $subject = $zmap->{$zone}->{alert_subject} || "\u$zmap->{$zone}->{item} created"; my $locn = $ENV{SCRIPT_NAME}; $locn =~ s|/[^/]+$||o; my $alert = qq($ENV{REMOTE_USER} has created a new $zmap->{$zone}->{item}. See: $uri Cheers, The ewok alerter ); HTML::Embperl::Mail::Execute({ from => 'ewok alert ', to => join(',',@alert), subject => $subject, input => \$alert, syntax => 'Text', }); } -] [$ if ($zmap->{$zone}->{acknowledge}) $]

[+ $zmap->{$zone}->{acknowledge} +]

[$ elsif ($referer) $] [- $http_headers_out{Location} = $referer; -] [$ endif $]

Back

[$ endif $][$ endif $] [# Else $op not Cancel or Create #][$ else $][- $show = 1 -][$ endif $] [# Metadata page #][$ if ($show) $][- if (! defined $metamap) { ($metamap, $keys) = getMap($fs_file, { create => 1 }); } -] [$ if (! defined $metamap) $][- info("Error: loading metadata template for '$web_file' failed.", \@errors); showErrors \@errors; -][$ else $] [$ if (! exists $zmap->{$zone}->{labels} || $zmap->{$zone}->{labels}) $]

   Fields labelled in Blue are mandatory.

[$ endif $] [- showErrors \@errors if @errors -]
[- %hidden = (); -] [$ foreach $key (@$keys) $][- $prop = $metamap->{$key}; -][$ if (defined $prop && ($all || ! exists $prop->{omit} || ! $prop->{omit})) $] [- push @meta_all, $key; $value = undef; # Set value from parameters, existing metadata, or defaults $ftype = $prop->{fieldtype}; if ($ftype eq FIXED && ! $prop->{hidden}) { $value = $meta->{$key} if exists $meta->{$key}; $value = $prop->{default} if ! defined $value and $prop->{default} ne ''; # modify_dtm is a special case - should always take default # $value = $prop->{default} if $key eq 'modify_dtm'; } elsif (exists $fdat{$key}) { $value = $fdat{$key}; } else { $value = $meta->{$key} if exists $meta->{$key}; $value = $prop->{default} if ! defined $value && $prop->{default} ne ''; } -] [# $escmode = 0; "debug:$key+$ftype+$fdat{$key}+$meta->{$key}+$prop->{default}+$value
" if $prop->{datatype} eq BOOLEAN #] [$ if (! $prop->{hidden} && (! $prop->{priv} || (ref $authz eq 'HASH' && $authz->{$prop->{priv}}))) $][- push @meta_check, $key if $ftype ne FIXED; $auto_index = $value if $key eq 'auto_index'; -] [$ if (! exists $zmap->{$zone}->{labels} || $zmap->{$zone}->{labels}) $] [$ endif $] [$ if ($ftype eq FIXED) $][+ $value +][$ elsif ($prop->{datatype} eq TEXTLONG) $][$ elsif ($prop->{datatype} eq BOOLEAN) $][$ if (! $dirFlag && ! $user) $] Inherit  [$ endif $] Yes   No  [$ elsif ($prop->{datatype} =~ m/\|/o) $][$ else $][$ endif $] [$ endif $] [$ endif $][$ endforeach $]
  [$ if ($ftype eq MANDATORY) $][$ endif $] [+ $key +][$ if ($ftype eq MANDATORY) $][$ endif $]
[# #] [$ if defined $edittext $][$ endif $] [$ hidden $]

[$ endif $][$ endif $] [# arch-tag: 24d03d73-1fa6-4bab-9342-ac0222403a42 #]