EMS import/export, Form::*::getValueFromPost(alt_values), and tests

This commit is contained in:
James Tolley 2007-05-29 23:39:24 +00:00
parent 0a7e06edca
commit c09b2cae1b
46 changed files with 1728 additions and 299 deletions

View file

@ -96,15 +96,19 @@ sub generateIdParameter {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Retrieves a value from a form GET or POST and returns it. If the value comes back as undef, this method will return undef.
=head3 value
An optional value to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $formValue = $self->session->form->param($self->get("name"));
my $formValue = @_ ? shift : $self->session->form->param($self->get("name"));
if (defined $formValue) {
return $formValue;
} else {
@ -122,10 +126,10 @@ Renders and input tag of type checkbox.
sub toHtml {
my $self = shift;
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->get("value"))));
my $checkedText = ' checked="checked"' if ($self->get("checked"));
my $idText = ' id="'.$self->get('id').'" ' if ($self->get('id'));
return '<input type="checkbox" name="'.$self->get("name").'" value="'.$value.'"'.$idText.$checkedText.' '.$self->get("extras").' />';
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->get("value")))) || '';
my $checkedText = $self->get("checked") ? ' checked="checked"' : '';
my $idText = $self->get('id') ? ' id="'.$self->get('id').'" ' : '';
return '<input type="checkbox" name="'.($self->get("name")||'').'" value="'.$value.'"'.$idText.$checkedText.' '.($self->get("extras")||'').' />';
}

View file

@ -70,9 +70,9 @@ Returns a class name which has been taint checked.
sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
$value =~ s/[^\w:]//g;
return $value;
return $value;
}
#-------------------------------------------------------------------
@ -84,9 +84,9 @@ Renders a class name field.
=cut
sub toHtml {
my $self = shift;
my $self = shift;
$self->session->style->setScript($self->session->url->extras('inputCheck.js'),{ type=>'text/javascript' });
$self->set("extras", $self->get('extras') . ' onkeyup="doInputCheck(document.getElementById(\''.$self->get("id").'\'),\'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890:_\')" ');
$self->set("extras", $self->get('extras') . ' onkeyup="doInputCheck(document.getElementById(\''.$self->get("id").'\'),\'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890:_\')" ');
return $self->SUPER::toHtml;
}

View file

@ -62,17 +62,21 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns a hex color like "#000000". Returns undef if the return value is not a valid color.
=head2 value
An optional value to use instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $color = $self->session->form->param($self->get("name"));
return undef unless $color =~ /\#\w{6}/;
return $color;
my $color = @_ ? shift : $self->session->form->param($self->get("name"));
return undef unless $color =~ /\#\w{6}/;
return $color;
}
#-------------------------------------------------------------------

View file

@ -78,22 +78,30 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns an array or a carriage return ("\n") separated scalar depending
upon whether you're returning the values into an array or a scalar. If
any data is in the Text form, it is returned before a selected value from
the list.
=head3 value
Optional values to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
if ($self->session->form->param($self->get("name")."_new")) {
if (@_) {
return $self->SUPER::getValueFromPost(@_);
}
elsif ($self->session->form->param($self->get("name")."_new")) {
my $formValue = $self->session->form->param($self->get("name")."_new");
$formValue =~ tr/\r\n//d;
return $formValue;
}
}
return $self->SUPER::getValueFromPost;
}

View file

