From: Kirrily R. <sk...@us...> - 2002-01-16 23:46:15
|
Update of /cvsroot/formmagick/bleadperl-debug/lib/CGI/FormMagick In directory usw-pr-cvs1:/tmp/cvs-serv9403 Modified Files: Validator.pm Removed Files: FAQ.pod Log Message: Removed a some validation methods. Bug still present. Index: Validator.pm =================================================================== RCS file: /cvsroot/formmagick/bleadperl-debug/lib/CGI/FormMagick/Validator.pm,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -r1.1.1.1 -r1.2 *** Validator.pm 2002/01/16 23:30:36 1.1.1.1 --- Validator.pm 2002/01/16 23:46:12 1.2 *************** *** 220,263 **** =head2 $fm->validate_field($fieldname | $fieldref) ! This routine allows you to validate a specific field by hand if you need ! to. It returns a string with the error message if validation fails, or ! the string "OK" on success. - Examples of use: - - This is how you'd probably call it from your script: - - if ($fm->validate_field("credit_card_number") eq "OK")) { } - - FormMagick uses references to a field object, internally: - - if ($fm->validate_field($fieldref) eq "OK")) { } - - (that's so that FormMagick can easily loop through the fields in a page; - you shouldn't need to do that) - - - =begin testing - local $fm->{cgi}; # we're going to mess with the CGI fields - - my $field = { - VALIDATION => 'nonblank', - ID => 'testfield', - LABEL => 'Test Field', - }; - - my $goodcgi = CGI->new( { testfield => 'testing' } ); - $fm->{cgi} = $goodcgi; - is($fm->validate_field($field), "OK", "Test a single field"); - - my $badcgi = CGI->new( { testfield => '' } ); - $fm->{cgi} = $badcgi; - isnt($fm->validate_field($field), "OK", "Test a single field"); - - TODO: { - local $TODO = "Make validate_field accept a fieldname instead of a fieldref"; - is($fm->validate_field("firstname"), "OK", "validate_field accepts field names"); - } - =end testing --- 220,225 ---- =head2 $fm->validate_field($fieldname | $fieldref) ! Returns OK (stub for testing) =end testing *************** *** 265,309 **** sub validate_field { - my ($self, $field) = @_; - - if (not ref $field) { - return undef; # TODO: make this take fieldnames, not just fieldrefs. - } - - my $validation = $field->{VALIDATION}; - my $fieldname = $field->{ID}; - my $fieldlabel = $field->{LABEL} || ""; - my $fielddata = $self->{cgi}->param($fieldname); - - $self->debug('Validating field ' . (defined $fieldname ? $fieldname : '')); - - # just skip everything else if there's no validation to do. - return "OK" unless $validation; - - my @results; - # XXX argh! this split statement requires that we write validators like - # "lengthrange(4, 10), word" like "lengthrange(4,10), word" in order to - # work. Eeek. That's not how this should work. But it was even - # more broken before (I changed a * to a +). - # OTOH, I'm not sure it's fixed now. --srl - - my @validation_routines = split( /,\s+/, $validation); - # $self->debug("Going to perform these validation routines: @validation_routines"); - - foreach my $v (@validation_routines) { - my ($validator, $arg) = $self->parse_validation_routine($v); - my $result = $self->do_validation_routine ($validator, $fielddata, $arg); - - push (@results, $result) if $result ne "OK"; - - # for multiple errors, put semicolons between the errors before - # shoving them in a hash to return. - - if (@results) { - my $formatted_result = join("; ", @results) . "." ; - return $formatted_result if ($formatted_result ne "."); - } - - } return "OK"; } --- 227,230 ---- *************** *** 312,404 **** =head2 $fm->validate_page($number | $name) - - This routine allows you to validate a single page worth of fields. It - can accept either a page number (counting from zero) or a page name. - - This routine returns a hash of errors, with the keys being the names of - fields which have errors and the values being the error messages. An - empty hash means no errors. - - The routine will return undef if it can't figure out what page you want. - - Examples: - - my %errors = $fm->validate_page(3); - my %errors = $fm->validate_page("CreditCardDetails"); - if (%errors) { ... } - - =begin testing - - local $fm->{cgi} = CGI->new( { - firstname => 'testing', # this is known-good - lastname => '', # bad. should be nonblank. - long => "abc", # bad. should be long. - short => "abcdefghijk", # bad. should be short. - } ); - - my @pagenames = ("Personal", "More", "More again"); - foreach (0..2) { - my %errors = $fm->validate_page($_); - is(scalar keys %errors, $_, "Test page '$_' with $_ known errors"); - my %name_errors = $fm->validate_page($pagenames[$_]); - is(scalar keys %name_errors, $_, "Test erroring page '$pagenames[$_]'"); - } - - $fm->{cgi} = CGI->new( { - firstname => 'willy', - lastname => 'wonka', - long => "abcdefg", - short => "abc", - } ); - - foreach (@pagenames) { - my %errors = $fm->validate_page($_); - is(scalar keys %errors, 0, "Test page '$_' without errors"); - } - - ok(!defined $fm->validate_page("abcde"), "Validate page returns undef for a non-page"); - ok(!defined $fm->validate_page(), "Validate page returns undef no args"); ! =end testing =cut sub validate_page { ! my ($self, $param) = @_; ! ! return undef unless defined $param; ! ! my $page_index; # what page number is this? ! ! my $is_integer_like; ! { ! local $^W = 0; ! $is_integer_like = int($param) eq $param; ! } ! if ($is_integer_like) { ! $page_index = $param; ! } else { ! $page_index = $self->get_page_by_name($param); ! } ! return undef unless defined $page_index; ! ! $self->debug("Validating page $page_index."); ! ! my %errors; ! ! my $this_page = $self->form->{PAGES}->[$page_index]; ! ! foreach my $field (@{$this_page->{FIELDS}}) { ! my $result = $self->validate_field($field); ! unless ($result eq "OK") { ! $errors{$field->{LABEL}} = $result; ! } ! } ! ! my $howmany = (keys %errors); ! $self->debug("Done validating page $page_index. Found $howmany errors."); ! ! $self->{errors} = \%errors; ! return %errors; } --- 233,243 ---- =head2 $fm->validate_page($number | $name) ! Returns () (stub for testing) =cut sub validate_page { ! return (); } *************** *** 406,431 **** =head2 $fm->validate_all() - - This routine goes through all the pages that have been visited (using - FormMagick's built-in page stack to keep track of which these are) and - runs C<validate_page()> on each of them. - - Returns a hash of all errors, and set $self->{errors} when done. - - =begin testing - - local $fm->{cgi} = CGI->new( { - firstname => 'testing', # this is known-good - lastname => '', # bad. should be nonblank. - long => "abc", # bad. should be long. - short => "abcdefghijk", # bad. should be short. - } ); ! local $fm->{page_stack} = "0,1"; ! local $fm->{page_number} = 2; - my %errors = $fm->validate_all(); - is(scalar keys %errors, 3, "Test all pages at once."); - =end testing --- 245,251 ---- =head2 $fm->validate_all() ! Returns () (stub for testing) =end testing *************** *** 433,451 **** sub validate_all { ! my ($self) = @_; ! ! my %errors; ! ! $self->debug("Validating all form input."); ! ! # Walk through all the pages on the stack and make sure ! # the data for their fields is still valid ! foreach my $pagenum ( (split(/,/, $self->{page_stack})), $self->{page_number} ) { ! # add the errors from this page to the errors from any other pages ! %errors = ( %errors, $self->validate_page($pagenum) ); ! } ! ! $self->{errors} = \%errors; ! return %errors; } --- 253,257 ---- sub validate_all { ! return (); } --- FAQ.pod DELETED --- |