value-extended — Expand value
| Attribute | Pos. | Req. | Default | Description |
|---|---|---|---|---|
| name | Yes | Yes | Name of variable. | |
| values_space | ||||
| yes |
1
|
Return value on success. | ||
| no | Return value on failure. | |||
| test | ||||
| put_contents | ||||
| enable_html | ||||
| enable_itl | ||||
| file_contents | Returns file contents from a upload field. | |||
| put_ref | ||||
| outfile | File name for output file. | |||
| encoding | Encoding for output file (UTF-8, raw). | |||
| auto_create_dir | 0 | Auto-create directories in the file path? | ||
| umask | File creation umask. | |||
| ascii | ||||
| maxsize | Maximum size of uploaded file. | |||
| joiner | ||||
| 'index' | ||||
| elements | ||||
| filter | ||||
| interpolate | 0 | interpolate output? | ||
| hide | 0 | Hide the tag return value? |
[value-extended] can be used for a number of tasks related to
user input:
Manipulate files uploaded by the user.
Output variables from value space.
Perform a test.
Example: Test for uploaded file
[value-extended name="picture" test="isfile" yes="Your picture has been uploaded." no="Please upload your picture!" ]
Interchange 5.9.0:
Source: code/SystemTag/value_extended.coretag
Lines: 14
# Copyright 2002-2007 Interchange Development Group and others # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. See the LICENSE file for details. # # $Id: value_extended.coretag,v 1.5 2007-03-30 23:40:49 pajamian Exp $ UserTag value-extended Order name UserTag value-extended addAttr UserTag value-extended PosNumber 1 UserTag value-extended Version $Revision: 1.5 $ UserTag value-extended MapRoutine Vend::Interpolate::tag_value_extended
Source: lib/Vend/Interpolate.pm
Lines: 2387
sub tag_value_extended {
my($var, $opt) = @_;
my $vspace = $opt->{values_space};
my $vref;
if (defined $vspace) {
if ($vspace eq '') {
$vref = $Vend::Session->{values};
}
else {
$vref = $Vend::Session->{values_repository}{$vspace} ||= {};
}
}
else {
$vref = $::Values;
}
my $yes = $opt->{yes} || 1;
my $no = $opt->{'no'} || '';
if($opt->{test}) {
$opt->{test} =~ /(?:is)?put/i
and
return defined $CGI::put_ref ? $yes : $no;
$opt->{test} =~ /(?:is)?file/i
and
return defined $CGI::file{$var} ? $yes : $no;
$opt->{test} =~ /defined/i
and
return defined $CGI::values{$var} ? $yes : $no;
return length $CGI::values{$var}
if $opt->{test} =~ /length|size/i;
return '';
}
if($opt->{put_contents}) {
return undef if ! defined $CGI::put_ref;
return $$CGI::put_ref;
}
my $val = $CGI::values{$var} || $vref->{$var} || return undef;
$val =~ s/</</g unless $opt->{enable_html};
$val =~ s/\[/[/g unless $opt->{enable_itl};
if($opt->{file_contents}) {
return '' if ! defined $CGI::file{$var};
return $CGI::file{$var};
}
if($opt->{put_ref}) {
return $CGI::put_ref;
}
if($opt->{outfile}) {
my $file = $opt->{outfile};
$file =~ s/^\s+//;
$file =~ s/\s+$//;
unless (Vend::File::allowed_file($file)) {
Vend::File::log_file_violation($file, 'value-extended');
return '';
}
if($opt->{ascii}) {
my $replace = $^O =~ /win32/i ? "\r\n" : "\n";
if($CGI::file{$var} !~ /\n/) {
# Must be a mac file.
$CGI::file{$var} =~ s/\r/$replace/g;
}
elsif ( $CGI::file{$var} =~ /\r\n/) {
# Probably a PC file
$CGI::file{$var} =~ s/\r\n/$replace/g;
}
else {
$CGI::file{$var} =~ s/\n/$replace/g;
}
}
if($opt->{maxsize} and length($CGI::file{$var}) > $opt->{maxsize}) {
logError(
"Uploaded file write of %s bytes greater than maxsize %s. Aborted.",
length($CGI::file{$var}),
$opt->{maxsize},
);
return $no;
}
#::logDebug(">$file \$CGI::file{$var}" . uneval($opt));
$opt->{encoding} ||= $CGI::file_encoding{$var};
Vend::Util::writefile(">$file", \$CGI::file{$var}, $opt)
and return $yes;
return $no;
}
my $joiner;
if (defined $opt->{joiner}) {
$joiner = $opt->{joiner};
if($joiner eq '\n') {
$joiner = "\n";
}
elsif($joiner =~ m{\\}) {
$joiner = $ready_safe->reval("qq{$joiner}");
}
}
else {
$joiner = ' ';
}
my $index = defined $opt->{'index'} ? $opt->{'index'} : '*';
$index = '*' if $index =~ /^\s*\*?\s*$/;
my @ary;
if (!ref $val) {
@ary = split /\0/, $val;
}
elsif($val =~ /ARRAY/) {
@ary = @$val;
}
else {
logError( "value-extended %s: passed non-scalar, non-array object", $var);
}
return join " ", 0 .. $#ary if $opt->{elements};
eval {
@ary = @ary[$ready_safe->reval( $index eq '*' ? "0 .. $#ary" : $index )];
};
logError("value-extended $var: bad index") if $@;
if($opt->{filter}) {
for(@ary) {
$_ = filter_value($opt->{filter}, $_, $var);
}
}
return join $joiner, @ary;
}