@ -412,15 +412,27 @@ sub fixTags {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Retrieves a value from a form GET or POST and returns it. If the value comes back as undef, this method will return the defaultValue instead.
=head3 value
An optional value to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $formValue = $self->session->form->param($self->get("name")) if ($self->session->request);
my $formValue;
if (@_) {
$formValue = shift;
}
elsif ($self->session->request) {
$formValue = $self->session->form->param($self->get("name"));
}
if (defined $formValue) {
return $formValue;
} else {

View file

@ -133,11 +133,15 @@ sub displayValue {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns a validated form post result. If the result does not pass validation,
it returns undef instead.
=head3 value
An optional value to process, instead of POST input. This should be in the 'YY(YY)?-MM-DD' form.
=cut
sub getValueFromPost {
@ -147,11 +151,11 @@ sub getValueFromPost {
|| $self->get("defaultValue") =~ m/^\d+$/
|| !$self->get("value")
|| $self->get("value") =~ m/^\d+$/) {
return $self->session->datetime->setToEpoch($self->session->form->param($self->get("name")));
return $self->session->datetime->setToEpoch(@_ ? shift : $self->session->form->param($self->get("name")));
} else {
# MySQL format
# YY(YY)?-MM-DD
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
# NOTE: Cannot fix time zone since we don't have a complete date/time

View file

@ -105,10 +105,14 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns a validated form post result. If the result does not pass validation, it returns undef instead.
=head3 value
An optional value to process, instead of POST input. This should be in the 'YY(YY)?-MM-DD HH:MM:SS' form.
=cut
sub getValueFromPost {
@ -119,11 +123,11 @@ sub getValueFromPost {
|| !$self->get("value")
|| $self->get("value") =~ m/^\d+$/) {
# Epoch format
return $self->session->datetime->setToEpoch($self->session->form->param($self->get("name")));
return $self->session->datetime->setToEpoch(@_ ? shift : $self->session->form->param($self->get("name")));
} else {
# MySQL format
# YY(YY)?-MM-DD HH:MM:SS
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
$self->session->errorHandler->warn("Date value: $value");
# Verify format

View file

@ -70,15 +70,19 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns a validated email address. If the result does not pass validation, it returns undef instead.
=head3 value
An optional value to process instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
if ($value =~ /^([0-9a-zA-Z]([-.+\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/i) {
return $value;
}

View file

@ -94,19 +94,23 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns the integer from the form post, or returns 0.0 if the post result is invalid.
=head3 value
An optional value to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
if ($value =~ /^-?[\d\.]+$/ and $value =~ /\d/) {
return $value;
}
return 0.0;
return $value;
}
return 0.0;
}
#-------------------------------------------------------------------

View file

@ -110,8 +110,8 @@ Returns a group pull-down field. A group pull down provides a select list that p
sub toHtml {
my $self = shift;
my $where;
if ($self->get('excludeGroups')->[0] ne "") {
my $where = '';
if (($self->get('excludeGroups')->[0]||'') ne "") {
$where = "and groupId not in (".$self->session->db->quoteAndJoin($self->get("excludeGroups")).")";
}
$self->set('options', $self->session->db->buildHashRef("select groupId,groupName from groups where showInForms=1 $where order by groupName"));

View file

@ -104,15 +104,19 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns the value of this form field after stipping unwanted tags like <body>.
=head3 value
An optional value to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
return WebGUI::HTML::cleanSegment($self->SUPER::getValueFromPost());
return WebGUI::HTML::cleanSegment($self->SUPER::getValueFromPost(@_));
}

View file

@ -232,7 +232,7 @@ sub getValueFromPost {
id => 'view-'.$self->get('id'),
};
return WebGUI::Form::hexadecimal->new($self->session, $properties)->getValueFromPost;
return WebGUI::Form::Hexadecimal->new($self->session, $properties)->getValueFromPost;
}
1;

View file

@ -101,9 +101,9 @@ sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
if ($value =~ /^[0-9a-f]+$/i) {
return $value;
}
return 0;
return $value;
}
return 0;
}
#-------------------------------------------------------------------

View file

@ -103,9 +103,9 @@ Renders an input tag of type hidden.
sub toHtmlAsHidden {
my $self = shift;
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->get("value"))));
my $idText = ' id="'.$self->get('id').'" ' if ($self->get('id'));
return '<input type="hidden" name="'.$self->get("name").'" value="'.$value.'" '.$self->get("extras").$idText.' />'."\n";
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->get("value")))) || '';
my $idText = $self->get('id') ? ' id="'.$self->get('id').'" ' : '';
return '<input type="hidden" name="'.($self->get("name")||'').'" value="'.$value.'" '.($self->get("extras")||'').$idText.' />'."\n";
}
#-------------------------------------------------------------------

View file

@ -130,14 +130,19 @@ sub getOnChangeSlider {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Retrieves a value from a form GET or POST and returns it. If the value comes back as undef, this method will return the defaultValue instead. Strip newlines/carriage returns from the value.
=head2 value
A value to process instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my @args = @_;
my $properties = {
name => $self->get('name'),
@ -146,7 +151,7 @@ sub getValueFromPost {
id => 'view-'.$self->get('id'),
};
return WebGUI::Form::Integer->new($self->session, $properties)->getValueFromPost;
return WebGUI::Form::Integer->new($self->session, $properties)->getValueFromPost(@args);
}
1;

View file

@ -94,19 +94,23 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns the integer from the form post, or returns 0 if the post result is invalid.
=head3 value
An optional value to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
if ($value =~ /^-?\d+$/) {
return $value;
}
return 0;
return $value;
}
return 0;
}
#-------------------------------------------------------------------

View file

@ -85,14 +85,24 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ num_and_units ] )
Returns either the interval that was posted (in seconds) or if nothing comes back it returns 0.
=head3 num_and_units
The number and units for this interval, to use instead of POST input, which is the default. ("3 days", for example.) Valid units are (case-insensitive): seconds, minutes, hours, days, weeks, months, years.
=cut
sub getValueFromPost {
my $self = shift;
if (@_) {
my @args = split /\s+/, shift;
return $self->session->datetime->intervalToSeconds(@args);
}
return $self->session->datetime->intervalToSeconds($self->session->form->param($self->get("name")."_interval"),$self->session->form->param($self->get("name")."_units")) || 0;
}

View file

@ -194,16 +194,20 @@ sub displayValue {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns an array or a carriage return ("\n") separated scalar depending upon whether you're returning the values into an array or a scalar.
=head3 value
Optional values to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my @data = $self->session->form->param($self->get("name"));
return wantarray ? @data : join("\n",@data);
my @data = @_ ? @_ : $self->session->form->param($self->get("name"));
return wantarray ? @data : join("\n",@data);
}
#-------------------------------------------------------------------

View file

@ -70,19 +70,23 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns a string filtered to allow only digits, spaces, and these special characters: + - ( ) or it will return undef it the number doesn't validate to those.
=head3 value
An input value to use instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
if ($value =~ /^[x\d \.\-\+\(\)]+$/ and $value =~ /\d/) {
return $value;
}
return undef;
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
if ($value =~ /^[x\d \.\-\+\(\)]+$/ and $value =~ /\d/) {
return $value;
}
return undef;
}
#-------------------------------------------------------------------

View file

@ -98,10 +98,10 @@ Renders and input tag of type radio.
sub toHtml {
my $self = shift;
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->get("value"))));
my $checkedText = ' checked="checked"' if ($self->get("checked"));
my $idText = ' id="'.$self->get('id').'" ' if ($self->get('id'));
return '<input type="radio" name="'.$self->get("name").'" value="'.$value.'"'.$idText.$checkedText.' '.$self->get("extras").' />';
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->get("value")))) || '';
my $checkedText = $self->get("checked") ? ' checked="checked"' : '';
my $idText = $self->get('id') ? ' id="'.$self->get('id').'" ' : '';
return '<input type="radio" name="'.$self->get("name").'" value="'.$value.'"'.$idText.$checkedText.' '.($self->get("extras")||'').' />';
}

View file

@ -93,15 +93,20 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Retrieves a value from a form GET or POST and returns it. If the value comes back as undef, this method will return the defaultValue instead. Note, this is exactly the same method as used by Control since SelectBoxes only support a single value.
=head3 value
Optional values to process (read "return"), instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $formValue = $self->session->form->param($self->get("name"));
my $formValue = @_ ? shift : $self->session->form->param($self->get("name"));
if (defined $formValue) {
return $formValue;
} else {
@ -119,7 +124,7 @@ Renders a select list form control.
sub toHtml {
my $self = shift;
my $output = '<select name="'.$self->get("name").'" size="'.$self->get("size").'" id="'.$self->get('id').'" '.$self->get("extras").'>';
my $output = '<select name="'.($self->get("name")||'').'" size="'.($self->get("size")||'').'" id="'.($self->get('id')||'').'" '.($self->get("extras")||'').'>';
my %options;
tie %options, 'Tie::IxHash';
%options = $self->orderedHash;

View file

@ -95,8 +95,8 @@ Renders a select list form control.
sub toHtml {
my $self = shift;
my $multiple = ' multiple="multiple"' if ($self->get("multiple"));
my $output = '<select name="'.$self->get("name").'" size="'.$self->get("size").'" id="'.$self->get('id').'" '.$self->get("extras").$multiple.'>';
my $multiple = $self->get("multiple") ? ' multiple="multiple"' : '';
my $output = '<select name="'.($self->get("name")||'').'" size="'.($self->get("size")||'').'" id="'.($self->get('id')||'').'" '.($self->get("extras")||'').$multiple.'>';
my %options;
tie %options, 'Tie::IxHash';
%options = $self->orderedHash;

View file

@ -16,6 +16,7 @@ package WebGUI::Form::SelectSlider;
use strict;
use base 'WebGUI::Form::Slider';
use WebGUI::Form::SelectList;
use WebGUI::International;
=head1 NAME
@ -177,16 +178,21 @@ sub getSliderValue {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Retrieves a value from a form GET or POST and returns it. If the value comes
back as undef, this method will return the defaultValue instead. Strip
newlines/carriage returns from the value.
=head2 value
A value to process instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my @args = @_;
my $properties = {
-name => $self->get('name'),
@ -196,7 +202,7 @@ sub getValueFromPost {
-size => 1,
};
return WebGUI::Form::selectList->new($self->session, $properties)->getValueFromPost;
return WebGUI::Form::SelectList->new($self->session, $properties)->getValueFromPost(@args);
}

View file

@ -84,15 +84,26 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Retrieves a value from a form GET or POST and returns it. If the value comes back as undef, this method will return the defaultValue instead. Strip newlines/carriage returns from the value.
=head3 value
An optional value to process, instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $formValue = $self->session->form->param($self->get("name")) if ($self->session->request);
my $formValue;
if (@_) {
$formValue = shift;
}
elsif ($self->session->request) {
$formValue = $self->session->form->param($self->get("name"));
}
if (defined $formValue) {
$formValue =~ tr/\r\n//d;
return $formValue;

View file

@ -99,7 +99,7 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
If the defaultValue is a MySQL time, the value returned by this form element
will be a MySQL time. Note: Will not be adjusted for the user's time zone.
@ -107,10 +107,31 @@ will be a MySQL time. Note: Will not be adjusted for the user's time zone.
Otherwise, the value returned by this form element will be a number of seconds,
adjusted for the user's time zone..
=head3 value
An optional value to process, instead of POST input. This should be in the form of an integer of seconds, 'HH:MM', or 'HH:MM:SS'.
=cut
sub getValueFromPost {
my $self = shift;
if (@_) {
my $value = shift;
if (!$self->get("defaultValue")
|| $self->get("defaultValue") =~ m/^\d+$/
|| !$value
|| $value =~ m/^\d+$/) {
return $self->session->datetime->timeToSeconds($value)-($self->session->user->profileField("timeOffset")*3600);
}
elsif ($value =~ /^\d{2}\D\d{2}(\D\d{2})?$/) {
return $value
}
else {
return undef;
}
}
# This should probably be rewritten as a cascading ternary
if (!$self->get("defaultValue")
|| $self->get("defaultValue") =~ m/^\d+$/

View file

@ -85,7 +85,7 @@ Parses the posted value and tries to make corrections if necessary.
sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
$value =~ tr/\r\n//d;
if ($value =~ /mailto:/) {
return $value;

View file

@ -81,7 +81,7 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 yesNo ( )
Returns either a 1 or 0 representing yes, no.
@ -97,6 +97,32 @@ sub yesNo {
#-------------------------------------------------------------------
=head2 getValueFromPost ( [ value ] )
If value is present, we will process it, otherwise the superclass will handle the request.
=head3 value
An optional value to process, instead of POST input. This should be in the form 1, 0, 'Y' or 'N'. 1 or 0 is returned.
=cut
sub getValueFromPost {
my $self = shift;
my $formValue;
if (@_) {
my $value = shift;
return '' unless length $value; # empty import value?
return ($value =~ /^y/i || $value eq '1') ? 1 : 0;
}
else {
return $self->SUPER::getValueFromPost;
}
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a yes/no question field.

View file

@ -77,20 +77,24 @@ sub definition {
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
=head2 getValueFromPost ( [ value ] )
Returns a validated form post result. If the result does not pass validation, it returns undef instead.
=head3 value
An optional value to use instead of POST input.
=cut
sub getValueFromPost {
my $self = shift;
my $value = $self->session->form->param($self->get("name"));
my $value = @_ ? shift : $self->session->form->param($self->get("name"));
$value =~ tr/\r\n//d;
if ($value =~ /^[A-Z\d\s\-]+$/) {
return $value;
}
return undef;
return $value;
}
return undef;
}
#-------------------------------------------------------------------
@ -102,7 +106,7 @@ Renders a zip code field.
=cut
sub toHtml {
my $self = shift;
my $self = shift;
$self->session->style->setScript($self->session->url->extras('inputCheck.js'),{ type=>'text/javascript' });
$self->set("extras", $self->get('extras') . ' onkeyup="doInputCheck(document.getElementById(\''.$self->get("id").'\'),\'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ- \')"');
return $self->SUPER::toHtml;